Name: series-workflowpb5pj Phase: Failed StartedAt: 2026-08-31 04:24:09 +0000 UTC FinishedAt: 2026-08-31 04:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpb5pj[0] Phase: Succeeded StartedAt: 2026-08-31 04:24:09 +0000 UTC FinishedAt: 2026-08-31 04:26:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpb5pj[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 04:24:09 +0000 UTC FinishedAt: 2026-08-31 04:26:33 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBEb2N1bWVudGF0aW9uLCBNQUlOVEFJTkVSUywgS2NvbmZpZyBoZWxwIHRleHQsIGFuZCB1c2Vyc3BhY2UgdG9vbGluZy9zZWxmdGVzdHMgdW5kZXIgdG9vbHMvLiBObyBrZXJuZWwgcnVudGltZSBsb2dpYyBpcyBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZDVhZTBkOTQ2MDlmZmJmYjNjM2I2MjUyMTdmMmJhODZmOGY3NmUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDQ6MjY6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlMy4uZTBhY2VkYmQxZDQ4NiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuQEAgLTIyNiwxNSAmIzQzOzIyNiw2IEBAIHdpbGwgYmUgcGlubmVkIGxvbmd0ZXJtLCBhbmQgd2hvc2UgZGF0YSB3aWxsIGJlIGFjY2Vzc2VkLlxuIFxuIFVuaXQgdGVzdGluZ1xuID09PT09PT09PT09PVxuLVRoaXMgZmlsZTo6XG4tXG4tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbi1cbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XG4tXG4tKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpXG4tKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYilcbi1cbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcbiBcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCBhMzE2N2JjYmU1ODk3Li41NDhiY2YwMDhlNzk5IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTcxNzMsOCAmIzQzOzE3MTczLDkgQEAgVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxuIEY6XHRtbS9ndXAuY1xuIEY6XHRtbS9ndXBfdGVzdC5jXG4gRjpcdG1tL2d1cF90ZXN0LmhcbiYjNDM7RjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4mIzQzO0Y6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuLUY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKVxuIE06XHRBbmRyZXcgTW9ydG9uIFx1MDAzY2FrcG1AbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbkBAIC0xNzI3Nyw2ICYjNDM7MTcyNzgsNyBAQCBGOlx0bW0vbWVtb3J5LXRpZXJzLmNcbiBGOlx0bW0vcGFnZV9pZGxlLmNcbiBGOlx0bW0vcGdhbGxvYy10cmFjay5oXG4gRjpcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcbiYjNDM7RjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggNjA0YzU4MTk5YWNiZi4uMGJkMjk4Yzc3NDQ2MSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWdcbkBAIC0xMjkyLDI0ICYjNDM7MTI5MiwyMyBAQCBjb25maWcgUEVSQ1BVX1NUQVRTXG4gXHQgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuXG4gXG4gY29uZmlnIEdVUF9URVNUXG4tXHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHNcJiMzNDtcbiYjNDM7XHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHMgYW5kIGJlbmNobWFya3NcJiMzNDtcbiBcdGRlcGVuZHMgb24gREVCVUdfRlNcbiBcdGhlbHBcbiBcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbi1cdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4tXHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cbiYjNDM7XHQgIHRvIG1ha2UgaW9jdGwgY2FsbHMgdGhhdCBjYW4gbGF1bmNoIGtlcm5lbC1iYXNlZCB1bml0IHRlc3RzIGFuZFxuJiM0MztcdCAgYmVuY2htYXJrcyBmb3IgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbGllc1xuJiM0MztcdCAgb2YgQVBJIGNhbGxzLlxuIFxuLVx0ICBUaGVzZSB0ZXN0cyBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxuLVx0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgc21va2UgdGVzdHMgb2ZcbiYjNDM7XHQgIFRoZXNlIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mXG4mIzQzO1x0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgdGVzdHMgb2ZcbiBcdCAgdGhlIG5vbi1fZmFzdCB2YXJpYW50cy5cbiBcbi1cdCAgVGhlcmUgaXMgYWxzbyBhIHN1Yi10ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55XG4tXHQgIG9mIHVwIHRvIGVpZ2h0IHBhZ2VzIChzZWxlY3RlZCBieSBjb21tYW5kIGxpbmUgYXJncykgd2l0aGluIHRoZVxuLVx0ICByYW5nZSBvZiB1c2VyLXNwYWNlIGFkZHJlc3Nlcy4gVGhlc2UgcGFnZXMgYXJlIGVpdGhlciBwaW5uZWQgdmlhXG4tXHQgIHBpbl91c2VyX3BhZ2VzKigpLCBvciBwaW5uZWQgdmlhIGdldF91c2VyX3BhZ2VzKigpLCBhcyBzcGVjaWZpZWRcbi1cdCAgYnkgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbiYjNDM7XHQgIFRoZXJlIGlzIGFsc28gYSB0ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55IG9mIHVwXG4mIzQzO1x0ICB0byBlaWdodCBwYWdlcyB3aXRoaW4gdGhlIHJhbmdlIG9mIHVzZXItc3BhY2UgYWRkcmVzc2VzLiBUaGVzZVxuJiM0MztcdCAgcGFnZXMgYXJlIGVpdGhlciBhY3F1aXJlZCB2aWEgcGluX3VzZXJfcGFnZXMqKCkgb3IgZ2V0X3VzZXJfcGFnZXMqKCkuXG4gXG4tXHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4mIzQzO1x0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYW5kIHRvb2xzL21tL2d1cF9iZW5jaC5jLlxuIFxuIGNvbW1lbnQgXCYjMzQ7R1VQX1RFU1QgbmVlZHMgdG8gaGF2ZSBERUJVR19GUyBlbmFibGVkXCYjMzQ7XG4gXHRkZXBlbmRzIG9uICFHVVBfVEVTVCBcdTAwMjZcdTAwMjYgIURFQlVHX0ZTXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YjIyMzdlOTgyM2U5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG5AQCAtMCwwICYjNDM7MSwxMDYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ZpbGVfdXRpbHMuaFwmIzM0O1xuJiM0MztcbiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XHRzc2l6ZV90IG51bXJlYWQ7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkID09IC0xKVxuJiM0MztcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XG4mIzQzO1x0bnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4mIzQzO1x0aWYgKG51bXJlYWQgXHUwMDNjIDEpIHtcbiYjNDM7XHRcdGVyciA9IG51bXJlYWQgPyBlcnJubyA6IEVOT0RBVEE7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRyZXR1cm4gLWVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ1ZltudW1yZWFkXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBzYXZlZF9lcnJubztcbiYjNDM7XHRzc2l6ZV90IG51bXdyaXR0ZW47XG4mIzQzO1xuJiM0MztcdGlmIChidWZsZW4gXHUwMDNjIDIpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4mIzQzO1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdGlmIChudW13cml0dGVuIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1zYXZlZF9lcnJubztcbiYjNDM7XG4mIzQzO1x0aWYgKG51bXdyaXR0ZW4gIT0gKHNzaXplX3QpKGJ1ZmxlbiAtIDEpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2YWw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRjaGFyIGJ1ZlsyMV07XG4mIzQzO1x0Y2hhciAqZW5kO1xuJiM0MztcbiYjNDM7XHRpZiAoIW51bSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFJlamVjdCBzaWducyBhbmQgbGVhZGluZyB3aGl0ZXNwYWNlIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IHN0cnRvdWwoKSAqL1xuJiM0MztcdGlmIChidWZbMF0gXHUwMDNjICYjMzk7MCYjMzk7IHx8IGJ1ZlswXSBcdTAwM2UgJiMzOTs5JiMzOTspXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0ZXJybm8gPSAwO1xuJiM0MztcdHZhbCA9IHN0cnRvdWwoYnVmLCBcdTAwMjZlbmQsIDEwKTtcbiYjNDM7XHRpZiAoZXJybm8pXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IGFsbG93IGEgbmV3bGluZSBhZnRlciB0aGUgbnVtYmVyICovXG4mIzQzO1x0aWYgKCplbmQgPT0gJiMzOTtcXG4mIzM5OylcbiYjNDM7XHRcdGVuZCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdGlmICgqZW5kICE9ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0Km51bSA9IHZhbDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzIxXTtcbiYjNDM7XG4mIzQzO1x0c3ByaW50ZihidWYsIFwmIzM0OyVsdVwmIzM0OywgbnVtKTtcbiYjNDM7XHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IC1FSU5WQUwgPyAwIDogcmV0O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaCBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MGRhYTgyYzJiMmI0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5AQCAtMCwwICYjNDM7MSwxMyBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cbiYjNDM7I2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRkZWYuaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuJiM0MztpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKTtcbiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4mIzQzO2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbnNpbWlsYXJpdHkgaW5kZXggODclXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbmluZGV4IGQ3OTE3ZGNlM2FiYWMuLmFiZDlmNzE4MmY4OGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuQEAgLTgsMTIgJiM0Mzs4LDE4IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZmlsZV91dGlscy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgVEhQX1NZU0ZTIFwmIzM0Oy9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL1wmIzM0O1xuICNkZWZpbmUgTUFYX1NFVFRJTkdTX0RFUFRIIDRcbiYjNDM7XG4mIzQzOyNpZm5kZWYgQVJSQVlfU0laRVxuJiM0MzsjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTtcbiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4O1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNhdmVkX3NldHRpbmdzO1xuQEAgLTQ4LDYgJiM0Mzs1NCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNobWVtX2VuYWJsZWRfc3RyaW5nc1tdID0ge1xuIFx0TlVMTFxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRwcmludGYoXCYjMzQ7IyAlczogJXMgKCVkKVxcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCksIC1yZXQpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuQEAgLTYxLDggJiM0Mzs3Miw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuIFxuLVx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpIHtcbi1cdFx0cGVycm9yKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG5AQCAtMTAzLDEyICYjNDM7MTE1LDE3IEBAIHZvaWQgdGhwX3dyaXRlX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWwpXG4gXHRcdHByaW50ZihcJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpO1xuJiM0MztcdHJldCA9IHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSAmIzQzOyAxKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiB9XG4gXG4gdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnVtO1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBUSFBfU1lTRlMgXCYjMzQ7JXNcJiMzNDssIG5hbWUpO1xuQEAgLTExNiw3ICYjNDM7MTMzLDEzIEBAIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRcdHByaW50ZihcJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm51bSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBudW07XG4gfVxuIFxuIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbkBAIC0xMjksNyAmIzQzOzE1MiwxMSBAQCB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG4gXHRcdHByaW50ZihcJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfbnVtKHBhdGgsIG51bSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG5AQCAtMTU3LDggJiM0MzsxODQsMTUgQEAgdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdFx0Lm1heF9wdGVzX3NoYXJlZCA9IHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwmIzM0OyksXG4gXHRcdC5wYWdlc190b19zY2FuID0gdGhwX3JlYWRfbnVtKFwmIzM0O2todWdlcGFnZWQvcGFnZXNfdG9fc2NhblwmIzM0OyksXG4gXHR9O1xuLVx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXG4tXHRcdHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoKTtcbiYjNDM7XHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xuJiM0MztcdFx0aW50IHJldCA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4mIzQzO1x0XHRcdFx0ICAgXHUwMDI2c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xuJiM0MztcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoISgoMSBcdTAwM2NcdTAwM2MgaSkgXHUwMDI2IG9yZGVycykpIHtcbkBAIC0yMDgsOCAmIzQzOzI0MiwxNSBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdHRocF93cml0ZV9udW0oXCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWRcJiMzNDssIGtodWdlcGFnZWQtXHUwMDNlbWF4X3B0ZXNfc2hhcmVkKTtcbiBcdHRocF93cml0ZV9udW0oXCYjMzQ7a2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXCYjMzQ7LCBraHVnZXBhZ2VkLVx1MDAzZXBhZ2VzX3RvX3NjYW4pO1xuIFxuLVx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXG4tXHRcdHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCBzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiKTtcbiYjNDM7XHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xuJiM0MztcdFx0aW50IHJldCA9IHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuJiM0MztcdFx0XHRcdCAgICBzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7XG4mIzQzO1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSlcbkBAIC0zMDcsOCAmIzQzOzM0OCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9zdXBwb3J0ZWRfb3JkZXJzKGJvb2wgaXNfc2htZW0pXG4gXHRcdH1cbiBcbiBcdFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdG9yZGVycyB8PSAxVUwgXHUwMDNjXHUwMDNjIGk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGlmIChyZXQgIT0gLUVOT0VOVCkge1xuJiM0MztcdFx0XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG9yZGVycyB8PSAxVUwgXHUwMDNjXHUwMDNjIGk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gb3JkZXJzO1xuQEAgLTM4Miw4ICYjNDM7NDMwLDcgQEAgaW50IGRldGVjdF9odWdldGxiX3BhZ2Vfc2l6ZXModW5zaWduZWQgbG9uZyBzaXplc1tdLCBpbnQgbWF4KVxuIFx0XHRpZiAoc3NjYW5mKGVudHJ5LVx1MDAzZWRfbmFtZSwgXCYjMzQ7aHVnZXBhZ2VzLSV6dWtCXCYjMzQ7LCBcdTAwMjZrYikgIT0gMSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0c2l6ZXNbY291bnQmIzQzOyYjNDM7XSA9IGtiICogMTAyNDtcbi1cdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7W0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBrYik7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyBbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXG5cJiMzNDssIGtiKTtcbiBcdH1cbiBcdGNsb3NlZGlyKGRpcik7XG4gXHRyZXR1cm4gY291bnQ7XG5AQCAtNDI1LDI4ICYjNDM7NDcyLDQ5IEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfc3lzZnNfcGF0aChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnI7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4gXG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4mIzQzO1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnI7XG4gfVxuIFxuIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4gXG4tXHR3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XG4mIzQzO1x0cmV0ID0gd3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcJiMzNDtmcmVlX2h1Z2VwYWdlc1wmIzM0Oyk7XG4gXG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4mIzQzO1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnI7XG4gfVxuIFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXG5AQCAtNTAyLDcgJiM0Mzs1NzAsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChucl9lbmFibGVkIFx1MDAzZSBtYXgpIHtcbi1cdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcblwmIzM0OywgbnJfZW5hYmxlZCwgbWF4KTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjIGRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgbnJfZW5hYmxlZCwgbWF4KTtcbiBcdFx0bnJfZW5hYmxlZCA9IG1heDtcbiBcdH1cbiBcbkBAIC01NzQsOCAmIzQzOzY0MywxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKVxuIHtcbiYjNDM7XHQodm9pZClzaWc7XG4mIzQzO1xuIFx0LyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqL1xuLVx0ZXhpdChLU0ZUX0ZBSUwpO1xuJiM0MztcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiB9XG4gXG4gdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li4xNTRkNzQwYmUwMmU4IDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuQEAgLTMsMyAmIzQzOzMsNCBAQCBzbGFiaW5mb1xuIHBhZ2UtdHlwZXNcbiBwYWdlX293bmVyX3NvcnRcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztndXBfYmVuY2hcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXG5pbmRleCA4NTgxODZhNmVlZmRiLi5mMjBhMzJkOGNjMjJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL01ha2VmaWxlXG5AQCAtMywxMyAmIzQzOzMsMTUgQEBcbiAjXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcbiBcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXJcbiYjNDM7QlVJTERfVEFSR0VUUyAmIzQzOz0gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXG4gXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcbiBMSUJTID0gJChMSUJfRElSKS9saWJhcGkuYVxuJiM0MztHVVBfQkVOQ0hfT0JKUyA9IGd1cF9iZW5jaC5jIC4uL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIC4uL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbi1DRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1wdGhyZWFkXG4mIzQzO0NGTEFHUyAmIzQzOz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLUkuLi8uLiAtcHRocmVhZFxuIExERkxBR1MgJiM0Mzs9ICQoTElCUykgLXB0aHJlYWRcbiBcbiBhbGw6ICQoQlVJTERfVEFSR0VUUylcbkBAIC0yMiw4ICYjNDM7MjQsMTEgQEAgJChMSUJTKTpcbiAlOiAlLmNcbiBcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXHUwMDNjICQoTERGTEFHUylcbiBcbiYjNDM7Z3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpXG4mIzQzO1x0JChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUylcbiYjNDM7XG4gY2xlYW46XG4tXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbnNpbWlsYXJpdHkgaW5kZXggNTAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG5yZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbmluZGV4IDNmODQxYTk2Zjg3MDYuLmU2YTgwYmE1MTk1YTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9ndXBfYmVuY2guY1xuQEAgLTEwLDExICYjNDM7MTAsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4tI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuIFxuQEAgLTM4LDEyICYjNDM7MzcsNiBAQCBzdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcbiBcdFx0cmV0dXJuIFwmIzM0O1BJTl9GQVNUX0JFTkNITUFSS1wmIzM0OztcbiBcdGNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzpcbiBcdFx0cmV0dXJuIFwmIzM0O1BJTl9MT05HVEVSTV9CRU5DSE1BUktcJiMzNDs7XG4tXHRjYXNlIEdVUF9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7R1VQX0JBU0lDX1RFU1RcJiMzNDs7XG4tXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7UElOX0JBU0lDX1RFU1RcJiMzNDs7XG4tXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7RFVNUF9VU0VSX1BBR0VTX1RFU1RcJiMzNDs7XG4gXHR9XG4gXHRyZXR1cm4gXCYjMzQ7VW5rbm93biBjb21tYW5kXCYjMzQ7O1xuIH1cbkBAIC01MywzOSAmIzQzOzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcbiBcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XG4gXHRpbnQgaSwgc3RhdHVzO1xuIFxuLVx0LyogT25seSByZXBvcnQgdGltaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAqX0JFTkNITUFSSyBjb21tYW5kczogKi9cbi1cdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XG4tXHQgICAgIChjbWQgPT0gUElOX0xPTkdURVJNX0JFTkNITUFSSykpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRcdGJyZWFrO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlcGVhdHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRndXAuc2l6ZSA9IHNpemU7XG4mIzQzO1x0XHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXHUwMDI2Z3VwKTtcbiYjNDM7XHRcdGlmIChzdGF0dXMpIHtcbiYjNDM7XHRcdFx0aW50IGVyciA9IGVycm5vO1xuIFxuIFx0XHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7JXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzXCYjMzQ7LFxuLVx0XHRcdFx0ICAgICAgIGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLFxuLVx0XHRcdFx0ICAgICAgIGd1cC5wdXRfZGVsdGFfdXNlYyk7XG4tXHRcdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4tXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDssIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcJiMzNDssIGd1cC5zaXplKTtcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7JXMgaW9jdGwgZmFpbGVkOiAlc1xcblwmIzM0OywgY21kX3RvX3N0cihjbWQpLFxuJiM0MztcdFx0XHRcdHN0cmVycm9yKGVycikpO1xuIFx0XHRcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbiYjNDM7XHRcdFx0cmV0dXJuIGRhdGE7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGd1cC5zaXplID0gc2l6ZTtcbi1cdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0Z290byByZXR1cm5fO1xuIFxuIFx0XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslczogZG9uZVxcblwmIzM0OywgY21kX3RvX3N0cihjbWQpKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcJiMzNDssXG4mIzQzO1x0XHRcdGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLFxuJiM0MztcdFx0XHRndXAucHV0X2RlbHRhX3VzZWMpO1xuIFx0XHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtUcnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxuXCYjMzQ7LCBndXAuc2l6ZSk7XG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDssIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcJiMzNDssIGd1cC5zaXplKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDtcXG5cJiMzNDspO1xuIFx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4gXHR9XG4gXG4tcmV0dXJuXzpcbi1cdGtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgXCYjMzQ7aW9jdGwgc3RhdHVzICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuQEAgLTkzLDM4ICYjNDM7NzYsMjEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbiBcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiBcdGludCBmaWxlZCwgaSwgb3B0LCBucl9wYWdlcyA9IDEsIHRocCA9IC0xLCB3cml0ZSA9IDEsIG50aHJlYWRzID0gMSwgcmV0O1xuLVx0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XG4mIzQzO1x0aW50IGZsYWdzID0gTUFQX1BSSVZBVEUsIHN0YXJ0ZWRfdGhyZWFkcyA9IDAsIGV4aXRfc3RhdHVzID0gMTtcbiBcdGNoYXIgKmZpbGUgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDs7XG4tXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcbiYjNDM7XHRib29sIGh1Z2V0bGIgPSBmYWxzZSwgdGhyZWFkX2Vycm9yID0gZmFsc2U7XG4mIzQzO1x0dm9pZCAqdGhyZWFkX3Jlc3VsdDtcbiBcdHB0aHJlYWRfdCAqdGlkO1xuIFx0Y2hhciAqcDtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O206cjpuOkY6ZjphYmNqOnRUTFV1d1dTSHB6XCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDttOnI6bjpGOmY6YWo6dFRMdXdXU0hcJiMzNDspKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICYjMzk7YSYjMzk7OlxuIFx0XHRcdGNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSztcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O2ImIzM5Ozpcbi1cdFx0XHRjbWQgPSBQSU5fQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O0wmIzM5OzpcbiBcdFx0XHRjbWQgPSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7YyYjMzk7OlxuLVx0XHRcdGNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnlcbi1cdFx0XHQgKiB1c2VyJiMzOTtzIG5vbi1vcHRpb24gYXJndW1lbnRzLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcJiMzNDtkb1xuLVx0XHRcdCAqIG5vdGhpbmdcJiMzNDsuXG4tXHRcdFx0ICovXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O3AmIzM5Ozpcbi1cdFx0XHQvKiB3b3JrcyBvbmx5IHdpdGggRFVNUF9VU0VSX1BBR0VTX1RFU1QgKi9cbi1cdFx0XHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O0YmIzM5OzpcbiBcdFx0XHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xuIFx0XHRcdGd1cC5ndXBfZmxhZ3MgPSBzdHJ0b2wob3B0YXJnLCAwLCAwKTtcbkBAIC0xNDEsNyAmIzQzOzEwNyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Y2FzZSAmIzM5O24mIzM5OzpcbiBcdFx0XHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcbiBcdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdFx0XHRucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpO1xuJiM0MztcdFx0XHRcdG5yX3BhZ2VzID0gc2l6ZSAvIGdldHBhZ2VzaXplKCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTt0JiMzOTs6XG4gXHRcdFx0dGhwID0gMTtcbkBAIC0xNDksOSAmIzQzOzExNSw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Y2FzZSAmIzM5O1QmIzM5OzpcbiBcdFx0XHR0aHAgPSAwO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7VSYjMzk7OlxuLVx0XHRcdGNtZCA9IEdVUF9CQVNJQ19URVNUO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7dSYjMzk7OlxuIFx0XHRcdGNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcbiBcdFx0XHRicmVhaztcbkBAIC0xNzMsNTIgJiM0MzsxMzYsNDEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdGh1Z2V0bGIgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtXcm9uZyBhcmd1bWVudFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtXcm9uZyBhcmd1bWVudFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGV4aXQoMSk7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChvcHRpbmQgXHUwMDNjIGFyZ2MpIHtcbi1cdFx0aW50IGV4dHJhX2FyZ19jb3VudCA9IDA7XG4tXHRcdC8qXG4tXHRcdCAqIEZvciBleGFtcGxlOlxuLVx0XHQgKlxuLVx0XHQgKiAgIC4vZ3VwX3Rlc3QgLWMgMCAxIDB4MTAwMVxuLVx0XHQgKlxuLVx0XHQgKiAuLi50byBkdW1wIHBhZ2VzIDAsIDEsIGFuZCA0MDk3XG4tXHRcdCAqL1xuLVxuLVx0XHR3aGlsZSAoKG9wdGluZCBcdTAwM2MgYXJnYykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgICAoZXh0cmFfYXJnX2NvdW50IFx1MDAzYyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIERvIHRoZSAxLWJhc2VkIGluZGV4aW5nIGhlcmUsIHNvIHRoYXQgdGhlIHVzZXIgY2FuXG4tXHRcdFx0ICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0bG9uZyBwYWdlX2luZGV4ID0gc3RydG9sKGFyZ3Zbb3B0aW5kXSwgMCwgMCkgJiM0MzsgMTtcbi1cbi1cdFx0XHRndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7XG4tXHRcdFx0ZXh0cmFfYXJnX2NvdW50JiM0MzsmIzQzOztcbi1cdFx0XHRvcHRpbmQmIzQzOyYjNDM7O1xuLVx0XHR9XG4mIzQzO1x0aWYgKG9wdGluZCAhPSBhcmdjKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7VW5leHBlY3RlZCBhcmd1bWVudCAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIGFyZ3Zbb3B0aW5kXSk7XG4mIzQzO1x0XHRleGl0KDEpO1xuIFx0fVxuIFxuLVx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRpZiAoZ2V0dWlkKCkpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGh1Z2V0bGIpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuIFxuLVx0XHRpZiAoIWhwX3NpemUpXG4tXHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7SHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWhwX3NpemUpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0NvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0c2l6ZSA9IChzaXplICYjNDM7IGhwX3NpemUgLSAxKSBcdTAwMjYgfihocF9zaXplIC0gMSk7XG4tXHRcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSlcbi1cdFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdGtzZnRfc2V0X3BsYW4obnRocmVhZHMpO1xuLVxuIFx0ZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTtcbi1cdGlmIChmaWxlZCBcdTAwM2MgMClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRpZiAoZmlsZWQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4gXG4gXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlcztcbiBcdGlmICh3cml0ZSlcbkBAIC0yMjcsMjYgJiM0MzsxNzksMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuIFx0aWYgKGd1cF9mZCA9PSAtMSkge1xuIFx0XHRzd2l0Y2ggKGVycm5vKSB7XG4tXHRcdGNhc2UgRUFDQ0VTOlxuLVx0XHRcdGlmIChnZXR1aWQoKSlcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVOT0VOVDpcbiBcdFx0XHRpZiAob3BlbmRpcihcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Z1wmIzM0OykgPT0gTlVMTClcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cJiMzNDspO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2NoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDttb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2NoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXG5cJiMzNDspO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSxcbiYjNDM7XHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbi1cdFx0a3NmdF9leGl0X3Bhc3MoKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Nsb3NlX2ZpbGVkO1xuIFx0fVxuIFxuIFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcbi1cdGlmIChwID09IE1BUF9GQUlMRUQpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7bW1hcDogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRnb3RvIGVycl9jbG9zZV9ndXBfZmQ7XG4mIzQzO1x0fVxuIFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylwO1xuIFxuIFx0aWYgKHRocCA9PSAxKVxuQEAgLTI1NSwyMSAmIzQzOzIwNSw0NCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbiBcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpXG4mIzQzO1x0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IGdldHBhZ2VzaXplKCkpXG4gXHRcdHBbMF0gPSAwO1xuIFxuIFx0dGlkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocmVhZHMpO1xuLVx0YXNzZXJ0KHRpZCk7XG4mIzQzO1x0aWYgKCF0aWQpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdG50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0Z290byBlcnJfdW5tYXA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50aHJlYWRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihyZXQpKTtcbiYjNDM7XHRcdFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzdGFydGVkX3RocmVhZHMmIzQzOyYjNDM7O1xuIFx0fVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXJ0ZWRfdGhyZWFkczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIFx1MDAyNnRocmVhZF9yZXN1bHQpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7cHRocmVhZF9qb2luIGZhaWxlZDogJXNcXG5cJiMzNDssIHN0cmVycm9yKHJldCkpO1xuJiM0MztcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuJiM0MztcdFx0fSBlbHNlIGlmICh0aHJlYWRfcmVzdWx0KVxuJiM0MztcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuIFx0fVxuIFxuIFx0ZnJlZSh0aWQpO1xuLVxuLVx0a3NmdF9leGl0X3Bhc3MoKTtcbiYjNDM7XHRpZiAodGhyZWFkX2Vycm9yKVxuJiM0MztcdFx0Z290byBlcnJfdW5tYXA7XG4mIzQzO1x0ZXhpdF9zdGF0dXMgPSAwO1xuJiM0MztcbiYjNDM7ZXJyX3VubWFwOlxuJiM0MztcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcbiYjNDM7ZXJyX2Nsb3NlX2d1cF9mZDpcbiYjNDM7XHRjbG9zZShndXBfZmQpO1xuJiM0MztlcnJfY2xvc2VfZmlsZWQ6XG4mIzQzO1x0Y2xvc2UoZmlsZWQpO1xuJiM0MztcdHJldHVybiBleGl0X3N0YXR1cztcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggMmQ1MzY2MTk2ZTMwOS4uOWMwMzYyNGZkMjkzNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTM3LDcgJiM0MzszNyw4IEBAIGVuZGlmXG4gIyBMRExJQlMuXG4gTUFLRUZMQUdTICYjNDM7PSAtLW5vLWJ1aWx0aW4tcnVsZXNcbiBcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxuJiM0MztDRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAtSSAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYlxuJiM0MztDRkxBR1MgJiM0Mzs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4gQ0ZMQUdTICYjNDM7PSAtV3VucmVhY2hhYmxlLWNvZGVcbiBMRExJQlMgPSAtbHJ0IC1scHRocmVhZCAtbG1cbiBcbkBAIC01Nyw4ICYjNDM7NTgsOCBAQCBlbmRpZlxuIFxuIFRFU1RfR0VOX0ZJTEVTID0gY293XG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGNvbXBhY3Rpb25fdGVzdFxuJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGd1cF9sb25ndGVybVxuLVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfdGVzdFxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBobW0tdGVzdHNcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1tYWR2aXNlXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbW1hcFxuQEAgLTE4Nyw4ICYjNDM7MTg4LDEwIEBAIFRFU1RfRklMRVMgJiM0Mzs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbiBcbi0kKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbiYjNDM7JChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4mIzQzO1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiYjNDM7JChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4mIzQzO1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmNcbiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jXG5AQCAtMjE3LDcgJiM0MzsyMjAsNyBAQCAkKEJJTkFSSUVTXzMyKTogQ0ZMQUdTICYjNDM7PSAtbTMyIC1teHNhdmVcbiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwgLWxtXG4gJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmNcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuLVx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS0zMiwkKHQpKSkpXG4gZW5kaWZcbiBcbkBAIC0yMjYsNyAmIzQzOzIyOSw3IEBAICQoQklOQVJJRVNfNjQpOiBDRkxBR1MgJiM0Mzs9IC1tNjQgLW14c2F2ZVxuICQoQklOQVJJRVNfNjQpOiBMRExJQlMgJiM0Mzs9IC1scnQgLWxkbFxuICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jXG4gXHQkKGNhbGwgbXNnLENDLCwkQClcbi1cdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcbiYjNDM7XHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtNjQsJCh0KSkpKVxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuQEAgLTE1LDkgJiM0MzsxNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgTUFQX1NJWkVfTUJcdDEwMFxuICNkZWZpbmUgTUFQX1NJWkVcdChNQVBfU0laRV9NQiAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbmluZGV4IDhhYTUyNDlkOWJlZjYuLjMyNjRhODI4NTc1YmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbkBAIC0yOSw3ICYjNDM7MjksNiBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA0NWI4NGY3YjM2NGUwLi4yODlhZWQyZWJhYzAyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMjUsNyAmIzQzOzI1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHVpbnQ2NF90IHBhZ2Vfc2l6ZTtcbiB1aW50NjRfdCBwbWRfcGFnZXNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCA1YzhlYzNjYTc1ZDdkLi5hZjVjZDliMzAzMzk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbkBAIC0yMSw3ICYjNDM7MjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy91aW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNpbmNsdWRlIFwmIzM0Oy4uL3BpZGZkL3BpZGZkLmhcJiMzNDtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTNjMmZmYTNhMDU3ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcbkBAIC0wLDAgJiM0MzsxLDI3NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vZ3VwX3Rlc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNQiAoMVVMIFx1MDAzY1x1MDAzYyAyMClcbiYjNDM7XG4mIzQzOy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xuJiM0MzsjZGVmaW5lIEZPTExfV1JJVEVcdDB4MDFcdC8qIGNoZWNrIHB0ZSBpcyB3cml0YWJsZSAqL1xuJiM0MztcbiYjNDM7LyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovXG4mIzQzO3N0YXRpYyBjb25zdCBpbnQgbnJfcGFnZXNfbGlzdFtdID0geyAxLCA1MTIsIDEyMywgLTEgfTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VQX1RFU1RfRklMRSBcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdFwmIzM0O1xuJiM0MzsjZGVmaW5lIE5SX0hVR0VfUEFHRVMgMTI4XG4mIzQzO1xuJiM0MztIVUdFVExCX1NFVFVQX0RFRkFVTFRfUEFHRVMoTlJfSFVHRV9QQUdFUylcbiYjNDM7XG4mIzQzO0ZJWFRVUkUoZ3VwX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZ3VwX2ZkO1xuJiM0MztcdGNoYXIgKmFkZHI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB0aHA7XG4mIzQzO1x0Ym9vbCBodWdldGxiO1xuJiM0MztcdGJvb2wgd3JpdGU7XG4mIzQzO1x0Ym9vbCBzaGFyZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfdGhwKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IHRydWUsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSB0cnVlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX2h1Z2V0bGIpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSB0cnVlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSlcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IHRydWUsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX2h1Z2V0bGIpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSB0cnVlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEU7XG4mIzQzO1x0aW50IHplcm9fZmQ7XG4mIzQzO1x0Y2hhciAqcDtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VzaXplID0gMTI4ICogTUI7XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWhwX3NpemUpXG4mIzQzO1x0XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtIdWdlVExCIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmIChodWdldGxiX2ZyZWVfZGVmYXVsdF9wYWdlcygpIFx1MDAzYyBOUl9IVUdFX1BBR0VTKVxuJiM0MztcdFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7Tm90IGVub3VnaCBodWdlIHBhZ2VzXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRzZWxmLVx1MDAzZXNpemUgPSBOUl9IVUdFX1BBR0VTICogaHBfc2l6ZTtcbiYjNDM7XHRcdG1tYXBfZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmFyaWFudC1cdTAwM2VzaGFyZWQpXG4mIzQzO1x0XHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xuJiM0MztcbiYjNDM7XHQvKiB6ZXJvX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbiYjNDM7XHR6ZXJvX2ZkID0gb3BlbihcJiMzNDsvZGV2L3plcm9cJiMzNDssIE9fUkRXUik7XG4mIzQzO1x0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xuJiM0MztcbiYjNDM7XHQvKiBndXBfZmQgaGFzIHRvIGJlIFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xuJiM0MztcdHNlbGYtXHUwMDNlZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuJiM0MztcdEFTU0VSVF9HRShzZWxmLVx1MDAzZWd1cF9mZCwgMCk7XG4mIzQzO1xuJiM0MztcdHNlbGYtXHUwMDNlYWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cdTAwM2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0XHQgIG1tYXBfZmxhZ3MsIHplcm9fZmQsIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfTkUoc2VsZi1cdTAwM2VhZGRyLCBNQVBfRkFJTEVEKSB7XG4mIzQzO1x0XHRpbnQgZXJyID0gZXJybm87XG4mIzQzO1xuJiM0MztcdFx0Y2xvc2UoemVyb19mZCk7XG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bW1hcCBmYWlsZWQ6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnIpKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UoemVyb19mZCk7XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZXRocClcbiYjNDM7XHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuJiM0MztcdGVsc2UgaWYgKCF2YXJpYW50LVx1MDAzZWh1Z2V0bGIpXG4mIzQzO1x0XHRtYWR2aXNlKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHAgPSBzZWxmLVx1MDAzZWFkZHI7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkclxuJiM0MztcdFx0XHQmIzQzOyBzZWxmLVx1MDAzZXNpemU7IHAgJiM0Mzs9IHBzaXplKCkpXG4mIzQzO1x0XHRwWzBdID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdG11bm1hcChzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0Y2xvc2Uoc2VsZi1cdTAwM2VndXBfZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fZ3VwX2NtZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4mIzQzO1x0XHRcdCBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLFxuJiM0MztcdFx0XHQgY29uc3QgRklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KSAqdmFyaWFudCxcbiYjNDM7XHRcdFx0IHVuc2lnbmVkIGxvbmcgY29tbWFuZClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0ge1xuJiM0MztcdFx0XHQuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcixcbiYjNDM7XHRcdFx0LnNpemUgPSBzZWxmLVx1MDAzZXNpemUsXG4mIzQzO1x0XHRcdC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXHUwMDNjIDAgP1xuJiM0MztcdFx0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLFxuJiM0MztcdFx0XHQuZ3VwX2ZsYWdzID0gdmFyaWFudC1cdTAwM2V3cml0ZSA/IEZPTExfV1JJVEUgOiAwLFxuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIGNvbW1hbmQsIFx1MDAyNmd1cCksIDApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0JBU0lDX1RFU1QpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0ZBU1RfQkVOQ0hNQVJLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19mYXN0KVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fRkFTVF9CRU5DSE1BUkspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdGNoYXIgKmZpbGUgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDs7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihmaWxlLCBPX1JEV1IpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0fVxuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4mIzQzO1x0aWYgKGZkID09IC0xKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVBQ0NFUylcbiYjNDM7XHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XG4mIzQzO1x0XHRcdERJUiAqZGVidWdmcyA9IG9wZW5kaXIoXCYjMzQ7L3N5cy9rZXJuZWwvZGVidWdcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFkZWJ1Z2ZzKSB7XG4mIzQzO1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7TW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0Y2xvc2VkaXIoZGVidWdmcyk7XG4mIzQzO1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Q2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0ZXN0X2hhcm5lc3NfcnVuKGFyZ2MsIGFyZ3YpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuaW5kZXggNTEwZGU5M2JlNjgxNC4uYzlkOGI0NDkxMjYzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTEwLDkgJiM0MzsxMCw2IEBAXG4gICogYnVncy5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuLVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuQEAgLTMzLDYgJiM0MzszMCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL2V2ZW50ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbiYjMzk7dCBleHBvcnRlZFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbmluZGV4IDU1NWI0YjNkMTQzMDcuLjU3Y2Y3OTBjYTQ3OGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuQEAgLTE4LDcgJiM0MzsxOCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gI2RlZmluZSBQUk9URUNUSU9OIChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG5pbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuQEAgLTI2LDcgJiM0MzsyNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBERUZBVUxUX0xFTkdUSF9NQiAxMFVMXG4gI2RlZmluZSBNQl9UT19CWVRFUyh4KSAoeCAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXG5pbmRleCAzZmY3ZjA2MmI3ZWI0Li5mNDUxNGRhNDllMWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG5pbmRleCBiYzIwMmU0ZWQyYmRhLi4yMDg2NGU3ZDRlMGM3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xuQEAgLTIxLDkgJiM0MzsyMSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0ZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWZuZGVmIE1BRFZfU09GVF9PRkZMSU5FXG4gI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuaW5kZXggZmI0NjAwNTcwZTEzMS4uOTQ5NTk3NGVjY2JlYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcbkBAIC0yMCw3ICYjNDM7MjAsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWZuZGVmIFNUQVRYX0RJT0FMSUdOXG4gI2RlZmluZSBTVEFUWF9ESU9BTElHTlx0XHQweDAwMDAyMDAwVVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbmluZGV4IDJkYzE1ODA1NGY2NjYuLjU2YzVhODUzM2U5ZDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbkBAIC0xMCw3ICYjNDM7MTAsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbkBAIC0yNSw3ICYjNDM7MjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCAxZDJkNmJkNzJmZDJhLi5hZGExMWQzMGQzODg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yMiw3ICYjNDM7MjIsNiBAQFxuICNpbmNsdWRlIFwmIzM0O2xpbnV4L21hZ2ljLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTEyMiw2ICYjNDM7MTIxLDcgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcbiBcdGNoYXIgYnVmWzEgXHUwMDNjXHUwMDNjIDEwXTtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4gXHRjaGFyICpzdHIsICplbmQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGZpbmZvLmRpciA9IGRpcjtcbiBcdGlmIChzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KSlcbkBAIC0xNDIsOCAmIzQzOzE0Miw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3JlYWRfZmlsZSh1ZXZlbnQpXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkX2ZpbGUoJXMpOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwmIzM0O0RFVlRZUEU9ZGlza1wmIzM0OykpIHtcbiBcdFx0LyogRm91bmQgaXQgKi9cbiBcdFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG5AQCAtMzI0LDcgJiM0MzszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCByZXQ7XG4gXHR2b2lkICpwO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIFxuQEAgLTM2OCw3ICYjNDM7MzY5LDExIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttbWFwKClcJiMzNDspO1xuIFxuIFx0LyogRHJvcCBwYWdlIGNhY2hlICovXG4tXHR3cml0ZV9maWxlKFwmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wmIzM0OywgXCYjMzQ7M1wmIzM0OywgMik7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShcJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcJiMzNDssIFwmIzM0OzNcJiMzNDssIDIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XG4gXHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtMTUsNyAmIzQzOzE1LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL2tzbS9cJiMzNDtcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNSw3ICYjNDM7NSw2IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuQEAgLTE2LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggZWFkYzcxNTljYTViOS4uMGM1ZGU2ZWMwNmM4MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjQsNyAmIzQzOzI0LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTExcdFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcdFxcXG4gXHRcdFx0XHRcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuaW5kZXggODJjNmU5NmVhNmViMy4uZjllYzE0MDhhNmUzMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5AQCAtNDUsOCAmIzQzOzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7cGtleS1oZWxwZXJzLmhcJiMzNDtcbiBcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0xMzAsMzAgJiM0MzsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwmIzM0Oy1IIC1tICRodWdldGxiX21iXCYjMzQ7OyBkb1xuLSAgICAgICAgIyAtdTogZ3VwLWZhc3QsIC1VOiBndXAtYmFzaWMsIC1hOiBwaW4tZmFzdCwgLWI6IHBpbi1iYXNpYywgLUw6IHBpbi1sb25ndGVybVxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXG4tICAgICAgICAgICAgZm9yIHdyaXRlIGluIC13IC1XOyBkb1xuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFwmIzM0OyBcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsXG4tICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaXQmIzM5O3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXG4tICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCBwYXJ0aWFsIGd1cCB3aGVuIGhpdCBhIGh1Z2UgaW4gd2hhdGV2ZXIgZm9ybVxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcJiMzNDstbiAxXCYjMzQ7IFwmIzM0Oy1uIDUxMlwmIzM0OyBcJiMzNDstbiAxMjNcJiMzNDsgXCYjMzQ7LW4gLTFcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCYjMzQ7YXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NFwmIzM0O1xuIGlmIFsgLXogXCYjMzQ7JEFSQ0hcJiMzNDsgXTsgdGhlblxuQEAgLTI3NSwxOCAmIzQzOzI1MSw3IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCYjMzQ7bW1hcFwmIzM0OyBydW5fdGVzdCAuL21hcF9maXhlZF9ub3JlcGxhY2VcbiBcbi1pZiAkUlVOX0FMTDsgdGhlblxuLSAgICBydW5fZ3VwX21hdHJpeFxuLWVsc2Vcbi0gICAgIyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXG4tICAgIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXG4tICAgICMgcGluX3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIDFcbi0gICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXG4mIzQzO0NBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwXG4gQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfbG9uZ3Rlcm1cbiBcbiBDQVRFR09SWT1cJiMzNDt1c2VyZmF1bHRmZFwmIzM0OyBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICYjNDM7OSw2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXBcJiMzNDtcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCA4NmE2MDM2OTI4MjYxLi4wZTA4M2FiNzFhZjYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgJiM0MzsyMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gdWludDY0X3QgcGFnZXNpemU7XG4gdW5zaWduZWQgaW50IHBhZ2VzaGlmdDtcbkBAIC0xNDYsNyAmIzQzOzE0NSwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0aWYgKHJldCBcdTAwM2U9IElOUFVUX01BWClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXG4tXHR3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZSglcyk6ICVzXFxuXCYjMzQ7LCBTUExJVF9ERUJVR0ZTLFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgJiM0MzsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWYgIWRlZmluZWQoTUFQX0hVR0VUTEIpXG4gI2RlZmluZSBNQVBfSFVHRVRMQlx0MHg0MDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5AQCAtMTcsNyAmIzQzOzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcbiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5AQCAtMzcsNyAmIzQzOzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggYzk3M2Q2NzIyNzIwYy4uZWI0YjI0MzNiMDBlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3VmZmQtY29tbW9uLmhcJiMzNDtcbiBcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbkBAIC0xMSw3ICYjNDM7MTEsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggNDgyMWEzNTYzMDM2My4uZjg5MTZiMmFiYzJlZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtODg1LDExMSAmIzQzOzg4NSw1NCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0cmV0dXJuIHJldCBcdTAwM2UgMCA/IDAgOiAtZXJybm87XG4gfVxuIFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdGludCBmZDtcbi1cdHNzaXplX3QgbnVtcmVhZDtcbi1cbi1cdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XG4tXHRpZiAoZmQgPT0gLTEpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4tXHRpZiAobnVtcmVhZCBcdTAwM2MgMSkge1xuLVx0XHRjbG9zZShmZCk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0YnVmW251bXJlYWRdID0gJiMzOTtcXDAmIzM5Oztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxuXCYjMzQ7LCBidWZsZW4pO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIG9wZW4gZmFpbGVkOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbi1cbi1cdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdHNhdmVkX2Vycm5vID0gZXJybm87XG4tXHRjbG9zZShmZCk7XG4tXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuLVx0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApIHtcbi1cdFx0aWYgKGlnbm9yZV9laW52YWwgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdH1cbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pO1xuLX1cbi1cbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcbi19XG4tXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKVxuLXtcbi1cdGNoYXIgYnVmWzIxXTtcbi1cbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cmVhZF9maWxlKClcJiMzNDspO1xuLVxuLVx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0Y2hhciBidWZbMjFdO1xuLVxuLVx0c3ByaW50ZihidWYsIFwmIzM0OyVsdVwmIzM0OywgbnVtKTtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEsIGlnbm9yZV9laW52YWwpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuLXtcbi1cdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTtcbi19XG4tXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7XG4gXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKVxuIHtcbi1cdGlmIChzaG1tYXgpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0Oywgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0Oywgc2htYWxsKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2htbWF4KSB7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIHNobW1heCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgc2htbWF4OiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHNobWFsbCkge1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBzaG1hbGwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7KTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobW1heDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBsZW5ndGgsIHN0cmVycm9yKC1yZXQpKTtcbiBcdFx0c2htbWF4ID0gdmFsO1xuIFx0fVxuIFxuLVx0dmFsID0gcmVhZF9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcJiMzNDspO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcdGlmICh2YWwgXHUwMDNjIG5yKSB7XG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0OywgbnIpO1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBucik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICYjNDM7OCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2UgLyogX1NDX1BBR0VTSVpFICovXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2ZpbGVfdXRpbHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCBcdTAwM2NcdTAwM2MgKG5yKSlcbiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpXG5AQCAtMTY2LDEyICYjNDM7MTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBEb2N1bWVudGF0aW9uLCBNQUlOVEFJTkVSUywgS2NvbmZpZyBoZWxwIHRleHQsIGFuZCB1c2Vyc3BhY2UgdG9vbGluZy9zZWxmdGVzdHMgdW5kZXIgdG9vbHMvLiBObyBrZXJuZWwgcnVudGltZSBsb2dpYyBpcyBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZDVhZTBkOTQ2MDlmZmJmYjNjM2I2MjUyMTdmMmJhODZmOGY3NmUyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDQ6MjY6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CmluZGV4IGMxNmNhMTYzYjU1ZTMuLmUwYWNlZGJkMWQ0ODYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CkBAIC0yMjYsMTUgJiM0MzsyMjYsNiBAQCB3aWxsIGJlIHBpbm5lZCBsb25ndGVybSwgYW5kIHdob3NlIGRhdGEgd2lsbCBiZSBhY2Nlc3NlZC4KIAogVW5pdCB0ZXN0aW5nCiA9PT09PT09PT09PT0KLVRoaXMgZmlsZTo6Ci0KLSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCi0KLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczoKLQotKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpCi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKQotCiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkCiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OgogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGEzMTY3YmNiZTU4OTcuLjU0OGJjZjAwOGU3OTkgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xNzE3Myw4ICYjNDM7MTcxNzMsOSBAQCBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW0KIEY6CW1tL2d1cC5jCiBGOgltbS9ndXBfdGVzdC5jCiBGOgltbS9ndXBfdGVzdC5oCiYjNDM7RjoJdG9vbHMvbW0vZ3VwX2JlbmNoLmMKJiM0MztGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMKLUY6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKIAogTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKQogTToJQW5kcmV3IE1vcnRvbiAmbHQ7YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZyZndDsKQEAgLTE3Mjc3LDYgJiM0MzsxNzI3OCw3IEBAIEY6CW1tL21lbW9yeS10aWVycy5jCiBGOgltbS9wYWdlX2lkbGUuYwogRjoJbW0vcGdhbGxvYy10cmFjay5oCiBGOgltbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jCiYjNDM7RjoJdG9vbHMvbGliL21tLwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vCiAKIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCA2MDRjNTgxOTlhY2JmLi4wYmQyOThjNzc0NDYxIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWcKQEAgLTEyOTIsMjQgJiM0MzsxMjkyLDIzIEBAIGNvbmZpZyBQRVJDUFVfU1RBVFMKIAkgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuCiAKIGNvbmZpZyBHVVBfVEVTVAotCWJvb2wgJiMzNDtFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzJiMzNDsKJiM0MzsJYm9vbCAmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHMgYW5kIGJlbmNobWFya3MmIzM0OwogCWRlcGVuZHMgb24gREVCVUdfRlMKIAloZWxwCiAJICBQcm92aWRlcyAvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcyBhIHdheQotCSAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yCi0JICB0aGUgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpIGZhbWlseSBvZiBBUEkgY2FsbHMuCiYjNDM7CSAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgYW5kCiYjNDM7CSAgYmVuY2htYXJrcyBmb3IgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbGllcwomIzQzOwkgIG9mIEFQSSBjYWxscy4KIAotCSAgVGhlc2UgdGVzdHMgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2YKLQkgIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSwgYXMgd2VsbCBhcyBzbW9rZSB0ZXN0cyBvZgomIzQzOwkgIFRoZXNlIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mCiYjNDM7CSAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHRlc3RzIG9mCiAJICB0aGUgbm9uLV9mYXN0IHZhcmlhbnRzLgogCi0JICBUaGVyZSBpcyBhbHNvIGEgc3ViLXRlc3QgdGhhdCBhbGxvd3MgcnVubmluZyBkdW1wX3BhZ2UoKSBvbiBhbnkKLQkgIG9mIHVwIHRvIGVpZ2h0IHBhZ2VzIChzZWxlY3RlZCBieSBjb21tYW5kIGxpbmUgYXJncykgd2l0aGluIHRoZQotCSAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYQotCSAgcGluX3VzZXJfcGFnZXMqKCksIG9yIHBpbm5lZCB2aWEgZ2V0X3VzZXJfcGFnZXMqKCksIGFzIHNwZWNpZmllZAotCSAgYnkgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KJiM0MzsJICBUaGVyZSBpcyBhbHNvIGEgdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueSBvZiB1cAomIzQzOwkgIHRvIGVpZ2h0IHBhZ2VzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlCiYjNDM7CSAgcGFnZXMgYXJlIGVpdGhlciBhY3F1aXJlZCB2aWEgcGluX3VzZXJfcGFnZXMqKCkgb3IgZ2V0X3VzZXJfcGFnZXMqKCkuCiAKLQkgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCiYjNDM7CSAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jIGFuZCB0b29scy9tbS9ndXBfYmVuY2guYy4KIAogY29tbWVudCAmIzM0O0dVUF9URVNUIG5lZWRzIHRvIGhhdmUgREVCVUdfRlMgZW5hYmxlZCYjMzQ7CiAJZGVwZW5kcyBvbiAhR1VQX1RFU1QgJmFtcDsmYW1wOyAhREVCVUdfRlMKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjliMjIzN2U5ODIzZTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jCkBAIC0wLDAgJiM0MzsxLDEwNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtmaWxlX3V0aWxzLmgmIzM0OwomIzQzOwomIzQzO2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CXNzaXplX3QgbnVtcmVhZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKJiM0MzsJaWYgKGZkID09IC0xKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJbnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7CiYjNDM7CWlmIChudW1yZWFkICZsdDsgMSkgewomIzQzOwkJZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCXJldHVybiAtZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1ZltudW1yZWFkXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQomIzQzO3sKJiM0MzsJaW50IGZkLCBzYXZlZF9lcnJubzsKJiM0MzsJc3NpemVfdCBudW13cml0dGVuOwomIzQzOwomIzQzOwlpZiAoYnVmbGVuICZsdDsgMikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOwomIzQzOwlpZiAoZmQgPT0gLTEpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwludW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7CiYjNDM7CXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJaWYgKG51bXdyaXR0ZW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1zYXZlZF9lcnJubzsKJiM0MzsKJiM0MzsJaWYgKG51bXdyaXR0ZW4gIT0gKHNzaXplX3QpKGJ1ZmxlbiAtIDEpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB2YWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CWNoYXIgYnVmWzIxXTsKJiM0MzsJY2hhciAqZW5kOwomIzQzOwomIzQzOwlpZiAoIW51bSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBSZWplY3Qgc2lnbnMgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZSB0aGF0IGFyZSBhY2NlcHRlZCBieSBzdHJ0b3VsKCkgKi8KJiM0MzsJaWYgKGJ1ZlswXSAmbHQ7ICYjMzk7MCYjMzk7IHx8IGJ1ZlswXSAmZ3Q7ICYjMzk7OSYjMzk7KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWVycm5vID0gMDsKJiM0MzsJdmFsID0gc3RydG91bChidWYsICZhbXA7ZW5kLCAxMCk7CiYjNDM7CWlmIChlcnJubykKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CS8qIE9ubHkgYWxsb3cgYSBuZXdsaW5lIGFmdGVyIHRoZSBudW1iZXIgKi8KJiM0MzsJaWYgKCplbmQgPT0gJiMzOTtcbiYjMzk7KQomIzQzOwkJZW5kJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJaWYgKCplbmQgIT0gJiMzOTtcMCYjMzk7KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CSpudW0gPSB2YWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMjFdOwomIzQzOwomIzQzOwlzcHJpbnRmKGJ1ZiwgJiMzNDslbHUmIzM0OywgbnVtKTsKJiM0MzsJcmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSAmIzQzOyAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7CiYjNDM7CXJldHVybiByZXQgPT0gLUVJTlZBTCA/IDAgOiByZXQ7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaCBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNTBkYWE4MmMyYjJiNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmgKQEAgLTAsMCAmIzQzOzEsMTMgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX19NTV9GSUxFX1VUSUxTX0hfXwomIzQzOyNkZWZpbmUgX19NTV9GSUxFX1VUSUxTX0hfXwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtzdGRkZWYuaCZndDsKJiM0MzsKJiM0MztpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTsKJiM0MztpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKTsKJiM0MztpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTsKJiM0MztpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pOwomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKcmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCmluZGV4IGQ3OTE3ZGNlM2FiYWMuLmFiZDlmNzE4MmY4OGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKQEAgLTgsMTIgJiM0Mzs4LDE4IEBACiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ZpbGVfdXRpbHMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFRIUF9TWVNGUyAmIzM0Oy9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlLyYjMzQ7CiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0CiYjNDM7CiYjNDM7I2lmbmRlZiBBUlJBWV9TSVpFCiYjNDM7I2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSkKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNldHRpbmdzX3N0YWNrW01BWF9TRVRUSU5HU19ERVBUSF07CiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4Owogc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2F2ZWRfc2V0dGluZ3M7CkBAIC00OCw2ICYjNDM7NTQsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG1lbV9lbmFibGVkX3N0cmluZ3NbXSA9IHsKIAlOVUxMCiB9OwogCiYjNDM7c3RhdGljIHZvaWQgcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXByaW50ZigmIzM0OyMgJXM6ICVzICglZClcbiYjMzQ7LCBwYXRoLCBzdHJlcnJvcigtcmV0KSwgLXJldCk7CiYjNDM7fQomIzQzOwogaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKQogewogCWNoYXIgcGF0aFtQQVRIX01BWF07CkBAIC02MSw4ICYjNDM7NzIsOSBAQCBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pCiAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAl9CiAKLQlpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkgewotCQlwZXJyb3IocGF0aCk7CiYjNDM7CXJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KIApAQCAtMTAzLDEyICYjNDM7MTE1LDE3IEBAIHZvaWQgdGhwX3dyaXRlX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWwpCiAJCXByaW50ZigmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KLQl3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgJiM0MzsgMSk7CiYjNDM7CXJldCA9IHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSAmIzQzOyAxKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQogfQogCiB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKQogewogCWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnVtOwogCWludCByZXQ7CiAKIAlyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTICYjMzQ7JXMmIzM0OywgbmFtZSk7CkBAIC0xMTYsNyAmIzQzOzEzMywxMyBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKQogCQlwcmludGYoJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAl9Ci0JcmV0dXJuIHJlYWRfbnVtKHBhdGgpOwomIzQzOwlyZXQgPSByZWFkX251bShwYXRoLCAmYW1wO251bSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG51bTsKIH0KIAogdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKQpAQCAtMTI5LDcgJiM0MzsxNTIsMTEgQEAgdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKQogCQlwcmludGYoJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAl9Ci0Jd3JpdGVfbnVtKHBhdGgsIG51bSk7CiYjNDM7CXJldCA9IHdyaXRlX251bShwYXRoLCBudW0pOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiB9CiAKIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpCkBAIC0xNTcsOCAmIzQzOzE4NCwxNSBAQCB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKQogCQkubWF4X3B0ZXNfc2hhcmVkID0gdGhwX3JlYWRfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWQmIzM0OyksCiAJCS5wYWdlc190b19zY2FuID0gdGhwX3JlYWRfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9wYWdlc190b19zY2FuJiMzNDspLAogCX07Ci0JaWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pCi0JCXNldHRpbmdzLSZndDtyZWFkX2FoZWFkX2tiID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCk7CiYjNDM7CWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7CiYjNDM7CQlpbnQgcmV0ID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwKJiM0MzsJCQkJICAgJmFtcDtzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYik7CiYjNDM7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTsKJiM0MzsJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICghKCgxICZsdDsmbHQ7IGkpICZhbXA7IG9yZGVycykpIHsKQEAgLTIwOCw4ICYjNDM7MjQyLDE1IEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKQogCXRocF93cml0ZV9udW0oJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZCYjMzQ7LCBraHVnZXBhZ2VkLSZndDttYXhfcHRlc19zaGFyZWQpOwogCXRocF93cml0ZV9udW0oJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW4mIzM0Oywga2h1Z2VwYWdlZC0mZ3Q7cGFnZXNfdG9fc2Nhbik7CiAKLQlpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkKLQkJd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHNldHRpbmdzLSZndDtyZWFkX2FoZWFkX2tiKTsKJiM0MzsJaWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHsKJiM0MzsJCWludCByZXQgPSB3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwKJiM0MzsJCQkJICAgIHNldHRpbmdzLSZndDtyZWFkX2FoZWFkX2tiKTsKJiM0MzsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpOwomIzQzOwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX09SREVSUzsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKCEoKDEgJmx0OyZsdDsgaSkgJmFtcDsgb3JkZXJzKSkKQEAgLTMwNyw4ICYjNDM7MzQ4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSkKIAkJfQogCiAJCXJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTsKLQkJaWYgKHJldCkKLQkJCW9yZGVycyB8PSAxVUwgJmx0OyZsdDsgaTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlpZiAocmV0ICE9IC1FTk9FTlQpIHsKJiM0MzsJCQkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCQkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwkJCX0KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9yZGVycyB8PSAxVUwgJmx0OyZsdDsgaTsKIAl9CiAKIAlyZXR1cm4gb3JkZXJzOwpAQCAtMzgyLDggJiM0Mzs0MzAsNyBAQCBpbnQgZGV0ZWN0X2h1Z2V0bGJfcGFnZV9zaXplcyh1bnNpZ25lZCBsb25nIHNpemVzW10sIGludCBtYXgpCiAJCWlmIChzc2NhbmYoZW50cnktJmd0O2RfbmFtZSwgJiMzNDtodWdlcGFnZXMtJXp1a0ImIzM0OywgJmFtcDtrYikgIT0gMSkKIAkJCWNvbnRpbnVlOwogCQlzaXplc1tjb3VudCYjNDM7JiM0MztdID0ga2IgKiAxMDI0OwotCQlrc2Z0X3ByaW50X21zZygmIzM0O1tJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxuJiMzNDssCi0JCQkgICAgICAga2IpOwomIzQzOwkJcHJpbnRmKCYjMzQ7IyBbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcbiYjMzQ7LCBrYik7CiAJfQogCWNsb3NlZGlyKGRpcik7CiAJcmV0dXJuIGNvdW50OwpAQCAtNDI1LDI4ICYjNDM7NDcyLDQ5IEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfc3lzZnNfcGF0aChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sCiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKQogewogCWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnI7CiYjNDM7CWludCByZXQ7CiAKIAlodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCAmIzM0O25yX2h1Z2VwYWdlcyYjMzQ7KTsKIAotCXJldHVybiByZWFkX251bShwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0ocGF0aCwgJmFtcDtucik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yOwogfQogCiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucikKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwlpbnQgcmV0OwogCiAJaHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgJiMzNDtucl9odWdlcGFnZXMmIzM0Oyk7CiAKLQl3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7CiYjNDM7CXJldCA9IHdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQogfQogCiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBucjsKJiM0MzsJaW50IHJldDsKIAogCWh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsICYjMzQ7ZnJlZV9odWdlcGFnZXMmIzM0Oyk7CiAKLQlyZXR1cm4gcmVhZF9udW0ocGF0aCk7CiYjNDM7CXJldCA9IHJlYWRfbnVtKHBhdGgsICZhbXA7bnIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBucjsKIH0KIAogc3RhdGljIGJvb2wgX19odWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucikKQEAgLTUwMiw3ICYjNDM7NTcwLDggQEAgdW5zaWduZWQgbG9uZyBodWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgbnIsIHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwKIAkJcmV0dXJuIDA7CiAKIAlpZiAobnJfZW5hYmxlZCAmZ3Q7IG1heCkgewotCQlrc2Z0X3ByaW50X21zZygmIzM0O2RldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcbiYjMzQ7LCBucl9lbmFibGVkLCBtYXgpOwomIzQzOwkJcHJpbnRmKCYjMzQ7IyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXG4mIzM0OywKJiM0MzsJCSAgICAgICBucl9lbmFibGVkLCBtYXgpOwogCQlucl9lbmFibGVkID0gbWF4OwogCX0KIApAQCAtNTc0LDggJiM0Mzs2NDMsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZCkKIAogc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19zaWdoYW5kbGVyKGludCBzaWcpCiB7CiYjNDM7CSh2b2lkKXNpZzsKJiM0MzsKIAkvKiBleGl0KCkgd2lsbCBpbnZva2UgdGhlIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0IGhhbmRsZXIuICovCi0JZXhpdChLU0ZUX0ZBSUwpOwomIzQzOwlleGl0KEVYSVRfRkFJTFVSRSk7CiB9CiAKIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oCnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaApkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmUKaW5kZXggMTQ0NmE2NTllNTQwOC4uMTU0ZDc0MGJlMDJlOCAxMDA2NDQKLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlCkBAIC0zLDMgJiM0MzszLDQgQEAgc2xhYmluZm8KIHBhZ2UtdHlwZXMKIHBhZ2Vfb3duZXJfc29ydAogdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MztndXBfYmVuY2gKZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGUKaW5kZXggODU4MTg2YTZlZWZkYi4uZjIwYTMyZDhjYzIyZSAxMDA2NDQKLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vTWFrZWZpbGUKQEAgLTMsMTMgJiM0MzszLDE1IEBACiAjCiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZQogCi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7QlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlcgomIzQzO0JVSUxEX1RBUkdFVFMgJiM0Mzs9IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaAogSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzCiAKIExJQl9ESVIgPSAuLi9saWIvYXBpCiBMSUJTID0gJChMSUJfRElSKS9saWJhcGkuYQomIzQzO0dVUF9CRU5DSF9PQkpTID0gZ3VwX2JlbmNoLmMgLi4vbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgLi4vbGliL21tL2ZpbGVfdXRpbHMuYwogCi1DRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1wdGhyZWFkCiYjNDM7Q0ZMQUdTICYjNDM7PSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtSS4uLy4uIC1wdGhyZWFkCiBMREZMQUdTICYjNDM7PSAkKExJQlMpIC1wdGhyZWFkCiAKIGFsbDogJChCVUlMRF9UQVJHRVRTKQpAQCAtMjIsOCAmIzQzOzI0LDExIEBAICQoTElCUyk6CiAlOiAlLmMKIAkkKENDKSAkKENGTEFHUykgLW8gJEAgJCZsdDsgJChMREZMQUdTKQogCiYjNDM7Z3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpCiYjNDM7CSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKEdVUF9CRU5DSF9PQkpTKSAkKExERkxBR1MpCiYjNDM7CiBjbGVhbjoKLQkkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzOwkkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2gKIAltYWtlIC1DICQoTElCX0RJUikgY2xlYW4KIAogc2JpbmRpciA/PSAvdXNyL3NiaW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMgYi90b29scy9tbS9ndXBfYmVuY2guYwpzaW1pbGFyaXR5IGluZGV4IDUwJQpyZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCnJlbmFtZSB0byB0b29scy9tbS9ndXBfYmVuY2guYwppbmRleCAzZjg0MWE5NmY4NzA2Li5lNmE4MGJhNTE5NWE3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jCkBAIC0xMCwxMSAmIzQzOzEwLDEwIEBACiAjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7YXNzZXJ0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bW0vZ3VwX3Rlc3QuaCZndDsKLSNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2RlZmluZSBNQiAoMVVMICZsdDsmbHQ7IDIwKQogCkBAIC0zOCwxMiAmIzQzOzM3LDYgQEAgc3RhdGljIGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpCiAJCXJldHVybiAmIzM0O1BJTl9GQVNUX0JFTkNITUFSSyYjMzQ7OwogCWNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzoKIAkJcmV0dXJuICYjMzQ7UElOX0xPTkdURVJNX0JFTkNITUFSSyYjMzQ7OwotCWNhc2UgR1VQX0JBU0lDX1RFU1Q6Ci0JCXJldHVybiAmIzM0O0dVUF9CQVNJQ19URVNUJiMzNDs7Ci0JY2FzZSBQSU5fQkFTSUNfVEVTVDoKLQkJcmV0dXJuICYjMzQ7UElOX0JBU0lDX1RFU1QmIzM0OzsKLQljYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOgotCQlyZXR1cm4gJiMzNDtEVU1QX1VTRVJfUEFHRVNfVEVTVCYjMzQ7OwogCX0KIAlyZXR1cm4gJiMzNDtVbmtub3duIGNvbW1hbmQmIzM0OzsKIH0KQEAgLTUzLDM5ICYjNDM7NDYsMjkgQEAgdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKQogCXN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7CiAJaW50IGksIHN0YXR1czsKIAotCS8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovCi0JaWYgKChjbWQgPT0gUElOX0ZBU1RfQkVOQ0hNQVJLKSB8fCAoY21kID09IEdVUF9GQVNUX0JFTkNITUFSSykgfHwKLQkgICAgIChjbWQgPT0gUElOX0xPTkdURVJNX0JFTkNITUFSSykpIHsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IHJlcGVhdHM7IGkmIzQzOyYjNDM7KSB7Ci0JCQlndXAuc2l6ZSA9IHNpemU7Ci0JCQlzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgJmFtcDtndXApOwotCQkJaWYgKHN0YXR1cykKLQkJCQlicmVhazsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHJlcGVhdHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlndXAuc2l6ZSA9IHNpemU7CiYjNDM7CQlzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgJmFtcDtndXApOwomIzQzOwkJaWYgKHN0YXR1cykgewomIzQzOwkJCWludCBlcnIgPSBlcnJubzsKIAogCQkJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7cHJpbnRfbXV0ZXgpOwotCQkJa3NmdF9wcmludF9tc2coJiMzNDslczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXMmIzM0OywKLQkJCQkgICAgICAgY21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsCi0JCQkJICAgICAgIGd1cC5wdXRfZGVsdGFfdXNlYyk7Ci0JCQlpZiAoZ3VwLnNpemUgIT0gc2l6ZSkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0OywgdHJ1bmNhdGVkIChzaXplOiAlbGxkKSYjMzQ7LCBndXAuc2l6ZSk7Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0O1xuJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0OyVzIGlvY3RsIGZhaWxlZDogJXNcbiYjMzQ7LCBjbWRfdG9fc3RyKGNtZCksCiYjNDM7CQkJCXN0cmVycm9yKGVycikpOwogCQkJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtwcmludF9tdXRleCk7CiYjNDM7CQkJcmV0dXJuIGRhdGE7CiAJCX0KLQl9IGVsc2UgewotCQlndXAuc2l6ZSA9IHNpemU7Ci0JCXN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCAmYW1wO2d1cCk7Ci0JCWlmIChzdGF0dXMpCi0JCQlnb3RvIHJldHVybl87CiAKIAkJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7cHJpbnRfbXV0ZXgpOwotCQlrc2Z0X3ByaW50X21zZygmIzM0OyVzOiBkb25lXG4mIzM0OywgY21kX3RvX3N0cihjbWQpKTsKJiM0MzsJCXByaW50ZigmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1cyYjMzQ7LAomIzQzOwkJCWNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLAomIzQzOwkJCWd1cC5wdXRfZGVsdGFfdXNlYyk7CiAJCWlmIChndXAuc2l6ZSAhPSBzaXplKQotCQkJa3NmdF9wcmludF9tc2coJiMzNDtUcnVuY2F0ZWQgKHNpemU6ICVsbGQpXG4mIzM0OywgZ3VwLnNpemUpOwomIzQzOwkJCXByaW50ZigmIzM0OywgdHJ1bmNhdGVkIChzaXplOiAlbGxkKSYjMzQ7LCBndXAuc2l6ZSk7CiYjNDM7CQlwcmludGYoJiMzNDtcbiYjMzQ7KTsKIAkJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtwcmludF9tdXRleCk7CiAJfQogCi1yZXR1cm5fOgotCWtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgJiMzNDtpb2N0bCBzdGF0dXMgJWRcbiYjMzQ7LCBzdGF0dXMpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC05MywzOCAmIzQzOzc2LDIxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07CiAJaW50IGZpbGVkLCBpLCBvcHQsIG5yX3BhZ2VzID0gMSwgdGhwID0gLTEsIHdyaXRlID0gMSwgbnRocmVhZHMgPSAxLCByZXQ7Ci0JaW50IGZsYWdzID0gTUFQX1BSSVZBVEU7CiYjNDM7CWludCBmbGFncyA9IE1BUF9QUklWQVRFLCBzdGFydGVkX3RocmVhZHMgPSAwLCBleGl0X3N0YXR1cyA9IDE7CiAJY2hhciAqZmlsZSA9ICYjMzQ7L2Rldi96ZXJvJiMzNDs7Ci0JYm9vbCBodWdldGxiID0gZmFsc2U7CiYjNDM7CWJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTsKJiM0MzsJdm9pZCAqdGhyZWFkX3Jlc3VsdDsKIAlwdGhyZWFkX3QgKnRpZDsKIAljaGFyICpwOwogCi0Jd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDttOnI6bjpGOmY6YWJjajp0VExVdXdXU0hweiYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDttOnI6bjpGOmY6YWo6dFRMdXdXU0gmIzM0OykpICE9IC0xKSB7CiAJCXN3aXRjaCAob3B0KSB7CiAJCWNhc2UgJiMzOTthJiMzOTs6CiAJCQljbWQgPSBQSU5fRkFTVF9CRU5DSE1BUks7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O2ImIzM5OzoKLQkJCWNtZCA9IFBJTl9CQVNJQ19URVNUOwotCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtMJiMzOTs6CiAJCQljbWQgPSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOwogCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtjJiMzOTs6Ci0JCQljbWQgPSBEVU1QX1VTRVJfUEFHRVNfVEVTVDsKLQkJCS8qCi0JCQkgKiBEdW1wIHBhZ2UgMCAoaW5kZXggMSkuIE1heSBiZSBvdmVycmlkZGVuIGxhdGVyLCBieQotCQkJICogdXNlciYjMzk7cyBub24tb3B0aW9uIGFyZ3VtZW50cy4KLQkJCSAqCi0JCQkgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuICYjMzQ7ZG8KLQkJCSAqIG5vdGhpbmcmIzM0Oy4KLQkJCSAqLwotCQkJZ3VwLndoaWNoX3BhZ2VzWzBdID0gMTsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7cCYjMzk7OgotCQkJLyogd29ya3Mgb25seSB3aXRoIERVTVBfVVNFUl9QQUdFU19URVNUICovCi0JCQlndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjsKLQkJCWJyZWFrOwogCQljYXNlICYjMzk7RiYjMzk7OgogCQkJLyogc3RydG9sLCBzbyB5b3UgY2FuIHBhc3MgZmxhZ3MgaW4gaGV4IGZvcm0gKi8KIAkJCWd1cC5ndXBfZmxhZ3MgPSBzdHJ0b2wob3B0YXJnLCAwLCAwKTsKQEAgLTE0MSw3ICYjNDM7MTA3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQljYXNlICYjMzk7biYjMzk7OgogCQkJbnJfcGFnZXMgPSBhdG9pKG9wdGFyZyk7CiAJCQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkJCW5yX3BhZ2VzID0gc2l6ZSAvIHBzaXplKCk7CiYjNDM7CQkJCW5yX3BhZ2VzID0gc2l6ZSAvIGdldHBhZ2VzaXplKCk7CiAJCQlicmVhazsKIAkJY2FzZSAmIzM5O3QmIzM5OzoKIAkJCXRocCA9IDE7CkBAIC0xNDksOSAmIzQzOzExNSw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJY2FzZSAmIzM5O1QmIzM5OzoKIAkJCXRocCA9IDA7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O1UmIzM5OzoKLQkJCWNtZCA9IEdVUF9CQVNJQ19URVNUOwotCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTt1JiMzOTs6CiAJCQljbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7CiAJCQlicmVhazsKQEAgLTE3Myw1MiAmIzQzOzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlodWdldGxiID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7V3JvbmcgYXJndW1lbnRcbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXcm9uZyBhcmd1bWVudFxuJiMzNDspOwomIzQzOwkJCWV4aXQoMSk7CiAJCX0KIAl9CiAKLQlpZiAob3B0aW5kICZsdDsgYXJnYykgewotCQlpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDsKLQkJLyoKLQkJICogRm9yIGV4YW1wbGU6Ci0JCSAqCi0JCSAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxCi0JCSAqCi0JCSAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTcKLQkJICovCi0KLQkJd2hpbGUgKChvcHRpbmQgJmx0OyBhcmdjKSAmYW1wOyZhbXA7Ci0JCSAgICAgICAoZXh0cmFfYXJnX2NvdW50ICZsdDsgR1VQX1RFU1RfTUFYX1BBR0VTX1RPX0RVTVApKSB7Ci0JCQkvKgotCQkJICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW4KLQkJCSAqIHVzZSBub3JtYWwgMC1iYXNlZCBpbmRleGluZyBvbiB0aGUgY29tbWFuZCBsaW5lLgotCQkJICovCi0JCQlsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSAmIzQzOyAxOwotCi0JCQlndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7Ci0JCQlleHRyYV9hcmdfY291bnQmIzQzOyYjNDM7OwotCQkJb3B0aW5kJiM0MzsmIzQzOzsKLQkJfQomIzQzOwlpZiAob3B0aW5kICE9IGFyZ2MpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O1VuZXhwZWN0ZWQgYXJndW1lbnQgJiMzOTslcyYjMzk7XG4mIzM0OywgYXJndltvcHRpbmRdKTsKJiM0MzsJCWV4aXQoMSk7CiAJfQogCi0Ja3NmdF9wcmludF9oZWFkZXIoKTsKJiM0MzsJaWYgKGdldHVpZCgpKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiAKIAlpZiAoaHVnZXRsYikgewogCQl1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiAKLQkJaWYgKCFocF9zaXplKQotCQkJa3NmdF9leGl0X3NraXAoJiMzNDtIdWdlVExCIGlzIHVuYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQlpZiAoIWhwX3NpemUpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtDb3VsZCBub3QgZGV0ZXJtaW5lIGh1Z2UgcGFnZSBzaXplXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CQl9CiAKIAkJc2l6ZSA9IChzaXplICYjNDM7IGhwX3NpemUgLSAxKSAmYW1wOyB+KGhwX3NpemUgLSAxKTsKLQkJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKQotCQkJa3NmdF9leGl0X3NraXAoJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcbiYjMzQ7KTsKJiM0MzsJCWlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwkJCXJldHVybiAxOwomIzQzOwkJfQogCX0KIAotCWtzZnRfc2V0X3BsYW4obnRocmVhZHMpOwotCiAJZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTsKLQlpZiAoZmlsZWQgJmx0OyAwKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAoZmlsZWQgJmx0OyAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KIAogCWd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzOwogCWlmICh3cml0ZSkKQEAgLTIyNywyNiAmIzQzOzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwogCWlmIChndXBfZmQgPT0gLTEpIHsKIAkJc3dpdGNoIChlcnJubykgewotCQljYXNlIEVBQ0NFUzoKLQkJCWlmIChnZXR1aWQoKSkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKLQkJCWJyZWFrOwogCQljYXNlIEVOT0VOVDoKIAkJCWlmIChvcGVuZGlyKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcmIzM0OykgPT0gTlVMTCkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xuJiMzNDssIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgR1VQX1RFU1RfRklMRSwKJiM0MzsJCQkJc3RyZXJyb3IoZXJybm8pKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKLQkJa3NmdF9leGl0X3Bhc3MoKTsKJiM0MzsJCWdvdG8gZXJyX2Nsb3NlX2ZpbGVkOwogCX0KIAogCXAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCBmaWxlZCwgMCk7Ci0JaWYgKHAgPT0gTUFQX0ZBSUxFRCkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bW1hcDogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAocCA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttbWFwOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlnb3RvIGVycl9jbG9zZV9ndXBfZmQ7CiYjNDM7CX0KIAlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7CiAKIAlpZiAodGhwID09IDEpCkBAIC0yNTUsMjEgJiM0MzsyMDUsNDQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiAKIAkvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi8KLQlmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCAmbHQ7IGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpCiYjNDM7CWZvciAoOyAodW5zaWduZWQgbG9uZylwICZsdDsgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gZ2V0cGFnZXNpemUoKSkKIAkJcFswXSA9IDA7CiAKIAl0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7Ci0JYXNzZXJ0KHRpZCk7CiYjNDM7CWlmICghdGlkKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcbiYjMzQ7LAomIzQzOwkJCW50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJZ290byBlcnJfdW5tYXA7CiYjNDM7CX0KJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7CiAJCXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCAmYW1wO2d1cCk7Ci0JCWFzc2VydChyZXQgPT0gMCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7cHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKHJldCkpOwomIzQzOwkJCXRocmVhZF9lcnJvciA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlzdGFydGVkX3RocmVhZHMmIzQzOyYjNDM7OwogCX0KLQlmb3IgKGkgPSAwOyBpICZsdDsgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7Ci0JCXJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpOwotCQlhc3NlcnQocmV0ID09IDApOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc3RhcnRlZF90aHJlYWRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgJmFtcDt0aHJlYWRfcmVzdWx0KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKHJldCkpOwomIzQzOwkJCXRocmVhZF9lcnJvciA9IHRydWU7CiYjNDM7CQl9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpCiYjNDM7CQkJdGhyZWFkX2Vycm9yID0gdHJ1ZTsKIAl9CiAKIAlmcmVlKHRpZCk7Ci0KLQlrc2Z0X2V4aXRfcGFzcygpOwomIzQzOwlpZiAodGhyZWFkX2Vycm9yKQomIzQzOwkJZ290byBlcnJfdW5tYXA7CiYjNDM7CWV4aXRfc3RhdHVzID0gMDsKJiM0MzsKJiM0MztlcnJfdW5tYXA6CiYjNDM7CW11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTsKJiM0MztlcnJfY2xvc2VfZ3VwX2ZkOgomIzQzOwljbG9zZShndXBfZmQpOwomIzQzO2Vycl9jbG9zZV9maWxlZDoKJiM0MzsJY2xvc2UoZmlsZWQpOwomIzQzOwlyZXR1cm4gZXhpdF9zdGF0dXM7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCmluZGV4IDJkNTM2NjE5NmUzMDkuLjljMDM2MjRmZDI5MzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0zNyw3ICYjNDM7MzcsOCBAQCBlbmRpZgogIyBMRExJQlMuCiBNQUtFRkxBR1MgJiM0Mzs9IC0tbm8tYnVpbHRpbi1ydWxlcwogCi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKQomIzQzO0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliCiYjNDM7Q0ZMQUdTICYjNDM7PSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKQogQ0ZMQUdTICYjNDM7PSAtV3VucmVhY2hhYmxlLWNvZGUKIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbQogCkBAIC01Nyw4ICYjNDM7NTgsOCBAQCBlbmRpZgogCiBURVNUX0dFTl9GSUxFUyA9IGNvdwogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGNvbXBhY3Rpb25fdGVzdAomIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXAKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfbG9uZ3Rlcm0KLVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfdGVzdAogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGhtbS10ZXN0cwogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbWFkdmlzZQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbW1hcApAQCAtMTg3LDggJiM0MzsxODgsMTAgQEAgVEVTVF9GSUxFUyAmIzQzOz0gd3JpdGVfaHVnZXRsYl9tZW1vcnkuc2gKIAogaW5jbHVkZSAuLi9saWIubWsKIAotJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jCi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmMKJiM0MzskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXAomIzQzOwkJICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jCiYjNDM7JChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFwKJiM0MzsJCSAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwogCiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmMKICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmMKQEAgLTIxNyw3ICYjNDM7MjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyAmIzQzOz0gLW0zMiAtbXhzYXZlCiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwgLWxtCiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuYwogCSQoY2FsbCBtc2csQ0MsLCRAKQotCSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEAKJiM0MzsJJChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRACiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKQogZW5kaWYKIApAQCAtMjI2LDcgJiM0MzsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICYjNDM7PSAtbTY0IC1teHNhdmUKICQoQklOQVJJRVNfNjQpOiBMRExJQlMgJiM0Mzs9IC1scnQgLWxkbAogJChCSU5BUklFU182NCk6ICQoT1VUUFVUKS8lXzY0OiAlLmMKIAkkKGNhbGwgbXNnLENDLCwkQCkKLQkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRACiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQAogJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSkKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKQEAgLTE1LDkgJiM0MzsxNSw5IEBACiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIE1BUF9TSVpFX01CCTEwMAogI2RlZmluZSBNQVBfU0laRQkoTUFQX1NJWkVfTUIgKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKaW5kZXggOGFhNTI0OWQ5YmVmNi4uMzI2NGE4Mjg1NzViZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKQEAgLTI5LDcgJiM0MzsyOSw2IEBACiAjaW5jbHVkZSAmIzM0Oy4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplOwogc3RhdGljIGludCBwYWdlbWFwX2ZkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwppbmRleCA0NWI4NGY3YjM2NGUwLi4yODlhZWQyZWJhYzAyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogdWludDY0X3QgcGFnZV9zaXplOwogdWludDY0X3QgcG1kX3BhZ2VzaXplOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2luY2x1ZGUgJiMzNDsuLi9waWRmZC9waWRmZC5oJiMzNDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lM2MyZmZhM2EwNTdmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMKQEAgLTAsMCAmIzQzOzEsMjc3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NAomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9pb2N0bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9ndXBfdGVzdC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTUIgKDFVTCAmbHQ7Jmx0OyAyMCkKJiM0MzsKJiM0MzsvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi8KJiM0MzsjZGVmaW5lIEZPTExfV1JJVEUJMHgwMQkvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi8KJiM0MzsKJiM0MzsvKiBQYWdlIGNvdW50cyBleGVyY2lzaW5nIHNpbmdsZSwgVEhQLWJhdGNoLCBwYXJ0aWFsLCBhbmQgZnVsbC1tYXBwaW5nIEdVUC4gKi8KJiM0MztzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07CiYjNDM7CiYjNDM7I2RlZmluZSBHVVBfVEVTVF9GSUxFICYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QmIzM0OwomIzQzOyNkZWZpbmUgTlJfSFVHRV9QQUdFUyAxMjgKJiM0MzsKJiM0MztIVUdFVExCX1NFVFVQX0RFRkFVTFRfUEFHRVMoTlJfSFVHRV9QQUdFUykKJiM0MzsKJiM0MztGSVhUVVJFKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJaW50IGd1cF9mZDsKJiM0MzsJY2hhciAqYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJYm9vbCB0aHA7CiYjNDM7CWJvb2wgaHVnZXRsYjsKJiM0MzsJYm9vbCB3cml0ZTsKJiM0MzsJYm9vbCBzaGFyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfdGhwKQomIzQzO3sKJiM0MzsJLnRocCA9IHRydWUsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSBmYWxzZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZCkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYikKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSB0cnVlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChndXBfdGVzdCkKJiM0Mzt7CiYjNDM7CWludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEU7CiYjNDM7CWludCB6ZXJvX2ZkOwomIzQzOwljaGFyICpwOwomIzQzOwomIzQzOwlzZWxmLSZndDtzaXplID0gMTI4ICogTUI7CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtodWdldGxiKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiYjNDM7CiYjNDM7CQlpZiAoIWhwX3NpemUpCiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7SHVnZVRMQiBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSAmbHQ7IE5SX0hVR0VfUEFHRVMpCiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7Tm90IGVub3VnaCBodWdlIHBhZ2VzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CQlzZWxmLSZndDtzaXplID0gTlJfSFVHRV9QQUdFUyAqIGhwX3NpemU7CiYjNDM7CQltbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtzaGFyZWQpCiYjNDM7CQltbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgJmFtcDsgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7CiYjNDM7CiYjNDM7CS8qIHplcm9fZmQgaGFzIHRvIGJlICZndDs9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi8KJiM0MzsJemVyb19mZCA9IG9wZW4oJiMzNDsvZGV2L3plcm8mIzM0OywgT19SRFdSKTsKJiM0MzsJQVNTRVJUX0dFKHplcm9fZmQsIDApOwomIzQzOwomIzQzOwkvKiBndXBfZmQgaGFzIHRvIGJlICZndDs9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi8KJiM0MzsJc2VsZi0mZ3Q7Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwomIzQzOwlBU1NFUlRfR0Uoc2VsZi0mZ3Q7Z3VwX2ZkLCAwKTsKJiM0MzsKJiM0MzsJc2VsZi0mZ3Q7YWRkciA9IG1tYXAoTlVMTCwgc2VsZi0mZ3Q7c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCQkgIG1tYXBfZmxhZ3MsIHplcm9fZmQsIDApOwomIzQzOwomIzQzOwlBU1NFUlRfTkUoc2VsZi0mZ3Q7YWRkciwgTUFQX0ZBSUxFRCkgewomIzQzOwkJaW50IGVyciA9IGVycm5vOwomIzQzOwomIzQzOwkJY2xvc2UoemVyb19mZCk7CiYjNDM7CQljbG9zZShzZWxmLSZndDtndXBfZmQpOwomIzQzOwkJVEhfTE9HKCYjMzQ7bW1hcCBmYWlsZWQ6ICVzJiMzNDssIHN0cmVycm9yKGVycikpOwomIzQzOwl9CiYjNDM7CWNsb3NlKHplcm9fZmQpOwomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dGhwKQomIzQzOwkJbWFkdmlzZShzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsJZWxzZSBpZiAoIXZhcmlhbnQtJmd0O2h1Z2V0bGIpCiYjNDM7CQltYWR2aXNlKHNlbGYtJmd0O2FkZHIsIHNlbGYtJmd0O3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiYjNDM7CiYjNDM7CWZvciAocCA9IHNlbGYtJmd0O2FkZHI7ICh1bnNpZ25lZCBsb25nKXAgJmx0OyAodW5zaWduZWQgbG9uZylzZWxmLSZndDthZGRyCiYjNDM7CQkJJiM0Mzsgc2VsZi0mZ3Q7c2l6ZTsgcCAmIzQzOz0gcHNpemUoKSkKJiM0MzsJCXBbMF0gPSAwOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJbXVubWFwKHNlbGYtJmd0O2FkZHIsIHNlbGYtJmd0O3NpemUpOwomIzQzOwljbG9zZShzZWxmLSZndDtndXBfZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fZ3VwX2NtZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsCiYjNDM7CQkJIEZJWFRVUkVfREFUQShndXBfdGVzdCkgKnNlbGYsCiYjNDM7CQkJIGNvbnN0IEZJWFRVUkVfVkFSSUFOVChndXBfdGVzdCkgKnZhcmlhbnQsCiYjNDM7CQkJIHVuc2lnbmVkIGxvbmcgY29tbWFuZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsKJiM0MzsJCQkuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtJmd0O2FkZHIsCiYjNDM7CQkJLnNpemUgPSBzZWxmLSZndDtzaXplLAomIzQzOwkJCS5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gJmx0OyAwID8KJiM0MzsJCQkJc2VsZi0mZ3Q7c2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLAomIzQzOwkJCS5ndXBfZmxhZ3MgPSB2YXJpYW50LSZndDt3cml0ZSA/IEZPTExfV1JJVEUgOiAwLAomIzQzOwkJfTsKJiM0MzsKJiM0MzsJCVRIX0xPRygmIzM0O25yX3BhZ2VzX3Blcl9jYWxsPSV1JiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7CiYjNDM7CQlBU1NFUlRfRVEoaW9jdGwoc2VsZi0mZ3Q7Z3VwX2ZkLCBjb21tYW5kLCAmYW1wO2d1cCksIDApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXMpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9CQVNJQ19URVNUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcykKJiM0Mzt7CiYjNDM7CXJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0JBU0lDX1RFU1QpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzX2Zhc3QpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9GQVNUX0JFTkNITUFSSyk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdCkKJiM0Mzt7CiYjNDM7CXJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0ZBU1RfQkVOQ0hNQVJLKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19sb25ndGVybSkKJiM0Mzt7CiYjNDM7CXJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0xPTkdURVJNX0JFTkNITUFSSyk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJY2hhciAqZmlsZSA9ICYjMzQ7L2Rldi96ZXJvJiMzNDs7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJfQomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgPT0gLTEpIHsKJiM0MzsJCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CQlpZiAoZXJybm8gPT0gRUFDQ0VTKQomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxuJiMzNDspOwomIzQzOwkJaWYgKGVycm5vID09IEVOT0VOVCkgewomIzQzOwkJCURJUiAqZGVidWdmcyA9IG9wZW5kaXIoJiMzNDsvc3lzL2tlcm5lbC9kZWJ1ZyYjMzQ7KTsKJiM0MzsKJiM0MzsJCQlpZiAoIWRlYnVnZnMpIHsKJiM0MzsJCQkJa3NmdF9leGl0X3NraXAoJiMzNDtNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXG4mIzM0Oyk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJY2xvc2VkaXIoZGVidWdmcyk7CiYjNDM7CQkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7Q2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcbiYjMzQ7KTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwl9CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwppbmRleCA1MTBkZTkzYmU2ODE0Li5jOWQ4YjQ0OTEyNjM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7CiBzdGF0aWMgaW50IG5yX2h1Z2V0bGJzaXplczsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKQEAgLTEwLDkgJiM0MzsxMCw2IEBACiAgKiBidWdzLgogICovCiAKLSNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwotCiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CkBAIC0zMyw2ICYjNDM7MzAsOSBAQAogI2luY2x1ZGUgJmx0O3N5cy9ldmVudGZkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmQuaCZndDsKICNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKIAogLyoKICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24mIzM5O3QgZXhwb3J0ZWQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKaW5kZXggNTU1YjRiM2QxNDMwNy4uNTdjZjc5MGNhNDc4ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBNSU5fRlJFRV9QQUdFUwkyMAogI2RlZmluZSBOUl9IVUdFX1BBR0VTCTEwCS8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCmluZGV4IDBmMmFhZDFiN2RiZDYuLmE0NThiZWNmNTgzMjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCkBAIC0xOCw3ICYjNDM7MTgsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWZkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpCiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYwppbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMKQEAgLTI2LDcgJiM0MzsyNiw2IEBACiAjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIERFRkFVTFRfTEVOR1RIX01CIDEwVUwKICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jCmluZGV4IDNmZjdmMDYyYjdlYjQuLmY0NTE0ZGE0OWUxZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYwppbmRleCBiYzIwMmU0ZWQyYmRhLi4yMDg2NGU3ZDRlMGM3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMKQEAgLTIxLDkgJiM0MzsyMSw5IEBACiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3RhdGZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORQogI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jCmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uYwpAQCAtMjAsNyAmIzQzOzIwLDYgQEAKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaWZuZGVmIFNUQVRYX0RJT0FMSUdOCiAjZGVmaW5lIFNUQVRYX0RJT0FMSUdOCQkweDAwMDAyMDAwVQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwppbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwpAQCAtMTAsNyAmIzQzOzEwLDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMKaW5kZXggZjk0NTQ5ZWZjYzZmZi4uMjUzMmE0MmI5OGRmZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBJTkxPT1BfSVRFUiAxMDAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDFkMmQ2YmQ3MmZkMmEuLmFkYTExZDMwZDM4ODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKQEAgLTIyLDcgJiM0MzsyMiw2IEBACiAjaW5jbHVkZSAmIzM0O2xpbnV4L21hZ2ljLmgmIzM0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMICZsdDsmbHQ7IDMwKSkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplOwpAQCAtMTIyLDYgJiM0MzsxMjEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCWNoYXIgYnVmWzEgJmx0OyZsdDsgMTBdOwogCWNoYXIgcGF0aFtQQVRIX01BWF07CiAJY2hhciAqc3RyLCAqZW5kOwomIzQzOwlpbnQgcmV0OwogCiAJZmluZm8uZGlyID0gZGlyOwogCWlmIChzdGF0KGZpbmZvLmRpciwgJmFtcDtwYXRoX3N0YXQpKQpAQCAtMTQyLDggJiM0MzsxNDIsOSBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCQkgICAgIG1ham9yKHBhdGhfc3RhdC5zdF9kZXYpLCBtaW5vcihwYXRoX3N0YXQuc3RfZGV2KSkKIAkgICAgJmd0Oz0gc2l6ZW9mKHBhdGgpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JaWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpCi0JCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3JlYWRfZmlsZSh1ZXZlbnQpJiMzNDspOwomIzQzOwlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkX2ZpbGUoJXMpOiAlc1xuJiMzNDssIHBhdGgsIHN0cmVycm9yKC1yZXQpKTsKIAlpZiAoc3Ryc3RyKGJ1ZiwgJiMzNDtERVZUWVBFPWRpc2smIzM0OykpIHsKIAkJLyogRm91bmQgaXQgKi8KIAkJaWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCkBAIC0zMjQsNyAmIzQzOzMyNSw3IEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApCiB7CiAJY29uc3QgaW50IG9wZW5fb3B0ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBPX1JET05MWSA6IE9fUkRXUjsKIAljb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0JaW50IGZkOwomIzQzOwlpbnQgZmQsIHJldDsKIAl2b2lkICpwOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIApAQCAtMzY4LDcgJiM0MzszNjksMTEgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cCkKIAkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7bW1hcCgpJiMzNDspOwogCiAJLyogRHJvcCBwYWdlIGNhY2hlICovCi0Jd3JpdGVfZmlsZSgmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyYjMzQ7LCAmIzM0OzMmIzM0OywgMik7CiYjNDM7CXJldCA9IHdyaXRlX2ZpbGUoJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMmIzM0OywgJiMzNDszJiMzNDssIDIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7d3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwomIzQzOwogCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAlyZXR1cm4gcDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKaW5kZXggNWZkNzc5MmEwZDQ3OS4uNjcxMWY0YzYxMzcxMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKQEAgLTE1LDcgJiM0MzsxNSw2IEBACiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICZsdDtpbmNsdWRlL3Zkc28vdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIICYjMzQ7L3N5cy9rZXJuZWwvbW0va3NtLyYjMzQ7CiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKaW5kZXggZjE5ZDUzYzY5NTc2NC4uYTM1ZTJiNTdlMDViMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKQEAgLTUsNyAmIzQzOzUsNiBAQAogICovCiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwpAQCAtMTYsNiAmIzQzOzE1LDcgQEAKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAKICNkZWZpbmUgVFdPTUVHCQkoMiZsdDsmbHQ7MjApCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggZWFkYzcxNTljYTViOS4uMGM1ZGU2ZWMwNmM4MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwpAQCAtMjQsNyAmIzQzOzI0LDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTEwJCShQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8CVwKIAkJCQkJIFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8CVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCmluZGV4IDgyYzZlOTZlYTZlYjMuLmY5ZWMxNDA4YTZlMzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwpAQCAtMTQsNyAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKIAogI2lmbmRlZiBQUl9USFBfRElTQUJMRV9FWENFUFRfQURWSVNFRApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwppbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwpAQCAtNDUsOCAmIzQzOzQ1LDggQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvcHRyYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2V0am1wLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3BrZXktaGVscGVycy5oJiMzNDsKIAogdTY0IHNoYWRvd19wa2V5X3JlZzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggZDA5ZjlmNmEzODRlZS4uYWUwYWI1ZWZhYmFlNiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTEzMCwzMCAmIzQzOzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7CiAJZmkKIH0KIAotcnVuX2d1cF9tYXRyaXgoKSB7Ci0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b24KLSAgICBsb2NhbCBodWdldGxiX21iPTI1NgotCi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgJiMzNDstSCAtbSAkaHVnZXRsYl9tYiYjMzQ7OyBkbwotICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtCi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG8KLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wCi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvCi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkCi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TICYjMzQ7ICYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsCi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCYjMzk7cyBkZWZhdWx0IHRocCBzaXplIChvciAyTSBvbiB4ODYpLCAxMjMgdG8KLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm0KLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiAmIzM0Oy1uIDEmIzM0OyAmIzM0Oy1uIDUxMiYjMzQ7ICYjMzQ7LW4gMTIzJiMzNDsgJiMzNDstbiAtMSYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtCi0gICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICBkb25lCi0gICAgICAgIGRvbmUKLSAgICBkb25lCi19Ci0KICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXMKIEFSQ0g2NFNUUj0mIzM0O2FybTY0IG1pcHM2NCBwYXJpc2M2NCBwcGM2NCBwcGM2NGxlIHJpc2N2NjQgczM5MHggc3BhcmM2NCB4ODZfNjQmIzM0OwogaWYgWyAteiAmIzM0OyRBUkNIJiMzNDsgXTsgdGhlbgpAQCAtMjc1LDE4ICYjNDM7MjUxLDcgQEAgZmkKIAogQ0FURUdPUlk9JiMzNDttbWFwJiMzNDsgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlCiAKLWlmICRSVU5fQUxMOyB0aGVuCi0gICAgcnVuX2d1cF9tYXRyaXgKLWVsc2UKLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gLTEKLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gLTEKLWZpCi0jIER1bXAgcGFnZXMgMCwgMTksIGFuZCA0MDk2LCB1c2luZyBwaW5fdXNlcl9wYWdlczoKLUNBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1jdCAtRiAweDEgMCAxOSAweDEwMDAKJiM0MztDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXAKIENBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF9sb25ndGVybQogCiBDQVRFR09SWT0mIzM0O3VzZXJmYXVsdGZkJiMzNDsgcnVuX3Rlc3QgLi91ZmZkLXVuaXQtdGVzdHMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwppbmRleCA1ZjI3ODkxM2M0ZDc1Li43ZjY0OWI2NzMzNTUzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCkBAIC05LDcgJiM0Mzs5LDYgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIICYjMzQ7L3Byb2Mvc2VsZi9wYWdlbWFwJiMzNDsKICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwppbmRleCA4NmE2MDM2OTI4MjYxLi4wZTA4M2FiNzFhZjYwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiB1aW50NjRfdCBwYWdlc2l6ZTsKIHVuc2lnbmVkIGludCBwYWdlc2hpZnQ7CkBAIC0xNDYsNyAmIzQzOzE0NSwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCWlmIChyZXQgJmd0Oz0gSU5QVVRfTUFYKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslczogRGVidWdmcyBpbnB1dCBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAotCXdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7d3JpdGVfZmlsZSglcyk6ICVzXG4mIzM0OywgU1BMSVRfREVCVUdGUywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwogfQogCiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQikKICNkZWZpbmUgTUFQX0hVR0VUTEIJMHg0MDAwMApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCmluZGV4IDhlYjBjNTYzMGU3ZTMuLjk2ZjcyODk4ZWJlMGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKQEAgLTE3LDcgJiM0MzsxNyw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogaW50IGJhY2tpbmdfZmQgPSAtMTsKIGludCBtbWFwX2ZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oCmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaApAQCAtMzcsNyAmIzQzOzM3LDYgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFVGRkRfRkxBR1MJKE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwppbmRleCBjOTczZDY3MjI3MjBjLi5lYjRiMjQzM2IwMGU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMKQEAgLTcsOCAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9odWdlcGFnZV9zZXR0aW5ncy5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt1ZmZkLWNvbW1vbi5oJiMzNDsKIAogc3RhdGljIGludCBwYWdlbWFwX2ZkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jCmluZGV4IGUyNGQ3YmEwMGI0NDEuLjVhMzU0YTY2NGQxZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMKQEAgLTExLDcgJiM0MzsxMSw2IEBACiAKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogLyoKICAqIFRoZSBoaW50IGFkZHIgdmFsdWUgaXMgdXNlZCB0byBhbGxvY2F0ZSBhZGRyZXNzZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwppbmRleCA0ODIxYTM1NjMwMzYzLi5mODkxNmIyYWJjMmVmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCkBAIC04ODUsMTExICYjNDM7ODg1LDU0IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJcmV0dXJuIHJldCAmZ3Q7IDAgPyAwIDogLWVycm5vOwogfQogCi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsKLQlpbnQgZmQ7Ci0Jc3NpemVfdCBudW1yZWFkOwotCi0JZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKLQlpZiAoZmQgPT0gLTEpCi0JCXJldHVybiAwOwotCi0JbnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7Ci0JaWYgKG51bXJlYWQgJmx0OyAxKSB7Ci0JCWNsb3NlKGZkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JYnVmW251bXJlYWRdID0gJiMzOTtcMCYjMzk7OwotCWNsb3NlKGZkKTsKLQotCXJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkOwotfQotCi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpCi17Ci0JaW50IGZkLCBzYXZlZF9lcnJubzsKLQlzc2l6ZV90IG51bXdyaXR0ZW47Ci0KLQlpZiAoYnVmbGVuICZsdDsgMikKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7SW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxuJiMzNDssIGJ1Zmxlbik7Ci0KLQlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOwotCWlmIChmZCA9PSAtMSkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgb3BlbiBmYWlsZWQ6ICVzXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLQotCW51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTsKLQlzYXZlZF9lcnJubyA9IGVycm5vOwotCWNsb3NlKGZkKTsKLQllcnJubyA9IHNhdmVkX2Vycm5vOwotCWlmIChudW13cml0dGVuICZsdDsgMCkgewotCQlpZiAoaWdub3JlX2VpbnZhbCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCkKLQkJCXJldHVybjsKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xuJiMzNDssIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLAotCQkJCWJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKLQl9Ci0JaWYgKG51bXdyaXR0ZW4gIT0gYnVmbGVuIC0gMSkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgd3JpdGUoJS4qcykgaXMgdHJ1bmNhdGVkLCBleHBlY3RlZCAlenUgYnl0ZXMsIGdvdCAlemQgYnl0ZXNcbiYjMzQ7LAotCQkJCXBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pOwotfQotCi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewotCV9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTsKLX0KLQotdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKQotewotCWNoYXIgYnVmWzIxXTsKLQotCWlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQotCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtyZWFkX2ZpbGUoKSYjMzQ7KTsKLQotCXJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotfQotCi1zdGF0aWMgdm9pZCBfX3dyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSwgYm9vbCBpZ25vcmVfZWludmFsKQotewotCWNoYXIgYnVmWzIxXTsKLQotCXNwcmludGYoYnVmLCAmIzM0OyVsdSYjMzQ7LCBudW0pOwotCV9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEsIGlnbm9yZV9laW52YWwpOwotfQotCi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSkKLXsKLQlyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpOwotfQotCi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKQotewotCXJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7CiAKIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCkKIHsKLQlpZiAoc2htbWF4KQotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCBzaG1tYXgpOwotCWlmIChzaG1hbGwpCi0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIHNobWFsbCk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChzaG1tYXgpIHsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIHNobW1heCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBzaG1tYXg6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKJiM0MzsJfQomIzQzOwlpZiAoc2htYWxsKSB7CiYjNDM7CQlyZXQgPSB3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBzaG1hbGwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgc2htYWxsOiAlc1xuJiMzNDssCiYjNDM7CQkJCQkgICBzdHJlcnJvcigtcmV0KSk7CiYjNDM7CX0KIH0KIAogdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpCiB7CiAJdW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0OywgJmFtcDt2YWwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xuJiMzNDssCiYjNDM7CQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKIAotCXZhbCA9IHJlYWRfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0Oyk7CiAJaWYgKHZhbCAmbHQ7IGxlbmd0aCkgewotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCBsZW5ndGgpOwomIzQzOwkJcmV0ID0gd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0OywgbGVuZ3RoKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIGxlbmd0aCwgc3RyZXJyb3IoLXJldCkpOwogCQlzaG1tYXggPSB2YWw7CiAJfQogCi0JdmFsID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7KTsKJiM0MzsJcmV0ID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwogCWlmICh2YWwgJmx0OyBucikgewotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBucik7CiYjNDM7CQlyZXQgPSB3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBucik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htYWxsOiAlc1xuJiMzNDssCiYjNDM7CQkJCQkgICBuciwgc3RyZXJyb3IoLXJldCkpOwogCQlzaG1hbGwgPSB2YWw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCmluZGV4IDlhNDlhZjg4NzAyZTQuLjY0YTg2ZThhMGM0MWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKQEAgLTgsNiAmIzQzOzgsOCBAQAogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OyAvKiBfU0NfUEFHRVNJWkUgKi8KICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2ZpbGVfdXRpbHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCAmbHQ7Jmx0OyAobnIpKQogI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KQpAQCAtMTY2LDEyICYjNDM7MTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7CiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpCSgoKGVudCkgJmFtcDsgKDF1bGwgJmx0OyZsdDsgNjMpKSAhPSAwKQogI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpCSgoZW50KSAmYW1wOyAoKDF1bGwgJmx0OyZsdDsgNTUpIC0gMSkpCiAKLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotaW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTsKLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTsKLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pOwotCiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aCk7CiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzcwCgkJCQkJCQlvdXRwdXQ6IDY0CgkJCQkJCQl0aG91Z2h0czogMTQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogRGV0ZXJtaW5pbmcgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGZ1enppbmcuIEZpcnN0LCBJJiMzOTttIGV4YW1pbmluZyB0aGUgZGlmZiB0byBzZWUgd2hhdCYjMzk7cyBiZWVuIHRvdWNoZWQuIEkgc2VlIGNoYW5nZXMgaW4gYERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0YCwgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZSAoc3RhbmRhcmQgc3R1ZmYpLCBhbmQgYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgdGhlIGhlbHAgdGV4dCBmb3IgYENPTkZJR19HVVBfVEVTVGAuIFRoZXJlJiMzOTtzIGFsc28gYSBzaWduaWZpY2FudCByZXNodWZmbGluZyBvZiBmaWxlcyB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgd2l0aCBhZGRpdGlvbnMgdG8gYHRvb2xzL2xpYi9tbS9gIGFuZCBhIG1hc3MgbWlncmF0aW9uL3JlbmFtaW5nIG9mIHNlbGZ0ZXN0cyB0byB0aGUgdG9vbHMvbW0vIGRpcmVjdG9yeSwgYnV0IHRoZXNlIGFyZSBwcmltYXJpbHkgdGVzdCB1dGlsaXRpZXMgYW5kIGxpYnJhcmllcy4KCk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uICphY3R1YWwqIGtlcm5lbCBjb2RlIGNoYW5nZXMuICBMb29raW5nIGNsb3NlbHkgYXQgdGhlIGBtbS9LY29uZmlnYCBjaGFuZ2UsIGl0JiMzOTtzIHN0cmljdGx5IGNvc21ldGljOyBpdCYjMzk7cyBqdXN0IG1vZGlmaWVkIHRoZSBoZWxwIHRleHQgdG8gbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBpbmNsdWRlcyBiZW5jaG1hcmtzLCBub3QganVzdCB1bml0IHRlc3RzLiAgVGhpcyBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5LCBhcyBjaGFuZ2luZyB0aGUgS2NvbmZpZyBoZWxwIHRleHQgZG9lcyBub3QgYWx0ZXIgdGhlIHVuZGVybHlpbmcga2VybmVsIGZ1bmN0aW9uYWxpdHkuCgpFc3NlbnRpYWxseSwgKmFsbCogdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGRvY3VtZW50YXRpb24sIG1haW50YWluZXJzLCBLY29uZmlnIGhlbHAgdGV4dCwgYW5kIHVzZXJzcGFjZSB0ZXN0IGluZnJhc3RydWN0dXJlIHdpdGhpbiB0aGUgdG9vbHMgZGlyZWN0b3J5LiBObyBjb3JlIGtlcm5lbCBjb2RlIGlzIGFmZmVjdGVkLgoKTm93LCBsZXQmIzM5O3MgdXNlIHRoZSBwcm92aWRlZCBndWlkZWxpbmVzIHRvIHF1aWNrbHkgZXZhbHVhdGUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aHkgb2YgZnV6emluZy4gQWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSwgYSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IHJlc3VsdCBpcyBhcHByb3ByaWF0ZSBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBkb2N1bWVudGF0aW9uIG1vZGlmaWNhdGlvbnMsIEtjb25maWcgY2hhbmdlcyAoc3BlY2lmaWNhbGx5IGhlbHAgdGV4dCwgd2hpY2ggdGhpcyBpcyksIGNoYW5nZXMgaW4gY29tbWVudHMsIG9yIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuIFVzZXItc3BhY2UgdXRpbGl0aWVzIG9yIHRlc3RzIGFyZSBhbHNvIG5vdCB0byBiZSBpbmNsdWRlZC4gVGhpcyBwYXRjaCB0aWNrcyBhbGwgdGhvc2UgYm94ZXMuIEl0IGlzIG1vZGlmeWluZyBkb2N1bWVudGF0aW9uLCBLY29uZmlnJiMzOTtzIGhlbHAgdGV4dCwgYW5kIHRlc3QgZmlsZXMgaW4gYHRvb2xzL2AsIHNvIGRlZmluaXRlbHkgbm90IHdvcnRoIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGlzOiB0aGlzIHBhdGNoIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhpcyByZWFzb25pbmcgYnkgaXNzdWluZyB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBEb2N1bWVudGF0aW9uLCBNQUlOVEFJTkVSUywgS2NvbmZpZyBoZWxwIHRleHQsIGFuZCB1c2Vyc3BhY2UgdG9vbGluZy9zZWxmdGVzdHMgdW5kZXIgdG9vbHMvLiBObyBrZXJuZWwgcnVudGltZSBsb2dpYyBpcyBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgRG9jdW1lbnRhdGlvbiwgTUFJTlRBSU5FUlMsIEtjb25maWcgaGVscCB0ZXh0LCBhbmQgdXNlcnNwYWNlIHRvb2xpbmcvc2VsZnRlc3RzIHVuZGVyIHRvb2xzLy4gTm8ga2VybmVsIHJ1bnRpbWUgbG9naWMgaXMgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDoyNjoxMi44NzczMzc2ODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjA2MDYzODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBEb2N1bWVudGF0aW9uLCBNQUlOVEFJTkVSUywgS2NvbmZpZyBoZWxwIHRleHQsIGFuZCB1c2Vyc3BhY2UgdG9vbGluZy9zZWxmdGVzdHMgdW5kZXIgdG9vbHMvLiBObyBrZXJuZWwgcnVudGltZSBsb2dpYyBpcyBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA0OjI2OjEyLjg3NzM0MTc0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMjQ0NzE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdkNWFlMGQ5NDYwOWZmYmZiM2MzYjYyNTIxN2YyYmE4NmY4Zjc2ZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDQ6MjY6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxcbmluZGV4IGMxNmNhMTYzYjU1ZTMuLmUwYWNlZGJkMWQ0ODYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxcbkBAIC0yMjYsMTUgKzIyNiw2IEBAIHdpbGwgYmUgcGlubmVkIGxvbmd0ZXJtLCBhbmQgd2hvc2UgZGF0YSB3aWxsIGJlIGFjY2Vzc2VkLlxcbiBcXG4gVW5pdCB0ZXN0aW5nXFxuID09PT09PT09PT09PVxcbi1UaGlzIGZpbGU6Olxcbi1cXG4tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4tXFxuLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczpcXG4tXFxuLSogUElOX0ZBU1RfQkVOQ0hNQVJLICguL2d1cF90ZXN0IC1hKVxcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxcbi1cXG4gWW91IGNhbiBtb25pdG9yIGhvdyBtYW55IHRvdGFsIGRtYS1waW5uZWQgcGFnZXMgaGF2ZSBiZWVuIGFjcXVpcmVkIGFuZCByZWxlYXNlZFxcbiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OlxcbiBcXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IGEzMTY3YmNiZTU4OTcuLjU0OGJjZjAwOGU3OTkgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xNzE3Myw4ICsxNzE3Myw5IEBAIFQ6XFx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ha3BtL21tXFxuIEY6XFx0bW0vZ3VwLmNcXG4gRjpcXHRtbS9ndXBfdGVzdC5jXFxuIEY6XFx0bW0vZ3VwX3Rlc3QuaFxcbitGOlxcdHRvb2xzL21tL2d1cF9iZW5jaC5jXFxuK0Y6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcXG4gRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbi1GOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4gXFxuIE1FTU9SWSBNQU5BR0VNRU5UIC0gS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZylcXG4gTTpcXHRBbmRyZXcgTW9ydG9uIFxcdTAwM2Nha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnXFx1MDAzZVxcbkBAIC0xNzI3Nyw2ICsxNzI3OCw3IEBAIEY6XFx0bW0vbWVtb3J5LXRpZXJzLmNcXG4gRjpcXHRtbS9wYWdlX2lkbGUuY1xcbiBGOlxcdG1tL3BnYWxsb2MtdHJhY2suaFxcbiBGOlxcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcXG4rRjpcXHR0b29scy9saWIvbW0vXFxuIEY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXFxuIFxcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIE5VTUEgTUVNQkxPQ0tTIEFORCBOVU1BIEVNVUxBVElPTlxcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDYwNGM1ODE5OWFjYmYuLjBiZDI5OGM3NzQ0NjEgMTAwNjQ0XFxuLS0tIGEvbW0vS2NvbmZpZ1xcbisrKyBiL21tL0tjb25maWdcXG5AQCAtMTI5MiwyNCArMTI5MiwyMyBAQCBjb25maWcgUEVSQ1BVX1NUQVRTXFxuIFxcdCAgYmUgdXNlZCB0byBoZWxwIHVuZGVyc3RhbmQgcGVyY3B1IG1lbW9yeSB1c2FnZS5cXG4gXFxuIGNvbmZpZyBHVVBfVEVTVFxcbi1cXHRib29sIFxcXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzXFxcIlxcbitcXHRib29sIFxcXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzIGFuZCBiZW5jaG1hcmtzXFxcIlxcbiBcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIFxcdGhlbHBcXG4gXFx0ICBQcm92aWRlcyAvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcyBhIHdheVxcbi1cXHQgIHRvIG1ha2UgaW9jdGwgY2FsbHMgdGhhdCBjYW4gbGF1bmNoIGtlcm5lbC1iYXNlZCB1bml0IHRlc3RzIGZvclxcbi1cXHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cXG4rXFx0ICB0byBtYWtlIGlvY3RsIGNhbGxzIHRoYXQgY2FuIGxhdW5jaCBrZXJuZWwtYmFzZWQgdW5pdCB0ZXN0cyBhbmRcXG4rXFx0ICBiZW5jaG1hcmtzIGZvciB0aGUgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpIGZhbWlsaWVzXFxuK1xcdCAgb2YgQVBJIGNhbGxzLlxcbiBcXG4tXFx0ICBUaGVzZSB0ZXN0cyBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxcbi1cXHQgIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSwgYXMgd2VsbCBhcyBzbW9rZSB0ZXN0cyBvZlxcbitcXHQgIFRoZXNlIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mXFxuK1xcdCAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHRlc3RzIG9mXFxuIFxcdCAgdGhlIG5vbi1fZmFzdCB2YXJpYW50cy5cXG4gXFxuLVxcdCAgVGhlcmUgaXMgYWxzbyBhIHN1Yi10ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55XFxuLVxcdCAgb2YgdXAgdG8gZWlnaHQgcGFnZXMgKHNlbGVjdGVkIGJ5IGNvbW1hbmQgbGluZSBhcmdzKSB3aXRoaW4gdGhlXFxuLVxcdCAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYVxcbi1cXHQgIHBpbl91c2VyX3BhZ2VzKigpLCBvciBwaW5uZWQgdmlhIGdldF91c2VyX3BhZ2VzKigpLCBhcyBzcGVjaWZpZWRcXG4tXFx0ICBieSBvdGhlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzLlxcbitcXHQgIFRoZXJlIGlzIGFsc28gYSB0ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55IG9mIHVwXFxuK1xcdCAgdG8gZWlnaHQgcGFnZXMgd2l0aGluIHRoZSByYW5nZSBvZiB1c2VyLXNwYWNlIGFkZHJlc3Nlcy4gVGhlc2VcXG4rXFx0ICBwYWdlcyBhcmUgZWl0aGVyIGFjcXVpcmVkIHZpYSBwaW5fdXNlcl9wYWdlcyooKSBvciBnZXRfdXNlcl9wYWdlcyooKS5cXG4gXFxuLVxcdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rXFx0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYW5kIHRvb2xzL21tL2d1cF9iZW5jaC5jLlxcbiBcXG4gY29tbWVudCBcXFwiR1VQX1RFU1QgbmVlZHMgdG8gaGF2ZSBERUJVR19GUyBlbmFibGVkXFxcIlxcbiBcXHRkZXBlbmRzIG9uICFHVVBfVEVTVCBcXHUwMDI2XFx1MDAyNiAhREVCVUdfRlNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjliMjIzN2U5ODIzZTlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbkBAIC0wLDAgKzEsMTA2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZmlsZV91dGlscy5oXFxcIlxcbitcXG4raW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXFxuK3tcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcdHNzaXplX3QgbnVtcmVhZDtcXG4rXFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCA9PSAtMSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbitcXHRpZiAobnVtcmVhZCBcXHUwMDNjIDEpIHtcXG4rXFx0XFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLWVycjtcXG4rXFx0fVxcbitcXG4rXFx0YnVmW251bXJlYWRdID0gJ1xcXFwwJztcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4re1xcbitcXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xcbitcXHRzc2l6ZV90IG51bXdyaXR0ZW47XFxuK1xcbitcXHRpZiAoYnVmbGVuIFxcdTAwM2MgMilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xcbitcXHRpZiAoZmQgPT0gLTEpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XFxuK1xcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFxuK1xcdGlmIChudW13cml0dGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1zYXZlZF9lcnJubztcXG4rXFxuK1xcdGlmIChudW13cml0dGVuICE9IChzc2l6ZV90KShidWZsZW4gLSAxKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFx0Y2hhciBidWZbMjFdO1xcbitcXHRjaGFyICplbmQ7XFxuK1xcbitcXHRpZiAoIW51bSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBSZWplY3Qgc2lnbnMgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZSB0aGF0IGFyZSBhY2NlcHRlZCBieSBzdHJ0b3VsKCkgKi9cXG4rXFx0aWYgKGJ1ZlswXSBcXHUwMDNjICcwJyB8fCBidWZbMF0gXFx1MDAzZSAnOScpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0ZXJybm8gPSAwO1xcbitcXHR2YWwgPSBzdHJ0b3VsKGJ1ZiwgXFx1MDAyNmVuZCwgMTApO1xcbitcXHRpZiAoZXJybm8pXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHQvKiBPbmx5IGFsbG93IGEgbmV3bGluZSBhZnRlciB0aGUgbnVtYmVyICovXFxuK1xcdGlmICgqZW5kID09ICdcXFxcbicpXFxuK1xcdFxcdGVuZCsrO1xcbitcXG4rXFx0aWYgKCplbmQgIT0gJ1xcXFwwJylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQqbnVtID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4re1xcbitcXHRjaGFyIGJ1ZlsyMV07XFxuK1xcbitcXHRzcHJpbnRmKGJ1ZiwgXFxcIiVsdVxcXCIsIG51bSk7XFxuK1xcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxKTtcXG4rfVxcbitcXG4raW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcXG4rXFx0cmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTBkYWE4MmMyYjJiNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXFxuQEAgLTAsMCArMSwxMyBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cXG4rI2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjc3RkZGVmLmhcXHUwMDNlXFxuK1xcbitpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pO1xcbitpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4raW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5zaW1pbGFyaXR5IGluZGV4IDg3JVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5pbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG4rKysgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbkBAIC04LDEyICs4LDE4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiBcXG4tI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImZpbGVfdXRpbHMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFRIUF9TWVNGUyBcXFwiL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvXFxcIlxcbiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0XFxuK1xcbisjaWZuZGVmIEFSUkFZX1NJWkVcXG4rI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdO1xcbiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4O1xcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5ncztcXG5AQCAtNDgsNiArNTQsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG1lbV9lbmFibGVkX3N0cmluZ3NbXSA9IHtcXG4gXFx0TlVMTFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IHJldClcXG4re1xcbitcXHRwcmludGYoXFxcIiMgJXM6ICVzICglZClcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKC1yZXQpLCAtcmV0KTtcXG4rfVxcbitcXG4gaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuQEAgLTYxLDggKzcyLDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XFxuLVxcdFxcdHBlcnJvcihwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTAzLDEyICsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSArIDEpO1xcbitcXHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBsb25nIG51bTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJldCA9IHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBUSFBfU1lTRlMgXFxcIiVzXFxcIiwgbmFtZSk7XFxuQEAgLTExNiw3ICsxMzMsMTMgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHJldHVybiByZWFkX251bShwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0ocGF0aCwgXFx1MDAyNm51bSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnVtO1xcbiB9XFxuIFxcbiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXFxuQEAgLTEyOSw3ICsxNTIsMTEgQEAgdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbiBcXHRcXHRwcmludGYoXFxcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4tXFx0d3JpdGVfbnVtKHBhdGgsIG51bSk7XFxuK1xcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbkBAIC0xNTcsOCArMTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXFxuIFxcdFxcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXFxcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXFxcIiksXFxuIFxcdFxcdC5wYWdlc190b19zY2FuID0gdGhwX3JlYWRfbnVtKFxcXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cXFwiKSxcXG4gXFx0fTtcXG4tXFx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXFxuLVxcdFxcdHNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCk7XFxuK1xcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XFxuK1xcdFxcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2c2V0dGluZ3MtXFx1MDAzZXJlYWRfYWhlYWRfa2IpO1xcbitcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xcbitcXHRcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX09SREVSUzsgaSsrKSB7XFxuIFxcdFxcdGlmICghKCgxIFxcdTAwM2NcXHUwMDNjIGkpIFxcdTAwMjYgb3JkZXJzKSkge1xcbkBAIC0yMDgsOCArMjQyLDE1IEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbiBcXHR0aHBfd3JpdGVfbnVtKFxcXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFxcXCIsIGtodWdlcGFnZWQtXFx1MDAzZW1heF9wdGVzX3NoYXJlZCk7XFxuIFxcdHRocF93cml0ZV9udW0oXFxcImtodWdlcGFnZWQvcGFnZXNfdG9fc2NhblxcXCIsIGtodWdlcGFnZWQtXFx1MDAzZXBhZ2VzX3RvX3NjYW4pO1xcbiBcXG4tXFx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXFxuLVxcdFxcdHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCBzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYik7XFxuK1xcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XFxuK1xcdFxcdGludCByZXQgPSB3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICAgIHNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcXG4rXFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xcbiBcXHRcXHRpZiAoISgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IG9yZGVycykpXFxuQEAgLTMwNyw4ICszNDgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdG9yZGVycyB8PSAxVUwgXFx1MDAzY1xcdTAwM2MgaTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9FTlQpIHtcXG4rXFx0XFx0XFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvcmRlcnMgfD0gMVVMIFxcdTAwM2NcXHUwMDNjIGk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBvcmRlcnM7XFxuQEAgLTM4Miw4ICs0MzAsNyBAQCBpbnQgZGV0ZWN0X2h1Z2V0bGJfcGFnZV9zaXplcyh1bnNpZ25lZCBsb25nIHNpemVzW10sIGludCBtYXgpXFxuIFxcdFxcdGlmIChzc2NhbmYoZW50cnktXFx1MDAzZWRfbmFtZSwgXFxcImh1Z2VwYWdlcy0lenVrQlxcXCIsIFxcdTAwMjZrYikgIT0gMSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdHNpemVzW2NvdW50KytdID0ga2IgKiAxMDI0O1xcbi1cXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICAga2IpO1xcbitcXHRcXHRwcmludGYoXFxcIiMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxcXG5cXFwiLCBrYik7XFxuIFxcdH1cXG4gXFx0Y2xvc2VkaXIoZGlyKTtcXG4gXFx0cmV0dXJuIGNvdW50O1xcbkBAIC00MjUsMjggKzQ3Miw0OSBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3N5c2ZzX3BhdGgoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLFxcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFxcdTAwMjZucik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnI7XFxuIH1cXG4gXFxuIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHR3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XFxuK1xcdHJldCA9IHdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwiZnJlZV9odWdlcGFnZXNcXFwiKTtcXG4gXFxuLVxcdHJldHVybiByZWFkX251bShwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0ocGF0aCwgXFx1MDAyNm5yKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBucjtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgX19odWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcXG5AQCAtNTAyLDcgKzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKG5yX2VuYWJsZWQgXFx1MDAzZSBtYXgpIHtcXG4tXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXFxcblxcXCIsIG5yX2VuYWJsZWQsIG1heCk7XFxuK1xcdFxcdHByaW50ZihcXFwiIyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgbnJfZW5hYmxlZCwgbWF4KTtcXG4gXFx0XFx0bnJfZW5hYmxlZCA9IG1heDtcXG4gXFx0fVxcbiBcXG5AQCAtNTc0LDggKzY0MywxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19zaWdoYW5kbGVyKGludCBzaWcpXFxuIHtcXG4rXFx0KHZvaWQpc2lnO1xcbitcXG4gXFx0LyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqL1xcbi1cXHRleGl0KEtTRlRfRkFJTCk7XFxuK1xcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gfVxcbiBcXG4gdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li4xNTRkNzQwYmUwMmU4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcXG4rKysgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuQEAgLTMsMyArMyw0IEBAIHNsYWJpbmZvXFxuIHBhZ2UtdHlwZXNcXG4gcGFnZV9vd25lcl9zb3J0XFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK2d1cF9iZW5jaFxcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXFxuaW5kZXggODU4MTg2YTZlZWZkYi4uZjIwYTMyZDhjYzIyZSAxMDA2NDRcXG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL21tL01ha2VmaWxlXFxuQEAgLTMsMTMgKzMsMTUgQEBcXG4gI1xcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxcbiBcXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyXFxuK0JVSUxEX1RBUkdFVFMgKz0gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xcbiBcXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcXG4rR1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jXFxuIFxcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcXG4rQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWRcXG4gTERGTEFHUyArPSAkKExJQlMpIC1wdGhyZWFkXFxuIFxcbiBhbGw6ICQoQlVJTERfVEFSR0VUUylcXG5AQCAtMjIsOCArMjQsMTEgQEAgJChMSUJTKTpcXG4gJTogJS5jXFxuIFxcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXFx1MDAzYyAkKExERkxBR1MpXFxuIFxcbitndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUylcXG4rXFx0JChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUylcXG4rXFxuIGNsZWFuOlxcbi1cXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitcXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcXG4gXFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXFxuIFxcbiBzYmluZGlyID89IC91c3Ivc2JpblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5zaW1pbGFyaXR5IGluZGV4IDUwJVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG5yZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5pbmRleCAzZjg0MWE5NmY4NzA2Li5lNmE4MGJhNTE5NWE3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rKysgYi90b29scy9tbS9ndXBfYmVuY2guY1xcbkBAIC0xMCwxMSArMTAsMTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3B0aHJlYWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2Fzc2VydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NtbS9ndXBfdGVzdC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgTUIgKDFVTCBcXHUwMDNjXFx1MDAzYyAyMClcXG4gXFxuQEAgLTM4LDEyICszNyw2IEBAIHN0YXRpYyBjaGFyICpjbWRfdG9fc3RyKHVuc2lnbmVkIGxvbmcgY21kKVxcbiBcXHRcXHRyZXR1cm4gXFxcIlBJTl9GQVNUX0JFTkNITUFSS1xcXCI7XFxuIFxcdGNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzpcXG4gXFx0XFx0cmV0dXJuIFxcXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFxcIjtcXG4tXFx0Y2FzZSBHVVBfQkFTSUNfVEVTVDpcXG4tXFx0XFx0cmV0dXJuIFxcXCJHVVBfQkFTSUNfVEVTVFxcXCI7XFxuLVxcdGNhc2UgUElOX0JBU0lDX1RFU1Q6XFxuLVxcdFxcdHJldHVybiBcXFwiUElOX0JBU0lDX1RFU1RcXFwiO1xcbi1cXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxcbi1cXHRcXHRyZXR1cm4gXFxcIkRVTVBfVVNFUl9QQUdFU19URVNUXFxcIjtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gXFxcIlVua25vd24gY29tbWFuZFxcXCI7XFxuIH1cXG5AQCAtNTMsMzkgKzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcXG4gXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcXG4gXFx0aW50IGksIHN0YXR1cztcXG4gXFxuLVxcdC8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovXFxuLVxcdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XFxuLVxcdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmVwZWF0czsgaSsrKSB7XFxuLVxcdFxcdFxcdGd1cC5zaXplID0gc2l6ZTtcXG4tXFx0XFx0XFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFxcdTAwMjZndXApO1xcbi1cXHRcXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlcGVhdHM7IGkrKykge1xcbitcXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuK1xcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4rXFx0XFx0aWYgKHN0YXR1cykge1xcbitcXHRcXHRcXHRpbnQgZXJyID0gZXJybm87XFxuIFxcbiBcXHRcXHRcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1xcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGd1cC5wdXRfZGVsdGFfdXNlYyk7XFxuLVxcdFxcdFxcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxcbi1cXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcIiwgZ3VwLnNpemUpO1xcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIlcyBpb2N0bCBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBjbWRfdG9fc3RyKGNtZCksXFxuK1xcdFxcdFxcdFxcdHN0cmVycm9yKGVycikpO1xcbiBcXHRcXHRcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbitcXHRcXHRcXHRyZXR1cm4gZGF0YTtcXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuLVxcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4tXFx0XFx0aWYgKHN0YXR1cylcXG4tXFx0XFx0XFx0Z290byByZXR1cm5fO1xcbiBcXG4gXFx0XFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCIlczogZG9uZVxcXFxuXFxcIiwgY21kX3RvX3N0cihjbWQpKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcXFwiLFxcbitcXHRcXHRcXHRjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcXG4rXFx0XFx0XFx0Z3VwLnB1dF9kZWx0YV91c2VjKTtcXG4gXFx0XFx0aWYgKGd1cC5zaXplICE9IHNpemUpXFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJUcnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcXG5cXFwiLCBndXAuc2l6ZSk7XFxuK1xcdFxcdFxcdHByaW50ZihcXFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcIiwgZ3VwLnNpemUpO1xcbitcXHRcXHRwcmludGYoXFxcIlxcXFxuXFxcIik7XFxuIFxcdFxcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuIFxcdH1cXG4gXFxuLXJldHVybl86XFxuLVxcdGtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgXFxcImlvY3RsIHN0YXR1cyAlZFxcXFxuXFxcIiwgc3RhdHVzKTtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuQEAgLTkzLDM4ICs3NiwyMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIHtcXG4gXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbiBcXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcXG4tXFx0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XFxuK1xcdGludCBmbGFncyA9IE1BUF9QUklWQVRFLCBzdGFydGVkX3RocmVhZHMgPSAwLCBleGl0X3N0YXR1cyA9IDE7XFxuIFxcdGNoYXIgKmZpbGUgPSBcXFwiL2Rldi96ZXJvXFxcIjtcXG4tXFx0Ym9vbCBodWdldGxiID0gZmFsc2U7XFxuK1xcdGJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTtcXG4rXFx0dm9pZCAqdGhyZWFkX3Jlc3VsdDtcXG4gXFx0cHRocmVhZF90ICp0aWQ7XFxuIFxcdGNoYXIgKnA7XFxuIFxcbi1cXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwibTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcXFwiKSkgIT0gLTEpIHtcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcIm06cjpuOkY6Zjphajp0VEx1d1dTSFxcXCIpKSAhPSAtMSkge1xcbiBcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbiBcXHRcXHRjYXNlICdhJzpcXG4gXFx0XFx0XFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnYic6XFxuLVxcdFxcdFxcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAnTCc6XFxuIFxcdFxcdFxcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdjJzpcXG4tXFx0XFx0XFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5XFxuLVxcdFxcdFxcdCAqIHVzZXIncyBub24tb3B0aW9uIGFyZ3VtZW50cy5cXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcXFwiZG9cXG4tXFx0XFx0XFx0ICogbm90aGluZ1xcXCIuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAncCc6XFxuLVxcdFxcdFxcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xcbi1cXHRcXHRcXHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ0YnOlxcbiBcXHRcXHRcXHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xcbiBcXHRcXHRcXHRndXAuZ3VwX2ZsYWdzID0gc3RydG9sKG9wdGFyZywgMCwgMCk7XFxuQEAgLTE0MSw3ICsxMDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdGNhc2UgJ24nOlxcbiBcXHRcXHRcXHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcXG4gXFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0bnJfcGFnZXMgPSBzaXplIC8gcHNpemUoKTtcXG4rXFx0XFx0XFx0XFx0bnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ3QnOlxcbiBcXHRcXHRcXHR0aHAgPSAxO1xcbkBAIC0xNDksOSArMTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRjYXNlICdUJzpcXG4gXFx0XFx0XFx0dGhwID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ1UnOlxcbi1cXHRcXHRcXHRjbWQgPSBHVVBfQkFTSUNfVEVTVDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ3UnOlxcbiBcXHRcXHRcXHRjbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xNzMsNTIgKzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdGh1Z2V0bGIgPSB0cnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJXcm9uZyBhcmd1bWVudFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV3JvbmcgYXJndW1lbnRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRleGl0KDEpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChvcHRpbmQgXFx1MDAzYyBhcmdjKSB7XFxuLVxcdFxcdGludCBleHRyYV9hcmdfY291bnQgPSAwO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBGb3IgZXhhbXBsZTpcXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDFcXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5N1xcbi1cXHRcXHQgKi9cXG4tXFxuLVxcdFxcdHdoaWxlICgob3B0aW5kIFxcdTAwM2MgYXJnYykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXFx1MDAzYyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cXG4tXFx0XFx0XFx0ICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSArIDE7XFxuLVxcbi1cXHRcXHRcXHRndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7XFxuLVxcdFxcdFxcdGV4dHJhX2FyZ19jb3VudCsrO1xcbi1cXHRcXHRcXHRvcHRpbmQrKztcXG4tXFx0XFx0fVxcbitcXHRpZiAob3B0aW5kICE9IGFyZ2MpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJVbmV4cGVjdGVkIGFyZ3VtZW50ICclcydcXFxcblxcXCIsIGFyZ3Zbb3B0aW5kXSk7XFxuK1xcdFxcdGV4aXQoMSk7XFxuIFxcdH1cXG4gXFxuLVxcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGlmIChnZXR1aWQoKSkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoaHVnZXRsYikge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XFxuIFxcbi1cXHRcXHRpZiAoIWhwX3NpemUpXFxuLVxcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJIdWdlVExCIGlzIHVuYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0aWYgKCFocF9zaXplKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiQ291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRzaXplID0gKHNpemUgKyBocF9zaXplIC0gMSkgXFx1MDAyNiB+KGhwX3NpemUgLSAxKTtcXG4tXFx0XFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKVxcbi1cXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiTm90IGVub3VnaCBodWdlIHBhZ2VzXFxcXG5cXFwiKTtcXG4rXFx0XFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiTm90IGVub3VnaCBodWdlIHBhZ2VzXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XFxuLVxcbiBcXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xcbi1cXHRpZiAoZmlsZWQgXFx1MDAzYyAwKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuYWJsZSB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0aWYgKGZpbGVkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlVuYWJsZSB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4gXFxuIFxcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzO1xcbiBcXHRpZiAod3JpdGUpXFxuQEAgLTIyNywyNiArMTc5LDI0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xcbiBcXHRpZiAoZ3VwX2ZkID09IC0xKSB7XFxuIFxcdFxcdHN3aXRjaCAoZXJybm8pIHtcXG4tXFx0XFx0Y2FzZSBFQUNDRVM6XFxuLVxcdFxcdFxcdGlmIChnZXR1aWQoKSlcXG4tXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBFTk9FTlQ6XFxuIFxcdFxcdFxcdGlmIChvcGVuZGlyKFxcXCIvc3lzL2tlcm5lbC9kZWJ1Z1xcXCIpID09IE5VTEwpXFxuLVxcdFxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJtb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImNoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImZhaWxlZCB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsXFxuK1xcdFxcdFxcdFxcdHN0cmVycm9yKGVycm5vKSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcXFxuXFxcIik7XFxuLVxcdFxcdGtzZnRfZXhpdF9wYXNzKCk7XFxuK1xcdFxcdGdvdG8gZXJyX2Nsb3NlX2ZpbGVkO1xcbiBcXHR9XFxuIFxcbiBcXHRwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgZmlsZWQsIDApO1xcbi1cXHRpZiAocCA9PSBNQVBfRkFJTEVEKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1tYXA6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibW1hcDogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGdvdG8gZXJyX2Nsb3NlX2d1cF9mZDtcXG4rXFx0fVxcbiBcXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7XFxuIFxcbiBcXHRpZiAodGhwID09IDEpXFxuQEAgLTI1NSwyMSArMjA1LDQ0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXG4gXFx0LyogRmF1bHQgdGhlbSBpbiBoZXJlLCBmcm9tIHVzZXIgc3BhY2UuICovXFxuLVxcdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFxcdTAwM2MgZ3VwLmFkZHIgKyBzaXplOyBwICs9IHBzaXplKCkpXFxuK1xcdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFxcdTAwM2MgZ3VwLmFkZHIgKyBzaXplOyBwICs9IGdldHBhZ2VzaXplKCkpXFxuIFxcdFxcdHBbMF0gPSAwO1xcbiBcXG4gXFx0dGlkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocmVhZHMpO1xcbi1cXHRhc3NlcnQodGlkKTtcXG4rXFx0aWYgKCF0aWQpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRnb3RvIGVycl91bm1hcDtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcXG4gXFx0XFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRpZFtpXSwgTlVMTCwgZ3VwX3RocmVhZCwgXFx1MDAyNmd1cCk7XFxuLVxcdFxcdGFzc2VydChyZXQgPT0gMCk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihyZXQpKTtcXG4rXFx0XFx0XFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3RhcnRlZF90aHJlYWRzKys7XFxuIFxcdH1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7XFxuLVxcdFxcdGFzc2VydChyZXQgPT0gMCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdGFydGVkX3RocmVhZHM7IGkrKykge1xcbitcXHRcXHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBcXHUwMDI2dGhyZWFkX3Jlc3VsdCk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IocmV0KSk7XFxuK1xcdFxcdFxcdHRocmVhZF9lcnJvciA9IHRydWU7XFxuK1xcdFxcdH0gZWxzZSBpZiAodGhyZWFkX3Jlc3VsdClcXG4rXFx0XFx0XFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4gXFx0ZnJlZSh0aWQpO1xcbi1cXG4tXFx0a3NmdF9leGl0X3Bhc3MoKTtcXG4rXFx0aWYgKHRocmVhZF9lcnJvcilcXG4rXFx0XFx0Z290byBlcnJfdW5tYXA7XFxuK1xcdGV4aXRfc3RhdHVzID0gMDtcXG4rXFxuK2Vycl91bm1hcDpcXG4rXFx0bXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpO1xcbitlcnJfY2xvc2VfZ3VwX2ZkOlxcbitcXHRjbG9zZShndXBfZmQpO1xcbitlcnJfY2xvc2VfZmlsZWQ6XFxuK1xcdGNsb3NlKGZpbGVkKTtcXG4rXFx0cmV0dXJuIGV4aXRfc3RhdHVzO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5pbmRleCAyZDUzNjYxOTZlMzA5Li45YzAzNjI0ZmQyOTM2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5AQCAtMzcsNyArMzcsOCBAQCBlbmRpZlxcbiAjIExETElCUy5cXG4gTUFLRUZMQUdTICs9IC0tbm8tYnVpbHRpbi1ydWxlc1xcbiBcXG4tQ0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcXG4rQ0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgLUkgJCh0b3Bfc3JjZGlyKS90b29scy9saWJcXG4rQ0ZMQUdTICs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXFxuIENGTEFHUyArPSAtV3VucmVhY2hhYmxlLWNvZGVcXG4gTERMSUJTID0gLWxydCAtbHB0aHJlYWQgLWxtXFxuIFxcbkBAIC01Nyw4ICs1OCw4IEBAIGVuZGlmXFxuIFxcbiBURVNUX0dFTl9GSUxFUyA9IGNvd1xcbiBURVNUX0dFTl9GSUxFUyArPSBjb21wYWN0aW9uX3Rlc3RcXG4rVEVTVF9HRU5fRklMRVMgKz0gZ3VwXFxuIFRFU1RfR0VOX0ZJTEVTICs9IGd1cF9sb25ndGVybVxcbi1URVNUX0dFTl9GSUxFUyArPSBndXBfdGVzdFxcbiBURVNUX0dFTl9GSUxFUyArPSBobW0tdGVzdHNcXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tYWR2aXNlXFxuIFRFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGItbW1hcFxcbkBAIC0xODcsOCArMTg4LDEwIEBAIFRFU1RfRklMRVMgKz0gd3JpdGVfaHVnZXRsYl9tZW1vcnkuc2hcXG4gXFxuIGluY2x1ZGUgLi4vbGliLm1rXFxuIFxcbi0kKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcXG4tJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXFxuKyQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxcXFxuK1xcdFxcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbiskKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcXFxcbitcXHRcXHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG4gXFxuICQoT1VUUFVUKS91ZmZkLXN0cmVzczogdWZmZC1jb21tb24uY1xcbiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jXFxuQEAgLTIxNyw3ICsyMjAsNyBAQCAkKEJJTkFSSUVTXzMyKTogQ0ZMQUdTICs9IC1tMzIgLW14c2F2ZVxcbiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICs9IC1scnQgLWxkbCAtbG1cXG4gJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmNcXG4gXFx0JChjYWxsIG1zZyxDQywsJEApXFxuLVxcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcXG4rXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS0zMiwkKHQpKSkpXFxuIGVuZGlmXFxuIFxcbkBAIC0yMjYsNyArMjI5LDcgQEAgJChCSU5BUklFU182NCk6IENGTEFHUyArPSAtbTY0IC1teHNhdmVcXG4gJChCSU5BUklFU182NCk6IExETElCUyArPSAtbHJ0IC1sZGxcXG4gJChCSU5BUklFU182NCk6ICQoT1VUUFVUKS8lXzY0OiAlLmNcXG4gXFx0JChjYWxsIG1zZyxDQywsJEApXFxuLVxcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcXG4rXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS02NCwkKHQpKSkpXFxuIGVuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXFxuaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXFxuQEAgLTE1LDkgKzE1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIE1BUF9TSVpFX01CXFx0MTAwXFxuICNkZWZpbmUgTUFQX1NJWkVcXHQoTUFQX1NJWkVfTUIgKiAxMDI0ICogMTAyNClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xcbmluZGV4IDhhYTUyNDlkOWJlZjYuLjMyNjRhODI4NTc1YmQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuaW5kZXggNDViODRmN2IzNjRlMC4uMjg5YWVkMmViYWMwMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuQEAgLTI1LDcgKzI1LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gdWludDY0X3QgcGFnZV9zaXplO1xcbiB1aW50NjRfdCBwbWRfcGFnZXNpemU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuQEAgLTIxLDcgKzIxLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy91aW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi9waWRmZC9waWRmZC5oXFxcIlxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTNjMmZmYTNhMDU3Zlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xcbkBAIC0wLDAgKzEsMjc3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIC8vIFVzZSBsbDY0XFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9pb2N0bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2d1cF90ZXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbitcXG4rI2RlZmluZSBNQiAoMVVMIFxcdTAwM2NcXHUwMDNjIDIwKVxcbitcXG4rLyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovXFxuKyNkZWZpbmUgRk9MTF9XUklURVxcdDB4MDFcXHQvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi9cXG4rXFxuKy8qIFBhZ2UgY291bnRzIGV4ZXJjaXNpbmcgc2luZ2xlLCBUSFAtYmF0Y2gsIHBhcnRpYWwsIGFuZCBmdWxsLW1hcHBpbmcgR1VQLiAqL1xcbitzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07XFxuK1xcbisjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXFxcIi9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XFxcIlxcbisjZGVmaW5lIE5SX0hVR0VfUEFHRVMgMTI4XFxuK1xcbitIVUdFVExCX1NFVFVQX0RFRkFVTFRfUEFHRVMoTlJfSFVHRV9QQUdFUylcXG4rXFxuK0ZJWFRVUkUoZ3VwX3Rlc3QpXFxuK3tcXG4rXFx0aW50IGd1cF9mZDtcXG4rXFx0Y2hhciAqYWRkcjtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KVxcbit7XFxuK1xcdGJvb2wgdGhwO1xcbitcXHRib29sIGh1Z2V0bGI7XFxuK1xcdGJvb2wgd3JpdGU7XFxuK1xcdGJvb2wgc2hhcmVkO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZSlcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZClcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX2h1Z2V0bGIpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IHRydWUsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGUpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF90aHApXFxuK3tcXG4rXFx0LnRocCA9IHRydWUsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV9odWdldGxiKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSB0cnVlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX2h1Z2V0bGIpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IHRydWUsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoZ3VwX3Rlc3QpXFxuK3tcXG4rXFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURTtcXG4rXFx0aW50IHplcm9fZmQ7XFxuK1xcdGNoYXIgKnA7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VzaXplID0gMTI4ICogTUI7XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNlaHVnZXRsYikge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XFxuK1xcbitcXHRcXHRpZiAoIWhwX3NpemUpXFxuK1xcdFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiSHVnZVRMQiBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdGlmIChodWdldGxiX2ZyZWVfZGVmYXVsdF9wYWdlcygpIFxcdTAwM2MgTlJfSFVHRV9QQUdFUylcXG4rXFx0XFx0XFx0U0tJUChyZXR1cm4sIFxcXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXFxcblxcXCIpO1xcbitcXG4rXFx0XFx0c2VsZi1cXHUwMDNlc2l6ZSA9IE5SX0hVR0VfUEFHRVMgKiBocF9zaXplO1xcbitcXHRcXHRtbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNlc2hhcmVkKVxcbitcXHRcXHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXFx1MDAyNiB+TUFQX1BSSVZBVEUpIHwgTUFQX1NIQVJFRDtcXG4rXFxuK1xcdC8qIHplcm9fZmQgaGFzIHRvIGJlIFxcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cXG4rXFx0emVyb19mZCA9IG9wZW4oXFxcIi9kZXYvemVyb1xcXCIsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTtcXG4rXFxuK1xcdC8qIGd1cF9mZCBoYXMgdG8gYmUgXFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xcbitcXHRzZWxmLVxcdTAwM2VndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRShzZWxmLVxcdTAwM2VndXBfZmQsIDApO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlYWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cXHUwMDNlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0XFx0ICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9ORShzZWxmLVxcdTAwM2VhZGRyLCBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdGludCBlcnIgPSBlcnJubztcXG4rXFxuK1xcdFxcdGNsb3NlKHplcm9fZmQpO1xcbitcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VndXBfZmQpO1xcbitcXHRcXHRUSF9MT0coXFxcIm1tYXAgZmFpbGVkOiAlc1xcXCIsIHN0cmVycm9yKGVycikpO1xcbitcXHR9XFxuK1xcdGNsb3NlKHplcm9fZmQpO1xcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZXRocClcXG4rXFx0XFx0bWFkdmlzZShzZWxmLVxcdTAwM2VhZGRyLCBzZWxmLVxcdTAwM2VzaXplLCBNQURWX0hVR0VQQUdFKTtcXG4rXFx0ZWxzZSBpZiAoIXZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpXFxuK1xcdFxcdG1hZHZpc2Uoc2VsZi1cXHUwMDNlYWRkciwgc2VsZi1cXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4rXFxuK1xcdGZvciAocCA9IHNlbGYtXFx1MDAzZWFkZHI7ICh1bnNpZ25lZCBsb25nKXAgXFx1MDAzYyAodW5zaWduZWQgbG9uZylzZWxmLVxcdTAwM2VhZGRyXFxuK1xcdFxcdFxcdCsgc2VsZi1cXHUwMDNlc2l6ZTsgcCArPSBwc2l6ZSgpKVxcbitcXHRcXHRwWzBdID0gMDtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihndXBfdGVzdClcXG4re1xcbitcXHRtdW5tYXAoc2VsZi1cXHUwMDNlYWRkciwgc2VsZi1cXHUwMDNlc2l6ZSk7XFxuK1xcdGNsb3NlKHNlbGYtXFx1MDAzZWd1cF9mZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9ndXBfY21kKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcXG4rXFx0XFx0XFx0IEZJWFRVUkVfREFUQShndXBfdGVzdCkgKnNlbGYsXFxuK1xcdFxcdFxcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxcbitcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBjb21tYW5kKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7XFxuK1xcdFxcdFxcdC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcixcXG4rXFx0XFx0XFx0LnNpemUgPSBzZWxmLVxcdTAwM2VzaXplLFxcbitcXHRcXHRcXHQubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXSxcXG4rXFx0XFx0XFx0Lmd1cF9mbGFncyA9IHZhcmlhbnQtXFx1MDAzZXdyaXRlID8gRk9MTF9XUklURSA6IDAsXFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgY29tbWFuZCwgXFx1MDAyNmd1cCksIDApO1xcbitcXHR9XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfQkFTSUNfVEVTVCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcXG4re1xcbitcXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9GQVNUX0JFTkNITUFSSyk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdClcXG4re1xcbitcXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9GQVNUX0JFTkNITUFSSyk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0Y2hhciAqZmlsZSA9IFxcXCIvZGV2L3plcm9cXFwiO1xcbitcXG4rXFx0ZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0ZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdGlmIChmZCA9PSAtMSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRUFDQ0VTKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcXFxuXFxcIik7XFxuK1xcdFxcdGlmIChlcnJubyA9PSBFTk9FTlQpIHtcXG4rXFx0XFx0XFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcXFwiL3N5cy9rZXJuZWwvZGVidWdcXFwiKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghZGVidWdmcykge1xcbitcXHRcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiTW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGNsb3NlZGlyKGRlYnVnZnMpO1xcbitcXHRcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcXG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcXG5pbmRleCBlMjY0MmVjYTBkMDJiLi5mYTFhNjUxOTYzZmQwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcXG5AQCAtMTAsOSArMTAsNiBAQFxcbiAgKiBidWdzLlxcbiAgKi9cXG4gXFxuLSNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4tXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuQEAgLTMzLDYgKzMwLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9ldmVudGZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gLypcXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG5AQCAtMTQsNyArMTQsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTUlOX0ZSRUVfUEFHRVNcXHQyMFxcbiAjZGVmaW5lIE5SX0hVR0VfUEFHRVNcXHQxMFxcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcXG5pbmRleCAwZjJhYWQxYjdkYmQ2Li5hNDU4YmVjZjU4MzI3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcXG5AQCAtMTgsNyArMTgsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtZmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXFxuICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcXG5pbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuQEAgLTI2LDcgKzI2LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxcbiAjZGVmaW5lIE1CX1RPX0JZVEVTKHgpICh4ICogMTAyNCAqIDEwMjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcXG5pbmRleCBiYzIwMmU0ZWQyYmRhLi4yMDg2NGU3ZDRlMGM3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXFxuQEAgLTIxLDkgKzIxLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdGZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcXG5AQCAtMjAsNyArMjAsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZm5kZWYgU1RBVFhfRElPQUxJR05cXG4gI2RlZmluZSBTVEFUWF9ESU9BTElHTlxcdFxcdDB4MDAwMDIwMDBVXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5AQCAtMTAsNyArMTAsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbkBAIC0yNSw3ICsyNSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDFkMmQ2YmQ3MmZkMmEuLmFkYTExZDMwZDM4ODQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTIyLDcgKzIyLDYgQEBcXG4gI2luY2x1ZGUgXFxcImxpbnV4L21hZ2ljLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXFx1MDAzY1xcdTAwM2MgMzApKVxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcXG5AQCAtMTIyLDYgKzEyMSw3IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXFxuIFxcdGNoYXIgYnVmWzEgXFx1MDAzY1xcdTAwM2MgMTBdO1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbiBcXHRjaGFyICpzdHIsICplbmQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRmaW5mby5kaXIgPSBkaXI7XFxuIFxcdGlmIChzdGF0KGZpbmZvLmRpciwgXFx1MDAyNnBhdGhfc3RhdCkpXFxuQEAgLTE0Miw4ICsxNDIsOSBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxcbiBcXHRcXHQgICAgIG1ham9yKHBhdGhfc3RhdC5zdF9kZXYpLCBtaW5vcihwYXRoX3N0YXQuc3RfZGV2KSlcXG4gXFx0ICAgIFxcdTAwM2U9IHNpemVvZihwYXRoKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tXFx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicmVhZF9maWxlKHVldmVudClcXFwiKTtcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRfZmlsZSglcyk6ICVzXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcdGlmIChzdHJzdHIoYnVmLCBcXFwiREVWVFlQRT1kaXNrXFxcIikpIHtcXG4gXFx0XFx0LyogRm91bmQgaXQgKi9cXG4gXFx0XFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXFxuQEAgLTMyNCw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbiB7XFxuIFxcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XFxuIFxcdGNvbnN0IGludCBtbWFwX3Byb3QgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IFBST1RfUkVBRCA6IChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTtcXG4tXFx0aW50IGZkO1xcbitcXHRpbnQgZmQsIHJldDtcXG4gXFx0dm9pZCAqcDtcXG4gXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbiBcXG5AQCAtMzY4LDcgKzM2OSwxMSBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1tYXAoKVxcXCIpO1xcbiBcXG4gXFx0LyogRHJvcCBwYWdlIGNhY2hlICovXFxuLVxcdHdyaXRlX2ZpbGUoXFxcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1xcXCIsIFxcXCIzXFxcIiwgMik7XFxuK1xcdHJldCA9IHdyaXRlX2ZpbGUoXFxcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1xcXCIsIFxcXCIzXFxcIiwgMik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwid3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuK1xcbiBcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRyZXR1cm4gcDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuaW5kZXggNWZkNzc5MmEwZDQ3OS4uNjcxMWY0YzYxMzcxMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuQEAgLTE1LDcgKzE1LDYgQEBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjaW5jbHVkZS92ZHNvL3RpbWU2NC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggXFxcIi9zeXMva2VybmVsL21tL2tzbS9cXFwiXFxuICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuaW5kZXggZjE5ZDUzYzY5NTc2NC4uYTM1ZTJiNTdlMDViMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuQEAgLTUsNyArNSw2IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbkBAIC0xNiw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdGltZS5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gXFxuICNkZWZpbmUgVFdPTUVHXFx0XFx0KDJcXHUwMDNjXFx1MDAzYzIwKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCBlYWRjNzE1OWNhNWI5Li4wYzVkZTZlYzA2YzgwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbkBAIC0yNCw3ICsyNCw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXFx0XFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFxcdFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5mOWVjMTQwOGE2ZTMwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuQEAgLTE0LDcgKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuIFxcbiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VEXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5AQCAtNDUsOCArNDUsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvcHRyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzZXRqbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInBrZXktaGVscGVycy5oXFxcIlxcbiBcXG4gdTY0IHNoYWRvd19wa2V5X3JlZztcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC0xMzAsMzAgKzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7XFxuIFxcdGZpXFxuIH1cXG4gXFxuLXJ1bl9ndXBfbWF0cml4KCkge1xcbi0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b25cXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XFxuLVxcbi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgXFxcIi1IIC1tICRodWdldGxiX21iXFxcIjsgZG9cXG4tICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtXFxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xcbi0gICAgICAgICAgICAjIC13OiB3cml0ZT0xLCAtVzogd3JpdGU9MFxcbi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvXFxuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcXG4tICAgICAgICAgICAgICAgIGZvciBzaGFyZSBpbiAtUyBcXFwiIFxcXCI7IGRvXFxuLSAgICAgICAgICAgICAgICAgICAgIyAtbjogSG93IG1hbnkgcGFnZXMgdG8gZmV0Y2ggdG9nZXRoZXI/ICA1MTIgaXMgc3BlY2lhbFxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCdzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0b1xcbi0gICAgICAgICAgICAgICAgICAgICMganVzdCB0ZXN0IHBhcnRpYWwgZ3VwIHdoZW4gaGl0IGEgaHVnZSBpbiB3aGF0ZXZlciBmb3JtXFxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcXFwiLW4gMVxcXCIgXFxcIi1uIDUxMlxcXCIgXFxcIi1uIDEyM1xcXCIgXFxcIi1uIC0xXFxcIjsgZG9cXG4tICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IFxcXFxcXG4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtXFxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxcbi0gICAgICAgICAgICAgICAgZG9uZVxcbi0gICAgICAgICAgICBkb25lXFxuLSAgICAgICAgZG9uZVxcbi0gICAgZG9uZVxcbi19XFxuLVxcbiAjIGZpbHRlciA2NGJpdCBhcmNoaXRlY3R1cmVzXFxuIEFSQ0g2NFNUUj1cXFwiYXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NFxcXCJcXG4gaWYgWyAteiBcXFwiJEFSQ0hcXFwiIF07IHRoZW5cXG5AQCAtMjc1LDE4ICsyNTEsNyBAQCBmaVxcbiBcXG4gQ0FURUdPUlk9XFxcIm1tYXBcXFwiIHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxcbiBcXG4taWYgJFJVTl9BTEw7IHRoZW5cXG4tICAgIHJ1bl9ndXBfbWF0cml4XFxuLWVsc2VcXG4tICAgICMgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIDFcXG4tICAgIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMVxcbi0gICAgIyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIC0xXFxuLWZpXFxuLSMgRHVtcCBwYWdlcyAwLCAxOSwgYW5kIDQwOTYsIHVzaW5nIHBpbl91c2VyX3BhZ2VzOlxcbi1DQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFxcbitDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwXFxuIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfbG9uZ3Rlcm1cXG4gXFxuIENBVEVHT1JZPVxcXCJ1c2VyZmF1bHRmZFxcXCIgcnVuX3Rlc3QgLi91ZmZkLXVuaXQtdGVzdHNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5AQCAtOSw3ICs5LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiXFxuICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuaW5kZXggODZhNjAzNjkyODI2MS4uMGUwODNhYjcxYWY2MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbkBAIC0yMSw3ICsyMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiB1aW50NjRfdCBwYWdlc2l6ZTtcXG4gdW5zaWduZWQgaW50IHBhZ2VzaGlmdDtcXG5AQCAtMTQ2LDcgKzE0NSwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiBcXHRpZiAocmV0IFxcdTAwM2U9IElOUFVUX01BWClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlczogRGVidWdmcyBpbnB1dCBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXG4tXFx0d3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XFxuK1xcdHJldCA9IHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCArIDEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIndyaXRlX2ZpbGUoJXMpOiAlc1xcXFxuXFxcIiwgU1BMSVRfREVCVUdGUyxcXG4rXFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbmluZGV4IDUwZDA4MDViNjVkYjkuLmEwNGY1ODhkZjc4MGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbkBAIC0xNCw3ICsxNCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcXG4gI2RlZmluZSBNQVBfSFVHRVRMQlxcdDB4NDAwMDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG5AQCAtMTcsNyArMTcsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIGludCBiYWNraW5nX2ZkID0gLTE7XFxuIGludCBtbWFwX2ZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcXG5pbmRleCA5MmEyMWI5N2Y3NDVhLi4wNzIzODQzYTc2MjZiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXFxuQEAgLTM3LDcgKzM3LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFVGRkRfRkxBR1NcXHQoT19DTE9FWEVDIHwgT19OT05CTE9DSyB8IFVGRkRfVVNFUl9NT0RFX09OTFkpXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbmluZGV4IGM5NzNkNjcyMjcyMGMuLmViNGIyNDMzYjAwZTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcXG5AQCAtNyw4ICs3LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2Fzc2VydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ1ZmZkLWNvbW1vbi5oXFxcIlxcbiBcXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xcbkBAIC0xMSw3ICsxMSw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gLypcXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5pbmRleCA0ODIxYTM1NjMwMzYzLi5mODkxNmIyYWJjMmVmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbkBAIC04ODUsMTExICs4ODUsNTQgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNlIDAgPyAwIDogLWVycm5vO1xcbiB9XFxuIFxcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4te1xcbi1cXHRpbnQgZmQ7XFxuLVxcdHNzaXplX3QgbnVtcmVhZDtcXG4tXFxuLVxcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XFxuLVxcdGlmIChmZCA9PSAtMSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcXG4tXFx0aWYgKG51bXJlYWQgXFx1MDAzYyAxKSB7XFxuLVxcdFxcdGNsb3NlKGZkKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdGJ1ZltudW1yZWFkXSA9ICdcXFxcMCc7XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFxuLVxcdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXFxuLXtcXG4tXFx0aW50IGZkLCBzYXZlZF9lcnJubztcXG4tXFx0c3NpemVfdCBudW13cml0dGVuO1xcbi1cXG4tXFx0aWYgKGJ1ZmxlbiBcXHUwMDNjIDIpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiSW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxcXFxuXFxcIiwgYnVmbGVuKTtcXG4tXFxuLVxcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XFxuLVxcdGlmIChmZCA9PSAtMSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyBvcGVuIGZhaWxlZDogJXNcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XFxuLVxcbi1cXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XFxuLVxcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFx0ZXJybm8gPSBzYXZlZF9lcnJubztcXG4tXFx0aWYgKG51bXdyaXR0ZW4gXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGlmIChpZ25vcmVfZWludmFsIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTClcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIHdyaXRlKCUuKnMpIGZhaWxlZDogJXNcXFxcblxcXCIsIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLFxcbi1cXHRcXHRcXHRcXHRidWYsIHN0cmVycm9yKGVycm5vKSk7XFxuLVxcdH1cXG4tXFx0aWYgKG51bXdyaXR0ZW4gIT0gYnVmbGVuIC0gMSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0cGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7XFxuLX1cXG4tXFxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXFxuLXtcXG4tXFx0X193cml0ZV9maWxlKHBhdGgsIGJ1ZiwgYnVmbGVuLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xcbi19XFxuLVxcbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpXFxuLXtcXG4tXFx0Y2hhciBidWZbMjFdO1xcbi1cXG4tXFx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicmVhZF9maWxlKClcXFwiKTtcXG4tXFxuLVxcdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBfX3dyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSwgYm9vbCBpZ25vcmVfZWludmFsKVxcbi17XFxuLVxcdGNoYXIgYnVmWzIxXTtcXG4tXFxuLVxcdHNwcmludGYoYnVmLCBcXFwiJWx1XFxcIiwgbnVtKTtcXG4tXFx0X193cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxLCBpZ25vcmVfZWludmFsKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXFxuLXtcXG4tXFx0cmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4te1xcbi1cXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gdHJ1ZSk7XFxuLX1cXG4tXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWFsbCwgc2htbWF4O1xcbiBcXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKVxcbiB7XFxuLVxcdGlmIChzaG1tYXgpXFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBzaG1tYXgpO1xcbi1cXHRpZiAoc2htYWxsKVxcbi1cXHRcXHR3cml0ZV9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXFxcIiwgc2htYWxsKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChzaG1tYXgpIHtcXG4rXFx0XFx0cmV0ID0gd3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIHNobW1heCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZXN0b3JlIHNobW1heDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4rXFx0fVxcbitcXHRpZiAoc2htYWxsKSB7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBzaG1hbGwpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gcmVzdG9yZSBzaG1hbGw6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIiwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbiBcXG4tXFx0dmFsID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIik7XFxuIFxcdGlmICh2YWwgXFx1MDAzYyBsZW5ndGgpIHtcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIGxlbmd0aCk7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBsZW5ndGgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgbGVuZ3RoLCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcdFxcdHNobW1heCA9IHZhbDtcXG4gXFx0fVxcbiBcXG4tXFx0dmFsID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXFxcIik7XFxuK1xcdHJldCA9IHJlYWRfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gcmVhZCAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4gXFx0aWYgKHZhbCBcXHUwMDNjIG5yKSB7XFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xcbiBcXHRcXHRzaG1hbGwgPSB2YWw7XFxuIFxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li42NGE4NmU4YTBjNDFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbkBAIC04LDYgKzgsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlIC8qIF9TQ19QQUdFU0laRSAqL1xcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vZmlsZV91dGlscy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgQklUX1VMTChucikgICAgICAgICAgICAgICAgICAgKDFVTEwgXFx1MDAzY1xcdTAwM2MgKG5yKSlcXG4gI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KVxcbkBAIC0xNjYsMTIgKzE2OCw2IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pO1xcbiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpXFx0KCgoZW50KSBcXHUwMDI2ICgxdWxsIFxcdTAwM2NcXHUwMDNjIDYzKSkgIT0gMClcXG4gI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpXFx0KChlbnQpIFxcdTAwMjYgKCgxdWxsIFxcdTAwM2NcXHUwMDNjIDU1KSAtIDEpKVxcbiBcXG4tdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xcbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4tXFxuIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTtcXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA0OjI2OjE0LjcwMDQwNTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NzgyOTg2MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIERvY3VtZW50YXRpb24sIE1BSU5UQUlORVJTLCBLY29uZmlnIGhlbHAgdGV4dCwgYW5kIHVzZXJzcGFjZSB0b29saW5nL3NlbGZ0ZXN0cyB1bmRlciB0b29scy8uIE5vIGtlcm5lbCBydW50aW1lIGxvZ2ljIGlzIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2Q1YWUwZDk0NjA5ZmZiZmIzYzNiNjI1MjE3ZjJiYTg2ZjhmNzZlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA0OjI2OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlMy4uZTBhY2VkYmQxZDQ4NiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuQEAgLTIyNiwxNSArMjI2LDYgQEAgd2lsbCBiZSBwaW5uZWQgbG9uZ3Rlcm0sIGFuZCB3aG9zZSBkYXRhIHdpbGwgYmUgYWNjZXNzZWQuXG4gXG4gVW5pdCB0ZXN0aW5nXG4gPT09PT09PT09PT09XG4tVGhpcyBmaWxlOjpcbi1cbi0gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuLVxuLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczpcbi1cbi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSlcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxuLVxuIFlvdSBjYW4gbW9uaXRvciBob3cgbWFueSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWRcbiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OlxuIFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGEzMTY3YmNiZTU4OTcuLjU0OGJjZjAwOGU3OTkgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xNzE3Myw4ICsxNzE3Myw5IEBAIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW1cbiBGOlx0bW0vZ3VwLmNcbiBGOlx0bW0vZ3VwX3Rlc3QuY1xuIEY6XHRtbS9ndXBfdGVzdC5oXG4rRjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4rRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4tRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiBcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEtTTSAoS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcpXG4gTTpcdEFuZHJldyBNb3J0b24gXHUwMDNjYWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZ1x1MDAzZVxuQEAgLTE3Mjc3LDYgKzE3Mjc4LDcgQEAgRjpcdG1tL21lbW9yeS10aWVycy5jXG4gRjpcdG1tL3BhZ2VfaWRsZS5jXG4gRjpcdG1tL3BnYWxsb2MtdHJhY2suaFxuIEY6XHRtbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jXG4rRjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggNjA0YzU4MTk5YWNiZi4uMGJkMjk4Yzc3NDQ2MSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbisrKyBiL21tL0tjb25maWdcbkBAIC0xMjkyLDI0ICsxMjkyLDIzIEBAIGNvbmZpZyBQRVJDUFVfU1RBVFNcbiBcdCAgYmUgdXNlZCB0byBoZWxwIHVuZGVyc3RhbmQgcGVyY3B1IG1lbW9yeSB1c2FnZS5cbiBcbiBjb25maWcgR1VQX1RFU1Rcbi1cdGJvb2wgXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzXCJcbitcdGJvb2wgXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzIGFuZCBiZW5jaG1hcmtzXCJcbiBcdGRlcGVuZHMgb24gREVCVUdfRlNcbiBcdGhlbHBcbiBcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbi1cdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4tXHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cbitcdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgYW5kXG4rXHQgIGJlbmNobWFya3MgZm9yIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWxpZXNcbitcdCAgb2YgQVBJIGNhbGxzLlxuIFxuLVx0ICBUaGVzZSB0ZXN0cyBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxuLVx0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgc21va2UgdGVzdHMgb2ZcbitcdCAgVGhlc2UgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2ZcbitcdCAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHRlc3RzIG9mXG4gXHQgIHRoZSBub24tX2Zhc3QgdmFyaWFudHMuXG4gXG4tXHQgIFRoZXJlIGlzIGFsc28gYSBzdWItdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueVxuLVx0ICBvZiB1cCB0byBlaWdodCBwYWdlcyAoc2VsZWN0ZWQgYnkgY29tbWFuZCBsaW5lIGFyZ3MpIHdpdGhpbiB0aGVcbi1cdCAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYVxuLVx0ICBwaW5fdXNlcl9wYWdlcyooKSwgb3IgcGlubmVkIHZpYSBnZXRfdXNlcl9wYWdlcyooKSwgYXMgc3BlY2lmaWVkXG4tXHQgIGJ5IG90aGVyIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4rXHQgIFRoZXJlIGlzIGFsc28gYSB0ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55IG9mIHVwXG4rXHQgIHRvIGVpZ2h0IHBhZ2VzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlXG4rXHQgIHBhZ2VzIGFyZSBlaXRoZXIgYWNxdWlyZWQgdmlhIHBpbl91c2VyX3BhZ2VzKigpIG9yIGdldF91c2VyX3BhZ2VzKigpLlxuIFxuLVx0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuK1x0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYW5kIHRvb2xzL21tL2d1cF9iZW5jaC5jLlxuIFxuIGNvbW1lbnQgXCJHVVBfVEVTVCBuZWVkcyB0byBoYXZlIERFQlVHX0ZTIGVuYWJsZWRcIlxuIFx0ZGVwZW5kcyBvbiAhR1VQX1RFU1QgXHUwMDI2XHUwMDI2ICFERUJVR19GU1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWIyMjM3ZTk4MjNlOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuQEAgLTAsMCArMSwxMDYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiZmlsZV91dGlscy5oXCJcbitcbitpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbit7XG4rXHRpbnQgZmQsIGVycjtcbitcdHNzaXplX3QgbnVtcmVhZDtcbitcbitcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XG4rXHRpZiAoZmQgPT0gLTEpXG4rXHRcdHJldHVybiAtZXJybm87XG4rXG4rXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbitcdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4rXHRcdGVyciA9IG51bXJlYWQgPyBlcnJubyA6IEVOT0RBVEE7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIC1lcnI7XG4rXHR9XG4rXG4rXHRidWZbbnVtcmVhZF0gPSAnXFwwJztcbitcdGNsb3NlKGZkKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4re1xuK1x0aW50IGZkLCBzYXZlZF9lcnJubztcbitcdHNzaXplX3QgbnVtd3JpdHRlbjtcbitcbitcdGlmIChidWZsZW4gXHUwMDNjIDIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbitcdGlmIChmZCA9PSAtMSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbitcdHNhdmVkX2Vycm5vID0gZXJybm87XG4rXHRjbG9zZShmZCk7XG4rXG4rXHRpZiAobnVtd3JpdHRlbiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC1zYXZlZF9lcnJubztcbitcbitcdGlmIChudW13cml0dGVuICE9IChzc2l6ZV90KShidWZsZW4gLSAxKSlcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIHZhbDtcbitcdGludCByZXQ7XG4rXHRjaGFyIGJ1ZlsyMV07XG4rXHRjaGFyICplbmQ7XG4rXG4rXHRpZiAoIW51bSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogUmVqZWN0IHNpZ25zIGFuZCBsZWFkaW5nIHdoaXRlc3BhY2UgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgc3RydG91bCgpICovXG4rXHRpZiAoYnVmWzBdIFx1MDAzYyAnMCcgfHwgYnVmWzBdIFx1MDAzZSAnOScpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0ZXJybm8gPSAwO1xuK1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuK1x0aWYgKGVycm5vKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0LyogT25seSBhbGxvdyBhIG5ld2xpbmUgYWZ0ZXIgdGhlIG51bWJlciAqL1xuK1x0aWYgKCplbmQgPT0gJ1xcbicpXG4rXHRcdGVuZCsrO1xuK1xuK1x0aWYgKCplbmQgIT0gJ1xcMCcpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Km51bSA9IHZhbDtcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuK3tcbitcdGNoYXIgYnVmWzIxXTtcbitcbitcdHNwcmludGYoYnVmLCBcIiVsdVwiLCBudW0pO1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSArIDEpO1xuK31cbitcbitpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xuK1x0cmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaCBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MGRhYTgyYzJiMmI0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5AQCAtMCwwICsxLDEzIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cbisjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX19cbitcbisjaW5jbHVkZSBcdTAwM2NzdGRkZWYuaFx1MDAzZVxuK1xuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbitpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pO1xuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xuK2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4rXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5zaW1pbGFyaXR5IGluZGV4IDg3JVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5pbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuKysrIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbkBAIC04LDEyICs4LDE4IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcImZpbGVfdXRpbHMuaFwiXG4gI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFRIUF9TWVNGUyBcIi9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL1wiXG4gI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNFxuK1xuKyNpZm5kZWYgQVJSQVlfU0laRVxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXG4rI2VuZGlmXG4rXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTtcbiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4O1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNhdmVkX3NldHRpbmdzO1xuQEAgLTQ4LDYgKzU0LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2htZW1fZW5hYmxlZF9zdHJpbmdzW10gPSB7XG4gXHROVUxMXG4gfTtcbiBcbitzdGF0aWMgdm9pZCBwcmludF9maWxlX2FjY2Vzc19lcnJvcihjb25zdCBjaGFyICpwYXRoLCBpbnQgcmV0KVxuK3tcbitcdHByaW50ZihcIiMgJXM6ICVzICglZClcXG5cIiwgcGF0aCwgc3RyZXJyb3IoLXJldCksIC1yZXQpO1xuK31cbitcbiBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbkBAIC02MSw4ICs3Miw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuIFxuLVx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpIHtcbi1cdFx0cGVycm9yKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG5AQCAtMTAzLDEyICsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcbiBcdFx0cHJpbnRmKFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICsgMSk7XG4rXHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIG51bTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTIFwiJXNcIiwgbmFtZSk7XG5AQCAtMTE2LDcgKzEzMywxMyBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRwcmludGYoXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4rXHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZudW0pO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnVtO1xuIH1cbiBcbiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG5AQCAtMTI5LDcgKzE1MiwxMSBAQCB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG4gXHRcdHByaW50ZihcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHdyaXRlX251bShwYXRoLCBudW0pO1xuK1x0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbiB9XG4gXG4gdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbkBAIC0xNTcsOCArMTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG4gXHRcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwiKSxcbiBcdFx0LnBhZ2VzX3RvX3NjYW4gPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cIiksXG4gXHR9O1xuLVx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXG4tXHRcdHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoKTtcbitcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XG4rXHRcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuK1x0XHRcdFx0ICAgXHUwMDI2c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xuK1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKSB7XG5AQCAtMjA4LDggKzI0MiwxNSBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdHRocF93cml0ZV9udW0oXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwiLCBraHVnZXBhZ2VkLVx1MDAzZW1heF9wdGVzX3NoYXJlZCk7XG4gXHR0aHBfd3JpdGVfbnVtKFwia2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXCIsIGtodWdlcGFnZWQtXHUwMDNlcGFnZXNfdG9fc2Nhbik7XG4gXG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0d3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuK1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbitcdFx0aW50IHJldCA9IHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuK1x0XHRcdFx0ICAgIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuK1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcbitcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHRcdH1cbitcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX09SREVSUzsgaSsrKSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSlcbkBAIC0zMDcsOCArMzQ4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSlcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGlmIChyZXQgIT0gLUVOT0VOVCkge1xuK1x0XHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0XHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiBcdH1cbiBcbiBcdHJldHVybiBvcmRlcnM7XG5AQCAtMzgyLDggKzQzMCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heClcbiBcdFx0aWYgKHNzY2FuZihlbnRyeS1cdTAwM2VkX25hbWUsIFwiaHVnZXBhZ2VzLSV6dWtCXCIsIFx1MDAyNmtiKSAhPSAxKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRzaXplc1tjb3VudCsrXSA9IGtiICogMTAyNDtcbi1cdFx0a3NmdF9wcmludF9tc2coXCJbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXG5cIixcbi1cdFx0XHQgICAgICAga2IpO1xuK1x0XHRwcmludGYoXCIjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwiLCBrYik7XG4gXHR9XG4gXHRjbG9zZWRpcihkaXIpO1xuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQyNSwyOCArNDcyLDQ5IEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfc3lzZnNfcGF0aChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBucjtcbitcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcIm5yX2h1Z2VwYWdlc1wiKTtcbiBcbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbitcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yO1xuIH1cbiBcbiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwibnJfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0d3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuK1x0cmV0ID0gd3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBucjtcbitcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnI7XG4gfVxuIFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXG5AQCAtNTAyLDcgKzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKG5yX2VuYWJsZWQgXHUwMDNlIG1heCkge1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcImRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cIiwgbnJfZW5hYmxlZCwgbWF4KTtcbitcdFx0cHJpbnRmKFwiIyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxuXCIsXG4rXHRcdCAgICAgICBucl9lbmFibGVkLCBtYXgpO1xuIFx0XHRucl9lbmFibGVkID0gbWF4O1xuIFx0fVxuIFxuQEAgLTU3NCw4ICs2NDMsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX3NpZ2hhbmRsZXIoaW50IHNpZylcbiB7XG4rXHQodm9pZClzaWc7XG4rXG4gXHQvKiBleGl0KCkgd2lsbCBpbnZva2UgdGhlIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0IGhhbmRsZXIuICovXG4tXHRleGl0KEtTRlRfRkFJTCk7XG4rXHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gfVxuIFxuIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuc2ltaWxhcml0eSBpbmRleCAxMDAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuaW5kZXggMTQ0NmE2NTllNTQwOC4uMTU0ZDc0MGJlMDJlOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbkBAIC0zLDMgKzMsNCBAQCBzbGFiaW5mb1xuIHBhZ2UtdHlwZXNcbiBwYWdlX293bmVyX3NvcnRcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK2d1cF9iZW5jaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLmYyMGEzMmQ4Y2MyMmUgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC0zLDEzICszLDE1IEBAXG4gI1xuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXJcbitCVUlMRF9UQVJHRVRTICs9IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcbitHVVBfQkVOQ0hfT0JKUyA9IGd1cF9iZW5jaC5jIC4uL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIC4uL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcbitDRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLUkuLi8uLiAtcHRocmVhZFxuIExERkxBR1MgKz0gJChMSUJTKSAtcHRocmVhZFxuIFxuIGFsbDogJChCVUlMRF9UQVJHRVRTKVxuQEAgLTIyLDggKzI0LDExIEBAICQoTElCUyk6XG4gJTogJS5jXG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4rZ3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpXG4rXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJChHVVBfQkVOQ0hfT0JKUykgJChMREZMQUdTKVxuK1xuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbnNpbWlsYXJpdHkgaW5kZXggNTAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG5yZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbmluZGV4IDNmODQxYTk2Zjg3MDYuLmU2YTgwYmE1MTk1YTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4rKysgYi90b29scy9tbS9ndXBfYmVuY2guY1xuQEAgLTEwLDExICsxMCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4tI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4gXG5AQCAtMzgsMTIgKzM3LDYgQEAgc3RhdGljIGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpXG4gXHRcdHJldHVybiBcIlBJTl9GQVNUX0JFTkNITUFSS1wiO1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxuIFx0XHRyZXR1cm4gXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXCI7XG4tXHRjYXNlIEdVUF9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCJHVVBfQkFTSUNfVEVTVFwiO1xuLVx0Y2FzZSBQSU5fQkFTSUNfVEVTVDpcbi1cdFx0cmV0dXJuIFwiUElOX0JBU0lDX1RFU1RcIjtcbi1cdGNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6XG4tXHRcdHJldHVybiBcIkRVTVBfVVNFUl9QQUdFU19URVNUXCI7XG4gXHR9XG4gXHRyZXR1cm4gXCJVbmtub3duIGNvbW1hbmRcIjtcbiB9XG5AQCAtNTMsMzkgKzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcbiBcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XG4gXHRpbnQgaSwgc3RhdHVzO1xuIFxuLVx0LyogT25seSByZXBvcnQgdGltaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAqX0JFTkNITUFSSyBjb21tYW5kczogKi9cbi1cdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XG4tXHQgICAgIChjbWQgPT0gUElOX0xPTkdURVJNX0JFTkNITUFSSykpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSsrKSB7XG4tXHRcdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0XHRicmVhaztcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlcGVhdHM7IGkrKykge1xuK1x0XHRndXAuc2l6ZSA9IHNpemU7XG4rXHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuK1x0XHRpZiAoc3RhdHVzKSB7XG4rXHRcdFx0aW50IGVyciA9IGVycm5vO1xuIFxuIFx0XHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbi1cdFx0XHRcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbi1cdFx0XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuLVx0XHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCIsIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcIiwgZ3VwLnNpemUpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiXFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIiVzIGlvY3RsIGZhaWxlZDogJXNcXG5cIiwgY21kX3RvX3N0cihjbWQpLFxuK1x0XHRcdFx0c3RyZXJyb3IoZXJyKSk7XG4gXHRcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuK1x0XHRcdHJldHVybiBkYXRhO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGdvdG8gcmV0dXJuXztcbiBcbiBcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0a3NmdF9wcmludF9tc2coXCIlczogZG9uZVxcblwiLCBjbWRfdG9fc3RyKGNtZCkpO1xuK1x0XHRwcmludGYoXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbitcdFx0XHRjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbitcdFx0XHRndXAucHV0X2RlbHRhX3VzZWMpO1xuIFx0XHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcIlRydW5jYXRlZCAoc2l6ZTogJWxsZClcXG5cIiwgZ3VwLnNpemUpO1xuK1x0XHRcdHByaW50ZihcIiwgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVwiLCBndXAuc2l6ZSk7XG4rXHRcdHByaW50ZihcIlxcblwiKTtcbiBcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuIFx0fVxuIFxuLXJldHVybl86XG4tXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFwiaW9jdGwgc3RhdHVzICVkXFxuXCIsIHN0YXR1cyk7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG5AQCAtOTMsMzggKzc2LDIxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiB7XG4gXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4gXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcbi1cdGludCBmbGFncyA9IE1BUF9QUklWQVRFO1xuK1x0aW50IGZsYWdzID0gTUFQX1BSSVZBVEUsIHN0YXJ0ZWRfdGhyZWFkcyA9IDAsIGV4aXRfc3RhdHVzID0gMTtcbiBcdGNoYXIgKmZpbGUgPSBcIi9kZXYvemVyb1wiO1xuLVx0Ym9vbCBodWdldGxiID0gZmFsc2U7XG4rXHRib29sIGh1Z2V0bGIgPSBmYWxzZSwgdGhyZWFkX2Vycm9yID0gZmFsc2U7XG4rXHR2b2lkICp0aHJlYWRfcmVzdWx0O1xuIFx0cHRocmVhZF90ICp0aWQ7XG4gXHRjaGFyICpwO1xuIFxuLVx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCJtOnI6bjpGOmY6YWJjajp0VExVdXdXU0hwelwiKSkgIT0gLTEpIHtcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwibTpyOm46RjpmOmFqOnRUTHV3V1NIXCIpKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICdhJzpcbiBcdFx0XHRjbWQgPSBQSU5fRkFTVF9CRU5DSE1BUks7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ2InOlxuLVx0XHRcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICdMJzpcbiBcdFx0XHRjbWQgPSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdjJzpcbi1cdFx0XHRjbWQgPSBEVU1QX1VTRVJfUEFHRVNfVEVTVDtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5XG4tXHRcdFx0ICogdXNlcidzIG5vbi1vcHRpb24gYXJndW1lbnRzLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcImRvXG4tXHRcdFx0ICogbm90aGluZ1wiLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGd1cC53aGljaF9wYWdlc1swXSA9IDE7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ3AnOlxuLVx0XHRcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xuLVx0XHRcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICdGJzpcbiBcdFx0XHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xuIFx0XHRcdGd1cC5ndXBfZmxhZ3MgPSBzdHJ0b2wob3B0YXJnLCAwLCAwKTtcbkBAIC0xNDEsNyArMTA3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICduJzpcbiBcdFx0XHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcbiBcdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdFx0XHRucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpO1xuK1x0XHRcdFx0bnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAndCc6XG4gXHRcdFx0dGhwID0gMTtcbkBAIC0xNDksOSArMTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICdUJzpcbiBcdFx0XHR0aHAgPSAwO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdVJzpcbi1cdFx0XHRjbWQgPSBHVVBfQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAndSc6XG4gXHRcdFx0Y21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTE3Myw1MiArMTM2LDQxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRodWdldGxiID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJXcm9uZyBhcmd1bWVudFxcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJXcm9uZyBhcmd1bWVudFxcblwiKTtcbitcdFx0XHRleGl0KDEpO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAob3B0aW5kIFx1MDAzYyBhcmdjKSB7XG4tXHRcdGludCBleHRyYV9hcmdfY291bnQgPSAwO1xuLVx0XHQvKlxuLVx0XHQgKiBGb3IgZXhhbXBsZTpcbi1cdFx0ICpcbi1cdFx0ICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDFcbi1cdFx0ICpcbi1cdFx0ICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5N1xuLVx0XHQgKi9cbi1cbi1cdFx0d2hpbGUgKChvcHRpbmQgXHUwMDNjIGFyZ2MpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgICAgKGV4dHJhX2FyZ19jb3VudCBcdTAwM2MgR1VQX1RFU1RfTUFYX1BBR0VTX1RPX0RVTVApKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhblxuLVx0XHRcdCAqIHVzZSBub3JtYWwgMC1iYXNlZCBpbmRleGluZyBvbiB0aGUgY29tbWFuZCBsaW5lLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICsgMTtcbi1cbi1cdFx0XHRndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7XG4tXHRcdFx0ZXh0cmFfYXJnX2NvdW50Kys7XG4tXHRcdFx0b3B0aW5kKys7XG4tXHRcdH1cbitcdGlmIChvcHRpbmQgIT0gYXJnYykge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJVbmV4cGVjdGVkIGFyZ3VtZW50ICclcydcXG5cIiwgYXJndltvcHRpbmRdKTtcbitcdFx0ZXhpdCgxKTtcbiBcdH1cbiBcbi1cdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRpZiAoZ2V0dWlkKCkpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbiBcbiBcdGlmIChodWdldGxiKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbiBcbi1cdFx0aWYgKCFocF9zaXplKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwiSHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcblwiKTtcbitcdFx0aWYgKCFocF9zaXplKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiQ291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuIFxuIFx0XHRzaXplID0gKHNpemUgKyBocF9zaXplIC0gMSkgXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xuLVx0XHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpXG4tXHRcdFx0a3NmdF9leGl0X3NraXAoXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXHRcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuIFx0fVxuIFxuLVx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XG4tXG4gXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xuLVx0aWYgKGZpbGVkIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdGlmIChmaWxlZCBcdTAwM2MgMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4gXG4gXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlcztcbiBcdGlmICh3cml0ZSlcbkBAIC0yMjcsMjYgKzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4gXHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4gXHRcdHN3aXRjaCAoZXJybm8pIHtcbi1cdFx0Y2FzZSBFQUNDRVM6XG4tXHRcdFx0aWYgKGdldHVpZCgpKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVOT0VOVDpcbiBcdFx0XHRpZiAob3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpID09IE5VTEwpXG4tXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cIik7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwibW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsXG4rXHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cIik7XG4tXHRcdGtzZnRfZXhpdF9wYXNzKCk7XG4rXHRcdGdvdG8gZXJyX2Nsb3NlX2ZpbGVkO1xuIFx0fVxuIFxuIFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcbi1cdGlmIChwID09IE1BUF9GQUlMRUQpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1tYXA6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1tYXA6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGdvdG8gZXJyX2Nsb3NlX2d1cF9mZDtcbitcdH1cbiBcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcbiBcbiBcdGlmICh0aHAgPT0gMSlcbkBAIC0yNTUsMjEgKzIwNSw0NCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbiBcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBwc2l6ZSgpKVxuK1x0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBnZXRwYWdlc2l6ZSgpKVxuIFx0XHRwWzBdID0gMDtcbiBcbiBcdHRpZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG50aHJlYWRzKTtcbi1cdGFzc2VydCh0aWQpO1xuK1x0aWYgKCF0aWQpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiRmFpbGVkIHRvIGFsbG9jYXRlICVkIHRocmVhZHM6ICVzXFxuXCIsXG4rXHRcdFx0bnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGdvdG8gZXJyX3VubWFwO1xuK1x0fVxuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkrKykge1xuIFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxuXCIsIHN0cmVycm9yKHJldCkpO1xuK1x0XHRcdHRocmVhZF9lcnJvciA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0c3RhcnRlZF90aHJlYWRzKys7XG4gXHR9XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudGhyZWFkczsgaSsrKSB7XG4tXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhcnRlZF90aHJlYWRzOyBpKyspIHtcbitcdFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgXHUwMDI2dGhyZWFkX3Jlc3VsdCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xcblwiLCBzdHJlcnJvcihyZXQpKTtcbitcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuK1x0XHR9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpXG4rXHRcdFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdGZyZWUodGlkKTtcbi1cbi1cdGtzZnRfZXhpdF9wYXNzKCk7XG4rXHRpZiAodGhyZWFkX2Vycm9yKVxuK1x0XHRnb3RvIGVycl91bm1hcDtcbitcdGV4aXRfc3RhdHVzID0gMDtcbitcbitlcnJfdW5tYXA6XG4rXHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XG4rZXJyX2Nsb3NlX2d1cF9mZDpcbitcdGNsb3NlKGd1cF9mZCk7XG4rZXJyX2Nsb3NlX2ZpbGVkOlxuK1x0Y2xvc2UoZmlsZWQpO1xuK1x0cmV0dXJuIGV4aXRfc3RhdHVzO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCAyZDUzNjYxOTZlMzA5Li45YzAzNjI0ZmQyOTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMzcsNyArMzcsOCBAQCBlbmRpZlxuICMgTERMSUJTLlxuIE1BS0VGTEFHUyArPSAtLW5vLWJ1aWx0aW4tcnVsZXNcbiBcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxuK0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXG4rQ0ZMQUdTICs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4gQ0ZMQUdTICs9IC1XdW5yZWFjaGFibGUtY29kZVxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxuIFxuQEAgLTU3LDggKzU4LDggQEAgZW5kaWZcbiBcbiBURVNUX0dFTl9GSUxFUyA9IGNvd1xuIFRFU1RfR0VOX0ZJTEVTICs9IGNvbXBhY3Rpb25fdGVzdFxuK1RFU1RfR0VOX0ZJTEVTICs9IGd1cFxuIFRFU1RfR0VOX0ZJTEVTICs9IGd1cF9sb25ndGVybVxuLVRFU1RfR0VOX0ZJTEVTICs9IGd1cF90ZXN0XG4gVEVTVF9HRU5fRklMRVMgKz0gaG1tLXRlc3RzXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tYWR2aXNlXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tbWFwXG5AQCAtMTg3LDggKzE4OCwxMCBAQCBURVNUX0ZJTEVTICs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbiBcbi0kKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbiskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcbitcdFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG4rJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4rXHRcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuIFxuICQoT1VUUFVUKS91ZmZkLXN0cmVzczogdWZmZC1jb21tb24uY1xuICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmNcbkBAIC0yMTcsNyArMjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyArPSAtbTMyIC1teHNhdmVcbiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICs9IC1scnQgLWxkbCAtbG1cbiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4rXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKVxuIGVuZGlmXG4gXG5AQCAtMjI2LDcgKzIyOSw3IEBAICQoQklOQVJJRVNfNjQpOiBDRkxBR1MgKz0gLW02NCAtbXhzYXZlXG4gJChCSU5BUklFU182NCk6IExETElCUyArPSAtbHJ0IC1sZGxcbiAkKEJJTkFSSUVTXzY0KTogJChPVVRQVVQpLyVfNjQ6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4rXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtNjQsJCh0KSkpKVxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuQEAgLTE1LDkgKzE1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTUFQX1NJWkVfTUJcdDEwMFxuICNkZWZpbmUgTUFQX1NJWkVcdChNQVBfU0laRV9NQiAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbmluZGV4IDhhYTUyNDlkOWJlZjYuLjMyNjRhODI4NTc1YmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA0NWI4NGY3YjM2NGUwLi4yODlhZWQyZWJhYzAyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMjUsNyArMjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gdWludDY0X3QgcGFnZV9zaXplO1xuIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpbmNsdWRlIFwiLi4vcGlkZmQvcGlkZmQuaFwiXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmUzYzJmZmEzYTA1N2Zcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG5AQCAtMCwwICsxLDI3NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbisjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuK1xuKy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xuKyNkZWZpbmUgRk9MTF9XUklURVx0MHgwMVx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXG4rXG4rLyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovXG4rc3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9O1xuK1xuKyNkZWZpbmUgR1VQX1RFU1RfRklMRSBcIi9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XCJcbisjZGVmaW5lIE5SX0hVR0VfUEFHRVMgMTI4XG4rXG4rSFVHRVRMQl9TRVRVUF9ERUZBVUxUX1BBR0VTKE5SX0hVR0VfUEFHRVMpXG4rXG4rRklYVFVSRShndXBfdGVzdClcbit7XG4rXHRpbnQgZ3VwX2ZkO1xuK1x0Y2hhciAqYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVChndXBfdGVzdClcbit7XG4rXHRib29sIHRocDtcbitcdGJvb2wgaHVnZXRsYjtcbitcdGJvb2wgd3JpdGU7XG4rXHRib29sIHNoYXJlZDtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGUpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IHRydWUsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSB0cnVlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF9odWdldGxiKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gdHJ1ZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZClcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfdGhwKVxuK3tcbitcdC50aHAgPSB0cnVlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF9odWdldGxiKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gdHJ1ZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGd1cF90ZXN0KVxuK3tcbitcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEU7XG4rXHRpbnQgemVyb19mZDtcbitcdGNoYXIgKnA7XG4rXG4rXHRzZWxmLVx1MDAzZXNpemUgPSAxMjggKiBNQjtcbitcbitcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuK1xuK1x0XHRpZiAoIWhwX3NpemUpXG4rXHRcdFx0U0tJUChyZXR1cm4sIFwiSHVnZVRMQiBub3QgYXZhaWxhYmxlXFxuXCIpO1xuK1xuK1x0XHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcdTAwM2MgTlJfSFVHRV9QQUdFUylcbitcdFx0XHRTS0lQKHJldHVybiwgXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXG4rXHRcdHNlbGYtXHUwMDNlc2l6ZSA9IE5SX0hVR0VfUEFHRVMgKiBocF9zaXplO1xuK1x0XHRtbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpO1xuK1x0fVxuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNlc2hhcmVkKVxuK1x0XHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xuK1xuK1x0LyogemVyb19mZCBoYXMgdG8gYmUgXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXG4rXHR6ZXJvX2ZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xuK1xuK1x0LyogZ3VwX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbitcdHNlbGYtXHUwMDNlZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZ3VwX2ZkLCAwKTtcbitcbitcdHNlbGYtXHUwMDNlYWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cdTAwM2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHRcdCAgbW1hcF9mbGFncywgemVyb19mZCwgMCk7XG4rXG4rXHRBU1NFUlRfTkUoc2VsZi1cdTAwM2VhZGRyLCBNQVBfRkFJTEVEKSB7XG4rXHRcdGludCBlcnIgPSBlcnJubztcbitcbitcdFx0Y2xvc2UoemVyb19mZCk7XG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbitcdFx0VEhfTE9HKFwibW1hcCBmYWlsZWQ6ICVzXCIsIHN0cmVycm9yKGVycikpO1xuK1x0fVxuK1x0Y2xvc2UoemVyb19mZCk7XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2V0aHApXG4rXHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuK1x0ZWxzZSBpZiAoIXZhcmlhbnQtXHUwMDNlaHVnZXRsYilcbitcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbitcdGZvciAocCA9IHNlbGYtXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyXG4rXHRcdFx0KyBzZWxmLVx1MDAzZXNpemU7IHAgKz0gcHNpemUoKSlcbitcdFx0cFswXSA9IDA7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpXG4re1xuK1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbitcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX2d1cF9jbWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHRcdCBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLFxuK1x0XHRcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxuK1x0XHRcdCB1bnNpZ25lZCBsb25nIGNvbW1hbmQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0ge1xuK1x0XHRcdC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyLFxuK1x0XHRcdC5zaXplID0gc2VsZi1cdTAwM2VzaXplLFxuK1x0XHRcdC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXHUwMDNjIDAgP1xuK1x0XHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV0sXG4rXHRcdFx0Lmd1cF9mbGFncyA9IHZhcmlhbnQtXHUwMDNld3JpdGUgPyBGT0xMX1dSSVRFIDogMCxcbitcdFx0fTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBjb21tYW5kLCBcdTAwMjZndXApLCAwKTtcbitcdH1cbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9CQVNJQ19URVNUKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcylcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9CQVNJQ19URVNUKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlc19mYXN0KVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0ZBU1RfQkVOQ0hNQVJLKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19mYXN0KVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0ZBU1RfQkVOQ0hNQVJLKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19sb25ndGVybSlcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9MT05HVEVSTV9CRU5DSE1BUkspO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0aW50IGZkO1xuK1x0Y2hhciAqZmlsZSA9IFwiL2Rldi96ZXJvXCI7XG4rXG4rXHRmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbitcbitcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0aWYgKGZkID09IC0xKSB7XG4rXHRcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRcdGlmIChlcnJubyA9PSBFQUNDRVMpXG4rXHRcdFx0a3NmdF9leGl0X3NraXAoXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XG4rXHRcdFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpO1xuK1xuK1x0XHRcdGlmICghZGVidWdmcykge1xuK1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCIpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRjbG9zZWRpcihkZWJ1Z2ZzKTtcbitcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXG5cIik7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwiLCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IGUyNjQyZWNhMGQwMmIuLmZhMWE2NTE5NjNmZDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbkBAIC0xMCw5ICsxMCw2IEBAXG4gICogYnVncy5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4tXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG5AQCAtMzMsNiArMzAsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4gXG4gLypcbiAgKiBUaGlzIGlzIGEgcHJpdmF0ZSBVQVBJIHRvIHRoZSBrZXJuZWwgdGVzdCBtb2R1bGUgc28gaXQgaXNuJ3QgZXhwb3J0ZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuQEAgLTE4LDcgKzE4LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1mZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNClcbiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcbmluZGV4IGVkM2Q5MmU4NjJkODcuLjliNzI0YWY2NmU5MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG5AQCAtMjYsNyArMjYsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxuICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbmluZGV4IGJjMjAyZTRlZDJiZGEuLjIwODY0ZTdkNGUwYzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG5AQCAtMjEsOSArMjEsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdGZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZm5kZWYgTUFEVl9TT0ZUX09GRkxJTkVcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5pbmRleCBmYjQ2MDA1NzBlMTMxLi45NDk1OTc0ZWNjYmVhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuQEAgLTIwLDcgKzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5AQCAtMTAsNyArMTAsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbkBAIC0yNSw3ICsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggMWQyZDZiZDcyZmQyYS4uYWRhMTFkMzBkMzg4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyArMjIsNiBAQFxuICNpbmNsdWRlIFwibGludXgvbWFnaWMuaFwiXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTEyMiw2ICsxMjEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxuIFx0Y2hhciBidWZbMSBcdTAwM2NcdTAwM2MgMTBdO1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiBcdGNoYXIgKnN0ciwgKmVuZDtcbitcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRpZiAoc3RhdChmaW5mby5kaXIsIFx1MDAyNnBhdGhfc3RhdCkpXG5AQCAtMTQyLDggKzE0Miw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuLVx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInJlYWRfZmlsZSh1ZXZlbnQpXCIpO1xuK1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZF9maWxlKCVzKTogJXNcXG5cIiwgcGF0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwiREVWVFlQRT1kaXNrXCIpKSB7XG4gXHRcdC8qIEZvdW5kIGl0ICovXG4gXHRcdGlmIChzbnByaW50ZihmaW5mby5kZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuQEAgLTMyNCw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4rXHRpbnQgZmQsIHJldDtcbiBcdHZvaWQgKnA7XG4gXHR1bnNpZ25lZCBsb25nIHNpemU7XG4gXG5AQCAtMzY4LDcgKzM2OSwxMSBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtbWFwKClcIik7XG4gXG4gXHQvKiBEcm9wIHBhZ2UgY2FjaGUgKi9cbi1cdHdyaXRlX2ZpbGUoXCIvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcIiwgXCIzXCIsIDIpO1xuK1x0cmV0ID0gd3JpdGVfZmlsZShcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wiLCBcIjNcIiwgMik7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJ3cml0ZV9maWxlKGRyb3BfY2FjaGVzKTogJXNcXG5cIixcbitcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbitcbiBcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtMTUsNyArMTUsNiBAQFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggXCIvc3lzL2tlcm5lbC9tbS9rc20vXCJcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNSw3ICs1LDYgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbkBAIC0xNiw2ICsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggZWFkYzcxNTljYTViOS4uMGM1ZGU2ZWMwNmM4MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjQsNyArMjQsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTFx0XHQoUEFHRV9JU19XUEFMTE9XRUQgfCBQQUdFX0lTX1dSSVRURU4gfFx0XFxcbiBcdFx0XHRcdFx0IFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5mOWVjMTQwOGE2ZTMwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuQEAgLTE0LDcgKzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VEXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuaW5kZXggYWU2ZTE1MzBiMzU0OC4uYjc4ODJhYjk3NjgzZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuQEAgLTQ1LDggKzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gI2luY2x1ZGUgXCJwa2V5LWhlbHBlcnMuaFwiXG4gXG4gdTY0IHNoYWRvd19wa2V5X3JlZztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBkMDlmOWY2YTM4NGVlLi5hZTBhYjVlZmFiYWU2IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMTMwLDMwICsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwiLUggLW0gJGh1Z2V0bGJfbWJcIjsgZG9cbi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm1cbi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG9cbi0gICAgICAgICAgICAjIC13OiB3cml0ZT0xLCAtVzogd3JpdGU9MFxuLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG9cbi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkXG4tICAgICAgICAgICAgICAgIGZvciBzaGFyZSBpbiAtUyBcIiBcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICMgLW46IEhvdyBtYW55IHBhZ2VzIHRvIGZldGNoIHRvZ2V0aGVyPyAgNTEyIGlzIHNwZWNpYWxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCdzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0b1xuLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm1cbi0gICAgICAgICAgICAgICAgICAgIGZvciBudW0gaW4gXCItbiAxXCIgXCItbiA1MTJcIiBcIi1uIDEyM1wiIFwiLW4gLTFcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCJhcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XCJcbiBpZiBbIC16IFwiJEFSQ0hcIiBdOyB0aGVuXG5AQCAtMjc1LDE4ICsyNTEsNyBAQCBmaVxuIFxuIENBVEVHT1JZPVwibW1hcFwiIHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxuIFxuLWlmICRSVU5fQUxMOyB0aGVuXG4tICAgIHJ1bl9ndXBfbWF0cml4XG4tZWxzZVxuLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMVxuLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFxuK0NBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cFxuIENBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF9sb25ndGVybVxuIFxuIENBVEVHT1JZPVwidXNlcmZhdWx0ZmRcIiBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICs5LDYgQEBcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9wYWdlbWFwXCJcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCA4NmE2MDM2OTI4MjYxLi4wZTA4M2FiNzFhZjYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiB1aW50NjRfdCBwYWdlc2l6ZTtcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xuQEAgLTE0Niw3ICsxNDUsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGVfZGVidWdmcyhjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdGlmIChyZXQgXHUwMDNlPSBJTlBVVF9NQVgpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcbi1cdHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCArIDEpO1xuK1x0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJ3cml0ZV9maWxlKCVzKTogJXNcXG5cIiwgU1BMSVRfREVCVUdGUyxcbitcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgKzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcbiAjZGVmaW5lIE1BUF9IVUdFVExCXHQweDQwMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5pbmRleCA4ZWIwYzU2MzBlN2UzLi45NmY3Mjg5OGViZTBhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbkBAIC0xNyw3ICsxNyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIGludCBiYWNraW5nX2ZkID0gLTE7XG4gaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5pbmRleCA5MmEyMWI5N2Y3NDVhLi4wNzIzODQzYTc2MjZiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxuQEAgLTM3LDcgKzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggYzk3M2Q2NzIyNzIwYy4uZWI0YjI0MzNiMDBlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggKzcsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidWZmZC1jb21tb24uaFwiXG4gXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuaW5kZXggZTI0ZDdiYTAwYjQ0MS4uNWEzNTRhNjY0ZDFmNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5AQCAtMTEsNyArMTEsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIC8qXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggNDgyMWEzNTYzMDM2My4uZjg5MTZiMmFiYzJlZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtODg1LDExMSArODg1LDU0IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmV0IFx1MDAzZSAwID8gMCA6IC1lcnJubztcbiB9XG4gXG4taW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4te1xuLVx0aW50IGZkO1xuLVx0c3NpemVfdCBudW1yZWFkO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4tXHRcdGNsb3NlKGZkKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRidWZbbnVtcmVhZF0gPSAnXFwwJztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkluY29ycmVjdCBidWZmZXIgbGVuOiAlenVcXG5cIiwgYnVmbGVuKTtcbi1cbi1cdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XG4tXHRpZiAoZmQgPT0gLTEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIG9wZW4gZmFpbGVkOiAlc1xcblwiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpO1xuLVxuLVx0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuLVx0c2F2ZWRfZXJybm8gPSBlcnJubztcbi1cdGNsb3NlKGZkKTtcbi1cdGVycm5vID0gc2F2ZWRfZXJybm87XG4tXHRpZiAobnVtd3JpdHRlbiBcdTAwM2MgMCkge1xuLVx0XHRpZiAoaWdub3JlX2VpbnZhbCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xcblwiLCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdH1cbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIHdyaXRlKCUuKnMpIGlzIHRydW5jYXRlZCwgZXhwZWN0ZWQgJXp1IGJ5dGVzLCBnb3QgJXpkIGJ5dGVzXFxuXCIsXG4tXHRcdFx0XHRwYXRoLCAoaW50KShidWZsZW4gLSAxKSwgYnVmLCBidWZsZW4gLSAxLCBudW13cml0dGVuKTtcbi19XG4tXG4tdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbi17XG4tXHRfX3dyaXRlX2ZpbGUocGF0aCwgYnVmLCBidWZsZW4sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7XG4tfVxuLVxuLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aClcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwicmVhZF9maWxlKClcIik7XG4tXG4tXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgX193cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0sIGJvb2wgaWdub3JlX2VpbnZhbClcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRzcHJpbnRmKGJ1ZiwgXCIlbHVcIiwgbnVtKTtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICsgMSwgaWdub3JlX2VpbnZhbCk7XG4tfVxuLVxuLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuLXtcbi1cdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7XG4tfVxuLVxuLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4te1xuLVx0cmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIHRydWUpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDtcbiBcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXG4ge1xuLVx0aWYgKHNobW1heClcbi1cdFx0d3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcIiwgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIHNobWFsbCk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHNobW1heCkge1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBzaG1tYXgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZXN0b3JlIHNobW1heDogJXNcXG5cIixcbitcdFx0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuK1x0fVxuK1x0aWYgKHNobWFsbCkge1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBzaG1hbGwpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXG5cIixcbitcdFx0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuK1x0fVxuIH1cbiBcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlYWRfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcIiwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcblwiLFxuK1x0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuIFxuLVx0dmFsID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiKTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCIsXG4rXHRcdFx0XHRcdCAgIGxlbmd0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1tYXggPSB2YWw7XG4gXHR9XG4gXG4tXHR2YWwgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIpO1xuK1x0cmV0ID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCIsXG4rXHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4gXHRpZiAodmFsIFx1MDAzYyBucikge1xuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBucik7XG4rXHRcdHJldCA9IHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIG5yKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htYWxsOiAlc1xcblwiLFxuK1x0XHRcdFx0XHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICs4LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZSAvKiBfU0NfUEFHRVNJWkUgKi9cbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vZmlsZV91dGlscy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgQklUX1VMTChucikgICAgICAgICAgICAgICAgICAgKDFVTEwgXHUwMDNjXHUwMDNjIChucikpXG4gI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KVxuQEAgLTE2NiwxMiArMTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDoyNjoxNC43MDA0MDY3NzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzgyOTYyNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBEZXRlcm1pbmluZyBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGZ1enppbmcuIEZpcnN0LCBJJ20gZXhhbWluaW5nIHRoZSBkaWZmIHRvIHNlZSB3aGF0J3MgYmVlbiB0b3VjaGVkLiBJIHNlZSBjaGFuZ2VzIGluIGBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdGAsIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUgKHN0YW5kYXJkIHN0dWZmKSwgYW5kIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IHRoZSBoZWxwIHRleHQgZm9yIGBDT05GSUdfR1VQX1RFU1RgLiBUaGVyZSdzIGFsc28gYSBzaWduaWZpY2FudCByZXNodWZmbGluZyBvZiBmaWxlcyB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgd2l0aCBhZGRpdGlvbnMgdG8gYHRvb2xzL2xpYi9tbS9gIGFuZCBhIG1hc3MgbWlncmF0aW9uL3JlbmFtaW5nIG9mIHNlbGZ0ZXN0cyB0byB0aGUgdG9vbHMvbW0vIGRpcmVjdG9yeSwgYnV0IHRoZXNlIGFyZSBwcmltYXJpbHkgdGVzdCB1dGlsaXRpZXMgYW5kIGxpYnJhcmllcy5cblxuTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gKmFjdHVhbCoga2VybmVsIGNvZGUgY2hhbmdlcy4gIExvb2tpbmcgY2xvc2VseSBhdCB0aGUgYG1tL0tjb25maWdgIGNoYW5nZSwgaXQncyBzdHJpY3RseSBjb3NtZXRpYzsgaXQncyBqdXN0IG1vZGlmaWVkIHRoZSBoZWxwIHRleHQgdG8gbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBpbmNsdWRlcyBiZW5jaG1hcmtzLCBub3QganVzdCB1bml0IHRlc3RzLiAgVGhpcyBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5LCBhcyBjaGFuZ2luZyB0aGUgS2NvbmZpZyBoZWxwIHRleHQgZG9lcyBub3QgYWx0ZXIgdGhlIHVuZGVybHlpbmcga2VybmVsIGZ1bmN0aW9uYWxpdHkuXG5cbkVzc2VudGlhbGx5LCAqYWxsKiB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gZG9jdW1lbnRhdGlvbiwgbWFpbnRhaW5lcnMsIEtjb25maWcgaGVscCB0ZXh0LCBhbmQgdXNlcnNwYWNlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSB0b29scyBkaXJlY3RvcnkuIE5vIGNvcmUga2VybmVsIGNvZGUgaXMgYWZmZWN0ZWQuXG5cbk5vdywgbGV0J3MgdXNlIHRoZSBwcm92aWRlZCBndWlkZWxpbmVzIHRvIHF1aWNrbHkgZXZhbHVhdGUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aHkgb2YgZnV6emluZy4gQWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSwgYSBcIldvcnRoRnV6emluZz1mYWxzZVwiIHJlc3VsdCBpcyBhcHByb3ByaWF0ZSBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBkb2N1bWVudGF0aW9uIG1vZGlmaWNhdGlvbnMsIEtjb25maWcgY2hhbmdlcyAoc3BlY2lmaWNhbGx5IGhlbHAgdGV4dCwgd2hpY2ggdGhpcyBpcyksIGNoYW5nZXMgaW4gY29tbWVudHMsIG9yIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuIFVzZXItc3BhY2UgdXRpbGl0aWVzIG9yIHRlc3RzIGFyZSBhbHNvIG5vdCB0byBiZSBpbmNsdWRlZC4gVGhpcyBwYXRjaCB0aWNrcyBhbGwgdGhvc2UgYm94ZXMuIEl0IGlzIG1vZGlmeWluZyBkb2N1bWVudGF0aW9uLCBLY29uZmlnJ3MgaGVscCB0ZXh0LCBhbmQgdGVzdCBmaWxlcyBpbiBgdG9vbHMvYCwgc28gZGVmaW5pdGVseSBub3Qgd29ydGggZnV6emluZy5cblxuTXkgY29uY2x1c2lvbiBpczogdGhpcyBwYXRjaCBpcyBub3Qgd29ydGggZnV6emluZy4gSSdsbCBkb3VibGUtY2hlY2sgdGhpcyByZWFzb25pbmcgYnkgaXNzdWluZyB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM3MCwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDoyNjoyMS40ODMzNzIxNjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgRG9jdW1lbnRhdGlvbiwgTUFJTlRBSU5FUlMsIEtjb25maWcgaGVscCB0ZXh0LCBhbmQgdXNlcnNwYWNlIHRvb2xpbmcvc2VsZnRlc3RzIHVuZGVyIHRvb2xzLy4gTm8ga2VybmVsIHJ1bnRpbWUgbG9naWMgaXMgbW9kaWZpZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIERvY3VtZW50YXRpb24sIE1BSU5UQUlORVJTLCBLY29uZmlnIGhlbHAgdGV4dCwgYW5kIHVzZXJzcGFjZSB0b29saW5nL3NlbGZ0ZXN0cyB1bmRlciB0b29scy8uIE5vIGtlcm5lbCBydW50aW1lIGxvZ2ljIGlzIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6MjY6MjEuNDgzMzkzMDY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpb5pj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 04:24:09 +0000 UTC FinishedAt: 2026-08-31 04:26:23 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBEb2N1bWVudGF0aW9uLCBNQUlOVEFJTkVSUywgS2NvbmZpZyBoZWxwIHRleHQsIGFuZCB1c2Vyc3BhY2UgdG9vbGluZy9zZWxmdGVzdHMgdW5kZXIgdG9vbHMvLiBObyBrZXJuZWwgcnVudGltZSBsb2dpYyBpcyBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ZDVhZTBkOTQ2MDlmZmJmYjNjM2I2MjUyMTdmMmJhODZmOGY3NmUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDQ6MjY6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlMy4uZTBhY2VkYmQxZDQ4NiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuQEAgLTIyNiwxNSAmIzQzOzIyNiw2IEBAIHdpbGwgYmUgcGlubmVkIGxvbmd0ZXJtLCBhbmQgd2hvc2UgZGF0YSB3aWxsIGJlIGFjY2Vzc2VkLlxuIFxuIFVuaXQgdGVzdGluZ1xuID09PT09PT09PT09PVxuLVRoaXMgZmlsZTo6XG4tXG4tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbi1cbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XG4tXG4tKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpXG4tKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYilcbi1cbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcbiBcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCBhMzE2N2JjYmU1ODk3Li41NDhiY2YwMDhlNzk5IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTcxNzMsOCAmIzQzOzE3MTczLDkgQEAgVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxuIEY6XHRtbS9ndXAuY1xuIEY6XHRtbS9ndXBfdGVzdC5jXG4gRjpcdG1tL2d1cF90ZXN0LmhcbiYjNDM7RjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4mIzQzO0Y6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuLUY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKVxuIE06XHRBbmRyZXcgTW9ydG9uIFx1MDAzY2FrcG1AbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbkBAIC0xNzI3Nyw2ICYjNDM7MTcyNzgsNyBAQCBGOlx0bW0vbWVtb3J5LXRpZXJzLmNcbiBGOlx0bW0vcGFnZV9pZGxlLmNcbiBGOlx0bW0vcGdhbGxvYy10cmFjay5oXG4gRjpcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcbiYjNDM7RjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggNjA0YzU4MTk5YWNiZi4uMGJkMjk4Yzc3NDQ2MSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWdcbkBAIC0xMjkyLDI0ICYjNDM7MTI5MiwyMyBAQCBjb25maWcgUEVSQ1BVX1NUQVRTXG4gXHQgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuXG4gXG4gY29uZmlnIEdVUF9URVNUXG4tXHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHNcJiMzNDtcbiYjNDM7XHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHMgYW5kIGJlbmNobWFya3NcJiMzNDtcbiBcdGRlcGVuZHMgb24gREVCVUdfRlNcbiBcdGhlbHBcbiBcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbi1cdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4tXHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cbiYjNDM7XHQgIHRvIG1ha2UgaW9jdGwgY2FsbHMgdGhhdCBjYW4gbGF1bmNoIGtlcm5lbC1iYXNlZCB1bml0IHRlc3RzIGFuZFxuJiM0MztcdCAgYmVuY2htYXJrcyBmb3IgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbGllc1xuJiM0MztcdCAgb2YgQVBJIGNhbGxzLlxuIFxuLVx0ICBUaGVzZSB0ZXN0cyBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxuLVx0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgc21va2UgdGVzdHMgb2ZcbiYjNDM7XHQgIFRoZXNlIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mXG4mIzQzO1x0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgdGVzdHMgb2ZcbiBcdCAgdGhlIG5vbi1fZmFzdCB2YXJpYW50cy5cbiBcbi1cdCAgVGhlcmUgaXMgYWxzbyBhIHN1Yi10ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55XG4tXHQgIG9mIHVwIHRvIGVpZ2h0IHBhZ2VzIChzZWxlY3RlZCBieSBjb21tYW5kIGxpbmUgYXJncykgd2l0aGluIHRoZVxuLVx0ICByYW5nZSBvZiB1c2VyLXNwYWNlIGFkZHJlc3Nlcy4gVGhlc2UgcGFnZXMgYXJlIGVpdGhlciBwaW5uZWQgdmlhXG4tXHQgIHBpbl91c2VyX3BhZ2VzKigpLCBvciBwaW5uZWQgdmlhIGdldF91c2VyX3BhZ2VzKigpLCBhcyBzcGVjaWZpZWRcbi1cdCAgYnkgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbiYjNDM7XHQgIFRoZXJlIGlzIGFsc28gYSB0ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55IG9mIHVwXG4mIzQzO1x0ICB0byBlaWdodCBwYWdlcyB3aXRoaW4gdGhlIHJhbmdlIG9mIHVzZXItc3BhY2UgYWRkcmVzc2VzLiBUaGVzZVxuJiM0MztcdCAgcGFnZXMgYXJlIGVpdGhlciBhY3F1aXJlZCB2aWEgcGluX3VzZXJfcGFnZXMqKCkgb3IgZ2V0X3VzZXJfcGFnZXMqKCkuXG4gXG4tXHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4mIzQzO1x0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYW5kIHRvb2xzL21tL2d1cF9iZW5jaC5jLlxuIFxuIGNvbW1lbnQgXCYjMzQ7R1VQX1RFU1QgbmVlZHMgdG8gaGF2ZSBERUJVR19GUyBlbmFibGVkXCYjMzQ7XG4gXHRkZXBlbmRzIG9uICFHVVBfVEVTVCBcdTAwMjZcdTAwMjYgIURFQlVHX0ZTXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YjIyMzdlOTgyM2U5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG5AQCAtMCwwICYjNDM7MSwxMDYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ZpbGVfdXRpbHMuaFwmIzM0O1xuJiM0MztcbiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGVycjtcbiYjNDM7XHRzc2l6ZV90IG51bXJlYWQ7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkID09IC0xKVxuJiM0MztcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XG4mIzQzO1x0bnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4mIzQzO1x0aWYgKG51bXJlYWQgXHUwMDNjIDEpIHtcbiYjNDM7XHRcdGVyciA9IG51bXJlYWQgPyBlcnJubyA6IEVOT0RBVEE7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRyZXR1cm4gLWVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ1ZltudW1yZWFkXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkLCBzYXZlZF9lcnJubztcbiYjNDM7XHRzc2l6ZV90IG51bXdyaXR0ZW47XG4mIzQzO1xuJiM0MztcdGlmIChidWZsZW4gXHUwMDNjIDIpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4mIzQzO1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdGlmIChudW13cml0dGVuIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1zYXZlZF9lcnJubztcbiYjNDM7XG4mIzQzO1x0aWYgKG51bXdyaXR0ZW4gIT0gKHNzaXplX3QpKGJ1ZmxlbiAtIDEpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2YWw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRjaGFyIGJ1ZlsyMV07XG4mIzQzO1x0Y2hhciAqZW5kO1xuJiM0MztcbiYjNDM7XHRpZiAoIW51bSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFJlamVjdCBzaWducyBhbmQgbGVhZGluZyB3aGl0ZXNwYWNlIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IHN0cnRvdWwoKSAqL1xuJiM0MztcdGlmIChidWZbMF0gXHUwMDNjICYjMzk7MCYjMzk7IHx8IGJ1ZlswXSBcdTAwM2UgJiMzOTs5JiMzOTspXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0ZXJybm8gPSAwO1xuJiM0MztcdHZhbCA9IHN0cnRvdWwoYnVmLCBcdTAwMjZlbmQsIDEwKTtcbiYjNDM7XHRpZiAoZXJybm8pXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IGFsbG93IGEgbmV3bGluZSBhZnRlciB0aGUgbnVtYmVyICovXG4mIzQzO1x0aWYgKCplbmQgPT0gJiMzOTtcXG4mIzM5OylcbiYjNDM7XHRcdGVuZCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdGlmICgqZW5kICE9ICYjMzk7XFwwJiMzOTspXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0Km51bSA9IHZhbDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzIxXTtcbiYjNDM7XG4mIzQzO1x0c3ByaW50ZihidWYsIFwmIzM0OyVsdVwmIzM0OywgbnVtKTtcbiYjNDM7XHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IC1FSU5WQUwgPyAwIDogcmV0O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaCBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MGRhYTgyYzJiMmI0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5AQCAtMCwwICYjNDM7MSwxMyBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cbiYjNDM7I2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRkZWYuaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuJiM0MztpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKTtcbiYjNDM7aW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4mIzQzO2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbnNpbWlsYXJpdHkgaW5kZXggODclXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbmluZGV4IGQ3OTE3ZGNlM2FiYWMuLmFiZDlmNzE4MmY4OGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuQEAgLTgsMTIgJiM0Mzs4LDE4IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZmlsZV91dGlscy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgVEhQX1NZU0ZTIFwmIzM0Oy9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL1wmIzM0O1xuICNkZWZpbmUgTUFYX1NFVFRJTkdTX0RFUFRIIDRcbiYjNDM7XG4mIzQzOyNpZm5kZWYgQVJSQVlfU0laRVxuJiM0MzsjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTtcbiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4O1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNhdmVkX3NldHRpbmdzO1xuQEAgLTQ4LDYgJiM0Mzs1NCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNobWVtX2VuYWJsZWRfc3RyaW5nc1tdID0ge1xuIFx0TlVMTFxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRwcmludGYoXCYjMzQ7IyAlczogJXMgKCVkKVxcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCksIC1yZXQpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuQEAgLTYxLDggJiM0Mzs3Miw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuIFxuLVx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpIHtcbi1cdFx0cGVycm9yKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG5AQCAtMTAzLDEyICYjNDM7MTE1LDE3IEBAIHZvaWQgdGhwX3dyaXRlX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWwpXG4gXHRcdHByaW50ZihcJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpO1xuJiM0MztcdHJldCA9IHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSAmIzQzOyAxKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiB9XG4gXG4gdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnVtO1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBUSFBfU1lTRlMgXCYjMzQ7JXNcJiMzNDssIG5hbWUpO1xuQEAgLTExNiw3ICYjNDM7MTMzLDEzIEBAIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRcdHByaW50ZihcJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm51bSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBudW07XG4gfVxuIFxuIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbkBAIC0xMjksNyAmIzQzOzE1MiwxMSBAQCB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG4gXHRcdHByaW50ZihcJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfbnVtKHBhdGgsIG51bSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG5AQCAtMTU3LDggJiM0MzsxODQsMTUgQEAgdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdFx0Lm1heF9wdGVzX3NoYXJlZCA9IHRocF9yZWFkX251bShcJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwmIzM0OyksXG4gXHRcdC5wYWdlc190b19zY2FuID0gdGhwX3JlYWRfbnVtKFwmIzM0O2todWdlcGFnZWQvcGFnZXNfdG9fc2NhblwmIzM0OyksXG4gXHR9O1xuLVx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXG4tXHRcdHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoKTtcbiYjNDM7XHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xuJiM0MztcdFx0aW50IHJldCA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4mIzQzO1x0XHRcdFx0ICAgXHUwMDI2c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xuJiM0MztcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoISgoMSBcdTAwM2NcdTAwM2MgaSkgXHUwMDI2IG9yZGVycykpIHtcbkBAIC0yMDgsOCAmIzQzOzI0MiwxNSBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdHRocF93cml0ZV9udW0oXCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWRcJiMzNDssIGtodWdlcGFnZWQtXHUwMDNlbWF4X3B0ZXNfc2hhcmVkKTtcbiBcdHRocF93cml0ZV9udW0oXCYjMzQ7a2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXCYjMzQ7LCBraHVnZXBhZ2VkLVx1MDAzZXBhZ2VzX3RvX3NjYW4pO1xuIFxuLVx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXG4tXHRcdHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCBzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiKTtcbiYjNDM7XHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xuJiM0MztcdFx0aW50IHJldCA9IHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuJiM0MztcdFx0XHRcdCAgICBzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7XG4mIzQzO1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSlcbkBAIC0zMDcsOCAmIzQzOzM0OCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3RocF9zdXBwb3J0ZWRfb3JkZXJzKGJvb2wgaXNfc2htZW0pXG4gXHRcdH1cbiBcbiBcdFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdG9yZGVycyB8PSAxVUwgXHUwMDNjXHUwMDNjIGk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGlmIChyZXQgIT0gLUVOT0VOVCkge1xuJiM0MztcdFx0XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG9yZGVycyB8PSAxVUwgXHUwMDNjXHUwMDNjIGk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gb3JkZXJzO1xuQEAgLTM4Miw4ICYjNDM7NDMwLDcgQEAgaW50IGRldGVjdF9odWdldGxiX3BhZ2Vfc2l6ZXModW5zaWduZWQgbG9uZyBzaXplc1tdLCBpbnQgbWF4KVxuIFx0XHRpZiAoc3NjYW5mKGVudHJ5LVx1MDAzZWRfbmFtZSwgXCYjMzQ7aHVnZXBhZ2VzLSV6dWtCXCYjMzQ7LCBcdTAwMjZrYikgIT0gMSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0c2l6ZXNbY291bnQmIzQzOyYjNDM7XSA9IGtiICogMTAyNDtcbi1cdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7W0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBrYik7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7IyBbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXG5cJiMzNDssIGtiKTtcbiBcdH1cbiBcdGNsb3NlZGlyKGRpcik7XG4gXHRyZXR1cm4gY291bnQ7XG5AQCAtNDI1LDI4ICYjNDM7NDcyLDQ5IEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfc3lzZnNfcGF0aChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnI7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4gXG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4mIzQzO1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnI7XG4gfVxuIFxuIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4gXG4tXHR3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XG4mIzQzO1x0cmV0ID0gd3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcJiMzNDtmcmVlX2h1Z2VwYWdlc1wmIzM0Oyk7XG4gXG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4mIzQzO1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnI7XG4gfVxuIFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXG5AQCAtNTAyLDcgJiM0Mzs1NzAsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmIChucl9lbmFibGVkIFx1MDAzZSBtYXgpIHtcbi1cdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcblwmIzM0OywgbnJfZW5hYmxlZCwgbWF4KTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjIGRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgbnJfZW5hYmxlZCwgbWF4KTtcbiBcdFx0bnJfZW5hYmxlZCA9IG1heDtcbiBcdH1cbiBcbkBAIC01NzQsOCAmIzQzOzY0MywxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKVxuIHtcbiYjNDM7XHQodm9pZClzaWc7XG4mIzQzO1xuIFx0LyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqL1xuLVx0ZXhpdChLU0ZUX0ZBSUwpO1xuJiM0MztcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiB9XG4gXG4gdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li4xNTRkNzQwYmUwMmU4IDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuQEAgLTMsMyAmIzQzOzMsNCBAQCBzbGFiaW5mb1xuIHBhZ2UtdHlwZXNcbiBwYWdlX293bmVyX3NvcnRcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztndXBfYmVuY2hcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXG5pbmRleCA4NTgxODZhNmVlZmRiLi5mMjBhMzJkOGNjMjJlIDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL01ha2VmaWxlXG5AQCAtMywxMyAmIzQzOzMsMTUgQEBcbiAjXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcbiBcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXJcbiYjNDM7QlVJTERfVEFSR0VUUyAmIzQzOz0gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXG4gXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcbiBMSUJTID0gJChMSUJfRElSKS9saWJhcGkuYVxuJiM0MztHVVBfQkVOQ0hfT0JKUyA9IGd1cF9iZW5jaC5jIC4uL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIC4uL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbi1DRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1wdGhyZWFkXG4mIzQzO0NGTEFHUyAmIzQzOz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLUkuLi8uLiAtcHRocmVhZFxuIExERkxBR1MgJiM0Mzs9ICQoTElCUykgLXB0aHJlYWRcbiBcbiBhbGw6ICQoQlVJTERfVEFSR0VUUylcbkBAIC0yMiw4ICYjNDM7MjQsMTEgQEAgJChMSUJTKTpcbiAlOiAlLmNcbiBcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXHUwMDNjICQoTERGTEFHUylcbiBcbiYjNDM7Z3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpXG4mIzQzO1x0JChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUylcbiYjNDM7XG4gY2xlYW46XG4tXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuJiM0MztcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbnNpbWlsYXJpdHkgaW5kZXggNTAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG5yZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbmluZGV4IDNmODQxYTk2Zjg3MDYuLmU2YTgwYmE1MTk1YTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9ndXBfYmVuY2guY1xuQEAgLTEwLDExICYjNDM7MTAsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4tI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuIFxuQEAgLTM4LDEyICYjNDM7MzcsNiBAQCBzdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcbiBcdFx0cmV0dXJuIFwmIzM0O1BJTl9GQVNUX0JFTkNITUFSS1wmIzM0OztcbiBcdGNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzpcbiBcdFx0cmV0dXJuIFwmIzM0O1BJTl9MT05HVEVSTV9CRU5DSE1BUktcJiMzNDs7XG4tXHRjYXNlIEdVUF9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7R1VQX0JBU0lDX1RFU1RcJiMzNDs7XG4tXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7UElOX0JBU0lDX1RFU1RcJiMzNDs7XG4tXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxuLVx0XHRyZXR1cm4gXCYjMzQ7RFVNUF9VU0VSX1BBR0VTX1RFU1RcJiMzNDs7XG4gXHR9XG4gXHRyZXR1cm4gXCYjMzQ7VW5rbm93biBjb21tYW5kXCYjMzQ7O1xuIH1cbkBAIC01MywzOSAmIzQzOzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcbiBcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XG4gXHRpbnQgaSwgc3RhdHVzO1xuIFxuLVx0LyogT25seSByZXBvcnQgdGltaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAqX0JFTkNITUFSSyBjb21tYW5kczogKi9cbi1cdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XG4tXHQgICAgIChjbWQgPT0gUElOX0xPTkdURVJNX0JFTkNITUFSSykpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRcdGJyZWFrO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlcGVhdHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRndXAuc2l6ZSA9IHNpemU7XG4mIzQzO1x0XHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXHUwMDI2Z3VwKTtcbiYjNDM7XHRcdGlmIChzdGF0dXMpIHtcbiYjNDM7XHRcdFx0aW50IGVyciA9IGVycm5vO1xuIFxuIFx0XHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7JXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzXCYjMzQ7LFxuLVx0XHRcdFx0ICAgICAgIGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLFxuLVx0XHRcdFx0ICAgICAgIGd1cC5wdXRfZGVsdGFfdXNlYyk7XG4tXHRcdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4tXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDssIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcJiMzNDssIGd1cC5zaXplKTtcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7JXMgaW9jdGwgZmFpbGVkOiAlc1xcblwmIzM0OywgY21kX3RvX3N0cihjbWQpLFxuJiM0MztcdFx0XHRcdHN0cmVycm9yKGVycikpO1xuIFx0XHRcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbiYjNDM7XHRcdFx0cmV0dXJuIGRhdGE7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGd1cC5zaXplID0gc2l6ZTtcbi1cdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0Z290byByZXR1cm5fO1xuIFxuIFx0XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslczogZG9uZVxcblwmIzM0OywgY21kX3RvX3N0cihjbWQpKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcJiMzNDssXG4mIzQzO1x0XHRcdGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLFxuJiM0MztcdFx0XHRndXAucHV0X2RlbHRhX3VzZWMpO1xuIFx0XHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtUcnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxuXCYjMzQ7LCBndXAuc2l6ZSk7XG4mIzQzO1x0XHRcdHByaW50ZihcJiMzNDssIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcJiMzNDssIGd1cC5zaXplKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDtcXG5cJiMzNDspO1xuIFx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4gXHR9XG4gXG4tcmV0dXJuXzpcbi1cdGtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgXCYjMzQ7aW9jdGwgc3RhdHVzICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuQEAgLTkzLDM4ICYjNDM7NzYsMjEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbiBcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiBcdGludCBmaWxlZCwgaSwgb3B0LCBucl9wYWdlcyA9IDEsIHRocCA9IC0xLCB3cml0ZSA9IDEsIG50aHJlYWRzID0gMSwgcmV0O1xuLVx0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XG4mIzQzO1x0aW50IGZsYWdzID0gTUFQX1BSSVZBVEUsIHN0YXJ0ZWRfdGhyZWFkcyA9IDAsIGV4aXRfc3RhdHVzID0gMTtcbiBcdGNoYXIgKmZpbGUgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDs7XG4tXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcbiYjNDM7XHRib29sIGh1Z2V0bGIgPSBmYWxzZSwgdGhyZWFkX2Vycm9yID0gZmFsc2U7XG4mIzQzO1x0dm9pZCAqdGhyZWFkX3Jlc3VsdDtcbiBcdHB0aHJlYWRfdCAqdGlkO1xuIFx0Y2hhciAqcDtcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O206cjpuOkY6ZjphYmNqOnRUTFV1d1dTSHB6XCYjMzQ7KSkgIT0gLTEpIHtcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDttOnI6bjpGOmY6YWo6dFRMdXdXU0hcJiMzNDspKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICYjMzk7YSYjMzk7OlxuIFx0XHRcdGNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSztcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O2ImIzM5Ozpcbi1cdFx0XHRjbWQgPSBQSU5fQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O0wmIzM5OzpcbiBcdFx0XHRjbWQgPSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7YyYjMzk7OlxuLVx0XHRcdGNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnlcbi1cdFx0XHQgKiB1c2VyJiMzOTtzIG5vbi1vcHRpb24gYXJndW1lbnRzLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcJiMzNDtkb1xuLVx0XHRcdCAqIG5vdGhpbmdcJiMzNDsuXG4tXHRcdFx0ICovXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAmIzM5O3AmIzM5Ozpcbi1cdFx0XHQvKiB3b3JrcyBvbmx5IHdpdGggRFVNUF9VU0VSX1BBR0VTX1RFU1QgKi9cbi1cdFx0XHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O0YmIzM5OzpcbiBcdFx0XHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xuIFx0XHRcdGd1cC5ndXBfZmxhZ3MgPSBzdHJ0b2wob3B0YXJnLCAwLCAwKTtcbkBAIC0xNDEsNyAmIzQzOzEwNyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Y2FzZSAmIzM5O24mIzM5OzpcbiBcdFx0XHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcbiBcdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdFx0XHRucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpO1xuJiM0MztcdFx0XHRcdG5yX3BhZ2VzID0gc2l6ZSAvIGdldHBhZ2VzaXplKCk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTt0JiMzOTs6XG4gXHRcdFx0dGhwID0gMTtcbkBAIC0xNDksOSAmIzQzOzExNSw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Y2FzZSAmIzM5O1QmIzM5OzpcbiBcdFx0XHR0aHAgPSAwO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7VSYjMzk7OlxuLVx0XHRcdGNtZCA9IEdVUF9CQVNJQ19URVNUO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7dSYjMzk7OlxuIFx0XHRcdGNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSztcbiBcdFx0XHRicmVhaztcbkBAIC0xNzMsNTIgJiM0MzsxMzYsNDEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdGh1Z2V0bGIgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtXcm9uZyBhcmd1bWVudFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtXcm9uZyBhcmd1bWVudFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGV4aXQoMSk7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChvcHRpbmQgXHUwMDNjIGFyZ2MpIHtcbi1cdFx0aW50IGV4dHJhX2FyZ19jb3VudCA9IDA7XG4tXHRcdC8qXG4tXHRcdCAqIEZvciBleGFtcGxlOlxuLVx0XHQgKlxuLVx0XHQgKiAgIC4vZ3VwX3Rlc3QgLWMgMCAxIDB4MTAwMVxuLVx0XHQgKlxuLVx0XHQgKiAuLi50byBkdW1wIHBhZ2VzIDAsIDEsIGFuZCA0MDk3XG4tXHRcdCAqL1xuLVxuLVx0XHR3aGlsZSAoKG9wdGluZCBcdTAwM2MgYXJnYykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgICAoZXh0cmFfYXJnX2NvdW50IFx1MDAzYyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIERvIHRoZSAxLWJhc2VkIGluZGV4aW5nIGhlcmUsIHNvIHRoYXQgdGhlIHVzZXIgY2FuXG4tXHRcdFx0ICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0bG9uZyBwYWdlX2luZGV4ID0gc3RydG9sKGFyZ3Zbb3B0aW5kXSwgMCwgMCkgJiM0MzsgMTtcbi1cbi1cdFx0XHRndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7XG4tXHRcdFx0ZXh0cmFfYXJnX2NvdW50JiM0MzsmIzQzOztcbi1cdFx0XHRvcHRpbmQmIzQzOyYjNDM7O1xuLVx0XHR9XG4mIzQzO1x0aWYgKG9wdGluZCAhPSBhcmdjKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7VW5leHBlY3RlZCBhcmd1bWVudCAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIGFyZ3Zbb3B0aW5kXSk7XG4mIzQzO1x0XHRleGl0KDEpO1xuIFx0fVxuIFxuLVx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRpZiAoZ2V0dWlkKCkpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGh1Z2V0bGIpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuIFxuLVx0XHRpZiAoIWhwX3NpemUpXG4tXHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7SHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWhwX3NpemUpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0NvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0c2l6ZSA9IChzaXplICYjNDM7IGhwX3NpemUgLSAxKSBcdTAwMjYgfihocF9zaXplIC0gMSk7XG4tXHRcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSlcbi1cdFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdGtzZnRfc2V0X3BsYW4obnRocmVhZHMpO1xuLVxuIFx0ZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTtcbi1cdGlmIChmaWxlZCBcdTAwM2MgMClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRpZiAoZmlsZWQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4gXG4gXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlcztcbiBcdGlmICh3cml0ZSlcbkBAIC0yMjcsMjYgJiM0MzsxNzksMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuIFx0aWYgKGd1cF9mZCA9PSAtMSkge1xuIFx0XHRzd2l0Y2ggKGVycm5vKSB7XG4tXHRcdGNhc2UgRUFDQ0VTOlxuLVx0XHRcdGlmIChnZXR1aWQoKSlcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVOT0VOVDpcbiBcdFx0XHRpZiAob3BlbmRpcihcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Z1wmIzM0OykgPT0gTlVMTClcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cJiMzNDspO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2NoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDttb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2NoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXG5cJiMzNDspO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSxcbiYjNDM7XHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbi1cdFx0a3NmdF9leGl0X3Bhc3MoKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Nsb3NlX2ZpbGVkO1xuIFx0fVxuIFxuIFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcbi1cdGlmIChwID09IE1BUF9GQUlMRUQpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7bW1hcDogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRnb3RvIGVycl9jbG9zZV9ndXBfZmQ7XG4mIzQzO1x0fVxuIFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylwO1xuIFxuIFx0aWYgKHRocCA9PSAxKVxuQEAgLTI1NSwyMSAmIzQzOzIwNSw0NCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbiBcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpXG4mIzQzO1x0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IGdldHBhZ2VzaXplKCkpXG4gXHRcdHBbMF0gPSAwO1xuIFxuIFx0dGlkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocmVhZHMpO1xuLVx0YXNzZXJ0KHRpZCk7XG4mIzQzO1x0aWYgKCF0aWQpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdG50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0Z290byBlcnJfdW5tYXA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50aHJlYWRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihyZXQpKTtcbiYjNDM7XHRcdFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzdGFydGVkX3RocmVhZHMmIzQzOyYjNDM7O1xuIFx0fVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXJ0ZWRfdGhyZWFkczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIFx1MDAyNnRocmVhZF9yZXN1bHQpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7cHRocmVhZF9qb2luIGZhaWxlZDogJXNcXG5cJiMzNDssIHN0cmVycm9yKHJldCkpO1xuJiM0MztcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuJiM0MztcdFx0fSBlbHNlIGlmICh0aHJlYWRfcmVzdWx0KVxuJiM0MztcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuIFx0fVxuIFxuIFx0ZnJlZSh0aWQpO1xuLVxuLVx0a3NmdF9leGl0X3Bhc3MoKTtcbiYjNDM7XHRpZiAodGhyZWFkX2Vycm9yKVxuJiM0MztcdFx0Z290byBlcnJfdW5tYXA7XG4mIzQzO1x0ZXhpdF9zdGF0dXMgPSAwO1xuJiM0MztcbiYjNDM7ZXJyX3VubWFwOlxuJiM0MztcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcbiYjNDM7ZXJyX2Nsb3NlX2d1cF9mZDpcbiYjNDM7XHRjbG9zZShndXBfZmQpO1xuJiM0MztlcnJfY2xvc2VfZmlsZWQ6XG4mIzQzO1x0Y2xvc2UoZmlsZWQpO1xuJiM0MztcdHJldHVybiBleGl0X3N0YXR1cztcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggMmQ1MzY2MTk2ZTMwOS4uOWMwMzYyNGZkMjkzNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTM3LDcgJiM0MzszNyw4IEBAIGVuZGlmXG4gIyBMRExJQlMuXG4gTUFLRUZMQUdTICYjNDM7PSAtLW5vLWJ1aWx0aW4tcnVsZXNcbiBcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxuJiM0MztDRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAtSSAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYlxuJiM0MztDRkxBR1MgJiM0Mzs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4gQ0ZMQUdTICYjNDM7PSAtV3VucmVhY2hhYmxlLWNvZGVcbiBMRExJQlMgPSAtbHJ0IC1scHRocmVhZCAtbG1cbiBcbkBAIC01Nyw4ICYjNDM7NTgsOCBAQCBlbmRpZlxuIFxuIFRFU1RfR0VOX0ZJTEVTID0gY293XG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGNvbXBhY3Rpb25fdGVzdFxuJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGd1cF9sb25ndGVybVxuLVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfdGVzdFxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBobW0tdGVzdHNcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1tYWR2aXNlXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbW1hcFxuQEAgLTE4Nyw4ICYjNDM7MTg4LDEwIEBAIFRFU1RfRklMRVMgJiM0Mzs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbiBcbi0kKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbiYjNDM7JChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4mIzQzO1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiYjNDM7JChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4mIzQzO1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmNcbiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jXG5AQCAtMjE3LDcgJiM0MzsyMjAsNyBAQCAkKEJJTkFSSUVTXzMyKTogQ0ZMQUdTICYjNDM7PSAtbTMyIC1teHNhdmVcbiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwgLWxtXG4gJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmNcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuLVx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChub3RkaXIgJF4pICQoTERMSUJTKSAtbyAkQFxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS0zMiwkKHQpKSkpXG4gZW5kaWZcbiBcbkBAIC0yMjYsNyAmIzQzOzIyOSw3IEBAICQoQklOQVJJRVNfNjQpOiBDRkxBR1MgJiM0Mzs9IC1tNjQgLW14c2F2ZVxuICQoQklOQVJJRVNfNjQpOiBMRExJQlMgJiM0Mzs9IC1scnQgLWxkbFxuICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jXG4gXHQkKGNhbGwgbXNnLENDLCwkQClcbi1cdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcbiYjNDM7XHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtNjQsJCh0KSkpKVxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuQEAgLTE1LDkgJiM0MzsxNSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgTUFQX1NJWkVfTUJcdDEwMFxuICNkZWZpbmUgTUFQX1NJWkVcdChNQVBfU0laRV9NQiAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbmluZGV4IDhhYTUyNDlkOWJlZjYuLjMyNjRhODI4NTc1YmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbkBAIC0yOSw3ICYjNDM7MjksNiBAQFxuICNpbmNsdWRlIFwmIzM0Oy4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA0NWI4NGY3YjM2NGUwLi4yODlhZWQyZWJhYzAyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMjUsNyAmIzQzOzI1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHVpbnQ2NF90IHBhZ2Vfc2l6ZTtcbiB1aW50NjRfdCBwbWRfcGFnZXNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCA1YzhlYzNjYTc1ZDdkLi5hZjVjZDliMzAzMzk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbkBAIC0yMSw3ICYjNDM7MjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy91aW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNpbmNsdWRlIFwmIzM0Oy4uL3BpZGZkL3BpZGZkLmhcJiMzNDtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTNjMmZmYTNhMDU3ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcbkBAIC0wLDAgJiM0MzsxLDI3NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vZ3VwX3Rlc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNQiAoMVVMIFx1MDAzY1x1MDAzYyAyMClcbiYjNDM7XG4mIzQzOy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xuJiM0MzsjZGVmaW5lIEZPTExfV1JJVEVcdDB4MDFcdC8qIGNoZWNrIHB0ZSBpcyB3cml0YWJsZSAqL1xuJiM0MztcbiYjNDM7LyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovXG4mIzQzO3N0YXRpYyBjb25zdCBpbnQgbnJfcGFnZXNfbGlzdFtdID0geyAxLCA1MTIsIDEyMywgLTEgfTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgR1VQX1RFU1RfRklMRSBcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdFwmIzM0O1xuJiM0MzsjZGVmaW5lIE5SX0hVR0VfUEFHRVMgMTI4XG4mIzQzO1xuJiM0MztIVUdFVExCX1NFVFVQX0RFRkFVTFRfUEFHRVMoTlJfSFVHRV9QQUdFUylcbiYjNDM7XG4mIzQzO0ZJWFRVUkUoZ3VwX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZ3VwX2ZkO1xuJiM0MztcdGNoYXIgKmFkZHI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB0aHA7XG4mIzQzO1x0Ym9vbCBodWdldGxiO1xuJiM0MztcdGJvb2wgd3JpdGU7XG4mIzQzO1x0Ym9vbCBzaGFyZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfdGhwKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IHRydWUsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSB0cnVlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX2h1Z2V0bGIpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSB0cnVlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSlcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IHRydWUsXG4mIzQzO1x0LndyaXRlID0gdHJ1ZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX2h1Z2V0bGIpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSB0cnVlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEU7XG4mIzQzO1x0aW50IHplcm9fZmQ7XG4mIzQzO1x0Y2hhciAqcDtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VzaXplID0gMTI4ICogTUI7XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWhwX3NpemUpXG4mIzQzO1x0XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtIdWdlVExCIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGlmIChodWdldGxiX2ZyZWVfZGVmYXVsdF9wYWdlcygpIFx1MDAzYyBOUl9IVUdFX1BBR0VTKVxuJiM0MztcdFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7Tm90IGVub3VnaCBodWdlIHBhZ2VzXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRzZWxmLVx1MDAzZXNpemUgPSBOUl9IVUdFX1BBR0VTICogaHBfc2l6ZTtcbiYjNDM7XHRcdG1tYXBfZmxhZ3MgfD0gKE1BUF9IVUdFVExCIHwgTUFQX0FOT05ZTU9VUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmFyaWFudC1cdTAwM2VzaGFyZWQpXG4mIzQzO1x0XHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xuJiM0MztcbiYjNDM7XHQvKiB6ZXJvX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbiYjNDM7XHR6ZXJvX2ZkID0gb3BlbihcJiMzNDsvZGV2L3plcm9cJiMzNDssIE9fUkRXUik7XG4mIzQzO1x0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xuJiM0MztcbiYjNDM7XHQvKiBndXBfZmQgaGFzIHRvIGJlIFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xuJiM0MztcdHNlbGYtXHUwMDNlZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuJiM0MztcdEFTU0VSVF9HRShzZWxmLVx1MDAzZWd1cF9mZCwgMCk7XG4mIzQzO1xuJiM0MztcdHNlbGYtXHUwMDNlYWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cdTAwM2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0XHQgIG1tYXBfZmxhZ3MsIHplcm9fZmQsIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfTkUoc2VsZi1cdTAwM2VhZGRyLCBNQVBfRkFJTEVEKSB7XG4mIzQzO1x0XHRpbnQgZXJyID0gZXJybm87XG4mIzQzO1xuJiM0MztcdFx0Y2xvc2UoemVyb19mZCk7XG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bW1hcCBmYWlsZWQ6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnIpKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UoemVyb19mZCk7XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZXRocClcbiYjNDM7XHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuJiM0MztcdGVsc2UgaWYgKCF2YXJpYW50LVx1MDAzZWh1Z2V0bGIpXG4mIzQzO1x0XHRtYWR2aXNlKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHAgPSBzZWxmLVx1MDAzZWFkZHI7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkclxuJiM0MztcdFx0XHQmIzQzOyBzZWxmLVx1MDAzZXNpemU7IHAgJiM0Mzs9IHBzaXplKCkpXG4mIzQzO1x0XHRwWzBdID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdG11bm1hcChzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0Y2xvc2Uoc2VsZi1cdTAwM2VndXBfZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fZ3VwX2NtZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4mIzQzO1x0XHRcdCBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLFxuJiM0MztcdFx0XHQgY29uc3QgRklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KSAqdmFyaWFudCxcbiYjNDM7XHRcdFx0IHVuc2lnbmVkIGxvbmcgY29tbWFuZClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0ge1xuJiM0MztcdFx0XHQuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcixcbiYjNDM7XHRcdFx0LnNpemUgPSBzZWxmLVx1MDAzZXNpemUsXG4mIzQzO1x0XHRcdC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXHUwMDNjIDAgP1xuJiM0MztcdFx0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLFxuJiM0MztcdFx0XHQuZ3VwX2ZsYWdzID0gdmFyaWFudC1cdTAwM2V3cml0ZSA/IEZPTExfV1JJVEUgOiAwLFxuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIGNvbW1hbmQsIFx1MDAyNmd1cCksIDApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0JBU0lDX1RFU1QpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0ZBU1RfQkVOQ0hNQVJLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19mYXN0KVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fRkFTVF9CRU5DSE1BUkspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdGNoYXIgKmZpbGUgPSBcJiMzNDsvZGV2L3plcm9cJiMzNDs7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihmaWxlLCBPX1JEV1IpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0fVxuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4mIzQzO1x0aWYgKGZkID09IC0xKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuJiM0MztcdFx0aWYgKGVycm5vID09IEVBQ0NFUylcbiYjNDM7XHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XG4mIzQzO1x0XHRcdERJUiAqZGVidWdmcyA9IG9wZW5kaXIoXCYjMzQ7L3N5cy9rZXJuZWwvZGVidWdcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFkZWJ1Z2ZzKSB7XG4mIzQzO1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7TW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0Y2xvc2VkaXIoZGVidWdmcyk7XG4mIzQzO1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Q2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0ZXN0X2hhcm5lc3NfcnVuKGFyZ2MsIGFyZ3YpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuaW5kZXggNTEwZGU5M2JlNjgxNC4uYzlkOGI0NDkxMjYzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTEwLDkgJiM0MzsxMCw2IEBAXG4gICogYnVncy5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuLVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuQEAgLTMzLDYgJiM0MzszMCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL2V2ZW50ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbiYjMzk7dCBleHBvcnRlZFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbmluZGV4IDU1NWI0YjNkMTQzMDcuLjU3Y2Y3OTBjYTQ3OGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuQEAgLTE4LDcgJiM0MzsxOCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gI2RlZmluZSBQUk9URUNUSU9OIChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG5pbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuQEAgLTI2LDcgJiM0MzsyNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBERUZBVUxUX0xFTkdUSF9NQiAxMFVMXG4gI2RlZmluZSBNQl9UT19CWVRFUyh4KSAoeCAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXG5pbmRleCAzZmY3ZjA2MmI3ZWI0Li5mNDUxNGRhNDllMWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG5pbmRleCBiYzIwMmU0ZWQyYmRhLi4yMDg2NGU3ZDRlMGM3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xuQEAgLTIxLDkgJiM0MzsyMSw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0ZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWZuZGVmIE1BRFZfU09GVF9PRkZMSU5FXG4gI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuaW5kZXggZmI0NjAwNTcwZTEzMS4uOTQ5NTk3NGVjY2JlYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcbkBAIC0yMCw3ICYjNDM7MjAsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWZuZGVmIFNUQVRYX0RJT0FMSUdOXG4gI2RlZmluZSBTVEFUWF9ESU9BTElHTlx0XHQweDAwMDAyMDAwVVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbmluZGV4IDJkYzE1ODA1NGY2NjYuLjU2YzVhODUzM2U5ZDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbkBAIC0xMCw3ICYjNDM7MTAsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbkBAIC0yNSw3ICYjNDM7MjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCAxZDJkNmJkNzJmZDJhLi5hZGExMWQzMGQzODg0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yMiw3ICYjNDM7MjIsNiBAQFxuICNpbmNsdWRlIFwmIzM0O2xpbnV4L21hZ2ljLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTEyMiw2ICYjNDM7MTIxLDcgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcbiBcdGNoYXIgYnVmWzEgXHUwMDNjXHUwMDNjIDEwXTtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4gXHRjaGFyICpzdHIsICplbmQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGZpbmZvLmRpciA9IGRpcjtcbiBcdGlmIChzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KSlcbkBAIC0xNDIsOCAmIzQzOzE0Miw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3JlYWRfZmlsZSh1ZXZlbnQpXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkX2ZpbGUoJXMpOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwmIzM0O0RFVlRZUEU9ZGlza1wmIzM0OykpIHtcbiBcdFx0LyogRm91bmQgaXQgKi9cbiBcdFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG5AQCAtMzI0LDcgJiM0MzszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCByZXQ7XG4gXHR2b2lkICpwO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIFxuQEAgLTM2OCw3ICYjNDM7MzY5LDExIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttbWFwKClcJiMzNDspO1xuIFxuIFx0LyogRHJvcCBwYWdlIGNhY2hlICovXG4tXHR3cml0ZV9maWxlKFwmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wmIzM0OywgXCYjMzQ7M1wmIzM0OywgMik7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShcJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcJiMzNDssIFwmIzM0OzNcJiMzNDssIDIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XG4gXHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtMTUsNyAmIzQzOzE1LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL2tzbS9cJiMzNDtcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNSw3ICYjNDM7NSw2IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuQEAgLTE2LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggZWFkYzcxNTljYTViOS4uMGM1ZGU2ZWMwNmM4MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjQsNyAmIzQzOzI0LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTExcdFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcdFxcXG4gXHRcdFx0XHRcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuaW5kZXggODJjNmU5NmVhNmViMy4uZjllYzE0MDhhNmUzMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5AQCAtNDUsOCAmIzQzOzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7cGtleS1oZWxwZXJzLmhcJiMzNDtcbiBcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0xMzAsMzAgJiM0MzsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwmIzM0Oy1IIC1tICRodWdldGxiX21iXCYjMzQ7OyBkb1xuLSAgICAgICAgIyAtdTogZ3VwLWZhc3QsIC1VOiBndXAtYmFzaWMsIC1hOiBwaW4tZmFzdCwgLWI6IHBpbi1iYXNpYywgLUw6IHBpbi1sb25ndGVybVxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXG4tICAgICAgICAgICAgZm9yIHdyaXRlIGluIC13IC1XOyBkb1xuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFwmIzM0OyBcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsXG4tICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaXQmIzM5O3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXG4tICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCBwYXJ0aWFsIGd1cCB3aGVuIGhpdCBhIGh1Z2UgaW4gd2hhdGV2ZXIgZm9ybVxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcJiMzNDstbiAxXCYjMzQ7IFwmIzM0Oy1uIDUxMlwmIzM0OyBcJiMzNDstbiAxMjNcJiMzNDsgXCYjMzQ7LW4gLTFcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCYjMzQ7YXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NFwmIzM0O1xuIGlmIFsgLXogXCYjMzQ7JEFSQ0hcJiMzNDsgXTsgdGhlblxuQEAgLTI3NSwxOCAmIzQzOzI1MSw3IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCYjMzQ7bW1hcFwmIzM0OyBydW5fdGVzdCAuL21hcF9maXhlZF9ub3JlcGxhY2VcbiBcbi1pZiAkUlVOX0FMTDsgdGhlblxuLSAgICBydW5fZ3VwX21hdHJpeFxuLWVsc2Vcbi0gICAgIyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXG4tICAgIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXG4tICAgICMgcGluX3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIDFcbi0gICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXG4mIzQzO0NBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwXG4gQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfbG9uZ3Rlcm1cbiBcbiBDQVRFR09SWT1cJiMzNDt1c2VyZmF1bHRmZFwmIzM0OyBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICYjNDM7OSw2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXBcJiMzNDtcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCA4NmE2MDM2OTI4MjYxLi4wZTA4M2FiNzFhZjYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgJiM0MzsyMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gdWludDY0X3QgcGFnZXNpemU7XG4gdW5zaWduZWQgaW50IHBhZ2VzaGlmdDtcbkBAIC0xNDYsNyAmIzQzOzE0NSwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0aWYgKHJldCBcdTAwM2U9IElOUFVUX01BWClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXG4tXHR3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZSglcyk6ICVzXFxuXCYjMzQ7LCBTUExJVF9ERUJVR0ZTLFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgJiM0MzsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWYgIWRlZmluZWQoTUFQX0hVR0VUTEIpXG4gI2RlZmluZSBNQVBfSFVHRVRMQlx0MHg0MDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5AQCAtMTcsNyAmIzQzOzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcbiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5AQCAtMzcsNyAmIzQzOzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggYzk3M2Q2NzIyNzIwYy4uZWI0YjI0MzNiMDBlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3VmZmQtY29tbW9uLmhcJiMzNDtcbiBcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbkBAIC0xMSw3ICYjNDM7MTEsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggNDgyMWEzNTYzMDM2My4uZjg5MTZiMmFiYzJlZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtODg1LDExMSAmIzQzOzg4NSw1NCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0cmV0dXJuIHJldCBcdTAwM2UgMCA/IDAgOiAtZXJybm87XG4gfVxuIFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdGludCBmZDtcbi1cdHNzaXplX3QgbnVtcmVhZDtcbi1cbi1cdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XG4tXHRpZiAoZmQgPT0gLTEpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4tXHRpZiAobnVtcmVhZCBcdTAwM2MgMSkge1xuLVx0XHRjbG9zZShmZCk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0YnVmW251bXJlYWRdID0gJiMzOTtcXDAmIzM5Oztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxuXCYjMzQ7LCBidWZsZW4pO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIG9wZW4gZmFpbGVkOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbi1cbi1cdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdHNhdmVkX2Vycm5vID0gZXJybm87XG4tXHRjbG9zZShmZCk7XG4tXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuLVx0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApIHtcbi1cdFx0aWYgKGlnbm9yZV9laW52YWwgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdH1cbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pO1xuLX1cbi1cbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcbi19XG4tXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKVxuLXtcbi1cdGNoYXIgYnVmWzIxXTtcbi1cbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cmVhZF9maWxlKClcJiMzNDspO1xuLVxuLVx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0Y2hhciBidWZbMjFdO1xuLVxuLVx0c3ByaW50ZihidWYsIFwmIzM0OyVsdVwmIzM0OywgbnVtKTtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEsIGlnbm9yZV9laW52YWwpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuLXtcbi1cdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTtcbi19XG4tXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7XG4gXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKVxuIHtcbi1cdGlmIChzaG1tYXgpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0Oywgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0Oywgc2htYWxsKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2htbWF4KSB7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIHNobW1heCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgc2htbWF4OiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHNobWFsbCkge1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBzaG1hbGwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7KTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobW1heDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBsZW5ndGgsIHN0cmVycm9yKC1yZXQpKTtcbiBcdFx0c2htbWF4ID0gdmFsO1xuIFx0fVxuIFxuLVx0dmFsID0gcmVhZF9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcJiMzNDspO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcdGlmICh2YWwgXHUwMDNjIG5yKSB7XG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0OywgbnIpO1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBucik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICYjNDM7OCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2UgLyogX1NDX1BBR0VTSVpFICovXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2ZpbGVfdXRpbHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCBcdTAwM2NcdTAwM2MgKG5yKSlcbiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpXG5AQCAtMTY2LDEyICYjNDM7MTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBEb2N1bWVudGF0aW9uLCBNQUlOVEFJTkVSUywgS2NvbmZpZyBoZWxwIHRleHQsIGFuZCB1c2Vyc3BhY2UgdG9vbGluZy9zZWxmdGVzdHMgdW5kZXIgdG9vbHMvLiBObyBrZXJuZWwgcnVudGltZSBsb2dpYyBpcyBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZDVhZTBkOTQ2MDlmZmJmYjNjM2I2MjUyMTdmMmJhODZmOGY3NmUyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDQ6MjY6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CmluZGV4IGMxNmNhMTYzYjU1ZTMuLmUwYWNlZGJkMWQ0ODYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CkBAIC0yMjYsMTUgJiM0MzsyMjYsNiBAQCB3aWxsIGJlIHBpbm5lZCBsb25ndGVybSwgYW5kIHdob3NlIGRhdGEgd2lsbCBiZSBhY2Nlc3NlZC4KIAogVW5pdCB0ZXN0aW5nCiA9PT09PT09PT09PT0KLVRoaXMgZmlsZTo6Ci0KLSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCi0KLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczoKLQotKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpCi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKQotCiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkCiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OgogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGEzMTY3YmNiZTU4OTcuLjU0OGJjZjAwOGU3OTkgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xNzE3Myw4ICYjNDM7MTcxNzMsOSBAQCBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW0KIEY6CW1tL2d1cC5jCiBGOgltbS9ndXBfdGVzdC5jCiBGOgltbS9ndXBfdGVzdC5oCiYjNDM7RjoJdG9vbHMvbW0vZ3VwX2JlbmNoLmMKJiM0MztGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMKLUY6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKIAogTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKQogTToJQW5kcmV3IE1vcnRvbiAmbHQ7YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZyZndDsKQEAgLTE3Mjc3LDYgJiM0MzsxNzI3OCw3IEBAIEY6CW1tL21lbW9yeS10aWVycy5jCiBGOgltbS9wYWdlX2lkbGUuYwogRjoJbW0vcGdhbGxvYy10cmFjay5oCiBGOgltbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jCiYjNDM7RjoJdG9vbHMvbGliL21tLwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vCiAKIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCA2MDRjNTgxOTlhY2JmLi4wYmQyOThjNzc0NDYxIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWcKQEAgLTEyOTIsMjQgJiM0MzsxMjkyLDIzIEBAIGNvbmZpZyBQRVJDUFVfU1RBVFMKIAkgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuCiAKIGNvbmZpZyBHVVBfVEVTVAotCWJvb2wgJiMzNDtFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzJiMzNDsKJiM0MzsJYm9vbCAmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHMgYW5kIGJlbmNobWFya3MmIzM0OwogCWRlcGVuZHMgb24gREVCVUdfRlMKIAloZWxwCiAJICBQcm92aWRlcyAvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcyBhIHdheQotCSAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yCi0JICB0aGUgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpIGZhbWlseSBvZiBBUEkgY2FsbHMuCiYjNDM7CSAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgYW5kCiYjNDM7CSAgYmVuY2htYXJrcyBmb3IgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbGllcwomIzQzOwkgIG9mIEFQSSBjYWxscy4KIAotCSAgVGhlc2UgdGVzdHMgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2YKLQkgIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSwgYXMgd2VsbCBhcyBzbW9rZSB0ZXN0cyBvZgomIzQzOwkgIFRoZXNlIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mCiYjNDM7CSAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHRlc3RzIG9mCiAJICB0aGUgbm9uLV9mYXN0IHZhcmlhbnRzLgogCi0JICBUaGVyZSBpcyBhbHNvIGEgc3ViLXRlc3QgdGhhdCBhbGxvd3MgcnVubmluZyBkdW1wX3BhZ2UoKSBvbiBhbnkKLQkgIG9mIHVwIHRvIGVpZ2h0IHBhZ2VzIChzZWxlY3RlZCBieSBjb21tYW5kIGxpbmUgYXJncykgd2l0aGluIHRoZQotCSAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYQotCSAgcGluX3VzZXJfcGFnZXMqKCksIG9yIHBpbm5lZCB2aWEgZ2V0X3VzZXJfcGFnZXMqKCksIGFzIHNwZWNpZmllZAotCSAgYnkgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KJiM0MzsJICBUaGVyZSBpcyBhbHNvIGEgdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueSBvZiB1cAomIzQzOwkgIHRvIGVpZ2h0IHBhZ2VzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlCiYjNDM7CSAgcGFnZXMgYXJlIGVpdGhlciBhY3F1aXJlZCB2aWEgcGluX3VzZXJfcGFnZXMqKCkgb3IgZ2V0X3VzZXJfcGFnZXMqKCkuCiAKLQkgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCiYjNDM7CSAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jIGFuZCB0b29scy9tbS9ndXBfYmVuY2guYy4KIAogY29tbWVudCAmIzM0O0dVUF9URVNUIG5lZWRzIHRvIGhhdmUgREVCVUdfRlMgZW5hYmxlZCYjMzQ7CiAJZGVwZW5kcyBvbiAhR1VQX1RFU1QgJmFtcDsmYW1wOyAhREVCVUdfRlMKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjliMjIzN2U5ODIzZTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jCkBAIC0wLDAgJiM0MzsxLDEwNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtmaWxlX3V0aWxzLmgmIzM0OwomIzQzOwomIzQzO2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQomIzQzO3sKJiM0MzsJaW50IGZkLCBlcnI7CiYjNDM7CXNzaXplX3QgbnVtcmVhZDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKJiM0MzsJaWYgKGZkID09IC0xKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJbnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7CiYjNDM7CWlmIChudW1yZWFkICZsdDsgMSkgewomIzQzOwkJZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJCXJldHVybiAtZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1ZltudW1yZWFkXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQomIzQzO3sKJiM0MzsJaW50IGZkLCBzYXZlZF9lcnJubzsKJiM0MzsJc3NpemVfdCBudW13cml0dGVuOwomIzQzOwomIzQzOwlpZiAoYnVmbGVuICZsdDsgMikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOwomIzQzOwlpZiAoZmQgPT0gLTEpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwludW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7CiYjNDM7CXNhdmVkX2Vycm5vID0gZXJybm87CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJaWYgKG51bXdyaXR0ZW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1zYXZlZF9lcnJubzsKJiM0MzsKJiM0MzsJaWYgKG51bXdyaXR0ZW4gIT0gKHNzaXplX3QpKGJ1ZmxlbiAtIDEpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB2YWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CWNoYXIgYnVmWzIxXTsKJiM0MzsJY2hhciAqZW5kOwomIzQzOwomIzQzOwlpZiAoIW51bSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBSZWplY3Qgc2lnbnMgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZSB0aGF0IGFyZSBhY2NlcHRlZCBieSBzdHJ0b3VsKCkgKi8KJiM0MzsJaWYgKGJ1ZlswXSAmbHQ7ICYjMzk7MCYjMzk7IHx8IGJ1ZlswXSAmZ3Q7ICYjMzk7OSYjMzk7KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWVycm5vID0gMDsKJiM0MzsJdmFsID0gc3RydG91bChidWYsICZhbXA7ZW5kLCAxMCk7CiYjNDM7CWlmIChlcnJubykKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CS8qIE9ubHkgYWxsb3cgYSBuZXdsaW5lIGFmdGVyIHRoZSBudW1iZXIgKi8KJiM0MzsJaWYgKCplbmQgPT0gJiMzOTtcbiYjMzk7KQomIzQzOwkJZW5kJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJaWYgKCplbmQgIT0gJiMzOTtcMCYjMzk7KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CSpudW0gPSB2YWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMjFdOwomIzQzOwomIzQzOwlzcHJpbnRmKGJ1ZiwgJiMzNDslbHUmIzM0OywgbnVtKTsKJiM0MzsJcmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSAmIzQzOyAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7CiYjNDM7CXJldHVybiByZXQgPT0gLUVJTlZBTCA/IDAgOiByZXQ7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaCBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNTBkYWE4MmMyYjJiNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmgKQEAgLTAsMCAmIzQzOzEsMTMgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX19NTV9GSUxFX1VUSUxTX0hfXwomIzQzOyNkZWZpbmUgX19NTV9GSUxFX1VUSUxTX0hfXwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtzdGRkZWYuaCZndDsKJiM0MzsKJiM0MztpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CiYjNDM7aW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTsKJiM0MztpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKTsKJiM0MztpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTsKJiM0MztpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pOwomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKcmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jCmluZGV4IGQ3OTE3ZGNlM2FiYWMuLmFiZDlmNzE4MmY4OGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKQEAgLTgsMTIgJiM0Mzs4LDE4IEBACiAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ZpbGVfdXRpbHMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFRIUF9TWVNGUyAmIzM0Oy9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlLyYjMzQ7CiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0CiYjNDM7CiYjNDM7I2lmbmRlZiBBUlJBWV9TSVpFCiYjNDM7I2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSkKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNldHRpbmdzX3N0YWNrW01BWF9TRVRUSU5HU19ERVBUSF07CiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4Owogc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2F2ZWRfc2V0dGluZ3M7CkBAIC00OCw2ICYjNDM7NTQsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG1lbV9lbmFibGVkX3N0cmluZ3NbXSA9IHsKIAlOVUxMCiB9OwogCiYjNDM7c3RhdGljIHZvaWQgcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXByaW50ZigmIzM0OyMgJXM6ICVzICglZClcbiYjMzQ7LCBwYXRoLCBzdHJlcnJvcigtcmV0KSwgLXJldCk7CiYjNDM7fQomIzQzOwogaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKQogewogCWNoYXIgcGF0aFtQQVRIX01BWF07CkBAIC02MSw4ICYjNDM7NzIsOSBAQCBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pCiAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAl9CiAKLQlpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkgewotCQlwZXJyb3IocGF0aCk7CiYjNDM7CXJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KIApAQCAtMTAzLDEyICYjNDM7MTE1LDE3IEBAIHZvaWQgdGhwX3dyaXRlX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWwpCiAJCXByaW50ZigmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KLQl3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgJiM0MzsgMSk7CiYjNDM7CXJldCA9IHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSAmIzQzOyAxKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQogfQogCiB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKQogewogCWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnVtOwogCWludCByZXQ7CiAKIAlyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTICYjMzQ7JXMmIzM0OywgbmFtZSk7CkBAIC0xMTYsNyAmIzQzOzEzMywxMyBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKQogCQlwcmludGYoJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAl9Ci0JcmV0dXJuIHJlYWRfbnVtKHBhdGgpOwomIzQzOwlyZXQgPSByZWFkX251bShwYXRoLCAmYW1wO251bSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG51bTsKIH0KIAogdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKQpAQCAtMTI5LDcgJiM0MzsxNTIsMTEgQEAgdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKQogCQlwcmludGYoJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAl9Ci0Jd3JpdGVfbnVtKHBhdGgsIG51bSk7CiYjNDM7CXJldCA9IHdyaXRlX251bShwYXRoLCBudW0pOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiB9CiAKIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpCkBAIC0xNTcsOCAmIzQzOzE4NCwxNSBAQCB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKQogCQkubWF4X3B0ZXNfc2hhcmVkID0gdGhwX3JlYWRfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9tYXhfcHRlc19zaGFyZWQmIzM0OyksCiAJCS5wYWdlc190b19zY2FuID0gdGhwX3JlYWRfbnVtKCYjMzQ7a2h1Z2VwYWdlZC9wYWdlc190b19zY2FuJiMzNDspLAogCX07Ci0JaWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pCi0JCXNldHRpbmdzLSZndDtyZWFkX2FoZWFkX2tiID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCk7CiYjNDM7CWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7CiYjNDM7CQlpbnQgcmV0ID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwKJiM0MzsJCQkJICAgJmFtcDtzZXR0aW5ncy0mZ3Q7cmVhZF9haGVhZF9rYik7CiYjNDM7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTsKJiM0MzsJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICghKCgxICZsdDsmbHQ7IGkpICZhbXA7IG9yZGVycykpIHsKQEAgLTIwOCw4ICYjNDM7MjQyLDE1IEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKQogCXRocF93cml0ZV9udW0oJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZCYjMzQ7LCBraHVnZXBhZ2VkLSZndDttYXhfcHRlc19zaGFyZWQpOwogCXRocF93cml0ZV9udW0oJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW4mIzM0Oywga2h1Z2VwYWdlZC0mZ3Q7cGFnZXNfdG9fc2Nhbik7CiAKLQlpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkKLQkJd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHNldHRpbmdzLSZndDtyZWFkX2FoZWFkX2tiKTsKJiM0MzsJaWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHsKJiM0MzsJCWludCByZXQgPSB3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwKJiM0MzsJCQkJICAgIHNldHRpbmdzLSZndDtyZWFkX2FoZWFkX2tiKTsKJiM0MzsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpOwomIzQzOwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX09SREVSUzsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKCEoKDEgJmx0OyZsdDsgaSkgJmFtcDsgb3JkZXJzKSkKQEAgLTMwNyw4ICYjNDM7MzQ4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSkKIAkJfQogCiAJCXJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTsKLQkJaWYgKHJldCkKLQkJCW9yZGVycyB8PSAxVUwgJmx0OyZsdDsgaTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlpZiAocmV0ICE9IC1FTk9FTlQpIHsKJiM0MzsJCQkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCQkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwkJCX0KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9yZGVycyB8PSAxVUwgJmx0OyZsdDsgaTsKIAl9CiAKIAlyZXR1cm4gb3JkZXJzOwpAQCAtMzgyLDggJiM0Mzs0MzAsNyBAQCBpbnQgZGV0ZWN0X2h1Z2V0bGJfcGFnZV9zaXplcyh1bnNpZ25lZCBsb25nIHNpemVzW10sIGludCBtYXgpCiAJCWlmIChzc2NhbmYoZW50cnktJmd0O2RfbmFtZSwgJiMzNDtodWdlcGFnZXMtJXp1a0ImIzM0OywgJmFtcDtrYikgIT0gMSkKIAkJCWNvbnRpbnVlOwogCQlzaXplc1tjb3VudCYjNDM7JiM0MztdID0ga2IgKiAxMDI0OwotCQlrc2Z0X3ByaW50X21zZygmIzM0O1tJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxuJiMzNDssCi0JCQkgICAgICAga2IpOwomIzQzOwkJcHJpbnRmKCYjMzQ7IyBbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcbiYjMzQ7LCBrYik7CiAJfQogCWNsb3NlZGlyKGRpcik7CiAJcmV0dXJuIGNvdW50OwpAQCAtNDI1LDI4ICYjNDM7NDcyLDQ5IEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfc3lzZnNfcGF0aChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sCiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKQogewogCWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnI7CiYjNDM7CWludCByZXQ7CiAKIAlodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCAmIzM0O25yX2h1Z2VwYWdlcyYjMzQ7KTsKIAotCXJldHVybiByZWFkX251bShwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0ocGF0aCwgJmFtcDtucik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yOwogfQogCiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucikKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwlpbnQgcmV0OwogCiAJaHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgJiMzNDtucl9odWdlcGFnZXMmIzM0Oyk7CiAKLQl3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7CiYjNDM7CXJldCA9IHdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQogfQogCiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBucjsKJiM0MzsJaW50IHJldDsKIAogCWh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsICYjMzQ7ZnJlZV9odWdlcGFnZXMmIzM0Oyk7CiAKLQlyZXR1cm4gcmVhZF9udW0ocGF0aCk7CiYjNDM7CXJldCA9IHJlYWRfbnVtKHBhdGgsICZhbXA7bnIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBucjsKIH0KIAogc3RhdGljIGJvb2wgX19odWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucikKQEAgLTUwMiw3ICYjNDM7NTcwLDggQEAgdW5zaWduZWQgbG9uZyBodWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgbnIsIHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwKIAkJcmV0dXJuIDA7CiAKIAlpZiAobnJfZW5hYmxlZCAmZ3Q7IG1heCkgewotCQlrc2Z0X3ByaW50X21zZygmIzM0O2RldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcbiYjMzQ7LCBucl9lbmFibGVkLCBtYXgpOwomIzQzOwkJcHJpbnRmKCYjMzQ7IyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXG4mIzM0OywKJiM0MzsJCSAgICAgICBucl9lbmFibGVkLCBtYXgpOwogCQlucl9lbmFibGVkID0gbWF4OwogCX0KIApAQCAtNTc0LDggJiM0Mzs2NDMsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZCkKIAogc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19zaWdoYW5kbGVyKGludCBzaWcpCiB7CiYjNDM7CSh2b2lkKXNpZzsKJiM0MzsKIAkvKiBleGl0KCkgd2lsbCBpbnZva2UgdGhlIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0IGhhbmRsZXIuICovCi0JZXhpdChLU0ZUX0ZBSUwpOwomIzQzOwlleGl0KEVYSVRfRkFJTFVSRSk7CiB9CiAKIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oCnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaApkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmUKaW5kZXggMTQ0NmE2NTllNTQwOC4uMTU0ZDc0MGJlMDJlOCAxMDA2NDQKLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlCkBAIC0zLDMgJiM0MzszLDQgQEAgc2xhYmluZm8KIHBhZ2UtdHlwZXMKIHBhZ2Vfb3duZXJfc29ydAogdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MztndXBfYmVuY2gKZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGUKaW5kZXggODU4MTg2YTZlZWZkYi4uZjIwYTMyZDhjYzIyZSAxMDA2NDQKLS0tIGEvdG9vbHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vTWFrZWZpbGUKQEAgLTMsMTMgJiM0MzszLDE1IEBACiAjCiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZQogCi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7QlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlcgomIzQzO0JVSUxEX1RBUkdFVFMgJiM0Mzs9IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaAogSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzCiAKIExJQl9ESVIgPSAuLi9saWIvYXBpCiBMSUJTID0gJChMSUJfRElSKS9saWJhcGkuYQomIzQzO0dVUF9CRU5DSF9PQkpTID0gZ3VwX2JlbmNoLmMgLi4vbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgLi4vbGliL21tL2ZpbGVfdXRpbHMuYwogCi1DRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1wdGhyZWFkCiYjNDM7Q0ZMQUdTICYjNDM7PSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtSS4uLy4uIC1wdGhyZWFkCiBMREZMQUdTICYjNDM7PSAkKExJQlMpIC1wdGhyZWFkCiAKIGFsbDogJChCVUlMRF9UQVJHRVRTKQpAQCAtMjIsOCAmIzQzOzI0LDExIEBAICQoTElCUyk6CiAlOiAlLmMKIAkkKENDKSAkKENGTEFHUykgLW8gJEAgJCZsdDsgJChMREZMQUdTKQogCiYjNDM7Z3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpCiYjNDM7CSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKEdVUF9CRU5DSF9PQkpTKSAkKExERkxBR1MpCiYjNDM7CiBjbGVhbjoKLQkkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzOwkkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2gKIAltYWtlIC1DICQoTElCX0RJUikgY2xlYW4KIAogc2JpbmRpciA/PSAvdXNyL3NiaW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMgYi90b29scy9tbS9ndXBfYmVuY2guYwpzaW1pbGFyaXR5IGluZGV4IDUwJQpyZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCnJlbmFtZSB0byB0b29scy9tbS9ndXBfYmVuY2guYwppbmRleCAzZjg0MWE5NmY4NzA2Li5lNmE4MGJhNTE5NWE3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jCkBAIC0xMCwxMSAmIzQzOzEwLDEwIEBACiAjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7YXNzZXJ0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bW0vZ3VwX3Rlc3QuaCZndDsKLSNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2RlZmluZSBNQiAoMVVMICZsdDsmbHQ7IDIwKQogCkBAIC0zOCwxMiAmIzQzOzM3LDYgQEAgc3RhdGljIGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpCiAJCXJldHVybiAmIzM0O1BJTl9GQVNUX0JFTkNITUFSSyYjMzQ7OwogCWNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzoKIAkJcmV0dXJuICYjMzQ7UElOX0xPTkdURVJNX0JFTkNITUFSSyYjMzQ7OwotCWNhc2UgR1VQX0JBU0lDX1RFU1Q6Ci0JCXJldHVybiAmIzM0O0dVUF9CQVNJQ19URVNUJiMzNDs7Ci0JY2FzZSBQSU5fQkFTSUNfVEVTVDoKLQkJcmV0dXJuICYjMzQ7UElOX0JBU0lDX1RFU1QmIzM0OzsKLQljYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOgotCQlyZXR1cm4gJiMzNDtEVU1QX1VTRVJfUEFHRVNfVEVTVCYjMzQ7OwogCX0KIAlyZXR1cm4gJiMzNDtVbmtub3duIGNvbW1hbmQmIzM0OzsKIH0KQEAgLTUzLDM5ICYjNDM7NDYsMjkgQEAgdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKQogCXN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7CiAJaW50IGksIHN0YXR1czsKIAotCS8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovCi0JaWYgKChjbWQgPT0gUElOX0ZBU1RfQkVOQ0hNQVJLKSB8fCAoY21kID09IEdVUF9GQVNUX0JFTkNITUFSSykgfHwKLQkgICAgIChjbWQgPT0gUElOX0xPTkdURVJNX0JFTkNITUFSSykpIHsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IHJlcGVhdHM7IGkmIzQzOyYjNDM7KSB7Ci0JCQlndXAuc2l6ZSA9IHNpemU7Ci0JCQlzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgJmFtcDtndXApOwotCQkJaWYgKHN0YXR1cykKLQkJCQlicmVhazsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHJlcGVhdHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlndXAuc2l6ZSA9IHNpemU7CiYjNDM7CQlzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgJmFtcDtndXApOwomIzQzOwkJaWYgKHN0YXR1cykgewomIzQzOwkJCWludCBlcnIgPSBlcnJubzsKIAogCQkJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7cHJpbnRfbXV0ZXgpOwotCQkJa3NmdF9wcmludF9tc2coJiMzNDslczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXMmIzM0OywKLQkJCQkgICAgICAgY21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsCi0JCQkJICAgICAgIGd1cC5wdXRfZGVsdGFfdXNlYyk7Ci0JCQlpZiAoZ3VwLnNpemUgIT0gc2l6ZSkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0OywgdHJ1bmNhdGVkIChzaXplOiAlbGxkKSYjMzQ7LCBndXAuc2l6ZSk7Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0O1xuJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0OyVzIGlvY3RsIGZhaWxlZDogJXNcbiYjMzQ7LCBjbWRfdG9fc3RyKGNtZCksCiYjNDM7CQkJCXN0cmVycm9yKGVycikpOwogCQkJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtwcmludF9tdXRleCk7CiYjNDM7CQkJcmV0dXJuIGRhdGE7CiAJCX0KLQl9IGVsc2UgewotCQlndXAuc2l6ZSA9IHNpemU7Ci0JCXN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCAmYW1wO2d1cCk7Ci0JCWlmIChzdGF0dXMpCi0JCQlnb3RvIHJldHVybl87CiAKIAkJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7cHJpbnRfbXV0ZXgpOwotCQlrc2Z0X3ByaW50X21zZygmIzM0OyVzOiBkb25lXG4mIzM0OywgY21kX3RvX3N0cihjbWQpKTsKJiM0MzsJCXByaW50ZigmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1cyYjMzQ7LAomIzQzOwkJCWNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLAomIzQzOwkJCWd1cC5wdXRfZGVsdGFfdXNlYyk7CiAJCWlmIChndXAuc2l6ZSAhPSBzaXplKQotCQkJa3NmdF9wcmludF9tc2coJiMzNDtUcnVuY2F0ZWQgKHNpemU6ICVsbGQpXG4mIzM0OywgZ3VwLnNpemUpOwomIzQzOwkJCXByaW50ZigmIzM0OywgdHJ1bmNhdGVkIChzaXplOiAlbGxkKSYjMzQ7LCBndXAuc2l6ZSk7CiYjNDM7CQlwcmludGYoJiMzNDtcbiYjMzQ7KTsKIAkJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDtwcmludF9tdXRleCk7CiAJfQogCi1yZXR1cm5fOgotCWtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgJiMzNDtpb2N0bCBzdGF0dXMgJWRcbiYjMzQ7LCBzdGF0dXMpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC05MywzOCAmIzQzOzc2LDIxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07CiAJaW50IGZpbGVkLCBpLCBvcHQsIG5yX3BhZ2VzID0gMSwgdGhwID0gLTEsIHdyaXRlID0gMSwgbnRocmVhZHMgPSAxLCByZXQ7Ci0JaW50IGZsYWdzID0gTUFQX1BSSVZBVEU7CiYjNDM7CWludCBmbGFncyA9IE1BUF9QUklWQVRFLCBzdGFydGVkX3RocmVhZHMgPSAwLCBleGl0X3N0YXR1cyA9IDE7CiAJY2hhciAqZmlsZSA9ICYjMzQ7L2Rldi96ZXJvJiMzNDs7Ci0JYm9vbCBodWdldGxiID0gZmFsc2U7CiYjNDM7CWJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTsKJiM0MzsJdm9pZCAqdGhyZWFkX3Jlc3VsdDsKIAlwdGhyZWFkX3QgKnRpZDsKIAljaGFyICpwOwogCi0Jd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDttOnI6bjpGOmY6YWJjajp0VExVdXdXU0hweiYjMzQ7KSkgIT0gLTEpIHsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDttOnI6bjpGOmY6YWo6dFRMdXdXU0gmIzM0OykpICE9IC0xKSB7CiAJCXN3aXRjaCAob3B0KSB7CiAJCWNhc2UgJiMzOTthJiMzOTs6CiAJCQljbWQgPSBQSU5fRkFTVF9CRU5DSE1BUks7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O2ImIzM5OzoKLQkJCWNtZCA9IFBJTl9CQVNJQ19URVNUOwotCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtMJiMzOTs6CiAJCQljbWQgPSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOwogCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtjJiMzOTs6Ci0JCQljbWQgPSBEVU1QX1VTRVJfUEFHRVNfVEVTVDsKLQkJCS8qCi0JCQkgKiBEdW1wIHBhZ2UgMCAoaW5kZXggMSkuIE1heSBiZSBvdmVycmlkZGVuIGxhdGVyLCBieQotCQkJICogdXNlciYjMzk7cyBub24tb3B0aW9uIGFyZ3VtZW50cy4KLQkJCSAqCi0JCQkgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuICYjMzQ7ZG8KLQkJCSAqIG5vdGhpbmcmIzM0Oy4KLQkJCSAqLwotCQkJZ3VwLndoaWNoX3BhZ2VzWzBdID0gMTsKLQkJCWJyZWFrOwotCQljYXNlICYjMzk7cCYjMzk7OgotCQkJLyogd29ya3Mgb25seSB3aXRoIERVTVBfVVNFUl9QQUdFU19URVNUICovCi0JCQlndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjsKLQkJCWJyZWFrOwogCQljYXNlICYjMzk7RiYjMzk7OgogCQkJLyogc3RydG9sLCBzbyB5b3UgY2FuIHBhc3MgZmxhZ3MgaW4gaGV4IGZvcm0gKi8KIAkJCWd1cC5ndXBfZmxhZ3MgPSBzdHJ0b2wob3B0YXJnLCAwLCAwKTsKQEAgLTE0MSw3ICYjNDM7MTA3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQljYXNlICYjMzk7biYjMzk7OgogCQkJbnJfcGFnZXMgPSBhdG9pKG9wdGFyZyk7CiAJCQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkJCW5yX3BhZ2VzID0gc2l6ZSAvIHBzaXplKCk7CiYjNDM7CQkJCW5yX3BhZ2VzID0gc2l6ZSAvIGdldHBhZ2VzaXplKCk7CiAJCQlicmVhazsKIAkJY2FzZSAmIzM5O3QmIzM5OzoKIAkJCXRocCA9IDE7CkBAIC0xNDksOSAmIzQzOzExNSw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJY2FzZSAmIzM5O1QmIzM5OzoKIAkJCXRocCA9IDA7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O1UmIzM5OzoKLQkJCWNtZCA9IEdVUF9CQVNJQ19URVNUOwotCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTt1JiMzOTs6CiAJCQljbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7CiAJCQlicmVhazsKQEAgLTE3Myw1MiAmIzQzOzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlodWdldGxiID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7V3JvbmcgYXJndW1lbnRcbiYjMzQ7KTsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXcm9uZyBhcmd1bWVudFxuJiMzNDspOwomIzQzOwkJCWV4aXQoMSk7CiAJCX0KIAl9CiAKLQlpZiAob3B0aW5kICZsdDsgYXJnYykgewotCQlpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDsKLQkJLyoKLQkJICogRm9yIGV4YW1wbGU6Ci0JCSAqCi0JCSAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxCi0JCSAqCi0JCSAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTcKLQkJICovCi0KLQkJd2hpbGUgKChvcHRpbmQgJmx0OyBhcmdjKSAmYW1wOyZhbXA7Ci0JCSAgICAgICAoZXh0cmFfYXJnX2NvdW50ICZsdDsgR1VQX1RFU1RfTUFYX1BBR0VTX1RPX0RVTVApKSB7Ci0JCQkvKgotCQkJICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW4KLQkJCSAqIHVzZSBub3JtYWwgMC1iYXNlZCBpbmRleGluZyBvbiB0aGUgY29tbWFuZCBsaW5lLgotCQkJICovCi0JCQlsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSAmIzQzOyAxOwotCi0JCQlndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7Ci0JCQlleHRyYV9hcmdfY291bnQmIzQzOyYjNDM7OwotCQkJb3B0aW5kJiM0MzsmIzQzOzsKLQkJfQomIzQzOwlpZiAob3B0aW5kICE9IGFyZ2MpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O1VuZXhwZWN0ZWQgYXJndW1lbnQgJiMzOTslcyYjMzk7XG4mIzM0OywgYXJndltvcHRpbmRdKTsKJiM0MzsJCWV4aXQoMSk7CiAJfQogCi0Ja3NmdF9wcmludF9oZWFkZXIoKTsKJiM0MzsJaWYgKGdldHVpZCgpKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiAKIAlpZiAoaHVnZXRsYikgewogCQl1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiAKLQkJaWYgKCFocF9zaXplKQotCQkJa3NmdF9leGl0X3NraXAoJiMzNDtIdWdlVExCIGlzIHVuYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQlpZiAoIWhwX3NpemUpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtDb3VsZCBub3QgZGV0ZXJtaW5lIGh1Z2UgcGFnZSBzaXplXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CQl9CiAKIAkJc2l6ZSA9IChzaXplICYjNDM7IGhwX3NpemUgLSAxKSAmYW1wOyB+KGhwX3NpemUgLSAxKTsKLQkJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKQotCQkJa3NmdF9leGl0X3NraXAoJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcbiYjMzQ7KTsKJiM0MzsJCWlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwkJCXJldHVybiAxOwomIzQzOwkJfQogCX0KIAotCWtzZnRfc2V0X3BsYW4obnRocmVhZHMpOwotCiAJZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTsKLQlpZiAoZmlsZWQgJmx0OyAwKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAoZmlsZWQgJmx0OyAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KIAogCWd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzOwogCWlmICh3cml0ZSkKQEAgLTIyNywyNiAmIzQzOzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwogCWlmIChndXBfZmQgPT0gLTEpIHsKIAkJc3dpdGNoIChlcnJubykgewotCQljYXNlIEVBQ0NFUzoKLQkJCWlmIChnZXR1aWQoKSkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKLQkJCWJyZWFrOwogCQljYXNlIEVOT0VOVDoKIAkJCWlmIChvcGVuZGlyKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcmIzM0OykgPT0gTlVMTCkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xuJiMzNDssIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgR1VQX1RFU1RfRklMRSwKJiM0MzsJCQkJc3RyZXJyb3IoZXJybm8pKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKLQkJa3NmdF9leGl0X3Bhc3MoKTsKJiM0MzsJCWdvdG8gZXJyX2Nsb3NlX2ZpbGVkOwogCX0KIAogCXAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCBmaWxlZCwgMCk7Ci0JaWYgKHAgPT0gTUFQX0ZBSUxFRCkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bW1hcDogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAocCA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttbWFwOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlnb3RvIGVycl9jbG9zZV9ndXBfZmQ7CiYjNDM7CX0KIAlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7CiAKIAlpZiAodGhwID09IDEpCkBAIC0yNTUsMjEgJiM0MzsyMDUsNDQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiAKIAkvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi8KLQlmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCAmbHQ7IGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpCiYjNDM7CWZvciAoOyAodW5zaWduZWQgbG9uZylwICZsdDsgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gZ2V0cGFnZXNpemUoKSkKIAkJcFswXSA9IDA7CiAKIAl0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7Ci0JYXNzZXJ0KHRpZCk7CiYjNDM7CWlmICghdGlkKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcbiYjMzQ7LAomIzQzOwkJCW50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJZ290byBlcnJfdW5tYXA7CiYjNDM7CX0KJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7CiAJCXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCAmYW1wO2d1cCk7Ci0JCWFzc2VydChyZXQgPT0gMCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7cHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKHJldCkpOwomIzQzOwkJCXRocmVhZF9lcnJvciA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlzdGFydGVkX3RocmVhZHMmIzQzOyYjNDM7OwogCX0KLQlmb3IgKGkgPSAwOyBpICZsdDsgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7Ci0JCXJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpOwotCQlhc3NlcnQocmV0ID09IDApOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc3RhcnRlZF90aHJlYWRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgJmFtcDt0aHJlYWRfcmVzdWx0KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKHJldCkpOwomIzQzOwkJCXRocmVhZF9lcnJvciA9IHRydWU7CiYjNDM7CQl9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpCiYjNDM7CQkJdGhyZWFkX2Vycm9yID0gdHJ1ZTsKIAl9CiAKIAlmcmVlKHRpZCk7Ci0KLQlrc2Z0X2V4aXRfcGFzcygpOwomIzQzOwlpZiAodGhyZWFkX2Vycm9yKQomIzQzOwkJZ290byBlcnJfdW5tYXA7CiYjNDM7CWV4aXRfc3RhdHVzID0gMDsKJiM0MzsKJiM0MztlcnJfdW5tYXA6CiYjNDM7CW11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTsKJiM0MztlcnJfY2xvc2VfZ3VwX2ZkOgomIzQzOwljbG9zZShndXBfZmQpOwomIzQzO2Vycl9jbG9zZV9maWxlZDoKJiM0MzsJY2xvc2UoZmlsZWQpOwomIzQzOwlyZXR1cm4gZXhpdF9zdGF0dXM7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCmluZGV4IDJkNTM2NjE5NmUzMDkuLjljMDM2MjRmZDI5MzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0zNyw3ICYjNDM7MzcsOCBAQCBlbmRpZgogIyBMRExJQlMuCiBNQUtFRkxBR1MgJiM0Mzs9IC0tbm8tYnVpbHRpbi1ydWxlcwogCi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKQomIzQzO0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliCiYjNDM7Q0ZMQUdTICYjNDM7PSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKQogQ0ZMQUdTICYjNDM7PSAtV3VucmVhY2hhYmxlLWNvZGUKIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbQogCkBAIC01Nyw4ICYjNDM7NTgsOCBAQCBlbmRpZgogCiBURVNUX0dFTl9GSUxFUyA9IGNvdwogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGNvbXBhY3Rpb25fdGVzdAomIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXAKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfbG9uZ3Rlcm0KLVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfdGVzdAogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGhtbS10ZXN0cwogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbWFkdmlzZQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbW1hcApAQCAtMTg3LDggJiM0MzsxODgsMTAgQEAgVEVTVF9GSUxFUyAmIzQzOz0gd3JpdGVfaHVnZXRsYl9tZW1vcnkuc2gKIAogaW5jbHVkZSAuLi9saWIubWsKIAotJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jCi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmMKJiM0MzskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXAomIzQzOwkJICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jCiYjNDM7JChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFwKJiM0MzsJCSAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwogCiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmMKICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmMKQEAgLTIxNyw3ICYjNDM7MjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyAmIzQzOz0gLW0zMiAtbXhzYXZlCiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwgLWxtCiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuYwogCSQoY2FsbCBtc2csQ0MsLCRAKQotCSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEAKJiM0MzsJJChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRACiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKQogZW5kaWYKIApAQCAtMjI2LDcgJiM0MzsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICYjNDM7PSAtbTY0IC1teHNhdmUKICQoQklOQVJJRVNfNjQpOiBMRExJQlMgJiM0Mzs9IC1scnQgLWxkbAogJChCSU5BUklFU182NCk6ICQoT1VUUFVUKS8lXzY0OiAlLmMKIAkkKGNhbGwgbXNnLENDLCwkQCkKLQkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRACiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQAogJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSkKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKQEAgLTE1LDkgJiM0MzsxNSw5IEBACiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIE1BUF9TSVpFX01CCTEwMAogI2RlZmluZSBNQVBfU0laRQkoTUFQX1NJWkVfTUIgKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKaW5kZXggOGFhNTI0OWQ5YmVmNi4uMzI2NGE4Mjg1NzViZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKQEAgLTI5LDcgJiM0MzsyOSw2IEBACiAjaW5jbHVkZSAmIzM0Oy4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplOwogc3RhdGljIGludCBwYWdlbWFwX2ZkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwppbmRleCA0NWI4NGY3YjM2NGUwLi4yODlhZWQyZWJhYzAyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogdWludDY0X3QgcGFnZV9zaXplOwogdWludDY0X3QgcG1kX3BhZ2VzaXplOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2luY2x1ZGUgJiMzNDsuLi9waWRmZC9waWRmZC5oJiMzNDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lM2MyZmZhM2EwNTdmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMKQEAgLTAsMCAmIzQzOzEsMjc3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NAomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9pb2N0bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9ndXBfdGVzdC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTUIgKDFVTCAmbHQ7Jmx0OyAyMCkKJiM0MzsKJiM0MzsvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi8KJiM0MzsjZGVmaW5lIEZPTExfV1JJVEUJMHgwMQkvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi8KJiM0MzsKJiM0MzsvKiBQYWdlIGNvdW50cyBleGVyY2lzaW5nIHNpbmdsZSwgVEhQLWJhdGNoLCBwYXJ0aWFsLCBhbmQgZnVsbC1tYXBwaW5nIEdVUC4gKi8KJiM0MztzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07CiYjNDM7CiYjNDM7I2RlZmluZSBHVVBfVEVTVF9GSUxFICYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QmIzM0OwomIzQzOyNkZWZpbmUgTlJfSFVHRV9QQUdFUyAxMjgKJiM0MzsKJiM0MztIVUdFVExCX1NFVFVQX0RFRkFVTFRfUEFHRVMoTlJfSFVHRV9QQUdFUykKJiM0MzsKJiM0MztGSVhUVVJFKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJaW50IGd1cF9mZDsKJiM0MzsJY2hhciAqYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJYm9vbCB0aHA7CiYjNDM7CWJvb2wgaHVnZXRsYjsKJiM0MzsJYm9vbCB3cml0ZTsKJiM0MzsJYm9vbCBzaGFyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfdGhwKQomIzQzO3sKJiM0MzsJLnRocCA9IHRydWUsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSBmYWxzZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZCkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYikKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSB0cnVlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChndXBfdGVzdCkKJiM0Mzt7CiYjNDM7CWludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEU7CiYjNDM7CWludCB6ZXJvX2ZkOwomIzQzOwljaGFyICpwOwomIzQzOwomIzQzOwlzZWxmLSZndDtzaXplID0gMTI4ICogTUI7CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtodWdldGxiKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiYjNDM7CiYjNDM7CQlpZiAoIWhwX3NpemUpCiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7SHVnZVRMQiBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSAmbHQ7IE5SX0hVR0VfUEFHRVMpCiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7Tm90IGVub3VnaCBodWdlIHBhZ2VzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CQlzZWxmLSZndDtzaXplID0gTlJfSFVHRV9QQUdFUyAqIGhwX3NpemU7CiYjNDM7CQltbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtzaGFyZWQpCiYjNDM7CQltbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgJmFtcDsgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7CiYjNDM7CiYjNDM7CS8qIHplcm9fZmQgaGFzIHRvIGJlICZndDs9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi8KJiM0MzsJemVyb19mZCA9IG9wZW4oJiMzNDsvZGV2L3plcm8mIzM0OywgT19SRFdSKTsKJiM0MzsJQVNTRVJUX0dFKHplcm9fZmQsIDApOwomIzQzOwomIzQzOwkvKiBndXBfZmQgaGFzIHRvIGJlICZndDs9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi8KJiM0MzsJc2VsZi0mZ3Q7Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwomIzQzOwlBU1NFUlRfR0Uoc2VsZi0mZ3Q7Z3VwX2ZkLCAwKTsKJiM0MzsKJiM0MzsJc2VsZi0mZ3Q7YWRkciA9IG1tYXAoTlVMTCwgc2VsZi0mZ3Q7c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCQkgIG1tYXBfZmxhZ3MsIHplcm9fZmQsIDApOwomIzQzOwomIzQzOwlBU1NFUlRfTkUoc2VsZi0mZ3Q7YWRkciwgTUFQX0ZBSUxFRCkgewomIzQzOwkJaW50IGVyciA9IGVycm5vOwomIzQzOwomIzQzOwkJY2xvc2UoemVyb19mZCk7CiYjNDM7CQljbG9zZShzZWxmLSZndDtndXBfZmQpOwomIzQzOwkJVEhfTE9HKCYjMzQ7bW1hcCBmYWlsZWQ6ICVzJiMzNDssIHN0cmVycm9yKGVycikpOwomIzQzOwl9CiYjNDM7CWNsb3NlKHplcm9fZmQpOwomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dGhwKQomIzQzOwkJbWFkdmlzZShzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsJZWxzZSBpZiAoIXZhcmlhbnQtJmd0O2h1Z2V0bGIpCiYjNDM7CQltYWR2aXNlKHNlbGYtJmd0O2FkZHIsIHNlbGYtJmd0O3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiYjNDM7CiYjNDM7CWZvciAocCA9IHNlbGYtJmd0O2FkZHI7ICh1bnNpZ25lZCBsb25nKXAgJmx0OyAodW5zaWduZWQgbG9uZylzZWxmLSZndDthZGRyCiYjNDM7CQkJJiM0Mzsgc2VsZi0mZ3Q7c2l6ZTsgcCAmIzQzOz0gcHNpemUoKSkKJiM0MzsJCXBbMF0gPSAwOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJbXVubWFwKHNlbGYtJmd0O2FkZHIsIHNlbGYtJmd0O3NpemUpOwomIzQzOwljbG9zZShzZWxmLSZndDtndXBfZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fZ3VwX2NtZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsCiYjNDM7CQkJIEZJWFRVUkVfREFUQShndXBfdGVzdCkgKnNlbGYsCiYjNDM7CQkJIGNvbnN0IEZJWFRVUkVfVkFSSUFOVChndXBfdGVzdCkgKnZhcmlhbnQsCiYjNDM7CQkJIHVuc2lnbmVkIGxvbmcgY29tbWFuZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsKJiM0MzsJCQkuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtJmd0O2FkZHIsCiYjNDM7CQkJLnNpemUgPSBzZWxmLSZndDtzaXplLAomIzQzOwkJCS5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gJmx0OyAwID8KJiM0MzsJCQkJc2VsZi0mZ3Q7c2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLAomIzQzOwkJCS5ndXBfZmxhZ3MgPSB2YXJpYW50LSZndDt3cml0ZSA/IEZPTExfV1JJVEUgOiAwLAomIzQzOwkJfTsKJiM0MzsKJiM0MzsJCVRIX0xPRygmIzM0O25yX3BhZ2VzX3Blcl9jYWxsPSV1JiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7CiYjNDM7CQlBU1NFUlRfRVEoaW9jdGwoc2VsZi0mZ3Q7Z3VwX2ZkLCBjb21tYW5kLCAmYW1wO2d1cCksIDApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXMpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9CQVNJQ19URVNUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcykKJiM0Mzt7CiYjNDM7CXJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0JBU0lDX1RFU1QpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzX2Zhc3QpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9GQVNUX0JFTkNITUFSSyk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdCkKJiM0Mzt7CiYjNDM7CXJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0ZBU1RfQkVOQ0hNQVJLKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19sb25ndGVybSkKJiM0Mzt7CiYjNDM7CXJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0xPTkdURVJNX0JFTkNITUFSSyk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJY2hhciAqZmlsZSA9ICYjMzQ7L2Rldi96ZXJvJiMzNDs7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7VW5hYmxlIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJfQomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgPT0gLTEpIHsKJiM0MzsJCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CQlpZiAoZXJybm8gPT0gRUFDQ0VTKQomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxuJiMzNDspOwomIzQzOwkJaWYgKGVycm5vID09IEVOT0VOVCkgewomIzQzOwkJCURJUiAqZGVidWdmcyA9IG9wZW5kaXIoJiMzNDsvc3lzL2tlcm5lbC9kZWJ1ZyYjMzQ7KTsKJiM0MzsKJiM0MzsJCQlpZiAoIWRlYnVnZnMpIHsKJiM0MzsJCQkJa3NmdF9leGl0X3NraXAoJiMzNDtNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXG4mIzM0Oyk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJY2xvc2VkaXIoZGVidWdmcyk7CiYjNDM7CQkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7Q2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcbiYjMzQ7KTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwl9CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwppbmRleCA1MTBkZTkzYmU2ODE0Li5jOWQ4YjQ0OTEyNjM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7CiBzdGF0aWMgaW50IG5yX2h1Z2V0bGJzaXplczsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKQEAgLTEwLDkgJiM0MzsxMCw2IEBACiAgKiBidWdzLgogICovCiAKLSNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwotCiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CkBAIC0zMyw2ICYjNDM7MzAsOSBAQAogI2luY2x1ZGUgJmx0O3N5cy9ldmVudGZkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmQuaCZndDsKICNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKIAogLyoKICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24mIzM5O3QgZXhwb3J0ZWQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKaW5kZXggNTU1YjRiM2QxNDMwNy4uNTdjZjc5MGNhNDc4ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBNSU5fRlJFRV9QQUdFUwkyMAogI2RlZmluZSBOUl9IVUdFX1BBR0VTCTEwCS8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCmluZGV4IDBmMmFhZDFiN2RiZDYuLmE0NThiZWNmNTgzMjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCkBAIC0xOCw3ICYjNDM7MTgsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWZkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpCiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYwppbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMKQEAgLTI2LDcgJiM0MzsyNiw2IEBACiAjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIERFRkFVTFRfTEVOR1RIX01CIDEwVUwKICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jCmluZGV4IDNmZjdmMDYyYjdlYjQuLmY0NTE0ZGE0OWUxZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYwppbmRleCBiYzIwMmU0ZWQyYmRhLi4yMDg2NGU3ZDRlMGM3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMKQEAgLTIxLDkgJiM0MzsyMSw5IEBACiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvc3RhdGZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORQogI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jCmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uYwpAQCAtMjAsNyAmIzQzOzIwLDYgQEAKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaWZuZGVmIFNUQVRYX0RJT0FMSUdOCiAjZGVmaW5lIFNUQVRYX0RJT0FMSUdOCQkweDAwMDAyMDAwVQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwppbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwpAQCAtMTAsNyAmIzQzOzEwLDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMKaW5kZXggZjk0NTQ5ZWZjYzZmZi4uMjUzMmE0MmI5OGRmZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBJTkxPT1BfSVRFUiAxMDAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDFkMmQ2YmQ3MmZkMmEuLmFkYTExZDMwZDM4ODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKQEAgLTIyLDcgJiM0MzsyMiw2IEBACiAjaW5jbHVkZSAmIzM0O2xpbnV4L21hZ2ljLmgmIzM0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMICZsdDsmbHQ7IDMwKSkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplOwpAQCAtMTIyLDYgJiM0MzsxMjEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCWNoYXIgYnVmWzEgJmx0OyZsdDsgMTBdOwogCWNoYXIgcGF0aFtQQVRIX01BWF07CiAJY2hhciAqc3RyLCAqZW5kOwomIzQzOwlpbnQgcmV0OwogCiAJZmluZm8uZGlyID0gZGlyOwogCWlmIChzdGF0KGZpbmZvLmRpciwgJmFtcDtwYXRoX3N0YXQpKQpAQCAtMTQyLDggJiM0MzsxNDIsOSBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCQkgICAgIG1ham9yKHBhdGhfc3RhdC5zdF9kZXYpLCBtaW5vcihwYXRoX3N0YXQuc3RfZGV2KSkKIAkgICAgJmd0Oz0gc2l6ZW9mKHBhdGgpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JaWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpCi0JCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3JlYWRfZmlsZSh1ZXZlbnQpJiMzNDspOwomIzQzOwlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkX2ZpbGUoJXMpOiAlc1xuJiMzNDssIHBhdGgsIHN0cmVycm9yKC1yZXQpKTsKIAlpZiAoc3Ryc3RyKGJ1ZiwgJiMzNDtERVZUWVBFPWRpc2smIzM0OykpIHsKIAkJLyogRm91bmQgaXQgKi8KIAkJaWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCkBAIC0zMjQsNyAmIzQzOzMyNSw3IEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApCiB7CiAJY29uc3QgaW50IG9wZW5fb3B0ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBPX1JET05MWSA6IE9fUkRXUjsKIAljb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0JaW50IGZkOwomIzQzOwlpbnQgZmQsIHJldDsKIAl2b2lkICpwOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIApAQCAtMzY4LDcgJiM0MzszNjksMTEgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cCkKIAkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7bW1hcCgpJiMzNDspOwogCiAJLyogRHJvcCBwYWdlIGNhY2hlICovCi0Jd3JpdGVfZmlsZSgmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyYjMzQ7LCAmIzM0OzMmIzM0OywgMik7CiYjNDM7CXJldCA9IHdyaXRlX2ZpbGUoJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMmIzM0OywgJiMzNDszJiMzNDssIDIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7d3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwomIzQzOwogCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAlyZXR1cm4gcDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKaW5kZXggNWZkNzc5MmEwZDQ3OS4uNjcxMWY0YzYxMzcxMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKQEAgLTE1LDcgJiM0MzsxNSw2IEBACiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICZsdDtpbmNsdWRlL3Zkc28vdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIICYjMzQ7L3N5cy9rZXJuZWwvbW0va3NtLyYjMzQ7CiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKaW5kZXggZjE5ZDUzYzY5NTc2NC4uYTM1ZTJiNTdlMDViMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKQEAgLTUsNyAmIzQzOzUsNiBAQAogICovCiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwpAQCAtMTYsNiAmIzQzOzE1LDcgQEAKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAKICNkZWZpbmUgVFdPTUVHCQkoMiZsdDsmbHQ7MjApCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggZWFkYzcxNTljYTViOS4uMGM1ZGU2ZWMwNmM4MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwpAQCAtMjQsNyAmIzQzOzI0LDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTEwJCShQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8CVwKIAkJCQkJIFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8CVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCmluZGV4IDgyYzZlOTZlYTZlYjMuLmY5ZWMxNDA4YTZlMzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwpAQCAtMTQsNyAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKIAogI2lmbmRlZiBQUl9USFBfRElTQUJMRV9FWENFUFRfQURWSVNFRApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwppbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwpAQCAtNDUsOCAmIzQzOzQ1LDggQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvcHRyYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2V0am1wLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3BrZXktaGVscGVycy5oJiMzNDsKIAogdTY0IHNoYWRvd19wa2V5X3JlZzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggZDA5ZjlmNmEzODRlZS4uYWUwYWI1ZWZhYmFlNiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTEzMCwzMCAmIzQzOzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7CiAJZmkKIH0KIAotcnVuX2d1cF9tYXRyaXgoKSB7Ci0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b24KLSAgICBsb2NhbCBodWdldGxiX21iPTI1NgotCi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgJiMzNDstSCAtbSAkaHVnZXRsYl9tYiYjMzQ7OyBkbwotICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtCi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG8KLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wCi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvCi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkCi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TICYjMzQ7ICYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsCi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCYjMzk7cyBkZWZhdWx0IHRocCBzaXplIChvciAyTSBvbiB4ODYpLCAxMjMgdG8KLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm0KLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiAmIzM0Oy1uIDEmIzM0OyAmIzM0Oy1uIDUxMiYjMzQ7ICYjMzQ7LW4gMTIzJiMzNDsgJiMzNDstbiAtMSYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtCi0gICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICBkb25lCi0gICAgICAgIGRvbmUKLSAgICBkb25lCi19Ci0KICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXMKIEFSQ0g2NFNUUj0mIzM0O2FybTY0IG1pcHM2NCBwYXJpc2M2NCBwcGM2NCBwcGM2NGxlIHJpc2N2NjQgczM5MHggc3BhcmM2NCB4ODZfNjQmIzM0OwogaWYgWyAteiAmIzM0OyRBUkNIJiMzNDsgXTsgdGhlbgpAQCAtMjc1LDE4ICYjNDM7MjUxLDcgQEAgZmkKIAogQ0FURUdPUlk9JiMzNDttbWFwJiMzNDsgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlCiAKLWlmICRSVU5fQUxMOyB0aGVuCi0gICAgcnVuX2d1cF9tYXRyaXgKLWVsc2UKLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gLTEKLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gLTEKLWZpCi0jIER1bXAgcGFnZXMgMCwgMTksIGFuZCA0MDk2LCB1c2luZyBwaW5fdXNlcl9wYWdlczoKLUNBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1jdCAtRiAweDEgMCAxOSAweDEwMDAKJiM0MztDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXAKIENBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF9sb25ndGVybQogCiBDQVRFR09SWT0mIzM0O3VzZXJmYXVsdGZkJiMzNDsgcnVuX3Rlc3QgLi91ZmZkLXVuaXQtdGVzdHMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwppbmRleCA1ZjI3ODkxM2M0ZDc1Li43ZjY0OWI2NzMzNTUzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCkBAIC05LDcgJiM0Mzs5LDYgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIICYjMzQ7L3Byb2Mvc2VsZi9wYWdlbWFwJiMzNDsKICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwppbmRleCA4NmE2MDM2OTI4MjYxLi4wZTA4M2FiNzFhZjYwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiB1aW50NjRfdCBwYWdlc2l6ZTsKIHVuc2lnbmVkIGludCBwYWdlc2hpZnQ7CkBAIC0xNDYsNyAmIzQzOzE0NSwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCWlmIChyZXQgJmd0Oz0gSU5QVVRfTUFYKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslczogRGVidWdmcyBpbnB1dCBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAotCXdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7d3JpdGVfZmlsZSglcyk6ICVzXG4mIzM0OywgU1BMSVRfREVCVUdGUywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwogfQogCiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQikKICNkZWZpbmUgTUFQX0hVR0VUTEIJMHg0MDAwMApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCmluZGV4IDhlYjBjNTYzMGU3ZTMuLjk2ZjcyODk4ZWJlMGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKQEAgLTE3LDcgJiM0MzsxNyw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogaW50IGJhY2tpbmdfZmQgPSAtMTsKIGludCBtbWFwX2ZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oCmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaApAQCAtMzcsNyAmIzQzOzM3LDYgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFVGRkRfRkxBR1MJKE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwppbmRleCBjOTczZDY3MjI3MjBjLi5lYjRiMjQzM2IwMGU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMKQEAgLTcsOCAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9odWdlcGFnZV9zZXR0aW5ncy5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt1ZmZkLWNvbW1vbi5oJiMzNDsKIAogc3RhdGljIGludCBwYWdlbWFwX2ZkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jCmluZGV4IGUyNGQ3YmEwMGI0NDEuLjVhMzU0YTY2NGQxZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMKQEAgLTExLDcgJiM0MzsxMSw2IEBACiAKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogLyoKICAqIFRoZSBoaW50IGFkZHIgdmFsdWUgaXMgdXNlZCB0byBhbGxvY2F0ZSBhZGRyZXNzZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwppbmRleCA0ODIxYTM1NjMwMzYzLi5mODkxNmIyYWJjMmVmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCkBAIC04ODUsMTExICYjNDM7ODg1LDU0IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJcmV0dXJuIHJldCAmZ3Q7IDAgPyAwIDogLWVycm5vOwogfQogCi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsKLQlpbnQgZmQ7Ci0Jc3NpemVfdCBudW1yZWFkOwotCi0JZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKLQlpZiAoZmQgPT0gLTEpCi0JCXJldHVybiAwOwotCi0JbnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7Ci0JaWYgKG51bXJlYWQgJmx0OyAxKSB7Ci0JCWNsb3NlKGZkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JYnVmW251bXJlYWRdID0gJiMzOTtcMCYjMzk7OwotCWNsb3NlKGZkKTsKLQotCXJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkOwotfQotCi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpCi17Ci0JaW50IGZkLCBzYXZlZF9lcnJubzsKLQlzc2l6ZV90IG51bXdyaXR0ZW47Ci0KLQlpZiAoYnVmbGVuICZsdDsgMikKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7SW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxuJiMzNDssIGJ1Zmxlbik7Ci0KLQlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOwotCWlmIChmZCA9PSAtMSkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgb3BlbiBmYWlsZWQ6ICVzXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLQotCW51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTsKLQlzYXZlZF9lcnJubyA9IGVycm5vOwotCWNsb3NlKGZkKTsKLQllcnJubyA9IHNhdmVkX2Vycm5vOwotCWlmIChudW13cml0dGVuICZsdDsgMCkgewotCQlpZiAoaWdub3JlX2VpbnZhbCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCkKLQkJCXJldHVybjsKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xuJiMzNDssIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLAotCQkJCWJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKLQl9Ci0JaWYgKG51bXdyaXR0ZW4gIT0gYnVmbGVuIC0gMSkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgd3JpdGUoJS4qcykgaXMgdHJ1bmNhdGVkLCBleHBlY3RlZCAlenUgYnl0ZXMsIGdvdCAlemQgYnl0ZXNcbiYjMzQ7LAotCQkJCXBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pOwotfQotCi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewotCV9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTsKLX0KLQotdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKQotewotCWNoYXIgYnVmWzIxXTsKLQotCWlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQotCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtyZWFkX2ZpbGUoKSYjMzQ7KTsKLQotCXJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotfQotCi1zdGF0aWMgdm9pZCBfX3dyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSwgYm9vbCBpZ25vcmVfZWludmFsKQotewotCWNoYXIgYnVmWzIxXTsKLQotCXNwcmludGYoYnVmLCAmIzM0OyVsdSYjMzQ7LCBudW0pOwotCV9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEsIGlnbm9yZV9laW52YWwpOwotfQotCi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSkKLXsKLQlyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpOwotfQotCi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKQotewotCXJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7CiAKIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCkKIHsKLQlpZiAoc2htbWF4KQotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCBzaG1tYXgpOwotCWlmIChzaG1hbGwpCi0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIHNobWFsbCk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChzaG1tYXgpIHsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIHNobW1heCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBzaG1tYXg6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKJiM0MzsJfQomIzQzOwlpZiAoc2htYWxsKSB7CiYjNDM7CQlyZXQgPSB3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBzaG1hbGwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgc2htYWxsOiAlc1xuJiMzNDssCiYjNDM7CQkJCQkgICBzdHJlcnJvcigtcmV0KSk7CiYjNDM7CX0KIH0KIAogdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpCiB7CiAJdW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0OywgJmFtcDt2YWwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xuJiMzNDssCiYjNDM7CQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKIAotCXZhbCA9IHJlYWRfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0Oyk7CiAJaWYgKHZhbCAmbHQ7IGxlbmd0aCkgewotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCBsZW5ndGgpOwomIzQzOwkJcmV0ID0gd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0OywgbGVuZ3RoKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIGxlbmd0aCwgc3RyZXJyb3IoLXJldCkpOwogCQlzaG1tYXggPSB2YWw7CiAJfQogCi0JdmFsID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7KTsKJiM0MzsJcmV0ID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwogCWlmICh2YWwgJmx0OyBucikgewotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBucik7CiYjNDM7CQlyZXQgPSB3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBucik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htYWxsOiAlc1xuJiMzNDssCiYjNDM7CQkJCQkgICBuciwgc3RyZXJyb3IoLXJldCkpOwogCQlzaG1hbGwgPSB2YWw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCmluZGV4IDlhNDlhZjg4NzAyZTQuLjY0YTg2ZThhMGM0MWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKQEAgLTgsNiAmIzQzOzgsOCBAQAogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OyAvKiBfU0NfUEFHRVNJWkUgKi8KICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2ZpbGVfdXRpbHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCAmbHQ7Jmx0OyAobnIpKQogI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KQpAQCAtMTY2LDEyICYjNDM7MTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7CiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpCSgoKGVudCkgJmFtcDsgKDF1bGwgJmx0OyZsdDsgNjMpKSAhPSAwKQogI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpCSgoZW50KSAmYW1wOyAoKDF1bGwgJmx0OyZsdDsgNTUpIC0gMSkpCiAKLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotaW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTsKLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTsKLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pOwotCiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aCk7CiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzcwCgkJCQkJCQlvdXRwdXQ6IDY0CgkJCQkJCQl0aG91Z2h0czogMTQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogRGV0ZXJtaW5pbmcgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGZ1enppbmcuIEZpcnN0LCBJJiMzOTttIGV4YW1pbmluZyB0aGUgZGlmZiB0byBzZWUgd2hhdCYjMzk7cyBiZWVuIHRvdWNoZWQuIEkgc2VlIGNoYW5nZXMgaW4gYERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0YCwgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZSAoc3RhbmRhcmQgc3R1ZmYpLCBhbmQgYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgdGhlIGhlbHAgdGV4dCBmb3IgYENPTkZJR19HVVBfVEVTVGAuIFRoZXJlJiMzOTtzIGFsc28gYSBzaWduaWZpY2FudCByZXNodWZmbGluZyBvZiBmaWxlcyB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgd2l0aCBhZGRpdGlvbnMgdG8gYHRvb2xzL2xpYi9tbS9gIGFuZCBhIG1hc3MgbWlncmF0aW9uL3JlbmFtaW5nIG9mIHNlbGZ0ZXN0cyB0byB0aGUgdG9vbHMvbW0vIGRpcmVjdG9yeSwgYnV0IHRoZXNlIGFyZSBwcmltYXJpbHkgdGVzdCB1dGlsaXRpZXMgYW5kIGxpYnJhcmllcy4KCk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uICphY3R1YWwqIGtlcm5lbCBjb2RlIGNoYW5nZXMuICBMb29raW5nIGNsb3NlbHkgYXQgdGhlIGBtbS9LY29uZmlnYCBjaGFuZ2UsIGl0JiMzOTtzIHN0cmljdGx5IGNvc21ldGljOyBpdCYjMzk7cyBqdXN0IG1vZGlmaWVkIHRoZSBoZWxwIHRleHQgdG8gbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBpbmNsdWRlcyBiZW5jaG1hcmtzLCBub3QganVzdCB1bml0IHRlc3RzLiAgVGhpcyBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5LCBhcyBjaGFuZ2luZyB0aGUgS2NvbmZpZyBoZWxwIHRleHQgZG9lcyBub3QgYWx0ZXIgdGhlIHVuZGVybHlpbmcga2VybmVsIGZ1bmN0aW9uYWxpdHkuCgpFc3NlbnRpYWxseSwgKmFsbCogdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGRvY3VtZW50YXRpb24sIG1haW50YWluZXJzLCBLY29uZmlnIGhlbHAgdGV4dCwgYW5kIHVzZXJzcGFjZSB0ZXN0IGluZnJhc3RydWN0dXJlIHdpdGhpbiB0aGUgdG9vbHMgZGlyZWN0b3J5LiBObyBjb3JlIGtlcm5lbCBjb2RlIGlzIGFmZmVjdGVkLgoKTm93LCBsZXQmIzM5O3MgdXNlIHRoZSBwcm92aWRlZCBndWlkZWxpbmVzIHRvIHF1aWNrbHkgZXZhbHVhdGUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aHkgb2YgZnV6emluZy4gQWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSwgYSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IHJlc3VsdCBpcyBhcHByb3ByaWF0ZSBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBkb2N1bWVudGF0aW9uIG1vZGlmaWNhdGlvbnMsIEtjb25maWcgY2hhbmdlcyAoc3BlY2lmaWNhbGx5IGhlbHAgdGV4dCwgd2hpY2ggdGhpcyBpcyksIGNoYW5nZXMgaW4gY29tbWVudHMsIG9yIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuIFVzZXItc3BhY2UgdXRpbGl0aWVzIG9yIHRlc3RzIGFyZSBhbHNvIG5vdCB0byBiZSBpbmNsdWRlZC4gVGhpcyBwYXRjaCB0aWNrcyBhbGwgdGhvc2UgYm94ZXMuIEl0IGlzIG1vZGlmeWluZyBkb2N1bWVudGF0aW9uLCBLY29uZmlnJiMzOTtzIGhlbHAgdGV4dCwgYW5kIHRlc3QgZmlsZXMgaW4gYHRvb2xzL2AsIHNvIGRlZmluaXRlbHkgbm90IHdvcnRoIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGlzOiB0aGlzIHBhdGNoIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhpcyByZWFzb25pbmcgYnkgaXNzdWluZyB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBEb2N1bWVudGF0aW9uLCBNQUlOVEFJTkVSUywgS2NvbmZpZyBoZWxwIHRleHQsIGFuZCB1c2Vyc3BhY2UgdG9vbGluZy9zZWxmdGVzdHMgdW5kZXIgdG9vbHMvLiBObyBrZXJuZWwgcnVudGltZSBsb2dpYyBpcyBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgRG9jdW1lbnRhdGlvbiwgTUFJTlRBSU5FUlMsIEtjb25maWcgaGVscCB0ZXh0LCBhbmQgdXNlcnNwYWNlIHRvb2xpbmcvc2VsZnRlc3RzIHVuZGVyIHRvb2xzLy4gTm8ga2VybmVsIHJ1bnRpbWUgbG9naWMgaXMgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDoyNjoxMi44NzczMzc2ODdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjA2MDYzODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBEb2N1bWVudGF0aW9uLCBNQUlOVEFJTkVSUywgS2NvbmZpZyBoZWxwIHRleHQsIGFuZCB1c2Vyc3BhY2UgdG9vbGluZy9zZWxmdGVzdHMgdW5kZXIgdG9vbHMvLiBObyBrZXJuZWwgcnVudGltZSBsb2dpYyBpcyBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA0OjI2OjEyLjg3NzM0MTc0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMjQ0NzE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdkNWFlMGQ5NDYwOWZmYmZiM2MzYjYyNTIxN2YyYmE4NmY4Zjc2ZTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDQ6MjY6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxcbmluZGV4IGMxNmNhMTYzYjU1ZTMuLmUwYWNlZGJkMWQ0ODYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxcbkBAIC0yMjYsMTUgKzIyNiw2IEBAIHdpbGwgYmUgcGlubmVkIGxvbmd0ZXJtLCBhbmQgd2hvc2UgZGF0YSB3aWxsIGJlIGFjY2Vzc2VkLlxcbiBcXG4gVW5pdCB0ZXN0aW5nXFxuID09PT09PT09PT09PVxcbi1UaGlzIGZpbGU6Olxcbi1cXG4tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4tXFxuLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczpcXG4tXFxuLSogUElOX0ZBU1RfQkVOQ0hNQVJLICguL2d1cF90ZXN0IC1hKVxcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxcbi1cXG4gWW91IGNhbiBtb25pdG9yIGhvdyBtYW55IHRvdGFsIGRtYS1waW5uZWQgcGFnZXMgaGF2ZSBiZWVuIGFjcXVpcmVkIGFuZCByZWxlYXNlZFxcbiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OlxcbiBcXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IGEzMTY3YmNiZTU4OTcuLjU0OGJjZjAwOGU3OTkgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xNzE3Myw4ICsxNzE3Myw5IEBAIFQ6XFx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ha3BtL21tXFxuIEY6XFx0bW0vZ3VwLmNcXG4gRjpcXHRtbS9ndXBfdGVzdC5jXFxuIEY6XFx0bW0vZ3VwX3Rlc3QuaFxcbitGOlxcdHRvb2xzL21tL2d1cF9iZW5jaC5jXFxuK0Y6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcXG4gRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbi1GOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4gXFxuIE1FTU9SWSBNQU5BR0VNRU5UIC0gS1NNIChLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZylcXG4gTTpcXHRBbmRyZXcgTW9ydG9uIFxcdTAwM2Nha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnXFx1MDAzZVxcbkBAIC0xNzI3Nyw2ICsxNzI3OCw3IEBAIEY6XFx0bW0vbWVtb3J5LXRpZXJzLmNcXG4gRjpcXHRtbS9wYWdlX2lkbGUuY1xcbiBGOlxcdG1tL3BnYWxsb2MtdHJhY2suaFxcbiBGOlxcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcXG4rRjpcXHR0b29scy9saWIvbW0vXFxuIEY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXFxuIFxcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIE5VTUEgTUVNQkxPQ0tTIEFORCBOVU1BIEVNVUxBVElPTlxcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDYwNGM1ODE5OWFjYmYuLjBiZDI5OGM3NzQ0NjEgMTAwNjQ0XFxuLS0tIGEvbW0vS2NvbmZpZ1xcbisrKyBiL21tL0tjb25maWdcXG5AQCAtMTI5MiwyNCArMTI5MiwyMyBAQCBjb25maWcgUEVSQ1BVX1NUQVRTXFxuIFxcdCAgYmUgdXNlZCB0byBoZWxwIHVuZGVyc3RhbmQgcGVyY3B1IG1lbW9yeSB1c2FnZS5cXG4gXFxuIGNvbmZpZyBHVVBfVEVTVFxcbi1cXHRib29sIFxcXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzXFxcIlxcbitcXHRib29sIFxcXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzIGFuZCBiZW5jaG1hcmtzXFxcIlxcbiBcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIFxcdGhlbHBcXG4gXFx0ICBQcm92aWRlcyAvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcyBhIHdheVxcbi1cXHQgIHRvIG1ha2UgaW9jdGwgY2FsbHMgdGhhdCBjYW4gbGF1bmNoIGtlcm5lbC1iYXNlZCB1bml0IHRlc3RzIGZvclxcbi1cXHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cXG4rXFx0ICB0byBtYWtlIGlvY3RsIGNhbGxzIHRoYXQgY2FuIGxhdW5jaCBrZXJuZWwtYmFzZWQgdW5pdCB0ZXN0cyBhbmRcXG4rXFx0ICBiZW5jaG1hcmtzIGZvciB0aGUgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpIGZhbWlsaWVzXFxuK1xcdCAgb2YgQVBJIGNhbGxzLlxcbiBcXG4tXFx0ICBUaGVzZSB0ZXN0cyBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxcbi1cXHQgIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSwgYXMgd2VsbCBhcyBzbW9rZSB0ZXN0cyBvZlxcbitcXHQgIFRoZXNlIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mXFxuK1xcdCAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHRlc3RzIG9mXFxuIFxcdCAgdGhlIG5vbi1fZmFzdCB2YXJpYW50cy5cXG4gXFxuLVxcdCAgVGhlcmUgaXMgYWxzbyBhIHN1Yi10ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55XFxuLVxcdCAgb2YgdXAgdG8gZWlnaHQgcGFnZXMgKHNlbGVjdGVkIGJ5IGNvbW1hbmQgbGluZSBhcmdzKSB3aXRoaW4gdGhlXFxuLVxcdCAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYVxcbi1cXHQgIHBpbl91c2VyX3BhZ2VzKigpLCBvciBwaW5uZWQgdmlhIGdldF91c2VyX3BhZ2VzKigpLCBhcyBzcGVjaWZpZWRcXG4tXFx0ICBieSBvdGhlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzLlxcbitcXHQgIFRoZXJlIGlzIGFsc28gYSB0ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55IG9mIHVwXFxuK1xcdCAgdG8gZWlnaHQgcGFnZXMgd2l0aGluIHRoZSByYW5nZSBvZiB1c2VyLXNwYWNlIGFkZHJlc3Nlcy4gVGhlc2VcXG4rXFx0ICBwYWdlcyBhcmUgZWl0aGVyIGFjcXVpcmVkIHZpYSBwaW5fdXNlcl9wYWdlcyooKSBvciBnZXRfdXNlcl9wYWdlcyooKS5cXG4gXFxuLVxcdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rXFx0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYW5kIHRvb2xzL21tL2d1cF9iZW5jaC5jLlxcbiBcXG4gY29tbWVudCBcXFwiR1VQX1RFU1QgbmVlZHMgdG8gaGF2ZSBERUJVR19GUyBlbmFibGVkXFxcIlxcbiBcXHRkZXBlbmRzIG9uICFHVVBfVEVTVCBcXHUwMDI2XFx1MDAyNiAhREVCVUdfRlNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjliMjIzN2U5ODIzZTlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbkBAIC0wLDAgKzEsMTA2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZmlsZV91dGlscy5oXFxcIlxcbitcXG4raW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXFxuK3tcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcdHNzaXplX3QgbnVtcmVhZDtcXG4rXFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCA9PSAtMSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbitcXHRpZiAobnVtcmVhZCBcXHUwMDNjIDEpIHtcXG4rXFx0XFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLWVycjtcXG4rXFx0fVxcbitcXG4rXFx0YnVmW251bXJlYWRdID0gJ1xcXFwwJztcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4re1xcbitcXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xcbitcXHRzc2l6ZV90IG51bXdyaXR0ZW47XFxuK1xcbitcXHRpZiAoYnVmbGVuIFxcdTAwM2MgMilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xcbitcXHRpZiAoZmQgPT0gLTEpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XFxuK1xcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFxuK1xcdGlmIChudW13cml0dGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1zYXZlZF9lcnJubztcXG4rXFxuK1xcdGlmIChudW13cml0dGVuICE9IChzc2l6ZV90KShidWZsZW4gLSAxKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFx0Y2hhciBidWZbMjFdO1xcbitcXHRjaGFyICplbmQ7XFxuK1xcbitcXHRpZiAoIW51bSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBSZWplY3Qgc2lnbnMgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZSB0aGF0IGFyZSBhY2NlcHRlZCBieSBzdHJ0b3VsKCkgKi9cXG4rXFx0aWYgKGJ1ZlswXSBcXHUwMDNjICcwJyB8fCBidWZbMF0gXFx1MDAzZSAnOScpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0ZXJybm8gPSAwO1xcbitcXHR2YWwgPSBzdHJ0b3VsKGJ1ZiwgXFx1MDAyNmVuZCwgMTApO1xcbitcXHRpZiAoZXJybm8pXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHQvKiBPbmx5IGFsbG93IGEgbmV3bGluZSBhZnRlciB0aGUgbnVtYmVyICovXFxuK1xcdGlmICgqZW5kID09ICdcXFxcbicpXFxuK1xcdFxcdGVuZCsrO1xcbitcXG4rXFx0aWYgKCplbmQgIT0gJ1xcXFwwJylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQqbnVtID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4re1xcbitcXHRjaGFyIGJ1ZlsyMV07XFxuK1xcbitcXHRzcHJpbnRmKGJ1ZiwgXFxcIiVsdVxcXCIsIG51bSk7XFxuK1xcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxKTtcXG4rfVxcbitcXG4raW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcXG4rXFx0cmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTBkYWE4MmMyYjJiNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXFxuQEAgLTAsMCArMSwxMyBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cXG4rI2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjc3RkZGVmLmhcXHUwMDNlXFxuK1xcbitpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pO1xcbitpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4raW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5zaW1pbGFyaXR5IGluZGV4IDg3JVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5pbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG4rKysgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbkBAIC04LDEyICs4LDE4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiBcXG4tI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImZpbGVfdXRpbHMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFRIUF9TWVNGUyBcXFwiL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvXFxcIlxcbiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0XFxuK1xcbisjaWZuZGVmIEFSUkFZX1NJWkVcXG4rI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdO1xcbiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4O1xcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5ncztcXG5AQCAtNDgsNiArNTQsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG1lbV9lbmFibGVkX3N0cmluZ3NbXSA9IHtcXG4gXFx0TlVMTFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IHJldClcXG4re1xcbitcXHRwcmludGYoXFxcIiMgJXM6ICVzICglZClcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKC1yZXQpLCAtcmV0KTtcXG4rfVxcbitcXG4gaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuQEAgLTYxLDggKzcyLDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XFxuLVxcdFxcdHBlcnJvcihwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTAzLDEyICsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSArIDEpO1xcbitcXHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBsb25nIG51bTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJldCA9IHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBUSFBfU1lTRlMgXFxcIiVzXFxcIiwgbmFtZSk7XFxuQEAgLTExNiw3ICsxMzMsMTMgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHJldHVybiByZWFkX251bShwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0ocGF0aCwgXFx1MDAyNm51bSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnVtO1xcbiB9XFxuIFxcbiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXFxuQEAgLTEyOSw3ICsxNTIsMTEgQEAgdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbiBcXHRcXHRwcmludGYoXFxcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4tXFx0d3JpdGVfbnVtKHBhdGgsIG51bSk7XFxuK1xcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbkBAIC0xNTcsOCArMTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXFxuIFxcdFxcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXFxcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXFxcIiksXFxuIFxcdFxcdC5wYWdlc190b19zY2FuID0gdGhwX3JlYWRfbnVtKFxcXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cXFwiKSxcXG4gXFx0fTtcXG4tXFx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXFxuLVxcdFxcdHNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCk7XFxuK1xcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XFxuK1xcdFxcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2c2V0dGluZ3MtXFx1MDAzZXJlYWRfYWhlYWRfa2IpO1xcbitcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xcbitcXHRcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX09SREVSUzsgaSsrKSB7XFxuIFxcdFxcdGlmICghKCgxIFxcdTAwM2NcXHUwMDNjIGkpIFxcdTAwMjYgb3JkZXJzKSkge1xcbkBAIC0yMDgsOCArMjQyLDE1IEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbiBcXHR0aHBfd3JpdGVfbnVtKFxcXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFxcXCIsIGtodWdlcGFnZWQtXFx1MDAzZW1heF9wdGVzX3NoYXJlZCk7XFxuIFxcdHRocF93cml0ZV9udW0oXFxcImtodWdlcGFnZWQvcGFnZXNfdG9fc2NhblxcXCIsIGtodWdlcGFnZWQtXFx1MDAzZXBhZ2VzX3RvX3NjYW4pO1xcbiBcXG4tXFx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXFxuLVxcdFxcdHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCBzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYik7XFxuK1xcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XFxuK1xcdFxcdGludCByZXQgPSB3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICAgIHNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcXG4rXFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xcbiBcXHRcXHRpZiAoISgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IG9yZGVycykpXFxuQEAgLTMwNyw4ICszNDgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdG9yZGVycyB8PSAxVUwgXFx1MDAzY1xcdTAwM2MgaTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9FTlQpIHtcXG4rXFx0XFx0XFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvcmRlcnMgfD0gMVVMIFxcdTAwM2NcXHUwMDNjIGk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBvcmRlcnM7XFxuQEAgLTM4Miw4ICs0MzAsNyBAQCBpbnQgZGV0ZWN0X2h1Z2V0bGJfcGFnZV9zaXplcyh1bnNpZ25lZCBsb25nIHNpemVzW10sIGludCBtYXgpXFxuIFxcdFxcdGlmIChzc2NhbmYoZW50cnktXFx1MDAzZWRfbmFtZSwgXFxcImh1Z2VwYWdlcy0lenVrQlxcXCIsIFxcdTAwMjZrYikgIT0gMSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdHNpemVzW2NvdW50KytdID0ga2IgKiAxMDI0O1xcbi1cXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICAga2IpO1xcbitcXHRcXHRwcmludGYoXFxcIiMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxcXG5cXFwiLCBrYik7XFxuIFxcdH1cXG4gXFx0Y2xvc2VkaXIoZGlyKTtcXG4gXFx0cmV0dXJuIGNvdW50O1xcbkBAIC00MjUsMjggKzQ3Miw0OSBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3N5c2ZzX3BhdGgoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLFxcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFxcdTAwMjZucik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnI7XFxuIH1cXG4gXFxuIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHR3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XFxuK1xcdHJldCA9IHdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwiZnJlZV9odWdlcGFnZXNcXFwiKTtcXG4gXFxuLVxcdHJldHVybiByZWFkX251bShwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0ocGF0aCwgXFx1MDAyNm5yKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBucjtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgX19odWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcXG5AQCAtNTAyLDcgKzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKG5yX2VuYWJsZWQgXFx1MDAzZSBtYXgpIHtcXG4tXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXFxcblxcXCIsIG5yX2VuYWJsZWQsIG1heCk7XFxuK1xcdFxcdHByaW50ZihcXFwiIyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgbnJfZW5hYmxlZCwgbWF4KTtcXG4gXFx0XFx0bnJfZW5hYmxlZCA9IG1heDtcXG4gXFx0fVxcbiBcXG5AQCAtNTc0LDggKzY0MywxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19zaWdoYW5kbGVyKGludCBzaWcpXFxuIHtcXG4rXFx0KHZvaWQpc2lnO1xcbitcXG4gXFx0LyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqL1xcbi1cXHRleGl0KEtTRlRfRkFJTCk7XFxuK1xcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gfVxcbiBcXG4gdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li4xNTRkNzQwYmUwMmU4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcXG4rKysgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuQEAgLTMsMyArMyw0IEBAIHNsYWJpbmZvXFxuIHBhZ2UtdHlwZXNcXG4gcGFnZV9vd25lcl9zb3J0XFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK2d1cF9iZW5jaFxcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXFxuaW5kZXggODU4MTg2YTZlZWZkYi4uZjIwYTMyZDhjYzIyZSAxMDA2NDRcXG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL21tL01ha2VmaWxlXFxuQEAgLTMsMTMgKzMsMTUgQEBcXG4gI1xcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxcbiBcXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyXFxuK0JVSUxEX1RBUkdFVFMgKz0gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xcbiBcXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcXG4rR1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jXFxuIFxcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcXG4rQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWRcXG4gTERGTEFHUyArPSAkKExJQlMpIC1wdGhyZWFkXFxuIFxcbiBhbGw6ICQoQlVJTERfVEFSR0VUUylcXG5AQCAtMjIsOCArMjQsMTEgQEAgJChMSUJTKTpcXG4gJTogJS5jXFxuIFxcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXFx1MDAzYyAkKExERkxBR1MpXFxuIFxcbitndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUylcXG4rXFx0JChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUylcXG4rXFxuIGNsZWFuOlxcbi1cXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitcXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcXG4gXFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXFxuIFxcbiBzYmluZGlyID89IC91c3Ivc2JpblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5zaW1pbGFyaXR5IGluZGV4IDUwJVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG5yZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5pbmRleCAzZjg0MWE5NmY4NzA2Li5lNmE4MGJhNTE5NWE3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rKysgYi90b29scy9tbS9ndXBfYmVuY2guY1xcbkBAIC0xMCwxMSArMTAsMTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3B0aHJlYWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2Fzc2VydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NtbS9ndXBfdGVzdC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgTUIgKDFVTCBcXHUwMDNjXFx1MDAzYyAyMClcXG4gXFxuQEAgLTM4LDEyICszNyw2IEBAIHN0YXRpYyBjaGFyICpjbWRfdG9fc3RyKHVuc2lnbmVkIGxvbmcgY21kKVxcbiBcXHRcXHRyZXR1cm4gXFxcIlBJTl9GQVNUX0JFTkNITUFSS1xcXCI7XFxuIFxcdGNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzpcXG4gXFx0XFx0cmV0dXJuIFxcXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFxcIjtcXG4tXFx0Y2FzZSBHVVBfQkFTSUNfVEVTVDpcXG4tXFx0XFx0cmV0dXJuIFxcXCJHVVBfQkFTSUNfVEVTVFxcXCI7XFxuLVxcdGNhc2UgUElOX0JBU0lDX1RFU1Q6XFxuLVxcdFxcdHJldHVybiBcXFwiUElOX0JBU0lDX1RFU1RcXFwiO1xcbi1cXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxcbi1cXHRcXHRyZXR1cm4gXFxcIkRVTVBfVVNFUl9QQUdFU19URVNUXFxcIjtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gXFxcIlVua25vd24gY29tbWFuZFxcXCI7XFxuIH1cXG5AQCAtNTMsMzkgKzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcXG4gXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcXG4gXFx0aW50IGksIHN0YXR1cztcXG4gXFxuLVxcdC8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovXFxuLVxcdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XFxuLVxcdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmVwZWF0czsgaSsrKSB7XFxuLVxcdFxcdFxcdGd1cC5zaXplID0gc2l6ZTtcXG4tXFx0XFx0XFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFxcdTAwMjZndXApO1xcbi1cXHRcXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlcGVhdHM7IGkrKykge1xcbitcXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuK1xcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4rXFx0XFx0aWYgKHN0YXR1cykge1xcbitcXHRcXHRcXHRpbnQgZXJyID0gZXJybm87XFxuIFxcbiBcXHRcXHRcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1xcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGd1cC5wdXRfZGVsdGFfdXNlYyk7XFxuLVxcdFxcdFxcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxcbi1cXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcIiwgZ3VwLnNpemUpO1xcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIlcyBpb2N0bCBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBjbWRfdG9fc3RyKGNtZCksXFxuK1xcdFxcdFxcdFxcdHN0cmVycm9yKGVycikpO1xcbiBcXHRcXHRcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbitcXHRcXHRcXHRyZXR1cm4gZGF0YTtcXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuLVxcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4tXFx0XFx0aWYgKHN0YXR1cylcXG4tXFx0XFx0XFx0Z290byByZXR1cm5fO1xcbiBcXG4gXFx0XFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCIlczogZG9uZVxcXFxuXFxcIiwgY21kX3RvX3N0cihjbWQpKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcXFwiLFxcbitcXHRcXHRcXHRjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcXG4rXFx0XFx0XFx0Z3VwLnB1dF9kZWx0YV91c2VjKTtcXG4gXFx0XFx0aWYgKGd1cC5zaXplICE9IHNpemUpXFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJUcnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcXG5cXFwiLCBndXAuc2l6ZSk7XFxuK1xcdFxcdFxcdHByaW50ZihcXFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcIiwgZ3VwLnNpemUpO1xcbitcXHRcXHRwcmludGYoXFxcIlxcXFxuXFxcIik7XFxuIFxcdFxcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuIFxcdH1cXG4gXFxuLXJldHVybl86XFxuLVxcdGtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgXFxcImlvY3RsIHN0YXR1cyAlZFxcXFxuXFxcIiwgc3RhdHVzKTtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuQEAgLTkzLDM4ICs3NiwyMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIHtcXG4gXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbiBcXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcXG4tXFx0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XFxuK1xcdGludCBmbGFncyA9IE1BUF9QUklWQVRFLCBzdGFydGVkX3RocmVhZHMgPSAwLCBleGl0X3N0YXR1cyA9IDE7XFxuIFxcdGNoYXIgKmZpbGUgPSBcXFwiL2Rldi96ZXJvXFxcIjtcXG4tXFx0Ym9vbCBodWdldGxiID0gZmFsc2U7XFxuK1xcdGJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTtcXG4rXFx0dm9pZCAqdGhyZWFkX3Jlc3VsdDtcXG4gXFx0cHRocmVhZF90ICp0aWQ7XFxuIFxcdGNoYXIgKnA7XFxuIFxcbi1cXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwibTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcXFwiKSkgIT0gLTEpIHtcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcIm06cjpuOkY6Zjphajp0VEx1d1dTSFxcXCIpKSAhPSAtMSkge1xcbiBcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbiBcXHRcXHRjYXNlICdhJzpcXG4gXFx0XFx0XFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnYic6XFxuLVxcdFxcdFxcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAnTCc6XFxuIFxcdFxcdFxcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdjJzpcXG4tXFx0XFx0XFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5XFxuLVxcdFxcdFxcdCAqIHVzZXIncyBub24tb3B0aW9uIGFyZ3VtZW50cy5cXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcXFwiZG9cXG4tXFx0XFx0XFx0ICogbm90aGluZ1xcXCIuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAncCc6XFxuLVxcdFxcdFxcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xcbi1cXHRcXHRcXHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ0YnOlxcbiBcXHRcXHRcXHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xcbiBcXHRcXHRcXHRndXAuZ3VwX2ZsYWdzID0gc3RydG9sKG9wdGFyZywgMCwgMCk7XFxuQEAgLTE0MSw3ICsxMDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdGNhc2UgJ24nOlxcbiBcXHRcXHRcXHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcXG4gXFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0bnJfcGFnZXMgPSBzaXplIC8gcHNpemUoKTtcXG4rXFx0XFx0XFx0XFx0bnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ3QnOlxcbiBcXHRcXHRcXHR0aHAgPSAxO1xcbkBAIC0xNDksOSArMTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRjYXNlICdUJzpcXG4gXFx0XFx0XFx0dGhwID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ1UnOlxcbi1cXHRcXHRcXHRjbWQgPSBHVVBfQkFTSUNfVEVTVDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ3UnOlxcbiBcXHRcXHRcXHRjbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xNzMsNTIgKzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdGh1Z2V0bGIgPSB0cnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJXcm9uZyBhcmd1bWVudFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV3JvbmcgYXJndW1lbnRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRleGl0KDEpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChvcHRpbmQgXFx1MDAzYyBhcmdjKSB7XFxuLVxcdFxcdGludCBleHRyYV9hcmdfY291bnQgPSAwO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBGb3IgZXhhbXBsZTpcXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDFcXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5N1xcbi1cXHRcXHQgKi9cXG4tXFxuLVxcdFxcdHdoaWxlICgob3B0aW5kIFxcdTAwM2MgYXJnYykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXFx1MDAzYyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cXG4tXFx0XFx0XFx0ICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSArIDE7XFxuLVxcbi1cXHRcXHRcXHRndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7XFxuLVxcdFxcdFxcdGV4dHJhX2FyZ19jb3VudCsrO1xcbi1cXHRcXHRcXHRvcHRpbmQrKztcXG4tXFx0XFx0fVxcbitcXHRpZiAob3B0aW5kICE9IGFyZ2MpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJVbmV4cGVjdGVkIGFyZ3VtZW50ICclcydcXFxcblxcXCIsIGFyZ3Zbb3B0aW5kXSk7XFxuK1xcdFxcdGV4aXQoMSk7XFxuIFxcdH1cXG4gXFxuLVxcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGlmIChnZXR1aWQoKSkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoaHVnZXRsYikge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XFxuIFxcbi1cXHRcXHRpZiAoIWhwX3NpemUpXFxuLVxcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJIdWdlVExCIGlzIHVuYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0aWYgKCFocF9zaXplKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiQ291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRzaXplID0gKHNpemUgKyBocF9zaXplIC0gMSkgXFx1MDAyNiB+KGhwX3NpemUgLSAxKTtcXG4tXFx0XFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKVxcbi1cXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiTm90IGVub3VnaCBodWdlIHBhZ2VzXFxcXG5cXFwiKTtcXG4rXFx0XFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiTm90IGVub3VnaCBodWdlIHBhZ2VzXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XFxuLVxcbiBcXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xcbi1cXHRpZiAoZmlsZWQgXFx1MDAzYyAwKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIlVuYWJsZSB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0aWYgKGZpbGVkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlVuYWJsZSB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4gXFxuIFxcdGd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzO1xcbiBcXHRpZiAod3JpdGUpXFxuQEAgLTIyNywyNiArMTc5LDI0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xcbiBcXHRpZiAoZ3VwX2ZkID09IC0xKSB7XFxuIFxcdFxcdHN3aXRjaCAoZXJybm8pIHtcXG4tXFx0XFx0Y2FzZSBFQUNDRVM6XFxuLVxcdFxcdFxcdGlmIChnZXR1aWQoKSlcXG4tXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBFTk9FTlQ6XFxuIFxcdFxcdFxcdGlmIChvcGVuZGlyKFxcXCIvc3lzL2tlcm5lbC9kZWJ1Z1xcXCIpID09IE5VTEwpXFxuLVxcdFxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJtb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImNoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImZhaWxlZCB0byBvcGVuICVzOiAlc1xcXFxuXFxcIiwgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsXFxuK1xcdFxcdFxcdFxcdHN0cmVycm9yKGVycm5vKSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcXFxuXFxcIik7XFxuLVxcdFxcdGtzZnRfZXhpdF9wYXNzKCk7XFxuK1xcdFxcdGdvdG8gZXJyX2Nsb3NlX2ZpbGVkO1xcbiBcXHR9XFxuIFxcbiBcXHRwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgZmlsZWQsIDApO1xcbi1cXHRpZiAocCA9PSBNQVBfRkFJTEVEKVxcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1tYXA6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibW1hcDogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdGdvdG8gZXJyX2Nsb3NlX2d1cF9mZDtcXG4rXFx0fVxcbiBcXHRndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7XFxuIFxcbiBcXHRpZiAodGhwID09IDEpXFxuQEAgLTI1NSwyMSArMjA1LDQ0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0bWFkdmlzZShwLCBzaXplLCBNQURWX05PSFVHRVBBR0UpO1xcbiBcXG4gXFx0LyogRmF1bHQgdGhlbSBpbiBoZXJlLCBmcm9tIHVzZXIgc3BhY2UuICovXFxuLVxcdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFxcdTAwM2MgZ3VwLmFkZHIgKyBzaXplOyBwICs9IHBzaXplKCkpXFxuK1xcdGZvciAoOyAodW5zaWduZWQgbG9uZylwIFxcdTAwM2MgZ3VwLmFkZHIgKyBzaXplOyBwICs9IGdldHBhZ2VzaXplKCkpXFxuIFxcdFxcdHBbMF0gPSAwO1xcbiBcXG4gXFx0dGlkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocmVhZHMpO1xcbi1cXHRhc3NlcnQodGlkKTtcXG4rXFx0aWYgKCF0aWQpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRnb3RvIGVycl91bm1hcDtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcXG4gXFx0XFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRpZFtpXSwgTlVMTCwgZ3VwX3RocmVhZCwgXFx1MDAyNmd1cCk7XFxuLVxcdFxcdGFzc2VydChyZXQgPT0gMCk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihyZXQpKTtcXG4rXFx0XFx0XFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3RhcnRlZF90aHJlYWRzKys7XFxuIFxcdH1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG50aHJlYWRzOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgTlVMTCk7XFxuLVxcdFxcdGFzc2VydChyZXQgPT0gMCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzdGFydGVkX3RocmVhZHM7IGkrKykge1xcbitcXHRcXHRyZXQgPSBwdGhyZWFkX2pvaW4odGlkW2ldLCBcXHUwMDI2dGhyZWFkX3Jlc3VsdCk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IocmV0KSk7XFxuK1xcdFxcdFxcdHRocmVhZF9lcnJvciA9IHRydWU7XFxuK1xcdFxcdH0gZWxzZSBpZiAodGhyZWFkX3Jlc3VsdClcXG4rXFx0XFx0XFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4gXFx0ZnJlZSh0aWQpO1xcbi1cXG4tXFx0a3NmdF9leGl0X3Bhc3MoKTtcXG4rXFx0aWYgKHRocmVhZF9lcnJvcilcXG4rXFx0XFx0Z290byBlcnJfdW5tYXA7XFxuK1xcdGV4aXRfc3RhdHVzID0gMDtcXG4rXFxuK2Vycl91bm1hcDpcXG4rXFx0bXVubWFwKCh2b2lkICopZ3VwLmFkZHIsIHNpemUpO1xcbitlcnJfY2xvc2VfZ3VwX2ZkOlxcbitcXHRjbG9zZShndXBfZmQpO1xcbitlcnJfY2xvc2VfZmlsZWQ6XFxuK1xcdGNsb3NlKGZpbGVkKTtcXG4rXFx0cmV0dXJuIGV4aXRfc3RhdHVzO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5pbmRleCAyZDUzNjYxOTZlMzA5Li45YzAzNjI0ZmQyOTM2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5AQCAtMzcsNyArMzcsOCBAQCBlbmRpZlxcbiAjIExETElCUy5cXG4gTUFLRUZMQUdTICs9IC0tbm8tYnVpbHRpbi1ydWxlc1xcbiBcXG4tQ0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcXG4rQ0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgLUkgJCh0b3Bfc3JjZGlyKS90b29scy9saWJcXG4rQ0ZMQUdTICs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXFxuIENGTEFHUyArPSAtV3VucmVhY2hhYmxlLWNvZGVcXG4gTERMSUJTID0gLWxydCAtbHB0aHJlYWQgLWxtXFxuIFxcbkBAIC01Nyw4ICs1OCw4IEBAIGVuZGlmXFxuIFxcbiBURVNUX0dFTl9GSUxFUyA9IGNvd1xcbiBURVNUX0dFTl9GSUxFUyArPSBjb21wYWN0aW9uX3Rlc3RcXG4rVEVTVF9HRU5fRklMRVMgKz0gZ3VwXFxuIFRFU1RfR0VOX0ZJTEVTICs9IGd1cF9sb25ndGVybVxcbi1URVNUX0dFTl9GSUxFUyArPSBndXBfdGVzdFxcbiBURVNUX0dFTl9GSUxFUyArPSBobW0tdGVzdHNcXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tYWR2aXNlXFxuIFRFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGItbW1hcFxcbkBAIC0xODcsOCArMTg4LDEwIEBAIFRFU1RfRklMRVMgKz0gd3JpdGVfaHVnZXRsYl9tZW1vcnkuc2hcXG4gXFxuIGluY2x1ZGUgLi4vbGliLm1rXFxuIFxcbi0kKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcXG4tJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXFxuKyQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxcXFxuK1xcdFxcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbiskKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcXFxcbitcXHRcXHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG4gXFxuICQoT1VUUFVUKS91ZmZkLXN0cmVzczogdWZmZC1jb21tb24uY1xcbiAkKE9VVFBVVCkvdWZmZC11bml0LXRlc3RzOiB1ZmZkLWNvbW1vbi5jXFxuQEAgLTIxNyw3ICsyMjAsNyBAQCAkKEJJTkFSSUVTXzMyKTogQ0ZMQUdTICs9IC1tMzIgLW14c2F2ZVxcbiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICs9IC1scnQgLWxkbCAtbG1cXG4gJChCSU5BUklFU18zMik6ICQoT1VUUFVUKS8lXzMyOiAlLmNcXG4gXFx0JChjYWxsIG1zZyxDQywsJEApXFxuLVxcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcXG4rXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS0zMiwkKHQpKSkpXFxuIGVuZGlmXFxuIFxcbkBAIC0yMjYsNyArMjI5LDcgQEAgJChCSU5BUklFU182NCk6IENGTEFHUyArPSAtbTY0IC1teHNhdmVcXG4gJChCSU5BUklFU182NCk6IExETElCUyArPSAtbHJ0IC1sZGxcXG4gJChCSU5BUklFU182NCk6ICQoT1VUUFVUKS8lXzY0OiAlLmNcXG4gXFx0JChjYWxsIG1zZyxDQywsJEApXFxuLVxcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcXG4rXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS02NCwkKHQpKSkpXFxuIGVuZGlmXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXFxuaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXFxuQEAgLTE1LDkgKzE1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIE1BUF9TSVpFX01CXFx0MTAwXFxuICNkZWZpbmUgTUFQX1NJWkVcXHQoTUFQX1NJWkVfTUIgKiAxMDI0ICogMTAyNClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xcbmluZGV4IDhhYTUyNDlkOWJlZjYuLjMyNjRhODI4NTc1YmQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuaW5kZXggNDViODRmN2IzNjRlMC4uMjg5YWVkMmViYWMwMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXFxuQEAgLTI1LDcgKzI1LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gdWludDY0X3QgcGFnZV9zaXplO1xcbiB1aW50NjRfdCBwbWRfcGFnZXNpemU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuQEAgLTIxLDcgKzIxLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy91aW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi9waWRmZC9waWRmZC5oXFxcIlxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTNjMmZmYTNhMDU3Zlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xcbkBAIC0wLDAgKzEsMjc3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNkZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIC8vIFVzZSBsbDY0XFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9pb2N0bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2d1cF90ZXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbitcXG4rI2RlZmluZSBNQiAoMVVMIFxcdTAwM2NcXHUwMDNjIDIwKVxcbitcXG4rLyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovXFxuKyNkZWZpbmUgRk9MTF9XUklURVxcdDB4MDFcXHQvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi9cXG4rXFxuKy8qIFBhZ2UgY291bnRzIGV4ZXJjaXNpbmcgc2luZ2xlLCBUSFAtYmF0Y2gsIHBhcnRpYWwsIGFuZCBmdWxsLW1hcHBpbmcgR1VQLiAqL1xcbitzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07XFxuK1xcbisjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXFxcIi9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XFxcIlxcbisjZGVmaW5lIE5SX0hVR0VfUEFHRVMgMTI4XFxuK1xcbitIVUdFVExCX1NFVFVQX0RFRkFVTFRfUEFHRVMoTlJfSFVHRV9QQUdFUylcXG4rXFxuK0ZJWFRVUkUoZ3VwX3Rlc3QpXFxuK3tcXG4rXFx0aW50IGd1cF9mZDtcXG4rXFx0Y2hhciAqYWRkcjtcXG4rXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KVxcbit7XFxuK1xcdGJvb2wgdGhwO1xcbitcXHRib29sIGh1Z2V0bGI7XFxuK1xcdGJvb2wgd3JpdGU7XFxuK1xcdGJvb2wgc2hhcmVkO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZSlcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZClcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX2h1Z2V0bGIpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IHRydWUsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGUpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gZmFsc2UsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcXG4re1xcbitcXHQudGhwID0gdHJ1ZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF90aHApXFxuK3tcXG4rXFx0LnRocCA9IHRydWUsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV9odWdldGxiKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSB0cnVlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX2h1Z2V0bGIpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IHRydWUsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoZ3VwX3Rlc3QpXFxuK3tcXG4rXFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURTtcXG4rXFx0aW50IHplcm9fZmQ7XFxuK1xcdGNoYXIgKnA7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VzaXplID0gMTI4ICogTUI7XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNlaHVnZXRsYikge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XFxuK1xcbitcXHRcXHRpZiAoIWhwX3NpemUpXFxuK1xcdFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiSHVnZVRMQiBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdGlmIChodWdldGxiX2ZyZWVfZGVmYXVsdF9wYWdlcygpIFxcdTAwM2MgTlJfSFVHRV9QQUdFUylcXG4rXFx0XFx0XFx0U0tJUChyZXR1cm4sIFxcXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXFxcblxcXCIpO1xcbitcXG4rXFx0XFx0c2VsZi1cXHUwMDNlc2l6ZSA9IE5SX0hVR0VfUEFHRVMgKiBocF9zaXplO1xcbitcXHRcXHRtbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNlc2hhcmVkKVxcbitcXHRcXHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXFx1MDAyNiB+TUFQX1BSSVZBVEUpIHwgTUFQX1NIQVJFRDtcXG4rXFxuK1xcdC8qIHplcm9fZmQgaGFzIHRvIGJlIFxcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cXG4rXFx0emVyb19mZCA9IG9wZW4oXFxcIi9kZXYvemVyb1xcXCIsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRSh6ZXJvX2ZkLCAwKTtcXG4rXFxuK1xcdC8qIGd1cF9mZCBoYXMgdG8gYmUgXFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xcbitcXHRzZWxmLVxcdTAwM2VndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdEFTU0VSVF9HRShzZWxmLVxcdTAwM2VndXBfZmQsIDApO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlYWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cXHUwMDNlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0XFx0ICBtbWFwX2ZsYWdzLCB6ZXJvX2ZkLCAwKTtcXG4rXFxuK1xcdEFTU0VSVF9ORShzZWxmLVxcdTAwM2VhZGRyLCBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdGludCBlcnIgPSBlcnJubztcXG4rXFxuK1xcdFxcdGNsb3NlKHplcm9fZmQpO1xcbitcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VndXBfZmQpO1xcbitcXHRcXHRUSF9MT0coXFxcIm1tYXAgZmFpbGVkOiAlc1xcXCIsIHN0cmVycm9yKGVycikpO1xcbitcXHR9XFxuK1xcdGNsb3NlKHplcm9fZmQpO1xcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZXRocClcXG4rXFx0XFx0bWFkdmlzZShzZWxmLVxcdTAwM2VhZGRyLCBzZWxmLVxcdTAwM2VzaXplLCBNQURWX0hVR0VQQUdFKTtcXG4rXFx0ZWxzZSBpZiAoIXZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpXFxuK1xcdFxcdG1hZHZpc2Uoc2VsZi1cXHUwMDNlYWRkciwgc2VsZi1cXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4rXFxuK1xcdGZvciAocCA9IHNlbGYtXFx1MDAzZWFkZHI7ICh1bnNpZ25lZCBsb25nKXAgXFx1MDAzYyAodW5zaWduZWQgbG9uZylzZWxmLVxcdTAwM2VhZGRyXFxuK1xcdFxcdFxcdCsgc2VsZi1cXHUwMDNlc2l6ZTsgcCArPSBwc2l6ZSgpKVxcbitcXHRcXHRwWzBdID0gMDtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihndXBfdGVzdClcXG4re1xcbitcXHRtdW5tYXAoc2VsZi1cXHUwMDNlYWRkciwgc2VsZi1cXHUwMDNlc2l6ZSk7XFxuK1xcdGNsb3NlKHNlbGYtXFx1MDAzZWd1cF9mZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9ndXBfY21kKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcXG4rXFx0XFx0XFx0IEZJWFRVUkVfREFUQShndXBfdGVzdCkgKnNlbGYsXFxuK1xcdFxcdFxcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxcbitcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBjb21tYW5kKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7XFxuK1xcdFxcdFxcdC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcixcXG4rXFx0XFx0XFx0LnNpemUgPSBzZWxmLVxcdTAwM2VzaXplLFxcbitcXHRcXHRcXHQubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXSxcXG4rXFx0XFx0XFx0Lmd1cF9mbGFncyA9IHZhcmlhbnQtXFx1MDAzZXdyaXRlID8gRk9MTF9XUklURSA6IDAsXFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgY29tbWFuZCwgXFx1MDAyNmd1cCksIDApO1xcbitcXHR9XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfQkFTSUNfVEVTVCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcXG4re1xcbitcXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9GQVNUX0JFTkNITUFSSyk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdClcXG4re1xcbitcXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9GQVNUX0JFTkNITUFSSyk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFx0Y2hhciAqZmlsZSA9IFxcXCIvZGV2L3plcm9cXFwiO1xcbitcXG4rXFx0ZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0ZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XFxuK1xcdGlmIChmZCA9PSAtMSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRUFDQ0VTKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcXFxuXFxcIik7XFxuK1xcdFxcdGlmIChlcnJubyA9PSBFTk9FTlQpIHtcXG4rXFx0XFx0XFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcXFwiL3N5cy9rZXJuZWwvZGVidWdcXFwiKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghZGVidWdmcykge1xcbitcXHRcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiTW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGNsb3NlZGlyKGRlYnVnZnMpO1xcbitcXHRcXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXFxcblxcXCIpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcXG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcXG5pbmRleCBlMjY0MmVjYTBkMDJiLi5mYTFhNjUxOTYzZmQwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcXG5AQCAtMTAsOSArMTAsNiBAQFxcbiAgKiBidWdzLlxcbiAgKi9cXG4gXFxuLSNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4tXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuQEAgLTMzLDYgKzMwLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9ldmVudGZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbiBcXG4gLypcXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcXG5AQCAtMTQsNyArMTQsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTUlOX0ZSRUVfUEFHRVNcXHQyMFxcbiAjZGVmaW5lIE5SX0hVR0VfUEFHRVNcXHQxMFxcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcXG5pbmRleCAwZjJhYWQxYjdkYmQ2Li5hNDU4YmVjZjU4MzI3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmNcXG5AQCAtMTgsNyArMTgsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtZmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXFxuICNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcXG5pbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuQEAgLTI2LDcgKzI2LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxcbiAjZGVmaW5lIE1CX1RPX0JZVEVTKHgpICh4ICogMTAyNCAqIDEwMjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xcbkBAIC0yOSw3ICsyOSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcXG5pbmRleCBiYzIwMmU0ZWQyYmRhLi4yMDg2NGU3ZDRlMGM3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXFxuQEAgLTIxLDkgKzIxLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdGZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcXG5AQCAtMjAsNyArMjAsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZm5kZWYgU1RBVFhfRElPQUxJR05cXG4gI2RlZmluZSBTVEFUWF9ESU9BTElHTlxcdFxcdDB4MDAwMDIwMDBVXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5AQCAtMTAsNyArMTAsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbkBAIC0yNSw3ICsyNSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDFkMmQ2YmQ3MmZkMmEuLmFkYTExZDMwZDM4ODQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTIyLDcgKzIyLDYgQEBcXG4gI2luY2x1ZGUgXFxcImxpbnV4L21hZ2ljLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXFx1MDAzY1xcdTAwM2MgMzApKVxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcXG5AQCAtMTIyLDYgKzEyMSw3IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXFxuIFxcdGNoYXIgYnVmWzEgXFx1MDAzY1xcdTAwM2MgMTBdO1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbiBcXHRjaGFyICpzdHIsICplbmQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRmaW5mby5kaXIgPSBkaXI7XFxuIFxcdGlmIChzdGF0KGZpbmZvLmRpciwgXFx1MDAyNnBhdGhfc3RhdCkpXFxuQEAgLTE0Miw4ICsxNDIsOSBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxcbiBcXHRcXHQgICAgIG1ham9yKHBhdGhfc3RhdC5zdF9kZXYpLCBtaW5vcihwYXRoX3N0YXQuc3RfZGV2KSlcXG4gXFx0ICAgIFxcdTAwM2U9IHNpemVvZihwYXRoKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tXFx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicmVhZF9maWxlKHVldmVudClcXFwiKTtcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRfZmlsZSglcyk6ICVzXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcdGlmIChzdHJzdHIoYnVmLCBcXFwiREVWVFlQRT1kaXNrXFxcIikpIHtcXG4gXFx0XFx0LyogRm91bmQgaXQgKi9cXG4gXFx0XFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXFxuQEAgLTMyNCw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbiB7XFxuIFxcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XFxuIFxcdGNvbnN0IGludCBtbWFwX3Byb3QgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IFBST1RfUkVBRCA6IChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTtcXG4tXFx0aW50IGZkO1xcbitcXHRpbnQgZmQsIHJldDtcXG4gXFx0dm9pZCAqcDtcXG4gXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbiBcXG5AQCAtMzY4LDcgKzM2OSwxMSBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1tYXAoKVxcXCIpO1xcbiBcXG4gXFx0LyogRHJvcCBwYWdlIGNhY2hlICovXFxuLVxcdHdyaXRlX2ZpbGUoXFxcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1xcXCIsIFxcXCIzXFxcIiwgMik7XFxuK1xcdHJldCA9IHdyaXRlX2ZpbGUoXFxcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1xcXCIsIFxcXCIzXFxcIiwgMik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwid3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuK1xcbiBcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRyZXR1cm4gcDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuaW5kZXggNWZkNzc5MmEwZDQ3OS4uNjcxMWY0YzYxMzcxMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuQEAgLTE1LDcgKzE1LDYgQEBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjaW5jbHVkZS92ZHNvL3RpbWU2NC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggXFxcIi9zeXMva2VybmVsL21tL2tzbS9cXFwiXFxuICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuaW5kZXggZjE5ZDUzYzY5NTc2NC4uYTM1ZTJiNTdlMDViMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuQEAgLTUsNyArNSw2IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbkBAIC0xNiw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdGltZS5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gXFxuICNkZWZpbmUgVFdPTUVHXFx0XFx0KDJcXHUwMDNjXFx1MDAzYzIwKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCBlYWRjNzE1OWNhNWI5Li4wYzVkZTZlYzA2YzgwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbkBAIC0yNCw3ICsyNCw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXFx0XFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFxcdFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5mOWVjMTQwOGE2ZTMwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuQEAgLTE0LDcgKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuIFxcbiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VEXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5AQCAtNDUsOCArNDUsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvcHRyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzZXRqbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInBrZXktaGVscGVycy5oXFxcIlxcbiBcXG4gdTY0IHNoYWRvd19wa2V5X3JlZztcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC0xMzAsMzAgKzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7XFxuIFxcdGZpXFxuIH1cXG4gXFxuLXJ1bl9ndXBfbWF0cml4KCkge1xcbi0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b25cXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XFxuLVxcbi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgXFxcIi1IIC1tICRodWdldGxiX21iXFxcIjsgZG9cXG4tICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtXFxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xcbi0gICAgICAgICAgICAjIC13OiB3cml0ZT0xLCAtVzogd3JpdGU9MFxcbi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvXFxuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcXG4tICAgICAgICAgICAgICAgIGZvciBzaGFyZSBpbiAtUyBcXFwiIFxcXCI7IGRvXFxuLSAgICAgICAgICAgICAgICAgICAgIyAtbjogSG93IG1hbnkgcGFnZXMgdG8gZmV0Y2ggdG9nZXRoZXI/ICA1MTIgaXMgc3BlY2lhbFxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCdzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0b1xcbi0gICAgICAgICAgICAgICAgICAgICMganVzdCB0ZXN0IHBhcnRpYWwgZ3VwIHdoZW4gaGl0IGEgaHVnZSBpbiB3aGF0ZXZlciBmb3JtXFxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcXFwiLW4gMVxcXCIgXFxcIi1uIDUxMlxcXCIgXFxcIi1uIDEyM1xcXCIgXFxcIi1uIC0xXFxcIjsgZG9cXG4tICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IFxcXFxcXG4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtXFxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxcbi0gICAgICAgICAgICAgICAgZG9uZVxcbi0gICAgICAgICAgICBkb25lXFxuLSAgICAgICAgZG9uZVxcbi0gICAgZG9uZVxcbi19XFxuLVxcbiAjIGZpbHRlciA2NGJpdCBhcmNoaXRlY3R1cmVzXFxuIEFSQ0g2NFNUUj1cXFwiYXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NFxcXCJcXG4gaWYgWyAteiBcXFwiJEFSQ0hcXFwiIF07IHRoZW5cXG5AQCAtMjc1LDE4ICsyNTEsNyBAQCBmaVxcbiBcXG4gQ0FURUdPUlk9XFxcIm1tYXBcXFwiIHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxcbiBcXG4taWYgJFJVTl9BTEw7IHRoZW5cXG4tICAgIHJ1bl9ndXBfbWF0cml4XFxuLWVsc2VcXG4tICAgICMgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIDFcXG4tICAgIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMVxcbi0gICAgIyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIC0xXFxuLWZpXFxuLSMgRHVtcCBwYWdlcyAwLCAxOSwgYW5kIDQwOTYsIHVzaW5nIHBpbl91c2VyX3BhZ2VzOlxcbi1DQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFxcbitDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwXFxuIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfbG9uZ3Rlcm1cXG4gXFxuIENBVEVHT1JZPVxcXCJ1c2VyZmF1bHRmZFxcXCIgcnVuX3Rlc3QgLi91ZmZkLXVuaXQtdGVzdHNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5AQCAtOSw3ICs5LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiXFxuICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuaW5kZXggODZhNjAzNjkyODI2MS4uMGUwODNhYjcxYWY2MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbkBAIC0yMSw3ICsyMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiB1aW50NjRfdCBwYWdlc2l6ZTtcXG4gdW5zaWduZWQgaW50IHBhZ2VzaGlmdDtcXG5AQCAtMTQ2LDcgKzE0NSwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiBcXHRpZiAocmV0IFxcdTAwM2U9IElOUFVUX01BWClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlczogRGVidWdmcyBpbnB1dCBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXG4tXFx0d3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XFxuK1xcdHJldCA9IHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCArIDEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIndyaXRlX2ZpbGUoJXMpOiAlc1xcXFxuXFxcIiwgU1BMSVRfREVCVUdGUyxcXG4rXFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbmluZGV4IDUwZDA4MDViNjVkYjkuLmEwNGY1ODhkZjc4MGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbkBAIC0xNCw3ICsxNCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcXG4gI2RlZmluZSBNQVBfSFVHRVRMQlxcdDB4NDAwMDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG5AQCAtMTcsNyArMTcsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIGludCBiYWNraW5nX2ZkID0gLTE7XFxuIGludCBtbWFwX2ZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcXG5pbmRleCA5MmEyMWI5N2Y3NDVhLi4wNzIzODQzYTc2MjZiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXFxuQEAgLTM3LDcgKzM3LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFVGRkRfRkxBR1NcXHQoT19DTE9FWEVDIHwgT19OT05CTE9DSyB8IFVGRkRfVVNFUl9NT0RFX09OTFkpXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbmluZGV4IGM5NzNkNjcyMjcyMGMuLmViNGIyNDMzYjAwZTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcXG5AQCAtNyw4ICs3LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2Fzc2VydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ1ZmZkLWNvbW1vbi5oXFxcIlxcbiBcXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xcbkBAIC0xMSw3ICsxMSw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gLypcXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5pbmRleCA0ODIxYTM1NjMwMzYzLi5mODkxNmIyYWJjMmVmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbkBAIC04ODUsMTExICs4ODUsNTQgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNlIDAgPyAwIDogLWVycm5vO1xcbiB9XFxuIFxcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4te1xcbi1cXHRpbnQgZmQ7XFxuLVxcdHNzaXplX3QgbnVtcmVhZDtcXG4tXFxuLVxcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XFxuLVxcdGlmIChmZCA9PSAtMSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcXG4tXFx0aWYgKG51bXJlYWQgXFx1MDAzYyAxKSB7XFxuLVxcdFxcdGNsb3NlKGZkKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdGJ1ZltudW1yZWFkXSA9ICdcXFxcMCc7XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFxuLVxcdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXFxuLXtcXG4tXFx0aW50IGZkLCBzYXZlZF9lcnJubztcXG4tXFx0c3NpemVfdCBudW13cml0dGVuO1xcbi1cXG4tXFx0aWYgKGJ1ZmxlbiBcXHUwMDNjIDIpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiSW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxcXFxuXFxcIiwgYnVmbGVuKTtcXG4tXFxuLVxcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XFxuLVxcdGlmIChmZCA9PSAtMSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyBvcGVuIGZhaWxlZDogJXNcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XFxuLVxcbi1cXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XFxuLVxcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFx0ZXJybm8gPSBzYXZlZF9lcnJubztcXG4tXFx0aWYgKG51bXdyaXR0ZW4gXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGlmIChpZ25vcmVfZWludmFsIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTClcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIHdyaXRlKCUuKnMpIGZhaWxlZDogJXNcXFxcblxcXCIsIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLFxcbi1cXHRcXHRcXHRcXHRidWYsIHN0cmVycm9yKGVycm5vKSk7XFxuLVxcdH1cXG4tXFx0aWYgKG51bXdyaXR0ZW4gIT0gYnVmbGVuIC0gMSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0cGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7XFxuLX1cXG4tXFxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXFxuLXtcXG4tXFx0X193cml0ZV9maWxlKHBhdGgsIGJ1ZiwgYnVmbGVuLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xcbi19XFxuLVxcbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpXFxuLXtcXG4tXFx0Y2hhciBidWZbMjFdO1xcbi1cXG4tXFx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicmVhZF9maWxlKClcXFwiKTtcXG4tXFxuLVxcdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBfX3dyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSwgYm9vbCBpZ25vcmVfZWludmFsKVxcbi17XFxuLVxcdGNoYXIgYnVmWzIxXTtcXG4tXFxuLVxcdHNwcmludGYoYnVmLCBcXFwiJWx1XFxcIiwgbnVtKTtcXG4tXFx0X193cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxLCBpZ25vcmVfZWludmFsKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXFxuLXtcXG4tXFx0cmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4te1xcbi1cXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gdHJ1ZSk7XFxuLX1cXG4tXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWFsbCwgc2htbWF4O1xcbiBcXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKVxcbiB7XFxuLVxcdGlmIChzaG1tYXgpXFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBzaG1tYXgpO1xcbi1cXHRpZiAoc2htYWxsKVxcbi1cXHRcXHR3cml0ZV9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXFxcIiwgc2htYWxsKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChzaG1tYXgpIHtcXG4rXFx0XFx0cmV0ID0gd3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIHNobW1heCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZXN0b3JlIHNobW1heDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4rXFx0fVxcbitcXHRpZiAoc2htYWxsKSB7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBzaG1hbGwpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gcmVzdG9yZSBzaG1hbGw6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIiwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbiBcXG4tXFx0dmFsID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIik7XFxuIFxcdGlmICh2YWwgXFx1MDAzYyBsZW5ndGgpIHtcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIGxlbmd0aCk7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBsZW5ndGgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgbGVuZ3RoLCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcdFxcdHNobW1heCA9IHZhbDtcXG4gXFx0fVxcbiBcXG4tXFx0dmFsID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXFxcIik7XFxuK1xcdHJldCA9IHJlYWRfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gcmVhZCAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4gXFx0aWYgKHZhbCBcXHUwMDNjIG5yKSB7XFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xcbiBcXHRcXHRzaG1hbGwgPSB2YWw7XFxuIFxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li42NGE4NmU4YTBjNDFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbkBAIC04LDYgKzgsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlIC8qIF9TQ19QQUdFU0laRSAqL1xcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vZmlsZV91dGlscy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgQklUX1VMTChucikgICAgICAgICAgICAgICAgICAgKDFVTEwgXFx1MDAzY1xcdTAwM2MgKG5yKSlcXG4gI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KVxcbkBAIC0xNjYsMTIgKzE2OCw2IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pO1xcbiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpXFx0KCgoZW50KSBcXHUwMDI2ICgxdWxsIFxcdTAwM2NcXHUwMDNjIDYzKSkgIT0gMClcXG4gI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpXFx0KChlbnQpIFxcdTAwMjYgKCgxdWxsIFxcdTAwM2NcXHUwMDNjIDU1KSAtIDEpKVxcbiBcXG4tdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xcbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4tXFxuIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTtcXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA0OjI2OjE0LjcwMDQwNTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NzgyOTg2MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIERvY3VtZW50YXRpb24sIE1BSU5UQUlORVJTLCBLY29uZmlnIGhlbHAgdGV4dCwgYW5kIHVzZXJzcGFjZSB0b29saW5nL3NlbGZ0ZXN0cyB1bmRlciB0b29scy8uIE5vIGtlcm5lbCBydW50aW1lIGxvZ2ljIGlzIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2Q1YWUwZDk0NjA5ZmZiZmIzYzNiNjI1MjE3ZjJiYTg2ZjhmNzZlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA0OjI2OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlMy4uZTBhY2VkYmQxZDQ4NiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuQEAgLTIyNiwxNSArMjI2LDYgQEAgd2lsbCBiZSBwaW5uZWQgbG9uZ3Rlcm0sIGFuZCB3aG9zZSBkYXRhIHdpbGwgYmUgYWNjZXNzZWQuXG4gXG4gVW5pdCB0ZXN0aW5nXG4gPT09PT09PT09PT09XG4tVGhpcyBmaWxlOjpcbi1cbi0gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuLVxuLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczpcbi1cbi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSlcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxuLVxuIFlvdSBjYW4gbW9uaXRvciBob3cgbWFueSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWRcbiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OlxuIFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGEzMTY3YmNiZTU4OTcuLjU0OGJjZjAwOGU3OTkgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xNzE3Myw4ICsxNzE3Myw5IEBAIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW1cbiBGOlx0bW0vZ3VwLmNcbiBGOlx0bW0vZ3VwX3Rlc3QuY1xuIEY6XHRtbS9ndXBfdGVzdC5oXG4rRjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4rRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4tRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiBcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEtTTSAoS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcpXG4gTTpcdEFuZHJldyBNb3J0b24gXHUwMDNjYWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZ1x1MDAzZVxuQEAgLTE3Mjc3LDYgKzE3Mjc4LDcgQEAgRjpcdG1tL21lbW9yeS10aWVycy5jXG4gRjpcdG1tL3BhZ2VfaWRsZS5jXG4gRjpcdG1tL3BnYWxsb2MtdHJhY2suaFxuIEY6XHRtbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jXG4rRjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggNjA0YzU4MTk5YWNiZi4uMGJkMjk4Yzc3NDQ2MSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbisrKyBiL21tL0tjb25maWdcbkBAIC0xMjkyLDI0ICsxMjkyLDIzIEBAIGNvbmZpZyBQRVJDUFVfU1RBVFNcbiBcdCAgYmUgdXNlZCB0byBoZWxwIHVuZGVyc3RhbmQgcGVyY3B1IG1lbW9yeSB1c2FnZS5cbiBcbiBjb25maWcgR1VQX1RFU1Rcbi1cdGJvb2wgXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzXCJcbitcdGJvb2wgXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzIGFuZCBiZW5jaG1hcmtzXCJcbiBcdGRlcGVuZHMgb24gREVCVUdfRlNcbiBcdGhlbHBcbiBcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbi1cdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4tXHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cbitcdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgYW5kXG4rXHQgIGJlbmNobWFya3MgZm9yIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWxpZXNcbitcdCAgb2YgQVBJIGNhbGxzLlxuIFxuLVx0ICBUaGVzZSB0ZXN0cyBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxuLVx0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgc21va2UgdGVzdHMgb2ZcbitcdCAgVGhlc2UgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2ZcbitcdCAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHRlc3RzIG9mXG4gXHQgIHRoZSBub24tX2Zhc3QgdmFyaWFudHMuXG4gXG4tXHQgIFRoZXJlIGlzIGFsc28gYSBzdWItdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueVxuLVx0ICBvZiB1cCB0byBlaWdodCBwYWdlcyAoc2VsZWN0ZWQgYnkgY29tbWFuZCBsaW5lIGFyZ3MpIHdpdGhpbiB0aGVcbi1cdCAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYVxuLVx0ICBwaW5fdXNlcl9wYWdlcyooKSwgb3IgcGlubmVkIHZpYSBnZXRfdXNlcl9wYWdlcyooKSwgYXMgc3BlY2lmaWVkXG4tXHQgIGJ5IG90aGVyIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4rXHQgIFRoZXJlIGlzIGFsc28gYSB0ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55IG9mIHVwXG4rXHQgIHRvIGVpZ2h0IHBhZ2VzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlXG4rXHQgIHBhZ2VzIGFyZSBlaXRoZXIgYWNxdWlyZWQgdmlhIHBpbl91c2VyX3BhZ2VzKigpIG9yIGdldF91c2VyX3BhZ2VzKigpLlxuIFxuLVx0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuK1x0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYW5kIHRvb2xzL21tL2d1cF9iZW5jaC5jLlxuIFxuIGNvbW1lbnQgXCJHVVBfVEVTVCBuZWVkcyB0byBoYXZlIERFQlVHX0ZTIGVuYWJsZWRcIlxuIFx0ZGVwZW5kcyBvbiAhR1VQX1RFU1QgXHUwMDI2XHUwMDI2ICFERUJVR19GU1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWIyMjM3ZTk4MjNlOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuQEAgLTAsMCArMSwxMDYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiZmlsZV91dGlscy5oXCJcbitcbitpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbit7XG4rXHRpbnQgZmQsIGVycjtcbitcdHNzaXplX3QgbnVtcmVhZDtcbitcbitcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XG4rXHRpZiAoZmQgPT0gLTEpXG4rXHRcdHJldHVybiAtZXJybm87XG4rXG4rXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbitcdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4rXHRcdGVyciA9IG51bXJlYWQgPyBlcnJubyA6IEVOT0RBVEE7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIC1lcnI7XG4rXHR9XG4rXG4rXHRidWZbbnVtcmVhZF0gPSAnXFwwJztcbitcdGNsb3NlKGZkKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4re1xuK1x0aW50IGZkLCBzYXZlZF9lcnJubztcbitcdHNzaXplX3QgbnVtd3JpdHRlbjtcbitcbitcdGlmIChidWZsZW4gXHUwMDNjIDIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbitcdGlmIChmZCA9PSAtMSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbitcdHNhdmVkX2Vycm5vID0gZXJybm87XG4rXHRjbG9zZShmZCk7XG4rXG4rXHRpZiAobnVtd3JpdHRlbiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC1zYXZlZF9lcnJubztcbitcbitcdGlmIChudW13cml0dGVuICE9IChzc2l6ZV90KShidWZsZW4gLSAxKSlcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIHZhbDtcbitcdGludCByZXQ7XG4rXHRjaGFyIGJ1ZlsyMV07XG4rXHRjaGFyICplbmQ7XG4rXG4rXHRpZiAoIW51bSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogUmVqZWN0IHNpZ25zIGFuZCBsZWFkaW5nIHdoaXRlc3BhY2UgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgc3RydG91bCgpICovXG4rXHRpZiAoYnVmWzBdIFx1MDAzYyAnMCcgfHwgYnVmWzBdIFx1MDAzZSAnOScpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0ZXJybm8gPSAwO1xuK1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuK1x0aWYgKGVycm5vKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0LyogT25seSBhbGxvdyBhIG5ld2xpbmUgYWZ0ZXIgdGhlIG51bWJlciAqL1xuK1x0aWYgKCplbmQgPT0gJ1xcbicpXG4rXHRcdGVuZCsrO1xuK1xuK1x0aWYgKCplbmQgIT0gJ1xcMCcpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Km51bSA9IHZhbDtcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuK3tcbitcdGNoYXIgYnVmWzIxXTtcbitcbitcdHNwcmludGYoYnVmLCBcIiVsdVwiLCBudW0pO1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgYnVmLCBzdHJsZW4oYnVmKSArIDEpO1xuK31cbitcbitpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xuK1x0cmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaCBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MGRhYTgyYzJiMmI0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXG5AQCAtMCwwICsxLDEzIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cbisjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX19cbitcbisjaW5jbHVkZSBcdTAwM2NzdGRkZWYuaFx1MDAzZVxuK1xuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbitpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pO1xuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xuK2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4rXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5zaW1pbGFyaXR5IGluZGV4IDg3JVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5pbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuKysrIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbkBAIC04LDEyICs4LDE4IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcImZpbGVfdXRpbHMuaFwiXG4gI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFRIUF9TWVNGUyBcIi9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL1wiXG4gI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNFxuK1xuKyNpZm5kZWYgQVJSQVlfU0laRVxuKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXG4rI2VuZGlmXG4rXG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTtcbiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4O1xuIHN0YXRpYyBzdHJ1Y3QgdGhwX3NldHRpbmdzIHNhdmVkX3NldHRpbmdzO1xuQEAgLTQ4LDYgKzU0LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2htZW1fZW5hYmxlZF9zdHJpbmdzW10gPSB7XG4gXHROVUxMXG4gfTtcbiBcbitzdGF0aWMgdm9pZCBwcmludF9maWxlX2FjY2Vzc19lcnJvcihjb25zdCBjaGFyICpwYXRoLCBpbnQgcmV0KVxuK3tcbitcdHByaW50ZihcIiMgJXM6ICVzICglZClcXG5cIiwgcGF0aCwgc3RyZXJyb3IoLXJldCksIC1yZXQpO1xuK31cbitcbiBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbkBAIC02MSw4ICs3Miw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuIFxuLVx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpIHtcbi1cdFx0cGVycm9yKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG5AQCAtMTAzLDEyICsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcbiBcdFx0cHJpbnRmKFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICsgMSk7XG4rXHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIG51bTtcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBzbnByaW50ZihwYXRoLCBQQVRIX01BWCwgVEhQX1NZU0ZTIFwiJXNcIiwgbmFtZSk7XG5AQCAtMTE2LDcgKzEzMywxMyBAQCB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRwcmludGYoXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4rXHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZudW0pO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnVtO1xuIH1cbiBcbiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG5AQCAtMTI5LDcgKzE1MiwxMSBAQCB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXG4gXHRcdHByaW50ZihcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHdyaXRlX251bShwYXRoLCBudW0pO1xuK1x0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbiB9XG4gXG4gdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbkBAIC0xNTcsOCArMTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXG4gXHRcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwiKSxcbiBcdFx0LnBhZ2VzX3RvX3NjYW4gPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cIiksXG4gXHR9O1xuLVx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXG4tXHRcdHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoKTtcbitcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XG4rXHRcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuK1x0XHRcdFx0ICAgXHUwMDI2c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xuK1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKSB7XG5AQCAtMjA4LDggKzI0MiwxNSBAQCB2b2lkIHRocF93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdHRocF93cml0ZV9udW0oXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwiLCBraHVnZXBhZ2VkLVx1MDAzZW1heF9wdGVzX3NoYXJlZCk7XG4gXHR0aHBfd3JpdGVfbnVtKFwia2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXCIsIGtodWdlcGFnZWQtXHUwMDNlcGFnZXNfdG9fc2Nhbik7XG4gXG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0d3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuK1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbitcdFx0aW50IHJldCA9IHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuK1x0XHRcdFx0ICAgIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuK1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcbitcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHRcdH1cbitcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX09SREVSUzsgaSsrKSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSlcbkBAIC0zMDcsOCArMzQ4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSlcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGlmIChyZXQgIT0gLUVOT0VOVCkge1xuK1x0XHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0XHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiBcdH1cbiBcbiBcdHJldHVybiBvcmRlcnM7XG5AQCAtMzgyLDggKzQzMCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heClcbiBcdFx0aWYgKHNzY2FuZihlbnRyeS1cdTAwM2VkX25hbWUsIFwiaHVnZXBhZ2VzLSV6dWtCXCIsIFx1MDAyNmtiKSAhPSAxKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRzaXplc1tjb3VudCsrXSA9IGtiICogMTAyNDtcbi1cdFx0a3NmdF9wcmludF9tc2coXCJbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXG5cIixcbi1cdFx0XHQgICAgICAga2IpO1xuK1x0XHRwcmludGYoXCIjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwiLCBrYik7XG4gXHR9XG4gXHRjbG9zZWRpcihkaXIpO1xuIFx0cmV0dXJuIGNvdW50O1xuQEAgLTQyNSwyOCArNDcyLDQ5IEBAIHN0YXRpYyB2b2lkIGh1Z2V0bGJfc3lzZnNfcGF0aChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBucjtcbitcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcIm5yX2h1Z2VwYWdlc1wiKTtcbiBcbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbitcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm5yKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yO1xuIH1cbiBcbiB2b2lkIGh1Z2V0bGJfc2V0X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwibnJfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0d3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuK1x0cmV0ID0gd3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1x0dW5zaWduZWQgbG9uZyBucjtcbitcdGludCByZXQ7XG4gXG4gXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnI7XG4gfVxuIFxuIHN0YXRpYyBib29sIF9faHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXG5AQCAtNTAyLDcgKzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKG5yX2VuYWJsZWQgXHUwMDNlIG1heCkge1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcImRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cIiwgbnJfZW5hYmxlZCwgbWF4KTtcbitcdFx0cHJpbnRmKFwiIyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxuXCIsXG4rXHRcdCAgICAgICBucl9lbmFibGVkLCBtYXgpO1xuIFx0XHRucl9lbmFibGVkID0gbWF4O1xuIFx0fVxuIFxuQEAgLTU3NCw4ICs2NDMsMTAgQEAgc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX3NpZ2hhbmRsZXIoaW50IHNpZylcbiB7XG4rXHQodm9pZClzaWc7XG4rXG4gXHQvKiBleGl0KCkgd2lsbCBpbnZva2UgdGhlIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0IGhhbmRsZXIuICovXG4tXHRleGl0KEtTRlRfRkFJTCk7XG4rXHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gfVxuIFxuIHZvaWQgaHVnZXBhZ2Vfc2F2ZV9zZXR0aW5ncyhib29sIHRocCwgYm9vbCBodWdldGxiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuc2ltaWxhcml0eSBpbmRleCAxMDAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuaW5kZXggMTQ0NmE2NTllNTQwOC4uMTU0ZDc0MGJlMDJlOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbkBAIC0zLDMgKzMsNCBAQCBzbGFiaW5mb1xuIHBhZ2UtdHlwZXNcbiBwYWdlX293bmVyX3NvcnRcbiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK2d1cF9iZW5jaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLmYyMGEzMmQ4Y2MyMmUgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC0zLDEzICszLDE1IEBAXG4gI1xuIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlXG4gXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK0JVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXJcbitCVUlMRF9UQVJHRVRTICs9IHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xuIFxuIExJQl9ESVIgPSAuLi9saWIvYXBpXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcbitHVVBfQkVOQ0hfT0JKUyA9IGd1cF9iZW5jaC5jIC4uL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIC4uL2xpYi9tbS9maWxlX3V0aWxzLmNcbiBcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcbitDRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLUkuLi8uLiAtcHRocmVhZFxuIExERkxBR1MgKz0gJChMSUJTKSAtcHRocmVhZFxuIFxuIGFsbDogJChCVUlMRF9UQVJHRVRTKVxuQEAgLTIyLDggKzI0LDExIEBAICQoTElCUyk6XG4gJTogJS5jXG4gXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJFx1MDAzYyAkKExERkxBR1MpXG4gXG4rZ3VwX2JlbmNoOiAkKEdVUF9CRU5DSF9PQkpTKSAkKExJQlMpXG4rXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJChHVVBfQkVOQ0hfT0JKUykgJChMREZMQUdTKVxuK1xuIGNsZWFuOlxuLVx0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbitcdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaFxuIFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXG4gXG4gc2JpbmRpciA/PSAvdXNyL3NiaW5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbnNpbWlsYXJpdHkgaW5kZXggNTAlXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG5yZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmNcbmluZGV4IDNmODQxYTk2Zjg3MDYuLmU2YTgwYmE1MTk1YTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4rKysgYi90b29scy9tbS9ndXBfYmVuY2guY1xuQEAgLTEwLDExICsxMCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NtbS9ndXBfdGVzdC5oXHUwMDNlXG4tI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4gXG5AQCAtMzgsMTIgKzM3LDYgQEAgc3RhdGljIGNoYXIgKmNtZF90b19zdHIodW5zaWduZWQgbG9uZyBjbWQpXG4gXHRcdHJldHVybiBcIlBJTl9GQVNUX0JFTkNITUFSS1wiO1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxuIFx0XHRyZXR1cm4gXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXCI7XG4tXHRjYXNlIEdVUF9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCJHVVBfQkFTSUNfVEVTVFwiO1xuLVx0Y2FzZSBQSU5fQkFTSUNfVEVTVDpcbi1cdFx0cmV0dXJuIFwiUElOX0JBU0lDX1RFU1RcIjtcbi1cdGNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6XG4tXHRcdHJldHVybiBcIkRVTVBfVVNFUl9QQUdFU19URVNUXCI7XG4gXHR9XG4gXHRyZXR1cm4gXCJVbmtub3duIGNvbW1hbmRcIjtcbiB9XG5AQCAtNTMsMzkgKzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcbiBcdHN0cnVjdCBndXBfdGVzdCBndXAgPSAqKHN0cnVjdCBndXBfdGVzdCAqKWRhdGE7XG4gXHRpbnQgaSwgc3RhdHVzO1xuIFxuLVx0LyogT25seSByZXBvcnQgdGltaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAqX0JFTkNITUFSSyBjb21tYW5kczogKi9cbi1cdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XG4tXHQgICAgIChjbWQgPT0gUElOX0xPTkdURVJNX0JFTkNITUFSSykpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSsrKSB7XG4tXHRcdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0XHRicmVhaztcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlcGVhdHM7IGkrKykge1xuK1x0XHRndXAuc2l6ZSA9IHNpemU7XG4rXHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuK1x0XHRpZiAoc3RhdHVzKSB7XG4rXHRcdFx0aW50IGVyciA9IGVycm5vO1xuIFxuIFx0XHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbi1cdFx0XHRcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbi1cdFx0XHRcdCAgICAgICBndXAucHV0X2RlbHRhX3VzZWMpO1xuLVx0XHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCIsIHRydW5jYXRlZCAoc2l6ZTogJWxsZClcIiwgZ3VwLnNpemUpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiXFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIiVzIGlvY3RsIGZhaWxlZDogJXNcXG5cIiwgY21kX3RvX3N0cihjbWQpLFxuK1x0XHRcdFx0c3RyZXJyb3IoZXJyKSk7XG4gXHRcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuK1x0XHRcdHJldHVybiBkYXRhO1xuIFx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuLVx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGdvdG8gcmV0dXJuXztcbiBcbiBcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0a3NmdF9wcmludF9tc2coXCIlczogZG9uZVxcblwiLCBjbWRfdG9fc3RyKGNtZCkpO1xuK1x0XHRwcmludGYoXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcIixcbitcdFx0XHRjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcbitcdFx0XHRndXAucHV0X2RlbHRhX3VzZWMpO1xuIFx0XHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcIlRydW5jYXRlZCAoc2l6ZTogJWxsZClcXG5cIiwgZ3VwLnNpemUpO1xuK1x0XHRcdHByaW50ZihcIiwgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVwiLCBndXAuc2l6ZSk7XG4rXHRcdHByaW50ZihcIlxcblwiKTtcbiBcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuIFx0fVxuIFxuLXJldHVybl86XG4tXHRrc2Z0X3Rlc3RfcmVzdWx0KCFzdGF0dXMsIFwiaW9jdGwgc3RhdHVzICVkXFxuXCIsIHN0YXR1cyk7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG5AQCAtOTMsMzggKzc2LDIxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiB7XG4gXHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0geyAwIH07XG4gXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcbi1cdGludCBmbGFncyA9IE1BUF9QUklWQVRFO1xuK1x0aW50IGZsYWdzID0gTUFQX1BSSVZBVEUsIHN0YXJ0ZWRfdGhyZWFkcyA9IDAsIGV4aXRfc3RhdHVzID0gMTtcbiBcdGNoYXIgKmZpbGUgPSBcIi9kZXYvemVyb1wiO1xuLVx0Ym9vbCBodWdldGxiID0gZmFsc2U7XG4rXHRib29sIGh1Z2V0bGIgPSBmYWxzZSwgdGhyZWFkX2Vycm9yID0gZmFsc2U7XG4rXHR2b2lkICp0aHJlYWRfcmVzdWx0O1xuIFx0cHRocmVhZF90ICp0aWQ7XG4gXHRjaGFyICpwO1xuIFxuLVx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCJtOnI6bjpGOmY6YWJjajp0VExVdXdXU0hwelwiKSkgIT0gLTEpIHtcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwibTpyOm46RjpmOmFqOnRUTHV3V1NIXCIpKSAhPSAtMSkge1xuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICdhJzpcbiBcdFx0XHRjbWQgPSBQSU5fRkFTVF9CRU5DSE1BUks7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ2InOlxuLVx0XHRcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICdMJzpcbiBcdFx0XHRjbWQgPSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdjJzpcbi1cdFx0XHRjbWQgPSBEVU1QX1VTRVJfUEFHRVNfVEVTVDtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5XG4tXHRcdFx0ICogdXNlcidzIG5vbi1vcHRpb24gYXJndW1lbnRzLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcImRvXG4tXHRcdFx0ICogbm90aGluZ1wiLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGd1cC53aGljaF9wYWdlc1swXSA9IDE7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ3AnOlxuLVx0XHRcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xuLVx0XHRcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICdGJzpcbiBcdFx0XHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xuIFx0XHRcdGd1cC5ndXBfZmxhZ3MgPSBzdHJ0b2wob3B0YXJnLCAwLCAwKTtcbkBAIC0xNDEsNyArMTA3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICduJzpcbiBcdFx0XHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcbiBcdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdFx0XHRucl9wYWdlcyA9IHNpemUgLyBwc2l6ZSgpO1xuK1x0XHRcdFx0bnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAndCc6XG4gXHRcdFx0dGhwID0gMTtcbkBAIC0xNDksOSArMTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICdUJzpcbiBcdFx0XHR0aHAgPSAwO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICdVJzpcbi1cdFx0XHRjbWQgPSBHVVBfQkFTSUNfVEVTVDtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAndSc6XG4gXHRcdFx0Y21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTE3Myw1MiArMTM2LDQxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRodWdldGxiID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJXcm9uZyBhcmd1bWVudFxcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJXcm9uZyBhcmd1bWVudFxcblwiKTtcbitcdFx0XHRleGl0KDEpO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAob3B0aW5kIFx1MDAzYyBhcmdjKSB7XG4tXHRcdGludCBleHRyYV9hcmdfY291bnQgPSAwO1xuLVx0XHQvKlxuLVx0XHQgKiBGb3IgZXhhbXBsZTpcbi1cdFx0ICpcbi1cdFx0ICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDFcbi1cdFx0ICpcbi1cdFx0ICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5N1xuLVx0XHQgKi9cbi1cbi1cdFx0d2hpbGUgKChvcHRpbmQgXHUwMDNjIGFyZ2MpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgICAgKGV4dHJhX2FyZ19jb3VudCBcdTAwM2MgR1VQX1RFU1RfTUFYX1BBR0VTX1RPX0RVTVApKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhblxuLVx0XHRcdCAqIHVzZSBub3JtYWwgMC1iYXNlZCBpbmRleGluZyBvbiB0aGUgY29tbWFuZCBsaW5lLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICsgMTtcbi1cbi1cdFx0XHRndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7XG4tXHRcdFx0ZXh0cmFfYXJnX2NvdW50Kys7XG4tXHRcdFx0b3B0aW5kKys7XG4tXHRcdH1cbitcdGlmIChvcHRpbmQgIT0gYXJnYykge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJVbmV4cGVjdGVkIGFyZ3VtZW50ICclcydcXG5cIiwgYXJndltvcHRpbmRdKTtcbitcdFx0ZXhpdCgxKTtcbiBcdH1cbiBcbi1cdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRpZiAoZ2V0dWlkKCkpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbiBcbiBcdGlmIChodWdldGxiKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbiBcbi1cdFx0aWYgKCFocF9zaXplKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwiSHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcblwiKTtcbitcdFx0aWYgKCFocF9zaXplKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiQ291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuIFxuIFx0XHRzaXplID0gKHNpemUgKyBocF9zaXplIC0gMSkgXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xuLVx0XHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpXG4tXHRcdFx0a3NmdF9leGl0X3NraXAoXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXHRcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuIFx0fVxuIFxuLVx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XG4tXG4gXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xuLVx0aWYgKGZpbGVkIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdGlmIChmaWxlZCBcdTAwM2MgMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4gXG4gXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlcztcbiBcdGlmICh3cml0ZSlcbkBAIC0yMjcsMjYgKzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4gXHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4gXHRcdHN3aXRjaCAoZXJybm8pIHtcbi1cdFx0Y2FzZSBFQUNDRVM6XG4tXHRcdFx0aWYgKGdldHVpZCgpKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVOT0VOVDpcbiBcdFx0XHRpZiAob3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpID09IE5VTEwpXG4tXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cIik7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwibW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsXG4rXHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cIik7XG4tXHRcdGtzZnRfZXhpdF9wYXNzKCk7XG4rXHRcdGdvdG8gZXJyX2Nsb3NlX2ZpbGVkO1xuIFx0fVxuIFxuIFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcbi1cdGlmIChwID09IE1BUF9GQUlMRUQpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1tYXA6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1tYXA6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGdvdG8gZXJyX2Nsb3NlX2d1cF9mZDtcbitcdH1cbiBcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcbiBcbiBcdGlmICh0aHAgPT0gMSlcbkBAIC0yNTUsMjEgKzIwNSw0NCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbiBcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBwc2l6ZSgpKVxuK1x0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBnZXRwYWdlc2l6ZSgpKVxuIFx0XHRwWzBdID0gMDtcbiBcbiBcdHRpZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG50aHJlYWRzKTtcbi1cdGFzc2VydCh0aWQpO1xuK1x0aWYgKCF0aWQpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiRmFpbGVkIHRvIGFsbG9jYXRlICVkIHRocmVhZHM6ICVzXFxuXCIsXG4rXHRcdFx0bnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGdvdG8gZXJyX3VubWFwO1xuK1x0fVxuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkrKykge1xuIFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxuXCIsIHN0cmVycm9yKHJldCkpO1xuK1x0XHRcdHRocmVhZF9lcnJvciA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0c3RhcnRlZF90aHJlYWRzKys7XG4gXHR9XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudGhyZWFkczsgaSsrKSB7XG4tXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhcnRlZF90aHJlYWRzOyBpKyspIHtcbitcdFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgXHUwMDI2dGhyZWFkX3Jlc3VsdCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xcblwiLCBzdHJlcnJvcihyZXQpKTtcbitcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuK1x0XHR9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpXG4rXHRcdFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdGZyZWUodGlkKTtcbi1cbi1cdGtzZnRfZXhpdF9wYXNzKCk7XG4rXHRpZiAodGhyZWFkX2Vycm9yKVxuK1x0XHRnb3RvIGVycl91bm1hcDtcbitcdGV4aXRfc3RhdHVzID0gMDtcbitcbitlcnJfdW5tYXA6XG4rXHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XG4rZXJyX2Nsb3NlX2d1cF9mZDpcbitcdGNsb3NlKGd1cF9mZCk7XG4rZXJyX2Nsb3NlX2ZpbGVkOlxuK1x0Y2xvc2UoZmlsZWQpO1xuK1x0cmV0dXJuIGV4aXRfc3RhdHVzO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCAyZDUzNjYxOTZlMzA5Li45YzAzNjI0ZmQyOTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMzcsNyArMzcsOCBAQCBlbmRpZlxuICMgTERMSUJTLlxuIE1BS0VGTEFHUyArPSAtLW5vLWJ1aWx0aW4tcnVsZXNcbiBcbi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxuK0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXG4rQ0ZMQUdTICs9ICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4gQ0ZMQUdTICs9IC1XdW5yZWFjaGFibGUtY29kZVxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxuIFxuQEAgLTU3LDggKzU4LDggQEAgZW5kaWZcbiBcbiBURVNUX0dFTl9GSUxFUyA9IGNvd1xuIFRFU1RfR0VOX0ZJTEVTICs9IGNvbXBhY3Rpb25fdGVzdFxuK1RFU1RfR0VOX0ZJTEVTICs9IGd1cFxuIFRFU1RfR0VOX0ZJTEVTICs9IGd1cF9sb25ndGVybVxuLVRFU1RfR0VOX0ZJTEVTICs9IGd1cF90ZXN0XG4gVEVTVF9HRU5fRklMRVMgKz0gaG1tLXRlc3RzXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tYWR2aXNlXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1tbWFwXG5AQCAtMTg3LDggKzE4OCwxMCBAQCBURVNUX0ZJTEVTICs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbiBcbi0kKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmNcbiskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcbitcdFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG4rJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXG4rXHRcdCAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xuIFxuICQoT1VUUFVUKS91ZmZkLXN0cmVzczogdWZmZC1jb21tb24uY1xuICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmNcbkBAIC0yMTcsNyArMjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyArPSAtbTMyIC1teHNhdmVcbiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICs9IC1scnQgLWxkbCAtbG1cbiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4rXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKVxuIGVuZGlmXG4gXG5AQCAtMjI2LDcgKzIyOSw3IEBAICQoQklOQVJJRVNfNjQpOiBDRkxBR1MgKz0gLW02NCAtbXhzYXZlXG4gJChCSU5BUklFU182NCk6IExETElCUyArPSAtbHJ0IC1sZGxcbiAkKEJJTkFSSUVTXzY0KTogJChPVVRQVVQpLyVfNjQ6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4rXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtNjQsJCh0KSkpKVxuIGVuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuQEAgLTE1LDkgKzE1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTUFQX1NJWkVfTUJcdDEwMFxuICNkZWZpbmUgTUFQX1NJWkVcdChNQVBfU0laRV9NQiAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbmluZGV4IDhhYTUyNDlkOWJlZjYuLjMyNjRhODI4NTc1YmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5pbmRleCA0NWI4NGY3YjM2NGUwLi4yODlhZWQyZWJhYzAyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG5AQCAtMjUsNyArMjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gdWludDY0X3QgcGFnZV9zaXplO1xuIHVpbnQ2NF90IHBtZF9wYWdlc2l6ZTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpbmNsdWRlIFwiLi4vcGlkZmQvcGlkZmQuaFwiXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmUzYzJmZmEzYTA1N2Zcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG5AQCAtMCwwICsxLDI3NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbitcbisjZGVmaW5lIE1CICgxVUwgXHUwMDNjXHUwMDNjIDIwKVxuK1xuKy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xuKyNkZWZpbmUgRk9MTF9XUklURVx0MHgwMVx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXG4rXG4rLyogUGFnZSBjb3VudHMgZXhlcmNpc2luZyBzaW5nbGUsIFRIUC1iYXRjaCwgcGFydGlhbCwgYW5kIGZ1bGwtbWFwcGluZyBHVVAuICovXG4rc3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9O1xuK1xuKyNkZWZpbmUgR1VQX1RFU1RfRklMRSBcIi9zeXMva2VybmVsL2RlYnVnL2d1cF90ZXN0XCJcbisjZGVmaW5lIE5SX0hVR0VfUEFHRVMgMTI4XG4rXG4rSFVHRVRMQl9TRVRVUF9ERUZBVUxUX1BBR0VTKE5SX0hVR0VfUEFHRVMpXG4rXG4rRklYVFVSRShndXBfdGVzdClcbit7XG4rXHRpbnQgZ3VwX2ZkO1xuK1x0Y2hhciAqYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVChndXBfdGVzdClcbit7XG4rXHRib29sIHRocDtcbitcdGJvb2wgaHVnZXRsYjtcbitcdGJvb2wgd3JpdGU7XG4rXHRib29sIHNoYXJlZDtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGUpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IHRydWUsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSB0cnVlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF9odWdldGxiKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gdHJ1ZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZClcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfdGhwKVxuK3tcbitcdC50aHAgPSB0cnVlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF9odWdldGxiKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gdHJ1ZSxcbitcdC53cml0ZSA9IGZhbHNlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGd1cF90ZXN0KVxuK3tcbitcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEU7XG4rXHRpbnQgemVyb19mZDtcbitcdGNoYXIgKnA7XG4rXG4rXHRzZWxmLVx1MDAzZXNpemUgPSAxMjggKiBNQjtcbitcbitcdGlmICh2YXJpYW50LVx1MDAzZWh1Z2V0bGIpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuK1xuK1x0XHRpZiAoIWhwX3NpemUpXG4rXHRcdFx0U0tJUChyZXR1cm4sIFwiSHVnZVRMQiBub3QgYXZhaWxhYmxlXFxuXCIpO1xuK1xuK1x0XHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcdTAwM2MgTlJfSFVHRV9QQUdFUylcbitcdFx0XHRTS0lQKHJldHVybiwgXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXG4rXHRcdHNlbGYtXHUwMDNlc2l6ZSA9IE5SX0hVR0VfUEFHRVMgKiBocF9zaXplO1xuK1x0XHRtbWFwX2ZsYWdzIHw9IChNQVBfSFVHRVRMQiB8IE1BUF9BTk9OWU1PVVMpO1xuK1x0fVxuK1xuK1x0aWYgKHZhcmlhbnQtXHUwMDNlc2hhcmVkKVxuK1x0XHRtbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgXHUwMDI2IH5NQVBfUFJJVkFURSkgfCBNQVBfU0hBUkVEO1xuK1xuK1x0LyogemVyb19mZCBoYXMgdG8gYmUgXHUwMDNlPSAwLiBBbHJlYWR5IGNoZWNrZWQgaW4gbWFpbigpICovXG4rXHR6ZXJvX2ZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHplcm9fZmQsIDApO1xuK1xuK1x0LyogZ3VwX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbitcdHNlbGYtXHUwMDNlZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZ3VwX2ZkLCAwKTtcbitcbitcdHNlbGYtXHUwMDNlYWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cdTAwM2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHRcdCAgbW1hcF9mbGFncywgemVyb19mZCwgMCk7XG4rXG4rXHRBU1NFUlRfTkUoc2VsZi1cdTAwM2VhZGRyLCBNQVBfRkFJTEVEKSB7XG4rXHRcdGludCBlcnIgPSBlcnJubztcbitcbitcdFx0Y2xvc2UoemVyb19mZCk7XG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbitcdFx0VEhfTE9HKFwibW1hcCBmYWlsZWQ6ICVzXCIsIHN0cmVycm9yKGVycikpO1xuK1x0fVxuK1x0Y2xvc2UoemVyb19mZCk7XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2V0aHApXG4rXHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuK1x0ZWxzZSBpZiAoIXZhcmlhbnQtXHUwMDNlaHVnZXRsYilcbitcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbitcdGZvciAocCA9IHNlbGYtXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyXG4rXHRcdFx0KyBzZWxmLVx1MDAzZXNpemU7IHAgKz0gcHNpemUoKSlcbitcdFx0cFswXSA9IDA7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpXG4re1xuK1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbitcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX2d1cF9jbWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHRcdCBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLFxuK1x0XHRcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxuK1x0XHRcdCB1bnNpZ25lZCBsb25nIGNvbW1hbmQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0ge1xuK1x0XHRcdC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyLFxuK1x0XHRcdC5zaXplID0gc2VsZi1cdTAwM2VzaXplLFxuK1x0XHRcdC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXHUwMDNjIDAgP1xuK1x0XHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV0sXG4rXHRcdFx0Lmd1cF9mbGFncyA9IHZhcmlhbnQtXHUwMDNld3JpdGUgPyBGT0xMX1dSSVRFIDogMCxcbitcdFx0fTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBjb21tYW5kLCBcdTAwMjZndXApLCAwKTtcbitcdH1cbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9CQVNJQ19URVNUKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlcylcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9CQVNJQ19URVNUKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlc19mYXN0KVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0ZBU1RfQkVOQ0hNQVJLKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19mYXN0KVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0ZBU1RfQkVOQ0hNQVJLKTtcbit9XG4rXG4rVEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19sb25ndGVybSlcbit7XG4rXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9MT05HVEVSTV9CRU5DSE1BUkspO1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0aW50IGZkO1xuK1x0Y2hhciAqZmlsZSA9IFwiL2Rldi96ZXJvXCI7XG4rXG4rXHRmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbitcbitcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuK1x0aWYgKGZkID09IC0xKSB7XG4rXHRcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRcdGlmIChlcnJubyA9PSBFQUNDRVMpXG4rXHRcdFx0a3NmdF9leGl0X3NraXAoXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuK1x0XHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XG4rXHRcdFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpO1xuK1xuK1x0XHRcdGlmICghZGVidWdmcykge1xuK1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCIpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRjbG9zZWRpcihkZWJ1Z2ZzKTtcbitcdFx0XHRcdGtzZnRfZXhpdF9za2lwKFwiQ2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcXG5cIik7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwiLCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IGUyNjQyZWNhMGQwMmIuLmZhMWE2NTE5NjNmZDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbkBAIC0xMCw5ICsxMCw2IEBAXG4gICogYnVncy5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4tXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG5AQCAtMzMsNiArMzAsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4gXG4gLypcbiAgKiBUaGlzIGlzIGEgcHJpdmF0ZSBVQVBJIHRvIHRoZSBrZXJuZWwgdGVzdCBtb2R1bGUgc28gaXQgaXNuJ3QgZXhwb3J0ZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuQEAgLTE4LDcgKzE4LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1mZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNClcbiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcbmluZGV4IGVkM2Q5MmU4NjJkODcuLjliNzI0YWY2NmU5MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG5AQCAtMjYsNyArMjYsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxuICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbmluZGV4IGJjMjAyZTRlZDJiZGEuLjIwODY0ZTdkNGUwYzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG5AQCAtMjEsOSArMjEsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdGZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZm5kZWYgTUFEVl9TT0ZUX09GRkxJTkVcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5pbmRleCBmYjQ2MDA1NzBlMTMxLi45NDk1OTc0ZWNjYmVhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuQEAgLTIwLDcgKzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5AQCAtMTAsNyArMTAsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbkBAIC0yNSw3ICsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggMWQyZDZiZDcyZmQyYS4uYWRhMTFkMzBkMzg4NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyArMjIsNiBAQFxuICNpbmNsdWRlIFwibGludXgvbWFnaWMuaFwiXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTEyMiw2ICsxMjEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxuIFx0Y2hhciBidWZbMSBcdTAwM2NcdTAwM2MgMTBdO1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiBcdGNoYXIgKnN0ciwgKmVuZDtcbitcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRpZiAoc3RhdChmaW5mby5kaXIsIFx1MDAyNnBhdGhfc3RhdCkpXG5AQCAtMTQyLDggKzE0Miw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuLVx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInJlYWRfZmlsZSh1ZXZlbnQpXCIpO1xuK1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZF9maWxlKCVzKTogJXNcXG5cIiwgcGF0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwiREVWVFlQRT1kaXNrXCIpKSB7XG4gXHRcdC8qIEZvdW5kIGl0ICovXG4gXHRcdGlmIChzbnByaW50ZihmaW5mby5kZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuQEAgLTMyNCw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4rXHRpbnQgZmQsIHJldDtcbiBcdHZvaWQgKnA7XG4gXHR1bnNpZ25lZCBsb25nIHNpemU7XG4gXG5AQCAtMzY4LDcgKzM2OSwxMSBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtbWFwKClcIik7XG4gXG4gXHQvKiBEcm9wIHBhZ2UgY2FjaGUgKi9cbi1cdHdyaXRlX2ZpbGUoXCIvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcIiwgXCIzXCIsIDIpO1xuK1x0cmV0ID0gd3JpdGVfZmlsZShcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wiLCBcIjNcIiwgMik7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJ3cml0ZV9maWxlKGRyb3BfY2FjaGVzKTogJXNcXG5cIixcbitcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbitcbiBcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtMTUsNyArMTUsNiBAQFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggXCIvc3lzL2tlcm5lbC9tbS9rc20vXCJcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNSw3ICs1LDYgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbkBAIC0xNiw2ICsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggZWFkYzcxNTljYTViOS4uMGM1ZGU2ZWMwNmM4MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjQsNyArMjQsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTFx0XHQoUEFHRV9JU19XUEFMTE9XRUQgfCBQQUdFX0lTX1dSSVRURU4gfFx0XFxcbiBcdFx0XHRcdFx0IFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5mOWVjMTQwOGE2ZTMwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuQEAgLTE0LDcgKzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VEXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuaW5kZXggYWU2ZTE1MzBiMzU0OC4uYjc4ODJhYjk3NjgzZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuQEAgLTQ1LDggKzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gI2luY2x1ZGUgXCJwa2V5LWhlbHBlcnMuaFwiXG4gXG4gdTY0IHNoYWRvd19wa2V5X3JlZztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBkMDlmOWY2YTM4NGVlLi5hZTBhYjVlZmFiYWU2IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMTMwLDMwICsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwiLUggLW0gJGh1Z2V0bGJfbWJcIjsgZG9cbi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm1cbi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG9cbi0gICAgICAgICAgICAjIC13OiB3cml0ZT0xLCAtVzogd3JpdGU9MFxuLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG9cbi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkXG4tICAgICAgICAgICAgICAgIGZvciBzaGFyZSBpbiAtUyBcIiBcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICMgLW46IEhvdyBtYW55IHBhZ2VzIHRvIGZldGNoIHRvZ2V0aGVyPyAgNTEyIGlzIHNwZWNpYWxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCdzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0b1xuLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm1cbi0gICAgICAgICAgICAgICAgICAgIGZvciBudW0gaW4gXCItbiAxXCIgXCItbiA1MTJcIiBcIi1uIDEyM1wiIFwiLW4gLTFcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCJhcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XCJcbiBpZiBbIC16IFwiJEFSQ0hcIiBdOyB0aGVuXG5AQCAtMjc1LDE4ICsyNTEsNyBAQCBmaVxuIFxuIENBVEVHT1JZPVwibW1hcFwiIHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxuIFxuLWlmICRSVU5fQUxMOyB0aGVuXG4tICAgIHJ1bl9ndXBfbWF0cml4XG4tZWxzZVxuLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMVxuLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFxuK0NBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cFxuIENBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF9sb25ndGVybVxuIFxuIENBVEVHT1JZPVwidXNlcmZhdWx0ZmRcIiBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICs5LDYgQEBcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9wYWdlbWFwXCJcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCA4NmE2MDM2OTI4MjYxLi4wZTA4M2FiNzFhZjYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiB1aW50NjRfdCBwYWdlc2l6ZTtcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xuQEAgLTE0Niw3ICsxNDUsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGVfZGVidWdmcyhjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdGlmIChyZXQgXHUwMDNlPSBJTlBVVF9NQVgpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcbi1cdHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCArIDEpO1xuK1x0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJ3cml0ZV9maWxlKCVzKTogJXNcXG5cIiwgU1BMSVRfREVCVUdGUyxcbitcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgKzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcbiAjZGVmaW5lIE1BUF9IVUdFVExCXHQweDQwMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5pbmRleCA4ZWIwYzU2MzBlN2UzLi45NmY3Mjg5OGViZTBhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbkBAIC0xNyw3ICsxNyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIGludCBiYWNraW5nX2ZkID0gLTE7XG4gaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5pbmRleCA5MmEyMWI5N2Y3NDVhLi4wNzIzODQzYTc2MjZiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxuQEAgLTM3LDcgKzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggYzk3M2Q2NzIyNzIwYy4uZWI0YjI0MzNiMDBlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggKzcsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidWZmZC1jb21tb24uaFwiXG4gXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuaW5kZXggZTI0ZDdiYTAwYjQ0MS4uNWEzNTRhNjY0ZDFmNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5AQCAtMTEsNyArMTEsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIC8qXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggNDgyMWEzNTYzMDM2My4uZjg5MTZiMmFiYzJlZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtODg1LDExMSArODg1LDU0IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmV0IFx1MDAzZSAwID8gMCA6IC1lcnJubztcbiB9XG4gXG4taW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4te1xuLVx0aW50IGZkO1xuLVx0c3NpemVfdCBudW1yZWFkO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4tXHRcdGNsb3NlKGZkKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRidWZbbnVtcmVhZF0gPSAnXFwwJztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkluY29ycmVjdCBidWZmZXIgbGVuOiAlenVcXG5cIiwgYnVmbGVuKTtcbi1cbi1cdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XG4tXHRpZiAoZmQgPT0gLTEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIG9wZW4gZmFpbGVkOiAlc1xcblwiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpO1xuLVxuLVx0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuLVx0c2F2ZWRfZXJybm8gPSBlcnJubztcbi1cdGNsb3NlKGZkKTtcbi1cdGVycm5vID0gc2F2ZWRfZXJybm87XG4tXHRpZiAobnVtd3JpdHRlbiBcdTAwM2MgMCkge1xuLVx0XHRpZiAoaWdub3JlX2VpbnZhbCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xcblwiLCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdH1cbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIHdyaXRlKCUuKnMpIGlzIHRydW5jYXRlZCwgZXhwZWN0ZWQgJXp1IGJ5dGVzLCBnb3QgJXpkIGJ5dGVzXFxuXCIsXG4tXHRcdFx0XHRwYXRoLCAoaW50KShidWZsZW4gLSAxKSwgYnVmLCBidWZsZW4gLSAxLCBudW13cml0dGVuKTtcbi19XG4tXG4tdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbi17XG4tXHRfX3dyaXRlX2ZpbGUocGF0aCwgYnVmLCBidWZsZW4sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7XG4tfVxuLVxuLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aClcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwicmVhZF9maWxlKClcIik7XG4tXG4tXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgX193cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0sIGJvb2wgaWdub3JlX2VpbnZhbClcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRzcHJpbnRmKGJ1ZiwgXCIlbHVcIiwgbnVtKTtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICsgMSwgaWdub3JlX2VpbnZhbCk7XG4tfVxuLVxuLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuLXtcbi1cdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7XG4tfVxuLVxuLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4te1xuLVx0cmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIHRydWUpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDtcbiBcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXG4ge1xuLVx0aWYgKHNobW1heClcbi1cdFx0d3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcIiwgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIHNobWFsbCk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHNobW1heCkge1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBzaG1tYXgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZXN0b3JlIHNobW1heDogJXNcXG5cIixcbitcdFx0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuK1x0fVxuK1x0aWYgKHNobWFsbCkge1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBzaG1hbGwpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXG5cIixcbitcdFx0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuK1x0fVxuIH1cbiBcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlYWRfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcIiwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcblwiLFxuK1x0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuIFxuLVx0dmFsID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiKTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCIsXG4rXHRcdFx0XHRcdCAgIGxlbmd0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1tYXggPSB2YWw7XG4gXHR9XG4gXG4tXHR2YWwgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIpO1xuK1x0cmV0ID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCIsXG4rXHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4gXHRpZiAodmFsIFx1MDAzYyBucikge1xuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBucik7XG4rXHRcdHJldCA9IHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIG5yKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htYWxsOiAlc1xcblwiLFxuK1x0XHRcdFx0XHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICs4LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZSAvKiBfU0NfUEFHRVNJWkUgKi9cbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vZmlsZV91dGlscy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgQklUX1VMTChucikgICAgICAgICAgICAgICAgICAgKDFVTEwgXHUwMDNjXHUwMDNjIChucikpXG4gI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KVxuQEAgLTE2NiwxMiArMTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDoyNjoxNC43MDA0MDY3NzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzgyOTYyNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBEZXRlcm1pbmluZyBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGZ1enppbmcuIEZpcnN0LCBJJ20gZXhhbWluaW5nIHRoZSBkaWZmIHRvIHNlZSB3aGF0J3MgYmVlbiB0b3VjaGVkLiBJIHNlZSBjaGFuZ2VzIGluIGBEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdGAsIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUgKHN0YW5kYXJkIHN0dWZmKSwgYW5kIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IHRoZSBoZWxwIHRleHQgZm9yIGBDT05GSUdfR1VQX1RFU1RgLiBUaGVyZSdzIGFsc28gYSBzaWduaWZpY2FudCByZXNodWZmbGluZyBvZiBmaWxlcyB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgd2l0aCBhZGRpdGlvbnMgdG8gYHRvb2xzL2xpYi9tbS9gIGFuZCBhIG1hc3MgbWlncmF0aW9uL3JlbmFtaW5nIG9mIHNlbGZ0ZXN0cyB0byB0aGUgdG9vbHMvbW0vIGRpcmVjdG9yeSwgYnV0IHRoZXNlIGFyZSBwcmltYXJpbHkgdGVzdCB1dGlsaXRpZXMgYW5kIGxpYnJhcmllcy5cblxuTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gKmFjdHVhbCoga2VybmVsIGNvZGUgY2hhbmdlcy4gIExvb2tpbmcgY2xvc2VseSBhdCB0aGUgYG1tL0tjb25maWdgIGNoYW5nZSwgaXQncyBzdHJpY3RseSBjb3NtZXRpYzsgaXQncyBqdXN0IG1vZGlmaWVkIHRoZSBoZWxwIHRleHQgdG8gbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBpbmNsdWRlcyBiZW5jaG1hcmtzLCBub3QganVzdCB1bml0IHRlc3RzLiAgVGhpcyBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5LCBhcyBjaGFuZ2luZyB0aGUgS2NvbmZpZyBoZWxwIHRleHQgZG9lcyBub3QgYWx0ZXIgdGhlIHVuZGVybHlpbmcga2VybmVsIGZ1bmN0aW9uYWxpdHkuXG5cbkVzc2VudGlhbGx5LCAqYWxsKiB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gZG9jdW1lbnRhdGlvbiwgbWFpbnRhaW5lcnMsIEtjb25maWcgaGVscCB0ZXh0LCBhbmQgdXNlcnNwYWNlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRoZSB0b29scyBkaXJlY3RvcnkuIE5vIGNvcmUga2VybmVsIGNvZGUgaXMgYWZmZWN0ZWQuXG5cbk5vdywgbGV0J3MgdXNlIHRoZSBwcm92aWRlZCBndWlkZWxpbmVzIHRvIHF1aWNrbHkgZXZhbHVhdGUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aHkgb2YgZnV6emluZy4gQWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSwgYSBcIldvcnRoRnV6emluZz1mYWxzZVwiIHJlc3VsdCBpcyBhcHByb3ByaWF0ZSBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBkb2N1bWVudGF0aW9uIG1vZGlmaWNhdGlvbnMsIEtjb25maWcgY2hhbmdlcyAoc3BlY2lmaWNhbGx5IGhlbHAgdGV4dCwgd2hpY2ggdGhpcyBpcyksIGNoYW5nZXMgaW4gY29tbWVudHMsIG9yIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuIFVzZXItc3BhY2UgdXRpbGl0aWVzIG9yIHRlc3RzIGFyZSBhbHNvIG5vdCB0byBiZSBpbmNsdWRlZC4gVGhpcyBwYXRjaCB0aWNrcyBhbGwgdGhvc2UgYm94ZXMuIEl0IGlzIG1vZGlmeWluZyBkb2N1bWVudGF0aW9uLCBLY29uZmlnJ3MgaGVscCB0ZXh0LCBhbmQgdGVzdCBmaWxlcyBpbiBgdG9vbHMvYCwgc28gZGVmaW5pdGVseSBub3Qgd29ydGggZnV6emluZy5cblxuTXkgY29uY2x1c2lvbiBpczogdGhpcyBwYXRjaCBpcyBub3Qgd29ydGggZnV6emluZy4gSSdsbCBkb3VibGUtY2hlY2sgdGhpcyByZWFzb25pbmcgYnkgaXNzdWluZyB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM3MCwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDoyNjoyMS40ODMzNzIxNjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgRG9jdW1lbnRhdGlvbiwgTUFJTlRBSU5FUlMsIEtjb25maWcgaGVscCB0ZXh0LCBhbmQgdXNlcnNwYWNlIHRvb2xpbmcvc2VsZnRlc3RzIHVuZGVyIHRvb2xzLy4gTm8ga2VybmVsIHJ1bnRpbWUgbG9naWMgaXMgbW9kaWZpZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIERvY3VtZW50YXRpb24sIE1BSU5UQUlORVJTLCBLY29uZmlnIGhlbHAgdGV4dCwgYW5kIHVzZXJzcGFjZSB0b29saW5nL3NlbGZ0ZXN0cyB1bmRlciB0b29scy8uIE5vIGtlcm5lbCBydW50aW1lIGxvZ2ljIGlzIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6MjY6MjEuNDgzMzkzMDY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpb5pj[1] Phase: Running StartedAt: 2026-08-31 04:26:33 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpb5pj[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-31 04:26:33 +0000 UTC FinishedAt: 2026-08-31 04:26:39 +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,}