Name: series-workflowhcfrn Phase: Failed StartedAt: 2026-08-13 19:10:25 +0000 UTC FinishedAt: 2026-08-13 19:13:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhcfrn[0] Phase: Succeeded StartedAt: 2026-08-13 19:10:25 +0000 UTC FinishedAt: 2026-08-13 19:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhcfrn[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 19:10:25 +0000 UTC FinishedAt: 2026-08-13 19:12:59 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMsIHNlbGZ0ZXN0cywgRG9jdW1lbnRhdGlvbiwgYW5kIE1BSU5UQUlORVJTLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRmMmJhNThiMjNjZTM5OTA0YTFmNjdkZGNhYjdjMjk5NGNmNWE3YjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxOToxMjoxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG5pbmRleCBjMTZjYTE2M2I1NWUzLi4xNTY0YjE2OTk0YWQ2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG5AQCAtMjI4LDEyICYjNDM7MjI4LDE4IEBAIFVuaXQgdGVzdGluZ1xuID09PT09PT09PT09PVxuIFRoaXMgZmlsZTo6XG4gXG4tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiYjNDM7IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG4gXG4taGFzIHRoZSBmb2xsb3dpbmcgbmV3IGNhbGxzIHRvIGV4ZXJjaXNlIHRoZSBuZXcgcGluKigpIHdyYXBwZXIgZnVuY3Rpb25zOlxuJiM0Mztjb250YWlucyB0aGUgZm9sbG93aW5nIHRlc3QgY2FzZXMgdG8gZXhlcmNpc2UgcGluX3VzZXJfcGFnZXMqKCk6XG4gXG4tKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpXG4tKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYilcbiYjNDM7KiBwaW5fdXNlcl9wYWdlcyB2aWEgUElOX0JBU0lDX1RFU1RcbiYjNDM7KiBwaW5fdXNlcl9wYWdlc19mYXN0IHZpYSBQSU5fRkFTVF9CRU5DSE1BUktcbiYjNDM7KiBwaW5fdXNlcl9wYWdlc19sb25ndGVybSB2aWEgUElOX0xPTkdURVJNX0JFTkNITUFSS1xuJiM0MztcbiYjNDM7UnVuIHdpdGg6OlxuJiM0MztcbiYjNDM7ICBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tXG4mIzQzOyAgLi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBcbiBcbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAwZjUxM2I0MmJjMTg2Li44NjE1MDRmYTJlMzE4IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTcwMzEsOCAmIzQzOzE3MDMxLDkgQEAgVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxuIEY6XHRtbS9ndXAuY1xuIEY6XHRtbS9ndXBfdGVzdC5jXG4gRjpcdG1tL2d1cF90ZXN0LmhcbiYjNDM7RjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4mIzQzO0Y6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuLUY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKVxuIE06XHRBbmRyZXcgTW9ydG9uIFx1MDAzY2FrcG1AbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbkBAIC0xNzEzNSw2ICYjNDM7MTcxMzYsNyBAQCBGOlx0bW0vbWVtb3J5LXRpZXJzLmNcbiBGOlx0bW0vcGFnZV9pZGxlLmNcbiBGOlx0bW0vcGdhbGxvYy10cmFjay5oXG4gRjpcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcbiYjNDM7RjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5jIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk5YTE1M2VmYThmYmZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbkBAIC0wLDAgJiM0MzsxLDEwNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZmlsZV91dGlscy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcdHNzaXplX3QgbnVtcmVhZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbiYjNDM7XHRpZiAobnVtcmVhZCBcdTAwM2MgMSkge1xuJiM0MztcdFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiAtZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnVmW251bXJlYWRdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuJiM0MztcdHNzaXplX3QgbnVtd3JpdHRlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJ1ZmxlbiBcdTAwM2MgMilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuJiM0MztcdGlmIChmZCA9PSAtMSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbiYjNDM7XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLXNhdmVkX2Vycm5vO1xuJiM0MztcbiYjNDM7XHRpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNoYXIgYnVmWzIxXTtcbiYjNDM7XHRjaGFyICplbmQ7XG4mIzQzO1xuJiM0MztcdGlmICghbnVtKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJ1ZlswXSBcdTAwM2MgJiMzOTswJiMzOTsgfHwgYnVmWzBdIFx1MDAzZSAmIzM5OzkmIzM5OylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRlcnJubyA9IDA7XG4mIzQzO1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuJiM0MztcdGlmIChlcnJubylcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdGlmICgqZW5kID09ICYjMzk7XFxuJiMzOTspXG4mIzQzO1x0XHRlbmQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRpZiAoKmVuZCAhPSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdCpudW0gPSB2YWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsyMV07XG4mIzQzO1xuJiM0MztcdHNwcmludGYoYnVmLCBcJiMzNDslbHVcJiMzNDssIG51bSk7XG4mIzQzO1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSAmIzQzOyAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XG4mIzQzO1x0cmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmggYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTBkYWE4MmMyYjJiNFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxuQEAgLTAsMCAmIzQzOzEsMTMgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7I2lmbmRlZiBfX01NX0ZJTEVfVVRJTFNfSF9fXG4mIzQzOyNkZWZpbmUgX19NTV9GSUxFX1VUSUxTX0hfX1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkZGVmLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbiYjNDM7aW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSk7XG4mIzQzO2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xuJiM0MztpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xuJiM0MztcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5zaW1pbGFyaXR5IGluZGV4IDg3JVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5pbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbkBAIC04LDEyICYjNDM7OCwxOCBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ZpbGVfdXRpbHMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFRIUF9TWVNGUyBcJiMzNDsvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS9cJiMzNDtcbiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0XG4mIzQzO1xuJiM0MzsjaWZuZGVmIEFSUkFZX1NJWkVcbiYjNDM7I2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNldHRpbmdzX3N0YWNrW01BWF9TRVRUSU5HU19ERVBUSF07XG4gc3RhdGljIGludCBzZXR0aW5nc19pbmRleDtcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5ncztcbkBAIC00OCw2ICYjNDM7NTQsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG1lbV9lbmFibGVkX3N0cmluZ3NbXSA9IHtcbiBcdE5VTExcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBwcmludF9maWxlX2FjY2Vzc19lcnJvcihjb25zdCBjaGFyICpwYXRoLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cHJpbnRmKFwmIzM0OyMgJXM6ICVzICglZClcXG5cJiMzNDssIHBhdGgsIHN0cmVycm9yKC1yZXQpLCAtcmV0KTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbkBAIC02MSw4ICYjNDM7NzIsOSBAQCBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pXG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbiBcbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XG4tXHRcdHBlcnJvcihwYXRoKTtcbiYjNDM7XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuIFxuQEAgLTEwMywxMiAmIzQzOzExNSwxNyBAQCB2b2lkIHRocF93cml0ZV9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKVxuIFx0XHRwcmludGYoXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSAmIzQzOyAxKTtcbiYjNDM7XHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgJiM0MzsgMSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG51bTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTIFwmIzM0OyVzXCYjMzQ7LCBuYW1lKTtcbkBAIC0xMTYsNyAmIzQzOzEzMywxMyBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRwcmludGYoXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbiYjNDM7XHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZudW0pO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnVtO1xuIH1cbiBcbiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG5AQCAtMTI5LDcgJiM0MzsxNTIsMTEgQEAgdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxuIFx0XHRwcmludGYoXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHdyaXRlX251bShwYXRoLCBudW0pO1xuJiM0MztcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuQEAgLTE1Nyw4ICYjNDM7MTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG4gXHRcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWRcJiMzNDspLFxuIFx0XHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cJiMzNDspLFxuIFx0fTtcbi1cdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxuLVx0XHRzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCk7XG4mIzQzO1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbiYjNDM7XHRcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNnNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX09SREVSUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKSB7XG5AQCAtMjA4LDggJiM0MzsyNDIsMTUgQEAgdm9pZCB0aHBfd3JpdGVfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG4gXHR0aHBfd3JpdGVfbnVtKFwmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCYjMzQ7LCBraHVnZXBhZ2VkLVx1MDAzZW1heF9wdGVzX3NoYXJlZCk7XG4gXHR0aHBfd3JpdGVfbnVtKFwmIzM0O2todWdlcGFnZWQvcGFnZXNfdG9fc2NhblwmIzM0Oywga2h1Z2VwYWdlZC1cdTAwM2VwYWdlc190b19zY2FuKTtcbiBcbi1cdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxuLVx0XHR3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4mIzQzO1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbiYjNDM7XHRcdGludCByZXQgPSB3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcbiYjNDM7XHRcdFx0XHQgICAgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xuJiM0MztcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoISgoMSBcdTAwM2NcdTAwM2MgaSkgXHUwMDI2IG9yZGVycykpXG5AQCAtMzA3LDggJiM0MzszNDgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKVxuIFx0XHR9XG4gXG4gXHRcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRvcmRlcnMgfD0gMVVMIFx1MDAzY1x1MDAzYyBpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRpZiAocmV0ICE9IC1FTk9FTlQpIHtcbiYjNDM7XHRcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvcmRlcnMgfD0gMVVMIFx1MDAzY1x1MDAzYyBpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIG9yZGVycztcbkBAIC0zODIsOCAmIzQzOzQzMCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heClcbiBcdFx0aWYgKHNzY2FuZihlbnRyeS1cdTAwM2VkX25hbWUsIFwmIzM0O2h1Z2VwYWdlcy0lenVrQlwmIzM0OywgXHUwMDI2a2IpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdHNpemVzW2NvdW50JiM0MzsmIzQzO10gPSBrYiAqIDEwMjQ7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1tJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAga2IpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxuXCYjMzQ7LCBrYik7XG4gXHR9XG4gXHRjbG9zZWRpcihkaXIpO1xuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQyNSwyOCAmIzQzOzQ3Miw0OSBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3N5c2ZzX3BhdGgoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcJiMzNDtucl9odWdlcGFnZXNcJiMzNDspO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5yO1xuIH1cbiBcbiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcJiMzNDtucl9odWdlcGFnZXNcJiMzNDspO1xuIFxuLVx0d3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuJiM0MztcdHJldCA9IHdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiB9XG4gXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXCYjMzQ7ZnJlZV9odWdlcGFnZXNcJiMzNDspO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5yO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBfX2h1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTUwMiw3ICYjNDM7NTcwLDggQEAgdW5zaWduZWQgbG9uZyBodWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgbnIsIHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSxcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAobnJfZW5hYmxlZCBcdTAwM2UgbWF4KSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2RldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cJiMzNDssIG5yX2VuYWJsZWQsIG1heCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG5yX2VuYWJsZWQsIG1heCk7XG4gXHRcdG5yX2VuYWJsZWQgPSBtYXg7XG4gXHR9XG4gXG5AQCAtNTc0LDggJiM0Mzs2NDMsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX3NpZ2hhbmRsZXIoaW50IHNpZylcbiB7XG4mIzQzO1x0KHZvaWQpc2lnO1xuJiM0MztcbiBcdC8qIGV4aXQoKSB3aWxsIGludm9rZSB0aGUgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQgaGFuZGxlci4gKi9cbi1cdGV4aXQoS1NGVF9GQUlMKTtcbiYjNDM7XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gfVxuIFxuIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuc2ltaWxhcml0eSBpbmRleCAxMDAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuaW5kZXggMTQ0NmE2NTllNTQwOC4uMTU0ZDc0MGJlMDJlOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbkBAIC0zLDMgJiM0MzszLDQgQEAgc2xhYmluZm9cbiBwYWdlLXR5cGVzXG4gcGFnZV9vd25lcl9zb3J0XG4gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7Z3VwX2JlbmNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggODU4MTg2YTZlZWZkYi4uZjIwYTMyZDhjYzIyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTMsMTMgJiM0MzszLDE1IEBAXG4gI1xuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyXG4mIzQzO0JVSUxEX1RBUkdFVFMgJiM0Mzs9IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcbiYjNDM7R1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jXG4gXG4tQ0ZMQUdTICYjNDM7PSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtcHRocmVhZFxuJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWRcbiBMREZMQUdTICYjNDM7PSAkKExJQlMpIC1wdGhyZWFkXG4gXG4gYWxsOiAkKEJVSUxEX1RBUkdFVFMpXG5AQCAtMjIsOCAmIzQzOzI0LDExIEBAICQoTElCUyk6XG4gJTogJS5jXG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4mIzQzO2d1cF9iZW5jaDogJChHVVBfQkVOQ0hfT0JKUykgJChMSUJTKVxuJiM0MztcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKEdVUF9CRU5DSF9PQkpTKSAkKExERkxBR1MpXG4mIzQzO1xuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7XHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcbiBcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxuIFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXG5zaW1pbGFyaXR5IGluZGV4IDUwJVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xucmVuYW1lIHRvIHRvb2xzL21tL2d1cF9iZW5jaC5jXG5pbmRleCAzZjg0MWE5NmY4NzA2Li43NTM2OWIyNjc0YTk0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbkBAIC0xMCwxMSAmIzQzOzEwLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbW0vZ3VwX3Rlc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBNQiAoMVVMIFx1MDAzY1x1MDAzYyAyMClcbiBcbkBAIC0zOCwxMiAmIzQzOzM3LDYgQEAgc3RhdGljIGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpXG4gXHRcdHJldHVybiBcJiMzNDtQSU5fRkFTVF9CRU5DSE1BUktcJiMzNDs7XG4gXHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XG4gXHRcdHJldHVybiBcJiMzNDtQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXCYjMzQ7O1xuLVx0Y2FzZSBHVVBfQkFTSUNfVEVTVDpcbi1cdFx0cmV0dXJuIFwmIzM0O0dVUF9CQVNJQ19URVNUXCYjMzQ7O1xuLVx0Y2FzZSBQSU5fQkFTSUNfVEVTVDpcbi1cdFx0cmV0dXJuIFwmIzM0O1BJTl9CQVNJQ19URVNUXCYjMzQ7O1xuLVx0Y2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDpcbi1cdFx0cmV0dXJuIFwmIzM0O0RVTVBfVVNFUl9QQUdFU19URVNUXCYjMzQ7O1xuIFx0fVxuIFx0cmV0dXJuIFwmIzM0O1Vua25vd24gY29tbWFuZFwmIzM0OztcbiB9XG5AQCAtNTMsMzkgJiM0Mzs0NiwyOSBAQCB2b2lkICpndXBfdGhyZWFkKHZvaWQgKmRhdGEpXG4gXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0gKihzdHJ1Y3QgZ3VwX3Rlc3QgKilkYXRhO1xuIFx0aW50IGksIHN0YXR1cztcbiBcbi1cdC8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovXG4tXHRpZiAoKGNtZCA9PSBQSU5fRkFTVF9CRU5DSE1BUkspIHx8IChjbWQgPT0gR1VQX0ZBU1RfQkVOQ0hNQVJLKSB8fFxuLVx0ICAgICAoY21kID09IFBJTl9MT05HVEVSTV9CRU5DSE1BUkspKSB7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlcGVhdHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0XHRicmVhaztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXBlYXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Z3VwLnNpemUgPSBzaXplO1xuJiM0MztcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4mIzQzO1x0XHRpZiAoc3RhdHVzKSB7XG4mIzQzO1x0XHRcdGludCBlcnIgPSBlcnJubztcbiBcbiBcdFx0XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1wmIzM0Oyxcbi1cdFx0XHRcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbi1cdFx0XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuLVx0XHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXCYjMzQ7LCBndXAuc2l6ZSk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyVzIGlvY3RsIGZhaWxlZDogJXNcXG5cJiMzNDssIGNtZF90b19zdHIoY21kKSxcbiYjNDM7XHRcdFx0XHRzdHJlcnJvcihlcnIpKTtcbiBcdFx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4mIzQzO1x0XHRcdHJldHVybiBkYXRhO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGdvdG8gcmV0dXJuXztcbiBcbiBcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7JXM6IGRvbmVcXG5cJiMzNDssIGNtZF90b19zdHIoY21kKSk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzXCYjMzQ7LFxuJiM0MztcdFx0XHRjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbiYjNDM7XHRcdFx0Z3VwLnB1dF9kZWx0YV91c2VjKTtcbiBcdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7VHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcblwmIzM0OywgZ3VwLnNpemUpO1xuJiM0MztcdFx0XHRwcmludGYoXCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXCYjMzQ7LCBndXAuc2l6ZSk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuIFx0fVxuIFxuLXJldHVybl86XG4tXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFwmIzM0O2lvY3RsIHN0YXR1cyAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbkBAIC05MywzOCAmIzQzOzc2LDIxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiB7XG4gXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4gXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcbi1cdGludCBmbGFncyA9IE1BUF9QUklWQVRFO1xuJiM0MztcdGludCBmbGFncyA9IE1BUF9QUklWQVRFLCBzdGFydGVkX3RocmVhZHMgPSAwO1xuIFx0Y2hhciAqZmlsZSA9IFwmIzM0Oy9kZXYvemVyb1wmIzM0Oztcbi1cdGJvb2wgaHVnZXRsYiA9IGZhbHNlO1xuJiM0MztcdGJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTtcbiYjNDM7XHR2b2lkICp0aHJlYWRfcmVzdWx0O1xuIFx0cHRocmVhZF90ICp0aWQ7XG4gXHRjaGFyICpwO1xuIFxuLVx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7bTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O206cjpuOkY6Zjphajp0VEx1d1dTSFwmIzM0OykpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJiMzOTthJiMzOTs6XG4gXHRcdFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7YiYjMzk7OlxuLVx0XHRcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7TCYjMzk7OlxuIFx0XHRcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtjJiMzOTs6XG4tXHRcdFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEdW1wIHBhZ2UgMCAoaW5kZXggMSkuIE1heSBiZSBvdmVycmlkZGVuIGxhdGVyLCBieVxuLVx0XHRcdCAqIHVzZXImIzM5O3Mgbm9uLW9wdGlvbiBhcmd1bWVudHMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuIFwmIzM0O2RvXG4tXHRcdFx0ICogbm90aGluZ1wmIzM0Oy5cbi1cdFx0XHQgKi9cbi1cdFx0XHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7cCYjMzk7OlxuLVx0XHRcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xuLVx0XHRcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7RiYjMzk7OlxuIFx0XHRcdC8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovXG4gXHRcdFx0Z3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApO1xuQEAgLTE0MSw3ICYjNDM7MTA3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICYjMzk7biYjMzk7OlxuIFx0XHRcdG5yX3BhZ2VzID0gYXRvaShvcHRhcmcpO1xuIFx0XHRcdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0XHRcdG5yX3BhZ2VzID0gc2l6ZSAvIHBzaXplKCk7XG4mIzQzO1x0XHRcdFx0bnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O3QmIzM5OzpcbiBcdFx0XHR0aHAgPSAxO1xuQEAgLTE0OSw5ICYjNDM7MTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICYjMzk7VCYjMzk7OlxuIFx0XHRcdHRocCA9IDA7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtVJiMzOTs6XG4tXHRcdFx0Y21kID0gR1VQX0JBU0lDX1RFU1Q7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTt1JiMzOTs6XG4gXHRcdFx0Y21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTE3Myw1MiAmIzQzOzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0aHVnZXRsYiA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZXhpdCgxKTtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKG9wdGluZCBcdTAwM2MgYXJnYykge1xuLVx0XHRpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV4YW1wbGU6XG4tXHRcdCAqXG4tXHRcdCAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxXG4tXHRcdCAqXG4tXHRcdCAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTdcbi1cdFx0ICovXG4tXG4tXHRcdHdoaWxlICgob3B0aW5kIFx1MDAzYyBhcmdjKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cbi1cdFx0XHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSAmIzQzOyAxO1xuLVxuLVx0XHRcdGd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDtcbi1cdFx0XHRleHRyYV9hcmdfY291bnQmIzQzOyYjNDM7O1xuLVx0XHRcdG9wdGluZCYjNDM7JiM0Mzs7XG4tXHRcdH1cbiYjNDM7XHRpZiAob3B0aW5kICE9IGFyZ2MpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtVbmV4cGVjdGVkIGFyZ3VtZW50ICYjMzk7JXMmIzM5O1xcblwmIzM0OywgYXJndltvcHRpbmRdKTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4gXHR9XG4gXG4tXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuJiM0MztcdGlmIChnZXR1aWQoKSkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoaHVnZXRsYikge1xuIFx0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4gXG4tXHRcdGlmICghaHBfc2l6ZSlcbi1cdFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtIdWdlVExCIGlzIHVuYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGlmICghaHBfc2l6ZSkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Q291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRzaXplID0gKHNpemUgJiM0MzsgaHBfc2l6ZSAtIDEpIFx1MDAyNiB+KGhwX3NpemUgLSAxKTtcbi1cdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuLVx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XG4tXG4gXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xuLVx0aWYgKGZpbGVkIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdGlmIChmaWxlZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiBcbiBcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzO1xuIFx0aWYgKHdyaXRlKVxuQEAgLTIyNywyNiAmIzQzOzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4gXHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4gXHRcdHN3aXRjaCAoZXJybm8pIHtcbi1cdFx0Y2FzZSBFQUNDRVM6XG4tXHRcdFx0aWYgKGdldHVpZCgpKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwmIzM0Oyk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgRU5PRU5UOlxuIFx0XHRcdGlmIChvcGVuZGlyKFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnXCYjMzQ7KSA9PSBOVUxMKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwmIzM0Oyk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcblwmIzM0Oyk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLFxuJiM0MztcdFx0XHRcdHN0cmVycm9yKGVycm5vKSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuLVx0XHRrc2Z0X2V4aXRfcGFzcygpO1xuJiM0MztcdFx0Z290byBlcnJfY2xvc2VfZmlsZWQ7XG4gXHR9XG4gXG4gXHRwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgZmlsZWQsIDApO1xuLVx0aWYgKHAgPT0gTUFQX0ZBSUxFRClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O21tYXA6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdGlmIChwID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDttbWFwOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Nsb3NlX2d1cF9mZDtcbiYjNDM7XHR9XG4gXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7XG4gXG4gXHRpZiAodGhwID09IDEpXG5AQCAtMjU1LDIxICYjNDM7MjA1LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFxuIFx0LyogRmF1bHQgdGhlbSBpbiBoZXJlLCBmcm9tIHVzZXIgc3BhY2UuICovXG4tXHRmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gcHNpemUoKSlcbiYjNDM7XHRmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gZ2V0cGFnZXNpemUoKSlcbiBcdFx0cFswXSA9IDA7XG4gXG4gXHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7XG4tXHRhc3NlcnQodGlkKTtcbiYjNDM7XHRpZiAoIXRpZCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSAlZCB0aHJlYWRzOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0bnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRnb3RvIGVycl91bm1hcDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRpZFtpXSwgTlVMTCwgZ3VwX3RocmVhZCwgXHUwMDI2Z3VwKTtcbi1cdFx0YXNzZXJ0KHJldCA9PSAwKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZDogJXNcXG5cJiMzNDssIHN0cmVycm9yKHJldCkpO1xuJiM0MztcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHN0YXJ0ZWRfdGhyZWFkcyYjNDM7JiM0Mzs7XG4gXHR9XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudGhyZWFkczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhcnRlZF90aHJlYWRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgXHUwMDI2dGhyZWFkX3Jlc3VsdCk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IocmV0KSk7XG4mIzQzO1x0XHRcdHRocmVhZF9lcnJvciA9IHRydWU7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpXG4mIzQzO1x0XHRcdHRocmVhZF9lcnJvciA9IHRydWU7XG4gXHR9XG4gXG4gXHRmcmVlKHRpZCk7XG4gXG4tXHRrc2Z0X2V4aXRfcGFzcygpO1xuJiM0MztcdGlmICh0aHJlYWRfZXJyb3IpXG4mIzQzO1x0XHRnb3RvIGVycl91bm1hcDtcbiYjNDM7XG4mIzQzO1x0bXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpO1xuJiM0MztcdGNsb3NlKGd1cF9mZCk7XG4mIzQzO1x0Y2xvc2UoZmlsZWQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3VubWFwOlxuJiM0MztcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcbiYjNDM7ZXJyX2Nsb3NlX2d1cF9mZDpcbiYjNDM7XHRjbG9zZShndXBfZmQpO1xuJiM0MztlcnJfY2xvc2VfZmlsZWQ6XG4mIzQzO1x0Y2xvc2UoZmlsZWQpO1xuJiM0MztcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCAyZDUzNjYxOTZlMzA5Li45YzAzNjI0ZmQyOTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMzcsNyAmIzQzOzM3LDggQEAgZW5kaWZcbiAjIExETElCUy5cbiBNQUtFRkxBR1MgJiM0Mzs9IC0tbm8tYnVpbHRpbi1ydWxlc1xuIFxuLUNGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4mIzQzO0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXG4mIzQzO0NGTEFHUyAmIzQzOz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcbiBDRkxBR1MgJiM0Mzs9IC1XdW5yZWFjaGFibGUtY29kZVxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxuIFxuQEAgLTU3LDggJiM0Mzs1OCw4IEBAIGVuZGlmXG4gXG4gVEVTVF9HRU5fRklMRVMgPSBjb3dcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gY29tcGFjdGlvbl90ZXN0XG4mIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwX2xvbmd0ZXJtXG4tVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGd1cF90ZXN0XG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGhtbS10ZXN0c1xuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLW1hZHZpc2VcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1tbWFwXG5AQCAtMTg3LDggJiM0MzsxODgsMTAgQEAgVEVTVF9GSUxFUyAmIzQzOz0gd3JpdGVfaHVnZXRsYl9tZW1vcnkuc2hcbiBcbiBpbmNsdWRlIC4uL2xpYi5ta1xuIFxuLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuLSQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuJiM0MzskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcbiYjNDM7XHRcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuJiM0MzskKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcbiYjNDM7XHRcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuIFxuICQoT1VUUFVUKS91ZmZkLXN0cmVzczogdWZmZC1jb21tb24uY1xuICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmNcbkBAIC0yMTcsNyAmIzQzOzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgJiM0Mzs9IC1tMzIgLW14c2F2ZVxuICQoQklOQVJJRVNfMzIpOiBMRExJQlMgJiM0Mzs9IC1scnQgLWxkbCAtbG1cbiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4mIzQzO1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSlcbiBlbmRpZlxuIFxuQEAgLTIyNiw3ICYjNDM7MjI5LDcgQEAgJChCSU5BUklFU182NCk6IENGTEFHUyAmIzQzOz0gLW02NCAtbXhzYXZlXG4gJChCSU5BUklFU182NCk6IExETElCUyAmIzQzOz0gLWxydCAtbGRsXG4gJChCSU5BUklFU182NCk6ICQoT1VUUFVUKS8lXzY0OiAlLmNcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuLVx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS02NCwkKHQpKSkpXG4gZW5kaWZcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG5pbmRleCAzMGQ0YWNlNzE1NWFlLi5iM2Y1Mzc3MTE5Y2I4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG5AQCAtMTUsOSAmIzQzOzE1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBNQVBfU0laRV9NQlx0MTAwXG4gI2RlZmluZSBNQVBfU0laRVx0KE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuaW5kZXggOGFhNTI0OWQ5YmVmNi4uMzI2NGE4Mjg1NzViZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbmluZGV4IDQ1Yjg0ZjdiMzY0ZTAuLjI4OWFlZDJlYmFjMDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbkBAIC0yNSw3ICYjNDM7MjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gdWludDY0X3QgcGFnZV9zaXplO1xuIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTIxLDcgJiM0MzsyMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3Vpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vcGlkZmQvcGlkZmQuaFwmIzM0O1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40YzllMTRkYmI0MzRhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xuQEAgLTAsMCAmIzQzOzEsMzI5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIC8vIFVzZSBsbDY0XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuJiM0MztcbiYjNDM7LyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovXG4mIzQzOyNkZWZpbmUgRk9MTF9XUklURVx0MHgwMVx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXG4mIzQzO1xuJiM0MzsvKiBQYWdlIGNvdW50cyBleGVyY2lzaW5nIHNpbmdsZSwgVEhQLWJhdGNoLCBwYXJ0aWFsLCBhbmQgZnVsbC1tYXBwaW5nIEdVUC4gKi9cbiYjNDM7c3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBHVVBfVEVTVF9GSUxFIFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XCYjMzQ7XG4mIzQzOyNkZWZpbmUgTlJfSFVHRV9QQUdFUyAxMjhcbiYjNDM7XG4mIzQzO0hVR0VUTEJfU0VUVVBfREVGQVVMVF9QQUdFUyhOUl9IVUdFX1BBR0VTKVxuJiM0MztcbiYjNDM7RklYVFVSRShndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdGludCBndXBfZmQ7XG4mIzQzO1x0Y2hhciAqYWRkcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRib29sIHRocDtcbiYjNDM7XHRib29sIGh1Z2V0bGI7XG4mIzQzO1x0Ym9vbCB3cml0ZTtcbiYjNDM7XHRib29sIHNoYXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGUpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfdGhwKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IHRydWUsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF90aHApXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gdHJ1ZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfaHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IHRydWUsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfaHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IHRydWUsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfdGhwKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IHRydWUsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfdGhwKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IHRydWUsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfaHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IHRydWUsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKGd1cF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURTtcbiYjNDM7XHRpbnQgemVyb19mZDtcbiYjNDM7XHRjaGFyICpwO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZXNpemUgPSAxMjggKiBNQjtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNlaHVnZXRsYikge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghaHBfc2l6ZSlcbiYjNDM7XHRcdFx0U0tJUChyZXR1cm4sIFwmIzM0O0h1Z2VUTEIgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGh1Z2V0bGJfZnJlZV9kZWZhdWx0X3BhZ2VzKCkgXHUwMDNjIE5SX0hVR0VfUEFHRVMpXG4mIzQzO1x0XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdHNlbGYtXHUwMDNlc2l6ZSA9IE5SX0hVR0VfUEFHRVMgKiBocF9zaXplO1xuJiM0MztcdFx0bW1hcF9mbGFncyB8PSAoTUFQX0hVR0VUTEIgfCBNQVBfQU5PTllNT1VTKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZXNoYXJlZClcbiYjNDM7XHRcdG1tYXBfZmxhZ3MgPSAobW1hcF9mbGFncyBcdTAwMjYgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7XG4mIzQzO1xuJiM0MztcdC8qIHplcm9fZmQgaGFzIHRvIGJlIFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xuJiM0MztcdHplcm9fZmQgPSBvcGVuKFwmIzM0Oy9kZXYvemVyb1wmIzM0OywgT19SRFdSKTtcbiYjNDM7XHRBU1NFUlRfR0UoemVyb19mZCwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIGd1cF9mZCBoYXMgdG8gYmUgXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXG4mIzQzO1x0c2VsZi1cdTAwM2VndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4mIzQzO1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZ3VwX2ZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VhZGRyID0gbW1hcChOVUxMLCBzZWxmLVx1MDAzZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHRcdCAgbW1hcF9mbGFncywgemVyb19mZCwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShzZWxmLVx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBlcnJubztcbiYjNDM7XG4mIzQzO1x0XHRjbG9zZSh6ZXJvX2ZkKTtcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDttbWFwIGZhaWxlZDogJXNcJiMzNDssIHN0cmVycm9yKGVycikpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZSh6ZXJvX2ZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNldGhwKVxuJiM0MztcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4mIzQzO1x0ZWxzZSBpZiAoIXZhcmlhbnQtXHUwMDNlaHVnZXRsYilcbiYjNDM7XHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4mIzQzO1xuJiM0MztcdGZvciAocCA9IHNlbGYtXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyXG4mIzQzO1x0XHRcdCYjNDM7IHNlbGYtXHUwMDNlc2l6ZTsgcCAmIzQzOz0gcHNpemUoKSlcbiYjNDM7XHRcdHBbMF0gPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKGd1cF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbiYjNDM7XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9ndXBfY21kKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcbiYjNDM7XHRcdFx0IEZJWFRVUkVfREFUQShndXBfdGVzdCkgKnNlbGYsXG4mIzQzO1x0XHRcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxuJiM0MztcdFx0XHQgdW5zaWduZWQgbG9uZyBjb21tYW5kLFxuJiM0MztcdFx0XHQgdW5zaWduZWQgaW50IHRlc3RfZmxhZ3MsXG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgd2hpY2hfcGFnZSlcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0ge1xuJiM0MztcdFx0XHQuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcixcbiYjNDM7XHRcdFx0LnNpemUgPSBzZWxmLVx1MDAzZXNpemUsXG4mIzQzO1x0XHRcdC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXHUwMDNjIDAgP1xuJiM0MztcdFx0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLFxuJiM0MztcdFx0XHQuZ3VwX2ZsYWdzID0gdmFyaWFudC1cdTAwM2V3cml0ZSA/IEZPTExfV1JJVEUgOiAwLFxuJiM0MztcdFx0XHQudGVzdF9mbGFncyA9IHRlc3RfZmxhZ3MsXG4mIzQzO1x0XHRcdC53aGljaF9wYWdlcyA9IHsgd2hpY2hfcGFnZSB9LFxuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIGNvbW1hbmQsIFx1MDAyNmd1cCksIDApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0JBU0lDX1RFU1QsIDAsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCwgMCwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgZHVtcF91c2VyX3BhZ2VzX3dpdGhfZ2V0KVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgMCwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgZHVtcF91c2VyX3BhZ2VzX3dpdGhfcGluKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBEVU1QX1VTRVJfUEFHRVNfVEVTVCxcbiYjNDM7XHRcdCAgICBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTiwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0ZBU1RfQkVOQ0hNQVJLLCAwLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19mYXN0KVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fRkFTVF9CRU5DSE1BUkssIDAsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLLCAwLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChkdW1wX3VzZXJfcGFnZXNfc3BhcnNlX2luZGljZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XG4mIzQzO1x0aW50IHplcm9fZmQsIGd1cF9mZDtcbiYjNDM7XHRjaGFyICphZGRyLCAqcDtcbiYjNDM7XG4mIzQzO1x0emVyb19mZCA9IG9wZW4oXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7LCBPX1JEV1IpO1xuJiM0MztcdEFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuJiM0MztcdEFTU0VSVF9HRShndXBfZmQsIDApO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgemVyb19mZCwgMCk7XG4mIzQzO1x0Y2xvc2UoemVyb19mZCk7XG4mIzQzO1x0QVNTRVJUX05FKGFkZHIsIE1BUF9GQUlMRUQpO1xuJiM0MztcbiYjNDM7XHRtYWR2aXNlKGFkZHIsIHNpemUsIE1BRFZfSFVHRVBBR0UpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHAgPSBhZGRyOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyAodW5zaWduZWQgbG9uZylhZGRyICYjNDM7IHNpemU7XG4mIzQzO1x0ICAgICBwICYjNDM7PSBwc2l6ZSgpKVxuJiM0MztcdFx0cFswXSA9IDA7XG4mIzQzO1xuJiM0MztcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbiYjNDM7XHRndXAuc2l6ZSA9IHNpemU7XG4mIzQzO1x0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gc2l6ZSAvIHBzaXplKCk7XG4mIzQzO1x0Z3VwLmd1cF9mbGFncyA9IEZPTExfV1JJVEU7XG4mIzQzO1x0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbiYjNDM7XHRndXAud2hpY2hfcGFnZXNbMV0gPSAyMDtcbiYjNDM7XHRndXAud2hpY2hfcGFnZXNbMl0gPSAweDEwMDE7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShpb2N0bChndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCBcdTAwMjZndXApLCAwKTtcbiYjNDM7XG4mIzQzO1x0bXVubWFwKGFkZHIsIHNpemUpO1xuJiM0MztcdGNsb3NlKGd1cF9mZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XHRjaGFyICpmaWxlID0gXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuJiM0MztcdGlmIChmZCA9PSAtMSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFQUNDRVMpXG4mIzQzO1x0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVOT0VOVCkge1xuJiM0MztcdFx0XHRESVIgKmRlYnVnZnMgPSBvcGVuZGlyKFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghZGVidWdmcykge1xuJiM0MztcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O01vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGNsb3NlZGlyKGRlYnVnZnMpO1xuJiM0MztcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O0NoZWNrIENPTkZJR19HVVBfVEVTVCBpbiBrZXJuZWwgY29uZmlnXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdGVzdF9oYXJuZXNzX3J1bihhcmdjLCBhcmd2KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbkBAIC0yOSw3ICYjNDM7MjksNiBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IGUyNjQyZWNhMGQwMmIuLmZhMWE2NTE5NjNmZDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbkBAIC0xMCw5ICYjNDM7MTAsNiBAQFxuICAqIGJ1Z3MuXG4gICovXG4gXG4tI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbi1cbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbkBAIC0zMyw2ICYjNDM7MzAsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiBcbiAvKlxuICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24mIzM5O3QgZXhwb3J0ZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5AQCAtMTQsNyAmIzQzOzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBNSU5fRlJFRV9QQUdFU1x0MjBcbiAjZGVmaW5lIE5SX0hVR0VfUEFHRVNcdDEwXHQvKiBjb21tb24gbnVtYmVyIG9mIHBhZ2VzIHRvIG1hcC9hbGxvY2F0ZSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcbmluZGV4IDBmMmFhZDFiN2RiZDYuLmE0NThiZWNmNTgzMjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcbkBAIC0xOCw3ICYjNDM7MTgsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxuICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuaW5kZXggZWQzZDkyZTg2MmQ4Ny4uOWI3MjRhZjY2ZTkzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcbkBAIC0yNiw3ICYjNDM7MjYsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxuICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbkBAIC0yOSw3ICYjNDM7MjksNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNClcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xuaW5kZXggYmMyMDJlNGVkMmJkYS4uMjA4NjRlN2Q0ZTBjNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbkBAIC0yMSw5ICYjNDM7MjEsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdGZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxuICNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcbmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5AQCAtMjAsNyAmIzQzOzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5AQCAtMTAsNyAmIzQzOzEwLDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xuaW5kZXggZjk0NTQ5ZWZjYzZmZi4uMjUzMmE0MmI5OGRmZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5AQCAtMjUsNyAmIzQzOzI1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggMGQ2YzcxZWQyZmFlMy4uYmEyMWY1ODUyNWU0MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyAmIzQzOzIyLDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtsaW51eC9tYWdpYy5oXCYjMzQ7XG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXHUwMDNjXHUwMDNjIDMwKSlcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcbkBAIC0xNDQsNiAmIzQzOzE0Myw3IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRjaGFyIGJ1ZlsxIFx1MDAzY1x1MDAzYyAxMF07XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuIFx0Y2hhciAqc3RyLCAqZW5kO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KTtcbkBAIC0xNjMsOCAmIzQzOzE2Myw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3JlYWRfZmlsZSh1ZXZlbnQpXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkX2ZpbGUoJXMpOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwmIzM0O0RFVlRZUEU9ZGlza1wmIzM0OykpIHtcbiBcdFx0LyogRm91bmQgaXQgKi9cbiBcdFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG5AQCAtMzQ1LDcgJiM0MzszNDYsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCByZXQ7XG4gXHR2b2lkICpwO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIFxuQEAgLTM4OSw3ICYjNDM7MzkwLDExIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttbWFwKClcJiMzNDspO1xuIFxuIFx0LyogRHJvcCBwYWdlIGNhY2hlICovXG4tXHR3cml0ZV9maWxlKFwmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wmIzM0OywgXCYjMzQ7M1wmIzM0OywgMik7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShcJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcJiMzNDssIFwmIzM0OzNcJiMzNDssIDIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XG4gXHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtMTUsNyAmIzQzOzE1LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL2tzbS9cJiMzNDtcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNSw3ICYjNDM7NSw2IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuQEAgLTE2LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggY2ZkMTk4NzMzOWMxMy4uZjk1ZTNlYTU3YzNhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjQsNyAmIzQzOzI0LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTExcdFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcdFxcXG4gXHRcdFx0XHRcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuaW5kZXggODJjNmU5NmVhNmViMy4uZjllYzE0MDhhNmUzMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5AQCAtNDUsOCAmIzQzOzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7cGtleS1oZWxwZXJzLmhcJiMzNDtcbiBcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0xMzAsMzAgJiM0MzsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwmIzM0Oy1IIC1tICRodWdldGxiX21iXCYjMzQ7OyBkb1xuLSAgICAgICAgIyAtdTogZ3VwLWZhc3QsIC1VOiBndXAtYmFzaWMsIC1hOiBwaW4tZmFzdCwgLWI6IHBpbi1iYXNpYywgLUw6IHBpbi1sb25ndGVybVxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXG4tICAgICAgICAgICAgZm9yIHdyaXRlIGluIC13IC1XOyBkb1xuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFwmIzM0OyBcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsXG4tICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaXQmIzM5O3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXG4tICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCBwYXJ0aWFsIGd1cCB3aGVuIGhpdCBhIGh1Z2UgaW4gd2hhdGV2ZXIgZm9ybVxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcJiMzNDstbiAxXCYjMzQ7IFwmIzM0Oy1uIDUxMlwmIzM0OyBcJiMzNDstbiAxMjNcJiMzNDsgXCYjMzQ7LW4gLTFcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCYjMzQ7YXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NFwmIzM0O1xuIGlmIFsgLXogXCYjMzQ7JEFSQ0hcJiMzNDsgXTsgdGhlblxuQEAgLTI3NSwxOCAmIzQzOzI1MSw3IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCYjMzQ7bW1hcFwmIzM0OyBydW5fdGVzdCAuL21hcF9maXhlZF9ub3JlcGxhY2VcbiBcbi1pZiAkUlVOX0FMTDsgdGhlblxuLSAgICBydW5fZ3VwX21hdHJpeFxuLWVsc2Vcbi0gICAgIyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXG4tICAgIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXG4tICAgICMgcGluX3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIDFcbi0gICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXG4mIzQzO0NBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwXG4gQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfbG9uZ3Rlcm1cbiBcbiBDQVRFR09SWT1cJiMzNDt1c2VyZmF1bHRmZFwmIzM0OyBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggZTE5OGZhY2Y3OGJiNS4uMTY4N2U5ODRhYTE0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICYjNDM7OSw2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXBcJiMzNDtcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCA4NmE2MDM2OTI4MjYxLi4wZTA4M2FiNzFhZjYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgJiM0MzsyMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gdWludDY0X3QgcGFnZXNpemU7XG4gdW5zaWduZWQgaW50IHBhZ2VzaGlmdDtcbkBAIC0xNDYsNyAmIzQzOzE0NSwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0aWYgKHJldCBcdTAwM2U9IElOUFVUX01BWClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXG4tXHR3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZSglcyk6ICVzXFxuXCYjMzQ7LCBTUExJVF9ERUJVR0ZTLFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgJiM0MzsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWYgIWRlZmluZWQoTUFQX0hVR0VUTEIpXG4gI2RlZmluZSBNQVBfSFVHRVRMQlx0MHg0MDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5AQCAtMTcsNyAmIzQzOzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcbiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5AQCAtMzcsNyAmIzQzOzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggYzk3M2Q2NzIyNzIwYy4uZWI0YjI0MzNiMDBlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3VmZmQtY29tbW9uLmhcJiMzNDtcbiBcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbkBAIC0xMSw3ICYjNDM7MTEsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggODBiYzlmNTk3YjUyMS4uNDc1MWRiNzk4YzNhYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtODg5LDExMSAmIzQzOzg4OSw1NCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0cmV0dXJuIHJldCBcdTAwM2UgMCA/IDAgOiAtZXJybm87XG4gfVxuIFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdGludCBmZDtcbi1cdHNzaXplX3QgbnVtcmVhZDtcbi1cbi1cdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XG4tXHRpZiAoZmQgPT0gLTEpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4tXHRpZiAobnVtcmVhZCBcdTAwM2MgMSkge1xuLVx0XHRjbG9zZShmZCk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0YnVmW251bXJlYWRdID0gJiMzOTtcXDAmIzM5Oztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxuXCYjMzQ7LCBidWZsZW4pO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIG9wZW4gZmFpbGVkOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbi1cbi1cdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdHNhdmVkX2Vycm5vID0gZXJybm87XG4tXHRjbG9zZShmZCk7XG4tXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuLVx0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApIHtcbi1cdFx0aWYgKGlnbm9yZV9laW52YWwgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdH1cbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pO1xuLX1cbi1cbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcbi19XG4tXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKVxuLXtcbi1cdGNoYXIgYnVmWzIxXTtcbi1cbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cmVhZF9maWxlKClcJiMzNDspO1xuLVxuLVx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0Y2hhciBidWZbMjFdO1xuLVxuLVx0c3ByaW50ZihidWYsIFwmIzM0OyVsdVwmIzM0OywgbnVtKTtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEsIGlnbm9yZV9laW52YWwpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuLXtcbi1cdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTtcbi19XG4tXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7XG4gXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKVxuIHtcbi1cdGlmIChzaG1tYXgpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0Oywgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0Oywgc2htYWxsKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2htbWF4KSB7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIHNobW1heCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgc2htbWF4OiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHNobWFsbCkge1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBzaG1hbGwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7KTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobW1heDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBsZW5ndGgsIHN0cmVycm9yKC1yZXQpKTtcbiBcdFx0c2htbWF4ID0gdmFsO1xuIFx0fVxuIFxuLVx0dmFsID0gcmVhZF9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcJiMzNDspO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcdGlmICh2YWwgXHUwMDNjIG5yKSB7XG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0OywgbnIpO1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBucik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICYjNDM7OCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2UgLyogX1NDX1BBR0VTSVpFICovXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2ZpbGVfdXRpbHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCBcdTAwM2NcdTAwM2MgKG5yKSlcbiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpXG5AQCAtMTY2LDEyICYjNDM7MTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzLCBzZWxmdGVzdHMsIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZjJiYTU4YjIzY2UzOTkwNGExZjY3ZGRjYWI3YzI5OTRjZjVhN2I3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTk6MTI6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CmluZGV4IGMxNmNhMTYzYjU1ZTMuLjE1NjRiMTY5OTRhZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CkBAIC0yMjgsMTIgJiM0MzsyMjgsMTggQEAgVW5pdCB0ZXN0aW5nCiA9PT09PT09PT09PT0KIFRoaXMgZmlsZTo6CiAKLSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCiYjNDM7IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jCiAKLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczoKJiM0Mztjb250YWlucyB0aGUgZm9sbG93aW5nIHRlc3QgY2FzZXMgdG8gZXhlcmNpc2UgcGluX3VzZXJfcGFnZXMqKCk6CiAKLSogUElOX0ZBU1RfQkVOQ0hNQVJLICguL2d1cF90ZXN0IC1hKQotKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYikKJiM0MzsqIHBpbl91c2VyX3BhZ2VzIHZpYSBQSU5fQkFTSUNfVEVTVAomIzQzOyogcGluX3VzZXJfcGFnZXNfZmFzdCB2aWEgUElOX0ZBU1RfQkVOQ0hNQVJLCiYjNDM7KiBwaW5fdXNlcl9wYWdlc19sb25ndGVybSB2aWEgUElOX0xPTkdURVJNX0JFTkNITUFSSwomIzQzOwomIzQzO1J1biB3aXRoOjoKJiM0MzsKJiM0MzsgIG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0KJiM0MzsgIC4vdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwCiAKIFlvdSBjYW4gbW9uaXRvciBob3cgbWFueSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWQKIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3byBuZXcgL3Byb2Mvdm1zdGF0IGVudHJpZXM6IDo6CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDBmNTEzYjQyYmMxODYuLjg2MTUwNGZhMmUzMTggMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xNzAzMSw4ICYjNDM7MTcwMzEsOSBAQCBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW0KIEY6CW1tL2d1cC5jCiBGOgltbS9ndXBfdGVzdC5jCiBGOgltbS9ndXBfdGVzdC5oCiYjNDM7RjoJdG9vbHMvbW0vZ3VwX2JlbmNoLmMKJiM0MztGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMKLUY6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKIAogTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKQogTToJQW5kcmV3IE1vcnRvbiAmbHQ7YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZyZndDsKQEAgLTE3MTM1LDYgJiM0MzsxNzEzNiw3IEBAIEY6CW1tL21lbW9yeS10aWVycy5jCiBGOgltbS9wYWdlX2lkbGUuYwogRjoJbW0vcGdhbGxvYy10cmFjay5oCiBGOgltbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jCiYjNDM7RjoJdG9vbHMvbGliL21tLwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vCiAKIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OCmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5jIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45OWExNTNlZmE4ZmJmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwpAQCAtMCwwICYjNDM7MSwxMDQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7ZmlsZV91dGlscy5oJiMzNDsKJiM0MzsKJiM0MztpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwlzc2l6ZV90IG51bXJlYWQ7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CiYjNDM7CWlmIChmZCA9PSAtMSkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CW51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOwomIzQzOwlpZiAobnVtcmVhZCAmbHQ7IDEpIHsKJiM0MzsJCWVyciA9IG51bXJlYWQgPyBlcnJubyA6IEVOT0RBVEE7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gLWVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlidWZbbnVtcmVhZF0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKJiM0Mzt7CiYjNDM7CWludCBmZCwgc2F2ZWRfZXJybm87CiYjNDM7CXNzaXplX3QgbnVtd3JpdHRlbjsKJiM0MzsKJiM0MzsJaWYgKGJ1ZmxlbiAmbHQ7IDIpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKJiM0MzsJaWYgKGZkID09IC0xKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJbnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOwomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmIChudW13cml0dGVuICZsdDsgMCkKJiM0MzsJCXJldHVybiAtc2F2ZWRfZXJybm87CiYjNDM7CiYjNDM7CWlmIChudW13cml0dGVuICE9IChzc2l6ZV90KShidWZsZW4gLSAxKSkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdmFsOwomIzQzOwlpbnQgcmV0OwomIzQzOwljaGFyIGJ1ZlsyMV07CiYjNDM7CWNoYXIgKmVuZDsKJiM0MzsKJiM0MzsJaWYgKCFudW0pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGJ1ZlswXSAmbHQ7ICYjMzk7MCYjMzk7IHx8IGJ1ZlswXSAmZ3Q7ICYjMzk7OSYjMzk7KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWVycm5vID0gMDsKJiM0MzsJdmFsID0gc3RydG91bChidWYsICZhbXA7ZW5kLCAxMCk7CiYjNDM7CWlmIChlcnJubykKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWlmICgqZW5kID09ICYjMzk7XG4mIzM5OykKJiM0MzsJCWVuZCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmICgqZW5kICE9ICYjMzk7XDAmIzM5OykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkqbnVtID0gdmFsOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzIxXTsKJiM0MzsKJiM0MzsJc3ByaW50ZihidWYsICYjMzQ7JWx1JiMzNDssIG51bSk7CiYjNDM7CXJldHVybiB3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgJiM0MzsgMSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHdyaXRlX251bShwYXRoLCBudW0pOwomIzQzOwlyZXR1cm4gcmV0ID09IC1FSU5WQUwgPyAwIDogcmV0OwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmggYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjUwZGFhODJjMmIyYjQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oCkBAIC0wLDAgJiM0MzsxLDEzIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX18KJiM0MzsjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkZGVmLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwomIzQzO2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CiYjNDM7aW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSk7CiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7CiYjNDM7aW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTsKJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwppbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCkBAIC04LDEyICYjNDM7OCwxOCBAQAogI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwogI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogCi0jaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtmaWxlX3V0aWxzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBUSFBfU1lTRlMgJiMzNDsvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS8mIzM0OwogI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNAomIzQzOwomIzQzOyNpZm5kZWYgQVJSQVlfU0laRQomIzQzOyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdOwogc3RhdGljIGludCBzZXR0aW5nc19pbmRleDsKIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNhdmVkX3NldHRpbmdzOwpAQCAtNDgsNiAmIzQzOzU0LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2htZW1fZW5hYmxlZF9zdHJpbmdzW10gPSB7CiAJTlVMTAogfTsKIAomIzQzO3N0YXRpYyB2b2lkIHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCByZXQpCiYjNDM7ewomIzQzOwlwcmludGYoJiMzNDsjICVzOiAlcyAoJWQpXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCksIC1yZXQpOwomIzQzO30KJiM0MzsKIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwpAQCAtNjEsOCAmIzQzOzcyLDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKQogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQogCi0JaWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpIHsKLQkJcGVycm9yKHBhdGgpOwomIzQzOwlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAl9CiAKQEAgLTEwMywxMiAmIzQzOzExNSwxNyBAQCB2b2lkIHRocF93cml0ZV9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKQogCQlwcmludGYoJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAl9Ci0Jd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpOwomIzQzOwlyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgJiM0MzsgMSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KIH0KIAogdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG51bTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFRIUF9TWVNGUyAmIzM0OyVzJiMzNDssIG5hbWUpOwpAQCAtMTE2LDcgJiM0MzsxMzMsMTMgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSkKIAkJcHJpbnRmKCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQotCXJldHVybiByZWFkX251bShwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0ocGF0aCwgJmFtcDtudW0pOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBudW07CiB9CiAKIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSkKQEAgLTEyOSw3ICYjNDM7MTUyLDExIEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSkKIAkJcHJpbnRmKCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQotCXdyaXRlX251bShwYXRoLCBudW0pOwomIzQzOwlyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQogfQogCiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKQpAQCAtMTU3LDggJiM0MzsxODQsMTUgQEAgdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncykKIAkJLm1heF9wdGVzX3NoYXJlZCA9IHRocF9yZWFkX251bSgmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkJiMzNDspLAogCQkucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bSgmIzM0O2todWdlcGFnZWQvcGFnZXNfdG9fc2NhbiYjMzQ7KSwKIAl9OwotCWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKQotCQlzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpOwomIzQzOwlpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkgewomIzQzOwkJaW50IHJldCA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCiYjNDM7CQkJCSAgICZhbXA7c2V0dGluZ3MtJmd0O3JlYWRfYWhlYWRfa2IpOwomIzQzOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7CiYjNDM7CQkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwkJfQomIzQzOwl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlJfT1JERVJTOyBpJiM0MzsmIzQzOykgewogCQlpZiAoISgoMSAmbHQ7Jmx0OyBpKSAmYW1wOyBvcmRlcnMpKSB7CkBAIC0yMDgsOCAmIzQzOzI0MiwxNSBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncykKIAl0aHBfd3JpdGVfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWQmIzM0Oywga2h1Z2VwYWdlZC0mZ3Q7bWF4X3B0ZXNfc2hhcmVkKTsKIAl0aHBfd3JpdGVfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9wYWdlc190b19zY2FuJiMzNDssIGtodWdlcGFnZWQtJmd0O3BhZ2VzX3RvX3NjYW4pOwogCi0JaWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pCi0JCXdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCBzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYik7CiYjNDM7CWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7CiYjNDM7CQlpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCiYjNDM7CQkJCSAgICBzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYik7CiYjNDM7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTsKJiM0MzsJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICghKCgxICZsdDsmbHQ7IGkpICZhbXA7IG9yZGVycykpCkBAIC0zMDcsOCAmIzQzOzM0OCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9zdXBwb3J0ZWRfb3JkZXJzKGJvb2wgaXNfc2htZW0pCiAJCX0KIAogCQlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JCWlmIChyZXQpCi0JCQlvcmRlcnMgfD0gMVVMICZsdDsmbHQ7IGk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJaWYgKHJldCAhPSAtRU5PRU5UKSB7CiYjNDM7CQkJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJCQl9CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvcmRlcnMgfD0gMVVMICZsdDsmbHQ7IGk7CiAJfQogCiAJcmV0dXJuIG9yZGVyczsKQEAgLTM4Miw4ICYjNDM7NDMwLDcgQEAgaW50IGRldGVjdF9odWdldGxiX3BhZ2Vfc2l6ZXModW5zaWduZWQgbG9uZyBzaXplc1tdLCBpbnQgbWF4KQogCQlpZiAoc3NjYW5mKGVudHJ5LSZndDtkX25hbWUsICYjMzQ7aHVnZXBhZ2VzLSV6dWtCJiMzNDssICZhbXA7a2IpICE9IDEpCiAJCQljb250aW51ZTsKIAkJc2l6ZXNbY291bnQmIzQzOyYjNDM7XSA9IGtiICogMTAyNDsKLQkJa3NmdF9wcmludF9tc2coJiMzNDtbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcbiYjMzQ7LAotCQkJICAgICAgIGtiKTsKJiM0MzsJCXByaW50ZigmIzM0OyMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXG4mIzM0Oywga2IpOwogCX0KIAljbG9zZWRpcihkaXIpOwogCXJldHVybiBjb3VudDsKQEAgLTQyNSwyOCAmIzQzOzQ3Miw0OSBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3N5c2ZzX3BhdGgoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLAogdW5zaWduZWQgbG9uZyBodWdldGxiX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yOwomIzQzOwlpbnQgcmV0OwogCiAJaHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgJiMzNDtucl9odWdlcGFnZXMmIzM0Oyk7CiAKLQlyZXR1cm4gcmVhZF9udW0ocGF0aCk7CiYjNDM7CXJldCA9IHJlYWRfbnVtKHBhdGgsICZhbXA7bnIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBucjsKIH0KIAogdm9pZCBodWdldGxiX3NldF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJaW50IHJldDsKIAogCWh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwogCi0Jd3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpOwomIzQzOwlyZXQgPSB3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KIH0KIAogdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKQogewogCWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnI7CiYjNDM7CWludCByZXQ7CiAKIAlodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCAmIzM0O2ZyZWVfaHVnZXBhZ2VzJiMzNDspOwogCi0JcmV0dXJuIHJlYWRfbnVtKHBhdGgpOwomIzQzOwlyZXQgPSByZWFkX251bShwYXRoLCAmYW1wO25yKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbnI7CiB9CiAKIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpCkBAIC01MDIsNyAmIzQzOzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sCiAJCXJldHVybiAwOwogCiAJaWYgKG5yX2VuYWJsZWQgJmd0OyBtYXgpIHsKLQkJa3NmdF9wcmludF9tc2coJiMzNDtkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXG4mIzM0OywgbnJfZW5hYmxlZCwgbWF4KTsKJiM0MzsJCXByaW50ZigmIzM0OyMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxuJiMzNDssCiYjNDM7CQkgICAgICAgbnJfZW5hYmxlZCwgbWF4KTsKIAkJbnJfZW5hYmxlZCA9IG1heDsKIAl9CiAKQEAgLTU3NCw4ICYjNDM7NjQzLDEwIEBAIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0KHZvaWQpCiAKIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKQogewomIzQzOwkodm9pZClzaWc7CiYjNDM7CiAJLyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqLwotCWV4aXQoS1NGVF9GQUlMKTsKJiM0MzsJZXhpdChFWElUX0ZBSUxVUkUpOwogfQogCiB2b2lkIGh1Z2VwYWdlX3NhdmVfc2V0dGluZ3MoYm9vbCB0aHAsIGJvb2wgaHVnZXRsYikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaApyZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmgKZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlCmluZGV4IDE0NDZhNjU5ZTU0MDguLjE1NGQ3NDBiZTAyZTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vLmdpdGlnbm9yZQpAQCAtMywzICYjNDM7Myw0IEBAIHNsYWJpbmZvCiBwYWdlLXR5cGVzCiBwYWdlX293bmVyX3NvcnQKIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7Z3VwX2JlbmNoCmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlCmluZGV4IDg1ODE4NmE2ZWVmZGIuLmYyMGEzMmQ4Y2MyMmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL01ha2VmaWxlCkBAIC0zLDEzICYjNDM7MywxNSBAQAogIwogaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGUKIAotQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIKJiM0MztCVUlMRF9UQVJHRVRTICYjNDM7PSB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2gKIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwcwogCiBMSUJfRElSID0gLi4vbGliL2FwaQogTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmEKJiM0MztHVVBfQkVOQ0hfT0JKUyA9IGd1cF9iZW5jaC5jIC4uL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIC4uL2xpYi9tbS9maWxlX3V0aWxzLmMKIAotQ0ZMQUdTICYjNDM7PSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtcHRocmVhZAomIzQzO0NGTEFHUyAmIzQzOz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLUkuLi8uLiAtcHRocmVhZAogTERGTEFHUyAmIzQzOz0gJChMSUJTKSAtcHRocmVhZAogCiBhbGw6ICQoQlVJTERfVEFSR0VUUykKQEAgLTIyLDggJiM0MzsyNCwxMSBAQCAkKExJQlMpOgogJTogJS5jCiAJJChDQykgJChDRkxBR1MpIC1vICRAICQmbHQ7ICQoTERGTEFHUykKIAomIzQzO2d1cF9iZW5jaDogJChHVVBfQkVOQ0hfT0JKUykgJChMSUJTKQomIzQzOwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChHVVBfQkVOQ0hfT0JKUykgJChMREZMQUdTKQomIzQzOwogY2xlYW46Ci0JJChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MzsJJChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoCiAJbWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuCiAKIHNiaW5kaXIgPz0gL3Vzci9zYmluCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmMKc2ltaWxhcml0eSBpbmRleCA1MCUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYwpyZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmMKaW5kZXggM2Y4NDFhOTZmODcwNi4uNzUzNjliMjY3NGE5NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9ndXBfYmVuY2guYwpAQCAtMTAsMTEgJiM0MzsxMCwxMCBAQAogI2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwotI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O21tL2d1cF90ZXN0LmgmZ3Q7Ci0jaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKICNkZWZpbmUgTUIgKDFVTCAmbHQ7Jmx0OyAyMCkKIApAQCAtMzgsMTIgJiM0MzszNyw2IEBAIHN0YXRpYyBjaGFyICpjbWRfdG9fc3RyKHVuc2lnbmVkIGxvbmcgY21kKQogCQlyZXR1cm4gJiMzNDtQSU5fRkFTVF9CRU5DSE1BUksmIzM0OzsKIAljYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6CiAJCXJldHVybiAmIzM0O1BJTl9MT05HVEVSTV9CRU5DSE1BUksmIzM0OzsKLQljYXNlIEdVUF9CQVNJQ19URVNUOgotCQlyZXR1cm4gJiMzNDtHVVBfQkFTSUNfVEVTVCYjMzQ7OwotCWNhc2UgUElOX0JBU0lDX1RFU1Q6Ci0JCXJldHVybiAmIzM0O1BJTl9CQVNJQ19URVNUJiMzNDs7Ci0JY2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDoKLQkJcmV0dXJuICYjMzQ7RFVNUF9VU0VSX1BBR0VTX1RFU1QmIzM0OzsKIAl9CiAJcmV0dXJuICYjMzQ7VW5rbm93biBjb21tYW5kJiMzNDs7CiB9CkBAIC01MywzOSAmIzQzOzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSkKIAlzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0gKihzdHJ1Y3QgZ3VwX3Rlc3QgKilkYXRhOwogCWludCBpLCBzdGF0dXM7CiAKLQkvKiBPbmx5IHJlcG9ydCB0aW1pbmcgaW5mb3JtYXRpb24gb24gdGhlICpfQkVOQ0hNQVJLIGNvbW1hbmRzOiAqLwotCWlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8Ci0JICAgICAoY21kID09IFBJTl9MT05HVEVSTV9CRU5DSE1BUkspKSB7Ci0JCWZvciAoaSA9IDA7IGkgJmx0OyByZXBlYXRzOyBpJiM0MzsmIzQzOykgewotCQkJZ3VwLnNpemUgPSBzaXplOwotCQkJc3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsICZhbXA7Z3VwKTsKLQkJCWlmIChzdGF0dXMpCi0JCQkJYnJlYWs7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyByZXBlYXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZ3VwLnNpemUgPSBzaXplOwomIzQzOwkJc3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsICZhbXA7Z3VwKTsKJiM0MzsJCWlmIChzdGF0dXMpIHsKJiM0MzsJCQlpbnQgZXJyID0gZXJybm87CiAKIAkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO3ByaW50X211dGV4KTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7JXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzJiMzNDssCi0JCQkJICAgICAgIGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLAotCQkJCSAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpOwotCQkJaWYgKGd1cC5zaXplICE9IHNpemUpCi0JCQkJa3NmdF9wcmludF9tc2coJiMzNDssIHRydW5jYXRlZCAoc2l6ZTogJWxsZCkmIzM0OywgZ3VwLnNpemUpOwotCQkJa3NmdF9wcmludF9tc2coJiMzNDtcbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDslcyBpb2N0bCBmYWlsZWQ6ICVzXG4mIzM0OywgY21kX3RvX3N0cihjbWQpLAomIzQzOwkJCQlzdHJlcnJvcihlcnIpKTsKIAkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7cHJpbnRfbXV0ZXgpOwomIzQzOwkJCXJldHVybiBkYXRhOwogCQl9Ci0JfSBlbHNlIHsKLQkJZ3VwLnNpemUgPSBzaXplOwotCQlzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgJmFtcDtndXApOwotCQlpZiAoc3RhdHVzKQotCQkJZ290byByZXR1cm5fOwogCiAJCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO3ByaW50X211dGV4KTsKLQkJa3NmdF9wcmludF9tc2coJiMzNDslczogZG9uZVxuJiMzNDssIGNtZF90b19zdHIoY21kKSk7CiYjNDM7CQlwcmludGYoJiMzNDslczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXMmIzM0OywKJiM0MzsJCQljbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYywKJiM0MzsJCQlndXAucHV0X2RlbHRhX3VzZWMpOwogCQlpZiAoZ3VwLnNpemUgIT0gc2l6ZSkKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7VHJ1bmNhdGVkIChzaXplOiAlbGxkKVxuJiMzNDssIGd1cC5zaXplKTsKJiM0MzsJCQlwcmludGYoJiMzNDssIHRydW5jYXRlZCAoc2l6ZTogJWxsZCkmIzM0OywgZ3VwLnNpemUpOwomIzQzOwkJcHJpbnRmKCYjMzQ7XG4mIzM0Oyk7CiAJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7cHJpbnRfbXV0ZXgpOwogCX0KIAotcmV0dXJuXzoKLQlrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsICYjMzQ7aW9jdGwgc3RhdHVzICVkXG4mIzM0Oywgc3RhdHVzKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtOTMsMzggJiM0Mzs3NiwyMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwogCWludCBmaWxlZCwgaSwgb3B0LCBucl9wYWdlcyA9IDEsIHRocCA9IC0xLCB3cml0ZSA9IDEsIG50aHJlYWRzID0gMSwgcmV0OwotCWludCBmbGFncyA9IE1BUF9QUklWQVRFOwomIzQzOwlpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURSwgc3RhcnRlZF90aHJlYWRzID0gMDsKIAljaGFyICpmaWxlID0gJiMzNDsvZGV2L3plcm8mIzM0OzsKLQlib29sIGh1Z2V0bGIgPSBmYWxzZTsKJiM0MzsJYm9vbCBodWdldGxiID0gZmFsc2UsIHRocmVhZF9lcnJvciA9IGZhbHNlOwomIzQzOwl2b2lkICp0aHJlYWRfcmVzdWx0OwogCXB0aHJlYWRfdCAqdGlkOwogCWNoYXIgKnA7CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6ZjphYmNqOnRUTFV1d1dTSHB6JiMzNDspKSAhPSAtMSkgewomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6Zjphajp0VEx1d1dTSCYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAmIzM5O2EmIzM5OzoKIAkJCWNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSzsKIAkJCWJyZWFrOwotCQljYXNlICYjMzk7YiYjMzk7OgotCQkJY21kID0gUElOX0JBU0lDX1RFU1Q7Ci0JCQlicmVhazsKIAkJY2FzZSAmIzM5O0wmIzM5OzoKIAkJCWNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O2MmIzM5OzoKLQkJCWNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUOwotCQkJLyoKLQkJCSAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5Ci0JCQkgKiB1c2VyJiMzOTtzIG5vbi1vcHRpb24gYXJndW1lbnRzLgotCQkJICoKLQkJCSAqIC53aGljaF9wYWdlcyBpcyB6ZXJvLWJhc2VkLCBzbyB0aGF0IHplcm8gY2FuIG1lYW4gJiMzNDtkbwotCQkJICogbm90aGluZyYjMzQ7LgotCQkJICovCi0JCQlndXAud2hpY2hfcGFnZXNbMF0gPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtwJiMzOTs6Ci0JCQkvKiB3b3JrcyBvbmx5IHdpdGggRFVNUF9VU0VSX1BBR0VTX1RFU1QgKi8KLQkJCWd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOOwotCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtGJiMzOTs6CiAJCQkvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqLwogCQkJZ3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApOwpAQCAtMTQxLDcgJiM0MzsxMDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWNhc2UgJiMzOTtuJiMzOTs6CiAJCQlucl9wYWdlcyA9IGF0b2kob3B0YXJnKTsKIAkJCWlmIChucl9wYWdlcyAmbHQ7IDApCi0JCQkJbnJfcGFnZXMgPSBzaXplIC8gcHNpemUoKTsKJiM0MzsJCQkJbnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTsKIAkJCWJyZWFrOwogCQljYXNlICYjMzk7dCYjMzk7OgogCQkJdGhwID0gMTsKQEAgLTE0OSw5ICYjNDM7MTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQljYXNlICYjMzk7VCYjMzk7OgogCQkJdGhwID0gMDsKIAkJCWJyZWFrOwotCQljYXNlICYjMzk7VSYjMzk7OgotCQkJY21kID0gR1VQX0JBU0lDX1RFU1Q7Ci0JCQlicmVhazsKIAkJY2FzZSAmIzM5O3UmIzM5OzoKIAkJCWNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSzsKIAkJCWJyZWFrOwpAQCAtMTczLDUyICYjNDM7MTM2LDQxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWh1Z2V0bGIgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtXcm9uZyBhcmd1bWVudFxuJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dyb25nIGFyZ3VtZW50XG4mIzM0Oyk7CiYjNDM7CQkJZXhpdCgxKTsKIAkJfQogCX0KIAotCWlmIChvcHRpbmQgJmx0OyBhcmdjKSB7Ci0JCWludCBleHRyYV9hcmdfY291bnQgPSAwOwotCQkvKgotCQkgKiBGb3IgZXhhbXBsZToKLQkJICoKLQkJICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDEKLQkJICoKLQkJICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5NwotCQkgKi8KLQotCQl3aGlsZSAoKG9wdGluZCAmbHQ7IGFyZ2MpICZhbXA7JmFtcDsKLQkJICAgICAgIChleHRyYV9hcmdfY291bnQgJmx0OyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHsKLQkJCS8qCi0JCQkgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhbgotCQkJICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0JCQkgKi8KLQkJCWxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICYjNDM7IDE7Ci0KLQkJCWd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDsKLQkJCWV4dHJhX2FyZ19jb3VudCYjNDM7JiM0Mzs7Ci0JCQlvcHRpbmQmIzQzOyYjNDM7OwotCQl9CiYjNDM7CWlmIChvcHRpbmQgIT0gYXJnYykgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7VW5leHBlY3RlZCBhcmd1bWVudCAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBhcmd2W29wdGluZF0pOwomIzQzOwkJZXhpdCgxKTsKIAl9CiAKLQlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlpZiAoZ2V0dWlkKCkpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KIAogCWlmIChodWdldGxiKSB7CiAJCXVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTsKIAotCQlpZiAoIWhwX3NpemUpCi0JCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O0h1Z2VUTEIgaXMgdW5hdmFpbGFibGVcbiYjMzQ7KTsKJiM0MzsJCWlmICghaHBfc2l6ZSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0NvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gMTsKJiM0MzsJCX0KIAogCQlzaXplID0gKHNpemUgJiM0MzsgaHBfc2l6ZSAtIDEpICZhbXA7IH4oaHBfc2l6ZSAtIDEpOwotCQlpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpCi0JCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwkJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7Tm90IGVub3VnaCBodWdlIHBhZ2VzXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CQl9CiAJfQogCi0Ja3NmdF9zZXRfcGxhbihudGhyZWFkcyk7Ci0KIAlmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpOwotCWlmIChmaWxlZCAmbHQ7IDApCi0JCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xuJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CWlmIChmaWxlZCAmbHQ7IDApIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xuJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQogCiAJZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXM7CiAJaWYgKHdyaXRlKQpAQCAtMjI3LDI2ICYjNDM7MTc5LDI0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7CiAJaWYgKGd1cF9mZCA9PSAtMSkgewogCQlzd2l0Y2ggKGVycm5vKSB7Ci0JCWNhc2UgRUFDQ0VTOgotCQkJaWYgKGdldHVpZCgpKQotCQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxuJiMzNDspOwotCQkJYnJlYWs7CiAJCWNhc2UgRU5PRU5UOgogCQkJaWYgKG9wZW5kaXIoJiMzNDsvc3lzL2tlcm5lbC9kZWJ1ZyYjMzQ7KSA9PSBOVUxMKQotCQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7bW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xuJiMzNDspOwotCQkJa3NmdF9wcmludF9tc2coJiMzNDtjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXG4mIzM0Oyk7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXG4mIzM0Oyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtmYWlsZWQgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBHVVBfVEVTVF9GSUxFLAomIzQzOwkJCQlzdHJlcnJvcihlcnJubykpOwogCQkJYnJlYWs7CiAJCX0KLQkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxuJiMzNDspOwotCQlrc2Z0X2V4aXRfcGFzcygpOwomIzQzOwkJZ290byBlcnJfY2xvc2VfZmlsZWQ7CiAJfQogCiAJcCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTsKLQlpZiAocCA9PSBNQVBfRkFJTEVEKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDttbWFwOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CWlmIChwID09IE1BUF9GQUlMRUQpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O21tYXA6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCWdvdG8gZXJyX2Nsb3NlX2d1cF9mZDsKJiM0MzsJfQogCWd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDsKIAogCWlmICh0aHAgPT0gMSkKQEAgLTI1NSwyMSAmIzQzOzIwNSw0OSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCW1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAogCS8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqLwotCWZvciAoOyAodW5zaWduZWQgbG9uZylwICZsdDsgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gcHNpemUoKSkKJiM0MzsJZm9yICg7ICh1bnNpZ25lZCBsb25nKXAgJmx0OyBndXAuYWRkciAmIzQzOyBzaXplOyBwICYjNDM7PSBnZXRwYWdlc2l6ZSgpKQogCQlwWzBdID0gMDsKIAogCXRpZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG50aHJlYWRzKTsKLQlhc3NlcnQodGlkKTsKJiM0MzsJaWYgKCF0aWQpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSAlZCB0aHJlYWRzOiAlc1xuJiMzNDssCiYjNDM7CQkJbnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlnb3RvIGVycl91bm1hcDsKJiM0MzsJfQomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBudGhyZWFkczsgaSYjNDM7JiM0MzspIHsKIAkJcmV0ID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsICZhbXA7Z3VwKTsKLQkJYXNzZXJ0KHJldCA9PSAwKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXG4mIzM0Oywgc3RyZXJyb3IocmV0KSk7CiYjNDM7CQkJdGhyZWFkX2Vycm9yID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXN0YXJ0ZWRfdGhyZWFkcyYjNDM7JiM0Mzs7CiAJfQotCWZvciAoaSA9IDA7IGkgJmx0OyBudGhyZWFkczsgaSYjNDM7JiM0MzspIHsKLQkJcmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7Ci0JCWFzc2VydChyZXQgPT0gMCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBzdGFydGVkX3RocmVhZHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCAmYW1wO3RocmVhZF9yZXN1bHQpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O3B0aHJlYWRfam9pbiBmYWlsZWQ6ICVzXG4mIzM0Oywgc3RyZXJyb3IocmV0KSk7CiYjNDM7CQkJdGhyZWFkX2Vycm9yID0gdHJ1ZTsKJiM0MzsJCX0gZWxzZSBpZiAodGhyZWFkX3Jlc3VsdCkKJiM0MzsJCQl0aHJlYWRfZXJyb3IgPSB0cnVlOwogCX0KIAogCWZyZWUodGlkKTsKIAotCWtzZnRfZXhpdF9wYXNzKCk7CiYjNDM7CWlmICh0aHJlYWRfZXJyb3IpCiYjNDM7CQlnb3RvIGVycl91bm1hcDsKJiM0MzsKJiM0MzsJbXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpOwomIzQzOwljbG9zZShndXBfZmQpOwomIzQzOwljbG9zZShmaWxlZCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl91bm1hcDoKJiM0MzsJbXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpOwomIzQzO2Vycl9jbG9zZV9ndXBfZmQ6CiYjNDM7CWNsb3NlKGd1cF9mZCk7CiYjNDM7ZXJyX2Nsb3NlX2ZpbGVkOgomIzQzOwljbG9zZShmaWxlZCk7CiYjNDM7CXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCAyZDUzNjYxOTZlMzA5Li45YzAzNjI0ZmQyOTM2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQpAQCAtMzcsNyAmIzQzOzM3LDggQEAgZW5kaWYKICMgTERMSUJTLgogTUFLRUZMQUdTICYjNDM7PSAtLW5vLWJ1aWx0aW4tcnVsZXMKIAotQ0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUykKJiM0MztDRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAtSSAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYgomIzQzO0NGTEFHUyAmIzQzOz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUykKIENGTEFHUyAmIzQzOz0gLVd1bnJlYWNoYWJsZS1jb2RlCiBMRExJQlMgPSAtbHJ0IC1scHRocmVhZCAtbG0KIApAQCAtNTcsOCAmIzQzOzU4LDggQEAgZW5kaWYKIAogVEVTVF9HRU5fRklMRVMgPSBjb3cKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBjb21wYWN0aW9uX3Rlc3QKJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwX2xvbmd0ZXJtCi1URVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwX3Rlc3QKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBobW0tdGVzdHMKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLW1hZHZpc2UKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLW1tYXAKQEAgLTE4Nyw4ICYjNDM7MTg4LDEwIEBAIFRFU1RfRklMRVMgJiM0Mzs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoCiAKIGluY2x1ZGUgLi4vbGliLm1rCiAKLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuYwotJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jCiYjNDM7JChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFwKJiM0MzsJCSAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwomIzQzOyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcCiYjNDM7CQkgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMKIAogJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jCiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jCkBAIC0yMTcsNyAmIzQzOzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgJiM0Mzs9IC1tMzIgLW14c2F2ZQogJChCSU5BUklFU18zMik6IExETElCUyAmIzQzOz0gLWxydCAtbGRsIC1sbQogJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmMKIAkkKGNhbGwgbXNnLENDLCwkQCkKLQkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRACiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQAogJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSkKIGVuZGlmCiAKQEAgLTIyNiw3ICYjNDM7MjI5LDcgQEAgJChCSU5BUklFU182NCk6IENGTEFHUyAmIzQzOz0gLW02NCAtbXhzYXZlCiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwKICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jCiAJJChjYWxsIG1zZyxDQywsJEApCi0JJChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQAomIzQzOwkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEAKICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS02NCwkKHQpKSkpCiBlbmRpZgogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jCmluZGV4IDMwZDRhY2U3MTU1YWUuLmIzZjUzNzcxMTljYjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jCkBAIC0xNSw5ICYjNDM7MTUsOSBAQAogI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBNQVBfU0laRV9NQgkxMDAKICNkZWZpbmUgTUFQX1NJWkUJKE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jCmluZGV4IDhhYTUyNDlkOWJlZjYuLjMyNjRhODI4NTc1YmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jCkBAIC0yOSw3ICYjNDM7MjksNiBAQAogI2luY2x1ZGUgJiMzNDsuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogc3RhdGljIHNpemVfdCBwYWdlc2l6ZTsKIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKaW5kZXggNDViODRmN2IzNjRlMC4uMjg5YWVkMmViYWMwMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKQEAgLTI1LDcgJiM0MzsyNSw2IEBACiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHVpbnQ2NF90IHBhZ2Vfc2l6ZTsKIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwppbmRleCA1YzhlYzNjYTc1ZDdkLi5hZjVjZDliMzAzMzk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCkBAIC0yMSw3ICYjNDM7MjEsNiBAQAogI2luY2x1ZGUgJmx0O3N5cy91aW8uaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNpbmNsdWRlICYjMzQ7Li4vcGlkZmQvcGlkZmQuaCYjMzQ7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNGM5ZTE0ZGJiNDM0YQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jCkBAIC0wLDAgJiM0MzsxLDMyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjQKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2RpcmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vZ3VwX3Rlc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIE1CICgxVUwgJmx0OyZsdDsgMjApCiYjNDM7CiYjNDM7LyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovCiYjNDM7I2RlZmluZSBGT0xMX1dSSVRFCTB4MDEJLyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovCiYjNDM7CiYjNDM7LyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovCiYjNDM7c3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9OwomIzQzOwomIzQzOyNkZWZpbmUgR1VQX1RFU1RfRklMRSAmIzM0Oy9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0JiMzNDsKJiM0MzsjZGVmaW5lIE5SX0hVR0VfUEFHRVMgMTI4CiYjNDM7CiYjNDM7SFVHRVRMQl9TRVRVUF9ERUZBVUxUX1BBR0VTKE5SX0hVR0VfUEFHRVMpCiYjNDM7CiYjNDM7RklYVFVSRShndXBfdGVzdCkKJiM0Mzt7CiYjNDM7CWludCBndXBfZmQ7CiYjNDM7CWNoYXIgKmFkZHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZTsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVChndXBfdGVzdCkKJiM0Mzt7CiYjNDM7CWJvb2wgdGhwOwomIzQzOwlib29sIGh1Z2V0bGI7CiYjNDM7CWJvb2wgd3JpdGU7CiYjNDM7CWJvb2wgc2hhcmVkOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZSkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV9odWdldGxiKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IHRydWUsCiYjNDM7CS53cml0ZSA9IHRydWUsCiYjNDM7CS5zaGFyZWQgPSBmYWxzZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF9odWdldGxiKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IHRydWUsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGUpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IHRydWUsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWQpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF9odWdldGxiKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IHRydWUsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoZ3VwX3Rlc3QpCiYjNDM7ewomIzQzOwlpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFOwomIzQzOwlpbnQgemVyb19mZDsKJiM0MzsJY2hhciAqcDsKJiM0MzsKJiM0MzsJc2VsZi0mZ3Q7c2l6ZSA9IDEyOCAqIE1COwomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7aHVnZXRsYikgewomIzQzOwkJdW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpOwomIzQzOwomIzQzOwkJaWYgKCFocF9zaXplKQomIzQzOwkJCVNLSVAocmV0dXJuLCAmIzM0O0h1Z2VUTEIgbm90IGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwomIzQzOwkJaWYgKGh1Z2V0bGJfZnJlZV9kZWZhdWx0X3BhZ2VzKCkgJmx0OyBOUl9IVUdFX1BBR0VTKQomIzQzOwkJCVNLSVAocmV0dXJuLCAmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwomIzQzOwkJc2VsZi0mZ3Q7c2l6ZSA9IE5SX0hVR0VfUEFHRVMgKiBocF9zaXplOwomIzQzOwkJbW1hcF9mbGFncyB8PSAoTUFQX0hVR0VUTEIgfCBNQVBfQU5PTllNT1VTKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7c2hhcmVkKQomIzQzOwkJbW1hcF9mbGFncyA9IChtbWFwX2ZsYWdzICZhbXA7IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEOwomIzQzOwomIzQzOwkvKiB6ZXJvX2ZkIGhhcyB0byBiZSAmZ3Q7PSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovCiYjNDM7CXplcm9fZmQgPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTsKJiM0MzsKJiM0MzsJLyogZ3VwX2ZkIGhhcyB0byBiZSAmZ3Q7PSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovCiYjNDM7CXNlbGYtJmd0O2d1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTsKJiM0MzsJQVNTRVJUX0dFKHNlbGYtJmd0O2d1cF9mZCwgMCk7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O2FkZHIgPSBtbWFwKE5VTEwsIHNlbGYtJmd0O3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkJICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX05FKHNlbGYtJmd0O2FkZHIsIE1BUF9GQUlMRUQpIHsKJiM0MzsJCWludCBlcnIgPSBlcnJubzsKJiM0MzsKJiM0MzsJCWNsb3NlKHplcm9fZmQpOwomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7Z3VwX2ZkKTsKJiM0MzsJCVRIX0xPRygmIzM0O21tYXAgZmFpbGVkOiAlcyYjMzQ7LCBzdHJlcnJvcihlcnIpKTsKJiM0MzsJfQomIzQzOwljbG9zZSh6ZXJvX2ZkKTsKJiM0MzsKJiM0MzsJaWYgKHZhcmlhbnQtJmd0O3RocCkKJiM0MzsJCW1hZHZpc2Uoc2VsZi0mZ3Q7YWRkciwgc2VsZi0mZ3Q7c2l6ZSwgTUFEVl9IVUdFUEFHRSk7CiYjNDM7CWVsc2UgaWYgKCF2YXJpYW50LSZndDtodWdldGxiKQomIzQzOwkJbWFkdmlzZShzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplLCBNQURWX05PSFVHRVBBR0UpOwomIzQzOwomIzQzOwlmb3IgKHAgPSBzZWxmLSZndDthZGRyOyAodW5zaWduZWQgbG9uZylwICZsdDsgKHVuc2lnbmVkIGxvbmcpc2VsZi0mZ3Q7YWRkcgomIzQzOwkJCSYjNDM7IHNlbGYtJmd0O3NpemU7IHAgJiM0Mzs9IHBzaXplKCkpCiYjNDM7CQlwWzBdID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihndXBfdGVzdCkKJiM0Mzt7CiYjNDM7CW11bm1hcChzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplKTsKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7Z3VwX2ZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX2d1cF9jbWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLAomIzQzOwkJCSBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLAomIzQzOwkJCSBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LAomIzQzOwkJCSB1bnNpZ25lZCBsb25nIGNvbW1hbmQsCiYjNDM7CQkJIHVuc2lnbmVkIGludCB0ZXN0X2ZsYWdzLAomIzQzOwkJCSB1bnNpZ25lZCBpbnQgd2hpY2hfcGFnZSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsKJiM0MzsJCQkuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtJmd0O2FkZHIsCiYjNDM7CQkJLnNpemUgPSBzZWxmLSZndDtzaXplLAomIzQzOwkJCS5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gJmx0OyAwID8KJiM0MzsJCQkJc2VsZi0mZ3Q7c2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLAomIzQzOwkJCS5ndXBfZmxhZ3MgPSB2YXJpYW50LSZndDt3cml0ZSA/IEZPTExfV1JJVEUgOiAwLAomIzQzOwkJCS50ZXN0X2ZsYWdzID0gdGVzdF9mbGFncywKJiM0MzsJCQkud2hpY2hfcGFnZXMgPSB7IHdoaWNoX3BhZ2UgfSwKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQlUSF9MT0coJiMzNDtucl9wYWdlc19wZXJfY2FsbD0ldSYjMzQ7LCBndXAubnJfcGFnZXNfcGVyX2NhbGwpOwomIzQzOwkJQVNTRVJUX0VRKGlvY3RsKHNlbGYtJmd0O2d1cF9mZCwgY29tbWFuZCwgJmFtcDtndXApLCAwKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzKQomIzQzO3sKJiM0MzsJcnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfQkFTSUNfVEVTVCwgMCwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXMpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9CQVNJQ19URVNULCAwLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBkdW1wX3VzZXJfcGFnZXNfd2l0aF9nZXQpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIERVTVBfVVNFUl9QQUdFU19URVNULCAwLCAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBkdW1wX3VzZXJfcGFnZXNfd2l0aF9waW4pCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIERVTVBfVVNFUl9QQUdFU19URVNULAomIzQzOwkJICAgIEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOLCAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlc19mYXN0KQomIzQzO3sKJiM0MzsJcnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfRkFTVF9CRU5DSE1BUkssIDAsIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2Zhc3QpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9GQVNUX0JFTkNITUFSSywgMCwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9MT05HVEVSTV9CRU5DSE1BUkssIDAsIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGR1bXBfdXNlcl9wYWdlc19zcGFyc2VfaW5kaWNlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7CiYjNDM7CWludCB6ZXJvX2ZkLCBndXBfZmQ7CiYjNDM7CWNoYXIgKmFkZHIsICpwOwomIzQzOwomIzQzOwl6ZXJvX2ZkID0gb3BlbigmIzM0Oy9kZXYvemVybyYjMzQ7LCBPX1JEV1IpOwomIzQzOwlBU1NFUlRfR0UoemVyb19mZCwgMCk7CiYjNDM7CiYjNDM7CWd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTsKJiM0MzsJQVNTRVJUX0dFKGd1cF9mZCwgMCk7CiYjNDM7CiYjNDM7CWFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFLCB6ZXJvX2ZkLCAwKTsKJiM0MzsJY2xvc2UoemVyb19mZCk7CiYjNDM7CUFTU0VSVF9ORShhZGRyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJbWFkdmlzZShhZGRyLCBzaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsKJiM0MzsJZm9yIChwID0gYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCAmbHQ7ICh1bnNpZ25lZCBsb25nKWFkZHIgJiM0Mzsgc2l6ZTsKJiM0MzsJICAgICBwICYjNDM7PSBwc2l6ZSgpKQomIzQzOwkJcFswXSA9IDA7CiYjNDM7CiYjNDM7CWd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKJiM0MzsJZ3VwLnNpemUgPSBzaXplOwomIzQzOwlndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBzaXplIC8gcHNpemUoKTsKJiM0MzsJZ3VwLmd1cF9mbGFncyA9IEZPTExfV1JJVEU7CiYjNDM7CWd1cC53aGljaF9wYWdlc1swXSA9IDE7CiYjNDM7CWd1cC53aGljaF9wYWdlc1sxXSA9IDIwOwomIzQzOwlndXAud2hpY2hfcGFnZXNbMl0gPSAweDEwMDE7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShpb2N0bChndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCAmYW1wO2d1cCksIDApOwomIzQzOwomIzQzOwltdW5tYXAoYWRkciwgc2l6ZSk7CiYjNDM7CWNsb3NlKGd1cF9mZCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJY2hhciAqZmlsZSA9ICYjMzQ7L2Rldi96ZXJvJiMzNDs7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJfQomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgPT0gLTEpIHsKJiM0MzsJCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CQlpZiAoZXJybm8gPT0gRUFDQ0VTKQomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxuJiMzNDspOwomIzQzOwkJaWYgKGVycm5vID09IEVOT0VOVCkgewomIzQzOwkJCURJUiAqZGVidWdmcyA9IG9wZW5kaXIoJiMzNDsvc3lzL2tlcm5lbC9kZWJ1ZyYjMzQ7KTsKJiM0MzsKJiM0MzsJCQlpZiAoIWRlYnVnZnMpIHsKJiM0MzsJCQkJa3NmdF9leGl0X3NraXAoJiMzNDtNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXG4mIzM0Oyk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJY2xvc2VkaXIoZGVidWdmcyk7CiYjNDM7CQkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7Q2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcbiYjMzQ7KTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwl9CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwppbmRleCA1MTBkZTkzYmU2ODE0Li5jOWQ4YjQ0OTEyNjM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7CiBzdGF0aWMgaW50IG5yX2h1Z2V0bGJzaXplczsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKQEAgLTEwLDkgJiM0MzsxMCw2IEBACiAgKiBidWdzLgogICovCiAKLSNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwotCiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CkBAIC0zMyw2ICYjNDM7MzAsOSBAQAogI2luY2x1ZGUgJmx0O3N5cy9ldmVudGZkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmQuaCZndDsKICNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKIAogLyoKICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24mIzM5O3QgZXhwb3J0ZWQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKaW5kZXggNTU1YjRiM2QxNDMwNy4uNTdjZjc5MGNhNDc4ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBNSU5fRlJFRV9QQUdFUwkyMAogI2RlZmluZSBOUl9IVUdFX1BBR0VTCTEwCS8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCmluZGV4IDBmMmFhZDFiN2RiZDYuLmE0NThiZWNmNTgzMjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCkBAIC0xOCw3ICYjNDM7MTgsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWZkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpCiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYwppbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMKQEAgLTI2LDcgJiM0MzsyNiw2IEBACiAjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIERFRkFVTFRfTEVOR1RIX01CIDEwVUwKICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jCmluZGV4IDNmZjdmMDYyYjdlYjQuLmY0NTE0ZGE0OWUxZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYwppbmRleCBiYzIwMmU0ZWQyYmRhLi4yMDg2NGU3ZDRlMGM3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMKQEAgLTIxLDkgJiM0MzsyMSw5IEBACiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3RhdGZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORQogI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jCmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uYwpAQCAtMjAsNyAmIzQzOzIwLDYgQEAKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaWZuZGVmIFNUQVRYX0RJT0FMSUdOCiAjZGVmaW5lIFNUQVRYX0RJT0FMSUdOCQkweDAwMDAyMDAwVQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwppbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwpAQCAtMTAsNyAmIzQzOzEwLDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMKaW5kZXggZjk0NTQ5ZWZjYzZmZi4uMjUzMmE0MmI5OGRmZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBJTkxPT1BfSVRFUiAxMDAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDBkNmM3MWVkMmZhZTMuLmJhMjFmNTg1MjVlNDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKQEAgLTIyLDcgJiM0MzsyMiw2IEBACiAjaW5jbHVkZSAmIzM0O2xpbnV4L21hZ2ljLmgmIzM0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMICZsdDsmbHQ7IDMwKSkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplOwpAQCAtMTQ0LDYgJiM0MzsxNDMsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCWNoYXIgYnVmWzEgJmx0OyZsdDsgMTBdOwogCWNoYXIgcGF0aFtQQVRIX01BWF07CiAJY2hhciAqc3RyLCAqZW5kOwomIzQzOwlpbnQgcmV0OwogCiAJZmluZm8uZGlyID0gZGlyOwogCXN0YXQoZmluZm8uZGlyLCAmYW1wO3BhdGhfc3RhdCk7CkBAIC0xNjMsOCAmIzQzOzE2Myw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpCiAJCSAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKQogCSAgICAmZ3Q7PSBzaXplb2YocGF0aCkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKLQlpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkKLQkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7cmVhZF9maWxlKHVldmVudCkmIzM0Oyk7CiYjNDM7CXJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRfZmlsZSglcyk6ICVzXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCkpOwogCWlmIChzdHJzdHIoYnVmLCAmIzM0O0RFVlRZUEU9ZGlzayYjMzQ7KSkgewogCQkvKiBGb3VuZCBpdCAqLwogCQlpZiAoc25wcmludGYoZmluZm8uZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwKQEAgLTM0NSw3ICYjNDM7MzQ2LDcgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cCkKIHsKIAljb25zdCBpbnQgb3Blbl9vcHQgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IE9fUkRPTkxZIDogT19SRFdSOwogCWNvbnN0IGludCBtbWFwX3Byb3QgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IFBST1RfUkVBRCA6IChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLQlpbnQgZmQ7CiYjNDM7CWludCBmZCwgcmV0OwogCXZvaWQgKnA7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCkBAIC0zODksNyAmIzQzOzM5MCwxMSBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttbWFwKCkmIzM0Oyk7CiAKIAkvKiBEcm9wIHBhZ2UgY2FjaGUgKi8KLQl3cml0ZV9maWxlKCYjMzQ7L3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzJiMzNDssICYjMzQ7MyYjMzQ7LCAyKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZSgmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyYjMzQ7LCAmIzM0OzMmIzM0OywgMik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDt3cml0ZV9maWxlKGRyb3BfY2FjaGVzKTogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBzdHJlcnJvcigtcmV0KSk7CiYjNDM7CiAJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCXJldHVybiBwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYwppbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYwpAQCAtMTUsNyAmIzQzOzE1LDYgQEAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJmx0O2luY2x1ZGUvdmRzby90aW1lNjQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggJiMzNDsvc3lzL2tlcm5lbC9tbS9rc20vJiMzNDsKICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwppbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwpAQCAtNSw3ICYjNDM7NSw2IEBACiAgKi8KIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CkBAIC0xNiw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKIAogI2RlZmluZSBUV09NRUcJCSgyJmx0OyZsdDsyMCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwppbmRleCBjZmQxOTg3MzM5YzEzLi5mOTVlM2VhNTdjM2E5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCkBAIC0yNCw3ICYjNDM7MjQsNiBAQAogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTAkJKFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHwJXAogCQkJCQkgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHwJXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKaW5kZXggODJjNmU5NmVhNmViMy4uZjllYzE0MDhhNmUzMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCkBAIC0xNCw3ICYjNDM7MTQsNiBAQAogI2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogCiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VECmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jCmluZGV4IGFlNmUxNTMwYjM1NDguLmI3ODgyYWI5NzY4M2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jCkBAIC00NSw4ICYjNDM7NDUsOCBAQAogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9wdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtzZXRqbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cGtleS1oZWxwZXJzLmgmIzM0OwogCiB1NjQgc2hhZG93X3BrZXlfcmVnOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaAppbmRleCBkMDlmOWY2YTM4NGVlLi5hZTBhYjVlZmFiYWU2IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaApAQCAtMTMwLDMwICYjNDM7MTMwLDYgQEAgdGVzdF9zZWxlY3RlZCgpIHsKIAlmaQogfQogCi1ydW5fZ3VwX21hdHJpeCgpIHsKLSAgICAjIC10OiB0aHA9b24sIC1UOiB0aHA9b2ZmLCAtSDogaHVnZXRsYj1vbgotICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2Ci0KLSAgICBmb3IgaHVnZSBpbiAtdCAtVCAmIzM0Oy1IIC1tICRodWdldGxiX21iJiMzNDs7IGRvCi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm0KLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkbwotICAgICAgICAgICAgIyAtdzogd3JpdGU9MSwgLVc6IHdyaXRlPTAKLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG8KLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWQKLSAgICAgICAgICAgICAgICBmb3Igc2hhcmUgaW4gLVMgJiMzNDsgJiMzNDs7IGRvCi0gICAgICAgICAgICAgICAgICAgICMgLW46IEhvdyBtYW55IHBhZ2VzIHRvIGZldGNoIHRvZ2V0aGVyPyAgNTEyIGlzIHNwZWNpYWwKLSAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0JiMzOTtzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0bwotICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCBwYXJ0aWFsIGd1cCB3aGVuIGhpdCBhIGh1Z2UgaW4gd2hhdGV2ZXIgZm9ybQotICAgICAgICAgICAgICAgICAgICBmb3IgbnVtIGluICYjMzQ7LW4gMSYjMzQ7ICYjMzQ7LW4gNTEyJiMzNDsgJiMzNDstbiAxMjMmIzM0OyAmIzM0Oy1uIC0xJiMzNDs7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRodWdlICR0ZXN0X2NtZCAkd3JpdGUgJHNoYXJlICRudW0KLSAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgIGRvbmUKLSAgICAgICAgZG9uZQotICAgIGRvbmUKLX0KLQogIyBmaWx0ZXIgNjRiaXQgYXJjaGl0ZWN0dXJlcwogQVJDSDY0U1RSPSYjMzQ7YXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NCYjMzQ7CiBpZiBbIC16ICYjMzQ7JEFSQ0gmIzM0OyBdOyB0aGVuCkBAIC0yNzUsMTggJiM0MzsyNTEsNyBAQCBmaQogCiBDQVRFR09SWT0mIzM0O21tYXAmIzM0OyBydW5fdGVzdCAuL21hcF9maXhlZF9ub3JlcGxhY2UKIAotaWYgJFJVTl9BTEw7IHRoZW4KLSAgICBydW5fZ3VwX21hdHJpeAotZWxzZQotICAgICMgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFyawotICAgIENBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIDEKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMQotICAgICMgcGluX3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFyawotICAgIENBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIDEKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMQotZmkKLSMgRHVtcCBwYWdlcyAwLCAxOSwgYW5kIDQwOTYsIHVzaW5nIHBpbl91c2VyX3BhZ2VzOgotQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMAomIzQzO0NBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cAogQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtCiAKIENBVEVHT1JZPSYjMzQ7dXNlcmZhdWx0ZmQmIzM0OyBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0cwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCmluZGV4IGUxOThmYWNmNzhiYjUuLjE2ODdlOTg0YWExNGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKQEAgLTksNyAmIzQzOzksNiBAQAogCiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgUEFHRU1BUF9GSUxFX1BBVEggJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXAmIzM0OwogI2RlZmluZSBURVNUX0lURVJBVElPTlMgMTAwMDAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCmluZGV4IDg2YTYwMzY5MjgyNjEuLjBlMDgzYWI3MWFmNjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwpAQCAtMjEsNyAmIzQzOzIxLDYgQEAKICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHVpbnQ2NF90IHBhZ2VzaXplOwogdW5zaWduZWQgaW50IHBhZ2VzaGlmdDsKQEAgLTE0Niw3ICYjNDM7MTQ1LDEwIEBAIHN0YXRpYyB2b2lkIHdyaXRlX2RlYnVnZnMoY29uc3QgY2hhciAqZm10LCAuLi4pCiAJaWYgKHJldCAmZ3Q7PSBJTlBVVF9NQVgpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCi0Jd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpOwomIzQzOwlyZXQgPSB3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgJiM0MzsgMSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDt3cml0ZV9maWxlKCVzKTogJXNcbiYjMzQ7LCBTUExJVF9ERUJVR0ZTLAomIzQzOwkJCQkgICBzdHJlcnJvcigtcmV0KSk7CiB9CiAKIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYwppbmRleCA1MGQwODA1YjY1ZGI5Li5hMDRmNTg4ZGY3ODBmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYwpAQCAtMTQsNyAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2lmICFkZWZpbmVkKE1BUF9IVUdFVExCKQogI2RlZmluZSBNQVBfSFVHRVRMQgkweDQwMDAwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYwpAQCAtMTcsNyAmIzQzOzE3LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiBpbnQgYmFja2luZ19mZCA9IC0xOwogaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmgKaW5kZXggOTJhMjFiOTdmNzQ1YS4uMDcyMzg0M2E3NjI2YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oCkBAIC0zNyw3ICYjNDM7MzcsNiBAQAogCiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgVUZGRF9GTEFHUwkoT19DTE9FWEVDIHwgT19OT05CTE9DSyB8IFVGRkRfVVNFUl9NT0RFX09OTFkpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jCmluZGV4IGM5NzNkNjcyMjcyMGMuLmViNGIyNDMzYjAwZTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwpAQCAtNyw4ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmbHQ7YXNzZXJ0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3VmZmQtY29tbW9uLmgmIzM0OwogCiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMKaW5kZXggZTI0ZDdiYTAwYjQ0MS4uNWEzNTRhNjY0ZDFmNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYwpAQCAtMTEsNyAmIzQzOzExLDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAvKgogICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3NlcwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCmluZGV4IDgwYmM5ZjU5N2I1MjEuLjQ3NTFkYjc5OGMzYWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKQEAgLTg4OSwxMTEgJiM0Mzs4ODksNTQgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAlyZXR1cm4gcmV0ICZndDsgMCA/IDAgOiAtZXJybm87CiB9CiAKLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewotCWludCBmZDsKLQlzc2l6ZV90IG51bXJlYWQ7Ci0KLQlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwotCWlmIChmZCA9PSAtMSkKLQkJcmV0dXJuIDA7Ci0KLQludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKLQlpZiAobnVtcmVhZCAmbHQ7IDEpIHsKLQkJY2xvc2UoZmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlidWZbbnVtcmVhZF0gPSAmIzM5O1wwJiMzOTs7Ci0JY2xvc2UoZmQpOwotCi0JcmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIGJvb2wgaWdub3JlX2VpbnZhbCkKLXsKLQlpbnQgZmQsIHNhdmVkX2Vycm5vOwotCXNzaXplX3QgbnVtd3JpdHRlbjsKLQotCWlmIChidWZsZW4gJmx0OyAyKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XG4mIzM0OywgYnVmbGVuKTsKLQotCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7Ci0JaWYgKGZkID09IC0xKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBvcGVuIGZhaWxlZDogJXNcbiYjMzQ7LCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwotCi0JbnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOwotCXNhdmVkX2Vycm5vID0gZXJybm87Ci0JY2xvc2UoZmQpOwotCWVycm5vID0gc2F2ZWRfZXJybm87Ci0JaWYgKG51bXdyaXR0ZW4gJmx0OyAwKSB7Ci0JCWlmIChpZ25vcmVfZWludmFsICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVkFMKQotCQkJcmV0dXJuOwotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXG4mIzM0OywgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksCi0JCQkJYnVmLCBzdHJlcnJvcihlcnJubykpOwotCX0KLQlpZiAobnVtd3JpdHRlbiAhPSBidWZsZW4gLSAxKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xuJiMzNDssCi0JCQkJcGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7Ci19Ci0KLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCi17Ci0JX193cml0ZV9maWxlKHBhdGgsIGJ1ZiwgYnVmbGVuLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpOwotfQotCi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpCi17Ci0JY2hhciBidWZbMjFdOwotCi0JaWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpCi0JCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3JlYWRfZmlsZSgpJiMzNDspOwotCi0JcmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtLCBib29sIGlnbm9yZV9laW52YWwpCi17Ci0JY2hhciBidWZbMjFdOwotCi0Jc3ByaW50ZihidWYsICYjMzQ7JWx1JiMzNDssIG51bSk7Ci0JX193cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgJiM0MzsgMSwgaWdub3JlX2VpbnZhbCk7Ci19Ci0KLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKQotewotCXJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7Ci19Ci0KLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pCi17Ci0JcmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIHRydWUpOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDsKIAogdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKQogewotCWlmIChzaG1tYXgpCi0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIHNobW1heCk7Ci0JaWYgKHNobWFsbCkKLQkJd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGwmIzM0Oywgc2htYWxsKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHNobW1heCkgewomIzQzOwkJcmV0ID0gd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0Oywgc2htbWF4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byByZXN0b3JlIHNobW1heDogJXNcbiYjMzQ7LAomIzQzOwkJCQkJICAgc3RyZXJyb3IoLXJldCkpOwomIzQzOwl9CiYjNDM7CWlmIChzaG1hbGwpIHsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIHNobWFsbCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBzaG1hbGw6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKJiM0MzsJfQogfQogCiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aCkKIHsKIAl1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTsKIAl1bnNpZ25lZCBsb25nIHZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwogCi0JdmFsID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7KTsKIAlpZiAodmFsICZsdDsgbGVuZ3RoKSB7Ci0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIGxlbmd0aCk7CiYjNDM7CQlyZXQgPSB3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCBsZW5ndGgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobW1heDogJXNcbiYjMzQ7LAomIzQzOwkJCQkJICAgbGVuZ3RoLCBzdHJlcnJvcigtcmV0KSk7CiAJCXNobW1heCA9IHZhbDsKIAl9CiAKLQl2YWwgPSByZWFkX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDspOwomIzQzOwlyZXQgPSByZWFkX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gcmVhZCAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBzdHJlcnJvcigtcmV0KSk7CiAJaWYgKHZhbCAmbHQ7IG5yKSB7Ci0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIG5yKTsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIG5yKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIG5yLCBzdHJlcnJvcigtcmV0KSk7CiAJCXNobWFsbCA9IHZhbDsKIAl9CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaApAQCAtOCw2ICYjNDM7OCw4IEBACiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7IC8qIF9TQ19QQUdFU0laRSAqLwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vZmlsZV91dGlscy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9odWdlcGFnZV9zZXR0aW5ncy5oJmd0OwogCiAjZGVmaW5lIEJJVF9VTEwobnIpICAgICAgICAgICAgICAgICAgICgxVUxMICZsdDsmbHQ7IChucikpCiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpCkBAIC0xNjYsMTIgJiM0MzsxNjgsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTsKICNkZWZpbmUgUEFHRU1BUF9QUkVTRU5UKGVudCkJKCgoZW50KSAmYW1wOyAoMXVsbCAmbHQ7Jmx0OyA2MykpICE9IDApCiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudCkJKChlbnQpICZhbXA7ICgoMXVsbCAmbHQ7Jmx0OyA1NSkgLSAxKSkKIAotdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7Ci1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7Ci11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpOwotdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pOwotdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7Ci0KIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MjAKCQkJCQkJCW91dHB1dDogNjcKCQkJCQkJCXRob3VnaHRzOiAxMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBXb3J0aEZ1enppbmc9ZmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGFueSAqZnVuY3Rpb25hbCogY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmYWlyIG51bWJlciBvZiBmaWxlcywgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKRmlyc3QgcGFzczogSSBzZWUgdGhlIGNoYW5nZXMgc3BhbiBgRG9jdW1lbnRhdGlvbi9gLCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIChhbHdheXMgYSBnb29kIHNpZ24gb2YgY29kZSBjaHVybiBvciBhZGRpdGlvbiksIHBsdXMgYSBsb3Qgb2YgYWN0aXZpdHkgd2l0aGluIGB0b29scy9saWIvbW0vYCwgYHRvb2xzL21tL2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gTXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbjsgdGhpcyBzY3JlYW1zICp1c2Vyc3BhY2UgdG9vbHMgYW5kIHRlc3RzKiByYXRoZXIgdGhhbiBjb3JlIGtlcm5lbCBjb2RlLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2ssIG1vcmUgZ3JhbnVsYXIgY2hlY2sgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBBIHNlY29uZCBnbGFuY2UgYXQgdGhlIGZpbGUgbGlzdCByZWluZm9yY2VzIHRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50LiBgRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RgIGlzIGRvY3VtZW50YXRpb24sIGBNQUlOVEFJTkVSU2AgaXMsIHdlbGwsIGBNQUlOVEFJTkVSU2AuIFRoZSBgdG9vbHMvbGliL21tL2AgYW5kIGB0b29scy9tbS9gIGRpcmVjdG9yaWVzIGFwcGVhciB0byBjb250YWluIHN1cHBvcnRpbmcgbGlicmFyaWVzIGFuZCBidWlsZCBmaWxlcywgYWxvbmcgd2l0aCB1c2VyIHNwYWNlIHRvb2xzLiBUaGUgYmlnZ2VzdCBjaHVuayBvZiB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gIC0gdGhlc2UgYXJlIHNlbGYgdGVzdHMsIG5vdCBrZXJuZWwgZHJpdmVycy4KCkkmIzM5O20gY29uZmlkZW50IEkmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0LiAqVGhlcmUgaXMgYWJzb2x1dGVseSBubyBtb2RpZmljYXRpb24gdG8gYW55IGNvcmUga2VybmVsIGNvbXBvbmVudHMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuKiBJdCYjMzk7cyBhbGwgdXNlcnNwYWNlIHRvb2xzIGFuZCB0ZXN0cywgbGlrZWx5IHJlZmFjdG9yaW5nLCBvciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIGNvcmUgdGhhdCBhcmUgc3ViamVjdCB0byBmdXp6aW5nLCBJJiMzOTttIGNvbmZpZGVudCBJIGNhbiBzYWZlbHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMsIHNlbGZ0ZXN0cywgRG9jdW1lbnRhdGlvbiwgYW5kIE1BSU5UQUlORVJTLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMsIHNlbGZ0ZXN0cywgRG9jdW1lbnRhdGlvbiwgYW5kIE1BSU5UQUlORVJTLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MTI6MTkuMDc4MjI4NDM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMzUyNTgxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scywgc2VsZnRlc3RzLCBEb2N1bWVudGF0aW9uLCBhbmQgTUFJTlRBSU5FUlMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToxMjoxOS4wNzgyMzM5MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTU5NDc0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZjJiYTU4YjIzY2UzOTkwNGExZjY3ZGRjYWI3YzI5OTRjZjVhN2I3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDE5OjEyOjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG5pbmRleCBjMTZjYTE2M2I1NWUzLi4xNTY0YjE2OTk0YWQ2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG5AQCAtMjI4LDEyICsyMjgsMTggQEAgVW5pdCB0ZXN0aW5nXFxuID09PT09PT09PT09PVxcbiBUaGlzIGZpbGU6OlxcbiBcXG4tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXFxuIFxcbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XFxuK2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlcyB0byBleGVyY2lzZSBwaW5fdXNlcl9wYWdlcyooKTpcXG4gXFxuLSogUElOX0ZBU1RfQkVOQ0hNQVJLICguL2d1cF90ZXN0IC1hKVxcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxcbisqIHBpbl91c2VyX3BhZ2VzIHZpYSBQSU5fQkFTSUNfVEVTVFxcbisqIHBpbl91c2VyX3BhZ2VzX2Zhc3QgdmlhIFBJTl9GQVNUX0JFTkNITUFSS1xcbisqIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtIHZpYSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFxuK1xcbitSdW4gd2l0aDo6XFxuK1xcbisgIG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW1cXG4rICAuL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cFxcbiBcXG4gWW91IGNhbiBtb25pdG9yIGhvdyBtYW55IHRvdGFsIGRtYS1waW5uZWQgcGFnZXMgaGF2ZSBiZWVuIGFjcXVpcmVkIGFuZCByZWxlYXNlZFxcbiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OlxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggMGY1MTNiNDJiYzE4Ni4uODYxNTA0ZmEyZTMxOCAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE3MDMxLDggKzE3MDMxLDkgQEAgVDpcXHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW1cXG4gRjpcXHRtbS9ndXAuY1xcbiBGOlxcdG1tL2d1cF90ZXN0LmNcXG4gRjpcXHRtbS9ndXBfdGVzdC5oXFxuK0Y6XFx0dG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG4rRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xcbiBGOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXFxuLUY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xcbiBcXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKVxcbiBNOlxcdEFuZHJldyBNb3J0b24gXFx1MDAzY2FrcG1AbGludXgtZm91bmRhdGlvbi5vcmdcXHUwMDNlXFxuQEAgLTE3MTM1LDYgKzE3MTM2LDcgQEAgRjpcXHRtbS9tZW1vcnktdGllcnMuY1xcbiBGOlxcdG1tL3BhZ2VfaWRsZS5jXFxuIEY6XFx0bW0vcGdhbGxvYy10cmFjay5oXFxuIEY6XFx0bW0vcHJvY2Vzc192bV9hY2Nlc3MuY1xcbitGOlxcdHRvb2xzL2xpYi9tbS9cXG4gRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9cXG4gXFxuIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OWExNTNlZmE4ZmJmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG5AQCAtMCwwICsxLDEwNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImZpbGVfdXRpbHMuaFxcXCJcXG4rXFxuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXHRzc2l6ZV90IG51bXJlYWQ7XFxuK1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpO1xcbitcXHRpZiAoZmQgPT0gLTEpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcXG4rXFx0aWYgKG51bXJlYWQgXFx1MDAzYyAxKSB7XFxuK1xcdFxcdGVyciA9IG51bXJlYWQgPyBlcnJubyA6IEVOT0RBVEE7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0cmV0dXJuIC1lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGJ1ZltudW1yZWFkXSA9ICdcXFxcMCc7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXFxuK3tcXG4rXFx0aW50IGZkLCBzYXZlZF9lcnJubztcXG4rXFx0c3NpemVfdCBudW13cml0dGVuO1xcbitcXG4rXFx0aWYgKGJ1ZmxlbiBcXHUwMDNjIDIpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcXG4rXFx0aWYgKGZkID09IC0xKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXG4rXFx0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbitcXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRpZiAobnVtd3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtc2F2ZWRfZXJybm87XFxuK1xcbitcXHRpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcdGludCByZXQ7XFxuK1xcdGNoYXIgYnVmWzIxXTtcXG4rXFx0Y2hhciAqZW5kO1xcbitcXG4rXFx0aWYgKCFudW0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGJ1ZlswXSBcXHUwMDNjICcwJyB8fCBidWZbMF0gXFx1MDAzZSAnOScpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0ZXJybm8gPSAwO1xcbitcXHR2YWwgPSBzdHJ0b3VsKGJ1ZiwgXFx1MDAyNmVuZCwgMTApO1xcbitcXHRpZiAoZXJybm8pXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRpZiAoKmVuZCA9PSAnXFxcXG4nKVxcbitcXHRcXHRlbmQrKztcXG4rXFxuK1xcdGlmICgqZW5kICE9ICdcXFxcMCcpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Km51bSA9IHZhbDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXFxuK3tcXG4rXFx0Y2hhciBidWZbMjFdO1xcbitcXG4rXFx0c3ByaW50ZihidWYsIFxcXCIlbHVcXFwiLCBudW0pO1xcbitcXHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICsgMSk7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XFxuK1xcdHJldHVybiByZXQgPT0gLUVJTlZBTCA/IDAgOiByZXQ7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaCBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUwZGFhODJjMmIyYjRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxcbkBAIC0wLDAgKzEsMTMgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI2lmbmRlZiBfX01NX0ZJTEVfVVRJTFNfSF9fXFxuKyNkZWZpbmUgX19NTV9GSUxFX1VUSUxTX0hfX1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGRlZi5oXFx1MDAzZVxcbitcXG4raW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xcbitpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xcbitpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKTtcXG4raW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XFxuK2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XFxuK1xcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXFxuc2ltaWxhcml0eSBpbmRleCA4NyVcXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXFxucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXFxuaW5kZXggZDc5MTdkY2UzYWJhYy4uYWJkOWY3MTgyZjg4ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXFxuKysrIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5AQCAtOCwxMiArOCwxOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJmaWxlX3V0aWxzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBUSFBfU1lTRlMgXFxcIi9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL1xcXCJcXG4gI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNFxcbitcXG4rI2lmbmRlZiBBUlJBWV9TSVpFXFxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTtcXG4gc3RhdGljIGludCBzZXR0aW5nc19pbmRleDtcXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2F2ZWRfc2V0dGluZ3M7XFxuQEAgLTQ4LDYgKzU0LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2htZW1fZW5hYmxlZF9zdHJpbmdzW10gPSB7XFxuIFxcdE5VTExcXG4gfTtcXG4gXFxuK3N0YXRpYyB2b2lkIHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCByZXQpXFxuK3tcXG4rXFx0cHJpbnRmKFxcXCIjICVzOiAlcyAoJWQpXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcigtcmV0KSwgLXJldCk7XFxuK31cXG4rXFxuIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbkBAIC02MSw4ICs3Miw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkge1xcbi1cXHRcXHRwZXJyb3IocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4gXFxuQEAgLTEwMywxMiArMTE1LDE3IEBAIHZvaWQgdGhwX3dyaXRlX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWwpXFxuIFxcdFxcdHByaW50ZihcXFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gXFx0fVxcbi1cXHR3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcXG4rXFx0cmV0ID0gd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICsgMSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXFxuIHtcXG4gXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFx0dW5zaWduZWQgbG9uZyBudW07XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTIFxcXCIlc1xcXCIsIG5hbWUpO1xcbkBAIC0xMTYsNyArMTMzLDEzIEBAIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdFxcdHByaW50ZihcXFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFxcdTAwMjZudW0pO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG51bTtcXG4gfVxcbiBcXG4gdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbkBAIC0xMjksNyArMTUyLDExIEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHdyaXRlX251bShwYXRoLCBudW0pO1xcbitcXHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcXG5AQCAtMTU3LDggKzE4NCwxNSBAQCB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbiBcXHRcXHQubWF4X3B0ZXNfc2hhcmVkID0gdGhwX3JlYWRfbnVtKFxcXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFxcXCIpLFxcbiBcXHRcXHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcXFwia2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXFxcIiksXFxuIFxcdH07XFxuLVxcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxcbi1cXHRcXHRzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpO1xcbitcXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xcbitcXHRcXHRpbnQgcmV0ID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcXG4rXFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xcbiBcXHRcXHRpZiAoISgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IG9yZGVycykpIHtcXG5AQCAtMjA4LDggKzI0MiwxNSBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcXG4gXFx0dGhwX3dyaXRlX251bShcXFwia2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWRcXFwiLCBraHVnZXBhZ2VkLVxcdTAwM2VtYXhfcHRlc19zaGFyZWQpO1xcbiBcXHR0aHBfd3JpdGVfbnVtKFxcXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cXFwiLCBraHVnZXBhZ2VkLVxcdTAwM2VwYWdlc190b19zY2FuKTtcXG4gXFxuLVxcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxcbi1cXHRcXHR3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtXFx1MDAzZXJlYWRfYWhlYWRfa2IpO1xcbitcXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xcbitcXHRcXHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXFxuK1xcdFxcdFxcdFxcdCAgICBzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYik7XFxuK1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7XFxuK1xcdFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcXG4gXFx0XFx0aWYgKCEoKDEgXFx1MDAzY1xcdTAwM2MgaSkgXFx1MDAyNiBvcmRlcnMpKVxcbkBAIC0zMDcsOCArMzQ4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSlcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRvcmRlcnMgfD0gMVVMIFxcdTAwM2NcXHUwMDNjIGk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0aWYgKHJldCAhPSAtRU5PRU5UKSB7XFxuK1xcdFxcdFxcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuK1xcdFxcdFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b3JkZXJzIHw9IDFVTCBcXHUwMDNjXFx1MDAzYyBpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gb3JkZXJzO1xcbkBAIC0zODIsOCArNDMwLDcgQEAgaW50IGRldGVjdF9odWdldGxiX3BhZ2Vfc2l6ZXModW5zaWduZWQgbG9uZyBzaXplc1tdLCBpbnQgbWF4KVxcbiBcXHRcXHRpZiAoc3NjYW5mKGVudHJ5LVxcdTAwM2VkX25hbWUsIFxcXCJodWdlcGFnZXMtJXp1a0JcXFwiLCBcXHUwMDI2a2IpICE9IDEpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRzaXplc1tjb3VudCsrXSA9IGtiICogMTAyNDtcXG4tXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIltJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIGtiKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcXFxuXFxcIiwga2IpO1xcbiBcXHR9XFxuIFxcdGNsb3NlZGlyKGRpcik7XFxuIFxcdHJldHVybiBjb3VudDtcXG5AQCAtNDI1LDI4ICs0NzIsNDkgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbixcXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXFxcIm5yX2h1Z2VwYWdlc1xcXCIpO1xcbiBcXG4tXFx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xcbitcXHRyZXQgPSByZWFkX251bShwYXRoLCBcXHUwMDI2bnIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG5yO1xcbiB9XFxuIFxcbiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXFxcIm5yX2h1Z2VwYWdlc1xcXCIpO1xcbiBcXG4tXFx0d3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xcbitcXHRyZXQgPSB3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXFxcImZyZWVfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFxcdTAwMjZucik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXFxuQEAgLTUwMiw3ICs1NzAsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChucl9lbmFibGVkIFxcdTAwM2UgbWF4KSB7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxcXG5cXFwiLCBucl9lbmFibGVkLCBtYXgpO1xcbitcXHRcXHRwcmludGYoXFxcIiMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIG5yX2VuYWJsZWQsIG1heCk7XFxuIFxcdFxcdG5yX2VuYWJsZWQgPSBtYXg7XFxuIFxcdH1cXG4gXFxuQEAgLTU3NCw4ICs2NDMsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZClcXG4gXFxuIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKVxcbiB7XFxuK1xcdCh2b2lkKXNpZztcXG4rXFxuIFxcdC8qIGV4aXQoKSB3aWxsIGludm9rZSB0aGUgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQgaGFuZGxlci4gKi9cXG4tXFx0ZXhpdChLU0ZUX0ZBSUwpO1xcbitcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIH1cXG4gXFxuIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXFxucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuaW5kZXggMTQ0NmE2NTllNTQwOC4uMTU0ZDc0MGJlMDJlOCAxMDA2NDRcXG4tLS0gYS90b29scy9tbS8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxcbkBAIC0zLDMgKzMsNCBAQCBzbGFiaW5mb1xcbiBwYWdlLXR5cGVzXFxuIHBhZ2Vfb3duZXJfc29ydFxcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitndXBfYmVuY2hcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLmYyMGEzMmQ4Y2MyMmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy9tbS9NYWtlZmlsZVxcbkBAIC0zLDEzICszLDE1IEBAXFxuICNcXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcXG4gXFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlclxcbitCVUlMRF9UQVJHRVRTICs9IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcXG4gXFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXFxuIExJQlMgPSAkKExJQl9ESVIpL2xpYmFwaS5hXFxuK0dVUF9CRU5DSF9PQkpTID0gZ3VwX2JlbmNoLmMgLi4vbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgLi4vbGliL21tL2ZpbGVfdXRpbHMuY1xcbiBcXG4tQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1wdGhyZWFkXFxuK0NGTEFHUyArPSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtSS4uLy4uIC1wdGhyZWFkXFxuIExERkxBR1MgKz0gJChMSUJTKSAtcHRocmVhZFxcbiBcXG4gYWxsOiAkKEJVSUxEX1RBUkdFVFMpXFxuQEAgLTIyLDggKzI0LDExIEBAICQoTElCUyk6XFxuICU6ICUuY1xcbiBcXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFxcdTAwM2MgJChMREZMQUdTKVxcbiBcXG4rZ3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpXFxuK1xcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKEdVUF9CRU5DSF9PQkpTKSAkKExERkxBR1MpXFxuK1xcbiBjbGVhbjpcXG4tXFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rXFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXFxuIFxcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxcbiBcXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXFxuc2ltaWxhcml0eSBpbmRleCA1MCVcXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxucmVuYW1lIHRvIHRvb2xzL21tL2d1cF9iZW5jaC5jXFxuaW5kZXggM2Y4NDFhOTZmODcwNi4uNzUzNjliMjY3NGE5NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuKysrIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5AQCAtMTAsMTEgKzEwLDEwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2Nhc3NlcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbW0vZ3VwX3Rlc3QuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIE1CICgxVUwgXFx1MDAzY1xcdTAwM2MgMjApXFxuIFxcbkBAIC0zOCwxMiArMzcsNiBAQCBzdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcXG4gXFx0XFx0cmV0dXJuIFxcXCJQSU5fRkFTVF9CRU5DSE1BUktcXFwiO1xcbiBcXHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XFxuIFxcdFxcdHJldHVybiBcXFwiUElOX0xPTkdURVJNX0JFTkNITUFSS1xcXCI7XFxuLVxcdGNhc2UgR1VQX0JBU0lDX1RFU1Q6XFxuLVxcdFxcdHJldHVybiBcXFwiR1VQX0JBU0lDX1RFU1RcXFwiO1xcbi1cXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxcbi1cXHRcXHRyZXR1cm4gXFxcIlBJTl9CQVNJQ19URVNUXFxcIjtcXG4tXFx0Y2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDpcXG4tXFx0XFx0cmV0dXJuIFxcXCJEVU1QX1VTRVJfUEFHRVNfVEVTVFxcXCI7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIFxcXCJVbmtub3duIGNvbW1hbmRcXFwiO1xcbiB9XFxuQEAgLTUzLDM5ICs0NiwyOSBAQCB2b2lkICpndXBfdGhyZWFkKHZvaWQgKmRhdGEpXFxuIFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XFxuIFxcdGludCBpLCBzdGF0dXM7XFxuIFxcbi1cXHQvKiBPbmx5IHJlcG9ydCB0aW1pbmcgaW5mb3JtYXRpb24gb24gdGhlICpfQkVOQ0hNQVJLIGNvbW1hbmRzOiAqL1xcbi1cXHRpZiAoKGNtZCA9PSBQSU5fRkFTVF9CRU5DSE1BUkspIHx8IChjbWQgPT0gR1VQX0ZBU1RfQkVOQ0hNQVJLKSB8fFxcbi1cXHQgICAgIChjbWQgPT0gUElOX0xPTkdURVJNX0JFTkNITUFSSykpIHtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlcGVhdHM7IGkrKykge1xcbi1cXHRcXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuLVxcdFxcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4tXFx0XFx0XFx0aWYgKHN0YXR1cylcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyByZXBlYXRzOyBpKyspIHtcXG4rXFx0XFx0Z3VwLnNpemUgPSBzaXplO1xcbitcXHRcXHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXFx1MDAyNmd1cCk7XFxuK1xcdFxcdGlmIChzdGF0dXMpIHtcXG4rXFx0XFx0XFx0aW50IGVyciA9IGVycm5vO1xcbiBcXG4gXFx0XFx0XFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgY21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xcbi1cXHRcXHRcXHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcXG4tXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiwgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcXCIsIGd1cC5zaXplKTtcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiJXMgaW9jdGwgZmFpbGVkOiAlc1xcXFxuXFxcIiwgY21kX3RvX3N0cihjbWQpLFxcbitcXHRcXHRcXHRcXHRzdHJlcnJvcihlcnIpKTtcXG4gXFx0XFx0XFx0cHRocmVhZF9tdXRleF91bmxvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4rXFx0XFx0XFx0cmV0dXJuIGRhdGE7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0Z3VwLnNpemUgPSBzaXplO1xcbi1cXHRcXHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXFx1MDAyNmd1cCk7XFxuLVxcdFxcdGlmIChzdGF0dXMpXFxuLVxcdFxcdFxcdGdvdG8gcmV0dXJuXztcXG4gXFxuIFxcdFxcdHB0aHJlYWRfbXV0ZXhfbG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbi1cXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJXM6IGRvbmVcXFxcblxcXCIsIGNtZF90b19zdHIoY21kKSk7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzXFxcIixcXG4rXFx0XFx0XFx0Y21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsXFxuK1xcdFxcdFxcdGd1cC5wdXRfZGVsdGFfdXNlYyk7XFxuIFxcdFxcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiVHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcXFxuXFxcIiwgZ3VwLnNpemUpO1xcbitcXHRcXHRcXHRwcmludGYoXFxcIiwgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcXCIsIGd1cC5zaXplKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJcXFxcblxcXCIpO1xcbiBcXHRcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbiBcXHR9XFxuIFxcbi1yZXR1cm5fOlxcbi1cXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFxcXCJpb2N0bCBzdGF0dXMgJWRcXFxcblxcXCIsIHN0YXR1cyk7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbkBAIC05MywzOCArNzYsMjEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiB7XFxuIFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcXG4gXFx0aW50IGZpbGVkLCBpLCBvcHQsIG5yX3BhZ2VzID0gMSwgdGhwID0gLTEsIHdyaXRlID0gMSwgbnRocmVhZHMgPSAxLCByZXQ7XFxuLVxcdGludCBmbGFncyA9IE1BUF9QUklWQVRFO1xcbitcXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURSwgc3RhcnRlZF90aHJlYWRzID0gMDtcXG4gXFx0Y2hhciAqZmlsZSA9IFxcXCIvZGV2L3plcm9cXFwiO1xcbi1cXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcXG4rXFx0Ym9vbCBodWdldGxiID0gZmFsc2UsIHRocmVhZF9lcnJvciA9IGZhbHNlO1xcbitcXHR2b2lkICp0aHJlYWRfcmVzdWx0O1xcbiBcXHRwdGhyZWFkX3QgKnRpZDtcXG4gXFx0Y2hhciAqcDtcXG4gXFxuLVxcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJtOnI6bjpGOmY6YWJjajp0VExVdXdXU0hwelxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwibTpyOm46RjpmOmFqOnRUTHV3V1NIXFxcIikpICE9IC0xKSB7XFxuIFxcdFxcdHN3aXRjaCAob3B0KSB7XFxuIFxcdFxcdGNhc2UgJ2EnOlxcbiBcXHRcXHRcXHRjbWQgPSBQSU5fRkFTVF9CRU5DSE1BUks7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdiJzpcXG4tXFx0XFx0XFx0Y21kID0gUElOX0JBU0lDX1RFU1Q7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdMJzpcXG4gXFx0XFx0XFx0Y21kID0gUElOX0xPTkdURVJNX0JFTkNITUFSSztcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ2MnOlxcbi1cXHRcXHRcXHRjbWQgPSBEVU1QX1VTRVJfUEFHRVNfVEVTVDtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnlcXG4tXFx0XFx0XFx0ICogdXNlcidzIG5vbi1vcHRpb24gYXJndW1lbnRzLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuIFxcXCJkb1xcbi1cXHRcXHRcXHQgKiBub3RoaW5nXFxcIi5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGd1cC53aGljaF9wYWdlc1swXSA9IDE7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdwJzpcXG4tXFx0XFx0XFx0Lyogd29ya3Mgb25seSB3aXRoIERVTVBfVVNFUl9QQUdFU19URVNUICovXFxuLVxcdFxcdFxcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAnRic6XFxuIFxcdFxcdFxcdC8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovXFxuIFxcdFxcdFxcdGd1cC5ndXBfZmxhZ3MgPSBzdHJ0b2wob3B0YXJnLCAwLCAwKTtcXG5AQCAtMTQxLDcgKzEwNyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0Y2FzZSAnbic6XFxuIFxcdFxcdFxcdG5yX3BhZ2VzID0gYXRvaShvcHRhcmcpO1xcbiBcXHRcXHRcXHRpZiAobnJfcGFnZXMgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpO1xcbitcXHRcXHRcXHRcXHRucl9wYWdlcyA9IHNpemUgLyBnZXRwYWdlc2l6ZSgpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAndCc6XFxuIFxcdFxcdFxcdHRocCA9IDE7XFxuQEAgLTE0OSw5ICsxMTUsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdGNhc2UgJ1QnOlxcbiBcXHRcXHRcXHR0aHAgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnVSc6XFxuLVxcdFxcdFxcdGNtZCA9IEdVUF9CQVNJQ19URVNUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAndSc6XFxuIFxcdFxcdFxcdGNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTE3Myw1MiArMTM2LDQxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0XFx0aHVnZXRsYiA9IHRydWU7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIldyb25nIGFyZ3VtZW50XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJXcm9uZyBhcmd1bWVudFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGV4aXQoMSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG9wdGluZCBcXHUwMDNjIGFyZ2MpIHtcXG4tXFx0XFx0aW50IGV4dHJhX2FyZ19jb3VudCA9IDA7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEZvciBleGFtcGxlOlxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiAgIC4vZ3VwX3Rlc3QgLWMgMCAxIDB4MTAwMVxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiAuLi50byBkdW1wIHBhZ2VzIDAsIDEsIGFuZCA0MDk3XFxuLVxcdFxcdCAqL1xcbi1cXG4tXFx0XFx0d2hpbGUgKChvcHRpbmQgXFx1MDAzYyBhcmdjKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgICAgKGV4dHJhX2FyZ19jb3VudCBcXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhblxcbi1cXHRcXHRcXHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICsgMTtcXG4tXFxuLVxcdFxcdFxcdGd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDtcXG4tXFx0XFx0XFx0ZXh0cmFfYXJnX2NvdW50Kys7XFxuLVxcdFxcdFxcdG9wdGluZCsrO1xcbi1cXHRcXHR9XFxuK1xcdGlmIChvcHRpbmQgIT0gYXJnYykge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlVuZXhwZWN0ZWQgYXJndW1lbnQgJyVzJ1xcXFxuXFxcIiwgYXJndltvcHRpbmRdKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4gXFx0fVxcbiBcXG4tXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0aWYgKGdldHVpZCgpKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcXFxuXFxcIik7XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChodWdldGxiKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcXG4gXFxuLVxcdFxcdGlmICghaHBfc2l6ZSlcXG4tXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkh1Z2VUTEIgaXMgdW5hdmFpbGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoIWhwX3NpemUpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJDb3VsZCBub3QgZGV0ZXJtaW5lIGh1Z2UgcGFnZSBzaXplXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHNpemUgPSAoc2l6ZSArIGhwX3NpemUgLSAxKSBcXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xcbi1cXHRcXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpXFxuLVxcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRrc2Z0X3NldF9wbGFuKG50aHJlYWRzKTtcXG4tXFxuIFxcdGZpbGVkID0gb3BlbihmaWxlLCBPX1JEV1J8T19DUkVBVCwgMDY2NCk7XFxuLVxcdGlmIChmaWxlZCBcXHUwMDNjIDApXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxcXG5cXFwiLCBmaWxlLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRpZiAoZmlsZWQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiVW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxcXG5cXFwiLCBmaWxlLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbiBcXG4gXFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXM7XFxuIFxcdGlmICh3cml0ZSlcXG5AQCAtMjI3LDI2ICsxNzksMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuIFxcdGlmIChndXBfZmQgPT0gLTEpIHtcXG4gXFx0XFx0c3dpdGNoIChlcnJubykge1xcbi1cXHRcXHRjYXNlIEVBQ0NFUzpcXG4tXFx0XFx0XFx0aWYgKGdldHVpZCgpKVxcbi1cXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEVOT0VOVDpcXG4gXFx0XFx0XFx0aWYgKG9wZW5kaXIoXFxcIi9zeXMva2VybmVsL2RlYnVnXFxcIikgPT0gTlVMTClcXG4tXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiY2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxcXG5cXFwiLCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgR1VQX1RFU1RfRklMRSxcXG4rXFx0XFx0XFx0XFx0c3RyZXJyb3IoZXJybm8pKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4tXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxcXG5cXFwiKTtcXG4tXFx0XFx0a3NmdF9leGl0X3Bhc3MoKTtcXG4rXFx0XFx0Z290byBlcnJfY2xvc2VfZmlsZWQ7XFxuIFxcdH1cXG4gXFxuIFxcdHAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCBmaWxlZCwgMCk7XFxuLVxcdGlmIChwID09IE1BUF9GQUlMRUQpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwibW1hcDogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdGlmIChwID09IE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0Z290byBlcnJfY2xvc2VfZ3VwX2ZkO1xcbitcXHR9XFxuIFxcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcXG4gXFxuIFxcdGlmICh0aHAgPT0gMSlcXG5AQCAtMjU1LDIxICsyMDUsNDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRtYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuIFxcbiBcXHQvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi9cXG4tXFx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXFx1MDAzYyBndXAuYWRkciArIHNpemU7IHAgKz0gcHNpemUoKSlcXG4rXFx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXFx1MDAzYyBndXAuYWRkciArIHNpemU7IHAgKz0gZ2V0cGFnZXNpemUoKSlcXG4gXFx0XFx0cFswXSA9IDA7XFxuIFxcbiBcXHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7XFxuLVxcdGFzc2VydCh0aWQpO1xcbitcXHRpZiAoIXRpZCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCB0aHJlYWRzOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0bnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGdvdG8gZXJyX3VubWFwO1xcbitcXHR9XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnRocmVhZHM7IGkrKykge1xcbiBcXHRcXHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCBcXHUwMDI2Z3VwKTtcXG4tXFx0XFx0YXNzZXJ0KHJldCA9PSAwKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInB0aHJlYWRfY3JlYXRlIGZhaWxlZDogJXNcXFxcblxcXCIsIHN0cmVycm9yKHJldCkpO1xcbitcXHRcXHRcXHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRzdGFydGVkX3RocmVhZHMrKztcXG4gXFx0fVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnRocmVhZHM7IGkrKykge1xcbi1cXHRcXHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBOVUxMKTtcXG4tXFx0XFx0YXNzZXJ0KHJldCA9PSAwKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YXJ0ZWRfdGhyZWFkczsgaSsrKSB7XFxuK1xcdFxcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIFxcdTAwMjZ0aHJlYWRfcmVzdWx0KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInB0aHJlYWRfam9pbiBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihyZXQpKTtcXG4rXFx0XFx0XFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcXG4rXFx0XFx0fSBlbHNlIGlmICh0aHJlYWRfcmVzdWx0KVxcbitcXHRcXHRcXHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbiBcXHRmcmVlKHRpZCk7XFxuIFxcbi1cXHRrc2Z0X2V4aXRfcGFzcygpO1xcbitcXHRpZiAodGhyZWFkX2Vycm9yKVxcbitcXHRcXHRnb3RvIGVycl91bm1hcDtcXG4rXFxuK1xcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcXG4rXFx0Y2xvc2UoZ3VwX2ZkKTtcXG4rXFx0Y2xvc2UoZmlsZWQpO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl91bm1hcDpcXG4rXFx0bXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpO1xcbitlcnJfY2xvc2VfZ3VwX2ZkOlxcbitcXHRjbG9zZShndXBfZmQpO1xcbitlcnJfY2xvc2VfZmlsZWQ6XFxuK1xcdGNsb3NlKGZpbGVkKTtcXG4rXFx0cmV0dXJuIDE7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbmluZGV4IDJkNTM2NjE5NmUzMDkuLjljMDM2MjRmZDI5MzYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbkBAIC0zNyw3ICszNyw4IEBAIGVuZGlmXFxuICMgTERMSUJTLlxcbiBNQUtFRkxBR1MgKz0gLS1uby1idWlsdGluLXJ1bGVzXFxuIFxcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxcbitDRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAtSSAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYlxcbitDRkxBR1MgKz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcXG4gQ0ZMQUdTICs9IC1XdW5yZWFjaGFibGUtY29kZVxcbiBMRExJQlMgPSAtbHJ0IC1scHRocmVhZCAtbG1cXG4gXFxuQEAgLTU3LDggKzU4LDggQEAgZW5kaWZcXG4gXFxuIFRFU1RfR0VOX0ZJTEVTID0gY293XFxuIFRFU1RfR0VOX0ZJTEVTICs9IGNvbXBhY3Rpb25fdGVzdFxcbitURVNUX0dFTl9GSUxFUyArPSBndXBcXG4gVEVTVF9HRU5fRklMRVMgKz0gZ3VwX2xvbmd0ZXJtXFxuLVRFU1RfR0VOX0ZJTEVTICs9IGd1cF90ZXN0XFxuIFRFU1RfR0VOX0ZJTEVTICs9IGhtbS10ZXN0c1xcbiBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLW1hZHZpc2VcXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tbWFwXFxuQEAgLTE4Nyw4ICsxODgsMTAgQEAgVEVTVF9GSUxFUyArPSB3cml0ZV9odWdldGxiX21lbW9yeS5zaFxcbiBcXG4gaW5jbHVkZSAuLi9saWIubWtcXG4gXFxuLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcXG4rJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXFxcXG4rXFx0XFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXFxuKyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxcXFxuK1xcdFxcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbiBcXG4gJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jXFxuICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmNcXG5AQCAtMjE3LDcgKzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgKz0gLW0zMiAtbXhzYXZlXFxuICQoQklOQVJJRVNfMzIpOiBMRExJQlMgKz0gLWxydCAtbGRsIC1sbVxcbiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuY1xcbiBcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4tXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSlcXG4gZW5kaWZcXG4gXFxuQEAgLTIyNiw3ICsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICs9IC1tNjQgLW14c2F2ZVxcbiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICs9IC1scnQgLWxkbFxcbiAkKEJJTkFSSUVTXzY0KTogJChPVVRQVVQpLyVfNjQ6ICUuY1xcbiBcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4tXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSlcXG4gZW5kaWZcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcXG5pbmRleCAzMGQ0YWNlNzE1NWFlLi5iM2Y1Mzc3MTE5Y2I4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcXG5AQCAtMTUsOSArMTUsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTUFQX1NJWkVfTUJcXHQxMDBcXG4gI2RlZmluZSBNQVBfU0laRVxcdChNQVBfU0laRV9NQiAqIDEwMjQgKiAxMDI0KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXFxuaW5kZXggOGFhNTI0OWQ5YmVmNi4uMzI2NGE4Mjg1NzViZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXFxuQEAgLTI5LDcgKzI5LDYgQEBcXG4gI2luY2x1ZGUgXFxcIi4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG5pbmRleCA0NWI4NGY3YjM2NGUwLi4yODlhZWQyZWJhYzAyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG5AQCAtMjUsNyArMjUsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiB1aW50NjRfdCBwYWdlX3NpemU7XFxuIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuaW5kZXggNWM4ZWMzY2E3NWQ3ZC4uYWY1Y2Q5YjMwMzM5NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG5AQCAtMjEsNyArMjEsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3Vpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL3BpZGZkL3BpZGZkLmhcXFwiXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi40YzllMTRkYmI0MzRhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXFxuQEAgLTAsMCArMSwzMjkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2RpcmVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL2lvY3RsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vZ3VwX3Rlc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisjZGVmaW5lIE1CICgxVUwgXFx1MDAzY1xcdTAwM2MgMjApXFxuK1xcbisvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi9cXG4rI2RlZmluZSBGT0xMX1dSSVRFXFx0MHgwMVxcdC8qIGNoZWNrIHB0ZSBpcyB3cml0YWJsZSAqL1xcbitcXG4rLyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovXFxuK3N0YXRpYyBjb25zdCBpbnQgbnJfcGFnZXNfbGlzdFtdID0geyAxLCA1MTIsIDEyMywgLTEgfTtcXG4rXFxuKyNkZWZpbmUgR1VQX1RFU1RfRklMRSBcXFwiL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3RcXFwiXFxuKyNkZWZpbmUgTlJfSFVHRV9QQUdFUyAxMjhcXG4rXFxuK0hVR0VUTEJfU0VUVVBfREVGQVVMVF9QQUdFUyhOUl9IVUdFX1BBR0VTKVxcbitcXG4rRklYVFVSRShndXBfdGVzdClcXG4re1xcbitcXHRpbnQgZ3VwX2ZkO1xcbitcXHRjaGFyICphZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpXFxuK3tcXG4rXFx0Ym9vbCB0aHA7XFxuK1xcdGJvb2wgaHVnZXRsYjtcXG4rXFx0Ym9vbCB3cml0ZTtcXG4rXFx0Ym9vbCBzaGFyZWQ7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfdGhwKVxcbit7XFxuK1xcdC50aHAgPSB0cnVlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfdGhwKVxcbit7XFxuK1xcdC50aHAgPSB0cnVlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV9odWdldGxiKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSB0cnVlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSlcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWQpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfdGhwKVxcbit7XFxuK1xcdC50aHAgPSB0cnVlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX2h1Z2V0bGIpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IHRydWUsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChndXBfdGVzdClcXG4re1xcbitcXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFO1xcbitcXHRpbnQgemVyb19mZDtcXG4rXFx0Y2hhciAqcDtcXG4rXFxuK1xcdHNlbGYtXFx1MDAzZXNpemUgPSAxMjggKiBNQjtcXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2VodWdldGxiKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcXG4rXFxuK1xcdFxcdGlmICghaHBfc2l6ZSlcXG4rXFx0XFx0XFx0U0tJUChyZXR1cm4sIFxcXCJIdWdlVExCIG5vdCBhdmFpbGFibGVcXFxcblxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKGh1Z2V0bGJfZnJlZV9kZWZhdWx0X3BhZ2VzKCkgXFx1MDAzYyBOUl9IVUdFX1BBR0VTKVxcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcXFxuXFxcIik7XFxuK1xcbitcXHRcXHRzZWxmLVxcdTAwM2VzaXplID0gTlJfSFVHRV9QQUdFUyAqIGhwX3NpemU7XFxuK1xcdFxcdG1tYXBfZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2VzaGFyZWQpXFxuK1xcdFxcdG1tYXBfZmxhZ3MgPSAobW1hcF9mbGFncyBcXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xcbitcXG4rXFx0LyogemVyb19mZCBoYXMgdG8gYmUgXFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xcbitcXHR6ZXJvX2ZkID0gb3BlbihcXFwiL2Rldi96ZXJvXFxcIiwgT19SRFdSKTtcXG4rXFx0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xcbitcXG4rXFx0LyogZ3VwX2ZkIGhhcyB0byBiZSBcXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXFxuK1xcdHNlbGYtXFx1MDAzZWd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcXG4rXFx0QVNTRVJUX0dFKHNlbGYtXFx1MDAzZWd1cF9mZCwgMCk7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VhZGRyID0gbW1hcChOVUxMLCBzZWxmLVxcdTAwM2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRcXHQgIG1tYXBfZmxhZ3MsIHplcm9fZmQsIDApO1xcbitcXG4rXFx0QVNTRVJUX05FKHNlbGYtXFx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0aW50IGVyciA9IGVycm5vO1xcbitcXG4rXFx0XFx0Y2xvc2UoemVyb19mZCk7XFxuK1xcdFxcdGNsb3NlKHNlbGYtXFx1MDAzZWd1cF9mZCk7XFxuK1xcdFxcdFRIX0xPRyhcXFwibW1hcCBmYWlsZWQ6ICVzXFxcIiwgc3RyZXJyb3IoZXJyKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoemVyb19mZCk7XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNldGhwKVxcbitcXHRcXHRtYWR2aXNlKHNlbGYtXFx1MDAzZWFkZHIsIHNlbGYtXFx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xcbitcXHRlbHNlIGlmICghdmFyaWFudC1cXHUwMDNlaHVnZXRsYilcXG4rXFx0XFx0bWFkdmlzZShzZWxmLVxcdTAwM2VhZGRyLCBzZWxmLVxcdTAwM2VzaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbitcXG4rXFx0Zm9yIChwID0gc2VsZi1cXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcXHUwMDNjICh1bnNpZ25lZCBsb25nKXNlbGYtXFx1MDAzZWFkZHJcXG4rXFx0XFx0XFx0KyBzZWxmLVxcdTAwM2VzaXplOyBwICs9IHBzaXplKCkpXFxuK1xcdFxcdHBbMF0gPSAwO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKGd1cF90ZXN0KVxcbit7XFxuK1xcdG11bm1hcChzZWxmLVxcdTAwM2VhZGRyLCBzZWxmLVxcdTAwM2VzaXplKTtcXG4rXFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZ3VwX2ZkKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnVuX2d1cF9jbWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxcbitcXHRcXHRcXHQgRklYVFVSRV9EQVRBKGd1cF90ZXN0KSAqc2VsZixcXG4rXFx0XFx0XFx0IGNvbnN0IEZJWFRVUkVfVkFSSUFOVChndXBfdGVzdCkgKnZhcmlhbnQsXFxuK1xcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGNvbW1hbmQsXFxuK1xcdFxcdFxcdCB1bnNpZ25lZCBpbnQgdGVzdF9mbGFncyxcXG4rXFx0XFx0XFx0IHVuc2lnbmVkIGludCB3aGljaF9wYWdlKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7XFxuK1xcdFxcdFxcdC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcixcXG4rXFx0XFx0XFx0LnNpemUgPSBzZWxmLVxcdTAwM2VzaXplLFxcbitcXHRcXHRcXHQubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXSxcXG4rXFx0XFx0XFx0Lmd1cF9mbGFncyA9IHZhcmlhbnQtXFx1MDAzZXdyaXRlID8gRk9MTF9XUklURSA6IDAsXFxuK1xcdFxcdFxcdC50ZXN0X2ZsYWdzID0gdGVzdF9mbGFncyxcXG4rXFx0XFx0XFx0LndoaWNoX3BhZ2VzID0geyB3aGljaF9wYWdlIH0sXFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgY29tbWFuZCwgXFx1MDAyNmd1cCksIDApO1xcbitcXHR9XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfQkFTSUNfVEVTVCwgMCwgMCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCwgMCwgMCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZHVtcF91c2VyX3BhZ2VzX3dpdGhfZ2V0KVxcbit7XFxuK1xcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgRFVNUF9VU0VSX1BBR0VTX1RFU1QsIDAsIDEpO1xcbit9XFxuK1xcbitURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX3BpbilcXG4re1xcbitcXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIERVTVBfVVNFUl9QQUdFU19URVNULFxcbitcXHRcXHQgICAgR1VQX1RFU1RfRkxBR19EVU1QX1BBR0VTX1VTRV9QSU4sIDEpO1xcbit9XFxuK1xcbitURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzX2Zhc3QpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfRkFTVF9CRU5DSE1BUkssIDAsIDApO1xcbit9XFxuK1xcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2Zhc3QpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fRkFTVF9CRU5DSE1BUkssIDAsIDApO1xcbit9XFxuK1xcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxcbit7XFxuK1xcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0xPTkdURVJNX0JFTkNITUFSSywgMCwgMCk7XFxuK31cXG4rXFxuK1RFU1QoZHVtcF91c2VyX3BhZ2VzX3NwYXJzZV9pbmRpY2VzKVxcbit7XFxuK1xcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XFxuK1xcdGludCB6ZXJvX2ZkLCBndXBfZmQ7XFxuK1xcdGNoYXIgKmFkZHIsICpwO1xcbitcXG4rXFx0emVyb19mZCA9IG9wZW4oXFxcIi9kZXYvemVyb1xcXCIsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTtcXG4rXFxuK1xcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcXG4rXFx0QVNTRVJUX0dFKGd1cF9mZCwgMCk7XFxuK1xcbitcXHRhZGRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgemVyb19mZCwgMCk7XFxuK1xcdGNsb3NlKHplcm9fZmQpO1xcbitcXHRBU1NFUlRfTkUoYWRkciwgTUFQX0ZBSUxFRCk7XFxuK1xcbitcXHRtYWR2aXNlKGFkZHIsIHNpemUsIE1BRFZfSFVHRVBBR0UpO1xcbitcXG4rXFx0Zm9yIChwID0gYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcXHUwMDNjICh1bnNpZ25lZCBsb25nKWFkZHIgKyBzaXplO1xcbitcXHQgICAgIHAgKz0gcHNpemUoKSlcXG4rXFx0XFx0cFswXSA9IDA7XFxuK1xcbitcXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XFxuK1xcdGd1cC5zaXplID0gc2l6ZTtcXG4rXFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gc2l6ZSAvIHBzaXplKCk7XFxuK1xcdGd1cC5ndXBfZmxhZ3MgPSBGT0xMX1dSSVRFO1xcbitcXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xcbitcXHRndXAud2hpY2hfcGFnZXNbMV0gPSAyMDtcXG4rXFx0Z3VwLndoaWNoX3BhZ2VzWzJdID0gMHgxMDAxO1xcbitcXG4rXFx0QVNTRVJUX0VRKGlvY3RsKGd1cF9mZCwgRFVNUF9VU0VSX1BBR0VTX1RFU1QsIFxcdTAwMjZndXApLCAwKTtcXG4rXFxuK1xcdG11bm1hcChhZGRyLCBzaXplKTtcXG4rXFx0Y2xvc2UoZ3VwX2ZkKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0Y2hhciAqZmlsZSA9IFxcXCIvZGV2L3plcm9cXFwiO1xcbitcXG4rXFx0ZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0ZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdGlmIChmZCA9PSAtMSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRUFDQ0VTKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcXFxuXFxcIik7XFxuK1xcdFxcdGlmIChlcnJubyA9PSBFTk9FTlQpIHtcXG4rXFx0XFx0XFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcXFwiL3N5cy9rZXJuZWwvZGVidWdcXFwiKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghZGVidWdmcykge1xcbitcXHRcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiTW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGNsb3NlZGlyKGRlYnVnZnMpO1xcbitcXHRcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcXG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcXG5pbmRleCBlMjY0MmVjYTBkMDJiLi5mYTFhNjUxOTYzZmQwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcXG5AQCAtMTAsOSArMTAsNiBAQFxcbiAgKiBidWdzLlxcbiAgKi9cXG4gXFxuLSNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4tXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuQEAgLTMzLDYgKzMwLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9ldmVudGZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gLypcXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG5AQCAtMTQsNyArMTQsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTUlOX0ZSRUVfUEFHRVNcXHQyMFxcbiAjZGVmaW5lIE5SX0hVR0VfUEFHRVNcXHQxMFxcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcXG5pbmRleCAwZjJhYWQxYjdkYmQ2Li5hNDU4YmVjZjU4MzI3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcXG5AQCAtMTgsNyArMTgsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtZmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXFxuICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcXG5pbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuQEAgLTI2LDcgKzI2LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxcbiAjZGVmaW5lIE1CX1RPX0JZVEVTKHgpICh4ICogMTAyNCAqIDEwMjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcXG5pbmRleCBiYzIwMmU0ZWQyYmRhLi4yMDg2NGU3ZDRlMGM3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXFxuQEAgLTIxLDkgKzIxLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdGZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcXG5AQCAtMjAsNyArMjAsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZm5kZWYgU1RBVFhfRElPQUxJR05cXG4gI2RlZmluZSBTVEFUWF9ESU9BTElHTlxcdFxcdDB4MDAwMDIwMDBVXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5AQCAtMTAsNyArMTAsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbkBAIC0yNSw3ICsyNSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDBkNmM3MWVkMmZhZTMuLmJhMjFmNTg1MjVlNDIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTIyLDcgKzIyLDYgQEBcXG4gI2luY2x1ZGUgXFxcImxpbnV4L21hZ2ljLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXFx1MDAzY1xcdTAwM2MgMzApKVxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcXG5AQCAtMTQ0LDYgKzE0Myw3IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXFxuIFxcdGNoYXIgYnVmWzEgXFx1MDAzY1xcdTAwM2MgMTBdO1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbiBcXHRjaGFyICpzdHIsICplbmQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRmaW5mby5kaXIgPSBkaXI7XFxuIFxcdHN0YXQoZmluZm8uZGlyLCBcXHUwMDI2cGF0aF9zdGF0KTtcXG5AQCAtMTYzLDggKzE2Myw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXFxuIFxcdFxcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxcbiBcXHQgICAgXFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbi1cXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJyZWFkX2ZpbGUodWV2ZW50KVxcXCIpO1xcbitcXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZF9maWxlKCVzKTogJXNcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKC1yZXQpKTtcXG4gXFx0aWYgKHN0cnN0cihidWYsIFxcXCJERVZUWVBFPWRpc2tcXFwiKSkge1xcbiBcXHRcXHQvKiBGb3VuZCBpdCAqL1xcbiBcXHRcXHRpZiAoc25wcmludGYoZmluZm8uZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG5AQCAtMzQ1LDcgKzM0Niw3IEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXFxuIHtcXG4gXFx0Y29uc3QgaW50IG9wZW5fb3B0ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBPX1JET05MWSA6IE9fUkRXUjtcXG4gXFx0Y29uc3QgaW50IG1tYXBfcHJvdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gUFJPVF9SRUFEIDogKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpO1xcbi1cXHRpbnQgZmQ7XFxuK1xcdGludCBmZCwgcmV0O1xcbiBcXHR2b2lkICpwO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuIFxcbkBAIC0zODksNyArMzkwLDExIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibW1hcCgpXFxcIik7XFxuIFxcbiBcXHQvKiBEcm9wIHBhZ2UgY2FjaGUgKi9cXG4tXFx0d3JpdGVfZmlsZShcXFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXFxcIiwgXFxcIjNcXFwiLCAyKTtcXG4rXFx0cmV0ID0gd3JpdGVfZmlsZShcXFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXFxcIiwgXFxcIjNcXFwiLCAyKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJ3cml0ZV9maWxlKGRyb3BfY2FjaGVzKTogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4rXFxuIFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdHJldHVybiBwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG5AQCAtMTUsNyArMTUsNiBAQFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NpbmNsdWRlL3Zkc28vdGltZTY0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBLU01fU1lTRlNfUEFUSCBcXFwiL3N5cy9rZXJuZWwvbW0va3NtL1xcXCJcXG4gI2RlZmluZSBLU01fRlAocykgKEtTTV9TWVNGU19QQVRIIHMpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcXG5AQCAtNSw3ICs1LDYgQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuQEAgLTE2LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuK1xcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiBcXG4gI2RlZmluZSBUV09NRUdcXHRcXHQoMlxcdTAwM2NcXHUwMDNjMjApXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbmluZGV4IGNmZDE5ODczMzljMTMuLmY5NWUzZWE1N2MzYTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuQEAgLTI0LDcgKzI0LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTExcXHRcXHQoUEFHRV9JU19XUEFMTE9XRUQgfCBQQUdFX0lTX1dSSVRURU4gfFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8XFx0XFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xcbmluZGV4IDgyYzZlOTZlYTZlYjMuLmY5ZWMxNDA4YTZlMzAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG5AQCAtMTQsNyArMTQsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gXFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xcbmluZGV4IGFlNmUxNTMwYjM1NDguLmI3ODgyYWI5NzY4M2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xcbkBAIC00NSw4ICs0NSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9wdHJhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3NldGptcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGtleS1oZWxwZXJzLmhcXFwiXFxuIFxcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuaW5kZXggZDA5ZjlmNmEzODRlZS4uYWUwYWI1ZWZhYmFlNiAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuQEAgLTEzMCwzMCArMTMwLDYgQEAgdGVzdF9zZWxlY3RlZCgpIHtcXG4gXFx0ZmlcXG4gfVxcbiBcXG4tcnVuX2d1cF9tYXRyaXgoKSB7XFxuLSAgICAjIC10OiB0aHA9b24sIC1UOiB0aHA9b2ZmLCAtSDogaHVnZXRsYj1vblxcbi0gICAgbG9jYWwgaHVnZXRsYl9tYj0yNTZcXG4tXFxuLSAgICBmb3IgaHVnZSBpbiAtdCAtVCBcXFwiLUggLW0gJGh1Z2V0bGJfbWJcXFwiOyBkb1xcbi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm1cXG4tICAgICAgICBmb3IgdGVzdF9jbWQgaW4gLXUgLVUgLWEgLWIgLUw7IGRvXFxuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXFxuLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG9cXG4tICAgICAgICAgICAgICAgICMgLVM6IHNoYXJlZFxcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFxcXCIgXFxcIjsgZG9cXG4tICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsXFxuLSAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0J3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXFxuLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm1cXG4tICAgICAgICAgICAgICAgICAgICBmb3IgbnVtIGluIFxcXCItbiAxXFxcIiBcXFwiLW4gNTEyXFxcIiBcXFwiLW4gMTIzXFxcIiBcXFwiLW4gLTFcXFwiOyBkb1xcbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgXFxcXFxcbi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRodWdlICR0ZXN0X2NtZCAkd3JpdGUgJHNoYXJlICRudW1cXG4tICAgICAgICAgICAgICAgICAgICBkb25lXFxuLSAgICAgICAgICAgICAgICBkb25lXFxuLSAgICAgICAgICAgIGRvbmVcXG4tICAgICAgICBkb25lXFxuLSAgICBkb25lXFxuLX1cXG4tXFxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcXG4gQVJDSDY0U1RSPVxcXCJhcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XFxcIlxcbiBpZiBbIC16IFxcXCIkQVJDSFxcXCIgXTsgdGhlblxcbkBAIC0yNzUsMTggKzI1MSw3IEBAIGZpXFxuIFxcbiBDQVRFR09SWT1cXFwibW1hcFxcXCIgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlXFxuIFxcbi1pZiAkUlVOX0FMTDsgdGhlblxcbi0gICAgcnVuX2d1cF9tYXRyaXhcXG4tZWxzZVxcbi0gICAgIyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXFxuLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcXG4tICAgIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gLTFcXG4tZmlcXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XFxuLUNBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXFxuK0NBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBcXG4gQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF9sb25ndGVybVxcbiBcXG4gQ0FURUdPUlk9XFxcInVzZXJmYXVsdGZkXFxcIiBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5pbmRleCBlMTk4ZmFjZjc4YmI1Li4xNjg3ZTk4NGFhMTRhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbkBAIC05LDcgKzksNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgUEFHRU1BUF9GSUxFX1BBVEggXFxcIi9wcm9jL3NlbGYvcGFnZW1hcFxcXCJcXG4gI2RlZmluZSBURVNUX0lURVJBVElPTlMgMTAwMDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5pbmRleCA4NmE2MDM2OTI4MjYxLi4wZTA4M2FiNzFhZjYwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuQEAgLTIxLDcgKzIxLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIHVpbnQ2NF90IHBhZ2VzaXplO1xcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xcbkBAIC0xNDYsNyArMTQ1LDEwIEBAIHN0YXRpYyB2b2lkIHdyaXRlX2RlYnVnZnMoY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIFxcdGlmIChyZXQgXFx1MDAzZT0gSU5QVVRfTUFYKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcbi1cXHR3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgKyAxKTtcXG4rXFx0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwid3JpdGVfZmlsZSglcyk6ICVzXFxcXG5cXFwiLCBTUExJVF9ERUJVR0ZTLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXFxuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXFxuQEAgLTE0LDcgKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2lmICFkZWZpbmVkKE1BUF9IVUdFVExCKVxcbiAjZGVmaW5lIE1BUF9IVUdFVExCXFx0MHg0MDAwMFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG5pbmRleCA4ZWIwYzU2MzBlN2UzLi45NmY3Mjg5OGViZTBhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xcbkBAIC0xNyw3ICsxNyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcXG4gaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxcbmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcXG5AQCAtMzcsNyArMzcsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgVUZGRF9GTEFHU1xcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXFxuaW5kZXggYzk3M2Q2NzIyNzIwYy4uZWI0YjI0MzNiMDBlNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbkBAIC03LDggKzcsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNzZXJ0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInVmZmQtY29tbW9uLmhcXFwiXFxuIFxcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xcbmluZGV4IGUyNGQ3YmEwMGI0NDEuLjVhMzU0YTY2NGQxZjcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXFxuQEAgLTExLDcgKzExLDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAvKlxcbiAgKiBUaGUgaGludCBhZGRyIHZhbHVlIGlzIHVzZWQgdG8gYWxsb2NhdGUgYWRkcmVzc2VzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbmluZGV4IDgwYmM5ZjU5N2I1MjEuLjQ3NTFkYjc5OGMzYWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuQEAgLTg4OSwxMTEgKzg4OSw1NCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRyZXR1cm4gcmV0IFxcdTAwM2UgMCA/IDAgOiAtZXJybm87XFxuIH1cXG4gXFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxcbi17XFxuLVxcdGludCBmZDtcXG4tXFx0c3NpemVfdCBudW1yZWFkO1xcbi1cXG4tXFx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcXG4tXFx0aWYgKGZkID09IC0xKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbi1cXHRpZiAobnVtcmVhZCBcXHUwMDNjIDEpIHtcXG4tXFx0XFx0Y2xvc2UoZmQpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0YnVmW251bXJlYWRdID0gJ1xcXFwwJztcXG4tXFx0Y2xvc2UoZmQpO1xcbi1cXG4tXFx0cmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIGJvb2wgaWdub3JlX2VpbnZhbClcXG4te1xcbi1cXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xcbi1cXHRzc2l6ZV90IG51bXdyaXR0ZW47XFxuLVxcbi1cXHRpZiAoYnVmbGVuIFxcdTAwM2MgMilcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxcXG5cXFwiLCBidWZsZW4pO1xcbi1cXG4tXFx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcXG4tXFx0aWYgKGZkID09IC0xKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIG9wZW4gZmFpbGVkOiAlc1xcXFxuXFxcIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcXG4tXFxuLVxcdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcXG4tXFx0c2F2ZWRfZXJybm8gPSBlcnJubztcXG4tXFx0Y2xvc2UoZmQpO1xcbi1cXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xcbi1cXHRpZiAobnVtd3JpdHRlbiBcXHUwMDNjIDApIHtcXG4tXFx0XFx0aWYgKGlnbm9yZV9laW52YWwgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xcXFxuXFxcIiwgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksXFxuLVxcdFxcdFxcdFxcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcXG4tXFx0fVxcbi1cXHRpZiAobnVtd3JpdHRlbiAhPSBidWZsZW4gLSAxKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIHdyaXRlKCUuKnMpIGlzIHRydW5jYXRlZCwgZXhwZWN0ZWQgJXp1IGJ5dGVzLCBnb3QgJXpkIGJ5dGVzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRwYXRoLCAoaW50KShidWZsZW4gLSAxKSwgYnVmLCBidWZsZW4gLSAxLCBudW13cml0dGVuKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4te1xcbi1cXHRfX3dyaXRlX2ZpbGUocGF0aCwgYnVmLCBidWZsZW4sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7XFxuLX1cXG4tXFxuLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aClcXG4te1xcbi1cXHRjaGFyIGJ1ZlsyMV07XFxuLVxcbi1cXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJyZWFkX2ZpbGUoKVxcXCIpO1xcbi1cXG4tXFx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtLCBib29sIGlnbm9yZV9laW52YWwpXFxuLXtcXG4tXFx0Y2hhciBidWZbMjFdO1xcbi1cXG4tXFx0c3ByaW50ZihidWYsIFxcXCIlbHVcXFwiLCBudW0pO1xcbi1cXHRfX3dyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSArIDEsIGlnbm9yZV9laW52YWwpO1xcbi19XFxuLVxcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4te1xcbi1cXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xcbi19XFxuLVxcbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbi17XFxuLVxcdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTtcXG4tfVxcbi1cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7XFxuIFxcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXFxuIHtcXG4tXFx0aWYgKHNobW1heClcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIHNobW1heCk7XFxuLVxcdGlmIChzaG1hbGwpXFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBzaG1hbGwpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHNobW1heCkge1xcbitcXHRcXHRyZXQgPSB3cml0ZV9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIiwgc2htbWF4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiRmFpbGVkIHRvIHJlc3RvcmUgc2htbWF4OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbitcXHR9XFxuK1xcdGlmIChzaG1hbGwpIHtcXG4rXFx0XFx0cmV0ID0gd3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIsIHNobWFsbCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcXG4gXFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWFkX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiRmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuIFxcbi1cXHR2YWwgPSByZWFkX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiKTtcXG4gXFx0aWYgKHZhbCBcXHUwMDNjIGxlbmd0aCkge1xcbi1cXHRcXHR3cml0ZV9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIiwgbGVuZ3RoKTtcXG4rXFx0XFx0cmV0ID0gd3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIGxlbmd0aCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBsZW5ndGgsIHN0cmVycm9yKC1yZXQpKTtcXG4gXFx0XFx0c2htbWF4ID0gdmFsO1xcbiBcXHR9XFxuIFxcbi1cXHR2YWwgPSByZWFkX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXFxcIiwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htYWxsOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbiBcXHRpZiAodmFsIFxcdTAwM2MgbnIpIHtcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIsIG5yKTtcXG4rXFx0XFx0cmV0ID0gd3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIsIG5yKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiRmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG5yLCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcdFxcdHNobWFsbCA9IHZhbDtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbmluZGV4IDlhNDlhZjg4NzAyZTQuLjY0YTg2ZThhMGM0MWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuQEAgLTgsNiArOCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2UgLyogX1NDX1BBR0VTSVpFICovXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9maWxlX3V0aWxzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCBcXHUwMDNjXFx1MDAzYyAobnIpKVxcbiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpXFxuQEAgLTE2NiwxMiArMTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XFxuICNkZWZpbmUgUEFHRU1BUF9QUkVTRU5UKGVudClcXHQoKChlbnQpIFxcdTAwMjYgKDF1bGwgXFx1MDAzY1xcdTAwM2MgNjMpKSAhPSAwKVxcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcXHQoKGVudCkgXFx1MDAyNiAoKDF1bGwgXFx1MDAzY1xcdTAwM2MgNTUpIC0gMSkpXFxuIFxcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcXG4taW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xcbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpO1xcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XFxuLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xcbi1cXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MTI6MjAuNjk1MjkzMDA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM1MTgxNzY2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzLCBzZWxmdGVzdHMsIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRmMmJhNThiMjNjZTM5OTA0YTFmNjdkZGNhYjdjMjk5NGNmNWE3YjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxOToxMjoxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcbmluZGV4IGMxNmNhMTYzYjU1ZTMuLjE1NjRiMTY5OTRhZDYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcbkBAIC0yMjgsMTIgKzIyOCwxOCBAQCBVbml0IHRlc3RpbmdcbiA9PT09PT09PT09PT1cbiBUaGlzIGZpbGU6OlxuIFxuLSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4rIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG4gXG4taGFzIHRoZSBmb2xsb3dpbmcgbmV3IGNhbGxzIHRvIGV4ZXJjaXNlIHRoZSBuZXcgcGluKigpIHdyYXBwZXIgZnVuY3Rpb25zOlxuK2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlcyB0byBleGVyY2lzZSBwaW5fdXNlcl9wYWdlcyooKTpcbiBcbi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSlcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxuKyogcGluX3VzZXJfcGFnZXMgdmlhIFBJTl9CQVNJQ19URVNUXG4rKiBwaW5fdXNlcl9wYWdlc19mYXN0IHZpYSBQSU5fRkFTVF9CRU5DSE1BUktcbisqIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtIHZpYSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXG4rXG4rUnVuIHdpdGg6OlxuK1xuKyAgbWFrZSAtQyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbVxuKyAgLi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBcbiBcbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAwZjUxM2I0MmJjMTg2Li44NjE1MDRmYTJlMzE4IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTcwMzEsOCArMTcwMzEsOSBAQCBUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ha3BtL21tXG4gRjpcdG1tL2d1cC5jXG4gRjpcdG1tL2d1cF90ZXN0LmNcbiBGOlx0bW0vZ3VwX3Rlc3QuaFxuK0Y6XHR0b29scy9tbS9ndXBfYmVuY2guY1xuK0Y6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuLUY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKVxuIE06XHRBbmRyZXcgTW9ydG9uIFx1MDAzY2FrcG1AbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbkBAIC0xNzEzNSw2ICsxNzEzNiw3IEBAIEY6XHRtbS9tZW1vcnktdGllcnMuY1xuIEY6XHRtbS9wYWdlX2lkbGUuY1xuIEY6XHRtbS9wZ2FsbG9jLXRyYWNrLmhcbiBGOlx0bW0vcHJvY2Vzc192bV9hY2Nlc3MuY1xuK0Y6XHR0b29scy9saWIvbW0vXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL1xuIFxuIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OWExNTNlZmE4ZmJmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG5AQCAtMCwwICsxLDEwNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJmaWxlX3V0aWxzLmhcIlxuK1xuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1x0c3NpemVfdCBudW1yZWFkO1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbitcdGlmIChmZCA9PSAtMSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuK1x0aWYgKG51bXJlYWQgXHUwMDNjIDEpIHtcbitcdFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRyZXR1cm4gLWVycjtcbitcdH1cbitcbitcdGJ1ZltudW1yZWFkXSA9ICdcXDAnO1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbit7XG4rXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuK1x0c3NpemVfdCBudW13cml0dGVuO1xuK1xuK1x0aWYgKGJ1ZmxlbiBcdTAwM2MgMilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuK1x0aWYgKGZkID09IC0xKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGNsb3NlKGZkKTtcbitcbitcdGlmIChudW13cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLXNhdmVkX2Vycm5vO1xuK1xuK1x0aWYgKG51bXdyaXR0ZW4gIT0gKHNzaXplX3QpKGJ1ZmxlbiAtIDEpKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdmFsO1xuK1x0aW50IHJldDtcbitcdGNoYXIgYnVmWzIxXTtcbitcdGNoYXIgKmVuZDtcbitcbitcdGlmICghbnVtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoYnVmWzBdIFx1MDAzYyAnMCcgfHwgYnVmWzBdIFx1MDAzZSAnOScpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0ZXJybm8gPSAwO1xuK1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuK1x0aWYgKGVycm5vKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0aWYgKCplbmQgPT0gJ1xcbicpXG4rXHRcdGVuZCsrO1xuK1xuK1x0aWYgKCplbmQgIT0gJ1xcMCcpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Km51bSA9IHZhbDtcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuK3tcbitcdGNoYXIgYnVmWzIxXTtcbitcbitcdHNwcmludGYoYnVmLCBcIiVsdVwiLCBudW0pO1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSArIDEpO1xuK31cbitcbitpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xuK1x0cmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaCBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MGRhYTgyYzJiMmI0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5AQCAtMCwwICsxLDEzIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cbisjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX19cbitcbisjaW5jbHVkZSBcdTAwM2NzdGRkZWYuaFx1MDAzZVxuK1xuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbitpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pO1xuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xuK2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4rXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5zaW1pbGFyaXR5IGluZGV4IDg3JVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5pbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuKysrIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbkBAIC04LDEyICs4LDE4IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcImZpbGVfdXRpbHMuaFwiXG4gI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFRIUF9TWVNGUyBcIi9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL1wiXG4gI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNFxuK1xuKyNpZm5kZWYgQVJSQVlfU0laRVxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXG4rI2VuZGlmXG4rXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTtcbiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4O1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNhdmVkX3NldHRpbmdzO1xuQEAgLTQ4LDYgKzU0LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2htZW1fZW5hYmxlZF9zdHJpbmdzW10gPSB7XG4gXHROVUxMXG4gfTtcbiBcbitzdGF0aWMgdm9pZCBwcmludF9maWxlX2FjY2Vzc19lcnJvcihjb25zdCBjaGFyICpwYXRoLCBpbnQgcmV0KVxuK3tcbitcdHByaW50ZihcIiMgJXM6ICVzICglZClcXG5cIiwgcGF0aCwgc3RyZXJyb3IoLXJldCksIC1yZXQpO1xuK31cbitcbiBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbkBAIC02MSw4ICs3Miw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuIFxuLVx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpIHtcbi1cdFx0cGVycm9yKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG5AQCAtMTAzLDEyICsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcbiBcdFx0cHJpbnRmKFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICsgMSk7XG4rXHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIG51bTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTIFwiJXNcIiwgbmFtZSk7XG5AQCAtMTE2LDcgKzEzMywxMyBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRwcmludGYoXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4rXHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZudW0pO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnVtO1xuIH1cbiBcbiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG5AQCAtMTI5LDcgKzE1MiwxMSBAQCB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG4gXHRcdHByaW50ZihcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHdyaXRlX251bShwYXRoLCBudW0pO1xuK1x0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbiB9XG4gXG4gdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbkBAIC0xNTcsOCArMTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG4gXHRcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwiKSxcbiBcdFx0LnBhZ2VzX3RvX3NjYW4gPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cIiksXG4gXHR9O1xuLVx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXG4tXHRcdHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoKTtcbitcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XG4rXHRcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuK1x0XHRcdFx0ICAgXHUwMDI2c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xuK1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKSB7XG5AQCAtMjA4LDggKzI0MiwxNSBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdHRocF93cml0ZV9udW0oXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwiLCBraHVnZXBhZ2VkLVx1MDAzZW1heF9wdGVzX3NoYXJlZCk7XG4gXHR0aHBfd3JpdGVfbnVtKFwia2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXCIsIGtodWdlcGFnZWQtXHUwMDNlcGFnZXNfdG9fc2Nhbik7XG4gXG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0d3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuK1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbitcdFx0aW50IHJldCA9IHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuK1x0XHRcdFx0ICAgIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuK1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcbitcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHRcdH1cbitcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX09SREVSUzsgaSsrKSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSlcbkBAIC0zMDcsOCArMzQ4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSlcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGlmIChyZXQgIT0gLUVOT0VOVCkge1xuK1x0XHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0XHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiBcdH1cbiBcbiBcdHJldHVybiBvcmRlcnM7XG5AQCAtMzgyLDggKzQzMCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heClcbiBcdFx0aWYgKHNzY2FuZihlbnRyeS1cdTAwM2VkX25hbWUsIFwiaHVnZXBhZ2VzLSV6dWtCXCIsIFx1MDAyNmtiKSAhPSAxKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRzaXplc1tjb3VudCsrXSA9IGtiICogMTAyNDtcbi1cdFx0a3NmdF9wcmludF9tc2coXCJbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXG5cIixcbi1cdFx0XHQgICAgICAga2IpO1xuK1x0XHRwcmludGYoXCIjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwiLCBrYik7XG4gXHR9XG4gXHRjbG9zZWRpcihkaXIpO1xuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQyNSwyOCArNDcyLDQ5IEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfc3lzZnNfcGF0aChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBucjtcbitcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcIm5yX2h1Z2VwYWdlc1wiKTtcbiBcbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbitcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yO1xuIH1cbiBcbiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwibnJfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0d3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuK1x0cmV0ID0gd3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBucjtcbitcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnI7XG4gfVxuIFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXG5AQCAtNTAyLDcgKzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKG5yX2VuYWJsZWQgXHUwMDNlIG1heCkge1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcImRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cIiwgbnJfZW5hYmxlZCwgbWF4KTtcbitcdFx0cHJpbnRmKFwiIyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxuXCIsXG4rXHRcdCAgICAgICBucl9lbmFibGVkLCBtYXgpO1xuIFx0XHRucl9lbmFibGVkID0gbWF4O1xuIFx0fVxuIFxuQEAgLTU3NCw4ICs2NDMsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX3NpZ2hhbmRsZXIoaW50IHNpZylcbiB7XG4rXHQodm9pZClzaWc7XG4rXG4gXHQvKiBleGl0KCkgd2lsbCBpbnZva2UgdGhlIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0IGhhbmRsZXIuICovXG4tXHRleGl0KEtTRlRfRkFJTCk7XG4rXHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gfVxuIFxuIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuc2ltaWxhcml0eSBpbmRleCAxMDAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuaW5kZXggMTQ0NmE2NTllNTQwOC4uMTU0ZDc0MGJlMDJlOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbkBAIC0zLDMgKzMsNCBAQCBzbGFiaW5mb1xuIHBhZ2UtdHlwZXNcbiBwYWdlX293bmVyX3NvcnRcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK2d1cF9iZW5jaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLmYyMGEzMmQ4Y2MyMmUgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC0zLDEzICszLDE1IEBAXG4gI1xuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXJcbitCVUlMRF9UQVJHRVRTICs9IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcbitHVVBfQkVOQ0hfT0JKUyA9IGd1cF9iZW5jaC5jIC4uL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIC4uL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcbitDRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLUkuLi8uLiAtcHRocmVhZFxuIExERkxBR1MgKz0gJChMSUJTKSAtcHRocmVhZFxuIFxuIGFsbDogJChCVUlMRF9UQVJHRVRTKVxuQEAgLTIyLDggKzI0LDExIEBAICQoTElCUyk6XG4gJTogJS5jXG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4rZ3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpXG4rXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJChHVVBfQkVOQ0hfT0JKUykgJChMREZMQUdTKVxuK1xuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbnNpbWlsYXJpdHkgaW5kZXggNTAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG5yZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbmluZGV4IDNmODQxYTk2Zjg3MDYuLjc1MzY5YjI2NzRhOTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4rKysgYi90b29scy9tbS9ndXBfYmVuY2guY1xuQEAgLTEwLDExICsxMCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4tI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4gXG5AQCAtMzgsMTIgKzM3LDYgQEAgc3RhdGljIGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpXG4gXHRcdHJldHVybiBcIlBJTl9GQVNUX0JFTkNITUFSS1wiO1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxuIFx0XHRyZXR1cm4gXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXCI7XG4tXHRjYXNlIEdVUF9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCJHVVBfQkFTSUNfVEVTVFwiO1xuLVx0Y2FzZSBQSU5fQkFTSUNfVEVTVDpcbi1cdFx0cmV0dXJuIFwiUElOX0JBU0lDX1RFU1RcIjtcbi1cdGNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6XG4tXHRcdHJldHVybiBcIkRVTVBfVVNFUl9QQUdFU19URVNUXCI7XG4gXHR9XG4gXHRyZXR1cm4gXCJVbmtub3duIGNvbW1hbmRcIjtcbiB9XG5AQCAtNTMsMzkgKzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcbiBcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XG4gXHRpbnQgaSwgc3RhdHVzO1xuIFxuLVx0LyogT25seSByZXBvcnQgdGltaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAqX0JFTkNITUFSSyBjb21tYW5kczogKi9cbi1cdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XG4tXHQgICAgIChjbWQgPT0gUElOX0xPTkdURVJNX0JFTkNITUFSSykpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSsrKSB7XG4tXHRcdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0XHRicmVhaztcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlcGVhdHM7IGkrKykge1xuK1x0XHRndXAuc2l6ZSA9IHNpemU7XG4rXHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuK1x0XHRpZiAoc3RhdHVzKSB7XG4rXHRcdFx0aW50IGVyciA9IGVycm5vO1xuIFxuIFx0XHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbi1cdFx0XHRcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbi1cdFx0XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuLVx0XHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCIsIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcIiwgZ3VwLnNpemUpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiXFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIiVzIGlvY3RsIGZhaWxlZDogJXNcXG5cIiwgY21kX3RvX3N0cihjbWQpLFxuK1x0XHRcdFx0c3RyZXJyb3IoZXJyKSk7XG4gXHRcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuK1x0XHRcdHJldHVybiBkYXRhO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGdvdG8gcmV0dXJuXztcbiBcbiBcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0a3NmdF9wcmludF9tc2coXCIlczogZG9uZVxcblwiLCBjbWRfdG9fc3RyKGNtZCkpO1xuK1x0XHRwcmludGYoXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbitcdFx0XHRjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbitcdFx0XHRndXAucHV0X2RlbHRhX3VzZWMpO1xuIFx0XHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcIlRydW5jYXRlZCAoc2l6ZTogJWxsZClcXG5cIiwgZ3VwLnNpemUpO1xuK1x0XHRcdHByaW50ZihcIiwgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVwiLCBndXAuc2l6ZSk7XG4rXHRcdHByaW50ZihcIlxcblwiKTtcbiBcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuIFx0fVxuIFxuLXJldHVybl86XG4tXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFwiaW9jdGwgc3RhdHVzICVkXFxuXCIsIHN0YXR1cyk7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG5AQCAtOTMsMzggKzc2LDIxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiB7XG4gXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4gXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcbi1cdGludCBmbGFncyA9IE1BUF9QUklWQVRFO1xuK1x0aW50IGZsYWdzID0gTUFQX1BSSVZBVEUsIHN0YXJ0ZWRfdGhyZWFkcyA9IDA7XG4gXHRjaGFyICpmaWxlID0gXCIvZGV2L3plcm9cIjtcbi1cdGJvb2wgaHVnZXRsYiA9IGZhbHNlO1xuK1x0Ym9vbCBodWdldGxiID0gZmFsc2UsIHRocmVhZF9lcnJvciA9IGZhbHNlO1xuK1x0dm9pZCAqdGhyZWFkX3Jlc3VsdDtcbiBcdHB0aHJlYWRfdCAqdGlkO1xuIFx0Y2hhciAqcDtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwibTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcIikpICE9IC0xKSB7XG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcIm06cjpuOkY6Zjphajp0VEx1d1dTSFwiKSkgIT0gLTEpIHtcbiBcdFx0c3dpdGNoIChvcHQpIHtcbiBcdFx0Y2FzZSAnYSc6XG4gXHRcdFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdiJzpcbi1cdFx0XHRjbWQgPSBQSU5fQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAnTCc6XG4gXHRcdFx0Y21kID0gUElOX0xPTkdURVJNX0JFTkNITUFSSztcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnYyc6XG4tXHRcdFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEdW1wIHBhZ2UgMCAoaW5kZXggMSkuIE1heSBiZSBvdmVycmlkZGVuIGxhdGVyLCBieVxuLVx0XHRcdCAqIHVzZXIncyBub24tb3B0aW9uIGFyZ3VtZW50cy5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIC53aGljaF9wYWdlcyBpcyB6ZXJvLWJhc2VkLCBzbyB0aGF0IHplcm8gY2FuIG1lYW4gXCJkb1xuLVx0XHRcdCAqIG5vdGhpbmdcIi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdwJzpcbi1cdFx0XHQvKiB3b3JrcyBvbmx5IHdpdGggRFVNUF9VU0VSX1BBR0VTX1RFU1QgKi9cbi1cdFx0XHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAnRic6XG4gXHRcdFx0Lyogc3RydG9sLCBzbyB5b3UgY2FuIHBhc3MgZmxhZ3MgaW4gaGV4IGZvcm0gKi9cbiBcdFx0XHRndXAuZ3VwX2ZsYWdzID0gc3RydG9sKG9wdGFyZywgMCwgMCk7XG5AQCAtMTQxLDcgKzEwNyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Y2FzZSAnbic6XG4gXHRcdFx0bnJfcGFnZXMgPSBhdG9pKG9wdGFyZyk7XG4gXHRcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHRcdFx0bnJfcGFnZXMgPSBzaXplIC8gcHNpemUoKTtcbitcdFx0XHRcdG5yX3BhZ2VzID0gc2l6ZSAvIGdldHBhZ2VzaXplKCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ3QnOlxuIFx0XHRcdHRocCA9IDE7XG5AQCAtMTQ5LDkgKzExNSw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Y2FzZSAnVCc6XG4gXHRcdFx0dGhwID0gMDtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnVSc6XG4tXHRcdFx0Y21kID0gR1VQX0JBU0lDX1RFU1Q7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ3UnOlxuIFx0XHRcdGNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcbiBcdFx0XHRicmVhaztcbkBAIC0xNzMsNTIgKzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0aHVnZXRsYiA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiV3JvbmcgYXJndW1lbnRcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiV3JvbmcgYXJndW1lbnRcXG5cIik7XG4rXHRcdFx0ZXhpdCgxKTtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKG9wdGluZCBcdTAwM2MgYXJnYykge1xuLVx0XHRpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV4YW1wbGU6XG4tXHRcdCAqXG4tXHRcdCAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxXG4tXHRcdCAqXG4tXHRcdCAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTdcbi1cdFx0ICovXG4tXG4tXHRcdHdoaWxlICgob3B0aW5kIFx1MDAzYyBhcmdjKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cbi1cdFx0XHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSArIDE7XG4tXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzW2V4dHJhX2FyZ19jb3VudF0gPSBwYWdlX2luZGV4O1xuLVx0XHRcdGV4dHJhX2FyZ19jb3VudCsrO1xuLVx0XHRcdG9wdGluZCsrO1xuLVx0XHR9XG4rXHRpZiAob3B0aW5kICE9IGFyZ2MpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiVW5leHBlY3RlZCBhcmd1bWVudCAnJXMnXFxuXCIsIGFyZ3Zbb3B0aW5kXSk7XG4rXHRcdGV4aXQoMSk7XG4gXHR9XG4gXG4tXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0aWYgKGdldHVpZCgpKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4gXG4gXHRpZiAoaHVnZXRsYikge1xuIFx0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4gXG4tXHRcdGlmICghaHBfc2l6ZSlcbi1cdFx0XHRrc2Z0X2V4aXRfc2tpcChcIkh1Z2VUTEIgaXMgdW5hdmFpbGFibGVcXG5cIik7XG4rXHRcdGlmICghaHBfc2l6ZSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIkNvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcXG5cIik7XG4rXHRcdFx0cmV0dXJuIDE7XG4rXHRcdH1cbiBcbiBcdFx0c2l6ZSA9IChzaXplICsgaHBfc2l6ZSAtIDEpIFx1MDAyNiB+KGhwX3NpemUgLSAxKTtcbi1cdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwiTm90IGVub3VnaCBodWdlIHBhZ2VzXFxuXCIpO1xuK1x0XHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXHRcdFx0cmV0dXJuIDE7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdGtzZnRfc2V0X3BsYW4obnRocmVhZHMpO1xuLVxuIFx0ZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTtcbi1cdGlmIChmaWxlZCBcdTAwM2MgMClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiVW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxuXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRpZiAoZmlsZWQgXHUwMDNjIDApIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiVW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxuXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuIFxuIFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXM7XG4gXHRpZiAod3JpdGUpXG5AQCAtMjI3LDI2ICsxNzksMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuIFx0aWYgKGd1cF9mZCA9PSAtMSkge1xuIFx0XHRzd2l0Y2ggKGVycm5vKSB7XG4tXHRcdGNhc2UgRUFDQ0VTOlxuLVx0XHRcdGlmIChnZXR1aWQoKSlcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwiKTtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBFTk9FTlQ6XG4gXHRcdFx0aWYgKG9wZW5kaXIoXCIvc3lzL2tlcm5lbC9kZWJ1Z1wiKSA9PSBOVUxMKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCJtb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCIpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiY2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcblwiKTtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiY2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcblwiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcImZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwiLCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwiLCBHVVBfVEVTVF9GSUxFLFxuK1x0XHRcdFx0c3RyZXJyb3IoZXJybm8pKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuLVx0XHRrc2Z0X2V4aXRfcGFzcygpO1xuK1x0XHRnb3RvIGVycl9jbG9zZV9maWxlZDtcbiBcdH1cbiBcbiBcdHAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCBmaWxlZCwgMCk7XG4tXHRpZiAocCA9PSBNQVBfRkFJTEVEKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJtbWFwOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0aWYgKHAgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtbWFwOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRnb3RvIGVycl9jbG9zZV9ndXBfZmQ7XG4rXHR9XG4gXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7XG4gXG4gXHRpZiAodGhwID09IDEpXG5AQCAtMjU1LDIxICsyMDUsNDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRtYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXG4gXHQvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi9cbi1cdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyBndXAuYWRkciArIHNpemU7IHAgKz0gcHNpemUoKSlcbitcdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyBndXAuYWRkciArIHNpemU7IHAgKz0gZ2V0cGFnZXNpemUoKSlcbiBcdFx0cFswXSA9IDA7XG4gXG4gXHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7XG4tXHRhc3NlcnQodGlkKTtcbitcdGlmICghdGlkKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCB0aHJlYWRzOiAlc1xcblwiLFxuK1x0XHRcdG50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRnb3RvIGVycl91bm1hcDtcbitcdH1cbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcbiBcdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCBcdTAwMjZndXApO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwicHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xcblwiLCBzdHJlcnJvcihyZXQpKTtcbitcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHN0YXJ0ZWRfdGhyZWFkcysrO1xuIFx0fVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkrKykge1xuLVx0XHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBOVUxMKTtcbi1cdFx0YXNzZXJ0KHJldCA9PSAwKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXJ0ZWRfdGhyZWFkczsgaSsrKSB7XG4rXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIFx1MDAyNnRocmVhZF9yZXN1bHQpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwicHRocmVhZF9qb2luIGZhaWxlZDogJXNcXG5cIiwgc3RyZXJyb3IocmV0KSk7XG4rXHRcdFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcbitcdFx0fSBlbHNlIGlmICh0aHJlYWRfcmVzdWx0KVxuK1x0XHRcdHRocmVhZF9lcnJvciA9IHRydWU7XG4gXHR9XG4gXG4gXHRmcmVlKHRpZCk7XG4gXG4tXHRrc2Z0X2V4aXRfcGFzcygpO1xuK1x0aWYgKHRocmVhZF9lcnJvcilcbitcdFx0Z290byBlcnJfdW5tYXA7XG4rXG4rXHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XG4rXHRjbG9zZShndXBfZmQpO1xuK1x0Y2xvc2UoZmlsZWQpO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3VubWFwOlxuK1x0bXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpO1xuK2Vycl9jbG9zZV9ndXBfZmQ6XG4rXHRjbG9zZShndXBfZmQpO1xuK2Vycl9jbG9zZV9maWxlZDpcbitcdGNsb3NlKGZpbGVkKTtcbitcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCAyZDUzNjYxOTZlMzA5Li45YzAzNjI0ZmQyOTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMzcsNyArMzcsOCBAQCBlbmRpZlxuICMgTERMSUJTLlxuIE1BS0VGTEFHUyArPSAtLW5vLWJ1aWx0aW4tcnVsZXNcbiBcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxuK0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXG4rQ0ZMQUdTICs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4gQ0ZMQUdTICs9IC1XdW5yZWFjaGFibGUtY29kZVxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxuIFxuQEAgLTU3LDggKzU4LDggQEAgZW5kaWZcbiBcbiBURVNUX0dFTl9GSUxFUyA9IGNvd1xuIFRFU1RfR0VOX0ZJTEVTICs9IGNvbXBhY3Rpb25fdGVzdFxuK1RFU1RfR0VOX0ZJTEVTICs9IGd1cFxuIFRFU1RfR0VOX0ZJTEVTICs9IGd1cF9sb25ndGVybVxuLVRFU1RfR0VOX0ZJTEVTICs9IGd1cF90ZXN0XG4gVEVTVF9HRU5fRklMRVMgKz0gaG1tLXRlc3RzXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tYWR2aXNlXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tbWFwXG5AQCAtMTg3LDggKzE4OCwxMCBAQCBURVNUX0ZJTEVTICs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbiBcbi0kKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbiskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcbitcdFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG4rJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4rXHRcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuIFxuICQoT1VUUFVUKS91ZmZkLXN0cmVzczogdWZmZC1jb21tb24uY1xuICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmNcbkBAIC0yMTcsNyArMjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyArPSAtbTMyIC1teHNhdmVcbiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICs9IC1scnQgLWxkbCAtbG1cbiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4rXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKVxuIGVuZGlmXG4gXG5AQCAtMjI2LDcgKzIyOSw3IEBAICQoQklOQVJJRVNfNjQpOiBDRkxBR1MgKz0gLW02NCAtbXhzYXZlXG4gJChCSU5BUklFU182NCk6IExETElCUyArPSAtbHJ0IC1sZGxcbiAkKEJJTkFSSUVTXzY0KTogJChPVVRQVVQpLyVfNjQ6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4rXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtNjQsJCh0KSkpKVxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuQEAgLTE1LDkgKzE1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTUFQX1NJWkVfTUJcdDEwMFxuICNkZWZpbmUgTUFQX1NJWkVcdChNQVBfU0laRV9NQiAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbmluZGV4IDhhYTUyNDlkOWJlZjYuLjMyNjRhODI4NTc1YmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA0NWI4NGY3YjM2NGUwLi4yODlhZWQyZWJhYzAyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMjUsNyArMjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gdWludDY0X3QgcGFnZV9zaXplO1xuIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpbmNsdWRlIFwiLi4vcGlkZmQvcGlkZmQuaFwiXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjRjOWUxNGRiYjQzNGFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG5AQCAtMCwwICsxLDMyOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbisjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuK1xuKy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xuKyNkZWZpbmUgRk9MTF9XUklURVx0MHgwMVx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXG4rXG4rLyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovXG4rc3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9O1xuK1xuKyNkZWZpbmUgR1VQX1RFU1RfRklMRSBcIi9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XCJcbisjZGVmaW5lIE5SX0hVR0VfUEFHRVMgMTI4XG4rXG4rSFVHRVRMQl9TRVRVUF9ERUZBVUxUX1BBR0VTKE5SX0hVR0VfUEFHRVMpXG4rXG4rRklYVFVSRShndXBfdGVzdClcbit7XG4rXHRpbnQgZ3VwX2ZkO1xuK1x0Y2hhciAqYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVChndXBfdGVzdClcbit7XG4rXHRib29sIHRocDtcbitcdGJvb2wgaHVnZXRsYjtcbitcdGJvb2wgd3JpdGU7XG4rXHRib29sIHNoYXJlZDtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGUpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IHRydWUsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSB0cnVlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF9odWdldGxiKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gdHJ1ZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZClcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfdGhwKVxuK3tcbitcdC50aHAgPSB0cnVlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF9odWdldGxiKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gdHJ1ZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGd1cF90ZXN0KVxuK3tcbitcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEU7XG4rXHRpbnQgemVyb19mZDtcbitcdGNoYXIgKnA7XG4rXG4rXHRzZWxmLVx1MDAzZXNpemUgPSAxMjggKiBNQjtcbitcbitcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuK1xuK1x0XHRpZiAoIWhwX3NpemUpXG4rXHRcdFx0U0tJUChyZXR1cm4sIFwiSHVnZVRMQiBub3QgYXZhaWxhYmxlXFxuXCIpO1xuK1xuK1x0XHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcdTAwM2MgTlJfSFVHRV9QQUdFUylcbitcdFx0XHRTS0lQKHJldHVybiwgXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXG4rXHRcdHNlbGYtXHUwMDNlc2l6ZSA9IE5SX0hVR0VfUEFHRVMgKiBocF9zaXplO1xuK1x0XHRtbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpO1xuK1x0fVxuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNlc2hhcmVkKVxuK1x0XHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xuK1xuK1x0LyogemVyb19mZCBoYXMgdG8gYmUgXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXG4rXHR6ZXJvX2ZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xuK1xuK1x0LyogZ3VwX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbitcdHNlbGYtXHUwMDNlZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZ3VwX2ZkLCAwKTtcbitcbitcdHNlbGYtXHUwMDNlYWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cdTAwM2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHRcdCAgbW1hcF9mbGFncywgemVyb19mZCwgMCk7XG4rXG4rXHRBU1NFUlRfTkUoc2VsZi1cdTAwM2VhZGRyLCBNQVBfRkFJTEVEKSB7XG4rXHRcdGludCBlcnIgPSBlcnJubztcbitcbitcdFx0Y2xvc2UoemVyb19mZCk7XG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbitcdFx0VEhfTE9HKFwibW1hcCBmYWlsZWQ6ICVzXCIsIHN0cmVycm9yKGVycikpO1xuK1x0fVxuK1x0Y2xvc2UoemVyb19mZCk7XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2V0aHApXG4rXHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuK1x0ZWxzZSBpZiAoIXZhcmlhbnQtXHUwMDNlaHVnZXRsYilcbitcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbitcdGZvciAocCA9IHNlbGYtXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyXG4rXHRcdFx0KyBzZWxmLVx1MDAzZXNpemU7IHAgKz0gcHNpemUoKSlcbitcdFx0cFswXSA9IDA7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpXG4re1xuK1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbitcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX2d1cF9jbWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHRcdCBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLFxuK1x0XHRcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxuK1x0XHRcdCB1bnNpZ25lZCBsb25nIGNvbW1hbmQsXG4rXHRcdFx0IHVuc2lnbmVkIGludCB0ZXN0X2ZsYWdzLFxuK1x0XHRcdCB1bnNpZ25lZCBpbnQgd2hpY2hfcGFnZSlcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7XG4rXHRcdFx0LmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLVx1MDAzZWFkZHIsXG4rXHRcdFx0LnNpemUgPSBzZWxmLVx1MDAzZXNpemUsXG4rXHRcdFx0Lm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0XHRzZWxmLVx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXSxcbitcdFx0XHQuZ3VwX2ZsYWdzID0gdmFyaWFudC1cdTAwM2V3cml0ZSA/IEZPTExfV1JJVEUgOiAwLFxuK1x0XHRcdC50ZXN0X2ZsYWdzID0gdGVzdF9mbGFncyxcbitcdFx0XHQud2hpY2hfcGFnZXMgPSB7IHdoaWNoX3BhZ2UgfSxcbitcdFx0fTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBjb21tYW5kLCBcdTAwMjZndXApLCAwKTtcbitcdH1cbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9CQVNJQ19URVNULCAwLCAwKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcylcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9CQVNJQ19URVNULCAwLCAwKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBkdW1wX3VzZXJfcGFnZXNfd2l0aF9nZXQpXG4re1xuK1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgMCwgMSk7XG4rfVxuK1xuK1RFU1RfRihndXBfdGVzdCwgZHVtcF91c2VyX3BhZ2VzX3dpdGhfcGluKVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgRFVNUF9VU0VSX1BBR0VTX1RFU1QsXG4rXHRcdCAgICBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTiwgMSk7XG4rfVxuK1xuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9GQVNUX0JFTkNITUFSSywgMCwgMCk7XG4rfVxuK1xuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdClcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9GQVNUX0JFTkNITUFSSywgMCwgMCk7XG4rfVxuK1xuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pXG4re1xuK1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLLCAwLCAwKTtcbit9XG4rXG4rVEVTVChkdW1wX3VzZXJfcGFnZXNfc3BhcnNlX2luZGljZXMpXG4re1xuK1x0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuK1x0dW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XG4rXHRpbnQgemVyb19mZCwgZ3VwX2ZkO1xuK1x0Y2hhciAqYWRkciwgKnA7XG4rXG4rXHR6ZXJvX2ZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xuK1xuK1x0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKGd1cF9mZCwgMCk7XG4rXG4rXHRhZGRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgemVyb19mZCwgMCk7XG4rXHRjbG9zZSh6ZXJvX2ZkKTtcbitcdEFTU0VSVF9ORShhZGRyLCBNQVBfRkFJTEVEKTtcbitcbitcdG1hZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4rXG4rXHRmb3IgKHAgPSBhZGRyOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyAodW5zaWduZWQgbG9uZylhZGRyICsgc2l6ZTtcbitcdCAgICAgcCArPSBwc2l6ZSgpKVxuK1x0XHRwWzBdID0gMDtcbitcbitcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbitcdGd1cC5zaXplID0gc2l6ZTtcbitcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IHNpemUgLyBwc2l6ZSgpO1xuK1x0Z3VwLmd1cF9mbGFncyA9IEZPTExfV1JJVEU7XG4rXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuK1x0Z3VwLndoaWNoX3BhZ2VzWzFdID0gMjA7XG4rXHRndXAud2hpY2hfcGFnZXNbMl0gPSAweDEwMDE7XG4rXG4rXHRBU1NFUlRfRVEoaW9jdGwoZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4rXG4rXHRtdW5tYXAoYWRkciwgc2l6ZSk7XG4rXHRjbG9zZShndXBfZmQpO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0aW50IGZkO1xuK1x0Y2hhciAqZmlsZSA9IFwiL2Rldi96ZXJvXCI7XG4rXG4rXHRmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbitcbitcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0aWYgKGZkID09IC0xKSB7XG4rXHRcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRcdGlmIChlcnJubyA9PSBFQUNDRVMpXG4rXHRcdFx0a3NmdF9leGl0X3NraXAoXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XG4rXHRcdFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpO1xuK1xuK1x0XHRcdGlmICghZGVidWdmcykge1xuK1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCIpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRjbG9zZWRpcihkZWJ1Z2ZzKTtcbitcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXG5cIik7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwiLCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IGUyNjQyZWNhMGQwMmIuLmZhMWE2NTE5NjNmZDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbkBAIC0xMCw5ICsxMCw2IEBAXG4gICogYnVncy5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4tXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG5AQCAtMzMsNiArMzAsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4gXG4gLypcbiAgKiBUaGlzIGlzIGEgcHJpdmF0ZSBVQVBJIHRvIHRoZSBrZXJuZWwgdGVzdCBtb2R1bGUgc28gaXQgaXNuJ3QgZXhwb3J0ZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuQEAgLTE4LDcgKzE4LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1mZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNClcbiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcbmluZGV4IGVkM2Q5MmU4NjJkODcuLjliNzI0YWY2NmU5MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG5AQCAtMjYsNyArMjYsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxuICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbmluZGV4IGJjMjAyZTRlZDJiZGEuLjIwODY0ZTdkNGUwYzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG5AQCAtMjEsOSArMjEsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdGZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZm5kZWYgTUFEVl9TT0ZUX09GRkxJTkVcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5pbmRleCBmYjQ2MDA1NzBlMTMxLi45NDk1OTc0ZWNjYmVhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuQEAgLTIwLDcgKzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5AQCAtMTAsNyArMTAsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbkBAIC0yNSw3ICsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggMGQ2YzcxZWQyZmFlMy4uYmEyMWY1ODUyNWU0MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyArMjIsNiBAQFxuICNpbmNsdWRlIFwibGludXgvbWFnaWMuaFwiXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTE0NCw2ICsxNDMsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxuIFx0Y2hhciBidWZbMSBcdTAwM2NcdTAwM2MgMTBdO1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiBcdGNoYXIgKnN0ciwgKmVuZDtcbitcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KTtcbkBAIC0xNjMsOCArMTYzLDkgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcbiBcdFx0ICAgICBtYWpvcihwYXRoX3N0YXQuc3RfZGV2KSwgbWlub3IocGF0aF9zdGF0LnN0X2RldikpXG4gXHQgICAgXHUwMDNlPSBzaXplb2YocGF0aCkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwiLCBfX2Z1bmNfXyk7XG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwicmVhZF9maWxlKHVldmVudClcIik7XG4rXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkX2ZpbGUoJXMpOiAlc1xcblwiLCBwYXRoLCBzdHJlcnJvcigtcmV0KSk7XG4gXHRpZiAoc3Ryc3RyKGJ1ZiwgXCJERVZUWVBFPWRpc2tcIikpIHtcbiBcdFx0LyogRm91bmQgaXQgKi9cbiBcdFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG5AQCAtMzQ1LDcgKzM0Niw3IEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4ge1xuIFx0Y29uc3QgaW50IG9wZW5fb3B0ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBPX1JET05MWSA6IE9fUkRXUjtcbiBcdGNvbnN0IGludCBtbWFwX3Byb3QgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IFBST1RfUkVBRCA6IChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTtcbi1cdGludCBmZDtcbitcdGludCBmZCwgcmV0O1xuIFx0dm9pZCAqcDtcbiBcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiBcbkBAIC0zODksNyArMzkwLDExIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1tYXAoKVwiKTtcbiBcbiBcdC8qIERyb3AgcGFnZSBjYWNoZSAqL1xuLVx0d3JpdGVfZmlsZShcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wiLCBcIjNcIiwgMik7XG4rXHRyZXQgPSB3cml0ZV9maWxlKFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXCIsIFwiM1wiLCAyKTtcbitcdGlmIChyZXQpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIndyaXRlX2ZpbGUoZHJvcF9jYWNoZXMpOiAlc1xcblwiLFxuK1x0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuK1xuIFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0cmV0dXJuIHA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbmluZGV4IDVmZDc3OTJhMGQ0NzkuLjY3MTFmNGM2MTM3MTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbkBAIC0xNSw3ICsxNSw2IEBAXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXHUwMDNjaW5jbHVkZS92ZHNvL3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBLU01fU1lTRlNfUEFUSCBcIi9zeXMva2VybmVsL21tL2tzbS9cIlxuICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbmluZGV4IGYxOWQ1M2M2OTU3NjQuLmEzNWUyYjU3ZTA1YjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbkBAIC01LDcgKzUsNiBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuQEAgLTE2LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuIFxuICNkZWZpbmUgVFdPTUVHXHRcdCgyXHUwMDNjXHUwMDNjMjApXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCBjZmQxOTg3MzM5YzEzLi5mOTVlM2VhNTdjM2E5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0yNCw3ICsyNCw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXHRcdChQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8XHRcXFxuIFx0XHRcdFx0XHQgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHxcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbmluZGV4IDgyYzZlOTZlYTZlYjMuLmY5ZWMxNDA4YTZlMzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuIFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5AQCAtNDUsOCArNDUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3B0cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2V0am1wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiAjaW5jbHVkZSBcInBrZXktaGVscGVycy5oXCJcbiBcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0xMzAsMzAgKzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7XG4gXHRmaVxuIH1cbiBcbi1ydW5fZ3VwX21hdHJpeCgpIHtcbi0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b25cbi0gICAgbG9jYWwgaHVnZXRsYl9tYj0yNTZcbi1cbi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgXCItSCAtbSAkaHVnZXRsYl9tYlwiOyBkb1xuLSAgICAgICAgIyAtdTogZ3VwLWZhc3QsIC1VOiBndXAtYmFzaWMsIC1hOiBwaW4tZmFzdCwgLWI6IHBpbi1iYXNpYywgLUw6IHBpbi1sb25ndGVybVxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXG4tICAgICAgICAgICAgZm9yIHdyaXRlIGluIC13IC1XOyBkb1xuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFwiIFwiOyBkb1xuLSAgICAgICAgICAgICAgICAgICAgIyAtbjogSG93IG1hbnkgcGFnZXMgdG8gZmV0Y2ggdG9nZXRoZXI/ICA1MTIgaXMgc3BlY2lhbFxuLSAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0J3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXG4tICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCBwYXJ0aWFsIGd1cCB3aGVuIGhpdCBhIGh1Z2UgaW4gd2hhdGV2ZXIgZm9ybVxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcIi1uIDFcIiBcIi1uIDUxMlwiIFwiLW4gMTIzXCIgXCItbiAtMVwiOyBkb1xuLSAgICAgICAgICAgICAgICAgICAgICAgIENBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF90ZXN0IFxcXG4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtXG4tICAgICAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgICAgIGRvbmVcbi0gICAgICAgICAgICBkb25lXG4tICAgICAgICBkb25lXG4tICAgIGRvbmVcbi19XG4tXG4gIyBmaWx0ZXIgNjRiaXQgYXJjaGl0ZWN0dXJlc1xuIEFSQ0g2NFNUUj1cImFybTY0IG1pcHM2NCBwYXJpc2M2NCBwcGM2NCBwcGM2NGxlIHJpc2N2NjQgczM5MHggc3BhcmM2NCB4ODZfNjRcIlxuIGlmIFsgLXogXCIkQVJDSFwiIF07IHRoZW5cbkBAIC0yNzUsMTggKzI1MSw3IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCJtbWFwXCIgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlXG4gXG4taWYgJFJVTl9BTEw7IHRoZW5cbi0gICAgcnVuX2d1cF9tYXRyaXhcbi1lbHNlXG4tICAgICMgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAxXG4tICAgIENBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXG4tICAgICMgcGluX3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxXG4tICAgIENBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIC0xXG4tZmlcbi0jIER1bXAgcGFnZXMgMCwgMTksIGFuZCA0MDk2LCB1c2luZyBwaW5fdXNlcl9wYWdlczpcbi1DQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXG4rQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwXG4gQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtXG4gXG4gQ0FURUdPUlk9XCJ1c2VyZmF1bHRmZFwiIHJ1bl90ZXN0IC4vdWZmZC11bml0LXRlc3RzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5pbmRleCBlMTk4ZmFjZjc4YmI1Li4xNjg3ZTk4NGFhMTRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbkBAIC05LDcgKzksNiBAQFxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgUEFHRU1BUF9GSUxFX1BBVEggXCIvcHJvYy9zZWxmL3BhZ2VtYXBcIlxuICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbmluZGV4IDg2YTYwMzY5MjgyNjEuLjBlMDgzYWI3MWFmNjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5AQCAtMjEsNyArMjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIHVpbnQ2NF90IHBhZ2VzaXplO1xuIHVuc2lnbmVkIGludCBwYWdlc2hpZnQ7XG5AQCAtMTQ2LDcgKzE0NSwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0aWYgKHJldCBcdTAwM2U9IElOUFVUX01BWClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXM6IERlYnVnZnMgaW5wdXQgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFxuLVx0d3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XG4rXHRyZXQgPSB3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgKyAxKTtcbitcdGlmIChyZXQpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIndyaXRlX2ZpbGUoJXMpOiAlc1xcblwiLCBTUExJVF9ERUJVR0ZTLFxuK1x0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuIH1cbiBcbiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG5pbmRleCA1MGQwODA1YjY1ZGI5Li5hMDRmNTg4ZGY3ODBmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmICFkZWZpbmVkKE1BUF9IVUdFVExCKVxuICNkZWZpbmUgTUFQX0hVR0VUTEJcdDB4NDAwMDBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbmluZGV4IDhlYjBjNTYzMGU3ZTMuLjk2ZjcyODk4ZWJlMGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuQEAgLTE3LDcgKzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcbiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5AQCAtMzcsNyArMzcsNiBAQFxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgVUZGRF9GTEFHU1x0KE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXG5pbmRleCBjOTczZDY3MjI3MjBjLi5lYjRiMjQzM2IwMGU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuQEAgLTcsOCArNyw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gI2luY2x1ZGUgXCJ1ZmZkLWNvbW1vbi5oXCJcbiBcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbkBAIC0xMSw3ICsxMSw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gLypcbiAgKiBUaGUgaGludCBhZGRyIHZhbHVlIGlzIHVzZWQgdG8gYWxsb2NhdGUgYWRkcmVzc2VzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5pbmRleCA4MGJjOWY1OTdiNTIxLi40NzUxZGI3OThjM2FjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbkBAIC04ODksMTExICs4ODksNTQgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdHJldHVybiByZXQgXHUwMDNlIDAgPyAwIDogLWVycm5vO1xuIH1cbiBcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbi17XG4tXHRpbnQgZmQ7XG4tXHRzc2l6ZV90IG51bXJlYWQ7XG4tXG4tXHRmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpO1xuLVx0aWYgKGZkID09IC0xKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuLVx0aWYgKG51bXJlYWQgXHUwMDNjIDEpIHtcbi1cdFx0Y2xvc2UoZmQpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdGJ1ZltudW1yZWFkXSA9ICdcXDAnO1xuLVx0Y2xvc2UoZmQpO1xuLVxuLVx0cmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIGJvb2wgaWdub3JlX2VpbnZhbClcbi17XG4tXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuLVx0c3NpemVfdCBudW13cml0dGVuO1xuLVxuLVx0aWYgKGJ1ZmxlbiBcdTAwM2MgMilcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiSW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxcblwiLCBidWZsZW4pO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgb3BlbiBmYWlsZWQ6ICVzXFxuXCIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XG4tXG4tXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4tXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuLVx0Y2xvc2UoZmQpO1xuLVx0ZXJybm8gPSBzYXZlZF9lcnJubztcbi1cdGlmIChudW13cml0dGVuIFx1MDAzYyAwKSB7XG4tXHRcdGlmIChpZ25vcmVfZWludmFsIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxuXCIsIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLFxuLVx0XHRcdFx0YnVmLCBzdHJlcnJvcihlcnJubykpO1xuLVx0fVxuLVx0aWYgKG51bXdyaXR0ZW4gIT0gYnVmbGVuIC0gMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgd3JpdGUoJS4qcykgaXMgdHJ1bmNhdGVkLCBleHBlY3RlZCAlenUgYnl0ZXMsIGdvdCAlemQgYnl0ZXNcXG5cIixcbi1cdFx0XHRcdHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pO1xuLX1cbi1cbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcbi19XG4tXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKVxuLXtcbi1cdGNoYXIgYnVmWzIxXTtcbi1cbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJyZWFkX2ZpbGUoKVwiKTtcbi1cbi1cdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSwgYm9vbCBpZ25vcmVfZWludmFsKVxuLXtcbi1cdGNoYXIgYnVmWzIxXTtcbi1cbi1cdHNwcmludGYoYnVmLCBcIiVsdVwiLCBudW0pO1xuLVx0X193cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxLCBpZ25vcmVfZWludmFsKTtcbi19XG4tXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4te1xuLVx0cmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcbi19XG4tXG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gdHJ1ZSk7XG4tfVxuLVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWFsbCwgc2htbWF4O1xuIFxuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZClcbiB7XG4tXHRpZiAoc2htbWF4KVxuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBzaG1tYXgpO1xuLVx0aWYgKHNobWFsbClcbi1cdFx0d3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIiwgc2htYWxsKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoc2htbWF4KSB7XG4rXHRcdHJldCA9IHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCIsIHNobW1heCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlc3RvcmUgc2htbWF4OiAlc1xcblwiLFxuK1x0XHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4rXHR9XG4rXHRpZiAoc2htYWxsKSB7XG4rXHRcdHJldCA9IHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIHNobWFsbCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlc3RvcmUgc2htYWxsOiAlc1xcblwiLFxuK1x0XHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4rXHR9XG4gfVxuIFxuIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnIgPSBsZW5ndGggLyBwc2l6ZSgpO1xuIFx0dW5zaWduZWQgbG9uZyB2YWw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCIsXG4rXHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4gXG4tXHR2YWwgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCIpO1xuIFx0aWYgKHZhbCBcdTAwM2MgbGVuZ3RoKSB7XG4tXHRcdHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCIsIGxlbmd0aCk7XG4rXHRcdHJldCA9IHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCIsIGxlbmd0aCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobW1heDogJXNcXG5cIixcbitcdFx0XHRcdFx0ICAgbGVuZ3RoLCBzdHJlcnJvcigtcmV0KSk7XG4gXHRcdHNobW1heCA9IHZhbDtcbiBcdH1cbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIik7XG4rXHRyZXQgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJGYWlsZWQgdG8gcmVhZCAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXG5cIixcbitcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcdGlmICh2YWwgXHUwMDNjIG5yKSB7XG4tXHRcdHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIG5yKTtcbitcdFx0cmV0ID0gd3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIiwgbnIpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCIsXG4rXHRcdFx0XHRcdCAgIG5yLCBzdHJlcnJvcigtcmV0KSk7XG4gXHRcdHNobWFsbCA9IHZhbDtcbiBcdH1cbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li42NGE4NmU4YTBjNDFiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC04LDYgKzgsOCBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlIC8qIF9TQ19QQUdFU0laRSAqL1xuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NtbS9maWxlX3V0aWxzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCBcdTAwM2NcdTAwM2MgKG5yKSlcbiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpXG5AQCAtMTY2LDEyICsxNjgsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcbiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpXHQoKChlbnQpIFx1MDAyNiAoMXVsbCBcdTAwM2NcdTAwM2MgNjMpKSAhPSAwKVxuICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KVx0KChlbnQpIFx1MDAyNiAoKDF1bGwgXHUwMDNjXHUwMDNjIDU1KSAtIDEpKVxuIFxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpO1xuLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbi1cbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aCk7XG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjEyOjIwLjY5NTI5NTE0OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNTE4MTM2ODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBXb3J0aEZ1enppbmc9ZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IG5lY2Vzc2l0YXRlIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGEgZmFpciBudW1iZXIgb2YgZmlsZXMsIHNvIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuRmlyc3QgcGFzczogSSBzZWUgdGhlIGNoYW5nZXMgc3BhbiBgRG9jdW1lbnRhdGlvbi9gLCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIChhbHdheXMgYSBnb29kIHNpZ24gb2YgY29kZSBjaHVybiBvciBhZGRpdGlvbiksIHBsdXMgYSBsb3Qgb2YgYWN0aXZpdHkgd2l0aGluIGB0b29scy9saWIvbW0vYCwgYHRvb2xzL21tL2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gTXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbjsgdGhpcyBzY3JlYW1zICp1c2Vyc3BhY2UgdG9vbHMgYW5kIHRlc3RzKiByYXRoZXIgdGhhbiBjb3JlIGtlcm5lbCBjb2RlLlxuXG5MZXQncyBkbyBhIHF1aWNrLCBtb3JlIGdyYW51bGFyIGNoZWNrIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gQSBzZWNvbmQgZ2xhbmNlIGF0IHRoZSBmaWxlIGxpc3QgcmVpbmZvcmNlcyB0aGlzIGluaXRpYWwgYXNzZXNzbWVudC4gYERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0YCBpcyBkb2N1bWVudGF0aW9uLCBgTUFJTlRBSU5FUlNgIGlzLCB3ZWxsLCBgTUFJTlRBSU5FUlNgLiBUaGUgYHRvb2xzL2xpYi9tbS9gIGFuZCBgdG9vbHMvbW0vYCBkaXJlY3RvcmllcyBhcHBlYXIgdG8gY29udGFpbiBzdXBwb3J0aW5nIGxpYnJhcmllcyBhbmQgYnVpbGQgZmlsZXMsIGFsb25nIHdpdGggdXNlciBzcGFjZSB0b29scy4gVGhlIGJpZ2dlc3QgY2h1bmsgb2YgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCAtIHRoZXNlIGFyZSBzZWxmIHRlc3RzLCBub3Qga2VybmVsIGRyaXZlcnMuXG5cbkknbSBjb25maWRlbnQgSSd2ZSBnb3QgdGhpcyByaWdodC4gKlRoZXJlIGlzIGFic29sdXRlbHkgbm8gbW9kaWZpY2F0aW9uIHRvIGFueSBjb3JlIGtlcm5lbCBjb21wb25lbnRzLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiogSXQncyBhbGwgdXNlcnNwYWNlIHRvb2xzIGFuZCB0ZXN0cywgbGlrZWx5IHJlZmFjdG9yaW5nLCBvciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIHNlcmllcyBkb2VzIG5vdCBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBjb3JlIHRoYXQgYXJlIHN1YmplY3QgdG8gZnV6emluZywgSSdtIGNvbmZpZGVudCBJIGNhbiBzYWZlbHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQyMCwiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToxMjozNC4yMTM0MzU0MzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzLCBzZWxmdGVzdHMsIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzLCBzZWxmdGVzdHMsIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjEyOjM0LjIxMzQ3MjMzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhcfrn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 19:10:25 +0000 UTC FinishedAt: 2026-08-13 19:12:36 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMsIHNlbGZ0ZXN0cywgRG9jdW1lbnRhdGlvbiwgYW5kIE1BSU5UQUlORVJTLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRmMmJhNThiMjNjZTM5OTA0YTFmNjdkZGNhYjdjMjk5NGNmNWE3YjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxOToxMjoxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG5pbmRleCBjMTZjYTE2M2I1NWUzLi4xNTY0YjE2OTk0YWQ2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG5AQCAtMjI4LDEyICYjNDM7MjI4LDE4IEBAIFVuaXQgdGVzdGluZ1xuID09PT09PT09PT09PVxuIFRoaXMgZmlsZTo6XG4gXG4tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiYjNDM7IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG4gXG4taGFzIHRoZSBmb2xsb3dpbmcgbmV3IGNhbGxzIHRvIGV4ZXJjaXNlIHRoZSBuZXcgcGluKigpIHdyYXBwZXIgZnVuY3Rpb25zOlxuJiM0Mztjb250YWlucyB0aGUgZm9sbG93aW5nIHRlc3QgY2FzZXMgdG8gZXhlcmNpc2UgcGluX3VzZXJfcGFnZXMqKCk6XG4gXG4tKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpXG4tKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYilcbiYjNDM7KiBwaW5fdXNlcl9wYWdlcyB2aWEgUElOX0JBU0lDX1RFU1RcbiYjNDM7KiBwaW5fdXNlcl9wYWdlc19mYXN0IHZpYSBQSU5fRkFTVF9CRU5DSE1BUktcbiYjNDM7KiBwaW5fdXNlcl9wYWdlc19sb25ndGVybSB2aWEgUElOX0xPTkdURVJNX0JFTkNITUFSS1xuJiM0MztcbiYjNDM7UnVuIHdpdGg6OlxuJiM0MztcbiYjNDM7ICBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tXG4mIzQzOyAgLi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBcbiBcbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAwZjUxM2I0MmJjMTg2Li44NjE1MDRmYTJlMzE4IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTcwMzEsOCAmIzQzOzE3MDMxLDkgQEAgVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxuIEY6XHRtbS9ndXAuY1xuIEY6XHRtbS9ndXBfdGVzdC5jXG4gRjpcdG1tL2d1cF90ZXN0LmhcbiYjNDM7RjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4mIzQzO0Y6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuLUY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKVxuIE06XHRBbmRyZXcgTW9ydG9uIFx1MDAzY2FrcG1AbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbkBAIC0xNzEzNSw2ICYjNDM7MTcxMzYsNyBAQCBGOlx0bW0vbWVtb3J5LXRpZXJzLmNcbiBGOlx0bW0vcGFnZV9pZGxlLmNcbiBGOlx0bW0vcGdhbGxvYy10cmFjay5oXG4gRjpcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcbiYjNDM7RjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5jIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk5YTE1M2VmYThmYmZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbkBAIC0wLDAgJiM0MzsxLDEwNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZmlsZV91dGlscy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcdHNzaXplX3QgbnVtcmVhZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbiYjNDM7XHRpZiAobnVtcmVhZCBcdTAwM2MgMSkge1xuJiM0MztcdFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiAtZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnVmW251bXJlYWRdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuJiM0MztcdHNzaXplX3QgbnVtd3JpdHRlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJ1ZmxlbiBcdTAwM2MgMilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuJiM0MztcdGlmIChmZCA9PSAtMSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbiYjNDM7XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLXNhdmVkX2Vycm5vO1xuJiM0MztcbiYjNDM7XHRpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNoYXIgYnVmWzIxXTtcbiYjNDM7XHRjaGFyICplbmQ7XG4mIzQzO1xuJiM0MztcdGlmICghbnVtKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJ1ZlswXSBcdTAwM2MgJiMzOTswJiMzOTsgfHwgYnVmWzBdIFx1MDAzZSAmIzM5OzkmIzM5OylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRlcnJubyA9IDA7XG4mIzQzO1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuJiM0MztcdGlmIChlcnJubylcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdGlmICgqZW5kID09ICYjMzk7XFxuJiMzOTspXG4mIzQzO1x0XHRlbmQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRpZiAoKmVuZCAhPSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdCpudW0gPSB2YWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsyMV07XG4mIzQzO1xuJiM0MztcdHNwcmludGYoYnVmLCBcJiMzNDslbHVcJiMzNDssIG51bSk7XG4mIzQzO1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSAmIzQzOyAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XG4mIzQzO1x0cmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmggYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTBkYWE4MmMyYjJiNFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxuQEAgLTAsMCAmIzQzOzEsMTMgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7I2lmbmRlZiBfX01NX0ZJTEVfVVRJTFNfSF9fXG4mIzQzOyNkZWZpbmUgX19NTV9GSUxFX1VUSUxTX0hfX1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkZGVmLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbiYjNDM7aW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSk7XG4mIzQzO2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xuJiM0MztpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xuJiM0MztcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5zaW1pbGFyaXR5IGluZGV4IDg3JVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5pbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbkBAIC04LDEyICYjNDM7OCwxOCBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ZpbGVfdXRpbHMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFRIUF9TWVNGUyBcJiMzNDsvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS9cJiMzNDtcbiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0XG4mIzQzO1xuJiM0MzsjaWZuZGVmIEFSUkFZX1NJWkVcbiYjNDM7I2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNldHRpbmdzX3N0YWNrW01BWF9TRVRUSU5HU19ERVBUSF07XG4gc3RhdGljIGludCBzZXR0aW5nc19pbmRleDtcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5ncztcbkBAIC00OCw2ICYjNDM7NTQsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG1lbV9lbmFibGVkX3N0cmluZ3NbXSA9IHtcbiBcdE5VTExcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBwcmludF9maWxlX2FjY2Vzc19lcnJvcihjb25zdCBjaGFyICpwYXRoLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cHJpbnRmKFwmIzM0OyMgJXM6ICVzICglZClcXG5cJiMzNDssIHBhdGgsIHN0cmVycm9yKC1yZXQpLCAtcmV0KTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbkBAIC02MSw4ICYjNDM7NzIsOSBAQCBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pXG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbiBcbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XG4tXHRcdHBlcnJvcihwYXRoKTtcbiYjNDM7XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuIFxuQEAgLTEwMywxMiAmIzQzOzExNSwxNyBAQCB2b2lkIHRocF93cml0ZV9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKVxuIFx0XHRwcmludGYoXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSAmIzQzOyAxKTtcbiYjNDM7XHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgJiM0MzsgMSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG51bTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTIFwmIzM0OyVzXCYjMzQ7LCBuYW1lKTtcbkBAIC0xMTYsNyAmIzQzOzEzMywxMyBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRwcmludGYoXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbiYjNDM7XHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZudW0pO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnVtO1xuIH1cbiBcbiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG5AQCAtMTI5LDcgJiM0MzsxNTIsMTEgQEAgdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxuIFx0XHRwcmludGYoXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHdyaXRlX251bShwYXRoLCBudW0pO1xuJiM0MztcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuQEAgLTE1Nyw4ICYjNDM7MTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG4gXHRcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWRcJiMzNDspLFxuIFx0XHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cJiMzNDspLFxuIFx0fTtcbi1cdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxuLVx0XHRzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCk7XG4mIzQzO1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbiYjNDM7XHRcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNnNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX09SREVSUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKSB7XG5AQCAtMjA4LDggJiM0MzsyNDIsMTUgQEAgdm9pZCB0aHBfd3JpdGVfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG4gXHR0aHBfd3JpdGVfbnVtKFwmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCYjMzQ7LCBraHVnZXBhZ2VkLVx1MDAzZW1heF9wdGVzX3NoYXJlZCk7XG4gXHR0aHBfd3JpdGVfbnVtKFwmIzM0O2todWdlcGFnZWQvcGFnZXNfdG9fc2NhblwmIzM0Oywga2h1Z2VwYWdlZC1cdTAwM2VwYWdlc190b19zY2FuKTtcbiBcbi1cdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxuLVx0XHR3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4mIzQzO1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbiYjNDM7XHRcdGludCByZXQgPSB3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcbiYjNDM7XHRcdFx0XHQgICAgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xuJiM0MztcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoISgoMSBcdTAwM2NcdTAwM2MgaSkgXHUwMDI2IG9yZGVycykpXG5AQCAtMzA3LDggJiM0MzszNDgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKVxuIFx0XHR9XG4gXG4gXHRcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRvcmRlcnMgfD0gMVVMIFx1MDAzY1x1MDAzYyBpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRpZiAocmV0ICE9IC1FTk9FTlQpIHtcbiYjNDM7XHRcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvcmRlcnMgfD0gMVVMIFx1MDAzY1x1MDAzYyBpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIG9yZGVycztcbkBAIC0zODIsOCAmIzQzOzQzMCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heClcbiBcdFx0aWYgKHNzY2FuZihlbnRyeS1cdTAwM2VkX25hbWUsIFwmIzM0O2h1Z2VwYWdlcy0lenVrQlwmIzM0OywgXHUwMDI2a2IpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdHNpemVzW2NvdW50JiM0MzsmIzQzO10gPSBrYiAqIDEwMjQ7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1tJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAga2IpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxuXCYjMzQ7LCBrYik7XG4gXHR9XG4gXHRjbG9zZWRpcihkaXIpO1xuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQyNSwyOCAmIzQzOzQ3Miw0OSBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3N5c2ZzX3BhdGgoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcJiMzNDtucl9odWdlcGFnZXNcJiMzNDspO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5yO1xuIH1cbiBcbiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcJiMzNDtucl9odWdlcGFnZXNcJiMzNDspO1xuIFxuLVx0d3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuJiM0MztcdHJldCA9IHdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiB9XG4gXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXCYjMzQ7ZnJlZV9odWdlcGFnZXNcJiMzNDspO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5yO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBfX2h1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxuQEAgLTUwMiw3ICYjNDM7NTcwLDggQEAgdW5zaWduZWQgbG9uZyBodWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgbnIsIHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSxcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAobnJfZW5hYmxlZCBcdTAwM2UgbWF4KSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2RldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cJiMzNDssIG5yX2VuYWJsZWQsIG1heCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIG5yX2VuYWJsZWQsIG1heCk7XG4gXHRcdG5yX2VuYWJsZWQgPSBtYXg7XG4gXHR9XG4gXG5AQCAtNTc0LDggJiM0Mzs2NDMsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX3NpZ2hhbmRsZXIoaW50IHNpZylcbiB7XG4mIzQzO1x0KHZvaWQpc2lnO1xuJiM0MztcbiBcdC8qIGV4aXQoKSB3aWxsIGludm9rZSB0aGUgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQgaGFuZGxlci4gKi9cbi1cdGV4aXQoS1NGVF9GQUlMKTtcbiYjNDM7XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gfVxuIFxuIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuc2ltaWxhcml0eSBpbmRleCAxMDAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuaW5kZXggMTQ0NmE2NTllNTQwOC4uMTU0ZDc0MGJlMDJlOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbkBAIC0zLDMgJiM0MzszLDQgQEAgc2xhYmluZm9cbiBwYWdlLXR5cGVzXG4gcGFnZV9vd25lcl9zb3J0XG4gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7Z3VwX2JlbmNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggODU4MTg2YTZlZWZkYi4uZjIwYTMyZDhjYzIyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTMsMTMgJiM0MzszLDE1IEBAXG4gI1xuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyXG4mIzQzO0JVSUxEX1RBUkdFVFMgJiM0Mzs9IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcbiYjNDM7R1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jXG4gXG4tQ0ZMQUdTICYjNDM7PSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtcHRocmVhZFxuJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWRcbiBMREZMQUdTICYjNDM7PSAkKExJQlMpIC1wdGhyZWFkXG4gXG4gYWxsOiAkKEJVSUxEX1RBUkdFVFMpXG5AQCAtMjIsOCAmIzQzOzI0LDExIEBAICQoTElCUyk6XG4gJTogJS5jXG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4mIzQzO2d1cF9iZW5jaDogJChHVVBfQkVOQ0hfT0JKUykgJChMSUJTKVxuJiM0MztcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKEdVUF9CRU5DSF9PQkpTKSAkKExERkxBR1MpXG4mIzQzO1xuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7XHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcbiBcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxuIFxuIHNiaW5kaXIgPz0gL3Vzci9zYmluXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXG5zaW1pbGFyaXR5IGluZGV4IDUwJVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xucmVuYW1lIHRvIHRvb2xzL21tL2d1cF9iZW5jaC5jXG5pbmRleCAzZjg0MWE5NmY4NzA2Li43NTM2OWIyNjc0YTk0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbkBAIC0xMCwxMSAmIzQzOzEwLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbW0vZ3VwX3Rlc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBNQiAoMVVMIFx1MDAzY1x1MDAzYyAyMClcbiBcbkBAIC0zOCwxMiAmIzQzOzM3LDYgQEAgc3RhdGljIGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpXG4gXHRcdHJldHVybiBcJiMzNDtQSU5fRkFTVF9CRU5DSE1BUktcJiMzNDs7XG4gXHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XG4gXHRcdHJldHVybiBcJiMzNDtQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXCYjMzQ7O1xuLVx0Y2FzZSBHVVBfQkFTSUNfVEVTVDpcbi1cdFx0cmV0dXJuIFwmIzM0O0dVUF9CQVNJQ19URVNUXCYjMzQ7O1xuLVx0Y2FzZSBQSU5fQkFTSUNfVEVTVDpcbi1cdFx0cmV0dXJuIFwmIzM0O1BJTl9CQVNJQ19URVNUXCYjMzQ7O1xuLVx0Y2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDpcbi1cdFx0cmV0dXJuIFwmIzM0O0RVTVBfVVNFUl9QQUdFU19URVNUXCYjMzQ7O1xuIFx0fVxuIFx0cmV0dXJuIFwmIzM0O1Vua25vd24gY29tbWFuZFwmIzM0OztcbiB9XG5AQCAtNTMsMzkgJiM0Mzs0NiwyOSBAQCB2b2lkICpndXBfdGhyZWFkKHZvaWQgKmRhdGEpXG4gXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0gKihzdHJ1Y3QgZ3VwX3Rlc3QgKilkYXRhO1xuIFx0aW50IGksIHN0YXR1cztcbiBcbi1cdC8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovXG4tXHRpZiAoKGNtZCA9PSBQSU5fRkFTVF9CRU5DSE1BUkspIHx8IChjbWQgPT0gR1VQX0ZBU1RfQkVOQ0hNQVJLKSB8fFxuLVx0ICAgICAoY21kID09IFBJTl9MT05HVEVSTV9CRU5DSE1BUkspKSB7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlcGVhdHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0XHRicmVhaztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXBlYXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Z3VwLnNpemUgPSBzaXplO1xuJiM0MztcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4mIzQzO1x0XHRpZiAoc3RhdHVzKSB7XG4mIzQzO1x0XHRcdGludCBlcnIgPSBlcnJubztcbiBcbiBcdFx0XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1wmIzM0Oyxcbi1cdFx0XHRcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbi1cdFx0XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuLVx0XHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXCYjMzQ7LCBndXAuc2l6ZSk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0OyVzIGlvY3RsIGZhaWxlZDogJXNcXG5cJiMzNDssIGNtZF90b19zdHIoY21kKSxcbiYjNDM7XHRcdFx0XHRzdHJlcnJvcihlcnIpKTtcbiBcdFx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4mIzQzO1x0XHRcdHJldHVybiBkYXRhO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGdvdG8gcmV0dXJuXztcbiBcbiBcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7JXM6IGRvbmVcXG5cJiMzNDssIGNtZF90b19zdHIoY21kKSk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzXCYjMzQ7LFxuJiM0MztcdFx0XHRjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbiYjNDM7XHRcdFx0Z3VwLnB1dF9kZWx0YV91c2VjKTtcbiBcdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7VHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcblwmIzM0OywgZ3VwLnNpemUpO1xuJiM0MztcdFx0XHRwcmludGYoXCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXCYjMzQ7LCBndXAuc2l6ZSk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuIFx0fVxuIFxuLXJldHVybl86XG4tXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFwmIzM0O2lvY3RsIHN0YXR1cyAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbkBAIC05MywzOCAmIzQzOzc2LDIxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiB7XG4gXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4gXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcbi1cdGludCBmbGFncyA9IE1BUF9QUklWQVRFO1xuJiM0MztcdGludCBmbGFncyA9IE1BUF9QUklWQVRFLCBzdGFydGVkX3RocmVhZHMgPSAwO1xuIFx0Y2hhciAqZmlsZSA9IFwmIzM0Oy9kZXYvemVyb1wmIzM0Oztcbi1cdGJvb2wgaHVnZXRsYiA9IGZhbHNlO1xuJiM0MztcdGJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTtcbiYjNDM7XHR2b2lkICp0aHJlYWRfcmVzdWx0O1xuIFx0cHRocmVhZF90ICp0aWQ7XG4gXHRjaGFyICpwO1xuIFxuLVx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7bTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O206cjpuOkY6Zjphajp0VEx1d1dTSFwmIzM0OykpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJiMzOTthJiMzOTs6XG4gXHRcdFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7YiYjMzk7OlxuLVx0XHRcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7TCYjMzk7OlxuIFx0XHRcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtjJiMzOTs6XG4tXHRcdFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEdW1wIHBhZ2UgMCAoaW5kZXggMSkuIE1heSBiZSBvdmVycmlkZGVuIGxhdGVyLCBieVxuLVx0XHRcdCAqIHVzZXImIzM5O3Mgbm9uLW9wdGlvbiBhcmd1bWVudHMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuIFwmIzM0O2RvXG4tXHRcdFx0ICogbm90aGluZ1wmIzM0Oy5cbi1cdFx0XHQgKi9cbi1cdFx0XHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7cCYjMzk7OlxuLVx0XHRcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xuLVx0XHRcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7RiYjMzk7OlxuIFx0XHRcdC8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovXG4gXHRcdFx0Z3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApO1xuQEAgLTE0MSw3ICYjNDM7MTA3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICYjMzk7biYjMzk7OlxuIFx0XHRcdG5yX3BhZ2VzID0gYXRvaShvcHRhcmcpO1xuIFx0XHRcdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0XHRcdG5yX3BhZ2VzID0gc2l6ZSAvIHBzaXplKCk7XG4mIzQzO1x0XHRcdFx0bnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O3QmIzM5OzpcbiBcdFx0XHR0aHAgPSAxO1xuQEAgLTE0OSw5ICYjNDM7MTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICYjMzk7VCYjMzk7OlxuIFx0XHRcdHRocCA9IDA7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtVJiMzOTs6XG4tXHRcdFx0Y21kID0gR1VQX0JBU0lDX1RFU1Q7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTt1JiMzOTs6XG4gXHRcdFx0Y21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTE3Myw1MiAmIzQzOzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0aHVnZXRsYiA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZXhpdCgxKTtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKG9wdGluZCBcdTAwM2MgYXJnYykge1xuLVx0XHRpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV4YW1wbGU6XG4tXHRcdCAqXG4tXHRcdCAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxXG4tXHRcdCAqXG4tXHRcdCAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTdcbi1cdFx0ICovXG4tXG4tXHRcdHdoaWxlICgob3B0aW5kIFx1MDAzYyBhcmdjKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cbi1cdFx0XHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSAmIzQzOyAxO1xuLVxuLVx0XHRcdGd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDtcbi1cdFx0XHRleHRyYV9hcmdfY291bnQmIzQzOyYjNDM7O1xuLVx0XHRcdG9wdGluZCYjNDM7JiM0Mzs7XG4tXHRcdH1cbiYjNDM7XHRpZiAob3B0aW5kICE9IGFyZ2MpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtVbmV4cGVjdGVkIGFyZ3VtZW50ICYjMzk7JXMmIzM5O1xcblwmIzM0OywgYXJndltvcHRpbmRdKTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4gXHR9XG4gXG4tXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuJiM0MztcdGlmIChnZXR1aWQoKSkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoaHVnZXRsYikge1xuIFx0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4gXG4tXHRcdGlmICghaHBfc2l6ZSlcbi1cdFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtIdWdlVExCIGlzIHVuYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGlmICghaHBfc2l6ZSkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Q291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRzaXplID0gKHNpemUgJiM0MzsgaHBfc2l6ZSAtIDEpIFx1MDAyNiB+KGhwX3NpemUgLSAxKTtcbi1cdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuLVx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XG4tXG4gXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xuLVx0aWYgKGZpbGVkIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdGlmIChmaWxlZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiBcbiBcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzO1xuIFx0aWYgKHdyaXRlKVxuQEAgLTIyNywyNiAmIzQzOzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4gXHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4gXHRcdHN3aXRjaCAoZXJybm8pIHtcbi1cdFx0Y2FzZSBFQUNDRVM6XG4tXHRcdFx0aWYgKGdldHVpZCgpKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwmIzM0Oyk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgRU5PRU5UOlxuIFx0XHRcdGlmIChvcGVuZGlyKFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnXCYjMzQ7KSA9PSBOVUxMKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwmIzM0Oyk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcblwmIzM0Oyk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLFxuJiM0MztcdFx0XHRcdHN0cmVycm9yKGVycm5vKSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuLVx0XHRrc2Z0X2V4aXRfcGFzcygpO1xuJiM0MztcdFx0Z290byBlcnJfY2xvc2VfZmlsZWQ7XG4gXHR9XG4gXG4gXHRwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgZmlsZWQsIDApO1xuLVx0aWYgKHAgPT0gTUFQX0ZBSUxFRClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O21tYXA6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdGlmIChwID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDttbWFwOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Nsb3NlX2d1cF9mZDtcbiYjNDM7XHR9XG4gXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7XG4gXG4gXHRpZiAodGhwID09IDEpXG5AQCAtMjU1LDIxICYjNDM7MjA1LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuIFxuIFx0LyogRmF1bHQgdGhlbSBpbiBoZXJlLCBmcm9tIHVzZXIgc3BhY2UuICovXG4tXHRmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gcHNpemUoKSlcbiYjNDM7XHRmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gZ2V0cGFnZXNpemUoKSlcbiBcdFx0cFswXSA9IDA7XG4gXG4gXHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7XG4tXHRhc3NlcnQodGlkKTtcbiYjNDM7XHRpZiAoIXRpZCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSAlZCB0aHJlYWRzOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0bnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRnb3RvIGVycl91bm1hcDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRpZFtpXSwgTlVMTCwgZ3VwX3RocmVhZCwgXHUwMDI2Z3VwKTtcbi1cdFx0YXNzZXJ0KHJldCA9PSAwKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O3B0aHJlYWRfY3JlYXRlIGZhaWxlZDogJXNcXG5cJiMzNDssIHN0cmVycm9yKHJldCkpO1xuJiM0MztcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHN0YXJ0ZWRfdGhyZWFkcyYjNDM7JiM0Mzs7XG4gXHR9XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudGhyZWFkczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhcnRlZF90aHJlYWRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgXHUwMDI2dGhyZWFkX3Jlc3VsdCk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IocmV0KSk7XG4mIzQzO1x0XHRcdHRocmVhZF9lcnJvciA9IHRydWU7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpXG4mIzQzO1x0XHRcdHRocmVhZF9lcnJvciA9IHRydWU7XG4gXHR9XG4gXG4gXHRmcmVlKHRpZCk7XG4gXG4tXHRrc2Z0X2V4aXRfcGFzcygpO1xuJiM0MztcdGlmICh0aHJlYWRfZXJyb3IpXG4mIzQzO1x0XHRnb3RvIGVycl91bm1hcDtcbiYjNDM7XG4mIzQzO1x0bXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpO1xuJiM0MztcdGNsb3NlKGd1cF9mZCk7XG4mIzQzO1x0Y2xvc2UoZmlsZWQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3VubWFwOlxuJiM0MztcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcbiYjNDM7ZXJyX2Nsb3NlX2d1cF9mZDpcbiYjNDM7XHRjbG9zZShndXBfZmQpO1xuJiM0MztlcnJfY2xvc2VfZmlsZWQ6XG4mIzQzO1x0Y2xvc2UoZmlsZWQpO1xuJiM0MztcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCAyZDUzNjYxOTZlMzA5Li45YzAzNjI0ZmQyOTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMzcsNyAmIzQzOzM3LDggQEAgZW5kaWZcbiAjIExETElCUy5cbiBNQUtFRkxBR1MgJiM0Mzs9IC0tbm8tYnVpbHRpbi1ydWxlc1xuIFxuLUNGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4mIzQzO0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXG4mIzQzO0NGTEFHUyAmIzQzOz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcbiBDRkxBR1MgJiM0Mzs9IC1XdW5yZWFjaGFibGUtY29kZVxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxuIFxuQEAgLTU3LDggJiM0Mzs1OCw4IEBAIGVuZGlmXG4gXG4gVEVTVF9HRU5fRklMRVMgPSBjb3dcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gY29tcGFjdGlvbl90ZXN0XG4mIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwX2xvbmd0ZXJtXG4tVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGd1cF90ZXN0XG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGhtbS10ZXN0c1xuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLW1hZHZpc2VcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1tbWFwXG5AQCAtMTg3LDggJiM0MzsxODgsMTAgQEAgVEVTVF9GSUxFUyAmIzQzOz0gd3JpdGVfaHVnZXRsYl9tZW1vcnkuc2hcbiBcbiBpbmNsdWRlIC4uL2xpYi5ta1xuIFxuLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuLSQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuJiM0MzskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcbiYjNDM7XHRcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuJiM0MzskKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcbiYjNDM7XHRcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuIFxuICQoT1VUUFVUKS91ZmZkLXN0cmVzczogdWZmZC1jb21tb24uY1xuICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmNcbkBAIC0yMTcsNyAmIzQzOzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgJiM0Mzs9IC1tMzIgLW14c2F2ZVxuICQoQklOQVJJRVNfMzIpOiBMRExJQlMgJiM0Mzs9IC1scnQgLWxkbCAtbG1cbiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4mIzQzO1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSlcbiBlbmRpZlxuIFxuQEAgLTIyNiw3ICYjNDM7MjI5LDcgQEAgJChCSU5BUklFU182NCk6IENGTEFHUyAmIzQzOz0gLW02NCAtbXhzYXZlXG4gJChCSU5BUklFU182NCk6IExETElCUyAmIzQzOz0gLWxydCAtbGRsXG4gJChCSU5BUklFU182NCk6ICQoT1VUUFVUKS8lXzY0OiAlLmNcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuLVx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS02NCwkKHQpKSkpXG4gZW5kaWZcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG5pbmRleCAzMGQ0YWNlNzE1NWFlLi5iM2Y1Mzc3MTE5Y2I4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG5AQCAtMTUsOSAmIzQzOzE1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBNQVBfU0laRV9NQlx0MTAwXG4gI2RlZmluZSBNQVBfU0laRVx0KE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuaW5kZXggOGFhNTI0OWQ5YmVmNi4uMzI2NGE4Mjg1NzViZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbmluZGV4IDQ1Yjg0ZjdiMzY0ZTAuLjI4OWFlZDJlYmFjMDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbkBAIC0yNSw3ICYjNDM7MjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gdWludDY0X3QgcGFnZV9zaXplO1xuIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTIxLDcgJiM0MzsyMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3Vpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vcGlkZmQvcGlkZmQuaFwmIzM0O1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40YzllMTRkYmI0MzRhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xuQEAgLTAsMCAmIzQzOzEsMzI5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIC8vIFVzZSBsbDY0XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuJiM0MztcbiYjNDM7LyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovXG4mIzQzOyNkZWZpbmUgRk9MTF9XUklURVx0MHgwMVx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXG4mIzQzO1xuJiM0MzsvKiBQYWdlIGNvdW50cyBleGVyY2lzaW5nIHNpbmdsZSwgVEhQLWJhdGNoLCBwYXJ0aWFsLCBhbmQgZnVsbC1tYXBwaW5nIEdVUC4gKi9cbiYjNDM7c3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBHVVBfVEVTVF9GSUxFIFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XCYjMzQ7XG4mIzQzOyNkZWZpbmUgTlJfSFVHRV9QQUdFUyAxMjhcbiYjNDM7XG4mIzQzO0hVR0VUTEJfU0VUVVBfREVGQVVMVF9QQUdFUyhOUl9IVUdFX1BBR0VTKVxuJiM0MztcbiYjNDM7RklYVFVSRShndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdGludCBndXBfZmQ7XG4mIzQzO1x0Y2hhciAqYWRkcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNpemU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRib29sIHRocDtcbiYjNDM7XHRib29sIGh1Z2V0bGI7XG4mIzQzO1x0Ym9vbCB3cml0ZTtcbiYjNDM7XHRib29sIHNoYXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGUpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfdGhwKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IHRydWUsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF90aHApXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gdHJ1ZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfaHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IHRydWUsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfaHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IHRydWUsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfdGhwKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IHRydWUsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfdGhwKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IHRydWUsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfaHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IHRydWUsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKGd1cF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURTtcbiYjNDM7XHRpbnQgemVyb19mZDtcbiYjNDM7XHRjaGFyICpwO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZXNpemUgPSAxMjggKiBNQjtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNlaHVnZXRsYikge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghaHBfc2l6ZSlcbiYjNDM7XHRcdFx0U0tJUChyZXR1cm4sIFwmIzM0O0h1Z2VUTEIgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGh1Z2V0bGJfZnJlZV9kZWZhdWx0X3BhZ2VzKCkgXHUwMDNjIE5SX0hVR0VfUEFHRVMpXG4mIzQzO1x0XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdHNlbGYtXHUwMDNlc2l6ZSA9IE5SX0hVR0VfUEFHRVMgKiBocF9zaXplO1xuJiM0MztcdFx0bW1hcF9mbGFncyB8PSAoTUFQX0hVR0VUTEIgfCBNQVBfQU5PTllNT1VTKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZXNoYXJlZClcbiYjNDM7XHRcdG1tYXBfZmxhZ3MgPSAobW1hcF9mbGFncyBcdTAwMjYgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7XG4mIzQzO1xuJiM0MztcdC8qIHplcm9fZmQgaGFzIHRvIGJlIFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xuJiM0MztcdHplcm9fZmQgPSBvcGVuKFwmIzM0Oy9kZXYvemVyb1wmIzM0OywgT19SRFdSKTtcbiYjNDM7XHRBU1NFUlRfR0UoemVyb19mZCwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIGd1cF9mZCBoYXMgdG8gYmUgXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXG4mIzQzO1x0c2VsZi1cdTAwM2VndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4mIzQzO1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZ3VwX2ZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VhZGRyID0gbW1hcChOVUxMLCBzZWxmLVx1MDAzZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHRcdCAgbW1hcF9mbGFncywgemVyb19mZCwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShzZWxmLVx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBlcnJubztcbiYjNDM7XG4mIzQzO1x0XHRjbG9zZSh6ZXJvX2ZkKTtcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbiYjNDM7XHRcdFRIX0xPRyhcJiMzNDttbWFwIGZhaWxlZDogJXNcJiMzNDssIHN0cmVycm9yKGVycikpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZSh6ZXJvX2ZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNldGhwKVxuJiM0MztcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4mIzQzO1x0ZWxzZSBpZiAoIXZhcmlhbnQtXHUwMDNlaHVnZXRsYilcbiYjNDM7XHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4mIzQzO1xuJiM0MztcdGZvciAocCA9IHNlbGYtXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyXG4mIzQzO1x0XHRcdCYjNDM7IHNlbGYtXHUwMDNlc2l6ZTsgcCAmIzQzOz0gcHNpemUoKSlcbiYjNDM7XHRcdHBbMF0gPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKGd1cF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbiYjNDM7XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9ndXBfY21kKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcbiYjNDM7XHRcdFx0IEZJWFRVUkVfREFUQShndXBfdGVzdCkgKnNlbGYsXG4mIzQzO1x0XHRcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxuJiM0MztcdFx0XHQgdW5zaWduZWQgbG9uZyBjb21tYW5kLFxuJiM0MztcdFx0XHQgdW5zaWduZWQgaW50IHRlc3RfZmxhZ3MsXG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgd2hpY2hfcGFnZSlcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0ge1xuJiM0MztcdFx0XHQuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcixcbiYjNDM7XHRcdFx0LnNpemUgPSBzZWxmLVx1MDAzZXNpemUsXG4mIzQzO1x0XHRcdC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXHUwMDNjIDAgP1xuJiM0MztcdFx0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLFxuJiM0MztcdFx0XHQuZ3VwX2ZsYWdzID0gdmFyaWFudC1cdTAwM2V3cml0ZSA/IEZPTExfV1JJVEUgOiAwLFxuJiM0MztcdFx0XHQudGVzdF9mbGFncyA9IHRlc3RfZmxhZ3MsXG4mIzQzO1x0XHRcdC53aGljaF9wYWdlcyA9IHsgd2hpY2hfcGFnZSB9LFxuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIGNvbW1hbmQsIFx1MDAyNmd1cCksIDApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0JBU0lDX1RFU1QsIDAsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCwgMCwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgZHVtcF91c2VyX3BhZ2VzX3dpdGhfZ2V0KVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgMCwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgZHVtcF91c2VyX3BhZ2VzX3dpdGhfcGluKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBEVU1QX1VTRVJfUEFHRVNfVEVTVCxcbiYjNDM7XHRcdCAgICBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTiwgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0ZBU1RfQkVOQ0hNQVJLLCAwLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19mYXN0KVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fRkFTVF9CRU5DSE1BUkssIDAsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLLCAwLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVChkdW1wX3VzZXJfcGFnZXNfc3BhcnNlX2luZGljZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XG4mIzQzO1x0aW50IHplcm9fZmQsIGd1cF9mZDtcbiYjNDM7XHRjaGFyICphZGRyLCAqcDtcbiYjNDM7XG4mIzQzO1x0emVyb19mZCA9IG9wZW4oXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7LCBPX1JEV1IpO1xuJiM0MztcdEFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuJiM0MztcdEFTU0VSVF9HRShndXBfZmQsIDApO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgemVyb19mZCwgMCk7XG4mIzQzO1x0Y2xvc2UoemVyb19mZCk7XG4mIzQzO1x0QVNTRVJUX05FKGFkZHIsIE1BUF9GQUlMRUQpO1xuJiM0MztcbiYjNDM7XHRtYWR2aXNlKGFkZHIsIHNpemUsIE1BRFZfSFVHRVBBR0UpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHAgPSBhZGRyOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyAodW5zaWduZWQgbG9uZylhZGRyICYjNDM7IHNpemU7XG4mIzQzO1x0ICAgICBwICYjNDM7PSBwc2l6ZSgpKVxuJiM0MztcdFx0cFswXSA9IDA7XG4mIzQzO1xuJiM0MztcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbiYjNDM7XHRndXAuc2l6ZSA9IHNpemU7XG4mIzQzO1x0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gc2l6ZSAvIHBzaXplKCk7XG4mIzQzO1x0Z3VwLmd1cF9mbGFncyA9IEZPTExfV1JJVEU7XG4mIzQzO1x0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbiYjNDM7XHRndXAud2hpY2hfcGFnZXNbMV0gPSAyMDtcbiYjNDM7XHRndXAud2hpY2hfcGFnZXNbMl0gPSAweDEwMDE7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShpb2N0bChndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCBcdTAwMjZndXApLCAwKTtcbiYjNDM7XG4mIzQzO1x0bXVubWFwKGFkZHIsIHNpemUpO1xuJiM0MztcdGNsb3NlKGd1cF9mZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdGludCBmZDtcbiYjNDM7XHRjaGFyICpmaWxlID0gXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuJiM0MztcdGlmIChmZCA9PSAtMSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFQUNDRVMpXG4mIzQzO1x0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVOT0VOVCkge1xuJiM0MztcdFx0XHRESVIgKmRlYnVnZnMgPSBvcGVuZGlyKFwmIzM0Oy9zeXMva2VybmVsL2RlYnVnXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghZGVidWdmcykge1xuJiM0MztcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O01vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGNsb3NlZGlyKGRlYnVnZnMpO1xuJiM0MztcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O0NoZWNrIENPTkZJR19HVVBfVEVTVCBpbiBrZXJuZWwgY29uZmlnXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdGVzdF9oYXJuZXNzX3J1bihhcmdjLCBhcmd2KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbkBAIC0yOSw3ICYjNDM7MjksNiBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IGUyNjQyZWNhMGQwMmIuLmZhMWE2NTE5NjNmZDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbkBAIC0xMCw5ICYjNDM7MTAsNiBAQFxuICAqIGJ1Z3MuXG4gICovXG4gXG4tI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbi1cbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbkBAIC0zMyw2ICYjNDM7MzAsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiBcbiAvKlxuICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24mIzM5O3QgZXhwb3J0ZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5AQCAtMTQsNyAmIzQzOzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBNSU5fRlJFRV9QQUdFU1x0MjBcbiAjZGVmaW5lIE5SX0hVR0VfUEFHRVNcdDEwXHQvKiBjb21tb24gbnVtYmVyIG9mIHBhZ2VzIHRvIG1hcC9hbGxvY2F0ZSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcbmluZGV4IDBmMmFhZDFiN2RiZDYuLmE0NThiZWNmNTgzMjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcbkBAIC0xOCw3ICYjNDM7MTgsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxuICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuaW5kZXggZWQzZDkyZTg2MmQ4Ny4uOWI3MjRhZjY2ZTkzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcbkBAIC0yNiw3ICYjNDM7MjYsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxuICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbkBAIC0yOSw3ICYjNDM7MjksNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNClcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xuaW5kZXggYmMyMDJlNGVkMmJkYS4uMjA4NjRlN2Q0ZTBjNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbkBAIC0yMSw5ICYjNDM7MjEsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdGZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxuICNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcbmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5AQCAtMjAsNyAmIzQzOzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5AQCAtMTAsNyAmIzQzOzEwLDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xuaW5kZXggZjk0NTQ5ZWZjYzZmZi4uMjUzMmE0MmI5OGRmZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5AQCAtMjUsNyAmIzQzOzI1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggMGQ2YzcxZWQyZmFlMy4uYmEyMWY1ODUyNWU0MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyAmIzQzOzIyLDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtsaW51eC9tYWdpYy5oXCYjMzQ7XG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXHUwMDNjXHUwMDNjIDMwKSlcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcbkBAIC0xNDQsNiAmIzQzOzE0Myw3IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRjaGFyIGJ1ZlsxIFx1MDAzY1x1MDAzYyAxMF07XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuIFx0Y2hhciAqc3RyLCAqZW5kO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KTtcbkBAIC0xNjMsOCAmIzQzOzE2Myw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3JlYWRfZmlsZSh1ZXZlbnQpXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkX2ZpbGUoJXMpOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwmIzM0O0RFVlRZUEU9ZGlza1wmIzM0OykpIHtcbiBcdFx0LyogRm91bmQgaXQgKi9cbiBcdFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG5AQCAtMzQ1LDcgJiM0MzszNDYsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCByZXQ7XG4gXHR2b2lkICpwO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIFxuQEAgLTM4OSw3ICYjNDM7MzkwLDExIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttbWFwKClcJiMzNDspO1xuIFxuIFx0LyogRHJvcCBwYWdlIGNhY2hlICovXG4tXHR3cml0ZV9maWxlKFwmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wmIzM0OywgXCYjMzQ7M1wmIzM0OywgMik7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShcJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcJiMzNDssIFwmIzM0OzNcJiMzNDssIDIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XG4gXHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtMTUsNyAmIzQzOzE1LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL2tzbS9cJiMzNDtcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNSw3ICYjNDM7NSw2IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuQEAgLTE2LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggY2ZkMTk4NzMzOWMxMy4uZjk1ZTNlYTU3YzNhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjQsNyAmIzQzOzI0LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTExcdFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcdFxcXG4gXHRcdFx0XHRcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuaW5kZXggODJjNmU5NmVhNmViMy4uZjllYzE0MDhhNmUzMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5AQCAtNDUsOCAmIzQzOzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7cGtleS1oZWxwZXJzLmhcJiMzNDtcbiBcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0xMzAsMzAgJiM0MzsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwmIzM0Oy1IIC1tICRodWdldGxiX21iXCYjMzQ7OyBkb1xuLSAgICAgICAgIyAtdTogZ3VwLWZhc3QsIC1VOiBndXAtYmFzaWMsIC1hOiBwaW4tZmFzdCwgLWI6IHBpbi1iYXNpYywgLUw6IHBpbi1sb25ndGVybVxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXG4tICAgICAgICAgICAgZm9yIHdyaXRlIGluIC13IC1XOyBkb1xuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFwmIzM0OyBcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsXG4tICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaXQmIzM5O3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXG4tICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCBwYXJ0aWFsIGd1cCB3aGVuIGhpdCBhIGh1Z2UgaW4gd2hhdGV2ZXIgZm9ybVxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcJiMzNDstbiAxXCYjMzQ7IFwmIzM0Oy1uIDUxMlwmIzM0OyBcJiMzNDstbiAxMjNcJiMzNDsgXCYjMzQ7LW4gLTFcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCYjMzQ7YXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NFwmIzM0O1xuIGlmIFsgLXogXCYjMzQ7JEFSQ0hcJiMzNDsgXTsgdGhlblxuQEAgLTI3NSwxOCAmIzQzOzI1MSw3IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCYjMzQ7bW1hcFwmIzM0OyBydW5fdGVzdCAuL21hcF9maXhlZF9ub3JlcGxhY2VcbiBcbi1pZiAkUlVOX0FMTDsgdGhlblxuLSAgICBydW5fZ3VwX21hdHJpeFxuLWVsc2Vcbi0gICAgIyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXG4tICAgIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXG4tICAgICMgcGluX3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIDFcbi0gICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXG4mIzQzO0NBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwXG4gQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfbG9uZ3Rlcm1cbiBcbiBDQVRFR09SWT1cJiMzNDt1c2VyZmF1bHRmZFwmIzM0OyBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggZTE5OGZhY2Y3OGJiNS4uMTY4N2U5ODRhYTE0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICYjNDM7OSw2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXBcJiMzNDtcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCA4NmE2MDM2OTI4MjYxLi4wZTA4M2FiNzFhZjYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgJiM0MzsyMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gdWludDY0X3QgcGFnZXNpemU7XG4gdW5zaWduZWQgaW50IHBhZ2VzaGlmdDtcbkBAIC0xNDYsNyAmIzQzOzE0NSwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0aWYgKHJldCBcdTAwM2U9IElOUFVUX01BWClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXG4tXHR3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZSglcyk6ICVzXFxuXCYjMzQ7LCBTUExJVF9ERUJVR0ZTLFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgJiM0MzsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWYgIWRlZmluZWQoTUFQX0hVR0VUTEIpXG4gI2RlZmluZSBNQVBfSFVHRVRMQlx0MHg0MDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5AQCAtMTcsNyAmIzQzOzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcbiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5AQCAtMzcsNyAmIzQzOzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggYzk3M2Q2NzIyNzIwYy4uZWI0YjI0MzNiMDBlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3VmZmQtY29tbW9uLmhcJiMzNDtcbiBcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbkBAIC0xMSw3ICYjNDM7MTEsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggODBiYzlmNTk3YjUyMS4uNDc1MWRiNzk4YzNhYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtODg5LDExMSAmIzQzOzg4OSw1NCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0cmV0dXJuIHJldCBcdTAwM2UgMCA/IDAgOiAtZXJybm87XG4gfVxuIFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdGludCBmZDtcbi1cdHNzaXplX3QgbnVtcmVhZDtcbi1cbi1cdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XG4tXHRpZiAoZmQgPT0gLTEpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4tXHRpZiAobnVtcmVhZCBcdTAwM2MgMSkge1xuLVx0XHRjbG9zZShmZCk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0YnVmW251bXJlYWRdID0gJiMzOTtcXDAmIzM5Oztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxuXCYjMzQ7LCBidWZsZW4pO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIG9wZW4gZmFpbGVkOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbi1cbi1cdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdHNhdmVkX2Vycm5vID0gZXJybm87XG4tXHRjbG9zZShmZCk7XG4tXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuLVx0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApIHtcbi1cdFx0aWYgKGlnbm9yZV9laW52YWwgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdH1cbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pO1xuLX1cbi1cbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcbi19XG4tXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKVxuLXtcbi1cdGNoYXIgYnVmWzIxXTtcbi1cbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cmVhZF9maWxlKClcJiMzNDspO1xuLVxuLVx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0Y2hhciBidWZbMjFdO1xuLVxuLVx0c3ByaW50ZihidWYsIFwmIzM0OyVsdVwmIzM0OywgbnVtKTtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEsIGlnbm9yZV9laW52YWwpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuLXtcbi1cdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTtcbi19XG4tXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7XG4gXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKVxuIHtcbi1cdGlmIChzaG1tYXgpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0Oywgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0Oywgc2htYWxsKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2htbWF4KSB7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIHNobW1heCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgc2htbWF4OiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHNobWFsbCkge1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBzaG1hbGwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7KTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobW1heDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBsZW5ndGgsIHN0cmVycm9yKC1yZXQpKTtcbiBcdFx0c2htbWF4ID0gdmFsO1xuIFx0fVxuIFxuLVx0dmFsID0gcmVhZF9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcJiMzNDspO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcdGlmICh2YWwgXHUwMDNjIG5yKSB7XG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0OywgbnIpO1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBucik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICYjNDM7OCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2UgLyogX1NDX1BBR0VTSVpFICovXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2ZpbGVfdXRpbHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCBcdTAwM2NcdTAwM2MgKG5yKSlcbiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpXG5AQCAtMTY2LDEyICYjNDM7MTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzLCBzZWxmdGVzdHMsIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZjJiYTU4YjIzY2UzOTkwNGExZjY3ZGRjYWI3YzI5OTRjZjVhN2I3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTk6MTI6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CmluZGV4IGMxNmNhMTYzYjU1ZTMuLjE1NjRiMTY5OTRhZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CkBAIC0yMjgsMTIgJiM0MzsyMjgsMTggQEAgVW5pdCB0ZXN0aW5nCiA9PT09PT09PT09PT0KIFRoaXMgZmlsZTo6CiAKLSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCiYjNDM7IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jCiAKLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczoKJiM0Mztjb250YWlucyB0aGUgZm9sbG93aW5nIHRlc3QgY2FzZXMgdG8gZXhlcmNpc2UgcGluX3VzZXJfcGFnZXMqKCk6CiAKLSogUElOX0ZBU1RfQkVOQ0hNQVJLICguL2d1cF90ZXN0IC1hKQotKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYikKJiM0MzsqIHBpbl91c2VyX3BhZ2VzIHZpYSBQSU5fQkFTSUNfVEVTVAomIzQzOyogcGluX3VzZXJfcGFnZXNfZmFzdCB2aWEgUElOX0ZBU1RfQkVOQ0hNQVJLCiYjNDM7KiBwaW5fdXNlcl9wYWdlc19sb25ndGVybSB2aWEgUElOX0xPTkdURVJNX0JFTkNITUFSSwomIzQzOwomIzQzO1J1biB3aXRoOjoKJiM0MzsKJiM0MzsgIG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0KJiM0MzsgIC4vdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwCiAKIFlvdSBjYW4gbW9uaXRvciBob3cgbWFueSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWQKIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3byBuZXcgL3Byb2Mvdm1zdGF0IGVudHJpZXM6IDo6CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDBmNTEzYjQyYmMxODYuLjg2MTUwNGZhMmUzMTggMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xNzAzMSw4ICYjNDM7MTcwMzEsOSBAQCBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW0KIEY6CW1tL2d1cC5jCiBGOgltbS9ndXBfdGVzdC5jCiBGOgltbS9ndXBfdGVzdC5oCiYjNDM7RjoJdG9vbHMvbW0vZ3VwX2JlbmNoLmMKJiM0MztGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMKLUY6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKIAogTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKQogTToJQW5kcmV3IE1vcnRvbiAmbHQ7YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZyZndDsKQEAgLTE3MTM1LDYgJiM0MzsxNzEzNiw3IEBAIEY6CW1tL21lbW9yeS10aWVycy5jCiBGOgltbS9wYWdlX2lkbGUuYwogRjoJbW0vcGdhbGxvYy10cmFjay5oCiBGOgltbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jCiYjNDM7RjoJdG9vbHMvbGliL21tLwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vCiAKIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OCmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5jIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45OWExNTNlZmE4ZmJmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwpAQCAtMCwwICYjNDM7MSwxMDQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7ZmlsZV91dGlscy5oJiMzNDsKJiM0MzsKJiM0MztpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKJiM0Mzt7CiYjNDM7CWludCBmZCwgZXJyOwomIzQzOwlzc2l6ZV90IG51bXJlYWQ7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CiYjNDM7CWlmIChmZCA9PSAtMSkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CW51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOwomIzQzOwlpZiAobnVtcmVhZCAmbHQ7IDEpIHsKJiM0MzsJCWVyciA9IG51bXJlYWQgPyBlcnJubyA6IEVOT0RBVEE7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gLWVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlidWZbbnVtcmVhZF0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKJiM0Mzt7CiYjNDM7CWludCBmZCwgc2F2ZWRfZXJybm87CiYjNDM7CXNzaXplX3QgbnVtd3JpdHRlbjsKJiM0MzsKJiM0MzsJaWYgKGJ1ZmxlbiAmbHQ7IDIpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKJiM0MzsJaWYgKGZkID09IC0xKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJbnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOwomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWlmIChudW13cml0dGVuICZsdDsgMCkKJiM0MzsJCXJldHVybiAtc2F2ZWRfZXJybm87CiYjNDM7CiYjNDM7CWlmIChudW13cml0dGVuICE9IChzc2l6ZV90KShidWZsZW4gLSAxKSkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdmFsOwomIzQzOwlpbnQgcmV0OwomIzQzOwljaGFyIGJ1ZlsyMV07CiYjNDM7CWNoYXIgKmVuZDsKJiM0MzsKJiM0MzsJaWYgKCFudW0pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGJ1ZlswXSAmbHQ7ICYjMzk7MCYjMzk7IHx8IGJ1ZlswXSAmZ3Q7ICYjMzk7OSYjMzk7KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWVycm5vID0gMDsKJiM0MzsJdmFsID0gc3RydG91bChidWYsICZhbXA7ZW5kLCAxMCk7CiYjNDM7CWlmIChlcnJubykKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWlmICgqZW5kID09ICYjMzk7XG4mIzM5OykKJiM0MzsJCWVuZCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmICgqZW5kICE9ICYjMzk7XDAmIzM5OykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkqbnVtID0gdmFsOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzIxXTsKJiM0MzsKJiM0MzsJc3ByaW50ZihidWYsICYjMzQ7JWx1JiMzNDssIG51bSk7CiYjNDM7CXJldHVybiB3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgJiM0MzsgMSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHdyaXRlX251bShwYXRoLCBudW0pOwomIzQzOwlyZXR1cm4gcmV0ID09IC1FSU5WQUwgPyAwIDogcmV0OwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmggYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjUwZGFhODJjMmIyYjQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oCkBAIC0wLDAgJiM0MzsxLDEzIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX18KJiM0MzsjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkZGVmLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwomIzQzO2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CiYjNDM7aW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSk7CiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7CiYjNDM7aW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTsKJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwppbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCkBAIC04LDEyICYjNDM7OCwxOCBAQAogI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwogI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogCi0jaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtmaWxlX3V0aWxzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBUSFBfU1lTRlMgJiMzNDsvc3lzL2tlcm5lbC9tbS90cmFuc3BhcmVudF9odWdlcGFnZS8mIzM0OwogI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNAomIzQzOwomIzQzOyNpZm5kZWYgQVJSQVlfU0laRQomIzQzOyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdOwogc3RhdGljIGludCBzZXR0aW5nc19pbmRleDsKIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNhdmVkX3NldHRpbmdzOwpAQCAtNDgsNiAmIzQzOzU0LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2htZW1fZW5hYmxlZF9zdHJpbmdzW10gPSB7CiAJTlVMTAogfTsKIAomIzQzO3N0YXRpYyB2b2lkIHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCByZXQpCiYjNDM7ewomIzQzOwlwcmludGYoJiMzNDsjICVzOiAlcyAoJWQpXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCksIC1yZXQpOwomIzQzO30KJiM0MzsKIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwpAQCAtNjEsOCAmIzQzOzcyLDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKQogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQogCi0JaWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpIHsKLQkJcGVycm9yKHBhdGgpOwomIzQzOwlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAl9CiAKQEAgLTEwMywxMiAmIzQzOzExNSwxNyBAQCB2b2lkIHRocF93cml0ZV9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKQogCQlwcmludGYoJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAl9Ci0Jd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpOwomIzQzOwlyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgJiM0MzsgMSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KIH0KIAogdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG51bTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFRIUF9TWVNGUyAmIzM0OyVzJiMzNDssIG5hbWUpOwpAQCAtMTE2LDcgJiM0MzsxMzMsMTMgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSkKIAkJcHJpbnRmKCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQotCXJldHVybiByZWFkX251bShwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0ocGF0aCwgJmFtcDtudW0pOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBudW07CiB9CiAKIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSkKQEAgLTEyOSw3ICYjNDM7MTUyLDExIEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSkKIAkJcHJpbnRmKCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQotCXdyaXRlX251bShwYXRoLCBudW0pOwomIzQzOwlyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQogfQogCiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKQpAQCAtMTU3LDggJiM0MzsxODQsMTUgQEAgdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncykKIAkJLm1heF9wdGVzX3NoYXJlZCA9IHRocF9yZWFkX251bSgmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkJiMzNDspLAogCQkucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bSgmIzM0O2todWdlcGFnZWQvcGFnZXNfdG9fc2NhbiYjMzQ7KSwKIAl9OwotCWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKQotCQlzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpOwomIzQzOwlpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkgewomIzQzOwkJaW50IHJldCA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCiYjNDM7CQkJCSAgICZhbXA7c2V0dGluZ3MtJmd0O3JlYWRfYWhlYWRfa2IpOwomIzQzOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7CiYjNDM7CQkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwkJfQomIzQzOwl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlJfT1JERVJTOyBpJiM0MzsmIzQzOykgewogCQlpZiAoISgoMSAmbHQ7Jmx0OyBpKSAmYW1wOyBvcmRlcnMpKSB7CkBAIC0yMDgsOCAmIzQzOzI0MiwxNSBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncykKIAl0aHBfd3JpdGVfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWQmIzM0Oywga2h1Z2VwYWdlZC0mZ3Q7bWF4X3B0ZXNfc2hhcmVkKTsKIAl0aHBfd3JpdGVfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9wYWdlc190b19zY2FuJiMzNDssIGtodWdlcGFnZWQtJmd0O3BhZ2VzX3RvX3NjYW4pOwogCi0JaWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pCi0JCXdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCBzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYik7CiYjNDM7CWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7CiYjNDM7CQlpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCiYjNDM7CQkJCSAgICBzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYik7CiYjNDM7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTsKJiM0MzsJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICghKCgxICZsdDsmbHQ7IGkpICZhbXA7IG9yZGVycykpCkBAIC0zMDcsOCAmIzQzOzM0OCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9zdXBwb3J0ZWRfb3JkZXJzKGJvb2wgaXNfc2htZW0pCiAJCX0KIAogCQlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JCWlmIChyZXQpCi0JCQlvcmRlcnMgfD0gMVVMICZsdDsmbHQ7IGk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJaWYgKHJldCAhPSAtRU5PRU5UKSB7CiYjNDM7CQkJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJCQl9CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvcmRlcnMgfD0gMVVMICZsdDsmbHQ7IGk7CiAJfQogCiAJcmV0dXJuIG9yZGVyczsKQEAgLTM4Miw4ICYjNDM7NDMwLDcgQEAgaW50IGRldGVjdF9odWdldGxiX3BhZ2Vfc2l6ZXModW5zaWduZWQgbG9uZyBzaXplc1tdLCBpbnQgbWF4KQogCQlpZiAoc3NjYW5mKGVudHJ5LSZndDtkX25hbWUsICYjMzQ7aHVnZXBhZ2VzLSV6dWtCJiMzNDssICZhbXA7a2IpICE9IDEpCiAJCQljb250aW51ZTsKIAkJc2l6ZXNbY291bnQmIzQzOyYjNDM7XSA9IGtiICogMTAyNDsKLQkJa3NmdF9wcmludF9tc2coJiMzNDtbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcbiYjMzQ7LAotCQkJICAgICAgIGtiKTsKJiM0MzsJCXByaW50ZigmIzM0OyMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXG4mIzM0Oywga2IpOwogCX0KIAljbG9zZWRpcihkaXIpOwogCXJldHVybiBjb3VudDsKQEAgLTQyNSwyOCAmIzQzOzQ3Miw0OSBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3N5c2ZzX3BhdGgoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLAogdW5zaWduZWQgbG9uZyBodWdldGxiX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yOwomIzQzOwlpbnQgcmV0OwogCiAJaHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgJiMzNDtucl9odWdlcGFnZXMmIzM0Oyk7CiAKLQlyZXR1cm4gcmVhZF9udW0ocGF0aCk7CiYjNDM7CXJldCA9IHJlYWRfbnVtKHBhdGgsICZhbXA7bnIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBucjsKIH0KIAogdm9pZCBodWdldGxiX3NldF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJaW50IHJldDsKIAogCWh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwogCi0Jd3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpOwomIzQzOwlyZXQgPSB3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KIH0KIAogdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKQogewogCWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnI7CiYjNDM7CWludCByZXQ7CiAKIAlodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCAmIzM0O2ZyZWVfaHVnZXBhZ2VzJiMzNDspOwogCi0JcmV0dXJuIHJlYWRfbnVtKHBhdGgpOwomIzQzOwlyZXQgPSByZWFkX251bShwYXRoLCAmYW1wO25yKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbnI7CiB9CiAKIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpCkBAIC01MDIsNyAmIzQzOzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sCiAJCXJldHVybiAwOwogCiAJaWYgKG5yX2VuYWJsZWQgJmd0OyBtYXgpIHsKLQkJa3NmdF9wcmludF9tc2coJiMzNDtkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXG4mIzM0OywgbnJfZW5hYmxlZCwgbWF4KTsKJiM0MzsJCXByaW50ZigmIzM0OyMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxuJiMzNDssCiYjNDM7CQkgICAgICAgbnJfZW5hYmxlZCwgbWF4KTsKIAkJbnJfZW5hYmxlZCA9IG1heDsKIAl9CiAKQEAgLTU3NCw4ICYjNDM7NjQzLDEwIEBAIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0KHZvaWQpCiAKIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKQogewomIzQzOwkodm9pZClzaWc7CiYjNDM7CiAJLyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqLwotCWV4aXQoS1NGVF9GQUlMKTsKJiM0MzsJZXhpdChFWElUX0ZBSUxVUkUpOwogfQogCiB2b2lkIGh1Z2VwYWdlX3NhdmVfc2V0dGluZ3MoYm9vbCB0aHAsIGJvb2wgaHVnZXRsYikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaApyZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmgKZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlCmluZGV4IDE0NDZhNjU5ZTU0MDguLjE1NGQ3NDBiZTAyZTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vLmdpdGlnbm9yZQpAQCAtMywzICYjNDM7Myw0IEBAIHNsYWJpbmZvCiBwYWdlLXR5cGVzCiBwYWdlX293bmVyX3NvcnQKIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7Z3VwX2JlbmNoCmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlCmluZGV4IDg1ODE4NmE2ZWVmZGIuLmYyMGEzMmQ4Y2MyMmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL01ha2VmaWxlCkBAIC0zLDEzICYjNDM7MywxNSBAQAogIwogaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGUKIAotQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIKJiM0MztCVUlMRF9UQVJHRVRTICYjNDM7PSB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2gKIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwcwogCiBMSUJfRElSID0gLi4vbGliL2FwaQogTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmEKJiM0MztHVVBfQkVOQ0hfT0JKUyA9IGd1cF9iZW5jaC5jIC4uL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIC4uL2xpYi9tbS9maWxlX3V0aWxzLmMKIAotQ0ZMQUdTICYjNDM7PSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtcHRocmVhZAomIzQzO0NGTEFHUyAmIzQzOz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLUkuLi8uLiAtcHRocmVhZAogTERGTEFHUyAmIzQzOz0gJChMSUJTKSAtcHRocmVhZAogCiBhbGw6ICQoQlVJTERfVEFSR0VUUykKQEAgLTIyLDggJiM0MzsyNCwxMSBAQCAkKExJQlMpOgogJTogJS5jCiAJJChDQykgJChDRkxBR1MpIC1vICRAICQmbHQ7ICQoTERGTEFHUykKIAomIzQzO2d1cF9iZW5jaDogJChHVVBfQkVOQ0hfT0JKUykgJChMSUJTKQomIzQzOwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChHVVBfQkVOQ0hfT0JKUykgJChMREZMQUdTKQomIzQzOwogY2xlYW46Ci0JJChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MzsJJChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoCiAJbWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuCiAKIHNiaW5kaXIgPz0gL3Vzci9zYmluCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmMKc2ltaWxhcml0eSBpbmRleCA1MCUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYwpyZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmMKaW5kZXggM2Y4NDFhOTZmODcwNi4uNzUzNjliMjY3NGE5NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9ndXBfYmVuY2guYwpAQCAtMTAsMTEgJiM0MzsxMCwxMCBAQAogI2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwotI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O21tL2d1cF90ZXN0LmgmZ3Q7Ci0jaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKICNkZWZpbmUgTUIgKDFVTCAmbHQ7Jmx0OyAyMCkKIApAQCAtMzgsMTIgJiM0MzszNyw2IEBAIHN0YXRpYyBjaGFyICpjbWRfdG9fc3RyKHVuc2lnbmVkIGxvbmcgY21kKQogCQlyZXR1cm4gJiMzNDtQSU5fRkFTVF9CRU5DSE1BUksmIzM0OzsKIAljYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6CiAJCXJldHVybiAmIzM0O1BJTl9MT05HVEVSTV9CRU5DSE1BUksmIzM0OzsKLQljYXNlIEdVUF9CQVNJQ19URVNUOgotCQlyZXR1cm4gJiMzNDtHVVBfQkFTSUNfVEVTVCYjMzQ7OwotCWNhc2UgUElOX0JBU0lDX1RFU1Q6Ci0JCXJldHVybiAmIzM0O1BJTl9CQVNJQ19URVNUJiMzNDs7Ci0JY2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDoKLQkJcmV0dXJuICYjMzQ7RFVNUF9VU0VSX1BBR0VTX1RFU1QmIzM0OzsKIAl9CiAJcmV0dXJuICYjMzQ7VW5rbm93biBjb21tYW5kJiMzNDs7CiB9CkBAIC01MywzOSAmIzQzOzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSkKIAlzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0gKihzdHJ1Y3QgZ3VwX3Rlc3QgKilkYXRhOwogCWludCBpLCBzdGF0dXM7CiAKLQkvKiBPbmx5IHJlcG9ydCB0aW1pbmcgaW5mb3JtYXRpb24gb24gdGhlICpfQkVOQ0hNQVJLIGNvbW1hbmRzOiAqLwotCWlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8Ci0JICAgICAoY21kID09IFBJTl9MT05HVEVSTV9CRU5DSE1BUkspKSB7Ci0JCWZvciAoaSA9IDA7IGkgJmx0OyByZXBlYXRzOyBpJiM0MzsmIzQzOykgewotCQkJZ3VwLnNpemUgPSBzaXplOwotCQkJc3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsICZhbXA7Z3VwKTsKLQkJCWlmIChzdGF0dXMpCi0JCQkJYnJlYWs7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyByZXBlYXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZ3VwLnNpemUgPSBzaXplOwomIzQzOwkJc3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsICZhbXA7Z3VwKTsKJiM0MzsJCWlmIChzdGF0dXMpIHsKJiM0MzsJCQlpbnQgZXJyID0gZXJybm87CiAKIAkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO3ByaW50X211dGV4KTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7JXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzJiMzNDssCi0JCQkJICAgICAgIGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLAotCQkJCSAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpOwotCQkJaWYgKGd1cC5zaXplICE9IHNpemUpCi0JCQkJa3NmdF9wcmludF9tc2coJiMzNDssIHRydW5jYXRlZCAoc2l6ZTogJWxsZCkmIzM0OywgZ3VwLnNpemUpOwotCQkJa3NmdF9wcmludF9tc2coJiMzNDtcbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDslcyBpb2N0bCBmYWlsZWQ6ICVzXG4mIzM0OywgY21kX3RvX3N0cihjbWQpLAomIzQzOwkJCQlzdHJlcnJvcihlcnIpKTsKIAkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7cHJpbnRfbXV0ZXgpOwomIzQzOwkJCXJldHVybiBkYXRhOwogCQl9Ci0JfSBlbHNlIHsKLQkJZ3VwLnNpemUgPSBzaXplOwotCQlzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgJmFtcDtndXApOwotCQlpZiAoc3RhdHVzKQotCQkJZ290byByZXR1cm5fOwogCiAJCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO3ByaW50X211dGV4KTsKLQkJa3NmdF9wcmludF9tc2coJiMzNDslczogZG9uZVxuJiMzNDssIGNtZF90b19zdHIoY21kKSk7CiYjNDM7CQlwcmludGYoJiMzNDslczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXMmIzM0OywKJiM0MzsJCQljbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYywKJiM0MzsJCQlndXAucHV0X2RlbHRhX3VzZWMpOwogCQlpZiAoZ3VwLnNpemUgIT0gc2l6ZSkKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7VHJ1bmNhdGVkIChzaXplOiAlbGxkKVxuJiMzNDssIGd1cC5zaXplKTsKJiM0MzsJCQlwcmludGYoJiMzNDssIHRydW5jYXRlZCAoc2l6ZTogJWxsZCkmIzM0OywgZ3VwLnNpemUpOwomIzQzOwkJcHJpbnRmKCYjMzQ7XG4mIzM0Oyk7CiAJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7cHJpbnRfbXV0ZXgpOwogCX0KIAotcmV0dXJuXzoKLQlrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsICYjMzQ7aW9jdGwgc3RhdHVzICVkXG4mIzM0Oywgc3RhdHVzKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtOTMsMzggJiM0Mzs3NiwyMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9OwogCWludCBmaWxlZCwgaSwgb3B0LCBucl9wYWdlcyA9IDEsIHRocCA9IC0xLCB3cml0ZSA9IDEsIG50aHJlYWRzID0gMSwgcmV0OwotCWludCBmbGFncyA9IE1BUF9QUklWQVRFOwomIzQzOwlpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURSwgc3RhcnRlZF90aHJlYWRzID0gMDsKIAljaGFyICpmaWxlID0gJiMzNDsvZGV2L3plcm8mIzM0OzsKLQlib29sIGh1Z2V0bGIgPSBmYWxzZTsKJiM0MzsJYm9vbCBodWdldGxiID0gZmFsc2UsIHRocmVhZF9lcnJvciA9IGZhbHNlOwomIzQzOwl2b2lkICp0aHJlYWRfcmVzdWx0OwogCXB0aHJlYWRfdCAqdGlkOwogCWNoYXIgKnA7CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6ZjphYmNqOnRUTFV1d1dTSHB6JiMzNDspKSAhPSAtMSkgewomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6Zjphajp0VEx1d1dTSCYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAmIzM5O2EmIzM5OzoKIAkJCWNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSzsKIAkJCWJyZWFrOwotCQljYXNlICYjMzk7YiYjMzk7OgotCQkJY21kID0gUElOX0JBU0lDX1RFU1Q7Ci0JCQlicmVhazsKIAkJY2FzZSAmIzM5O0wmIzM5OzoKIAkJCWNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O2MmIzM5OzoKLQkJCWNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUOwotCQkJLyoKLQkJCSAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5Ci0JCQkgKiB1c2VyJiMzOTtzIG5vbi1vcHRpb24gYXJndW1lbnRzLgotCQkJICoKLQkJCSAqIC53aGljaF9wYWdlcyBpcyB6ZXJvLWJhc2VkLCBzbyB0aGF0IHplcm8gY2FuIG1lYW4gJiMzNDtkbwotCQkJICogbm90aGluZyYjMzQ7LgotCQkJICovCi0JCQlndXAud2hpY2hfcGFnZXNbMF0gPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtwJiMzOTs6Ci0JCQkvKiB3b3JrcyBvbmx5IHdpdGggRFVNUF9VU0VSX1BBR0VTX1RFU1QgKi8KLQkJCWd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOOwotCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtGJiMzOTs6CiAJCQkvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqLwogCQkJZ3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApOwpAQCAtMTQxLDcgJiM0MzsxMDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWNhc2UgJiMzOTtuJiMzOTs6CiAJCQlucl9wYWdlcyA9IGF0b2kob3B0YXJnKTsKIAkJCWlmIChucl9wYWdlcyAmbHQ7IDApCi0JCQkJbnJfcGFnZXMgPSBzaXplIC8gcHNpemUoKTsKJiM0MzsJCQkJbnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTsKIAkJCWJyZWFrOwogCQljYXNlICYjMzk7dCYjMzk7OgogCQkJdGhwID0gMTsKQEAgLTE0OSw5ICYjNDM7MTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQljYXNlICYjMzk7VCYjMzk7OgogCQkJdGhwID0gMDsKIAkJCWJyZWFrOwotCQljYXNlICYjMzk7VSYjMzk7OgotCQkJY21kID0gR1VQX0JBU0lDX1RFU1Q7Ci0JCQlicmVhazsKIAkJY2FzZSAmIzM5O3UmIzM5OzoKIAkJCWNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSzsKIAkJCWJyZWFrOwpAQCAtMTczLDUyICYjNDM7MTM2LDQxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWh1Z2V0bGIgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtXcm9uZyBhcmd1bWVudFxuJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dyb25nIGFyZ3VtZW50XG4mIzM0Oyk7CiYjNDM7CQkJZXhpdCgxKTsKIAkJfQogCX0KIAotCWlmIChvcHRpbmQgJmx0OyBhcmdjKSB7Ci0JCWludCBleHRyYV9hcmdfY291bnQgPSAwOwotCQkvKgotCQkgKiBGb3IgZXhhbXBsZToKLQkJICoKLQkJICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDEKLQkJICoKLQkJICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5NwotCQkgKi8KLQotCQl3aGlsZSAoKG9wdGluZCAmbHQ7IGFyZ2MpICZhbXA7JmFtcDsKLQkJICAgICAgIChleHRyYV9hcmdfY291bnQgJmx0OyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHsKLQkJCS8qCi0JCQkgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhbgotCQkJICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0JCQkgKi8KLQkJCWxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICYjNDM7IDE7Ci0KLQkJCWd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDsKLQkJCWV4dHJhX2FyZ19jb3VudCYjNDM7JiM0Mzs7Ci0JCQlvcHRpbmQmIzQzOyYjNDM7OwotCQl9CiYjNDM7CWlmIChvcHRpbmQgIT0gYXJnYykgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7VW5leHBlY3RlZCBhcmd1bWVudCAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBhcmd2W29wdGluZF0pOwomIzQzOwkJZXhpdCgxKTsKIAl9CiAKLQlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlpZiAoZ2V0dWlkKCkpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KIAogCWlmIChodWdldGxiKSB7CiAJCXVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTsKIAotCQlpZiAoIWhwX3NpemUpCi0JCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O0h1Z2VUTEIgaXMgdW5hdmFpbGFibGVcbiYjMzQ7KTsKJiM0MzsJCWlmICghaHBfc2l6ZSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O0NvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gMTsKJiM0MzsJCX0KIAogCQlzaXplID0gKHNpemUgJiM0MzsgaHBfc2l6ZSAtIDEpICZhbXA7IH4oaHBfc2l6ZSAtIDEpOwotCQlpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpCi0JCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwkJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7Tm90IGVub3VnaCBodWdlIHBhZ2VzXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CQl9CiAJfQogCi0Ja3NmdF9zZXRfcGxhbihudGhyZWFkcyk7Ci0KIAlmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpOwotCWlmIChmaWxlZCAmbHQ7IDApCi0JCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xuJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CWlmIChmaWxlZCAmbHQ7IDApIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xuJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQogCiAJZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXM7CiAJaWYgKHdyaXRlKQpAQCAtMjI3LDI2ICYjNDM7MTc5LDI0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7CiAJaWYgKGd1cF9mZCA9PSAtMSkgewogCQlzd2l0Y2ggKGVycm5vKSB7Ci0JCWNhc2UgRUFDQ0VTOgotCQkJaWYgKGdldHVpZCgpKQotCQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxuJiMzNDspOwotCQkJYnJlYWs7CiAJCWNhc2UgRU5PRU5UOgogCQkJaWYgKG9wZW5kaXIoJiMzNDsvc3lzL2tlcm5lbC9kZWJ1ZyYjMzQ7KSA9PSBOVUxMKQotCQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7bW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xuJiMzNDspOwotCQkJa3NmdF9wcmludF9tc2coJiMzNDtjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXG4mIzM0Oyk7CiYjNDM7CQkJCWZwcmludGYoc3RkZXJyLCAmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXG4mIzM0Oyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtmYWlsZWQgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBHVVBfVEVTVF9GSUxFLAomIzQzOwkJCQlzdHJlcnJvcihlcnJubykpOwogCQkJYnJlYWs7CiAJCX0KLQkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxuJiMzNDspOwotCQlrc2Z0X2V4aXRfcGFzcygpOwomIzQzOwkJZ290byBlcnJfY2xvc2VfZmlsZWQ7CiAJfQogCiAJcCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTsKLQlpZiAocCA9PSBNQVBfRkFJTEVEKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDttbWFwOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CWlmIChwID09IE1BUF9GQUlMRUQpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O21tYXA6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCWdvdG8gZXJyX2Nsb3NlX2d1cF9mZDsKJiM0MzsJfQogCWd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDsKIAogCWlmICh0aHAgPT0gMSkKQEAgLTI1NSwyMSAmIzQzOzIwNSw0OSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCW1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTsKIAogCS8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqLwotCWZvciAoOyAodW5zaWduZWQgbG9uZylwICZsdDsgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gcHNpemUoKSkKJiM0MzsJZm9yICg7ICh1bnNpZ25lZCBsb25nKXAgJmx0OyBndXAuYWRkciAmIzQzOyBzaXplOyBwICYjNDM7PSBnZXRwYWdlc2l6ZSgpKQogCQlwWzBdID0gMDsKIAogCXRpZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG50aHJlYWRzKTsKLQlhc3NlcnQodGlkKTsKJiM0MzsJaWYgKCF0aWQpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSAlZCB0aHJlYWRzOiAlc1xuJiMzNDssCiYjNDM7CQkJbnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlnb3RvIGVycl91bm1hcDsKJiM0MzsJfQomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBudGhyZWFkczsgaSYjNDM7JiM0MzspIHsKIAkJcmV0ID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsICZhbXA7Z3VwKTsKLQkJYXNzZXJ0KHJldCA9PSAwKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXG4mIzM0Oywgc3RyZXJyb3IocmV0KSk7CiYjNDM7CQkJdGhyZWFkX2Vycm9yID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJCXN0YXJ0ZWRfdGhyZWFkcyYjNDM7JiM0Mzs7CiAJfQotCWZvciAoaSA9IDA7IGkgJmx0OyBudGhyZWFkczsgaSYjNDM7JiM0MzspIHsKLQkJcmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7Ci0JCWFzc2VydChyZXQgPT0gMCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBzdGFydGVkX3RocmVhZHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCAmYW1wO3RocmVhZF9yZXN1bHQpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O3B0aHJlYWRfam9pbiBmYWlsZWQ6ICVzXG4mIzM0Oywgc3RyZXJyb3IocmV0KSk7CiYjNDM7CQkJdGhyZWFkX2Vycm9yID0gdHJ1ZTsKJiM0MzsJCX0gZWxzZSBpZiAodGhyZWFkX3Jlc3VsdCkKJiM0MzsJCQl0aHJlYWRfZXJyb3IgPSB0cnVlOwogCX0KIAogCWZyZWUodGlkKTsKIAotCWtzZnRfZXhpdF9wYXNzKCk7CiYjNDM7CWlmICh0aHJlYWRfZXJyb3IpCiYjNDM7CQlnb3RvIGVycl91bm1hcDsKJiM0MzsKJiM0MzsJbXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpOwomIzQzOwljbG9zZShndXBfZmQpOwomIzQzOwljbG9zZShmaWxlZCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl91bm1hcDoKJiM0MzsJbXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpOwomIzQzO2Vycl9jbG9zZV9ndXBfZmQ6CiYjNDM7CWNsb3NlKGd1cF9mZCk7CiYjNDM7ZXJyX2Nsb3NlX2ZpbGVkOgomIzQzOwljbG9zZShmaWxlZCk7CiYjNDM7CXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCAyZDUzNjYxOTZlMzA5Li45YzAzNjI0ZmQyOTM2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQpAQCAtMzcsNyAmIzQzOzM3LDggQEAgZW5kaWYKICMgTERMSUJTLgogTUFLRUZMQUdTICYjNDM7PSAtLW5vLWJ1aWx0aW4tcnVsZXMKIAotQ0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUykKJiM0MztDRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAtSSAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYgomIzQzO0NGTEFHUyAmIzQzOz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUykKIENGTEFHUyAmIzQzOz0gLVd1bnJlYWNoYWJsZS1jb2RlCiBMRExJQlMgPSAtbHJ0IC1scHRocmVhZCAtbG0KIApAQCAtNTcsOCAmIzQzOzU4LDggQEAgZW5kaWYKIAogVEVTVF9HRU5fRklMRVMgPSBjb3cKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBjb21wYWN0aW9uX3Rlc3QKJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwX2xvbmd0ZXJtCi1URVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwX3Rlc3QKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBobW0tdGVzdHMKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLW1hZHZpc2UKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLW1tYXAKQEAgLTE4Nyw4ICYjNDM7MTg4LDEwIEBAIFRFU1RfRklMRVMgJiM0Mzs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoCiAKIGluY2x1ZGUgLi4vbGliLm1rCiAKLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuYwotJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jCiYjNDM7JChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFwKJiM0MzsJCSAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwomIzQzOyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcCiYjNDM7CQkgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMKIAogJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jCiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jCkBAIC0yMTcsNyAmIzQzOzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgJiM0Mzs9IC1tMzIgLW14c2F2ZQogJChCSU5BUklFU18zMik6IExETElCUyAmIzQzOz0gLWxydCAtbGRsIC1sbQogJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmMKIAkkKGNhbGwgbXNnLENDLCwkQCkKLQkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRACiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQAogJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSkKIGVuZGlmCiAKQEAgLTIyNiw3ICYjNDM7MjI5LDcgQEAgJChCSU5BUklFU182NCk6IENGTEFHUyAmIzQzOz0gLW02NCAtbXhzYXZlCiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwKICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jCiAJJChjYWxsIG1zZyxDQywsJEApCi0JJChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQAomIzQzOwkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEAKICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS02NCwkKHQpKSkpCiBlbmRpZgogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jCmluZGV4IDMwZDRhY2U3MTU1YWUuLmIzZjUzNzcxMTljYjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jCkBAIC0xNSw5ICYjNDM7MTUsOSBAQAogI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBNQVBfU0laRV9NQgkxMDAKICNkZWZpbmUgTUFQX1NJWkUJKE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jCmluZGV4IDhhYTUyNDlkOWJlZjYuLjMyNjRhODI4NTc1YmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jCkBAIC0yOSw3ICYjNDM7MjksNiBAQAogI2luY2x1ZGUgJiMzNDsuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogc3RhdGljIHNpemVfdCBwYWdlc2l6ZTsKIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKaW5kZXggNDViODRmN2IzNjRlMC4uMjg5YWVkMmViYWMwMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMKQEAgLTI1LDcgJiM0MzsyNSw2IEBACiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHVpbnQ2NF90IHBhZ2Vfc2l6ZTsKIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwppbmRleCA1YzhlYzNjYTc1ZDdkLi5hZjVjZDliMzAzMzk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCkBAIC0yMSw3ICYjNDM7MjEsNiBAQAogI2luY2x1ZGUgJmx0O3N5cy91aW8uaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNpbmNsdWRlICYjMzQ7Li4vcGlkZmQvcGlkZmQuaCYjMzQ7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNGM5ZTE0ZGJiNDM0YQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jCkBAIC0wLDAgJiM0MzsxLDMyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjQKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2RpcmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vZ3VwX3Rlc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIE1CICgxVUwgJmx0OyZsdDsgMjApCiYjNDM7CiYjNDM7LyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovCiYjNDM7I2RlZmluZSBGT0xMX1dSSVRFCTB4MDEJLyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovCiYjNDM7CiYjNDM7LyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovCiYjNDM7c3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9OwomIzQzOwomIzQzOyNkZWZpbmUgR1VQX1RFU1RfRklMRSAmIzM0Oy9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0JiMzNDsKJiM0MzsjZGVmaW5lIE5SX0hVR0VfUEFHRVMgMTI4CiYjNDM7CiYjNDM7SFVHRVRMQl9TRVRVUF9ERUZBVUxUX1BBR0VTKE5SX0hVR0VfUEFHRVMpCiYjNDM7CiYjNDM7RklYVFVSRShndXBfdGVzdCkKJiM0Mzt7CiYjNDM7CWludCBndXBfZmQ7CiYjNDM7CWNoYXIgKmFkZHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZTsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVChndXBfdGVzdCkKJiM0Mzt7CiYjNDM7CWJvb2wgdGhwOwomIzQzOwlib29sIGh1Z2V0bGI7CiYjNDM7CWJvb2wgd3JpdGU7CiYjNDM7CWJvb2wgc2hhcmVkOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZSkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV9odWdldGxiKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IHRydWUsCiYjNDM7CS53cml0ZSA9IHRydWUsCiYjNDM7CS5zaGFyZWQgPSBmYWxzZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF9odWdldGxiKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IHRydWUsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGUpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IHRydWUsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWQpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF90aHApCiYjNDM7ewomIzQzOwkudGhwID0gdHJ1ZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF9odWdldGxiKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IHRydWUsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoZ3VwX3Rlc3QpCiYjNDM7ewomIzQzOwlpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFOwomIzQzOwlpbnQgemVyb19mZDsKJiM0MzsJY2hhciAqcDsKJiM0MzsKJiM0MzsJc2VsZi0mZ3Q7c2l6ZSA9IDEyOCAqIE1COwomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7aHVnZXRsYikgewomIzQzOwkJdW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpOwomIzQzOwomIzQzOwkJaWYgKCFocF9zaXplKQomIzQzOwkJCVNLSVAocmV0dXJuLCAmIzM0O0h1Z2VUTEIgbm90IGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwomIzQzOwkJaWYgKGh1Z2V0bGJfZnJlZV9kZWZhdWx0X3BhZ2VzKCkgJmx0OyBOUl9IVUdFX1BBR0VTKQomIzQzOwkJCVNLSVAocmV0dXJuLCAmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwomIzQzOwkJc2VsZi0mZ3Q7c2l6ZSA9IE5SX0hVR0VfUEFHRVMgKiBocF9zaXplOwomIzQzOwkJbW1hcF9mbGFncyB8PSAoTUFQX0hVR0VUTEIgfCBNQVBfQU5PTllNT1VTKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7c2hhcmVkKQomIzQzOwkJbW1hcF9mbGFncyA9IChtbWFwX2ZsYWdzICZhbXA7IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEOwomIzQzOwomIzQzOwkvKiB6ZXJvX2ZkIGhhcyB0byBiZSAmZ3Q7PSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovCiYjNDM7CXplcm9fZmQgPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTsKJiM0MzsKJiM0MzsJLyogZ3VwX2ZkIGhhcyB0byBiZSAmZ3Q7PSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovCiYjNDM7CXNlbGYtJmd0O2d1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTsKJiM0MzsJQVNTRVJUX0dFKHNlbGYtJmd0O2d1cF9mZCwgMCk7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O2FkZHIgPSBtbWFwKE5VTEwsIHNlbGYtJmd0O3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkJICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX05FKHNlbGYtJmd0O2FkZHIsIE1BUF9GQUlMRUQpIHsKJiM0MzsJCWludCBlcnIgPSBlcnJubzsKJiM0MzsKJiM0MzsJCWNsb3NlKHplcm9fZmQpOwomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7Z3VwX2ZkKTsKJiM0MzsJCVRIX0xPRygmIzM0O21tYXAgZmFpbGVkOiAlcyYjMzQ7LCBzdHJlcnJvcihlcnIpKTsKJiM0MzsJfQomIzQzOwljbG9zZSh6ZXJvX2ZkKTsKJiM0MzsKJiM0MzsJaWYgKHZhcmlhbnQtJmd0O3RocCkKJiM0MzsJCW1hZHZpc2Uoc2VsZi0mZ3Q7YWRkciwgc2VsZi0mZ3Q7c2l6ZSwgTUFEVl9IVUdFUEFHRSk7CiYjNDM7CWVsc2UgaWYgKCF2YXJpYW50LSZndDtodWdldGxiKQomIzQzOwkJbWFkdmlzZShzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplLCBNQURWX05PSFVHRVBBR0UpOwomIzQzOwomIzQzOwlmb3IgKHAgPSBzZWxmLSZndDthZGRyOyAodW5zaWduZWQgbG9uZylwICZsdDsgKHVuc2lnbmVkIGxvbmcpc2VsZi0mZ3Q7YWRkcgomIzQzOwkJCSYjNDM7IHNlbGYtJmd0O3NpemU7IHAgJiM0Mzs9IHBzaXplKCkpCiYjNDM7CQlwWzBdID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihndXBfdGVzdCkKJiM0Mzt7CiYjNDM7CW11bm1hcChzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplKTsKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7Z3VwX2ZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX2d1cF9jbWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLAomIzQzOwkJCSBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLAomIzQzOwkJCSBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LAomIzQzOwkJCSB1bnNpZ25lZCBsb25nIGNvbW1hbmQsCiYjNDM7CQkJIHVuc2lnbmVkIGludCB0ZXN0X2ZsYWdzLAomIzQzOwkJCSB1bnNpZ25lZCBpbnQgd2hpY2hfcGFnZSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsKJiM0MzsJCQkuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtJmd0O2FkZHIsCiYjNDM7CQkJLnNpemUgPSBzZWxmLSZndDtzaXplLAomIzQzOwkJCS5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gJmx0OyAwID8KJiM0MzsJCQkJc2VsZi0mZ3Q7c2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLAomIzQzOwkJCS5ndXBfZmxhZ3MgPSB2YXJpYW50LSZndDt3cml0ZSA/IEZPTExfV1JJVEUgOiAwLAomIzQzOwkJCS50ZXN0X2ZsYWdzID0gdGVzdF9mbGFncywKJiM0MzsJCQkud2hpY2hfcGFnZXMgPSB7IHdoaWNoX3BhZ2UgfSwKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQlUSF9MT0coJiMzNDtucl9wYWdlc19wZXJfY2FsbD0ldSYjMzQ7LCBndXAubnJfcGFnZXNfcGVyX2NhbGwpOwomIzQzOwkJQVNTRVJUX0VRKGlvY3RsKHNlbGYtJmd0O2d1cF9mZCwgY29tbWFuZCwgJmFtcDtndXApLCAwKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzKQomIzQzO3sKJiM0MzsJcnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfQkFTSUNfVEVTVCwgMCwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXMpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9CQVNJQ19URVNULCAwLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBkdW1wX3VzZXJfcGFnZXNfd2l0aF9nZXQpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIERVTVBfVVNFUl9QQUdFU19URVNULCAwLCAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBkdW1wX3VzZXJfcGFnZXNfd2l0aF9waW4pCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIERVTVBfVVNFUl9QQUdFU19URVNULAomIzQzOwkJICAgIEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOLCAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlc19mYXN0KQomIzQzO3sKJiM0MzsJcnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfRkFTVF9CRU5DSE1BUkssIDAsIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2Zhc3QpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9GQVNUX0JFTkNITUFSSywgMCwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9MT05HVEVSTV9CRU5DSE1BUkssIDAsIDApOwomIzQzO30KJiM0MzsKJiM0MztURVNUKGR1bXBfdXNlcl9wYWdlc19zcGFyc2VfaW5kaWNlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7CiYjNDM7CWludCB6ZXJvX2ZkLCBndXBfZmQ7CiYjNDM7CWNoYXIgKmFkZHIsICpwOwomIzQzOwomIzQzOwl6ZXJvX2ZkID0gb3BlbigmIzM0Oy9kZXYvemVybyYjMzQ7LCBPX1JEV1IpOwomIzQzOwlBU1NFUlRfR0UoemVyb19mZCwgMCk7CiYjNDM7CiYjNDM7CWd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTsKJiM0MzsJQVNTRVJUX0dFKGd1cF9mZCwgMCk7CiYjNDM7CiYjNDM7CWFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFLCB6ZXJvX2ZkLCAwKTsKJiM0MzsJY2xvc2UoemVyb19mZCk7CiYjNDM7CUFTU0VSVF9ORShhZGRyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJbWFkdmlzZShhZGRyLCBzaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsKJiM0MzsJZm9yIChwID0gYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCAmbHQ7ICh1bnNpZ25lZCBsb25nKWFkZHIgJiM0Mzsgc2l6ZTsKJiM0MzsJICAgICBwICYjNDM7PSBwc2l6ZSgpKQomIzQzOwkJcFswXSA9IDA7CiYjNDM7CiYjNDM7CWd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKJiM0MzsJZ3VwLnNpemUgPSBzaXplOwomIzQzOwlndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBzaXplIC8gcHNpemUoKTsKJiM0MzsJZ3VwLmd1cF9mbGFncyA9IEZPTExfV1JJVEU7CiYjNDM7CWd1cC53aGljaF9wYWdlc1swXSA9IDE7CiYjNDM7CWd1cC53aGljaF9wYWdlc1sxXSA9IDIwOwomIzQzOwlndXAud2hpY2hfcGFnZXNbMl0gPSAweDEwMDE7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShpb2N0bChndXBfZmQsIERVTVBfVVNFUl9QQUdFU19URVNULCAmYW1wO2d1cCksIDApOwomIzQzOwomIzQzOwltdW5tYXAoYWRkciwgc2l6ZSk7CiYjNDM7CWNsb3NlKGd1cF9mZCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJY2hhciAqZmlsZSA9ICYjMzQ7L2Rldi96ZXJvJiMzNDs7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJfQomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgPT0gLTEpIHsKJiM0MzsJCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CQlpZiAoZXJybm8gPT0gRUFDQ0VTKQomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxuJiMzNDspOwomIzQzOwkJaWYgKGVycm5vID09IEVOT0VOVCkgewomIzQzOwkJCURJUiAqZGVidWdmcyA9IG9wZW5kaXIoJiMzNDsvc3lzL2tlcm5lbC9kZWJ1ZyYjMzQ7KTsKJiM0MzsKJiM0MzsJCQlpZiAoIWRlYnVnZnMpIHsKJiM0MzsJCQkJa3NmdF9leGl0X3NraXAoJiMzNDtNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXG4mIzM0Oyk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJY2xvc2VkaXIoZGVidWdmcyk7CiYjNDM7CQkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7Q2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcbiYjMzQ7KTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwl9CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwppbmRleCA1MTBkZTkzYmU2ODE0Li5jOWQ4YjQ0OTEyNjM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7CiBzdGF0aWMgaW50IG5yX2h1Z2V0bGJzaXplczsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKQEAgLTEwLDkgJiM0MzsxMCw2IEBACiAgKiBidWdzLgogICovCiAKLSNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwotCiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CkBAIC0zMyw2ICYjNDM7MzAsOSBAQAogI2luY2x1ZGUgJmx0O3N5cy9ldmVudGZkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmQuaCZndDsKICNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKIAogLyoKICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24mIzM5O3QgZXhwb3J0ZWQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKaW5kZXggNTU1YjRiM2QxNDMwNy4uNTdjZjc5MGNhNDc4ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBNSU5fRlJFRV9QQUdFUwkyMAogI2RlZmluZSBOUl9IVUdFX1BBR0VTCTEwCS8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCmluZGV4IDBmMmFhZDFiN2RiZDYuLmE0NThiZWNmNTgzMjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCkBAIC0xOCw3ICYjNDM7MTgsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWZkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpCiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYwppbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMKQEAgLTI2LDcgJiM0MzsyNiw2IEBACiAjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIERFRkFVTFRfTEVOR1RIX01CIDEwVUwKICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jCmluZGV4IDNmZjdmMDYyYjdlYjQuLmY0NTE0ZGE0OWUxZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYwppbmRleCBiYzIwMmU0ZWQyYmRhLi4yMDg2NGU3ZDRlMGM3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMKQEAgLTIxLDkgJiM0MzsyMSw5IEBACiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3RhdGZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORQogI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jCmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uYwpAQCAtMjAsNyAmIzQzOzIwLDYgQEAKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaWZuZGVmIFNUQVRYX0RJT0FMSUdOCiAjZGVmaW5lIFNUQVRYX0RJT0FMSUdOCQkweDAwMDAyMDAwVQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwppbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwpAQCAtMTAsNyAmIzQzOzEwLDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMKaW5kZXggZjk0NTQ5ZWZjYzZmZi4uMjUzMmE0MmI5OGRmZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBJTkxPT1BfSVRFUiAxMDAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDBkNmM3MWVkMmZhZTMuLmJhMjFmNTg1MjVlNDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKQEAgLTIyLDcgJiM0MzsyMiw2IEBACiAjaW5jbHVkZSAmIzM0O2xpbnV4L21hZ2ljLmgmIzM0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMICZsdDsmbHQ7IDMwKSkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplOwpAQCAtMTQ0LDYgJiM0MzsxNDMsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCWNoYXIgYnVmWzEgJmx0OyZsdDsgMTBdOwogCWNoYXIgcGF0aFtQQVRIX01BWF07CiAJY2hhciAqc3RyLCAqZW5kOwomIzQzOwlpbnQgcmV0OwogCiAJZmluZm8uZGlyID0gZGlyOwogCXN0YXQoZmluZm8uZGlyLCAmYW1wO3BhdGhfc3RhdCk7CkBAIC0xNjMsOCAmIzQzOzE2Myw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpCiAJCSAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKQogCSAgICAmZ3Q7PSBzaXplb2YocGF0aCkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKLQlpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkKLQkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7cmVhZF9maWxlKHVldmVudCkmIzM0Oyk7CiYjNDM7CXJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O3JlYWRfZmlsZSglcyk6ICVzXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCkpOwogCWlmIChzdHJzdHIoYnVmLCAmIzM0O0RFVlRZUEU9ZGlzayYjMzQ7KSkgewogCQkvKiBGb3VuZCBpdCAqLwogCQlpZiAoc25wcmludGYoZmluZm8uZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwKQEAgLTM0NSw3ICYjNDM7MzQ2LDcgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cCkKIHsKIAljb25zdCBpbnQgb3Blbl9vcHQgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IE9fUkRPTkxZIDogT19SRFdSOwogCWNvbnN0IGludCBtbWFwX3Byb3QgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IFBST1RfUkVBRCA6IChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLQlpbnQgZmQ7CiYjNDM7CWludCBmZCwgcmV0OwogCXZvaWQgKnA7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCkBAIC0zODksNyAmIzQzOzM5MCwxMSBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttbWFwKCkmIzM0Oyk7CiAKIAkvKiBEcm9wIHBhZ2UgY2FjaGUgKi8KLQl3cml0ZV9maWxlKCYjMzQ7L3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzJiMzNDssICYjMzQ7MyYjMzQ7LCAyKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZSgmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyYjMzQ7LCAmIzM0OzMmIzM0OywgMik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDt3cml0ZV9maWxlKGRyb3BfY2FjaGVzKTogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBzdHJlcnJvcigtcmV0KSk7CiYjNDM7CiAJc3VjY2VzcygmIzM0O09LJiMzNDspOwogCXJldHVybiBwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYwppbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYwpAQCAtMTUsNyAmIzQzOzE1LDYgQEAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJmx0O2luY2x1ZGUvdmRzby90aW1lNjQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggJiMzNDsvc3lzL2tlcm5lbC9tbS9rc20vJiMzNDsKICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwppbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwpAQCAtNSw3ICYjNDM7NSw2IEBACiAgKi8KIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CkBAIC0xNiw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwogI2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKIAogI2RlZmluZSBUV09NRUcJCSgyJmx0OyZsdDsyMCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwppbmRleCBjZmQxOTg3MzM5YzEzLi5mOTVlM2VhNTdjM2E5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCkBAIC0yNCw3ICYjNDM7MjQsNiBAQAogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTAkJKFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHwJXAogCQkJCQkgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHwJXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKaW5kZXggODJjNmU5NmVhNmViMy4uZjllYzE0MDhhNmUzMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCkBAIC0xNCw3ICYjNDM7MTQsNiBAQAogI2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogCiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VECmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jCmluZGV4IGFlNmUxNTMwYjM1NDguLmI3ODgyYWI5NzY4M2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jCkBAIC00NSw4ICYjNDM7NDUsOCBAQAogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9wdHJhY2UuaCZndDsKICNpbmNsdWRlICZsdDtzZXRqbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cGtleS1oZWxwZXJzLmgmIzM0OwogCiB1NjQgc2hhZG93X3BrZXlfcmVnOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaAppbmRleCBkMDlmOWY2YTM4NGVlLi5hZTBhYjVlZmFiYWU2IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaApAQCAtMTMwLDMwICYjNDM7MTMwLDYgQEAgdGVzdF9zZWxlY3RlZCgpIHsKIAlmaQogfQogCi1ydW5fZ3VwX21hdHJpeCgpIHsKLSAgICAjIC10OiB0aHA9b24sIC1UOiB0aHA9b2ZmLCAtSDogaHVnZXRsYj1vbgotICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2Ci0KLSAgICBmb3IgaHVnZSBpbiAtdCAtVCAmIzM0Oy1IIC1tICRodWdldGxiX21iJiMzNDs7IGRvCi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm0KLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkbwotICAgICAgICAgICAgIyAtdzogd3JpdGU9MSwgLVc6IHdyaXRlPTAKLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG8KLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWQKLSAgICAgICAgICAgICAgICBmb3Igc2hhcmUgaW4gLVMgJiMzNDsgJiMzNDs7IGRvCi0gICAgICAgICAgICAgICAgICAgICMgLW46IEhvdyBtYW55IHBhZ2VzIHRvIGZldGNoIHRvZ2V0aGVyPyAgNTEyIGlzIHNwZWNpYWwKLSAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0JiMzOTtzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0bwotICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCBwYXJ0aWFsIGd1cCB3aGVuIGhpdCBhIGh1Z2UgaW4gd2hhdGV2ZXIgZm9ybQotICAgICAgICAgICAgICAgICAgICBmb3IgbnVtIGluICYjMzQ7LW4gMSYjMzQ7ICYjMzQ7LW4gNTEyJiMzNDsgJiMzNDstbiAxMjMmIzM0OyAmIzM0Oy1uIC0xJiMzNDs7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRodWdlICR0ZXN0X2NtZCAkd3JpdGUgJHNoYXJlICRudW0KLSAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgIGRvbmUKLSAgICAgICAgZG9uZQotICAgIGRvbmUKLX0KLQogIyBmaWx0ZXIgNjRiaXQgYXJjaGl0ZWN0dXJlcwogQVJDSDY0U1RSPSYjMzQ7YXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NCYjMzQ7CiBpZiBbIC16ICYjMzQ7JEFSQ0gmIzM0OyBdOyB0aGVuCkBAIC0yNzUsMTggJiM0MzsyNTEsNyBAQCBmaQogCiBDQVRFR09SWT0mIzM0O21tYXAmIzM0OyBydW5fdGVzdCAuL21hcF9maXhlZF9ub3JlcGxhY2UKIAotaWYgJFJVTl9BTEw7IHRoZW4KLSAgICBydW5fZ3VwX21hdHJpeAotZWxzZQotICAgICMgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFyawotICAgIENBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIDEKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMQotICAgICMgcGluX3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFyawotICAgIENBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIDEKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMQotZmkKLSMgRHVtcCBwYWdlcyAwLCAxOSwgYW5kIDQwOTYsIHVzaW5nIHBpbl91c2VyX3BhZ2VzOgotQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMAomIzQzO0NBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cAogQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtCiAKIENBVEVHT1JZPSYjMzQ7dXNlcmZhdWx0ZmQmIzM0OyBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0cwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCmluZGV4IGUxOThmYWNmNzhiYjUuLjE2ODdlOTg0YWExNGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKQEAgLTksNyAmIzQzOzksNiBAQAogCiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgUEFHRU1BUF9GSUxFX1BBVEggJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXAmIzM0OwogI2RlZmluZSBURVNUX0lURVJBVElPTlMgMTAwMDAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCmluZGV4IDg2YTYwMzY5MjgyNjEuLjBlMDgzYWI3MWFmNjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwpAQCAtMjEsNyAmIzQzOzIxLDYgQEAKICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHVpbnQ2NF90IHBhZ2VzaXplOwogdW5zaWduZWQgaW50IHBhZ2VzaGlmdDsKQEAgLTE0Niw3ICYjNDM7MTQ1LDEwIEBAIHN0YXRpYyB2b2lkIHdyaXRlX2RlYnVnZnMoY29uc3QgY2hhciAqZm10LCAuLi4pCiAJaWYgKHJldCAmZ3Q7PSBJTlBVVF9NQVgpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0OyVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCi0Jd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpOwomIzQzOwlyZXQgPSB3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgJiM0MzsgMSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDt3cml0ZV9maWxlKCVzKTogJXNcbiYjMzQ7LCBTUExJVF9ERUJVR0ZTLAomIzQzOwkJCQkgICBzdHJlcnJvcigtcmV0KSk7CiB9CiAKIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYwppbmRleCA1MGQwODA1YjY1ZGI5Li5hMDRmNTg4ZGY3ODBmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYwpAQCAtMTQsNyAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2lmICFkZWZpbmVkKE1BUF9IVUdFVExCKQogI2RlZmluZSBNQVBfSFVHRVRMQgkweDQwMDAwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYwpAQCAtMTcsNyAmIzQzOzE3LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiBpbnQgYmFja2luZ19mZCA9IC0xOwogaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmgKaW5kZXggOTJhMjFiOTdmNzQ1YS4uMDcyMzg0M2E3NjI2YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oCkBAIC0zNyw3ICYjNDM7MzcsNiBAQAogCiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgVUZGRF9GTEFHUwkoT19DTE9FWEVDIHwgT19OT05CTE9DSyB8IFVGRkRfVVNFUl9NT0RFX09OTFkpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jCmluZGV4IGM5NzNkNjcyMjcyMGMuLmViNGIyNDMzYjAwZTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwpAQCAtNyw4ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmbHQ7YXNzZXJ0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3VmZmQtY29tbW9uLmgmIzM0OwogCiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMKaW5kZXggZTI0ZDdiYTAwYjQ0MS4uNWEzNTRhNjY0ZDFmNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYwpAQCAtMTEsNyAmIzQzOzExLDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAvKgogICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3NlcwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCmluZGV4IDgwYmM5ZjU5N2I1MjEuLjQ3NTFkYjc5OGMzYWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKQEAgLTg4OSwxMTEgJiM0Mzs4ODksNTQgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAlyZXR1cm4gcmV0ICZndDsgMCA/IDAgOiAtZXJybm87CiB9CiAKLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewotCWludCBmZDsKLQlzc2l6ZV90IG51bXJlYWQ7Ci0KLQlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwotCWlmIChmZCA9PSAtMSkKLQkJcmV0dXJuIDA7Ci0KLQludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKLQlpZiAobnVtcmVhZCAmbHQ7IDEpIHsKLQkJY2xvc2UoZmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlidWZbbnVtcmVhZF0gPSAmIzM5O1wwJiMzOTs7Ci0JY2xvc2UoZmQpOwotCi0JcmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIGJvb2wgaWdub3JlX2VpbnZhbCkKLXsKLQlpbnQgZmQsIHNhdmVkX2Vycm5vOwotCXNzaXplX3QgbnVtd3JpdHRlbjsKLQotCWlmIChidWZsZW4gJmx0OyAyKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XG4mIzM0OywgYnVmbGVuKTsKLQotCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7Ci0JaWYgKGZkID09IC0xKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyBvcGVuIGZhaWxlZDogJXNcbiYjMzQ7LCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwotCi0JbnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOwotCXNhdmVkX2Vycm5vID0gZXJybm87Ci0JY2xvc2UoZmQpOwotCWVycm5vID0gc2F2ZWRfZXJybm87Ci0JaWYgKG51bXdyaXR0ZW4gJmx0OyAwKSB7Ci0JCWlmIChpZ25vcmVfZWludmFsICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVkFMKQotCQkJcmV0dXJuOwotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXG4mIzM0OywgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksCi0JCQkJYnVmLCBzdHJlcnJvcihlcnJubykpOwotCX0KLQlpZiAobnVtd3JpdHRlbiAhPSBidWZsZW4gLSAxKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xuJiMzNDssCi0JCQkJcGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7Ci19Ci0KLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCi17Ci0JX193cml0ZV9maWxlKHBhdGgsIGJ1ZiwgYnVmbGVuLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpOwotfQotCi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpCi17Ci0JY2hhciBidWZbMjFdOwotCi0JaWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpCi0JCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3JlYWRfZmlsZSgpJiMzNDspOwotCi0JcmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtLCBib29sIGlnbm9yZV9laW52YWwpCi17Ci0JY2hhciBidWZbMjFdOwotCi0Jc3ByaW50ZihidWYsICYjMzQ7JWx1JiMzNDssIG51bSk7Ci0JX193cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgJiM0MzsgMSwgaWdub3JlX2VpbnZhbCk7Ci19Ci0KLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKQotewotCXJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7Ci19Ci0KLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pCi17Ci0JcmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIHRydWUpOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDsKIAogdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKQogewotCWlmIChzaG1tYXgpCi0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIHNobW1heCk7Ci0JaWYgKHNobWFsbCkKLQkJd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGwmIzM0Oywgc2htYWxsKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHNobW1heCkgewomIzQzOwkJcmV0ID0gd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0Oywgc2htbWF4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byByZXN0b3JlIHNobW1heDogJXNcbiYjMzQ7LAomIzQzOwkJCQkJICAgc3RyZXJyb3IoLXJldCkpOwomIzQzOwl9CiYjNDM7CWlmIChzaG1hbGwpIHsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIHNobWFsbCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBzaG1hbGw6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKJiM0MzsJfQogfQogCiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aCkKIHsKIAl1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTsKIAl1bnNpZ25lZCBsb25nIHZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwogCi0JdmFsID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7KTsKIAlpZiAodmFsICZsdDsgbGVuZ3RoKSB7Ci0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIGxlbmd0aCk7CiYjNDM7CQlyZXQgPSB3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCBsZW5ndGgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobW1heDogJXNcbiYjMzQ7LAomIzQzOwkJCQkJICAgbGVuZ3RoLCBzdHJlcnJvcigtcmV0KSk7CiAJCXNobW1heCA9IHZhbDsKIAl9CiAKLQl2YWwgPSByZWFkX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDspOwomIzQzOwlyZXQgPSByZWFkX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gcmVhZCAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBzdHJlcnJvcigtcmV0KSk7CiAJaWYgKHZhbCAmbHQ7IG5yKSB7Ci0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIG5yKTsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIG5yKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIG5yLCBzdHJlcnJvcigtcmV0KSk7CiAJCXNobWFsbCA9IHZhbDsKIAl9CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaApAQCAtOCw2ICYjNDM7OCw4IEBACiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7IC8qIF9TQ19QQUdFU0laRSAqLwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vZmlsZV91dGlscy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9odWdlcGFnZV9zZXR0aW5ncy5oJmd0OwogCiAjZGVmaW5lIEJJVF9VTEwobnIpICAgICAgICAgICAgICAgICAgICgxVUxMICZsdDsmbHQ7IChucikpCiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpCkBAIC0xNjYsMTIgJiM0MzsxNjgsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTsKICNkZWZpbmUgUEFHRU1BUF9QUkVTRU5UKGVudCkJKCgoZW50KSAmYW1wOyAoMXVsbCAmbHQ7Jmx0OyA2MykpICE9IDApCiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudCkJKChlbnQpICZhbXA7ICgoMXVsbCAmbHQ7Jmx0OyA1NSkgLSAxKSkKIAotdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7Ci1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7Ci11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpOwotdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pOwotdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7Ci0KIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MjAKCQkJCQkJCW91dHB1dDogNjcKCQkJCQkJCXRob3VnaHRzOiAxMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBXb3J0aEZ1enppbmc9ZmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0YXNrIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGFueSAqZnVuY3Rpb25hbCogY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmYWlyIG51bWJlciBvZiBmaWxlcywgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKRmlyc3QgcGFzczogSSBzZWUgdGhlIGNoYW5nZXMgc3BhbiBgRG9jdW1lbnRhdGlvbi9gLCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIChhbHdheXMgYSBnb29kIHNpZ24gb2YgY29kZSBjaHVybiBvciBhZGRpdGlvbiksIHBsdXMgYSBsb3Qgb2YgYWN0aXZpdHkgd2l0aGluIGB0b29scy9saWIvbW0vYCwgYHRvb2xzL21tL2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gTXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbjsgdGhpcyBzY3JlYW1zICp1c2Vyc3BhY2UgdG9vbHMgYW5kIHRlc3RzKiByYXRoZXIgdGhhbiBjb3JlIGtlcm5lbCBjb2RlLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2ssIG1vcmUgZ3JhbnVsYXIgY2hlY2sgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBBIHNlY29uZCBnbGFuY2UgYXQgdGhlIGZpbGUgbGlzdCByZWluZm9yY2VzIHRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50LiBgRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RgIGlzIGRvY3VtZW50YXRpb24sIGBNQUlOVEFJTkVSU2AgaXMsIHdlbGwsIGBNQUlOVEFJTkVSU2AuIFRoZSBgdG9vbHMvbGliL21tL2AgYW5kIGB0b29scy9tbS9gIGRpcmVjdG9yaWVzIGFwcGVhciB0byBjb250YWluIHN1cHBvcnRpbmcgbGlicmFyaWVzIGFuZCBidWlsZCBmaWxlcywgYWxvbmcgd2l0aCB1c2VyIHNwYWNlIHRvb2xzLiBUaGUgYmlnZ2VzdCBjaHVuayBvZiB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gIC0gdGhlc2UgYXJlIHNlbGYgdGVzdHMsIG5vdCBrZXJuZWwgZHJpdmVycy4KCkkmIzM5O20gY29uZmlkZW50IEkmIzM5O3ZlIGdvdCB0aGlzIHJpZ2h0LiAqVGhlcmUgaXMgYWJzb2x1dGVseSBubyBtb2RpZmljYXRpb24gdG8gYW55IGNvcmUga2VybmVsIGNvbXBvbmVudHMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuKiBJdCYjMzk7cyBhbGwgdXNlcnNwYWNlIHRvb2xzIGFuZCB0ZXN0cywgbGlrZWx5IHJlZmFjdG9yaW5nLCBvciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIGNvcmUgdGhhdCBhcmUgc3ViamVjdCB0byBmdXp6aW5nLCBJJiMzOTttIGNvbmZpZGVudCBJIGNhbiBzYWZlbHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMsIHNlbGZ0ZXN0cywgRG9jdW1lbnRhdGlvbiwgYW5kIE1BSU5UQUlORVJTLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMsIHNlbGZ0ZXN0cywgRG9jdW1lbnRhdGlvbiwgYW5kIE1BSU5UQUlORVJTLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MTI6MTkuMDc4MjI4NDM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMzUyNTgxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scywgc2VsZnRlc3RzLCBEb2N1bWVudGF0aW9uLCBhbmQgTUFJTlRBSU5FUlMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToxMjoxOS4wNzgyMzM5MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTU5NDc0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZjJiYTU4YjIzY2UzOTkwNGExZjY3ZGRjYWI3YzI5OTRjZjVhN2I3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDE5OjEyOjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG5pbmRleCBjMTZjYTE2M2I1NWUzLi4xNTY0YjE2OTk0YWQ2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG5AQCAtMjI4LDEyICsyMjgsMTggQEAgVW5pdCB0ZXN0aW5nXFxuID09PT09PT09PT09PVxcbiBUaGlzIGZpbGU6OlxcbiBcXG4tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXFxuIFxcbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XFxuK2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlcyB0byBleGVyY2lzZSBwaW5fdXNlcl9wYWdlcyooKTpcXG4gXFxuLSogUElOX0ZBU1RfQkVOQ0hNQVJLICguL2d1cF90ZXN0IC1hKVxcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxcbisqIHBpbl91c2VyX3BhZ2VzIHZpYSBQSU5fQkFTSUNfVEVTVFxcbisqIHBpbl91c2VyX3BhZ2VzX2Zhc3QgdmlhIFBJTl9GQVNUX0JFTkNITUFSS1xcbisqIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtIHZpYSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFxuK1xcbitSdW4gd2l0aDo6XFxuK1xcbisgIG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW1cXG4rICAuL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cFxcbiBcXG4gWW91IGNhbiBtb25pdG9yIGhvdyBtYW55IHRvdGFsIGRtYS1waW5uZWQgcGFnZXMgaGF2ZSBiZWVuIGFjcXVpcmVkIGFuZCByZWxlYXNlZFxcbiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OlxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggMGY1MTNiNDJiYzE4Ni4uODYxNTA0ZmEyZTMxOCAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE3MDMxLDggKzE3MDMxLDkgQEAgVDpcXHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW1cXG4gRjpcXHRtbS9ndXAuY1xcbiBGOlxcdG1tL2d1cF90ZXN0LmNcXG4gRjpcXHRtbS9ndXBfdGVzdC5oXFxuK0Y6XFx0dG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG4rRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xcbiBGOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXFxuLUY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xcbiBcXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKVxcbiBNOlxcdEFuZHJldyBNb3J0b24gXFx1MDAzY2FrcG1AbGludXgtZm91bmRhdGlvbi5vcmdcXHUwMDNlXFxuQEAgLTE3MTM1LDYgKzE3MTM2LDcgQEAgRjpcXHRtbS9tZW1vcnktdGllcnMuY1xcbiBGOlxcdG1tL3BhZ2VfaWRsZS5jXFxuIEY6XFx0bW0vcGdhbGxvYy10cmFjay5oXFxuIEY6XFx0bW0vcHJvY2Vzc192bV9hY2Nlc3MuY1xcbitGOlxcdHRvb2xzL2xpYi9tbS9cXG4gRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9cXG4gXFxuIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OWExNTNlZmE4ZmJmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG5AQCAtMCwwICsxLDEwNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImZpbGVfdXRpbHMuaFxcXCJcXG4rXFxuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxcbit7XFxuK1xcdGludCBmZCwgZXJyO1xcbitcXHRzc2l6ZV90IG51bXJlYWQ7XFxuK1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpO1xcbitcXHRpZiAoZmQgPT0gLTEpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcXG4rXFx0aWYgKG51bXJlYWQgXFx1MDAzYyAxKSB7XFxuK1xcdFxcdGVyciA9IG51bXJlYWQgPyBlcnJubyA6IEVOT0RBVEE7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0cmV0dXJuIC1lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGJ1ZltudW1yZWFkXSA9ICdcXFxcMCc7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXFxuK3tcXG4rXFx0aW50IGZkLCBzYXZlZF9lcnJubztcXG4rXFx0c3NpemVfdCBudW13cml0dGVuO1xcbitcXG4rXFx0aWYgKGJ1ZmxlbiBcXHUwMDNjIDIpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcXG4rXFx0aWYgKGZkID09IC0xKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXG4rXFx0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbitcXHRzYXZlZF9lcnJubyA9IGVycm5vO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRpZiAobnVtd3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtc2F2ZWRfZXJybm87XFxuK1xcbitcXHRpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcdGludCByZXQ7XFxuK1xcdGNoYXIgYnVmWzIxXTtcXG4rXFx0Y2hhciAqZW5kO1xcbitcXG4rXFx0aWYgKCFudW0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGJ1ZlswXSBcXHUwMDNjICcwJyB8fCBidWZbMF0gXFx1MDAzZSAnOScpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0ZXJybm8gPSAwO1xcbitcXHR2YWwgPSBzdHJ0b3VsKGJ1ZiwgXFx1MDAyNmVuZCwgMTApO1xcbitcXHRpZiAoZXJybm8pXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRpZiAoKmVuZCA9PSAnXFxcXG4nKVxcbitcXHRcXHRlbmQrKztcXG4rXFxuK1xcdGlmICgqZW5kICE9ICdcXFxcMCcpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Km51bSA9IHZhbDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXFxuK3tcXG4rXFx0Y2hhciBidWZbMjFdO1xcbitcXG4rXFx0c3ByaW50ZihidWYsIFxcXCIlbHVcXFwiLCBudW0pO1xcbitcXHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICsgMSk7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XFxuK1xcdHJldHVybiByZXQgPT0gLUVJTlZBTCA/IDAgOiByZXQ7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaCBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUwZGFhODJjMmIyYjRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxcbkBAIC0wLDAgKzEsMTMgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rI2lmbmRlZiBfX01NX0ZJTEVfVVRJTFNfSF9fXFxuKyNkZWZpbmUgX19NTV9GSUxFX1VUSUxTX0hfX1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGRlZi5oXFx1MDAzZVxcbitcXG4raW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xcbitpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xcbitpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKTtcXG4raW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XFxuK2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XFxuK1xcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXFxuc2ltaWxhcml0eSBpbmRleCA4NyVcXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXFxucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXFxuaW5kZXggZDc5MTdkY2UzYWJhYy4uYWJkOWY3MTgyZjg4ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXFxuKysrIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5AQCAtOCwxMiArOCwxOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJmaWxlX3V0aWxzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBUSFBfU1lTRlMgXFxcIi9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL1xcXCJcXG4gI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNFxcbitcXG4rI2lmbmRlZiBBUlJBWV9TSVpFXFxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTtcXG4gc3RhdGljIGludCBzZXR0aW5nc19pbmRleDtcXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2F2ZWRfc2V0dGluZ3M7XFxuQEAgLTQ4LDYgKzU0LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2htZW1fZW5hYmxlZF9zdHJpbmdzW10gPSB7XFxuIFxcdE5VTExcXG4gfTtcXG4gXFxuK3N0YXRpYyB2b2lkIHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCByZXQpXFxuK3tcXG4rXFx0cHJpbnRmKFxcXCIjICVzOiAlcyAoJWQpXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcigtcmV0KSwgLXJldCk7XFxuK31cXG4rXFxuIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbkBAIC02MSw4ICs3Miw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkge1xcbi1cXHRcXHRwZXJyb3IocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4gXFxuQEAgLTEwMywxMiArMTE1LDE3IEBAIHZvaWQgdGhwX3dyaXRlX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWwpXFxuIFxcdFxcdHByaW50ZihcXFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gXFx0fVxcbi1cXHR3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcXG4rXFx0cmV0ID0gd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICsgMSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXFxuIHtcXG4gXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFx0dW5zaWduZWQgbG9uZyBudW07XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTIFxcXCIlc1xcXCIsIG5hbWUpO1xcbkBAIC0xMTYsNyArMTMzLDEzIEBAIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdFxcdHByaW50ZihcXFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFxcdTAwMjZudW0pO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG51bTtcXG4gfVxcbiBcXG4gdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbkBAIC0xMjksNyArMTUyLDExIEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHdyaXRlX251bShwYXRoLCBudW0pO1xcbitcXHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcXG5AQCAtMTU3LDggKzE4NCwxNSBAQCB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbiBcXHRcXHQubWF4X3B0ZXNfc2hhcmVkID0gdGhwX3JlYWRfbnVtKFxcXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFxcXCIpLFxcbiBcXHRcXHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcXFwia2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXFxcIiksXFxuIFxcdH07XFxuLVxcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxcbi1cXHRcXHRzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpO1xcbitcXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xcbitcXHRcXHRpbnQgcmV0ID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcXG4rXFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xcbiBcXHRcXHRpZiAoISgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IG9yZGVycykpIHtcXG5AQCAtMjA4LDggKzI0MiwxNSBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcXG4gXFx0dGhwX3dyaXRlX251bShcXFwia2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWRcXFwiLCBraHVnZXBhZ2VkLVxcdTAwM2VtYXhfcHRlc19zaGFyZWQpO1xcbiBcXHR0aHBfd3JpdGVfbnVtKFxcXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cXFwiLCBraHVnZXBhZ2VkLVxcdTAwM2VwYWdlc190b19zY2FuKTtcXG4gXFxuLVxcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxcbi1cXHRcXHR3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtXFx1MDAzZXJlYWRfYWhlYWRfa2IpO1xcbitcXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xcbitcXHRcXHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXFxuK1xcdFxcdFxcdFxcdCAgICBzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYik7XFxuK1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7XFxuK1xcdFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcXG4gXFx0XFx0aWYgKCEoKDEgXFx1MDAzY1xcdTAwM2MgaSkgXFx1MDAyNiBvcmRlcnMpKVxcbkBAIC0zMDcsOCArMzQ4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSlcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRvcmRlcnMgfD0gMVVMIFxcdTAwM2NcXHUwMDNjIGk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0aWYgKHJldCAhPSAtRU5PRU5UKSB7XFxuK1xcdFxcdFxcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuK1xcdFxcdFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b3JkZXJzIHw9IDFVTCBcXHUwMDNjXFx1MDAzYyBpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gb3JkZXJzO1xcbkBAIC0zODIsOCArNDMwLDcgQEAgaW50IGRldGVjdF9odWdldGxiX3BhZ2Vfc2l6ZXModW5zaWduZWQgbG9uZyBzaXplc1tdLCBpbnQgbWF4KVxcbiBcXHRcXHRpZiAoc3NjYW5mKGVudHJ5LVxcdTAwM2VkX25hbWUsIFxcXCJodWdlcGFnZXMtJXp1a0JcXFwiLCBcXHUwMDI2a2IpICE9IDEpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRzaXplc1tjb3VudCsrXSA9IGtiICogMTAyNDtcXG4tXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIltJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIGtiKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcXFxuXFxcIiwga2IpO1xcbiBcXHR9XFxuIFxcdGNsb3NlZGlyKGRpcik7XFxuIFxcdHJldHVybiBjb3VudDtcXG5AQCAtNDI1LDI4ICs0NzIsNDkgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbixcXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXFxcIm5yX2h1Z2VwYWdlc1xcXCIpO1xcbiBcXG4tXFx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xcbitcXHRyZXQgPSByZWFkX251bShwYXRoLCBcXHUwMDI2bnIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG5yO1xcbiB9XFxuIFxcbiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXFxcIm5yX2h1Z2VwYWdlc1xcXCIpO1xcbiBcXG4tXFx0d3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xcbitcXHRyZXQgPSB3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXFxcImZyZWVfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFxcdTAwMjZucik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXFxuQEAgLTUwMiw3ICs1NzAsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChucl9lbmFibGVkIFxcdTAwM2UgbWF4KSB7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxcXG5cXFwiLCBucl9lbmFibGVkLCBtYXgpO1xcbitcXHRcXHRwcmludGYoXFxcIiMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIG5yX2VuYWJsZWQsIG1heCk7XFxuIFxcdFxcdG5yX2VuYWJsZWQgPSBtYXg7XFxuIFxcdH1cXG4gXFxuQEAgLTU3NCw4ICs2NDMsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZClcXG4gXFxuIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKVxcbiB7XFxuK1xcdCh2b2lkKXNpZztcXG4rXFxuIFxcdC8qIGV4aXQoKSB3aWxsIGludm9rZSB0aGUgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQgaGFuZGxlci4gKi9cXG4tXFx0ZXhpdChLU0ZUX0ZBSUwpO1xcbitcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIH1cXG4gXFxuIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXFxucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuaW5kZXggMTQ0NmE2NTllNTQwOC4uMTU0ZDc0MGJlMDJlOCAxMDA2NDRcXG4tLS0gYS90b29scy9tbS8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxcbkBAIC0zLDMgKzMsNCBAQCBzbGFiaW5mb1xcbiBwYWdlLXR5cGVzXFxuIHBhZ2Vfb3duZXJfc29ydFxcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitndXBfYmVuY2hcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLmYyMGEzMmQ4Y2MyMmUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy9tbS9NYWtlZmlsZVxcbkBAIC0zLDEzICszLDE1IEBAXFxuICNcXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcXG4gXFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlclxcbitCVUlMRF9UQVJHRVRTICs9IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcXG4gXFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXFxuIExJQlMgPSAkKExJQl9ESVIpL2xpYmFwaS5hXFxuK0dVUF9CRU5DSF9PQkpTID0gZ3VwX2JlbmNoLmMgLi4vbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgLi4vbGliL21tL2ZpbGVfdXRpbHMuY1xcbiBcXG4tQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1wdGhyZWFkXFxuK0NGTEFHUyArPSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtSS4uLy4uIC1wdGhyZWFkXFxuIExERkxBR1MgKz0gJChMSUJTKSAtcHRocmVhZFxcbiBcXG4gYWxsOiAkKEJVSUxEX1RBUkdFVFMpXFxuQEAgLTIyLDggKzI0LDExIEBAICQoTElCUyk6XFxuICU6ICUuY1xcbiBcXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFxcdTAwM2MgJChMREZMQUdTKVxcbiBcXG4rZ3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpXFxuK1xcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKEdVUF9CRU5DSF9PQkpTKSAkKExERkxBR1MpXFxuK1xcbiBjbGVhbjpcXG4tXFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcXG4rXFx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXFxuIFxcdG1ha2UgLUMgJChMSUJfRElSKSBjbGVhblxcbiBcXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXFxuc2ltaWxhcml0eSBpbmRleCA1MCVcXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxucmVuYW1lIHRvIHRvb2xzL21tL2d1cF9iZW5jaC5jXFxuaW5kZXggM2Y4NDFhOTZmODcwNi4uNzUzNjliMjY3NGE5NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuKysrIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5AQCAtMTAsMTEgKzEwLDEwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2Nhc3NlcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbW0vZ3VwX3Rlc3QuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIE1CICgxVUwgXFx1MDAzY1xcdTAwM2MgMjApXFxuIFxcbkBAIC0zOCwxMiArMzcsNiBAQCBzdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcXG4gXFx0XFx0cmV0dXJuIFxcXCJQSU5fRkFTVF9CRU5DSE1BUktcXFwiO1xcbiBcXHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XFxuIFxcdFxcdHJldHVybiBcXFwiUElOX0xPTkdURVJNX0JFTkNITUFSS1xcXCI7XFxuLVxcdGNhc2UgR1VQX0JBU0lDX1RFU1Q6XFxuLVxcdFxcdHJldHVybiBcXFwiR1VQX0JBU0lDX1RFU1RcXFwiO1xcbi1cXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxcbi1cXHRcXHRyZXR1cm4gXFxcIlBJTl9CQVNJQ19URVNUXFxcIjtcXG4tXFx0Y2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDpcXG4tXFx0XFx0cmV0dXJuIFxcXCJEVU1QX1VTRVJfUEFHRVNfVEVTVFxcXCI7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIFxcXCJVbmtub3duIGNvbW1hbmRcXFwiO1xcbiB9XFxuQEAgLTUzLDM5ICs0NiwyOSBAQCB2b2lkICpndXBfdGhyZWFkKHZvaWQgKmRhdGEpXFxuIFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XFxuIFxcdGludCBpLCBzdGF0dXM7XFxuIFxcbi1cXHQvKiBPbmx5IHJlcG9ydCB0aW1pbmcgaW5mb3JtYXRpb24gb24gdGhlICpfQkVOQ0hNQVJLIGNvbW1hbmRzOiAqL1xcbi1cXHRpZiAoKGNtZCA9PSBQSU5fRkFTVF9CRU5DSE1BUkspIHx8IChjbWQgPT0gR1VQX0ZBU1RfQkVOQ0hNQVJLKSB8fFxcbi1cXHQgICAgIChjbWQgPT0gUElOX0xPTkdURVJNX0JFTkNITUFSSykpIHtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlcGVhdHM7IGkrKykge1xcbi1cXHRcXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuLVxcdFxcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4tXFx0XFx0XFx0aWYgKHN0YXR1cylcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyByZXBlYXRzOyBpKyspIHtcXG4rXFx0XFx0Z3VwLnNpemUgPSBzaXplO1xcbitcXHRcXHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXFx1MDAyNmd1cCk7XFxuK1xcdFxcdGlmIChzdGF0dXMpIHtcXG4rXFx0XFx0XFx0aW50IGVyciA9IGVycm5vO1xcbiBcXG4gXFx0XFx0XFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgY21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xcbi1cXHRcXHRcXHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcXG4tXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiwgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcXCIsIGd1cC5zaXplKTtcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiJXMgaW9jdGwgZmFpbGVkOiAlc1xcXFxuXFxcIiwgY21kX3RvX3N0cihjbWQpLFxcbitcXHRcXHRcXHRcXHRzdHJlcnJvcihlcnIpKTtcXG4gXFx0XFx0XFx0cHRocmVhZF9tdXRleF91bmxvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4rXFx0XFx0XFx0cmV0dXJuIGRhdGE7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0Z3VwLnNpemUgPSBzaXplO1xcbi1cXHRcXHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXFx1MDAyNmd1cCk7XFxuLVxcdFxcdGlmIChzdGF0dXMpXFxuLVxcdFxcdFxcdGdvdG8gcmV0dXJuXztcXG4gXFxuIFxcdFxcdHB0aHJlYWRfbXV0ZXhfbG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbi1cXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJXM6IGRvbmVcXFxcblxcXCIsIGNtZF90b19zdHIoY21kKSk7XFxuK1xcdFxcdHByaW50ZihcXFwiJXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzXFxcIixcXG4rXFx0XFx0XFx0Y21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsXFxuK1xcdFxcdFxcdGd1cC5wdXRfZGVsdGFfdXNlYyk7XFxuIFxcdFxcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiVHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcXFxuXFxcIiwgZ3VwLnNpemUpO1xcbitcXHRcXHRcXHRwcmludGYoXFxcIiwgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcXCIsIGd1cC5zaXplKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJcXFxcblxcXCIpO1xcbiBcXHRcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbiBcXHR9XFxuIFxcbi1yZXR1cm5fOlxcbi1cXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFxcXCJpb2N0bCBzdGF0dXMgJWRcXFxcblxcXCIsIHN0YXR1cyk7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbkBAIC05MywzOCArNzYsMjEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiB7XFxuIFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcXG4gXFx0aW50IGZpbGVkLCBpLCBvcHQsIG5yX3BhZ2VzID0gMSwgdGhwID0gLTEsIHdyaXRlID0gMSwgbnRocmVhZHMgPSAxLCByZXQ7XFxuLVxcdGludCBmbGFncyA9IE1BUF9QUklWQVRFO1xcbitcXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURSwgc3RhcnRlZF90aHJlYWRzID0gMDtcXG4gXFx0Y2hhciAqZmlsZSA9IFxcXCIvZGV2L3plcm9cXFwiO1xcbi1cXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcXG4rXFx0Ym9vbCBodWdldGxiID0gZmFsc2UsIHRocmVhZF9lcnJvciA9IGZhbHNlO1xcbitcXHR2b2lkICp0aHJlYWRfcmVzdWx0O1xcbiBcXHRwdGhyZWFkX3QgKnRpZDtcXG4gXFx0Y2hhciAqcDtcXG4gXFxuLVxcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFxcXCJtOnI6bjpGOmY6YWJjajp0VExVdXdXU0hwelxcXCIpKSAhPSAtMSkge1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwibTpyOm46RjpmOmFqOnRUTHV3V1NIXFxcIikpICE9IC0xKSB7XFxuIFxcdFxcdHN3aXRjaCAob3B0KSB7XFxuIFxcdFxcdGNhc2UgJ2EnOlxcbiBcXHRcXHRcXHRjbWQgPSBQSU5fRkFTVF9CRU5DSE1BUks7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdiJzpcXG4tXFx0XFx0XFx0Y21kID0gUElOX0JBU0lDX1RFU1Q7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdMJzpcXG4gXFx0XFx0XFx0Y21kID0gUElOX0xPTkdURVJNX0JFTkNITUFSSztcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ2MnOlxcbi1cXHRcXHRcXHRjbWQgPSBEVU1QX1VTRVJfUEFHRVNfVEVTVDtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnlcXG4tXFx0XFx0XFx0ICogdXNlcidzIG5vbi1vcHRpb24gYXJndW1lbnRzLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuIFxcXCJkb1xcbi1cXHRcXHRcXHQgKiBub3RoaW5nXFxcIi5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGd1cC53aGljaF9wYWdlc1swXSA9IDE7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdwJzpcXG4tXFx0XFx0XFx0Lyogd29ya3Mgb25seSB3aXRoIERVTVBfVVNFUl9QQUdFU19URVNUICovXFxuLVxcdFxcdFxcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAnRic6XFxuIFxcdFxcdFxcdC8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovXFxuIFxcdFxcdFxcdGd1cC5ndXBfZmxhZ3MgPSBzdHJ0b2wob3B0YXJnLCAwLCAwKTtcXG5AQCAtMTQxLDcgKzEwNyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0Y2FzZSAnbic6XFxuIFxcdFxcdFxcdG5yX3BhZ2VzID0gYXRvaShvcHRhcmcpO1xcbiBcXHRcXHRcXHRpZiAobnJfcGFnZXMgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpO1xcbitcXHRcXHRcXHRcXHRucl9wYWdlcyA9IHNpemUgLyBnZXRwYWdlc2l6ZSgpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAndCc6XFxuIFxcdFxcdFxcdHRocCA9IDE7XFxuQEAgLTE0OSw5ICsxMTUsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdGNhc2UgJ1QnOlxcbiBcXHRcXHRcXHR0aHAgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnVSc6XFxuLVxcdFxcdFxcdGNtZCA9IEdVUF9CQVNJQ19URVNUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAndSc6XFxuIFxcdFxcdFxcdGNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTE3Myw1MiArMTM2LDQxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0XFx0aHVnZXRsYiA9IHRydWU7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIldyb25nIGFyZ3VtZW50XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJXcm9uZyBhcmd1bWVudFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGV4aXQoMSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG9wdGluZCBcXHUwMDNjIGFyZ2MpIHtcXG4tXFx0XFx0aW50IGV4dHJhX2FyZ19jb3VudCA9IDA7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEZvciBleGFtcGxlOlxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiAgIC4vZ3VwX3Rlc3QgLWMgMCAxIDB4MTAwMVxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiAuLi50byBkdW1wIHBhZ2VzIDAsIDEsIGFuZCA0MDk3XFxuLVxcdFxcdCAqL1xcbi1cXG4tXFx0XFx0d2hpbGUgKChvcHRpbmQgXFx1MDAzYyBhcmdjKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgICAgKGV4dHJhX2FyZ19jb3VudCBcXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhblxcbi1cXHRcXHRcXHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICsgMTtcXG4tXFxuLVxcdFxcdFxcdGd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDtcXG4tXFx0XFx0XFx0ZXh0cmFfYXJnX2NvdW50Kys7XFxuLVxcdFxcdFxcdG9wdGluZCsrO1xcbi1cXHRcXHR9XFxuK1xcdGlmIChvcHRpbmQgIT0gYXJnYykge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlVuZXhwZWN0ZWQgYXJndW1lbnQgJyVzJ1xcXFxuXFxcIiwgYXJndltvcHRpbmRdKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4gXFx0fVxcbiBcXG4tXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0aWYgKGdldHVpZCgpKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcXFxuXFxcIik7XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChodWdldGxiKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcXG4gXFxuLVxcdFxcdGlmICghaHBfc2l6ZSlcXG4tXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkh1Z2VUTEIgaXMgdW5hdmFpbGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoIWhwX3NpemUpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJDb3VsZCBub3QgZGV0ZXJtaW5lIGh1Z2UgcGFnZSBzaXplXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHNpemUgPSAoc2l6ZSArIGhwX3NpemUgLSAxKSBcXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xcbi1cXHRcXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpXFxuLVxcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRrc2Z0X3NldF9wbGFuKG50aHJlYWRzKTtcXG4tXFxuIFxcdGZpbGVkID0gb3BlbihmaWxlLCBPX1JEV1J8T19DUkVBVCwgMDY2NCk7XFxuLVxcdGlmIChmaWxlZCBcXHUwMDNjIDApXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxcXG5cXFwiLCBmaWxlLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRpZiAoZmlsZWQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiVW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxcXG5cXFwiLCBmaWxlLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbiBcXG4gXFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXM7XFxuIFxcdGlmICh3cml0ZSlcXG5AQCAtMjI3LDI2ICsxNzksMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuIFxcdGlmIChndXBfZmQgPT0gLTEpIHtcXG4gXFx0XFx0c3dpdGNoIChlcnJubykge1xcbi1cXHRcXHRjYXNlIEVBQ0NFUzpcXG4tXFx0XFx0XFx0aWYgKGdldHVpZCgpKVxcbi1cXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcXFxuXFxcIik7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEVOT0VOVDpcXG4gXFx0XFx0XFx0aWYgKG9wZW5kaXIoXFxcIi9zeXMva2VybmVsL2RlYnVnXFxcIikgPT0gTlVMTClcXG4tXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiY2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxcXG5cXFwiLCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgR1VQX1RFU1RfRklMRSxcXG4rXFx0XFx0XFx0XFx0c3RyZXJyb3IoZXJybm8pKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4tXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFxcXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxcXG5cXFwiKTtcXG4tXFx0XFx0a3NmdF9leGl0X3Bhc3MoKTtcXG4rXFx0XFx0Z290byBlcnJfY2xvc2VfZmlsZWQ7XFxuIFxcdH1cXG4gXFxuIFxcdHAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCBmaWxlZCwgMCk7XFxuLVxcdGlmIChwID09IE1BUF9GQUlMRUQpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwibW1hcDogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdGlmIChwID09IE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0Z290byBlcnJfY2xvc2VfZ3VwX2ZkO1xcbitcXHR9XFxuIFxcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcXG4gXFxuIFxcdGlmICh0aHAgPT0gMSlcXG5AQCAtMjU1LDIxICsyMDUsNDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRtYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7XFxuIFxcbiBcXHQvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi9cXG4tXFx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXFx1MDAzYyBndXAuYWRkciArIHNpemU7IHAgKz0gcHNpemUoKSlcXG4rXFx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXFx1MDAzYyBndXAuYWRkciArIHNpemU7IHAgKz0gZ2V0cGFnZXNpemUoKSlcXG4gXFx0XFx0cFswXSA9IDA7XFxuIFxcbiBcXHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7XFxuLVxcdGFzc2VydCh0aWQpO1xcbitcXHRpZiAoIXRpZCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCB0aHJlYWRzOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0bnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGdvdG8gZXJyX3VubWFwO1xcbitcXHR9XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnRocmVhZHM7IGkrKykge1xcbiBcXHRcXHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCBcXHUwMDI2Z3VwKTtcXG4tXFx0XFx0YXNzZXJ0KHJldCA9PSAwKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInB0aHJlYWRfY3JlYXRlIGZhaWxlZDogJXNcXFxcblxcXCIsIHN0cmVycm9yKHJldCkpO1xcbitcXHRcXHRcXHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRzdGFydGVkX3RocmVhZHMrKztcXG4gXFx0fVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnRocmVhZHM7IGkrKykge1xcbi1cXHRcXHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBOVUxMKTtcXG4tXFx0XFx0YXNzZXJ0KHJldCA9PSAwKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YXJ0ZWRfdGhyZWFkczsgaSsrKSB7XFxuK1xcdFxcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIFxcdTAwMjZ0aHJlYWRfcmVzdWx0KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInB0aHJlYWRfam9pbiBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihyZXQpKTtcXG4rXFx0XFx0XFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcXG4rXFx0XFx0fSBlbHNlIGlmICh0aHJlYWRfcmVzdWx0KVxcbitcXHRcXHRcXHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbiBcXHRmcmVlKHRpZCk7XFxuIFxcbi1cXHRrc2Z0X2V4aXRfcGFzcygpO1xcbitcXHRpZiAodGhyZWFkX2Vycm9yKVxcbitcXHRcXHRnb3RvIGVycl91bm1hcDtcXG4rXFxuK1xcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcXG4rXFx0Y2xvc2UoZ3VwX2ZkKTtcXG4rXFx0Y2xvc2UoZmlsZWQpO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl91bm1hcDpcXG4rXFx0bXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpO1xcbitlcnJfY2xvc2VfZ3VwX2ZkOlxcbitcXHRjbG9zZShndXBfZmQpO1xcbitlcnJfY2xvc2VfZmlsZWQ6XFxuK1xcdGNsb3NlKGZpbGVkKTtcXG4rXFx0cmV0dXJuIDE7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbmluZGV4IDJkNTM2NjE5NmUzMDkuLjljMDM2MjRmZDI5MzYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbkBAIC0zNyw3ICszNyw4IEBAIGVuZGlmXFxuICMgTERMSUJTLlxcbiBNQUtFRkxBR1MgKz0gLS1uby1idWlsdGluLXJ1bGVzXFxuIFxcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxcbitDRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAtSSAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYlxcbitDRkxBR1MgKz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcXG4gQ0ZMQUdTICs9IC1XdW5yZWFjaGFibGUtY29kZVxcbiBMRExJQlMgPSAtbHJ0IC1scHRocmVhZCAtbG1cXG4gXFxuQEAgLTU3LDggKzU4LDggQEAgZW5kaWZcXG4gXFxuIFRFU1RfR0VOX0ZJTEVTID0gY293XFxuIFRFU1RfR0VOX0ZJTEVTICs9IGNvbXBhY3Rpb25fdGVzdFxcbitURVNUX0dFTl9GSUxFUyArPSBndXBcXG4gVEVTVF9HRU5fRklMRVMgKz0gZ3VwX2xvbmd0ZXJtXFxuLVRFU1RfR0VOX0ZJTEVTICs9IGd1cF90ZXN0XFxuIFRFU1RfR0VOX0ZJTEVTICs9IGhtbS10ZXN0c1xcbiBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLW1hZHZpc2VcXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tbWFwXFxuQEAgLTE4Nyw4ICsxODgsMTAgQEAgVEVTVF9GSUxFUyArPSB3cml0ZV9odWdldGxiX21lbW9yeS5zaFxcbiBcXG4gaW5jbHVkZSAuLi9saWIubWtcXG4gXFxuLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcXG4rJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXFxcXG4rXFx0XFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXFxuKyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxcXFxuK1xcdFxcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbiBcXG4gJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jXFxuICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmNcXG5AQCAtMjE3LDcgKzIyMCw3IEBAICQoQklOQVJJRVNfMzIpOiBDRkxBR1MgKz0gLW0zMiAtbXhzYXZlXFxuICQoQklOQVJJRVNfMzIpOiBMRExJQlMgKz0gLWxydCAtbGRsIC1sbVxcbiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuY1xcbiBcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4tXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTMyLCQodCkpKSlcXG4gZW5kaWZcXG4gXFxuQEAgLTIyNiw3ICsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICs9IC1tNjQgLW14c2F2ZVxcbiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICs9IC1scnQgLWxkbFxcbiAkKEJJTkFSSUVTXzY0KTogJChPVVRQVVQpLyVfNjQ6ICUuY1xcbiBcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4tXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSlcXG4gZW5kaWZcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcXG5pbmRleCAzMGQ0YWNlNzE1NWFlLi5iM2Y1Mzc3MTE5Y2I4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcXG5AQCAtMTUsOSArMTUsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTUFQX1NJWkVfTUJcXHQxMDBcXG4gI2RlZmluZSBNQVBfU0laRVxcdChNQVBfU0laRV9NQiAqIDEwMjQgKiAxMDI0KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXFxuaW5kZXggOGFhNTI0OWQ5YmVmNi4uMzI2NGE4Mjg1NzViZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXFxuQEAgLTI5LDcgKzI5LDYgQEBcXG4gI2luY2x1ZGUgXFxcIi4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG5pbmRleCA0NWI4NGY3YjM2NGUwLi4yODlhZWQyZWJhYzAyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG5AQCAtMjUsNyArMjUsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiB1aW50NjRfdCBwYWdlX3NpemU7XFxuIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuaW5kZXggNWM4ZWMzY2E3NWQ3ZC4uYWY1Y2Q5YjMwMzM5NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG5AQCAtMjEsNyArMjEsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3Vpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL3BpZGZkL3BpZGZkLmhcXFwiXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi40YzllMTRkYmI0MzRhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXFxuQEAgLTAsMCArMSwzMjkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2RpcmVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL2lvY3RsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vZ3VwX3Rlc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisjZGVmaW5lIE1CICgxVUwgXFx1MDAzY1xcdTAwM2MgMjApXFxuK1xcbisvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi9cXG4rI2RlZmluZSBGT0xMX1dSSVRFXFx0MHgwMVxcdC8qIGNoZWNrIHB0ZSBpcyB3cml0YWJsZSAqL1xcbitcXG4rLyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovXFxuK3N0YXRpYyBjb25zdCBpbnQgbnJfcGFnZXNfbGlzdFtdID0geyAxLCA1MTIsIDEyMywgLTEgfTtcXG4rXFxuKyNkZWZpbmUgR1VQX1RFU1RfRklMRSBcXFwiL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3RcXFwiXFxuKyNkZWZpbmUgTlJfSFVHRV9QQUdFUyAxMjhcXG4rXFxuK0hVR0VUTEJfU0VUVVBfREVGQVVMVF9QQUdFUyhOUl9IVUdFX1BBR0VTKVxcbitcXG4rRklYVFVSRShndXBfdGVzdClcXG4re1xcbitcXHRpbnQgZ3VwX2ZkO1xcbitcXHRjaGFyICphZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpXFxuK3tcXG4rXFx0Ym9vbCB0aHA7XFxuK1xcdGJvb2wgaHVnZXRsYjtcXG4rXFx0Ym9vbCB3cml0ZTtcXG4rXFx0Ym9vbCBzaGFyZWQ7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfdGhwKVxcbit7XFxuK1xcdC50aHAgPSB0cnVlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfdGhwKVxcbit7XFxuK1xcdC50aHAgPSB0cnVlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV9odWdldGxiKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSB0cnVlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSlcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWQpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfdGhwKVxcbit7XFxuK1xcdC50aHAgPSB0cnVlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX2h1Z2V0bGIpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IHRydWUsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChndXBfdGVzdClcXG4re1xcbitcXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFO1xcbitcXHRpbnQgemVyb19mZDtcXG4rXFx0Y2hhciAqcDtcXG4rXFxuK1xcdHNlbGYtXFx1MDAzZXNpemUgPSAxMjggKiBNQjtcXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2VodWdldGxiKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcXG4rXFxuK1xcdFxcdGlmICghaHBfc2l6ZSlcXG4rXFx0XFx0XFx0U0tJUChyZXR1cm4sIFxcXCJIdWdlVExCIG5vdCBhdmFpbGFibGVcXFxcblxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKGh1Z2V0bGJfZnJlZV9kZWZhdWx0X3BhZ2VzKCkgXFx1MDAzYyBOUl9IVUdFX1BBR0VTKVxcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcXFxuXFxcIik7XFxuK1xcbitcXHRcXHRzZWxmLVxcdTAwM2VzaXplID0gTlJfSFVHRV9QQUdFUyAqIGhwX3NpemU7XFxuK1xcdFxcdG1tYXBfZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2VzaGFyZWQpXFxuK1xcdFxcdG1tYXBfZmxhZ3MgPSAobW1hcF9mbGFncyBcXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xcbitcXG4rXFx0LyogemVyb19mZCBoYXMgdG8gYmUgXFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xcbitcXHR6ZXJvX2ZkID0gb3BlbihcXFwiL2Rldi96ZXJvXFxcIiwgT19SRFdSKTtcXG4rXFx0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xcbitcXG4rXFx0LyogZ3VwX2ZkIGhhcyB0byBiZSBcXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXFxuK1xcdHNlbGYtXFx1MDAzZWd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcXG4rXFx0QVNTRVJUX0dFKHNlbGYtXFx1MDAzZWd1cF9mZCwgMCk7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VhZGRyID0gbW1hcChOVUxMLCBzZWxmLVxcdTAwM2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRcXHQgIG1tYXBfZmxhZ3MsIHplcm9fZmQsIDApO1xcbitcXG4rXFx0QVNTRVJUX05FKHNlbGYtXFx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0aW50IGVyciA9IGVycm5vO1xcbitcXG4rXFx0XFx0Y2xvc2UoemVyb19mZCk7XFxuK1xcdFxcdGNsb3NlKHNlbGYtXFx1MDAzZWd1cF9mZCk7XFxuK1xcdFxcdFRIX0xPRyhcXFwibW1hcCBmYWlsZWQ6ICVzXFxcIiwgc3RyZXJyb3IoZXJyKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoemVyb19mZCk7XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNldGhwKVxcbitcXHRcXHRtYWR2aXNlKHNlbGYtXFx1MDAzZWFkZHIsIHNlbGYtXFx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xcbitcXHRlbHNlIGlmICghdmFyaWFudC1cXHUwMDNlaHVnZXRsYilcXG4rXFx0XFx0bWFkdmlzZShzZWxmLVxcdTAwM2VhZGRyLCBzZWxmLVxcdTAwM2VzaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbitcXG4rXFx0Zm9yIChwID0gc2VsZi1cXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcXHUwMDNjICh1bnNpZ25lZCBsb25nKXNlbGYtXFx1MDAzZWFkZHJcXG4rXFx0XFx0XFx0KyBzZWxmLVxcdTAwM2VzaXplOyBwICs9IHBzaXplKCkpXFxuK1xcdFxcdHBbMF0gPSAwO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKGd1cF90ZXN0KVxcbit7XFxuK1xcdG11bm1hcChzZWxmLVxcdTAwM2VhZGRyLCBzZWxmLVxcdTAwM2VzaXplKTtcXG4rXFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZ3VwX2ZkKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnVuX2d1cF9jbWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxcbitcXHRcXHRcXHQgRklYVFVSRV9EQVRBKGd1cF90ZXN0KSAqc2VsZixcXG4rXFx0XFx0XFx0IGNvbnN0IEZJWFRVUkVfVkFSSUFOVChndXBfdGVzdCkgKnZhcmlhbnQsXFxuK1xcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGNvbW1hbmQsXFxuK1xcdFxcdFxcdCB1bnNpZ25lZCBpbnQgdGVzdF9mbGFncyxcXG4rXFx0XFx0XFx0IHVuc2lnbmVkIGludCB3aGljaF9wYWdlKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7XFxuK1xcdFxcdFxcdC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcixcXG4rXFx0XFx0XFx0LnNpemUgPSBzZWxmLVxcdTAwM2VzaXplLFxcbitcXHRcXHRcXHQubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXSxcXG4rXFx0XFx0XFx0Lmd1cF9mbGFncyA9IHZhcmlhbnQtXFx1MDAzZXdyaXRlID8gRk9MTF9XUklURSA6IDAsXFxuK1xcdFxcdFxcdC50ZXN0X2ZsYWdzID0gdGVzdF9mbGFncyxcXG4rXFx0XFx0XFx0LndoaWNoX3BhZ2VzID0geyB3aGljaF9wYWdlIH0sXFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgY29tbWFuZCwgXFx1MDAyNmd1cCksIDApO1xcbitcXHR9XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfQkFTSUNfVEVTVCwgMCwgMCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCwgMCwgMCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZHVtcF91c2VyX3BhZ2VzX3dpdGhfZ2V0KVxcbit7XFxuK1xcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgRFVNUF9VU0VSX1BBR0VTX1RFU1QsIDAsIDEpO1xcbit9XFxuK1xcbitURVNUX0YoZ3VwX3Rlc3QsIGR1bXBfdXNlcl9wYWdlc193aXRoX3BpbilcXG4re1xcbitcXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIERVTVBfVVNFUl9QQUdFU19URVNULFxcbitcXHRcXHQgICAgR1VQX1RFU1RfRkxBR19EVU1QX1BBR0VTX1VTRV9QSU4sIDEpO1xcbit9XFxuK1xcbitURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzX2Zhc3QpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfRkFTVF9CRU5DSE1BUkssIDAsIDApO1xcbit9XFxuK1xcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2Zhc3QpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fRkFTVF9CRU5DSE1BUkssIDAsIDApO1xcbit9XFxuK1xcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxcbit7XFxuK1xcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0xPTkdURVJNX0JFTkNITUFSSywgMCwgMCk7XFxuK31cXG4rXFxuK1RFU1QoZHVtcF91c2VyX3BhZ2VzX3NwYXJzZV9pbmRpY2VzKVxcbit7XFxuK1xcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XFxuK1xcdGludCB6ZXJvX2ZkLCBndXBfZmQ7XFxuK1xcdGNoYXIgKmFkZHIsICpwO1xcbitcXG4rXFx0emVyb19mZCA9IG9wZW4oXFxcIi9kZXYvemVyb1xcXCIsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTtcXG4rXFxuK1xcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcXG4rXFx0QVNTRVJUX0dFKGd1cF9mZCwgMCk7XFxuK1xcbitcXHRhZGRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgemVyb19mZCwgMCk7XFxuK1xcdGNsb3NlKHplcm9fZmQpO1xcbitcXHRBU1NFUlRfTkUoYWRkciwgTUFQX0ZBSUxFRCk7XFxuK1xcbitcXHRtYWR2aXNlKGFkZHIsIHNpemUsIE1BRFZfSFVHRVBBR0UpO1xcbitcXG4rXFx0Zm9yIChwID0gYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcXHUwMDNjICh1bnNpZ25lZCBsb25nKWFkZHIgKyBzaXplO1xcbitcXHQgICAgIHAgKz0gcHNpemUoKSlcXG4rXFx0XFx0cFswXSA9IDA7XFxuK1xcbitcXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7XFxuK1xcdGd1cC5zaXplID0gc2l6ZTtcXG4rXFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gc2l6ZSAvIHBzaXplKCk7XFxuK1xcdGd1cC5ndXBfZmxhZ3MgPSBGT0xMX1dSSVRFO1xcbitcXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xcbitcXHRndXAud2hpY2hfcGFnZXNbMV0gPSAyMDtcXG4rXFx0Z3VwLndoaWNoX3BhZ2VzWzJdID0gMHgxMDAxO1xcbitcXG4rXFx0QVNTRVJUX0VRKGlvY3RsKGd1cF9mZCwgRFVNUF9VU0VSX1BBR0VTX1RFU1QsIFxcdTAwMjZndXApLCAwKTtcXG4rXFxuK1xcdG11bm1hcChhZGRyLCBzaXplKTtcXG4rXFx0Y2xvc2UoZ3VwX2ZkKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0Y2hhciAqZmlsZSA9IFxcXCIvZGV2L3plcm9cXFwiO1xcbitcXG4rXFx0ZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0ZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdGlmIChmZCA9PSAtMSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRUFDQ0VTKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcXFxuXFxcIik7XFxuK1xcdFxcdGlmIChlcnJubyA9PSBFTk9FTlQpIHtcXG4rXFx0XFx0XFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcXFwiL3N5cy9rZXJuZWwvZGVidWdcXFwiKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghZGVidWdmcykge1xcbitcXHRcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiTW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGNsb3NlZGlyKGRlYnVnZnMpO1xcbitcXHRcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcXG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcXG5pbmRleCBlMjY0MmVjYTBkMDJiLi5mYTFhNjUxOTYzZmQwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcXG5AQCAtMTAsOSArMTAsNiBAQFxcbiAgKiBidWdzLlxcbiAgKi9cXG4gXFxuLSNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4tXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuQEAgLTMzLDYgKzMwLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9ldmVudGZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gLypcXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG5AQCAtMTQsNyArMTQsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTUlOX0ZSRUVfUEFHRVNcXHQyMFxcbiAjZGVmaW5lIE5SX0hVR0VfUEFHRVNcXHQxMFxcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcXG5pbmRleCAwZjJhYWQxYjdkYmQ2Li5hNDU4YmVjZjU4MzI3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcXG5AQCAtMTgsNyArMTgsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtZmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXFxuICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcXG5pbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuQEAgLTI2LDcgKzI2LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxcbiAjZGVmaW5lIE1CX1RPX0JZVEVTKHgpICh4ICogMTAyNCAqIDEwMjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcXG5pbmRleCBiYzIwMmU0ZWQyYmRhLi4yMDg2NGU3ZDRlMGM3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXFxuQEAgLTIxLDkgKzIxLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdGZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcXG5AQCAtMjAsNyArMjAsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZm5kZWYgU1RBVFhfRElPQUxJR05cXG4gI2RlZmluZSBTVEFUWF9ESU9BTElHTlxcdFxcdDB4MDAwMDIwMDBVXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5AQCAtMTAsNyArMTAsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbkBAIC0yNSw3ICsyNSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDBkNmM3MWVkMmZhZTMuLmJhMjFmNTg1MjVlNDIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTIyLDcgKzIyLDYgQEBcXG4gI2luY2x1ZGUgXFxcImxpbnV4L21hZ2ljLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXFx1MDAzY1xcdTAwM2MgMzApKVxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcXG5AQCAtMTQ0LDYgKzE0Myw3IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXFxuIFxcdGNoYXIgYnVmWzEgXFx1MDAzY1xcdTAwM2MgMTBdO1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbiBcXHRjaGFyICpzdHIsICplbmQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRmaW5mby5kaXIgPSBkaXI7XFxuIFxcdHN0YXQoZmluZm8uZGlyLCBcXHUwMDI2cGF0aF9zdGF0KTtcXG5AQCAtMTYzLDggKzE2Myw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXFxuIFxcdFxcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxcbiBcXHQgICAgXFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbi1cXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJyZWFkX2ZpbGUodWV2ZW50KVxcXCIpO1xcbitcXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZF9maWxlKCVzKTogJXNcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKC1yZXQpKTtcXG4gXFx0aWYgKHN0cnN0cihidWYsIFxcXCJERVZUWVBFPWRpc2tcXFwiKSkge1xcbiBcXHRcXHQvKiBGb3VuZCBpdCAqL1xcbiBcXHRcXHRpZiAoc25wcmludGYoZmluZm8uZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG5AQCAtMzQ1LDcgKzM0Niw3IEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXFxuIHtcXG4gXFx0Y29uc3QgaW50IG9wZW5fb3B0ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBPX1JET05MWSA6IE9fUkRXUjtcXG4gXFx0Y29uc3QgaW50IG1tYXBfcHJvdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gUFJPVF9SRUFEIDogKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpO1xcbi1cXHRpbnQgZmQ7XFxuK1xcdGludCBmZCwgcmV0O1xcbiBcXHR2b2lkICpwO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuIFxcbkBAIC0zODksNyArMzkwLDExIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibW1hcCgpXFxcIik7XFxuIFxcbiBcXHQvKiBEcm9wIHBhZ2UgY2FjaGUgKi9cXG4tXFx0d3JpdGVfZmlsZShcXFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXFxcIiwgXFxcIjNcXFwiLCAyKTtcXG4rXFx0cmV0ID0gd3JpdGVfZmlsZShcXFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXFxcIiwgXFxcIjNcXFwiLCAyKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJ3cml0ZV9maWxlKGRyb3BfY2FjaGVzKTogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4rXFxuIFxcdHN1Y2Nlc3MoXFxcIk9LXFxcIik7XFxuIFxcdHJldHVybiBwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG5AQCAtMTUsNyArMTUsNiBAQFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NpbmNsdWRlL3Zkc28vdGltZTY0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBLU01fU1lTRlNfUEFUSCBcXFwiL3N5cy9rZXJuZWwvbW0va3NtL1xcXCJcXG4gI2RlZmluZSBLU01fRlAocykgKEtTTV9TWVNGU19QQVRIIHMpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcXG5AQCAtNSw3ICs1LDYgQEBcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuQEAgLTE2LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuK1xcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiBcXG4gI2RlZmluZSBUV09NRUdcXHRcXHQoMlxcdTAwM2NcXHUwMDNjMjApXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbmluZGV4IGNmZDE5ODczMzljMTMuLmY5NWUzZWE1N2MzYTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXFxuQEAgLTI0LDcgKzI0LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTExcXHRcXHQoUEFHRV9JU19XUEFMTE9XRUQgfCBQQUdFX0lTX1dSSVRURU4gfFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8XFx0XFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xcbmluZGV4IDgyYzZlOTZlYTZlYjMuLmY5ZWMxNDA4YTZlMzAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG5AQCAtMTQsNyArMTQsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gXFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xcbmluZGV4IGFlNmUxNTMwYjM1NDguLmI3ODgyYWI5NzY4M2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xcbkBAIC00NSw4ICs0NSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9wdHJhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3NldGptcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicGtleS1oZWxwZXJzLmhcXFwiXFxuIFxcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuaW5kZXggZDA5ZjlmNmEzODRlZS4uYWUwYWI1ZWZhYmFlNiAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuQEAgLTEzMCwzMCArMTMwLDYgQEAgdGVzdF9zZWxlY3RlZCgpIHtcXG4gXFx0ZmlcXG4gfVxcbiBcXG4tcnVuX2d1cF9tYXRyaXgoKSB7XFxuLSAgICAjIC10OiB0aHA9b24sIC1UOiB0aHA9b2ZmLCAtSDogaHVnZXRsYj1vblxcbi0gICAgbG9jYWwgaHVnZXRsYl9tYj0yNTZcXG4tXFxuLSAgICBmb3IgaHVnZSBpbiAtdCAtVCBcXFwiLUggLW0gJGh1Z2V0bGJfbWJcXFwiOyBkb1xcbi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm1cXG4tICAgICAgICBmb3IgdGVzdF9jbWQgaW4gLXUgLVUgLWEgLWIgLUw7IGRvXFxuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXFxuLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG9cXG4tICAgICAgICAgICAgICAgICMgLVM6IHNoYXJlZFxcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFxcXCIgXFxcIjsgZG9cXG4tICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsXFxuLSAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0J3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXFxuLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm1cXG4tICAgICAgICAgICAgICAgICAgICBmb3IgbnVtIGluIFxcXCItbiAxXFxcIiBcXFwiLW4gNTEyXFxcIiBcXFwiLW4gMTIzXFxcIiBcXFwiLW4gLTFcXFwiOyBkb1xcbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgXFxcXFxcbi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRodWdlICR0ZXN0X2NtZCAkd3JpdGUgJHNoYXJlICRudW1cXG4tICAgICAgICAgICAgICAgICAgICBkb25lXFxuLSAgICAgICAgICAgICAgICBkb25lXFxuLSAgICAgICAgICAgIGRvbmVcXG4tICAgICAgICBkb25lXFxuLSAgICBkb25lXFxuLX1cXG4tXFxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcXG4gQVJDSDY0U1RSPVxcXCJhcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XFxcIlxcbiBpZiBbIC16IFxcXCIkQVJDSFxcXCIgXTsgdGhlblxcbkBAIC0yNzUsMTggKzI1MSw3IEBAIGZpXFxuIFxcbiBDQVRFR09SWT1cXFwibW1hcFxcXCIgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlXFxuIFxcbi1pZiAkUlVOX0FMTDsgdGhlblxcbi0gICAgcnVuX2d1cF9tYXRyaXhcXG4tZWxzZVxcbi0gICAgIyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXFxuLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcXG4tICAgIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gLTFcXG4tZmlcXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XFxuLUNBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXFxuK0NBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBcXG4gQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF9sb25ndGVybVxcbiBcXG4gQ0FURUdPUlk9XFxcInVzZXJmYXVsdGZkXFxcIiBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5pbmRleCBlMTk4ZmFjZjc4YmI1Li4xNjg3ZTk4NGFhMTRhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xcbkBAIC05LDcgKzksNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgUEFHRU1BUF9GSUxFX1BBVEggXFxcIi9wcm9jL3NlbGYvcGFnZW1hcFxcXCJcXG4gI2RlZmluZSBURVNUX0lURVJBVElPTlMgMTAwMDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG5pbmRleCA4NmE2MDM2OTI4MjYxLi4wZTA4M2FiNzFhZjYwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuQEAgLTIxLDcgKzIxLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIHVpbnQ2NF90IHBhZ2VzaXplO1xcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xcbkBAIC0xNDYsNyArMTQ1LDEwIEBAIHN0YXRpYyB2b2lkIHdyaXRlX2RlYnVnZnMoY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIFxcdGlmIChyZXQgXFx1MDAzZT0gSU5QVVRfTUFYKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcbi1cXHR3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgKyAxKTtcXG4rXFx0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwid3JpdGVfZmlsZSglcyk6ICVzXFxcXG5cXFwiLCBTUExJVF9ERUJVR0ZTLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjaGFyICphbGxvY2F0ZV96ZXJvX2ZpbGxlZF9odWdlcGFnZShzaXplX3QgbGVuKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXFxuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXFxuQEAgLTE0LDcgKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2lmICFkZWZpbmVkKE1BUF9IVUdFVExCKVxcbiAjZGVmaW5lIE1BUF9IVUdFVExCXFx0MHg0MDAwMFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG5pbmRleCA4ZWIwYzU2MzBlN2UzLi45NmY3Mjg5OGViZTBhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xcbkBAIC0xNyw3ICsxNyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcXG4gaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxcbmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcXG5AQCAtMzcsNyArMzcsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgVUZGRF9GTEFHU1xcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXFxuaW5kZXggYzk3M2Q2NzIyNzIwYy4uZWI0YjI0MzNiMDBlNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbkBAIC03LDggKzcsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNzZXJ0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInVmZmQtY29tbW9uLmhcXFwiXFxuIFxcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xcbmluZGV4IGUyNGQ3YmEwMGI0NDEuLjVhMzU0YTY2NGQxZjcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXFxuQEAgLTExLDcgKzExLDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAvKlxcbiAgKiBUaGUgaGludCBhZGRyIHZhbHVlIGlzIHVzZWQgdG8gYWxsb2NhdGUgYWRkcmVzc2VzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbmluZGV4IDgwYmM5ZjU5N2I1MjEuLjQ3NTFkYjc5OGMzYWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuQEAgLTg4OSwxMTEgKzg4OSw1NCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRyZXR1cm4gcmV0IFxcdTAwM2UgMCA/IDAgOiAtZXJybm87XFxuIH1cXG4gXFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxcbi17XFxuLVxcdGludCBmZDtcXG4tXFx0c3NpemVfdCBudW1yZWFkO1xcbi1cXG4tXFx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcXG4tXFx0aWYgKGZkID09IC0xKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbi1cXHRpZiAobnVtcmVhZCBcXHUwMDNjIDEpIHtcXG4tXFx0XFx0Y2xvc2UoZmQpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0YnVmW251bXJlYWRdID0gJ1xcXFwwJztcXG4tXFx0Y2xvc2UoZmQpO1xcbi1cXG4tXFx0cmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIGJvb2wgaWdub3JlX2VpbnZhbClcXG4te1xcbi1cXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xcbi1cXHRzc2l6ZV90IG51bXdyaXR0ZW47XFxuLVxcbi1cXHRpZiAoYnVmbGVuIFxcdTAwM2MgMilcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxcXG5cXFwiLCBidWZsZW4pO1xcbi1cXG4tXFx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcXG4tXFx0aWYgKGZkID09IC0xKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIG9wZW4gZmFpbGVkOiAlc1xcXFxuXFxcIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcXG4tXFxuLVxcdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcXG4tXFx0c2F2ZWRfZXJybm8gPSBlcnJubztcXG4tXFx0Y2xvc2UoZmQpO1xcbi1cXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xcbi1cXHRpZiAobnVtd3JpdHRlbiBcXHUwMDNjIDApIHtcXG4tXFx0XFx0aWYgKGlnbm9yZV9laW52YWwgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiJXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xcXFxuXFxcIiwgcGF0aCwgKGludCkoYnVmbGVuIC0gMSksXFxuLVxcdFxcdFxcdFxcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcXG4tXFx0fVxcbi1cXHRpZiAobnVtd3JpdHRlbiAhPSBidWZsZW4gLSAxKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIHdyaXRlKCUuKnMpIGlzIHRydW5jYXRlZCwgZXhwZWN0ZWQgJXp1IGJ5dGVzLCBnb3QgJXpkIGJ5dGVzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRwYXRoLCAoaW50KShidWZsZW4gLSAxKSwgYnVmLCBidWZsZW4gLSAxLCBudW13cml0dGVuKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4te1xcbi1cXHRfX3dyaXRlX2ZpbGUocGF0aCwgYnVmLCBidWZsZW4sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7XFxuLX1cXG4tXFxuLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aClcXG4te1xcbi1cXHRjaGFyIGJ1ZlsyMV07XFxuLVxcbi1cXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJyZWFkX2ZpbGUoKVxcXCIpO1xcbi1cXG4tXFx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtLCBib29sIGlnbm9yZV9laW52YWwpXFxuLXtcXG4tXFx0Y2hhciBidWZbMjFdO1xcbi1cXG4tXFx0c3ByaW50ZihidWYsIFxcXCIlbHVcXFwiLCBudW0pO1xcbi1cXHRfX3dyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSArIDEsIGlnbm9yZV9laW52YWwpO1xcbi19XFxuLVxcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4te1xcbi1cXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xcbi19XFxuLVxcbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbi17XFxuLVxcdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTtcXG4tfVxcbi1cXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7XFxuIFxcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXFxuIHtcXG4tXFx0aWYgKHNobW1heClcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIHNobW1heCk7XFxuLVxcdGlmIChzaG1hbGwpXFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBzaG1hbGwpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHNobW1heCkge1xcbitcXHRcXHRyZXQgPSB3cml0ZV9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIiwgc2htbWF4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiRmFpbGVkIHRvIHJlc3RvcmUgc2htbWF4OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbitcXHR9XFxuK1xcdGlmIChzaG1hbGwpIHtcXG4rXFx0XFx0cmV0ID0gd3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIsIHNobWFsbCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcXG4gXFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWFkX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiRmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuIFxcbi1cXHR2YWwgPSByZWFkX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiKTtcXG4gXFx0aWYgKHZhbCBcXHUwMDNjIGxlbmd0aCkge1xcbi1cXHRcXHR3cml0ZV9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIiwgbGVuZ3RoKTtcXG4rXFx0XFx0cmV0ID0gd3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIGxlbmd0aCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBsZW5ndGgsIHN0cmVycm9yKC1yZXQpKTtcXG4gXFx0XFx0c2htbWF4ID0gdmFsO1xcbiBcXHR9XFxuIFxcbi1cXHR2YWwgPSByZWFkX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXFxcIiwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htYWxsOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbiBcXHRpZiAodmFsIFxcdTAwM2MgbnIpIHtcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIsIG5yKTtcXG4rXFx0XFx0cmV0ID0gd3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIsIG5yKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiRmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG5yLCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcdFxcdHNobWFsbCA9IHZhbDtcXG4gXFx0fVxcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbmluZGV4IDlhNDlhZjg4NzAyZTQuLjY0YTg2ZThhMGM0MWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXFxuQEAgLTgsNiArOCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2UgLyogX1NDX1BBR0VTSVpFICovXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9maWxlX3V0aWxzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCBcXHUwMDNjXFx1MDAzYyAobnIpKVxcbiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpXFxuQEAgLTE2NiwxMiArMTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XFxuICNkZWZpbmUgUEFHRU1BUF9QUkVTRU5UKGVudClcXHQoKChlbnQpIFxcdTAwMjYgKDF1bGwgXFx1MDAzY1xcdTAwM2MgNjMpKSAhPSAwKVxcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcXHQoKGVudCkgXFx1MDAyNiAoKDF1bGwgXFx1MDAzY1xcdTAwM2MgNTUpIC0gMSkpXFxuIFxcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcXG4taW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xcbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpO1xcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XFxuLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xcbi1cXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MTI6MjAuNjk1MjkzMDA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM1MTgxNzY2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzLCBzZWxmdGVzdHMsIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRmMmJhNThiMjNjZTM5OTA0YTFmNjdkZGNhYjdjMjk5NGNmNWE3YjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxOToxMjoxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcbmluZGV4IGMxNmNhMTYzYjU1ZTMuLjE1NjRiMTY5OTRhZDYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcbkBAIC0yMjgsMTIgKzIyOCwxOCBAQCBVbml0IHRlc3RpbmdcbiA9PT09PT09PT09PT1cbiBUaGlzIGZpbGU6OlxuIFxuLSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4rIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG4gXG4taGFzIHRoZSBmb2xsb3dpbmcgbmV3IGNhbGxzIHRvIGV4ZXJjaXNlIHRoZSBuZXcgcGluKigpIHdyYXBwZXIgZnVuY3Rpb25zOlxuK2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlcyB0byBleGVyY2lzZSBwaW5fdXNlcl9wYWdlcyooKTpcbiBcbi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSlcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxuKyogcGluX3VzZXJfcGFnZXMgdmlhIFBJTl9CQVNJQ19URVNUXG4rKiBwaW5fdXNlcl9wYWdlc19mYXN0IHZpYSBQSU5fRkFTVF9CRU5DSE1BUktcbisqIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtIHZpYSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXG4rXG4rUnVuIHdpdGg6OlxuK1xuKyAgbWFrZSAtQyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbVxuKyAgLi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBcbiBcbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAwZjUxM2I0MmJjMTg2Li44NjE1MDRmYTJlMzE4IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTcwMzEsOCArMTcwMzEsOSBAQCBUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ha3BtL21tXG4gRjpcdG1tL2d1cC5jXG4gRjpcdG1tL2d1cF90ZXN0LmNcbiBGOlx0bW0vZ3VwX3Rlc3QuaFxuK0Y6XHR0b29scy9tbS9ndXBfYmVuY2guY1xuK0Y6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuLUY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKVxuIE06XHRBbmRyZXcgTW9ydG9uIFx1MDAzY2FrcG1AbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbkBAIC0xNzEzNSw2ICsxNzEzNiw3IEBAIEY6XHRtbS9tZW1vcnktdGllcnMuY1xuIEY6XHRtbS9wYWdlX2lkbGUuY1xuIEY6XHRtbS9wZ2FsbG9jLXRyYWNrLmhcbiBGOlx0bW0vcHJvY2Vzc192bV9hY2Nlc3MuY1xuK0Y6XHR0b29scy9saWIvbW0vXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL1xuIFxuIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OWExNTNlZmE4ZmJmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG5AQCAtMCwwICsxLDEwNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJmaWxlX3V0aWxzLmhcIlxuK1xuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1x0c3NpemVfdCBudW1yZWFkO1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbitcdGlmIChmZCA9PSAtMSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuK1x0aWYgKG51bXJlYWQgXHUwMDNjIDEpIHtcbitcdFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRyZXR1cm4gLWVycjtcbitcdH1cbitcbitcdGJ1ZltudW1yZWFkXSA9ICdcXDAnO1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbit7XG4rXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuK1x0c3NpemVfdCBudW13cml0dGVuO1xuK1xuK1x0aWYgKGJ1ZmxlbiBcdTAwM2MgMilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuK1x0aWYgKGZkID09IC0xKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGNsb3NlKGZkKTtcbitcbitcdGlmIChudW13cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLXNhdmVkX2Vycm5vO1xuK1xuK1x0aWYgKG51bXdyaXR0ZW4gIT0gKHNzaXplX3QpKGJ1ZmxlbiAtIDEpKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdmFsO1xuK1x0aW50IHJldDtcbitcdGNoYXIgYnVmWzIxXTtcbitcdGNoYXIgKmVuZDtcbitcbitcdGlmICghbnVtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoYnVmWzBdIFx1MDAzYyAnMCcgfHwgYnVmWzBdIFx1MDAzZSAnOScpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0ZXJybm8gPSAwO1xuK1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuK1x0aWYgKGVycm5vKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0aWYgKCplbmQgPT0gJ1xcbicpXG4rXHRcdGVuZCsrO1xuK1xuK1x0aWYgKCplbmQgIT0gJ1xcMCcpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Km51bSA9IHZhbDtcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuK3tcbitcdGNoYXIgYnVmWzIxXTtcbitcbitcdHNwcmludGYoYnVmLCBcIiVsdVwiLCBudW0pO1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSArIDEpO1xuK31cbitcbitpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xuK1x0cmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaCBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MGRhYTgyYzJiMmI0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5AQCAtMCwwICsxLDEzIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cbisjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX19cbitcbisjaW5jbHVkZSBcdTAwM2NzdGRkZWYuaFx1MDAzZVxuK1xuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbitpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pO1xuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xuK2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4rXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5zaW1pbGFyaXR5IGluZGV4IDg3JVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5pbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuKysrIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbkBAIC04LDEyICs4LDE4IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcImZpbGVfdXRpbHMuaFwiXG4gI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFRIUF9TWVNGUyBcIi9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL1wiXG4gI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNFxuK1xuKyNpZm5kZWYgQVJSQVlfU0laRVxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXG4rI2VuZGlmXG4rXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTtcbiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4O1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNhdmVkX3NldHRpbmdzO1xuQEAgLTQ4LDYgKzU0LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2htZW1fZW5hYmxlZF9zdHJpbmdzW10gPSB7XG4gXHROVUxMXG4gfTtcbiBcbitzdGF0aWMgdm9pZCBwcmludF9maWxlX2FjY2Vzc19lcnJvcihjb25zdCBjaGFyICpwYXRoLCBpbnQgcmV0KVxuK3tcbitcdHByaW50ZihcIiMgJXM6ICVzICglZClcXG5cIiwgcGF0aCwgc3RyZXJyb3IoLXJldCksIC1yZXQpO1xuK31cbitcbiBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbkBAIC02MSw4ICs3Miw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuIFxuLVx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpIHtcbi1cdFx0cGVycm9yKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG5AQCAtMTAzLDEyICsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcbiBcdFx0cHJpbnRmKFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICsgMSk7XG4rXHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIG51bTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTIFwiJXNcIiwgbmFtZSk7XG5AQCAtMTE2LDcgKzEzMywxMyBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRwcmludGYoXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4rXHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZudW0pO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnVtO1xuIH1cbiBcbiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG5AQCAtMTI5LDcgKzE1MiwxMSBAQCB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG4gXHRcdHByaW50ZihcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHdyaXRlX251bShwYXRoLCBudW0pO1xuK1x0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbiB9XG4gXG4gdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbkBAIC0xNTcsOCArMTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG4gXHRcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwiKSxcbiBcdFx0LnBhZ2VzX3RvX3NjYW4gPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cIiksXG4gXHR9O1xuLVx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXG4tXHRcdHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoKTtcbitcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XG4rXHRcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuK1x0XHRcdFx0ICAgXHUwMDI2c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xuK1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKSB7XG5AQCAtMjA4LDggKzI0MiwxNSBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdHRocF93cml0ZV9udW0oXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwiLCBraHVnZXBhZ2VkLVx1MDAzZW1heF9wdGVzX3NoYXJlZCk7XG4gXHR0aHBfd3JpdGVfbnVtKFwia2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXCIsIGtodWdlcGFnZWQtXHUwMDNlcGFnZXNfdG9fc2Nhbik7XG4gXG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0d3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuK1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbitcdFx0aW50IHJldCA9IHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuK1x0XHRcdFx0ICAgIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuK1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcbitcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHRcdH1cbitcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX09SREVSUzsgaSsrKSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSlcbkBAIC0zMDcsOCArMzQ4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSlcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGlmIChyZXQgIT0gLUVOT0VOVCkge1xuK1x0XHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0XHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiBcdH1cbiBcbiBcdHJldHVybiBvcmRlcnM7XG5AQCAtMzgyLDggKzQzMCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heClcbiBcdFx0aWYgKHNzY2FuZihlbnRyeS1cdTAwM2VkX25hbWUsIFwiaHVnZXBhZ2VzLSV6dWtCXCIsIFx1MDAyNmtiKSAhPSAxKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRzaXplc1tjb3VudCsrXSA9IGtiICogMTAyNDtcbi1cdFx0a3NmdF9wcmludF9tc2coXCJbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXG5cIixcbi1cdFx0XHQgICAgICAga2IpO1xuK1x0XHRwcmludGYoXCIjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwiLCBrYik7XG4gXHR9XG4gXHRjbG9zZWRpcihkaXIpO1xuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQyNSwyOCArNDcyLDQ5IEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfc3lzZnNfcGF0aChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBucjtcbitcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcIm5yX2h1Z2VwYWdlc1wiKTtcbiBcbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbitcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yO1xuIH1cbiBcbiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwibnJfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0d3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuK1x0cmV0ID0gd3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBucjtcbitcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnI7XG4gfVxuIFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXG5AQCAtNTAyLDcgKzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKG5yX2VuYWJsZWQgXHUwMDNlIG1heCkge1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcImRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cIiwgbnJfZW5hYmxlZCwgbWF4KTtcbitcdFx0cHJpbnRmKFwiIyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxuXCIsXG4rXHRcdCAgICAgICBucl9lbmFibGVkLCBtYXgpO1xuIFx0XHRucl9lbmFibGVkID0gbWF4O1xuIFx0fVxuIFxuQEAgLTU3NCw4ICs2NDMsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX3NpZ2hhbmRsZXIoaW50IHNpZylcbiB7XG4rXHQodm9pZClzaWc7XG4rXG4gXHQvKiBleGl0KCkgd2lsbCBpbnZva2UgdGhlIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0IGhhbmRsZXIuICovXG4tXHRleGl0KEtTRlRfRkFJTCk7XG4rXHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gfVxuIFxuIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuc2ltaWxhcml0eSBpbmRleCAxMDAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuaW5kZXggMTQ0NmE2NTllNTQwOC4uMTU0ZDc0MGJlMDJlOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbkBAIC0zLDMgKzMsNCBAQCBzbGFiaW5mb1xuIHBhZ2UtdHlwZXNcbiBwYWdlX293bmVyX3NvcnRcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK2d1cF9iZW5jaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLmYyMGEzMmQ4Y2MyMmUgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC0zLDEzICszLDE1IEBAXG4gI1xuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXJcbitCVUlMRF9UQVJHRVRTICs9IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcbitHVVBfQkVOQ0hfT0JKUyA9IGd1cF9iZW5jaC5jIC4uL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIC4uL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcbitDRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLUkuLi8uLiAtcHRocmVhZFxuIExERkxBR1MgKz0gJChMSUJTKSAtcHRocmVhZFxuIFxuIGFsbDogJChCVUlMRF9UQVJHRVRTKVxuQEAgLTIyLDggKzI0LDExIEBAICQoTElCUyk6XG4gJTogJS5jXG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4rZ3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpXG4rXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJChHVVBfQkVOQ0hfT0JKUykgJChMREZMQUdTKVxuK1xuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbnNpbWlsYXJpdHkgaW5kZXggNTAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG5yZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbmluZGV4IDNmODQxYTk2Zjg3MDYuLjc1MzY5YjI2NzRhOTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4rKysgYi90b29scy9tbS9ndXBfYmVuY2guY1xuQEAgLTEwLDExICsxMCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4tI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4gXG5AQCAtMzgsMTIgKzM3LDYgQEAgc3RhdGljIGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpXG4gXHRcdHJldHVybiBcIlBJTl9GQVNUX0JFTkNITUFSS1wiO1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxuIFx0XHRyZXR1cm4gXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXCI7XG4tXHRjYXNlIEdVUF9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCJHVVBfQkFTSUNfVEVTVFwiO1xuLVx0Y2FzZSBQSU5fQkFTSUNfVEVTVDpcbi1cdFx0cmV0dXJuIFwiUElOX0JBU0lDX1RFU1RcIjtcbi1cdGNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6XG4tXHRcdHJldHVybiBcIkRVTVBfVVNFUl9QQUdFU19URVNUXCI7XG4gXHR9XG4gXHRyZXR1cm4gXCJVbmtub3duIGNvbW1hbmRcIjtcbiB9XG5AQCAtNTMsMzkgKzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcbiBcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XG4gXHRpbnQgaSwgc3RhdHVzO1xuIFxuLVx0LyogT25seSByZXBvcnQgdGltaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAqX0JFTkNITUFSSyBjb21tYW5kczogKi9cbi1cdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XG4tXHQgICAgIChjbWQgPT0gUElOX0xPTkdURVJNX0JFTkNITUFSSykpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSsrKSB7XG4tXHRcdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0XHRicmVhaztcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlcGVhdHM7IGkrKykge1xuK1x0XHRndXAuc2l6ZSA9IHNpemU7XG4rXHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuK1x0XHRpZiAoc3RhdHVzKSB7XG4rXHRcdFx0aW50IGVyciA9IGVycm5vO1xuIFxuIFx0XHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbi1cdFx0XHRcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbi1cdFx0XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuLVx0XHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCIsIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcIiwgZ3VwLnNpemUpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiXFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIiVzIGlvY3RsIGZhaWxlZDogJXNcXG5cIiwgY21kX3RvX3N0cihjbWQpLFxuK1x0XHRcdFx0c3RyZXJyb3IoZXJyKSk7XG4gXHRcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuK1x0XHRcdHJldHVybiBkYXRhO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGdvdG8gcmV0dXJuXztcbiBcbiBcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0a3NmdF9wcmludF9tc2coXCIlczogZG9uZVxcblwiLCBjbWRfdG9fc3RyKGNtZCkpO1xuK1x0XHRwcmludGYoXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbitcdFx0XHRjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbitcdFx0XHRndXAucHV0X2RlbHRhX3VzZWMpO1xuIFx0XHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcIlRydW5jYXRlZCAoc2l6ZTogJWxsZClcXG5cIiwgZ3VwLnNpemUpO1xuK1x0XHRcdHByaW50ZihcIiwgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVwiLCBndXAuc2l6ZSk7XG4rXHRcdHByaW50ZihcIlxcblwiKTtcbiBcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuIFx0fVxuIFxuLXJldHVybl86XG4tXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFwiaW9jdGwgc3RhdHVzICVkXFxuXCIsIHN0YXR1cyk7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG5AQCAtOTMsMzggKzc2LDIxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiB7XG4gXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4gXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcbi1cdGludCBmbGFncyA9IE1BUF9QUklWQVRFO1xuK1x0aW50IGZsYWdzID0gTUFQX1BSSVZBVEUsIHN0YXJ0ZWRfdGhyZWFkcyA9IDA7XG4gXHRjaGFyICpmaWxlID0gXCIvZGV2L3plcm9cIjtcbi1cdGJvb2wgaHVnZXRsYiA9IGZhbHNlO1xuK1x0Ym9vbCBodWdldGxiID0gZmFsc2UsIHRocmVhZF9lcnJvciA9IGZhbHNlO1xuK1x0dm9pZCAqdGhyZWFkX3Jlc3VsdDtcbiBcdHB0aHJlYWRfdCAqdGlkO1xuIFx0Y2hhciAqcDtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwibTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcIikpICE9IC0xKSB7XG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcIm06cjpuOkY6Zjphajp0VEx1d1dTSFwiKSkgIT0gLTEpIHtcbiBcdFx0c3dpdGNoIChvcHQpIHtcbiBcdFx0Y2FzZSAnYSc6XG4gXHRcdFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdiJzpcbi1cdFx0XHRjbWQgPSBQSU5fQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAnTCc6XG4gXHRcdFx0Y21kID0gUElOX0xPTkdURVJNX0JFTkNITUFSSztcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnYyc6XG4tXHRcdFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEdW1wIHBhZ2UgMCAoaW5kZXggMSkuIE1heSBiZSBvdmVycmlkZGVuIGxhdGVyLCBieVxuLVx0XHRcdCAqIHVzZXIncyBub24tb3B0aW9uIGFyZ3VtZW50cy5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIC53aGljaF9wYWdlcyBpcyB6ZXJvLWJhc2VkLCBzbyB0aGF0IHplcm8gY2FuIG1lYW4gXCJkb1xuLVx0XHRcdCAqIG5vdGhpbmdcIi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdwJzpcbi1cdFx0XHQvKiB3b3JrcyBvbmx5IHdpdGggRFVNUF9VU0VSX1BBR0VTX1RFU1QgKi9cbi1cdFx0XHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAnRic6XG4gXHRcdFx0Lyogc3RydG9sLCBzbyB5b3UgY2FuIHBhc3MgZmxhZ3MgaW4gaGV4IGZvcm0gKi9cbiBcdFx0XHRndXAuZ3VwX2ZsYWdzID0gc3RydG9sKG9wdGFyZywgMCwgMCk7XG5AQCAtMTQxLDcgKzEwNyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Y2FzZSAnbic6XG4gXHRcdFx0bnJfcGFnZXMgPSBhdG9pKG9wdGFyZyk7XG4gXHRcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHRcdFx0bnJfcGFnZXMgPSBzaXplIC8gcHNpemUoKTtcbitcdFx0XHRcdG5yX3BhZ2VzID0gc2l6ZSAvIGdldHBhZ2VzaXplKCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ3QnOlxuIFx0XHRcdHRocCA9IDE7XG5AQCAtMTQ5LDkgKzExNSw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Y2FzZSAnVCc6XG4gXHRcdFx0dGhwID0gMDtcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnVSc6XG4tXHRcdFx0Y21kID0gR1VQX0JBU0lDX1RFU1Q7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ3UnOlxuIFx0XHRcdGNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcbiBcdFx0XHRicmVhaztcbkBAIC0xNzMsNTIgKzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0aHVnZXRsYiA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiV3JvbmcgYXJndW1lbnRcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiV3JvbmcgYXJndW1lbnRcXG5cIik7XG4rXHRcdFx0ZXhpdCgxKTtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKG9wdGluZCBcdTAwM2MgYXJnYykge1xuLVx0XHRpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV4YW1wbGU6XG4tXHRcdCAqXG4tXHRcdCAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxXG4tXHRcdCAqXG4tXHRcdCAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTdcbi1cdFx0ICovXG4tXG4tXHRcdHdoaWxlICgob3B0aW5kIFx1MDAzYyBhcmdjKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cbi1cdFx0XHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSArIDE7XG4tXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzW2V4dHJhX2FyZ19jb3VudF0gPSBwYWdlX2luZGV4O1xuLVx0XHRcdGV4dHJhX2FyZ19jb3VudCsrO1xuLVx0XHRcdG9wdGluZCsrO1xuLVx0XHR9XG4rXHRpZiAob3B0aW5kICE9IGFyZ2MpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiVW5leHBlY3RlZCBhcmd1bWVudCAnJXMnXFxuXCIsIGFyZ3Zbb3B0aW5kXSk7XG4rXHRcdGV4aXQoMSk7XG4gXHR9XG4gXG4tXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0aWYgKGdldHVpZCgpKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4gXG4gXHRpZiAoaHVnZXRsYikge1xuIFx0XHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4gXG4tXHRcdGlmICghaHBfc2l6ZSlcbi1cdFx0XHRrc2Z0X2V4aXRfc2tpcChcIkh1Z2VUTEIgaXMgdW5hdmFpbGFibGVcXG5cIik7XG4rXHRcdGlmICghaHBfc2l6ZSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIkNvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcXG5cIik7XG4rXHRcdFx0cmV0dXJuIDE7XG4rXHRcdH1cbiBcbiBcdFx0c2l6ZSA9IChzaXplICsgaHBfc2l6ZSAtIDEpIFx1MDAyNiB+KGhwX3NpemUgLSAxKTtcbi1cdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwiTm90IGVub3VnaCBodWdlIHBhZ2VzXFxuXCIpO1xuK1x0XHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXHRcdFx0cmV0dXJuIDE7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdGtzZnRfc2V0X3BsYW4obnRocmVhZHMpO1xuLVxuIFx0ZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTtcbi1cdGlmIChmaWxlZCBcdTAwM2MgMClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiVW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxuXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRpZiAoZmlsZWQgXHUwMDNjIDApIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiVW5hYmxlIHRvIG9wZW4gJXM6ICVzXFxuXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuIFxuIFx0Z3VwLm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXM7XG4gXHRpZiAod3JpdGUpXG5AQCAtMjI3LDI2ICsxNzksMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuIFx0aWYgKGd1cF9mZCA9PSAtMSkge1xuIFx0XHRzd2l0Y2ggKGVycm5vKSB7XG4tXHRcdGNhc2UgRUFDQ0VTOlxuLVx0XHRcdGlmIChnZXR1aWQoKSlcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwiKTtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBFTk9FTlQ6XG4gXHRcdFx0aWYgKG9wZW5kaXIoXCIvc3lzL2tlcm5lbC9kZWJ1Z1wiKSA9PSBOVUxMKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCJtb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCIpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiY2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcblwiKTtcbitcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiY2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xcblwiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcImZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwiLCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwiLCBHVVBfVEVTVF9GSUxFLFxuK1x0XHRcdFx0c3RyZXJyb3IoZXJybm8pKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuLVx0XHRrc2Z0X2V4aXRfcGFzcygpO1xuK1x0XHRnb3RvIGVycl9jbG9zZV9maWxlZDtcbiBcdH1cbiBcbiBcdHAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCBmaWxlZCwgMCk7XG4tXHRpZiAocCA9PSBNQVBfRkFJTEVEKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJtbWFwOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0aWYgKHAgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtbWFwOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRnb3RvIGVycl9jbG9zZV9ndXBfZmQ7XG4rXHR9XG4gXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7XG4gXG4gXHRpZiAodGhwID09IDEpXG5AQCAtMjU1LDIxICsyMDUsNDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRtYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7XG4gXG4gXHQvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi9cbi1cdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyBndXAuYWRkciArIHNpemU7IHAgKz0gcHNpemUoKSlcbitcdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyBndXAuYWRkciArIHNpemU7IHAgKz0gZ2V0cGFnZXNpemUoKSlcbiBcdFx0cFswXSA9IDA7XG4gXG4gXHR0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7XG4tXHRhc3NlcnQodGlkKTtcbitcdGlmICghdGlkKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCB0aHJlYWRzOiAlc1xcblwiLFxuK1x0XHRcdG50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRnb3RvIGVycl91bm1hcDtcbitcdH1cbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcbiBcdFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCBcdTAwMjZndXApO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwicHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xcblwiLCBzdHJlcnJvcihyZXQpKTtcbitcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdHN0YXJ0ZWRfdGhyZWFkcysrO1xuIFx0fVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkrKykge1xuLVx0XHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBOVUxMKTtcbi1cdFx0YXNzZXJ0KHJldCA9PSAwKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXJ0ZWRfdGhyZWFkczsgaSsrKSB7XG4rXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIFx1MDAyNnRocmVhZF9yZXN1bHQpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwicHRocmVhZF9qb2luIGZhaWxlZDogJXNcXG5cIiwgc3RyZXJyb3IocmV0KSk7XG4rXHRcdFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcbitcdFx0fSBlbHNlIGlmICh0aHJlYWRfcmVzdWx0KVxuK1x0XHRcdHRocmVhZF9lcnJvciA9IHRydWU7XG4gXHR9XG4gXG4gXHRmcmVlKHRpZCk7XG4gXG4tXHRrc2Z0X2V4aXRfcGFzcygpO1xuK1x0aWYgKHRocmVhZF9lcnJvcilcbitcdFx0Z290byBlcnJfdW5tYXA7XG4rXG4rXHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XG4rXHRjbG9zZShndXBfZmQpO1xuK1x0Y2xvc2UoZmlsZWQpO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3VubWFwOlxuK1x0bXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpO1xuK2Vycl9jbG9zZV9ndXBfZmQ6XG4rXHRjbG9zZShndXBfZmQpO1xuK2Vycl9jbG9zZV9maWxlZDpcbitcdGNsb3NlKGZpbGVkKTtcbitcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCAyZDUzNjYxOTZlMzA5Li45YzAzNjI0ZmQyOTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMzcsNyArMzcsOCBAQCBlbmRpZlxuICMgTERMSUJTLlxuIE1BS0VGTEFHUyArPSAtLW5vLWJ1aWx0aW4tcnVsZXNcbiBcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxuK0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXG4rQ0ZMQUdTICs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4gQ0ZMQUdTICs9IC1XdW5yZWFjaGFibGUtY29kZVxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxuIFxuQEAgLTU3LDggKzU4LDggQEAgZW5kaWZcbiBcbiBURVNUX0dFTl9GSUxFUyA9IGNvd1xuIFRFU1RfR0VOX0ZJTEVTICs9IGNvbXBhY3Rpb25fdGVzdFxuK1RFU1RfR0VOX0ZJTEVTICs9IGd1cFxuIFRFU1RfR0VOX0ZJTEVTICs9IGd1cF9sb25ndGVybVxuLVRFU1RfR0VOX0ZJTEVTICs9IGd1cF90ZXN0XG4gVEVTVF9HRU5fRklMRVMgKz0gaG1tLXRlc3RzXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tYWR2aXNlXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tbWFwXG5AQCAtMTg3LDggKzE4OCwxMCBAQCBURVNUX0ZJTEVTICs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbiBcbi0kKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbiskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcbitcdFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG4rJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4rXHRcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuIFxuICQoT1VUUFVUKS91ZmZkLXN0cmVzczogdWZmZC1jb21tb24uY1xuICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmNcbkBAIC0yMTcsNyArMjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyArPSAtbTMyIC1teHNhdmVcbiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICs9IC1scnQgLWxkbCAtbG1cbiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4rXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKVxuIGVuZGlmXG4gXG5AQCAtMjI2LDcgKzIyOSw3IEBAICQoQklOQVJJRVNfNjQpOiBDRkxBR1MgKz0gLW02NCAtbXhzYXZlXG4gJChCSU5BUklFU182NCk6IExETElCUyArPSAtbHJ0IC1sZGxcbiAkKEJJTkFSSUVTXzY0KTogJChPVVRQVVQpLyVfNjQ6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4rXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtNjQsJCh0KSkpKVxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuQEAgLTE1LDkgKzE1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTUFQX1NJWkVfTUJcdDEwMFxuICNkZWZpbmUgTUFQX1NJWkVcdChNQVBfU0laRV9NQiAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbmluZGV4IDhhYTUyNDlkOWJlZjYuLjMyNjRhODI4NTc1YmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA0NWI4NGY3YjM2NGUwLi4yODlhZWQyZWJhYzAyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMjUsNyArMjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gdWludDY0X3QgcGFnZV9zaXplO1xuIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpbmNsdWRlIFwiLi4vcGlkZmQvcGlkZmQuaFwiXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjRjOWUxNGRiYjQzNGFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG5AQCAtMCwwICsxLDMyOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbisjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuK1xuKy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xuKyNkZWZpbmUgRk9MTF9XUklURVx0MHgwMVx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXG4rXG4rLyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovXG4rc3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9O1xuK1xuKyNkZWZpbmUgR1VQX1RFU1RfRklMRSBcIi9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XCJcbisjZGVmaW5lIE5SX0hVR0VfUEFHRVMgMTI4XG4rXG4rSFVHRVRMQl9TRVRVUF9ERUZBVUxUX1BBR0VTKE5SX0hVR0VfUEFHRVMpXG4rXG4rRklYVFVSRShndXBfdGVzdClcbit7XG4rXHRpbnQgZ3VwX2ZkO1xuK1x0Y2hhciAqYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVChndXBfdGVzdClcbit7XG4rXHRib29sIHRocDtcbitcdGJvb2wgaHVnZXRsYjtcbitcdGJvb2wgd3JpdGU7XG4rXHRib29sIHNoYXJlZDtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGUpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IHRydWUsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSB0cnVlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF9odWdldGxiKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gdHJ1ZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZClcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfdGhwKVxuK3tcbitcdC50aHAgPSB0cnVlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF9odWdldGxiKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gdHJ1ZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGd1cF90ZXN0KVxuK3tcbitcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEU7XG4rXHRpbnQgemVyb19mZDtcbitcdGNoYXIgKnA7XG4rXG4rXHRzZWxmLVx1MDAzZXNpemUgPSAxMjggKiBNQjtcbitcbitcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuK1xuK1x0XHRpZiAoIWhwX3NpemUpXG4rXHRcdFx0U0tJUChyZXR1cm4sIFwiSHVnZVRMQiBub3QgYXZhaWxhYmxlXFxuXCIpO1xuK1xuK1x0XHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcdTAwM2MgTlJfSFVHRV9QQUdFUylcbitcdFx0XHRTS0lQKHJldHVybiwgXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXG4rXHRcdHNlbGYtXHUwMDNlc2l6ZSA9IE5SX0hVR0VfUEFHRVMgKiBocF9zaXplO1xuK1x0XHRtbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpO1xuK1x0fVxuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNlc2hhcmVkKVxuK1x0XHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xuK1xuK1x0LyogemVyb19mZCBoYXMgdG8gYmUgXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXG4rXHR6ZXJvX2ZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xuK1xuK1x0LyogZ3VwX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbitcdHNlbGYtXHUwMDNlZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZ3VwX2ZkLCAwKTtcbitcbitcdHNlbGYtXHUwMDNlYWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cdTAwM2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHRcdCAgbW1hcF9mbGFncywgemVyb19mZCwgMCk7XG4rXG4rXHRBU1NFUlRfTkUoc2VsZi1cdTAwM2VhZGRyLCBNQVBfRkFJTEVEKSB7XG4rXHRcdGludCBlcnIgPSBlcnJubztcbitcbitcdFx0Y2xvc2UoemVyb19mZCk7XG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbitcdFx0VEhfTE9HKFwibW1hcCBmYWlsZWQ6ICVzXCIsIHN0cmVycm9yKGVycikpO1xuK1x0fVxuK1x0Y2xvc2UoemVyb19mZCk7XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2V0aHApXG4rXHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuK1x0ZWxzZSBpZiAoIXZhcmlhbnQtXHUwMDNlaHVnZXRsYilcbitcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbitcdGZvciAocCA9IHNlbGYtXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyXG4rXHRcdFx0KyBzZWxmLVx1MDAzZXNpemU7IHAgKz0gcHNpemUoKSlcbitcdFx0cFswXSA9IDA7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpXG4re1xuK1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbitcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX2d1cF9jbWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHRcdCBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLFxuK1x0XHRcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxuK1x0XHRcdCB1bnNpZ25lZCBsb25nIGNvbW1hbmQsXG4rXHRcdFx0IHVuc2lnbmVkIGludCB0ZXN0X2ZsYWdzLFxuK1x0XHRcdCB1bnNpZ25lZCBpbnQgd2hpY2hfcGFnZSlcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7XG4rXHRcdFx0LmFkZHIgPSAodW5zaWduZWQgbG9uZylzZWxmLVx1MDAzZWFkZHIsXG4rXHRcdFx0LnNpemUgPSBzZWxmLVx1MDAzZXNpemUsXG4rXHRcdFx0Lm5yX3BhZ2VzX3Blcl9jYWxsID0gbnJfcGFnZXNfbGlzdFtpXSBcdTAwM2MgMCA/XG4rXHRcdFx0XHRzZWxmLVx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXSxcbitcdFx0XHQuZ3VwX2ZsYWdzID0gdmFyaWFudC1cdTAwM2V3cml0ZSA/IEZPTExfV1JJVEUgOiAwLFxuK1x0XHRcdC50ZXN0X2ZsYWdzID0gdGVzdF9mbGFncyxcbitcdFx0XHQud2hpY2hfcGFnZXMgPSB7IHdoaWNoX3BhZ2UgfSxcbitcdFx0fTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBjb21tYW5kLCBcdTAwMjZndXApLCAwKTtcbitcdH1cbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9CQVNJQ19URVNULCAwLCAwKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcylcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9CQVNJQ19URVNULCAwLCAwKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBkdW1wX3VzZXJfcGFnZXNfd2l0aF9nZXQpXG4re1xuK1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgMCwgMSk7XG4rfVxuK1xuK1RFU1RfRihndXBfdGVzdCwgZHVtcF91c2VyX3BhZ2VzX3dpdGhfcGluKVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgRFVNUF9VU0VSX1BBR0VTX1RFU1QsXG4rXHRcdCAgICBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTiwgMSk7XG4rfVxuK1xuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9GQVNUX0JFTkNITUFSSywgMCwgMCk7XG4rfVxuK1xuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdClcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9GQVNUX0JFTkNITUFSSywgMCwgMCk7XG4rfVxuK1xuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pXG4re1xuK1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLLCAwLCAwKTtcbit9XG4rXG4rVEVTVChkdW1wX3VzZXJfcGFnZXNfc3BhcnNlX2luZGljZXMpXG4re1xuK1x0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuK1x0dW5zaWduZWQgbG9uZyBzaXplID0gMTI4ICogTUI7XG4rXHRpbnQgemVyb19mZCwgZ3VwX2ZkO1xuK1x0Y2hhciAqYWRkciwgKnA7XG4rXG4rXHR6ZXJvX2ZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xuK1xuK1x0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKGd1cF9mZCwgMCk7XG4rXG4rXHRhZGRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgemVyb19mZCwgMCk7XG4rXHRjbG9zZSh6ZXJvX2ZkKTtcbitcdEFTU0VSVF9ORShhZGRyLCBNQVBfRkFJTEVEKTtcbitcbitcdG1hZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9IVUdFUEFHRSk7XG4rXG4rXHRmb3IgKHAgPSBhZGRyOyAodW5zaWduZWQgbG9uZylwIFx1MDAzYyAodW5zaWduZWQgbG9uZylhZGRyICsgc2l6ZTtcbitcdCAgICAgcCArPSBwc2l6ZSgpKVxuK1x0XHRwWzBdID0gMDtcbitcbitcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjtcbitcdGd1cC5zaXplID0gc2l6ZTtcbitcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IHNpemUgLyBwc2l6ZSgpO1xuK1x0Z3VwLmd1cF9mbGFncyA9IEZPTExfV1JJVEU7XG4rXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuK1x0Z3VwLndoaWNoX3BhZ2VzWzFdID0gMjA7XG4rXHRndXAud2hpY2hfcGFnZXNbMl0gPSAweDEwMDE7XG4rXG4rXHRBU1NFUlRfRVEoaW9jdGwoZ3VwX2ZkLCBEVU1QX1VTRVJfUEFHRVNfVEVTVCwgXHUwMDI2Z3VwKSwgMCk7XG4rXG4rXHRtdW5tYXAoYWRkciwgc2l6ZSk7XG4rXHRjbG9zZShndXBfZmQpO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0aW50IGZkO1xuK1x0Y2hhciAqZmlsZSA9IFwiL2Rldi96ZXJvXCI7XG4rXG4rXHRmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbitcbitcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0aWYgKGZkID09IC0xKSB7XG4rXHRcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRcdGlmIChlcnJubyA9PSBFQUNDRVMpXG4rXHRcdFx0a3NmdF9leGl0X3NraXAoXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XG4rXHRcdFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpO1xuK1xuK1x0XHRcdGlmICghZGVidWdmcykge1xuK1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCIpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRjbG9zZWRpcihkZWJ1Z2ZzKTtcbitcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXG5cIik7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwiLCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IGUyNjQyZWNhMGQwMmIuLmZhMWE2NTE5NjNmZDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbkBAIC0xMCw5ICsxMCw2IEBAXG4gICogYnVncy5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4tXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG5AQCAtMzMsNiArMzAsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4gXG4gLypcbiAgKiBUaGlzIGlzIGEgcHJpdmF0ZSBVQVBJIHRvIHRoZSBrZXJuZWwgdGVzdCBtb2R1bGUgc28gaXQgaXNuJ3QgZXhwb3J0ZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuQEAgLTE4LDcgKzE4LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1mZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNClcbiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcbmluZGV4IGVkM2Q5MmU4NjJkODcuLjliNzI0YWY2NmU5MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG5AQCAtMjYsNyArMjYsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxuICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbmluZGV4IGJjMjAyZTRlZDJiZGEuLjIwODY0ZTdkNGUwYzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG5AQCAtMjEsOSArMjEsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdGZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZm5kZWYgTUFEVl9TT0ZUX09GRkxJTkVcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5pbmRleCBmYjQ2MDA1NzBlMTMxLi45NDk1OTc0ZWNjYmVhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuQEAgLTIwLDcgKzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5AQCAtMTAsNyArMTAsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbkBAIC0yNSw3ICsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggMGQ2YzcxZWQyZmFlMy4uYmEyMWY1ODUyNWU0MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyArMjIsNiBAQFxuICNpbmNsdWRlIFwibGludXgvbWFnaWMuaFwiXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTE0NCw2ICsxNDMsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxuIFx0Y2hhciBidWZbMSBcdTAwM2NcdTAwM2MgMTBdO1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiBcdGNoYXIgKnN0ciwgKmVuZDtcbitcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KTtcbkBAIC0xNjMsOCArMTYzLDkgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcbiBcdFx0ICAgICBtYWpvcihwYXRoX3N0YXQuc3RfZGV2KSwgbWlub3IocGF0aF9zdGF0LnN0X2RldikpXG4gXHQgICAgXHUwMDNlPSBzaXplb2YocGF0aCkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwiLCBfX2Z1bmNfXyk7XG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwicmVhZF9maWxlKHVldmVudClcIik7XG4rXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJyZWFkX2ZpbGUoJXMpOiAlc1xcblwiLCBwYXRoLCBzdHJlcnJvcigtcmV0KSk7XG4gXHRpZiAoc3Ryc3RyKGJ1ZiwgXCJERVZUWVBFPWRpc2tcIikpIHtcbiBcdFx0LyogRm91bmQgaXQgKi9cbiBcdFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG5AQCAtMzQ1LDcgKzM0Niw3IEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4ge1xuIFx0Y29uc3QgaW50IG9wZW5fb3B0ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBPX1JET05MWSA6IE9fUkRXUjtcbiBcdGNvbnN0IGludCBtbWFwX3Byb3QgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IFBST1RfUkVBRCA6IChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTtcbi1cdGludCBmZDtcbitcdGludCBmZCwgcmV0O1xuIFx0dm9pZCAqcDtcbiBcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiBcbkBAIC0zODksNyArMzkwLDExIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1tYXAoKVwiKTtcbiBcbiBcdC8qIERyb3AgcGFnZSBjYWNoZSAqL1xuLVx0d3JpdGVfZmlsZShcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wiLCBcIjNcIiwgMik7XG4rXHRyZXQgPSB3cml0ZV9maWxlKFwiL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzXCIsIFwiM1wiLCAyKTtcbitcdGlmIChyZXQpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIndyaXRlX2ZpbGUoZHJvcF9jYWNoZXMpOiAlc1xcblwiLFxuK1x0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuK1xuIFx0c3VjY2VzcyhcIk9LXCIpO1xuIFx0cmV0dXJuIHA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbmluZGV4IDVmZDc3OTJhMGQ0NzkuLjY3MTFmNGM2MTM3MTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbkBAIC0xNSw3ICsxNSw2IEBAXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXHUwMDNjaW5jbHVkZS92ZHNvL3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBLU01fU1lTRlNfUEFUSCBcIi9zeXMva2VybmVsL21tL2tzbS9cIlxuICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbmluZGV4IGYxOWQ1M2M2OTU3NjQuLmEzNWUyYjU3ZTA1YjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbkBAIC01LDcgKzUsNiBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuQEAgLTE2LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuIFxuICNkZWZpbmUgVFdPTUVHXHRcdCgyXHUwMDNjXHUwMDNjMjApXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5pbmRleCBjZmQxOTg3MzM5YzEzLi5mOTVlM2VhNTdjM2E5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcbkBAIC0yNCw3ICsyNCw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXHRcdChQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8XHRcXFxuIFx0XHRcdFx0XHQgUEFHRV9JU19GSUxFIHwgUEFHRV9JU19QUkVTRU5UIHxcdFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbmluZGV4IDgyYzZlOTZlYTZlYjMuLmY5ZWMxNDA4YTZlMzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuIFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5AQCAtNDUsOCArNDUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3B0cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc2V0am1wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiAjaW5jbHVkZSBcInBrZXktaGVscGVycy5oXCJcbiBcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0xMzAsMzAgKzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7XG4gXHRmaVxuIH1cbiBcbi1ydW5fZ3VwX21hdHJpeCgpIHtcbi0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b25cbi0gICAgbG9jYWwgaHVnZXRsYl9tYj0yNTZcbi1cbi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgXCItSCAtbSAkaHVnZXRsYl9tYlwiOyBkb1xuLSAgICAgICAgIyAtdTogZ3VwLWZhc3QsIC1VOiBndXAtYmFzaWMsIC1hOiBwaW4tZmFzdCwgLWI6IHBpbi1iYXNpYywgLUw6IHBpbi1sb25ndGVybVxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXG4tICAgICAgICAgICAgZm9yIHdyaXRlIGluIC13IC1XOyBkb1xuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFwiIFwiOyBkb1xuLSAgICAgICAgICAgICAgICAgICAgIyAtbjogSG93IG1hbnkgcGFnZXMgdG8gZmV0Y2ggdG9nZXRoZXI/ICA1MTIgaXMgc3BlY2lhbFxuLSAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0J3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXG4tICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCBwYXJ0aWFsIGd1cCB3aGVuIGhpdCBhIGh1Z2UgaW4gd2hhdGV2ZXIgZm9ybVxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcIi1uIDFcIiBcIi1uIDUxMlwiIFwiLW4gMTIzXCIgXCItbiAtMVwiOyBkb1xuLSAgICAgICAgICAgICAgICAgICAgICAgIENBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF90ZXN0IFxcXG4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtXG4tICAgICAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgICAgIGRvbmVcbi0gICAgICAgICAgICBkb25lXG4tICAgICAgICBkb25lXG4tICAgIGRvbmVcbi19XG4tXG4gIyBmaWx0ZXIgNjRiaXQgYXJjaGl0ZWN0dXJlc1xuIEFSQ0g2NFNUUj1cImFybTY0IG1pcHM2NCBwYXJpc2M2NCBwcGM2NCBwcGM2NGxlIHJpc2N2NjQgczM5MHggc3BhcmM2NCB4ODZfNjRcIlxuIGlmIFsgLXogXCIkQVJDSFwiIF07IHRoZW5cbkBAIC0yNzUsMTggKzI1MSw3IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCJtbWFwXCIgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlXG4gXG4taWYgJFJVTl9BTEw7IHRoZW5cbi0gICAgcnVuX2d1cF9tYXRyaXhcbi1lbHNlXG4tICAgICMgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAxXG4tICAgIENBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXG4tICAgICMgcGluX3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxXG4tICAgIENBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIC0xXG4tZmlcbi0jIER1bXAgcGFnZXMgMCwgMTksIGFuZCA0MDk2LCB1c2luZyBwaW5fdXNlcl9wYWdlczpcbi1DQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXG4rQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwXG4gQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX2xvbmd0ZXJtXG4gXG4gQ0FURUdPUlk9XCJ1c2VyZmF1bHRmZFwiIHJ1bl90ZXN0IC4vdWZmZC11bml0LXRlc3RzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5pbmRleCBlMTk4ZmFjZjc4YmI1Li4xNjg3ZTk4NGFhMTRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcbkBAIC05LDcgKzksNiBAQFxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgUEFHRU1BUF9GSUxFX1BBVEggXCIvcHJvYy9zZWxmL3BhZ2VtYXBcIlxuICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmNcbmluZGV4IDg2YTYwMzY5MjgyNjEuLjBlMDgzYWI3MWFmNjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5AQCAtMjEsNyArMjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIHVpbnQ2NF90IHBhZ2VzaXplO1xuIHVuc2lnbmVkIGludCBwYWdlc2hpZnQ7XG5AQCAtMTQ2LDcgKzE0NSwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0aWYgKHJldCBcdTAwM2U9IElOUFVUX01BWClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXM6IERlYnVnZnMgaW5wdXQgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFxuLVx0d3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XG4rXHRyZXQgPSB3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgKyAxKTtcbitcdGlmIChyZXQpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIndyaXRlX2ZpbGUoJXMpOiAlc1xcblwiLCBTUExJVF9ERUJVR0ZTLFxuK1x0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuIH1cbiBcbiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG5pbmRleCA1MGQwODA1YjY1ZGI5Li5hMDRmNTg4ZGY3ODBmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmICFkZWZpbmVkKE1BUF9IVUdFVExCKVxuICNkZWZpbmUgTUFQX0hVR0VUTEJcdDB4NDAwMDBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbmluZGV4IDhlYjBjNTYzMGU3ZTMuLjk2ZjcyODk4ZWJlMGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuQEAgLTE3LDcgKzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcbiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5AQCAtMzcsNyArMzcsNiBAQFxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgVUZGRF9GTEFHU1x0KE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jXG5pbmRleCBjOTczZDY3MjI3MjBjLi5lYjRiMjQzM2IwMGU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuQEAgLTcsOCArNyw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gI2luY2x1ZGUgXCJ1ZmZkLWNvbW1vbi5oXCJcbiBcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbkBAIC0xMSw3ICsxMSw2IEBAXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gLypcbiAgKiBUaGUgaGludCBhZGRyIHZhbHVlIGlzIHVzZWQgdG8gYWxsb2NhdGUgYWRkcmVzc2VzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5pbmRleCA4MGJjOWY1OTdiNTIxLi40NzUxZGI3OThjM2FjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbkBAIC04ODksMTExICs4ODksNTQgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdHJldHVybiByZXQgXHUwMDNlIDAgPyAwIDogLWVycm5vO1xuIH1cbiBcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbi17XG4tXHRpbnQgZmQ7XG4tXHRzc2l6ZV90IG51bXJlYWQ7XG4tXG4tXHRmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpO1xuLVx0aWYgKGZkID09IC0xKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuLVx0aWYgKG51bXJlYWQgXHUwMDNjIDEpIHtcbi1cdFx0Y2xvc2UoZmQpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdGJ1ZltudW1yZWFkXSA9ICdcXDAnO1xuLVx0Y2xvc2UoZmQpO1xuLVxuLVx0cmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIGJvb2wgaWdub3JlX2VpbnZhbClcbi17XG4tXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuLVx0c3NpemVfdCBudW13cml0dGVuO1xuLVxuLVx0aWYgKGJ1ZmxlbiBcdTAwM2MgMilcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiSW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxcblwiLCBidWZsZW4pO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgb3BlbiBmYWlsZWQ6ICVzXFxuXCIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XG4tXG4tXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4tXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuLVx0Y2xvc2UoZmQpO1xuLVx0ZXJybm8gPSBzYXZlZF9lcnJubztcbi1cdGlmIChudW13cml0dGVuIFx1MDAzYyAwKSB7XG4tXHRcdGlmIChpZ25vcmVfZWludmFsIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxuXCIsIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLFxuLVx0XHRcdFx0YnVmLCBzdHJlcnJvcihlcnJubykpO1xuLVx0fVxuLVx0aWYgKG51bXdyaXR0ZW4gIT0gYnVmbGVuIC0gMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgd3JpdGUoJS4qcykgaXMgdHJ1bmNhdGVkLCBleHBlY3RlZCAlenUgYnl0ZXMsIGdvdCAlemQgYnl0ZXNcXG5cIixcbi1cdFx0XHRcdHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pO1xuLX1cbi1cbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcbi19XG4tXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKVxuLXtcbi1cdGNoYXIgYnVmWzIxXTtcbi1cbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJyZWFkX2ZpbGUoKVwiKTtcbi1cbi1cdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSwgYm9vbCBpZ25vcmVfZWludmFsKVxuLXtcbi1cdGNoYXIgYnVmWzIxXTtcbi1cbi1cdHNwcmludGYoYnVmLCBcIiVsdVwiLCBudW0pO1xuLVx0X193cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxLCBpZ25vcmVfZWludmFsKTtcbi19XG4tXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4te1xuLVx0cmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcbi19XG4tXG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gdHJ1ZSk7XG4tfVxuLVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWFsbCwgc2htbWF4O1xuIFxuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZClcbiB7XG4tXHRpZiAoc2htbWF4KVxuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBzaG1tYXgpO1xuLVx0aWYgKHNobWFsbClcbi1cdFx0d3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIiwgc2htYWxsKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoc2htbWF4KSB7XG4rXHRcdHJldCA9IHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCIsIHNobW1heCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlc3RvcmUgc2htbWF4OiAlc1xcblwiLFxuK1x0XHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4rXHR9XG4rXHRpZiAoc2htYWxsKSB7XG4rXHRcdHJldCA9IHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIHNobWFsbCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlc3RvcmUgc2htYWxsOiAlc1xcblwiLFxuK1x0XHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4rXHR9XG4gfVxuIFxuIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnIgPSBsZW5ndGggLyBwc2l6ZSgpO1xuIFx0dW5zaWduZWQgbG9uZyB2YWw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCIsXG4rXHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4gXG4tXHR2YWwgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCIpO1xuIFx0aWYgKHZhbCBcdTAwM2MgbGVuZ3RoKSB7XG4tXHRcdHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCIsIGxlbmd0aCk7XG4rXHRcdHJldCA9IHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCIsIGxlbmd0aCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobW1heDogJXNcXG5cIixcbitcdFx0XHRcdFx0ICAgbGVuZ3RoLCBzdHJlcnJvcigtcmV0KSk7XG4gXHRcdHNobW1heCA9IHZhbDtcbiBcdH1cbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIik7XG4rXHRyZXQgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJGYWlsZWQgdG8gcmVhZCAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXG5cIixcbitcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcdGlmICh2YWwgXHUwMDNjIG5yKSB7XG4tXHRcdHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIG5yKTtcbitcdFx0cmV0ID0gd3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcIiwgbnIpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCIsXG4rXHRcdFx0XHRcdCAgIG5yLCBzdHJlcnJvcigtcmV0KSk7XG4gXHRcdHNobWFsbCA9IHZhbDtcbiBcdH1cbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li42NGE4NmU4YTBjNDFiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC04LDYgKzgsOCBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlIC8qIF9TQ19QQUdFU0laRSAqL1xuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NtbS9maWxlX3V0aWxzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCBcdTAwM2NcdTAwM2MgKG5yKSlcbiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpXG5AQCAtMTY2LDEyICsxNjgsNiBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTtcbiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpXHQoKChlbnQpIFx1MDAyNiAoMXVsbCBcdTAwM2NcdTAwM2MgNjMpKSAhPSAwKVxuICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KVx0KChlbnQpIFx1MDAyNiAoKDF1bGwgXHUwMDNjXHUwMDNjIDU1KSAtIDEpKVxuIFxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpO1xuLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbi1cbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aCk7XG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjEyOjIwLjY5NTI5NTE0OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNTE4MTM2ODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBXb3J0aEZ1enppbmc9ZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IG5lY2Vzc2l0YXRlIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGEgZmFpciBudW1iZXIgb2YgZmlsZXMsIHNvIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuRmlyc3QgcGFzczogSSBzZWUgdGhlIGNoYW5nZXMgc3BhbiBgRG9jdW1lbnRhdGlvbi9gLCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIChhbHdheXMgYSBnb29kIHNpZ24gb2YgY29kZSBjaHVybiBvciBhZGRpdGlvbiksIHBsdXMgYSBsb3Qgb2YgYWN0aXZpdHkgd2l0aGluIGB0b29scy9saWIvbW0vYCwgYHRvb2xzL21tL2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gTXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbjsgdGhpcyBzY3JlYW1zICp1c2Vyc3BhY2UgdG9vbHMgYW5kIHRlc3RzKiByYXRoZXIgdGhhbiBjb3JlIGtlcm5lbCBjb2RlLlxuXG5MZXQncyBkbyBhIHF1aWNrLCBtb3JlIGdyYW51bGFyIGNoZWNrIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gQSBzZWNvbmQgZ2xhbmNlIGF0IHRoZSBmaWxlIGxpc3QgcmVpbmZvcmNlcyB0aGlzIGluaXRpYWwgYXNzZXNzbWVudC4gYERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0YCBpcyBkb2N1bWVudGF0aW9uLCBgTUFJTlRBSU5FUlNgIGlzLCB3ZWxsLCBgTUFJTlRBSU5FUlNgLiBUaGUgYHRvb2xzL2xpYi9tbS9gIGFuZCBgdG9vbHMvbW0vYCBkaXJlY3RvcmllcyBhcHBlYXIgdG8gY29udGFpbiBzdXBwb3J0aW5nIGxpYnJhcmllcyBhbmQgYnVpbGQgZmlsZXMsIGFsb25nIHdpdGggdXNlciBzcGFjZSB0b29scy4gVGhlIGJpZ2dlc3QgY2h1bmsgb2YgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCAtIHRoZXNlIGFyZSBzZWxmIHRlc3RzLCBub3Qga2VybmVsIGRyaXZlcnMuXG5cbkknbSBjb25maWRlbnQgSSd2ZSBnb3QgdGhpcyByaWdodC4gKlRoZXJlIGlzIGFic29sdXRlbHkgbm8gbW9kaWZpY2F0aW9uIHRvIGFueSBjb3JlIGtlcm5lbCBjb21wb25lbnRzLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiogSXQncyBhbGwgdXNlcnNwYWNlIHRvb2xzIGFuZCB0ZXN0cywgbGlrZWx5IHJlZmFjdG9yaW5nLCBvciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIHNlcmllcyBkb2VzIG5vdCBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBjb3JlIHRoYXQgYXJlIHN1YmplY3QgdG8gZnV6emluZywgSSdtIGNvbmZpZGVudCBJIGNhbiBzYWZlbHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQyMCwiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToxMjozNC4yMTM0MzU0MzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzLCBzZWxmdGVzdHMsIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzLCBzZWxmdGVzdHMsIERvY3VtZW50YXRpb24sIGFuZCBNQUlOVEFJTkVSUy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjEyOjM0LjIxMzQ3MjMzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhcfrn[1] Phase: Running StartedAt: 2026-08-13 19:12:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhcfrn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-13 19:12:59 +0000 UTC FinishedAt: 2026-08-13 19:13:05 +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,}