Name: series-workflownkvkn Phase: Failed StartedAt: 2026-09-07 14:11:05 +0000 UTC FinishedAt: 2026-09-07 14:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownkvkn[0] Phase: Succeeded StartedAt: 2026-09-07 14:11:05 +0000 UTC FinishedAt: 2026-09-07 14:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownkvkn[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 14:11:05 +0000 UTC FinishedAt: 2026-09-07 14:13:06 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgczM5MC1zcGVjaWZpYyBtZW1vcnkgYWxsb2NhdGlvbiBoZWxwZXJzIGFuZCB0aGUgczM5MCBDaGFubmVsIEkvTyAoQ0lPKSBzdWJzeXN0ZW0gKGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oIGFuZCBkcml2ZXJzL3MzOTAvY2lvLyopLiBUaGVzZSBmaWxlcyBhcmUgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgYXJlIG5vdCBjb21waWxlZCBvciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NDQwZjFlMGI5Y2JlYTA2M2U5Y2ZjNjJjODdlMTY5ZWMyMmY3ODFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDoxMjozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oXG5pbmRleCAwNmUxZWMyYWZkNWFmLi4yNDg4MjlkNDYxYmNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oXG5AQCAtMTQ3LDcgJiM0MzsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxuIFx0XHRcdGliLVx1MDAzZWRhdGFbaV0gPSBkbWE2NF9hZGQoaWItXHUwMDNlZGF0YVtpIC0gMV0sIElEQV9CTE9DS19TSVpFKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuLVx0XHR2YWRkciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlX29yZGVyKTtcbiYjNDM7XHRcdHZhZGRyID0ga21hbGxvYyhQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIHBhZ2Vfb3JkZXIsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIXZhZGRyKVxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdGliLVx1MDAzZWRhdGFbaV0gPSB2aXJ0X3RvX2RtYTY0KHZhZGRyKTtcbkBAIC0xNTcsNyAmIzQzOzE1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlkYWxfYnVmZmVyICppZGFsX2J1ZmZlcl9hbGxvYyhzaXplX3Qgc2l6ZSwgaW50IHBhZ2Vfb3JkZXIpXG4gXHR3aGlsZSAoaSBcdTAwM2U9IG5yX2NodW5rcykge1xuIFx0XHRpIC09IG5yX2NodW5rcztcbiBcdFx0dmFkZHIgPSBkbWE2NF90b192aXJ0KGliLVx1MDAzZWRhdGFbaV0pO1xuLVx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBpYi1cdTAwM2VwYWdlX29yZGVyKTtcbiYjNDM7XHRcdGtmcmVlKHZhZGRyKTtcbiBcdH1cbiBcdGtmcmVlKGliKTtcbiBcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuQEAgLTE3NSw3ICYjNDM7MTc1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkYWxfYnVmZmVyX2ZyZWUoc3RydWN0IGlkYWxfYnVmZmVyICppYilcbiBcdG5yX2NodW5rcyA9IChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIGliLVx1MDAzZXBhZ2Vfb3JkZXIpIFx1MDAzZVx1MDAzZSBJREFfU0laRV9TSElGVDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3B0cnM7IGkgJiM0Mzs9IG5yX2NodW5rcykge1xuIFx0XHR2YWRkciA9IGRtYTY0X3RvX3ZpcnQoaWItXHUwMDNlZGF0YVtpXSk7XG4tXHRcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGliLVx1MDAzZXBhZ2Vfb3JkZXIpO1xuJiM0MztcdFx0a2ZyZWUodmFkZHIpO1xuIFx0fVxuIFx0a2ZyZWUoaWIpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXG5pbmRleCA5Njg5ZjcyMmM4NjNjLi5kOThmNjI5ZTg5Mjk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXG5AQCAtOTMxLDEyICYjNDM7OTMxLDEyIEBAIHN0YXRpYyBpbnQgY3ViX2FsbG9jKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzKVxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDU1NfTlVNX0NVQl9QQUdFUzsgaSYjNDM7JiM0MzspIHtcbi1cdFx0Y3NzLVx1MDAzZWN1YltpXSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiYjNDM7XHRcdGNzcy1cdTAwM2VjdWJbaV0gPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuIFx0XHRpZiAoIWNzcy1cdTAwM2VjdWJbaV0pXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDU1NfTlVNX0VDVUJfUEFHRVM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGNzcy1cdTAwM2VlY3ViW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRjc3MtXHUwMDNlZWN1YltpXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFjc3MtXHUwMDNlZWN1YltpXSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbkBAIC05NDksMTEgJiM0Mzs5NDksMTEgQEAgc3RhdGljIHZvaWQgY3ViX2ZyZWUoc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3MpXG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENTU19OVU1fQ1VCX1BBR0VTOyBpJiM0MzsmIzQzOykge1xuLVx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY3NzLVx1MDAzZWN1YltpXSk7XG4mIzQzO1x0XHRrZnJlZShjc3MtXHUwMDNlY3ViW2ldKTtcbiBcdFx0Y3NzLVx1MDAzZWN1YltpXSA9IE5VTEw7XG4gXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDU1NfTlVNX0VDVUJfUEFHRVM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljc3MtXHUwMDNlZWN1YltpXSk7XG4mIzQzO1x0XHRrZnJlZShjc3MtXHUwMDNlZWN1YltpXSk7XG4gXHRcdGNzcy1cdTAwM2VlY3ViW2ldID0gTlVMTDtcbiBcdH1cbiB9XG5AQCAtMTE0Miw4ICYjNDM7MTE0Miw4IEBAIGludCBfX2luaXQgY2hzY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHNlaV9wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuLVx0Y2hzY19wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuJiM0MztcdHNlaV9wYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiYjNDM7XHRjaHNjX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuIFx0aWYgKCFzZWlfcGFnZSB8fCAhY2hzY19wYWdlKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0X2VycjtcbkBAIC0xMTUzLDE2ICYjNDM7MTE1MywxNiBAQCBpbnQgX19pbml0IGNoc2NfaW5pdCh2b2lkKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHRyZXR1cm4gcmV0O1xuIG91dF9lcnI6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19wYWdlKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWlfcGFnZSk7XG4mIzQzO1x0a2ZyZWUoY2hzY19wYWdlKTtcbiYjNDM7XHRrZnJlZShzZWlfcGFnZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiB2b2lkIF9faW5pdCBjaHNjX2luaXRfY2xlYW51cCh2b2lkKVxuIHtcbiBcdGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfcGFnZSk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2VpX3BhZ2UpO1xuJiM0MztcdGtmcmVlKGNoc2NfcGFnZSk7XG4mIzQzO1x0a2ZyZWUoc2VpX3BhZ2UpO1xuIH1cbiBcbiBpbnQgX19jaHNjX2VuYWJsZV9mYWNpbGl0eShzdHJ1Y3QgY2hzY19zZGFfYXJlYSAqc2RhX2FyZWEsIGludCBvcGVyYXRpb25fY29kZSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmNcbmluZGV4IGI2Y2I4YmI4YmNjNGIuLjIyNWFhYWM3ZGQzMDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY1xuQEAgLTE1LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWlzY2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsX3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2hzYy5oXHUwMDNlXG5AQCAtMjkyLDcgJiM0MzsyOTMsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfc3RhcnQodm9pZCBfX3VzZXIgKnVzZXJfYXJlYSlcbiBcdGlmICghY3NzX2dlbmVyYWxfY2hhcmFjdGVyaXN0aWNzLmR5bmlvKVxuIFx0XHQvKiBJdCBtYWtlcyBubyBzZW5zZSB0byB0cnkuICovXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdGNoc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRjaHNjX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0RNQSB8IEdGUF9LRVJORUwpO1xuIFx0aWYgKCFjaHNjX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0cmVxdWVzdCA9IGt6YWxsb2Nfb2JqKCpyZXF1ZXN0KTtcbkBAIC0zMjEsNyAmIzQzOzMyMiw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9zdGFydCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxuIFx0c25wcmludGYoZGJmLCBzaXplb2YoZGJmKSwgXCYjMzQ7cmV0OiVkXCYjMzQ7LCByZXQpO1xuIFx0Q0hTQ19MT0coMCwgZGJmKTtcbiBcdGtmcmVlKHJlcXVlc3QpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfYXJlYSk7XG4mIzQzO1x0a2ZyZWUoY2hzY19hcmVhKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTM0MCw3ICYjNDM7MzQxLDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3NldCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4tXHRvbl9jbG9zZV9jaHNjX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0b25fY2xvc2VfY2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcbiBcdGlmICghb25fY2xvc2VfY2hzY19hcmVhKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0X2ZyZWVfcmVxdWVzdDtcbkBAIC0zNTMsNyAmIzQzOzM1NCw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9zZXQodm9pZCBfX3VzZXIgKnVzZXJfYXJlYSlcbiBcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBvdXRfZnJlZV9jaHNjOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XG4mIzQzO1x0a2ZyZWUob25fY2xvc2VfY2hzY19hcmVhKTtcbiBcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XG4gb3V0X2ZyZWVfcmVxdWVzdDpcbiBcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xuQEAgLTM3NSw3ICYjNDM7Mzc2LDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3JlbW92ZSh2b2lkKVxuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpb25fY2xvc2VfY2hzY19hcmVhKTtcbiYjNDM7XHRrZnJlZShvbl9jbG9zZV9jaHNjX2FyZWEpO1xuIFx0b25fY2xvc2VfY2hzY19hcmVhID0gTlVMTDtcbiBcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xuIFx0b25fY2xvc2VfcmVxdWVzdCA9IE5VTEw7XG5AQCAtMzg5LDM5ICYjNDM7MzkwLDI5IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9yZW1vdmUodm9pZClcbiBcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfc3RhcnRfc3luYyh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxuIHtcbi1cdHN0cnVjdCBjaHNjX3N5bmNfYXJlYSAqY2hzY19hcmVhO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2Nfc3luY19hcmVhICpjaHNjX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4mIzQzO1x0aW50IGNjb2RlO1xuIFxuLVx0Y2hzY19hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuJiM0MztcdGNoc2NfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIWNoc2NfYXJlYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2hzY19hcmVhLCB1c2VyX2FyZWEsIFBBR0VfU0laRSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbi1cdGlmIChjaHNjX2FyZWEtXHUwMDNlaGVhZGVyLmNvZGUgXHUwMDI2IDB4NDAwMCkge1xuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihjaHNjX2FyZWEsIHVzZXJfYXJlYSwgUEFHRV9TSVpFKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdGlmIChjaHNjX2FyZWEtXHUwMDNlaGVhZGVyLmNvZGUgXHUwMDI2IDB4NDAwMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0Y2hzY19sb2dfY29tbWFuZChjaHNjX2FyZWEpO1xuIFx0Y2NvZGUgPSBjaHNjKGNoc2NfYXJlYSk7XG4tXHRpZiAoY2NvZGUgIT0gMCkge1xuLVx0XHRyZXQgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuJiM0MztcdGlmIChjY29kZSAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfYXJlYSwgY2hzY19hcmVhLCBQQUdFX1NJWkUpKVxuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0ZWxzZVxuLVx0XHRyZXQgPSAwO1xuLW91dF9mcmVlOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfYXJlYSk7XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2NoYW5uZWxfcGF0aCh2b2lkIF9fdXNlciAqdXNlcl9jZClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19jaHBfY2QgKmNkO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2NfY2hwX2NkICpjZCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjNDM7XHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIDogMjtcbkBAIC00MzYsMjAgJiM0Mzs0MjcsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY2hhbm5lbF9wYXRoKHZvaWQgX191c2VyICp1c2VyX2NkKVxuIFx0XHR1MzIgOiAzMjtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xuIFx0XHR1OCBkYXRhW1BBR0VfU0laRSAtIDIwXTtcbi1cdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3BjZF9hcmVhO1xuJiM0MztcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3BjZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIFxuLVx0c2NwY2RfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiYjNDM7XHRzY3BjZF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2NwY2RfYXJlYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRjZCA9IGt6YWxsb2Nfb2JqKCpjZCk7XG4tXHRpZiAoIWNkKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuJiM0MztcdGlmICghY2QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NwY2RfYXJlYS1cdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAxMDtcbiBcdHNjcGNkX2FyZWEtXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDI4O1xuIFx0c2NwY2RfYXJlYS1cdTAwM2VtID0gY2QtXHUwMDNlbTtcbkBAIC00NTksMzEgJiM0Mzs0NDYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY2hhbm5lbF9wYXRoKHZvaWQgX191c2VyICp1c2VyX2NkKVxuIFx0c2NwY2RfYXJlYS1cdTAwM2VsYXN0X2NocGlkID0gY2QtXHUwMDNlY2hwaWQuaWQ7XG4gXG4gXHRjY29kZSA9IGNoc2Moc2NwY2RfYXJlYSk7XG4tXHRpZiAoY2NvZGUgIT0gMCkge1xuLVx0XHRyZXQgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuJiM0MztcdGlmIChjY29kZSAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHRpZiAoc2NwY2RfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcJiMzNDtzY3BjZDogcmVzcG9uc2UgY29kZT0leFxcblwmIzM0OyxcbiBcdFx0XHQgc2NwY2RfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlKTtcbi1cdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFx0bWVtY3B5KFx1MDAyNmNkLVx1MDAzZWNwY2IsIFx1MDAyNnNjcGNkX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjcGNkX2FyZWEtXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jZCwgY2QsIHNpemVvZigqY2QpKSlcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gMDtcbi1vdXRfZnJlZTpcbi1cdGtmcmVlKGNkKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3BjZF9hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpXG4ge1xuLVx0c3RydWN0IGNoc2NfY3VfY2QgKmNkO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2NfY3VfY2QgKmNkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuJiM0MztcdGludCBjY29kZTtcbiBcdHN0cnVjdCB7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0O1xuIFx0XHR1MzIgOiAyO1xuQEAgLTQ5OCwyMCAmIzQzOzQ3NywxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jdSh2b2lkIF9fdXNlciAqdXNlcl9jZClcbiBcdFx0dTMyIDogMzI7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2N1Y2RfYXJlYTtcbiYjNDM7XHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2N1Y2RfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcbi1cdHNjdWNkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c2N1Y2RfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNjdWNkX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Y2QgPSBremFsbG9jX29iaigqY2QpO1xuLVx0aWYgKCFjZCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGNkLCB1c2VyX2NkLCBzaXplb2YoKmNkKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRpZiAoIWNkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKGNkLCB1c2VyX2NkLCBzaXplb2YoKmNkKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHNjdWNkX2FyZWEtXHUwMDNlcmVxdWVzdC5sZW5ndGggPSAweDAwMTA7XG4gXHRzY3VjZF9hcmVhLVx1MDAzZXJlcXVlc3QuY29kZSA9IDB4MDAyNjtcbiBcdHNjdWNkX2FyZWEtXHUwMDNlbSA9IGNkLVx1MDAzZW07XG5AQCAtNTIxLDMxICYjNDM7NDk2LDIzIEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2N1KHZvaWQgX191c2VyICp1c2VyX2NkKVxuIFx0c2N1Y2RfYXJlYS1cdTAwM2VsYXN0X2N1biA9IGNkLVx1MDAzZWN1bjtcbiBcbiBcdGNjb2RlID0gY2hzYyhzY3VjZF9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4mIzQzO1x0aWYgKGNjb2RlICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChzY3VjZF9hcmVhLVx1MDAzZXJlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7XG4tXHRcdHJldCA9IC1FSU87XG4gXHRcdENIU0NfTVNHKDAsIFwmIzM0O3NjdWNkOiByZXNwb25zZSBjb2RlPSV4XFxuXCYjMzQ7LFxuIFx0XHRcdCBzY3VjZF9hcmVhLVx1MDAzZXJlc3BvbnNlLmNvZGUpO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXHRtZW1jcHkoXHUwMDI2Y2QtXHUwMDNlY3VjYiwgXHUwMDI2c2N1Y2RfYXJlYS1cdTAwM2VyZXNwb25zZSwgc2N1Y2RfYXJlYS1cdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xuIFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2NkLCBjZCwgc2l6ZW9mKCpjZCkpKVxuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0ZWxzZVxuLVx0XHRyZXQgPSAwO1xuLW91dF9mcmVlOlxuLVx0a2ZyZWUoY2QpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjdWNkX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19zY2hfY3Uodm9pZCBfX3VzZXIgKnVzZXJfY3VkKVxuIHtcbi1cdHN0cnVjdCBjaHNjX3NjaF9jdWQgKmN1ZDtcbi1cdGludCByZXQsIGNjb2RlO1xuJiM0MztcdHN0cnVjdCBjaHNjX3NjaF9jdWQgKmN1ZCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjNDM7XHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIDogMjtcbkBAIC01NjEsMjAgJiM0Mzs1MjgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fc2NoX2N1KHZvaWQgX191c2VyICp1c2VyX2N1ZClcbiBcdFx0dTMyIDogMzI7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc3NjdWRfYXJlYTtcbiYjNDM7XHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc3NjdWRfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcbi1cdHNzY3VkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c3NjdWRfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNzY3VkX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Y3VkID0ga3phbGxvY19vYmooKmN1ZCk7XG4tXHRpZiAoIWN1ZCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGN1ZCwgdXNlcl9jdWQsIHNpemVvZigqY3VkKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRpZiAoIWN1ZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihjdWQsIHVzZXJfY3VkLCBzaXplb2YoKmN1ZCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRzc2N1ZF9hcmVhLVx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDEwO1xuIFx0c3NjdWRfYXJlYS1cdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMDY7XG4gXHRzc2N1ZF9hcmVhLVx1MDAzZW0gPSBjdWQtXHUwMDNlc2NoaWQubTtcbkBAIC01ODUsMzEgJiM0Mzs1NDgsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fc2NoX2N1KHZvaWQgX191c2VyICp1c2VyX2N1ZClcbiBcdHNzY3VkX2FyZWEtXHUwMDNlbGFzdF9zY2ggPSBjdWQtXHUwMDNlc2NoaWQuc2NoX25vO1xuIFxuIFx0Y2NvZGUgPSBjaHNjKHNzY3VkX2FyZWEpO1xuLVx0aWYgKGNjb2RlICE9IDApIHtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRpZiAoY2NvZGUgIT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFx0aWYgKHNzY3VkX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiBcdFx0Q0hTQ19NU0coMCwgXCYjMzQ7c3NjdWQ6IHJlc3BvbnNlIGNvZGU9JXhcXG5cJiMzNDssXG4gXHRcdFx0IHNzY3VkX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSk7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcdG1lbWNweShcdTAwMjZjdWQtXHUwMDNlc2N1YiwgXHUwMDI2c3NjdWRfYXJlYS1cdTAwM2VyZXNwb25zZSwgc3NjdWRfYXJlYS1cdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xuIFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2N1ZCwgY3VkLCBzaXplb2YoKmN1ZCkpKVxuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0ZWxzZVxuLVx0XHRyZXQgPSAwO1xuLW91dF9mcmVlOlxuLVx0a2ZyZWUoY3VkKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzc2N1ZF9hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcbiB7XG4tXHRzdHJ1Y3QgY2hzY19jb25mX2luZm8gKmNpO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2NfY29uZl9pbmZvICpjaSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjNDM7XHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIDogMjtcbkBAIC02MjMsMjAgJiM0Mzs1NzgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcbiBcdFx0dTY0IDogNjQ7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NpX2FyZWE7XG4mIzQzO1x0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjaV9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIFxuLVx0c2NpX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c2NpX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuIFx0aWYgKCFzY2lfYXJlYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRjaSA9IGt6YWxsb2Nfb2JqKCpjaSk7XG4tXHRpZiAoIWNpKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2ksIHVzZXJfY2ksIHNpemVvZigqY2kpKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuJiM0MztcdGlmICghY2kpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoY2ksIHVzZXJfY2ksIHNpemVvZigqY2kpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NpX2FyZWEtXHUwMDNlcmVxdWVzdC5sZW5ndGggPSAweDAwMTA7XG4gXHRzY2lfYXJlYS1cdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMTI7XG4gXHRzY2lfYXJlYS1cdTAwM2VtID0gY2ktXHUwMDNlaWQubTtcbkBAIC02NDUsMzEgJiM0Mzs1OTYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcbiBcdHNjaV9hcmVhLVx1MDAzZXNzaWQgPSBjaS1cdTAwM2VpZC5zc2lkO1xuIFxuIFx0Y2NvZGUgPSBjaHNjKHNjaV9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4mIzQzO1x0aWYgKGNjb2RlICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChzY2lfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcJiMzNDtzY2k6IHJlc3BvbnNlIGNvZGU9JXhcXG5cJiMzNDssXG4gXHRcdFx0IHNjaV9hcmVhLVx1MDAzZXJlc3BvbnNlLmNvZGUpO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXHRtZW1jcHkoXHUwMDI2Y2ktXHUwMDNlc2NpZCwgXHUwMDI2c2NpX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjaV9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY2ksIGNpLCBzaXplb2YoKmNpKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjaSk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NpX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKVxuIHtcbi1cdHN0cnVjdCBjaHNjX2NvbXBfbGlzdCAqY2NsO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2NfY29tcF9saXN0ICpjY2wgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4mIzQzO1x0aW50IGNjb2RlO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XG4gXHRcdHUzMiBjdHlwZSA6IDg7XG5AQCAtNjgxLDcgJiM0Mzs2MjQsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKVxuIFx0XHR1NjQgOiA2NDtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xuIFx0XHR1OCBkYXRhW1BBR0VfU0laRSAtIDM2XTtcbi1cdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY2NsX2FyZWE7XG4mIzQzO1x0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjY2xfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcdHN0cnVjdCB7XG4gXHRcdHUzMiBtIDogMTtcbiBcdFx0dTMyIDogMzE7XG5AQCAtNjk2LDE4ICYjNDM7NjM5LDE0IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jb25mX2NvbXBfbGlzdCh2b2lkIF9fdXNlciAqdXNlcl9jY2wpXG4gXHRcdHUzMiByZXM7XG4gXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqY3NzaWRzX3Bhcm07XG4gXG4tXHRzY2NsX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c2NjbF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2NjbF9hcmVhKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGNjbCA9IGt6YWxsb2Nfb2JqKCpjY2wpO1xuLVx0aWYgKCFjY2wpIHtcbi1cdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbi1cdGlmIChjb3B5X2Zyb21fdXNlcihjY2wsIHVzZXJfY2NsLCBzaXplb2YoKmNjbCkpKSB7XG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4mIzQzO1x0aWYgKCFjY2wpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoY2NsLCB1c2VyX2NjbCwgc2l6ZW9mKCpjY2wpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NjbF9hcmVhLVx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDIwO1xuIFx0c2NjbF9hcmVhLVx1MDAzZXJlcXVlc3QuY29kZSA9IDB4MDAzMDtcbiBcdHNjY2xfYXJlYS1cdTAwM2VmbXQgPSBjY2wtXHUwMDNlcmVxLmZtdDtcbkBAIC03MjgsNjEgJiM0Mzs2NjcsNDYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjY29kZSA9IGNoc2Moc2NjbF9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4mIzQzO1x0aWYgKGNjb2RlICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChzY2NsX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiBcdFx0Q0hTQ19NU0coMCwgXCYjMzQ7c2NjbDogcmVzcG9uc2UgY29kZT0leFxcblwmIzM0OyxcbiBcdFx0XHQgc2NjbF9hcmVhLVx1MDAzZXJlc3BvbnNlLmNvZGUpO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXHRtZW1jcHkoXHUwMDI2Y2NsLVx1MDAzZXNjY2wsIFx1MDAyNnNjY2xfYXJlYS1cdTAwM2VyZXNwb25zZSwgc2NjbF9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY2NsLCBjY2wsIHNpemVvZigqY2NsKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjY2wpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjY2xfYXJlYSk7XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jaHBkKHZvaWQgX191c2VyICp1c2VyX2NocGQpXG4ge1xuLVx0c3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhO1xuLVx0c3RydWN0IGNoc2NfY3BkX2luZm8gKmNocGQ7XG4mIzQzO1x0c3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBjaHNjX2NwZF9pbmZvICpjaHBkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIFx0aW50IHJldDtcbiBcbiBcdGNocGQgPSBremFsbG9jX29iaigqY2hwZCk7XG4tXHRzY3BkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4tXHRpZiAoIXNjcGRfYXJlYSB8fCAhY2hwZCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGNocGQsIHVzZXJfY2hwZCwgc2l6ZW9mKCpjaHBkKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRzY3BkX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuJiM0MztcdGlmICghc2NwZF9hcmVhIHx8ICFjaHBkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKGNocGQsIHVzZXJfY2hwZCwgc2l6ZW9mKCpjaHBkKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHJldCA9IGNoc2NfZGV0ZXJtaW5lX2NoYW5uZWxfcGF0aF9kZXNjKGNocGQtXHUwMDNlY2hwaWQsIGNocGQtXHUwMDNlZm10LFxuIFx0XHRcdFx0XHQgICAgICAgY2hwZC1cdTAwM2VyZm10LCBjaHBkLVx1MDAzZWMsIGNocGQtXHUwMDNlbSxcbiBcdFx0XHRcdFx0ICAgICAgIHNjcGRfYXJlYSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdG1lbWNweShcdTAwMjZjaHBkLVx1MDAzZWNocGRiLCBcdTAwMjZzY3BkX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjcGRfYXJlYS1cdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xuIFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2NocGQsIGNocGQsIHNpemVvZigqY2hwZCkpKVxuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLW91dF9mcmVlOlxuLVx0a2ZyZWUoY2hwZCk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NwZF9hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2RjYWwodm9pZCBfX3VzZXIgKnVzZXJfZGNhbClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19kY2FsICpkY2FsO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2NfZGNhbCAqZGNhbCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjNDM7XHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIGF0eXBlIDogODtcbkBAIC03OTQsMjAgJiM0Mzs3MTgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2RjYWwodm9pZCBfX3VzZXIgKnVzZXJfZGNhbClcbiBcdFx0dTMyIHJlczFbMl07XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAzNl07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2RjYWxfYXJlYTtcbiYjNDM7XHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2RjYWxfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcbi1cdHNkY2FsX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c2RjYWxfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNkY2FsX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZGNhbCA9IGt6YWxsb2Nfb2JqKCpkY2FsKTtcbi1cdGlmICghZGNhbCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGRjYWwsIHVzZXJfZGNhbCwgc2l6ZW9mKCpkY2FsKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRpZiAoIWRjYWwpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoZGNhbCwgdXNlcl9kY2FsLCBzaXplb2YoKmRjYWwpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2RjYWxfYXJlYS1cdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAyMDtcbiBcdHNkY2FsX2FyZWEtXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDM0O1xuIFx0c2RjYWxfYXJlYS1cdTAwM2VhdHlwZSA9IGRjYWwtXHUwMDNlcmVxLmF0eXBlO1xuQEAgLTgxNiwyNiAmIzQzOzczNiwxOCBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfZGNhbCh2b2lkIF9fdXNlciAqdXNlcl9kY2FsKVxuIFx0ICAgICAgIHNpemVvZihzZGNhbF9hcmVhLVx1MDAzZWxpc3RfcGFybSkpO1xuIFxuIFx0Y2NvZGUgPSBjaHNjKHNkY2FsX2FyZWEpO1xuLVx0aWYgKGNjb2RlICE9IDApIHtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRpZiAoY2NvZGUgIT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFx0aWYgKHNkY2FsX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiBcdFx0Q0hTQ19NU0coMCwgXCYjMzQ7c2RjYWw6IHJlc3BvbnNlIGNvZGU9JXhcXG5cJiMzNDssXG4gXHRcdFx0IHNkY2FsX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSk7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcdG1lbWNweShcdTAwMjZkY2FsLVx1MDAzZXNkY2FsLCBcdTAwMjZzZGNhbF9hcmVhLVx1MDAzZXJlc3BvbnNlLFxuIFx0ICAgICAgIHNkY2FsX2FyZWEtXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9kY2FsLCBkY2FsLCBzaXplb2YoKmRjYWwpKSlcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gMDtcbi1vdXRfZnJlZTpcbi1cdGtmcmVlKGRjYWwpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNkY2FsX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyBjaHNjX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuQEAgLTkwNCw3ICYjNDM7ODE2LDcgQEAgc3RhdGljIGludCBjaHNjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHR9XG4gXHRzbnByaW50ZihkYmYsIHNpemVvZihkYmYpLCBcJiMzNDtyZWxyZXQ6JWRcJiMzNDssIHJldCk7XG4gXHRDSFNDX0xPRygwLCBkYmYpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XG4mIzQzO1x0a2ZyZWUob25fY2xvc2VfY2hzY19hcmVhKTtcbiBcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XG4gXHRrZnJlZShvbl9jbG9zZV9yZXF1ZXN0KTtcbiBcdG9uX2Nsb3NlX3JlcXVlc3QgPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY21mLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2NtZi5jXG5pbmRleCA5MmFiM2Q1NDZmZTQ3Li42YzQ2YjBkMGIzZGE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jbWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2Npby9jbWYuY1xuQEAgLTUwMSwxMiAmIzQzOzUwMSwxMiBAQCBzdGF0aWMgaW50IGFsbG9jX2NtYihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcbiBcdFx0V0FSTl9PTighbGlzdF9lbXB0eShcdTAwMjZjbWJfYXJlYS5saXN0KSk7XG4gXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNtYl9hcmVhLmxvY2spO1xuLVx0XHRtZW0gPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgZ2V0X29yZGVyKHNpemUpKTtcbiYjNDM7XHRcdG1lbSA9IGttYWxsb2MoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBnZXRfb3JkZXIoc2l6ZSksIEdGUF9LRVJORUwpO1xuIFx0XHRzcGluX2xvY2soXHUwMDI2Y21iX2FyZWEubG9jayk7XG4gXG4gXHRcdGlmIChjbWJfYXJlYS5tZW0pIHtcbiBcdFx0XHQvKiBvaywgYW5vdGhlciB0aHJlYWQgd2FzIGZhc3RlciAqL1xuLVx0XHRcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpbWVtLCBnZXRfb3JkZXIoc2l6ZSkpO1xuJiM0MztcdFx0XHRrZnJlZShtZW0pO1xuIFx0XHR9IGVsc2UgaWYgKCFtZW0pIHtcbiBcdFx0XHQvKiBubyBsdWNrICovXG4gXHRcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC01NDcsMTAgJiM0Mzs1NDcsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX2NtYihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VjbWJfbGlzdCk7XG4gXG4gXHRpZiAobGlzdF9lbXB0eShcdTAwMjZjbWJfYXJlYS5saXN0KSkge1xuLVx0XHRzc2l6ZV90IHNpemU7XG4tXHRcdHNpemUgPSBzaXplb2Yoc3RydWN0IGNtYikgKiBjbWJfYXJlYS5udW1fY2hhbm5lbHM7XG4gXHRcdGNtZl9hY3RpdmF0ZShOVUxMLCBDTUZfT0ZGKTtcbi1cdFx0ZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyljbWJfYXJlYS5tZW0sIGdldF9vcmRlcihzaXplKSk7XG4mIzQzO1x0XHRrZnJlZShjbWJfYXJlYS5tZW0pO1xuIFx0XHRjbWJfYXJlYS5tZW0gPSBOVUxMO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfaXJxKGNkZXYtXHUwMDNlY2N3bG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaFxuaW5kZXggNGJkNGMwMGM5YzBjYS4uZGZmNWY1M2E4Nzk1ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaFxuQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgc3RydWN0IHFkaW9faXJxIHtcbiBcdGludCBwZXJmX3N0YXRfZW5hYmxlZDtcbiBcbiBcdHN0cnVjdCBxZHIgKnFkcjtcbi1cdHVuc2lnbmVkIGxvbmcgY2hzY19wYWdlO1xuJiM0MztcdHZvaWQgKmNoc2NfcGFnZTtcbiBcbiBcdHN0cnVjdCBxZGlvX3EgKmlucHV0X3FzW1FESU9fTUFYX1FVRVVFU19QRVJfSVJRXTtcbiBcdHN0cnVjdCBxZGlvX3EgKm91dHB1dF9xc1tRRElPX01BWF9RVUVVRVNfUEVSX0lSUV07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNcbmluZGV4IGMxZTA5ZmEzNGU3NzQuLmJlYmMxMjUwZWJlYmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jXG5AQCAtMTcsNiAmIzQzOzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZGVidWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9xZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLmhcdTAwM2VcbkBAIC05MzMsMTAgJiM0Mzs5MzQsMTAgQEAgaW50IHFkaW9fZnJlZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcbiBcdG11dGV4X3VubG9jayhcdTAwMjZpcnFfcHRyLVx1MDAzZXNldHVwX211dGV4KTtcbiBcbiBcdHFkaW9fZnJlZV9xdWV1ZXMoaXJxX3B0cik7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlycV9wdHItXHUwMDNlcWRyKTtcbi1cdGZyZWVfcGFnZShpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSk7XG4mIzQzO1x0a2ZyZWUoaXJxX3B0ci1cdTAwM2VxZHIpO1xuJiM0MztcdGtmcmVlKGlycV9wdHItXHUwMDNlY2hzY19wYWdlKTtcbiBcdGtmcmVlKGlycV9wdHItXHUwMDNlY2N3KTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0cik7XG4mIzQzO1x0a2ZyZWUoaXJxX3B0cik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocWRpb19mcmVlKTtcbkBAIC05NjEsNyAmIzQzOzk2Miw3IEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsXG4gXHQgICAgbm9fb3V0cHV0X3FzIFx1MDAzZSBRRElPX01BWF9RVUVVRVNfUEVSX0lSUSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpcnFfcHRyID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcdGlycV9wdHIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWlycV9wdHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTk4NiwxMiAmIzQzOzk4NywxMiBAQCBpbnQgcWRpb19hbGxvY2F0ZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IG5vX2lucHV0X3FzLFxuIFx0ICogcWRpb19lc3RhYmxpc2guIEluIGNhc2Ugb2YgbG93IG1lbW9yeSBhbmQgc3dhcCBvbiBhIHpmY3AgZGlza1xuIFx0ICogd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBvdGhlcndpc2UuXG4gXHQgKi9cbi1cdGlycV9wdHItXHUwMDNlY2hzY19wYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcdGlycV9wdHItXHUwMDNlY2hzY19wYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSlcbiBcdFx0Z290byBlcnJfY2hzYztcbiBcbiBcdC8qIHFkciBpcyB1c2VkIGluIGNjdzEuY2RhIHdoaWNoIGlzIHUzMiAqL1xuLVx0aXJxX3B0ci1cdTAwM2VxZHIgPSAoc3RydWN0IHFkciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuJiM0MztcdGlycV9wdHItXHUwMDNlcWRyID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghaXJxX3B0ci1cdTAwM2VxZHIpXG4gXHRcdGdvdG8gZXJyX3FkcjtcbiBcbkBAIC0xMDA0LDE0ICYjNDM7MTAwNSwxNCBAQCBpbnQgcWRpb19hbGxvY2F0ZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IG5vX2lucHV0X3FzLFxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3F1ZXVlczpcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0ci1cdTAwM2VxZHIpO1xuJiM0MztcdGtmcmVlKGlycV9wdHItXHUwMDNlcWRyKTtcbiBlcnJfcWRyOlxuLVx0ZnJlZV9wYWdlKGlycV9wdHItXHUwMDNlY2hzY19wYWdlKTtcbiYjNDM7XHRrZnJlZShpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSk7XG4gZXJyX2Noc2M6XG4gZXJyX2RiZjpcbiBcdGtmcmVlKGlycV9wdHItXHUwMDNlY2N3KTtcbiBlcnJfY2N3OlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyKTtcbiYjNDM7XHRrZnJlZShpcnFfcHRyKTtcbiBcdHJldHVybiByYztcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocWRpb19hbGxvY2F0ZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuY1xuaW5kZXggZWEwOWFhZGFhZTRlYy4uYzAyMTVhN2QyOWE4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuY1xuQEAgLTM1LDcgJiM0MzszNSw3IEBAIHZvaWQgcWRpb19mcmVlX2J1ZmZlcnMoc3RydWN0IHFkaW9fYnVmZmVyICoqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpXG4gXHRpbnQgcG9zO1xuIFxuIFx0Zm9yIChwb3MgPSAwOyBwb3MgXHUwMDNjIGNvdW50OyBwb3MgJiM0Mzs9IFFCVUZGX1BFUl9QQUdFKVxuLVx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zltwb3NdKTtcbiYjNDM7XHRcdGtmcmVlKGJ1Zltwb3NdKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocWRpb19mcmVlX2J1ZmZlcnMpO1xuIFxuQEAgLTQ5LDcgJiM0Mzs0OSw3IEBAIGludCBxZGlvX2FsbG9jX2J1ZmZlcnMoc3RydWN0IHFkaW9fYnVmZmVyICoqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpXG4gXHRpbnQgcG9zO1xuIFxuIFx0Zm9yIChwb3MgPSAwOyBwb3MgXHUwMDNjIGNvdW50OyBwb3MgJiM0Mzs9IFFCVUZGX1BFUl9QQUdFKSB7XG4tXHRcdGJ1Zltwb3NdID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcdFx0YnVmW3Bvc10gPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghYnVmW3Bvc10pIHtcbiBcdFx0XHRxZGlvX2ZyZWVfYnVmZmVycyhidWYsIGNvdW50KTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC04Myw3ICYjNDM7ODMsNyBAQCBzdGF0aWMgdm9pZCBfX3FkaW9fZnJlZV9xdWV1ZXMoc3RydWN0IHFkaW9fcSAqKnF1ZXVlcywgdW5zaWduZWQgaW50IGNvdW50KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHEgPSBxdWV1ZXNbaV07XG4tXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylxLVx1MDAzZXNsX3BhZ2UpO1xuJiM0MztcdFx0a2ZyZWUocS1cdTAwM2VzbF9wYWdlKTtcbiBcdFx0a21lbV9jYWNoZV9mcmVlKHFkaW9fcV9jYWNoZSwgcSk7XG4gXHR9XG4gfVxuQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc3RhdGljIGludCBfX3FkaW9fYWxsb2NhdGVfcXMoc3RydWN0IHFkaW9fcSAqKmlycV9wdHJfcXMsIGludCBucl9xdWV1ZXMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcbi1cdFx0cS1cdTAwM2VzbF9wYWdlID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRxLVx1MDAzZXNsX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghcS1cdTAwM2VzbF9wYWdlKSB7XG4gXHRcdFx0a21lbV9jYWNoZV9mcmVlKHFkaW9fcV9jYWNoZSwgcSk7XG4gXHRcdFx0X19xZGlvX2ZyZWVfcXVldWVzKGlycV9wdHJfcXMsIGkpO1xuQEAgLTI0OSwxMSAmIzQzOzI0OSwxMSBAQCBpbnQgcWRpb19zZXR1cF9nZXRfc3NxZChzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIsXG4gXG4gXHREQkZfRVZFTlQoXCYjMzQ7Z2V0c3NxZDolNHhcJiMzNDssIHNjaGlkLVx1MDAzZXNjaF9ubyk7XG4gXHRpZiAoIWlycV9wdHIpIHtcbi1cdFx0c3NxZCA9IChzdHJ1Y3QgY2hzY19zc3FkX2FyZWEgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRzc3FkID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIXNzcWQpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9IGVsc2Uge1xuLVx0XHRzc3FkID0gKHN0cnVjdCBjaHNjX3NzcWRfYXJlYSAqKWlycV9wdHItXHUwMDNlY2hzY19wYWdlO1xuJiM0MztcdFx0c3NxZCA9IGlycV9wdHItXHUwMDNlY2hzY19wYWdlO1xuIFx0fVxuIFxuIFx0cmMgPSBjaHNjX3NzcWQoKnNjaGlkLCBzc3FkKTtcbkBAIC0yNzAsNyAmIzQzOzI3MCw3IEBAIGludCBxZGlvX3NldHVwX2dldF9zc3FkKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0cixcbiBcbiBvdXQ6XG4gXHRpZiAoIWlycV9wdHIpXG4tXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzc3FkKTtcbiYjNDM7XHRcdGtmcmVlKHNzcWQpO1xuIFxuIFx0cmV0dXJuIHJjO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuY1xuaW5kZXggZTE2N2FhNzVjM2RmZi4uYTJmZjUxODg3NTM3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmNcbkBAIC0xMzYsNyAmIzQzOzEzNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYWlycV9zdHJ1Y3QgdGlxZGlvX2FpcnEgPSB7XG4gXG4gc3RhdGljIGludCBzZXRfc3ViY2hhbm5lbF9pbmQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLCBpbnQgcmVzZXQpXG4ge1xuLVx0c3RydWN0IGNoc2Nfc2Nzc2NfYXJlYSAqc2Nzc2MgPSAodm9pZCAqKWlycV9wdHItXHUwMDNlY2hzY19wYWdlO1xuJiM0MztcdHN0cnVjdCBjaHNjX3Njc3NjX2FyZWEgKnNjc3NjID0gaXJxX3B0ci1cdTAwM2VjaHNjX3BhZ2U7XG4gXHRkbWE2NF90IHN1bW1hcnlfaW5kaWNhdG9yX2FkZHIsIHN1YmNoYW5uZWxfaW5kaWNhdG9yX2FkZHI7XG4gXHRpbnQgcmM7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9zY20uYyBiL2RyaXZlcnMvczM5MC9jaW8vc2NtLmNcbmluZGV4IDE3MTIxMmE2ZDJkOWMuLmI3OWZlMDIzYWI4ZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jXG5AQCAtMTMsNiAmIzQzOzEzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZWFkbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7Y2hzYy5oXCYjMzQ7XG4gXG5AQCAtMjI0LDEyICYjNDM7MjI1LDEyIEBAIHN0YXRpYyBpbnQgc2NtX2FkZChzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm8sIHNpemVfdCBudW0pXG4gXG4gaW50IHNjbV91cGRhdGVfaW5mb3JtYXRpb24odm9pZClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm87XG4mIzQzO1x0c3RydWN0IGNoc2Nfc2NtX2luZm8gKnNjbV9pbmZvIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIFx0dTY0IHRva2VuID0gMDtcbiBcdHNpemVfdCBudW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2NtX2luZm8gPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c2NtX2luZm8gPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuIFx0aWYgKCFzY21faW5mbylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjUwLDggJiM0MzsyNTEsNiBAQCBpbnQgc2NtX3VwZGF0ZV9pbmZvcm1hdGlvbih2b2lkKVxuIFx0XHR0b2tlbiA9IHNjbV9pbmZvLVx1MDAzZXJlc3RvaztcbiBcdH0gd2hpbGUgKHRva2VuKTtcbiBcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY21faW5mbyk7XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzMzkwLXNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9uIGhlbHBlcnMgYW5kIHRoZSBzMzkwIENoYW5uZWwgSS9PIChDSU8pIHN1YnN5c3RlbSAoYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmggYW5kIGRyaXZlcnMvczM5MC9jaW8vKikuIFRoZXNlIGZpbGVzIGFyZSBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCBhcmUgbm90IGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY0NDBmMWUwYjljYmVhMDYzZTljZmM2MmM4N2UxNjllYzIyZjc4MWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE0OjEyOjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaAppbmRleCAwNmUxZWMyYWZkNWFmLi4yNDg4MjlkNDYxYmNlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaApAQCAtMTQ3LDcgJiM0MzsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKQogCQkJaWItJmd0O2RhdGFbaV0gPSBkbWE2NF9hZGQoaWItJmd0O2RhdGFbaSAtIDFdLCBJREFfQkxPQ0tfU0laRSk7CiAJCQljb250aW51ZTsKIAkJfQotCQl2YWRkciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlX29yZGVyKTsKJiM0MzsJCXZhZGRyID0ga21hbGxvYyhQQUdFX1NJWkUgJmx0OyZsdDsgcGFnZV9vcmRlciwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdmFkZHIpCiAJCQlnb3RvIGVycm9yOwogCQlpYi0mZ3Q7ZGF0YVtpXSA9IHZpcnRfdG9fZG1hNjQodmFkZHIpOwpAQCAtMTU3LDcgJiM0MzsxNTcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKQogCXdoaWxlIChpICZndDs9IG5yX2NodW5rcykgewogCQlpIC09IG5yX2NodW5rczsKIAkJdmFkZHIgPSBkbWE2NF90b192aXJ0KGliLSZndDtkYXRhW2ldKTsKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgaWItJmd0O3BhZ2Vfb3JkZXIpOwomIzQzOwkJa2ZyZWUodmFkZHIpOwogCX0KIAlrZnJlZShpYik7CiAJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CkBAIC0xNzUsNyAmIzQzOzE3NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGFsX2J1ZmZlcl9mcmVlKHN0cnVjdCBpZGFsX2J1ZmZlciAqaWIpCiAJbnJfY2h1bmtzID0gKFBBR0VfU0laRSAmbHQ7Jmx0OyBpYi0mZ3Q7cGFnZV9vcmRlcikgJmd0OyZndDsgSURBX1NJWkVfU0hJRlQ7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3B0cnM7IGkgJiM0Mzs9IG5yX2NodW5rcykgewogCQl2YWRkciA9IGRtYTY0X3RvX3ZpcnQoaWItJmd0O2RhdGFbaV0pOwotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBpYi0mZ3Q7cGFnZV9vcmRlcik7CiYjNDM7CQlrZnJlZSh2YWRkcik7CiAJfQogCWtmcmVlKGliKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKaW5kZXggOTY4OWY3MjJjODYzYy4uZDk4ZjYyOWU4OTI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTkzMSwxMiAmIzQzOzkzMSwxMiBAQCBzdGF0aWMgaW50IGN1Yl9hbGxvYyhzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW0gKmNzcykKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBDU1NfTlVNX0NVQl9QQUdFUzsgaSYjNDM7JiM0MzspIHsKLQkJY3NzLSZndDtjdWJbaV0gPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiYjNDM7CQljc3MtJmd0O2N1YltpXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmICghY3NzLSZndDtjdWJbaV0pCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZm9yIChpID0gMDsgaSAmbHQ7IENTU19OVU1fRUNVQl9QQUdFUzsgaSYjNDM7JiM0MzspIHsKLQkJY3NzLSZndDtlY3ViW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CQljc3MtJmd0O2VjdWJbaV0gPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghY3NzLSZndDtlY3ViW2ldKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtOTQ5LDExICYjNDM7OTQ5LDExIEBAIHN0YXRpYyB2b2lkIGN1Yl9mcmVlKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzKQogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IENTU19OVU1fQ1VCX1BBR0VTOyBpJiM0MzsmIzQzOykgewotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY3NzLSZndDtjdWJbaV0pOwomIzQzOwkJa2ZyZWUoY3NzLSZndDtjdWJbaV0pOwogCQljc3MtJmd0O2N1YltpXSA9IE5VTEw7CiAJfQogCWZvciAoaSA9IDA7IGkgJmx0OyBDU1NfTlVNX0VDVUJfUEFHRVM7IGkmIzQzOyYjNDM7KSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljc3MtJmd0O2VjdWJbaV0pOwomIzQzOwkJa2ZyZWUoY3NzLSZndDtlY3ViW2ldKTsKIAkJY3NzLSZndDtlY3ViW2ldID0gTlVMTDsKIAl9CiB9CkBAIC0xMTQyLDggJiM0MzsxMTQyLDggQEAgaW50IF9faW5pdCBjaHNjX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0Jc2VpX3BhZ2UgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JY2hzY19wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwomIzQzOwlzZWlfcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiYjNDM7CWNoc2NfcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFzZWlfcGFnZSB8fCAhY2hzY19wYWdlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2VycjsKQEAgLTExNTMsMTYgJiM0MzsxMTUzLDE2IEBAIGludCBfX2luaXQgY2hzY19pbml0KHZvaWQpCiAJCWdvdG8gb3V0X2VycjsKIAlyZXR1cm4gcmV0Owogb3V0X2VycjoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19wYWdlKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2VpX3BhZ2UpOwomIzQzOwlrZnJlZShjaHNjX3BhZ2UpOwomIzQzOwlrZnJlZShzZWlfcGFnZSk7CiAJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBfX2luaXQgY2hzY19pbml0X2NsZWFudXAodm9pZCkKIHsKIAljcndfdW5yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1NTKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19wYWdlKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2VpX3BhZ2UpOwomIzQzOwlrZnJlZShjaHNjX3BhZ2UpOwomIzQzOwlrZnJlZShzZWlfcGFnZSk7CiB9CiAKIGludCBfX2Noc2NfZW5hYmxlX2ZhY2lsaXR5KHN0cnVjdCBjaHNjX3NkYV9hcmVhICpzZGFfYXJlYSwgaW50IG9wZXJhdGlvbl9jb2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCmluZGV4IGI2Y2I4YmI4YmNjNGIuLjIyNWFhYWM3ZGQzMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pc2NkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWxfc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vY2lvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2Noc2MuaCZndDsKQEAgLTI5Miw3ICYjNDM7MjkzLDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX3N0YXJ0KHZvaWQgX191c2VyICp1c2VyX2FyZWEpCiAJaWYgKCFjc3NfZ2VuZXJhbF9jaGFyYWN0ZXJpc3RpY3MuZHluaW8pCiAJCS8qIEl0IG1ha2VzIG5vIHNlbnNlIHRvIHRyeS4gKi8KIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWNoc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKJiM0MzsJY2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoc2NfYXJlYSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVxdWVzdCA9IGt6YWxsb2Nfb2JqKCpyZXF1ZXN0KTsKQEAgLTMyMSw3ICYjNDM7MzIyLDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX3N0YXJ0KHZvaWQgX191c2VyICp1c2VyX2FyZWEpCiAJc25wcmludGYoZGJmLCBzaXplb2YoZGJmKSwgJiMzNDtyZXQ6JWQmIzM0OywgcmV0KTsKIAlDSFNDX0xPRygwLCBkYmYpOwogCWtmcmVlKHJlcXVlc3QpOwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljaHNjX2FyZWEpOwomIzQzOwlrZnJlZShjaHNjX2FyZWEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0MCw3ICYjNDM7MzQxLDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3NldCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKQogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQotCW9uX2Nsb3NlX2Noc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKJiM0MzsJb25fY2xvc2VfY2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKIAlpZiAoIW9uX2Nsb3NlX2Noc2NfYXJlYSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3JlcXVlc3Q7CkBAIC0zNTMsNyAmIzQzOzM1NCw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9zZXQodm9pZCBfX3VzZXIgKnVzZXJfYXJlYSkKIAlnb3RvIG91dF91bmxvY2s7CiAKIG91dF9mcmVlX2Noc2M6Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7CiYjNDM7CWtmcmVlKG9uX2Nsb3NlX2Noc2NfYXJlYSk7CiAJb25fY2xvc2VfY2hzY19hcmVhID0gTlVMTDsKIG91dF9mcmVlX3JlcXVlc3Q6CiAJa2ZyZWUob25fY2xvc2VfcmVxdWVzdCk7CkBAIC0zNzUsNyAmIzQzOzM3Niw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9yZW1vdmUodm9pZCkKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpb25fY2xvc2VfY2hzY19hcmVhKTsKJiM0MzsJa2ZyZWUob25fY2xvc2VfY2hzY19hcmVhKTsKIAlvbl9jbG9zZV9jaHNjX2FyZWEgPSBOVUxMOwogCWtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpOwogCW9uX2Nsb3NlX3JlcXVlc3QgPSBOVUxMOwpAQCAtMzg5LDM5ICYjNDM7MzkwLDI5IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9yZW1vdmUodm9pZCkKIAogc3RhdGljIGludCBjaHNjX2lvY3RsX3N0YXJ0X3N5bmModm9pZCBfX3VzZXIgKnVzZXJfYXJlYSkKIHsKLQlzdHJ1Y3QgY2hzY19zeW5jX2FyZWEgKmNoc2NfYXJlYTsKLQlpbnQgcmV0LCBjY29kZTsKJiM0MzsJc3RydWN0IGNoc2Nfc3luY19hcmVhICpjaHNjX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiYjNDM7CWludCBjY29kZTsKIAotCWNoc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJY2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIWNoc2NfYXJlYSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGNoc2NfYXJlYSwgdXNlcl9hcmVhLCBQQUdFX1NJWkUpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCWlmIChjaHNjX2FyZWEtJmd0O2hlYWRlci5jb2RlICZhbXA7IDB4NDAwMCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKGNoc2NfYXJlYSwgdXNlcl9hcmVhLCBQQUdFX1NJWkUpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWlmIChjaHNjX2FyZWEtJmd0O2hlYWRlci5jb2RlICZhbXA7IDB4NDAwMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCWNoc2NfbG9nX2NvbW1hbmQoY2hzY19hcmVhKTsKIAljY29kZSA9IGNoc2MoY2hzY19hcmVhKTsKLQlpZiAoY2NvZGUgIT0gMCkgewotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJaWYgKGNjb2RlICE9IDApCiYjNDM7CQlyZXR1cm4gLUVJTzsKIAlpZiAoY29weV90b191c2VyKHVzZXJfYXJlYSwgY2hzY19hcmVhLCBQQUdFX1NJWkUpKQotCQlyZXQgPSAtRUZBVUxUOwotCWVsc2UKLQkJcmV0ID0gMDsKLW91dF9mcmVlOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljaHNjX2FyZWEpOwotCXJldHVybiByZXQ7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2NoYW5uZWxfcGF0aCh2b2lkIF9fdXNlciAqdXNlcl9jZCkKIHsKLQlzdHJ1Y3QgY2hzY19jaHBfY2QgKmNkOwotCWludCByZXQsIGNjb2RlOwomIzQzOwlzdHJ1Y3QgY2hzY19jaHBfY2QgKmNkIF9fZnJlZShrZnJlZSkgPSBOVUxMOwomIzQzOwlpbnQgY2NvZGU7CiAJc3RydWN0IHsKIAkJc3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7CiAJCXUzMiA6IDI7CkBAIC00MzYsMjAgJiM0Mzs0MjcsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY2hhbm5lbF9wYXRoKHZvaWQgX191c2VyICp1c2VyX2NkKQogCQl1MzIgOiAzMjsKIAkJc3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlOwogCQl1OCBkYXRhW1BBR0VfU0laRSAtIDIwXTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NwY2RfYXJlYTsKJiM0MzsJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjcGNkX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiAKLQlzY3BjZF9hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwomIzQzOwlzY3BjZF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIXNjcGNkX2FyZWEpCiAJCXJldHVybiAtRU5PTUVNOwogCWNkID0ga3phbGxvY19vYmooKmNkKTsKLQlpZiAoIWNkKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCWlmIChjb3B5X2Zyb21fdXNlcihjZCwgdXNlcl9jZCwgc2l6ZW9mKCpjZCkpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoIWNkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcihjZCwgdXNlcl9jZCwgc2l6ZW9mKCpjZCkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiAJc2NwY2RfYXJlYS0mZ3Q7cmVxdWVzdC5sZW5ndGggPSAweDAwMTA7CiAJc2NwY2RfYXJlYS0mZ3Q7cmVxdWVzdC5jb2RlID0gMHgwMDI4OwogCXNjcGNkX2FyZWEtJmd0O20gPSBjZC0mZ3Q7bTsKQEAgLTQ1OSwzMSAmIzQzOzQ0NiwyMyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jaGFubmVsX3BhdGgodm9pZCBfX3VzZXIgKnVzZXJfY2QpCiAJc2NwY2RfYXJlYS0mZ3Q7bGFzdF9jaHBpZCA9IGNkLSZndDtjaHBpZC5pZDsKIAogCWNjb2RlID0gY2hzYyhzY3BjZF9hcmVhKTsKLQlpZiAoY2NvZGUgIT0gMCkgewotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJaWYgKGNjb2RlICE9IDApCiYjNDM7CQlyZXR1cm4gLUVJTzsKIAlpZiAoc2NwY2RfYXJlYS0mZ3Q7cmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHsKLQkJcmV0ID0gLUVJTzsKIAkJQ0hTQ19NU0coMCwgJiMzNDtzY3BjZDogcmVzcG9uc2UgY29kZT0leFxuJiMzNDssCiAJCQkgc2NwY2RfYXJlYS0mZ3Q7cmVzcG9uc2UuY29kZSk7Ci0JCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CQlyZXR1cm4gLUVJTzsKIAl9CiAJbWVtY3B5KCZhbXA7Y2QtJmd0O2NwY2IsICZhbXA7c2NwY2RfYXJlYS0mZ3Q7cmVzcG9uc2UsIHNjcGNkX2FyZWEtJmd0O3Jlc3BvbnNlLmxlbmd0aCk7CiAJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2NkLCBjZCwgc2l6ZW9mKCpjZCkpKQotCQlyZXQgPSAtRUZBVUxUOwotCWVsc2UKLQkJcmV0ID0gMDsKLW91dF9mcmVlOgotCWtmcmVlKGNkKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NwY2RfYXJlYSk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpCiB7Ci0Jc3RydWN0IGNoc2NfY3VfY2QgKmNkOwotCWludCByZXQsIGNjb2RlOwomIzQzOwlzdHJ1Y3QgY2hzY19jdV9jZCAqY2QgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiYjNDM7CWludCBjY29kZTsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDsKIAkJdTMyIDogMjsKQEAgLTQ5OCwyMCAmIzQzOzQ3NywxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jdSh2b2lkIF9fdXNlciAqdXNlcl9jZCkKIAkJdTMyIDogMzI7CiAJCXN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTsKIAkJdTggZGF0YVtQQUdFX1NJWkUgLSAyMF07Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjdWNkX2FyZWE7CiYjNDM7CX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3VjZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMOwogCi0Jc2N1Y2RfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJc2N1Y2RfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFzY3VjZF9hcmVhKQogCQlyZXR1cm4gLUVOT01FTTsKIAljZCA9IGt6YWxsb2Nfb2JqKCpjZCk7Ci0JaWYgKCFjZCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQlpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJaWYgKCFjZCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwogCXNjdWNkX2FyZWEtJmd0O3JlcXVlc3QubGVuZ3RoID0gMHgwMDEwOwogCXNjdWNkX2FyZWEtJmd0O3JlcXVlc3QuY29kZSA9IDB4MDAyNjsKIAlzY3VjZF9hcmVhLSZndDttID0gY2QtJmd0O207CkBAIC01MjEsMzEgJiM0Mzs0OTYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpCiAJc2N1Y2RfYXJlYS0mZ3Q7bGFzdF9jdW4gPSBjZC0mZ3Q7Y3VuOwogCiAJY2NvZGUgPSBjaHNjKHNjdWNkX2FyZWEpOwotCWlmIChjY29kZSAhPSAwKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoY2NvZGUgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlPOwogCWlmIChzY3VjZF9hcmVhLSZndDtyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkgewotCQlyZXQgPSAtRUlPOwogCQlDSFNDX01TRygwLCAmIzM0O3NjdWNkOiByZXNwb25zZSBjb2RlPSV4XG4mIzM0OywKIAkJCSBzY3VjZF9hcmVhLSZndDtyZXNwb25zZS5jb2RlKTsKLQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCXJldHVybiAtRUlPOwogCX0KIAltZW1jcHkoJmFtcDtjZC0mZ3Q7Y3VjYiwgJmFtcDtzY3VjZF9hcmVhLSZndDtyZXNwb25zZSwgc2N1Y2RfYXJlYS0mZ3Q7cmVzcG9uc2UubGVuZ3RoKTsKIAlpZiAoY29weV90b191c2VyKHVzZXJfY2QsIGNkLCBzaXplb2YoKmNkKSkpCi0JCXJldCA9IC1FRkFVTFQ7Ci0JZWxzZQotCQlyZXQgPSAwOwotb3V0X2ZyZWU6Ci0Ja2ZyZWUoY2QpOwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3VjZF9hcmVhKTsKLQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19zY2hfY3Uodm9pZCBfX3VzZXIgKnVzZXJfY3VkKQogewotCXN0cnVjdCBjaHNjX3NjaF9jdWQgKmN1ZDsKLQlpbnQgcmV0LCBjY29kZTsKJiM0MzsJc3RydWN0IGNoc2Nfc2NoX2N1ZCAqY3VkIF9fZnJlZShrZnJlZSkgPSBOVUxMOwomIzQzOwlpbnQgY2NvZGU7CiAJc3RydWN0IHsKIAkJc3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7CiAJCXUzMiA6IDI7CkBAIC01NjEsMjAgJiM0Mzs1MjgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fc2NoX2N1KHZvaWQgX191c2VyICp1c2VyX2N1ZCkKIAkJdTMyIDogMzI7CiAJCXN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTsKIAkJdTggZGF0YVtQQUdFX1NJWkUgLSAyMF07Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNzY3VkX2FyZWE7CiYjNDM7CX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzc2N1ZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMOwogCi0Jc3NjdWRfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJc3NjdWRfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFzc2N1ZF9hcmVhKQogCQlyZXR1cm4gLUVOT01FTTsKIAljdWQgPSBremFsbG9jX29iaigqY3VkKTsKLQlpZiAoIWN1ZCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQlpZiAoY29weV9mcm9tX3VzZXIoY3VkLCB1c2VyX2N1ZCwgc2l6ZW9mKCpjdWQpKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJaWYgKCFjdWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKGN1ZCwgdXNlcl9jdWQsIHNpemVvZigqY3VkKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKIAlzc2N1ZF9hcmVhLSZndDtyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAxMDsKIAlzc2N1ZF9hcmVhLSZndDtyZXF1ZXN0LmNvZGUgPSAweDAwMDY7CiAJc3NjdWRfYXJlYS0mZ3Q7bSA9IGN1ZC0mZ3Q7c2NoaWQubTsKQEAgLTU4NSwzMSAmIzQzOzU0OCwyMyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19zY2hfY3Uodm9pZCBfX3VzZXIgKnVzZXJfY3VkKQogCXNzY3VkX2FyZWEtJmd0O2xhc3Rfc2NoID0gY3VkLSZndDtzY2hpZC5zY2hfbm87CiAKIAljY29kZSA9IGNoc2Moc3NjdWRfYXJlYSk7Ci0JaWYgKGNjb2RlICE9IDApIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXRfZnJlZTsKLQl9CiYjNDM7CWlmIChjY29kZSAhPSAwKQomIzQzOwkJcmV0dXJuIC1FSU87CiAJaWYgKHNzY3VkX2FyZWEtJmd0O3Jlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7Ci0JCXJldCA9IC1FSU87CiAJCUNIU0NfTVNHKDAsICYjMzQ7c3NjdWQ6IHJlc3BvbnNlIGNvZGU9JXhcbiYjMzQ7LAogCQkJIHNzY3VkX2FyZWEtJmd0O3Jlc3BvbnNlLmNvZGUpOwotCQlnb3RvIG91dF9mcmVlOwomIzQzOwkJcmV0dXJuIC1FSU87CiAJfQogCW1lbWNweSgmYW1wO2N1ZC0mZ3Q7c2N1YiwgJmFtcDtzc2N1ZF9hcmVhLSZndDtyZXNwb25zZSwgc3NjdWRfYXJlYS0mZ3Q7cmVzcG9uc2UubGVuZ3RoKTsKIAlpZiAoY29weV90b191c2VyKHVzZXJfY3VkLCBjdWQsIHNpemVvZigqY3VkKSkpCi0JCXJldCA9IC1FRkFVTFQ7Ci0JZWxzZQotCQlyZXQgPSAwOwotb3V0X2ZyZWU6Ci0Ja2ZyZWUoY3VkKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3NjdWRfYXJlYSk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSkKIHsKLQlzdHJ1Y3QgY2hzY19jb25mX2luZm8gKmNpOwotCWludCByZXQsIGNjb2RlOwomIzQzOwlzdHJ1Y3QgY2hzY19jb25mX2luZm8gKmNpIF9fZnJlZShrZnJlZSkgPSBOVUxMOwomIzQzOwlpbnQgY2NvZGU7CiAJc3RydWN0IHsKIAkJc3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7CiAJCXUzMiA6IDI7CkBAIC02MjMsMjAgJiM0Mzs1NzgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSkKIAkJdTY0IDogNjQ7CiAJCXN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTsKIAkJdTggZGF0YVtQQUdFX1NJWkUgLSAyMF07Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjaV9hcmVhOwomIzQzOwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NpX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiAKLQlzY2lfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJc2NpX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmICghc2NpX2FyZWEpCiAJCXJldHVybiAtRU5PTUVNOwogCWNpID0ga3phbGxvY19vYmooKmNpKTsKLQlpZiAoIWNpKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCWlmIChjb3B5X2Zyb21fdXNlcihjaSwgdXNlcl9jaSwgc2l6ZW9mKCpjaSkpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoIWNpKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcihjaSwgdXNlcl9jaSwgc2l6ZW9mKCpjaSkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiAJc2NpX2FyZWEtJmd0O3JlcXVlc3QubGVuZ3RoID0gMHgwMDEwOwogCXNjaV9hcmVhLSZndDtyZXF1ZXN0LmNvZGUgPSAweDAwMTI7CiAJc2NpX2FyZWEtJmd0O20gPSBjaS0mZ3Q7aWQubTsKQEAgLTY0NSwzMSAmIzQzOzU5NiwyMyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9pbmZvKHZvaWQgX191c2VyICp1c2VyX2NpKQogCXNjaV9hcmVhLSZndDtzc2lkID0gY2ktJmd0O2lkLnNzaWQ7CiAKIAljY29kZSA9IGNoc2Moc2NpX2FyZWEpOwotCWlmIChjY29kZSAhPSAwKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoY2NvZGUgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlPOwogCWlmIChzY2lfYXJlYS0mZ3Q7cmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHsKLQkJcmV0ID0gLUVJTzsKIAkJQ0hTQ19NU0coMCwgJiMzNDtzY2k6IHJlc3BvbnNlIGNvZGU9JXhcbiYjMzQ7LAogCQkJIHNjaV9hcmVhLSZndDtyZXNwb25zZS5jb2RlKTsKLQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCXJldHVybiAtRUlPOwogCX0KIAltZW1jcHkoJmFtcDtjaS0mZ3Q7c2NpZCwgJmFtcDtzY2lfYXJlYS0mZ3Q7cmVzcG9uc2UsIHNjaV9hcmVhLSZndDtyZXNwb25zZS5sZW5ndGgpOwogCWlmIChjb3B5X3RvX3VzZXIodXNlcl9jaSwgY2ksIHNpemVvZigqY2kpKSkKLQkJcmV0ID0gLUVGQVVMVDsKLQllbHNlCi0JCXJldCA9IDA7Ci1vdXRfZnJlZToKLQlrZnJlZShjaSk7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjaV9hcmVhKTsKLQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKQogewotCXN0cnVjdCBjaHNjX2NvbXBfbGlzdCAqY2NsOwotCWludCByZXQsIGNjb2RlOwomIzQzOwlzdHJ1Y3QgY2hzY19jb21wX2xpc3QgKmNjbCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKJiM0MzsJaW50IGNjb2RlOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0OwogCQl1MzIgY3R5cGUgOiA4OwpAQCAtNjgxLDcgJiM0Mzs2MjQsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKQogCQl1NjQgOiA2NDsKIAkJc3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlOwogCQl1OCBkYXRhW1BBR0VfU0laRSAtIDM2XTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NjbF9hcmVhOwomIzQzOwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NjbF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMOwogCXN0cnVjdCB7CiAJCXUzMiBtIDogMTsKIAkJdTMyIDogMzE7CkBAIC02OTYsMTggJiM0Mzs2MzksMTQgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbCkKIAkJdTMyIHJlczsKIAl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqY3NzaWRzX3Bhcm07CiAKLQlzY2NsX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiYjNDM7CXNjY2xfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFzY2NsX2FyZWEpCiAJCXJldHVybiAtRU5PTUVNOwogCWNjbCA9IGt6YWxsb2Nfb2JqKCpjY2wpOwotCWlmICghY2NsKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCWlmIChjb3B5X2Zyb21fdXNlcihjY2wsIHVzZXJfY2NsLCBzaXplb2YoKmNjbCkpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoIWNjbCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoY2NsLCB1c2VyX2NjbCwgc2l6ZW9mKCpjY2wpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwogCXNjY2xfYXJlYS0mZ3Q7cmVxdWVzdC5sZW5ndGggPSAweDAwMjA7CiAJc2NjbF9hcmVhLSZndDtyZXF1ZXN0LmNvZGUgPSAweDAwMzA7CiAJc2NjbF9hcmVhLSZndDtmbXQgPSBjY2wtJmd0O3JlcS5mbXQ7CkBAIC03MjgsNjEgJiM0Mzs2NjcsNDYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbCkKIAkJYnJlYWs7CiAJfQogCWNjb2RlID0gY2hzYyhzY2NsX2FyZWEpOwotCWlmIChjY29kZSAhPSAwKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoY2NvZGUgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlPOwogCWlmIChzY2NsX2FyZWEtJmd0O3Jlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7Ci0JCXJldCA9IC1FSU87CiAJCUNIU0NfTVNHKDAsICYjMzQ7c2NjbDogcmVzcG9uc2UgY29kZT0leFxuJiMzNDssCiAJCQkgc2NjbF9hcmVhLSZndDtyZXNwb25zZS5jb2RlKTsKLQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCXJldHVybiAtRUlPOwogCX0KIAltZW1jcHkoJmFtcDtjY2wtJmd0O3NjY2wsICZhbXA7c2NjbF9hcmVhLSZndDtyZXNwb25zZSwgc2NjbF9hcmVhLSZndDtyZXNwb25zZS5sZW5ndGgpOwogCWlmIChjb3B5X3RvX3VzZXIodXNlcl9jY2wsIGNjbCwgc2l6ZW9mKCpjY2wpKSkKLQkJcmV0ID0gLUVGQVVMVDsKLQllbHNlCi0JCXJldCA9IDA7Ci1vdXRfZnJlZToKLQlrZnJlZShjY2wpOwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY2NsX2FyZWEpOwotCXJldHVybiByZXQ7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jaHBkKHZvaWQgX191c2VyICp1c2VyX2NocGQpCiB7Ci0Jc3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhOwotCXN0cnVjdCBjaHNjX2NwZF9pbmZvICpjaHBkOwomIzQzOwlzdHJ1Y3QgY2hzY19zY3BkICpzY3BkX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBjaHNjX2NwZF9pbmZvICpjaHBkIF9fZnJlZShrZnJlZSkgPSBOVUxMOwogCWludCByZXQ7CiAKIAljaHBkID0ga3phbGxvY19vYmooKmNocGQpOwotCXNjcGRfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQlpZiAoIXNjcGRfYXJlYSB8fCAhY2hwZCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQlpZiAoY29weV9mcm9tX3VzZXIoY2hwZCwgdXNlcl9jaHBkLCBzaXplb2YoKmNocGQpKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJc2NwZF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJaWYgKCFzY3BkX2FyZWEgfHwgIWNocGQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKGNocGQsIHVzZXJfY2hwZCwgc2l6ZW9mKCpjaHBkKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKIAlyZXQgPSBjaHNjX2RldGVybWluZV9jaGFubmVsX3BhdGhfZGVzYyhjaHBkLSZndDtjaHBpZCwgY2hwZC0mZ3Q7Zm10LAogCQkJCQkgICAgICAgY2hwZC0mZ3Q7cmZtdCwgY2hwZC0mZ3Q7YywgY2hwZC0mZ3Q7bSwKIAkJCQkJICAgICAgIHNjcGRfYXJlYSk7CiAJaWYgKHJldCkKLQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCXJldHVybiByZXQ7CiAJbWVtY3B5KCZhbXA7Y2hwZC0mZ3Q7Y2hwZGIsICZhbXA7c2NwZF9hcmVhLSZndDtyZXNwb25zZSwgc2NwZF9hcmVhLSZndDtyZXNwb25zZS5sZW5ndGgpOwogCWlmIChjb3B5X3RvX3VzZXIodXNlcl9jaHBkLCBjaHBkLCBzaXplb2YoKmNocGQpKSkKLQkJcmV0ID0gLUVGQVVMVDsKLW91dF9mcmVlOgotCWtmcmVlKGNocGQpOwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3BkX2FyZWEpOwotCXJldHVybiByZXQ7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9kY2FsKHZvaWQgX191c2VyICp1c2VyX2RjYWwpCiB7Ci0Jc3RydWN0IGNoc2NfZGNhbCAqZGNhbDsKLQlpbnQgcmV0LCBjY29kZTsKJiM0MzsJc3RydWN0IGNoc2NfZGNhbCAqZGNhbCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKJiM0MzsJaW50IGNjb2RlOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0OwogCQl1MzIgYXR5cGUgOiA4OwpAQCAtNzk0LDIwICYjNDM7NzE4LDE2IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9kY2FsKHZvaWQgX191c2VyICp1c2VyX2RjYWwpCiAJCXUzMiByZXMxWzJdOwogCQlzdHJ1Y3QgY2hzY19oZWFkZXIgcmVzcG9uc2U7CiAJCXU4IGRhdGFbUEFHRV9TSVpFIC0gMzZdOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzZGNhbF9hcmVhOwomIzQzOwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2RjYWxfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKIAotCXNkY2FsX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiYjNDM7CXNkY2FsX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmICghc2RjYWxfYXJlYSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZGNhbCA9IGt6YWxsb2Nfb2JqKCpkY2FsKTsKLQlpZiAoIWRjYWwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGRjYWwsIHVzZXJfZGNhbCwgc2l6ZW9mKCpkY2FsKSkpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBvdXRfZnJlZTsKLQl9CiYjNDM7CWlmICghZGNhbCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoZGNhbCwgdXNlcl9kY2FsLCBzaXplb2YoKmRjYWwpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwogCXNkY2FsX2FyZWEtJmd0O3JlcXVlc3QubGVuZ3RoID0gMHgwMDIwOwogCXNkY2FsX2FyZWEtJmd0O3JlcXVlc3QuY29kZSA9IDB4MDAzNDsKIAlzZGNhbF9hcmVhLSZndDthdHlwZSA9IGRjYWwtJmd0O3JlcS5hdHlwZTsKQEAgLTgxNiwyNiAmIzQzOzczNiwxOCBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfZGNhbCh2b2lkIF9fdXNlciAqdXNlcl9kY2FsKQogCSAgICAgICBzaXplb2Yoc2RjYWxfYXJlYS0mZ3Q7bGlzdF9wYXJtKSk7CiAKIAljY29kZSA9IGNoc2Moc2RjYWxfYXJlYSk7Ci0JaWYgKGNjb2RlICE9IDApIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXRfZnJlZTsKLQl9CiYjNDM7CWlmIChjY29kZSAhPSAwKQomIzQzOwkJcmV0dXJuIC1FSU87CiAJaWYgKHNkY2FsX2FyZWEtJmd0O3Jlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7Ci0JCXJldCA9IC1FSU87CiAJCUNIU0NfTVNHKDAsICYjMzQ7c2RjYWw6IHJlc3BvbnNlIGNvZGU9JXhcbiYjMzQ7LAogCQkJIHNkY2FsX2FyZWEtJmd0O3Jlc3BvbnNlLmNvZGUpOwotCQlnb3RvIG91dF9mcmVlOwomIzQzOwkJcmV0dXJuIC1FSU87CiAJfQogCW1lbWNweSgmYW1wO2RjYWwtJmd0O3NkY2FsLCAmYW1wO3NkY2FsX2FyZWEtJmd0O3Jlc3BvbnNlLAogCSAgICAgICBzZGNhbF9hcmVhLSZndDtyZXNwb25zZS5sZW5ndGgpOwogCWlmIChjb3B5X3RvX3VzZXIodXNlcl9kY2FsLCBkY2FsLCBzaXplb2YoKmRjYWwpKSkKLQkJcmV0ID0gLUVGQVVMVDsKLQllbHNlCi0JCXJldCA9IDA7Ci1vdXRfZnJlZToKLQlrZnJlZShkY2FsKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2RjYWxfYXJlYSk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGxvbmcgY2hzY19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTkwNCw3ICYjNDM7ODE2LDcgQEAgc3RhdGljIGludCBjaHNjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiAJfQogCXNucHJpbnRmKGRiZiwgc2l6ZW9mKGRiZiksICYjMzQ7cmVscmV0OiVkJiMzNDssIHJldCk7CiAJQ0hTQ19MT0coMCwgZGJmKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpb25fY2xvc2VfY2hzY19hcmVhKTsKJiM0MzsJa2ZyZWUob25fY2xvc2VfY2hzY19hcmVhKTsKIAlvbl9jbG9zZV9jaHNjX2FyZWEgPSBOVUxMOwogCWtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpOwogCW9uX2Nsb3NlX3JlcXVlc3QgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jbWYuYyBiL2RyaXZlcnMvczM5MC9jaW8vY21mLmMKaW5kZXggOTJhYjNkNTQ2ZmU0Ny4uNmM0NmIwZDBiM2RhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jbWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL2NtZi5jCkBAIC01MDEsMTIgJiM0Mzs1MDEsMTIgQEAgc3RhdGljIGludCBhbGxvY19jbWIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiAJCVdBUk5fT04oIWxpc3RfZW1wdHkoJmFtcDtjbWJfYXJlYS5saXN0KSk7CiAKIAkJc3Bpbl91bmxvY2soJmFtcDtjbWJfYXJlYS5sb2NrKTsKLQkJbWVtID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihzaXplKSk7CiYjNDM7CQltZW0gPSBrbWFsbG9jKFBBR0VfU0laRSAmbHQ7Jmx0OyBnZXRfb3JkZXIoc2l6ZSksIEdGUF9LRVJORUwpOwogCQlzcGluX2xvY2soJmFtcDtjbWJfYXJlYS5sb2NrKTsKIAogCQlpZiAoY21iX2FyZWEubWVtKSB7CiAJCQkvKiBvaywgYW5vdGhlciB0aHJlYWQgd2FzIGZhc3RlciAqLwotCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyltZW0sIGdldF9vcmRlcihzaXplKSk7CiYjNDM7CQkJa2ZyZWUobWVtKTsKIAkJfSBlbHNlIGlmICghbWVtKSB7CiAJCQkvKiBubyBsdWNrICovCiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtNTQ3LDEwICYjNDM7NTQ3LDggQEAgc3RhdGljIHZvaWQgZnJlZV9jbWIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiAJbGlzdF9kZWxfaW5pdCgmYW1wO3ByaXYtJmd0O2NtYl9saXN0KTsKIAogCWlmIChsaXN0X2VtcHR5KCZhbXA7Y21iX2FyZWEubGlzdCkpIHsKLQkJc3NpemVfdCBzaXplOwotCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBjbWIpICogY21iX2FyZWEubnVtX2NoYW5uZWxzOwogCQljbWZfYWN0aXZhdGUoTlVMTCwgQ01GX09GRik7Ci0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpY21iX2FyZWEubWVtLCBnZXRfb3JkZXIoc2l6ZSkpOwomIzQzOwkJa2ZyZWUoY21iX2FyZWEubWVtKTsKIAkJY21iX2FyZWEubWVtID0gTlVMTDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKGNkZXYtJmd0O2Njd2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCA0YmQ0YzAwYzljMGNhLi5kZmY1ZjUzYTg3OTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCBzdHJ1Y3QgcWRpb19pcnEgewogCWludCBwZXJmX3N0YXRfZW5hYmxlZDsKIAogCXN0cnVjdCBxZHIgKnFkcjsKLQl1bnNpZ25lZCBsb25nIGNoc2NfcGFnZTsKJiM0MzsJdm9pZCAqY2hzY19wYWdlOwogCiAJc3RydWN0IHFkaW9fcSAqaW5wdXRfcXNbUURJT19NQVhfUVVFVUVTX1BFUl9JUlFdOwogCXN0cnVjdCBxZGlvX3EgKm91dHB1dF9xc1tRRElPX01BWF9RVUVVRVNfUEVSX0lSUV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCBjMWUwOWZhMzRlNzc0Li5iZWJjMTI1MGViZWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTE3LDYgJiM0MzsxNyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9hdG9taWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9kZWJ1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9xZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2FzbS5oJmd0OwpAQCAtOTMzLDEwICYjNDM7OTM0LDEwIEBAIGludCBxZGlvX2ZyZWUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7aXJxX3B0ci0mZ3Q7c2V0dXBfbXV0ZXgpOwogCiAJcWRpb19mcmVlX3F1ZXVlcyhpcnFfcHRyKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlycV9wdHItJmd0O3Fkcik7Ci0JZnJlZV9wYWdlKGlycV9wdHItJmd0O2Noc2NfcGFnZSk7CiYjNDM7CWtmcmVlKGlycV9wdHItJmd0O3Fkcik7CiYjNDM7CWtmcmVlKGlycV9wdHItJmd0O2Noc2NfcGFnZSk7CiAJa2ZyZWUoaXJxX3B0ci0mZ3Q7Y2N3KTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlycV9wdHIpOwomIzQzOwlrZnJlZShpcnFfcHRyKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFkaW9fZnJlZSk7CkBAIC05NjEsNyAmIzQzOzk2Miw3IEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsCiAJICAgIG5vX291dHB1dF9xcyAmZ3Q7IFFESU9fTUFYX1FVRVVFU19QRVJfSVJRKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlycV9wdHIgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CWlycV9wdHIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpcnFfcHRyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtOTg2LDEyICYjNDM7OTg3LDEyIEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsCiAJICogcWRpb19lc3RhYmxpc2guIEluIGNhc2Ugb2YgbG93IG1lbW9yeSBhbmQgc3dhcCBvbiBhIHpmY3AgZGlzawogCSAqIHdlIG1heSBub3QgYmUgYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgb3RoZXJ3aXNlLgogCSAqLwotCWlycV9wdHItJmd0O2Noc2NfcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJaXJxX3B0ci0mZ3Q7Y2hzY19wYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghaXJxX3B0ci0mZ3Q7Y2hzY19wYWdlKQogCQlnb3RvIGVycl9jaHNjOwogCiAJLyogcWRyIGlzIHVzZWQgaW4gY2N3MS5jZGEgd2hpY2ggaXMgdTMyICovCi0JaXJxX3B0ci0mZ3Q7cWRyID0gKHN0cnVjdCBxZHIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJaXJxX3B0ci0mZ3Q7cWRyID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIWlycV9wdHItJmd0O3FkcikKIAkJZ290byBlcnJfcWRyOwogCkBAIC0xMDA0LDE0ICYjNDM7MTAwNSwxNCBAQCBpbnQgcWRpb19hbGxvY2F0ZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IG5vX2lucHV0X3FzLAogCXJldHVybiAwOwogCiBlcnJfcXVldWVzOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0ci0mZ3Q7cWRyKTsKJiM0MzsJa2ZyZWUoaXJxX3B0ci0mZ3Q7cWRyKTsKIGVycl9xZHI6Ci0JZnJlZV9wYWdlKGlycV9wdHItJmd0O2Noc2NfcGFnZSk7CiYjNDM7CWtmcmVlKGlycV9wdHItJmd0O2Noc2NfcGFnZSk7CiBlcnJfY2hzYzoKIGVycl9kYmY6CiAJa2ZyZWUoaXJxX3B0ci0mZ3Q7Y2N3KTsKIGVycl9jY3c6Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyKTsKJiM0MzsJa2ZyZWUoaXJxX3B0cik7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocWRpb19hbGxvY2F0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCmluZGV4IGVhMDlhYWRhYWU0ZWMuLmMwMjE1YTdkMjlhODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCkBAIC0zNSw3ICYjNDM7MzUsNyBAQCB2b2lkIHFkaW9fZnJlZV9idWZmZXJzKHN0cnVjdCBxZGlvX2J1ZmZlciAqKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQogCWludCBwb3M7CiAKIAlmb3IgKHBvcyA9IDA7IHBvcyAmbHQ7IGNvdW50OyBwb3MgJiM0Mzs9IFFCVUZGX1BFUl9QQUdFKQotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zltwb3NdKTsKJiM0MzsJCWtmcmVlKGJ1Zltwb3NdKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFkaW9fZnJlZV9idWZmZXJzKTsKIApAQCAtNDksNyAmIzQzOzQ5LDcgQEAgaW50IHFkaW9fYWxsb2NfYnVmZmVycyhzdHJ1Y3QgcWRpb19idWZmZXIgKipidWYsIHVuc2lnbmVkIGludCBjb3VudCkKIAlpbnQgcG9zOwogCiAJZm9yIChwb3MgPSAwOyBwb3MgJmx0OyBjb3VudDsgcG9zICYjNDM7PSBRQlVGRl9QRVJfUEFHRSkgewotCQlidWZbcG9zXSA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJCWJ1Zltwb3NdID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWJ1Zltwb3NdKSB7CiAJCQlxZGlvX2ZyZWVfYnVmZmVycyhidWYsIGNvdW50KTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtODMsNyAmIzQzOzgzLDcgQEAgc3RhdGljIHZvaWQgX19xZGlvX2ZyZWVfcXVldWVzKHN0cnVjdCBxZGlvX3EgKipxdWV1ZXMsIHVuc2lnbmVkIGludCBjb3VudCkKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKIAkJcSA9IHF1ZXVlc1tpXTsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXEtJmd0O3NsX3BhZ2UpOwomIzQzOwkJa2ZyZWUocS0mZ3Q7c2xfcGFnZSk7CiAJCWttZW1fY2FjaGVfZnJlZShxZGlvX3FfY2FjaGUsIHEpOwogCX0KIH0KQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc3RhdGljIGludCBfX3FkaW9fYWxsb2NhdGVfcXMoc3RydWN0IHFkaW9fcSAqKmlycV9wdHJfcXMsIGludCBucl9xdWV1ZXMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCXEtJmd0O3NsX3BhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJCXEtJmd0O3NsX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcS0mZ3Q7c2xfcGFnZSkgewogCQkJa21lbV9jYWNoZV9mcmVlKHFkaW9fcV9jYWNoZSwgcSk7CiAJCQlfX3FkaW9fZnJlZV9xdWV1ZXMoaXJxX3B0cl9xcywgaSk7CkBAIC0yNDksMTEgJiM0MzsyNDksMTEgQEAgaW50IHFkaW9fc2V0dXBfZ2V0X3NzcWQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLAogCiAJREJGX0VWRU5UKCYjMzQ7Z2V0c3NxZDolNHgmIzM0Oywgc2NoaWQtJmd0O3NjaF9ubyk7CiAJaWYgKCFpcnFfcHRyKSB7Ci0JCXNzcWQgPSAoc3RydWN0IGNoc2Nfc3NxZF9hcmVhICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwomIzQzOwkJc3NxZCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzc3FkKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlIHsKLQkJc3NxZCA9IChzdHJ1Y3QgY2hzY19zc3FkX2FyZWEgKilpcnFfcHRyLSZndDtjaHNjX3BhZ2U7CiYjNDM7CQlzc3FkID0gaXJxX3B0ci0mZ3Q7Y2hzY19wYWdlOwogCX0KIAogCXJjID0gY2hzY19zc3FkKCpzY2hpZCwgc3NxZCk7CkBAIC0yNzAsNyAmIzQzOzI3MCw3IEBAIGludCBxZGlvX3NldHVwX2dldF9zc3FkKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciwKIAogb3V0OgogCWlmICghaXJxX3B0cikKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNzcWQpOwomIzQzOwkJa2ZyZWUoc3NxZCk7CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYwppbmRleCBlMTY3YWE3NWMzZGZmLi5hMmZmNTE4ODc1MzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKQEAgLTEzNiw3ICYjNDM7MTM2LDcgQEAgc3RhdGljIHN0cnVjdCBhaXJxX3N0cnVjdCB0aXFkaW9fYWlycSA9IHsKIAogc3RhdGljIGludCBzZXRfc3ViY2hhbm5lbF9pbmQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLCBpbnQgcmVzZXQpCiB7Ci0Jc3RydWN0IGNoc2Nfc2Nzc2NfYXJlYSAqc2Nzc2MgPSAodm9pZCAqKWlycV9wdHItJmd0O2Noc2NfcGFnZTsKJiM0MzsJc3RydWN0IGNoc2Nfc2Nzc2NfYXJlYSAqc2Nzc2MgPSBpcnFfcHRyLSZndDtjaHNjX3BhZ2U7CiAJZG1hNjRfdCBzdW1tYXJ5X2luZGljYXRvcl9hZGRyLCBzdWJjaGFubmVsX2luZGljYXRvcl9hZGRyOwogCWludCByYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9zY20uYyBiL2RyaXZlcnMvczM5MC9jaW8vc2NtLmMKaW5kZXggMTcxMjEyYTZkMmQ5Yy4uYjc5ZmUwMjNhYjhkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9zY20uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jCkBAIC0xMyw2ICYjNDM7MTMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDthc20vZWFkbS5oJmd0OwogI2luY2x1ZGUgJiMzNDtjaHNjLmgmIzM0OwogCkBAIC0yMjQsMTIgJiM0MzsyMjUsMTIgQEAgc3RhdGljIGludCBzY21fYWRkKHN0cnVjdCBjaHNjX3NjbV9pbmZvICpzY21faW5mbywgc2l6ZV90IG51bSkKIAogaW50IHNjbV91cGRhdGVfaW5mb3JtYXRpb24odm9pZCkKIHsKLQlzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm87CiYjNDM7CXN0cnVjdCBjaHNjX3NjbV9pbmZvICpzY21faW5mbyBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKIAl1NjQgdG9rZW4gPSAwOwogCXNpemVfdCBudW07CiAJaW50IHJldDsKIAotCXNjbV9pbmZvID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwomIzQzOwlzY21faW5mbyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFzY21faW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI1MCw4ICYjNDM7MjUxLDYgQEAgaW50IHNjbV91cGRhdGVfaW5mb3JtYXRpb24odm9pZCkKIAkJdG9rZW4gPSBzY21faW5mby0mZ3Q7cmVzdG9rOwogCX0gd2hpbGUgKHRva2VuKTsKIAotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY21faW5mbyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzI4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEFNRDY0IENvbXBhdGliaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaWYgaXQgaGFzIGFueSByZWxldmFuY2UgdG8gdGhlIGBhbWQ2NGAgYXJjaGl0ZWN0dXJlIEkmIzM5O20gd29ya2luZyB3aXRoLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBjbGVhcmx5IHNwZWNpZmllZCBhcyBgYW1kNjRgLCBzbyB0aGF0JiMzOTtzIHRoZSBmb2N1cy4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMuCgpIbW0sIGludGVyZXN0aW5nLiBJdCBzZWVtcyB0aGlzIHBhdGNoIGlzIGVudGlyZWx5IGZvY3VzZWQgb24gdGhlIGBzMzkwYCBhcmNoaXRlY3R1cmUsIGp1ZGdpbmcgYnkgdGhlIGZpbGUgcGF0aHMuIEkgc2VlIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaGAgd2hpY2ggaXMgYW4gYHMzOTBgIHNwZWNpZmljIGhlYWRlciwgYW5kIGEgd2hvbGUgc2xldyBvZiBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL3MzOTAvY2lvL2AgZGlyZWN0b3J5LiBUaGVzZSBhcmUgYWxsIHJlbGF0ZWQgdG8gdGhlIGBzMzkwYCBDSU8gZHJpdmVyLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBhbnkgb2YgdGhpcyBgczM5MGAgY29kZSBpcyBldmVuIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiBhbiBgYW1kNjRgIHN5c3RlbS4gSXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGdyZXAgdGhlIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBmaWxlcyB0byBzZWUgaWYgYW55IG9mIHRoZXNlIGBzMzkwYCBkcml2ZXJzIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGZvciBgYW1kNjRgIG9yIGluY2x1ZGVkIGluIHNvbWUgZ2VuZXJhbCBidWlsZCBwcm9jZXNzLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZTsgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgY2hlY2ssIGFuZCB3aWxsIHRlbGwgbWUgd2hldGhlciBJIG5lZWQgdG8gcGF5IGFueSBmdXJ0aGVyIGF0dGVudGlvbiB0byB0aGlzIHBhdGNoIGluIHRoZSBjb250ZXh0IG9mIG15IGBhbWQ2NGAgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTg9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0xMTM4LVx0ZGFzZD1cdFx0W0hXLE5FVF1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjExMzk6XHRcdFx0U2VlIGhlYWRlciBvZiBkcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTExNDAtXG4tLVxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdD04PXdpbGwgYmUgdXNlZCB0byBkZW5vdGUgaW5zdGFuY2VzIG9mIHRoZSBzdHJ1Y3R1cmVzIGhlcmVpbiBkZXNjcmliZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdC0xNS1cbkRvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tYXAtbG9ja2luZy5yc3Q6MTY6VGhlIE1hdHJpeCBEZXZpY2VzIExvY2sgKGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgpXG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWFwLWxvY2tpbmcucnN0LTE3LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLS1cbkRvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tYXAtbG9ja2luZy5yc3Q9NTI9YmVlbiBhdHRhY2hlZCB0byB0aGUgS1ZNIGd1ZXN0LlxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdC01My1cbkRvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tYXAtbG9ja2luZy5yc3Q6NTQ6VGhlIEd1ZXN0cyBMb2NrIChkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oKVxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdC01NS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0PTc5PXN0cmFuZ2Ugc2lkZSBlZmZlY3RzIG1heSBoYXBwZW4uXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtODMtXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdDo4NDouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuY1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtODUtICAgOmV4cG9ydDpcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTg2LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3Q6ODc6Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC04OC0gICA6ZXhwb3J0OlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0PTk1PWF0dGFjaGVkIGRldmljZS5cbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC05OS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0OjEwMDouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9zMzkwL2Npby9jbWYuY1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtMTAxLSAgIDpleHBvcnQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3Q9MTEyPWNjdyBncm91cCBkZXZpY2VzXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtMTE3LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3Q6MTE4Oi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmNcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTExOS0gICA6ZXhwb3J0OlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0PTEzMj1pbnRlcnJ1cHRzIGFuZCBpbnRlcnJ1cHQgdmVjdG9ycy5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTEzMy1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0OjEzNDouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9zMzkwL2Npby9haXJxLmNcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTEzNS0gICA6ZXhwb3J0OlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MjcxPVVzZSBiZGV2X3JlYWRfb25seShiZGV2KSBpbnN0ZWFkIG9mIGlzX3JlYWRfb25seShrZGV2KS4gIFRoZSBsYXR0ZXJcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6MjcyOmlzIHN0aWxsIGFsaXZlLCBidXQgb25seSBiZWNhdXNlIG9mIHRoZSBtZXNzIGluIGRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTI3My1BcyBzb29uIGFzIGl0IGdldHMgZml4ZWQgaXNfcmVhZF9vbmx5KCkgd2lsbCBkaWUuXG4tLVxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3Q9NzM9Q29kZSAgU2VxIyAgICBJbmNsdWRlIEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50c1xuLS1cbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTExMC0mIzM5OzImIzM5OyAgIDAxLTA0ICBsaW51eC9pMm8uaFxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3Q6MTExOiYjMzk7MyYjMzk7ICAgMDAtMEYgIGRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdCFcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTExMi0mIzM5OzMmIzM5OyAgIDAwLTFGICBsaW51eC9zdXNwZW5kX2lvY3Rscy5oLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3QhXG4tLVxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3QtMzE0LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOm9lQHBvcnQuZGVcdTAwM2VcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0OjMxNTomIzM5O3omIzM5OyAgIDEwLTRGICBkcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuaCAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3QhXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdC0zMTYtJiMzOTt8JiMzOTsgICAwMC03RiAgbGludXgvbWVkaWEuaFxuLS1cbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTM5OC0weENGICAwMiAgICAgZnMvc21iL2NsaWVudC9jaWZzX2lvY3RsLmhcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0OjM5OToweEREICAwMC0zRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpGQ1AgZGV2aWNlIGRyaXZlciBzZWUgZHJpdmVycy9zMzkwL3Njc2kvXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdC00MDAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2NtYWlsdG86YWhlcnJtYW5AZGUuaWJtLmNvbVx1MDAzZVxuLS1cbk1BSU5UQUlORVJTPTE0Mzg4PUY6XHRhcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNcbk1BSU5UQUlORVJTOjE0Mzg5OkY6XHRkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jXG5NQUlOVEFJTkVSUzoxNDM5MDpGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9zMzkweC91dmRldmljZS9cbk1BSU5UQUlORVJTLTE0MzkxLUY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKi9zMzkwL1xuLS1cbk1BSU5UQUlORVJTPTE4OTAyPUY6XHRkcml2ZXJzL3B0cC9cbk1BSU5UQUlORVJTOjE4OTAzOkY6XHRkcml2ZXJzL3MzOTAvbmV0L1xuTUFJTlRBSU5FUlMtMTg5MDQtRjpcdGluY2x1ZGUvZHQtYmluZGluZ3MvbmV0L1xuLS1cbk1BSU5UQUlORVJTPTI0MDc3PUY6XHRkcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1zMzkwLmNcbk1BSU5UQUlORVJTOjI0MDc4OkY6XHRkcml2ZXJzL3MzOTAvXG5NQUlOVEFJTkVSUy0yNDA3OS1GOlx0ZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jXG4tLVxuTUFJTlRBSU5FUlM9MjQwODU9UzpcdFN1cHBvcnRlZFxuTUFJTlRBSU5FUlM6MjQwODY6RjpcdGRyaXZlcnMvczM5MC9jaW8vXG5NQUlOVEFJTkVSUy0yNDA4Ny1cbi0tXG5NQUlOVEFJTkVSUz0yNDEwMz1GOlx0YmxvY2svcGFydGl0aW9ucy9pYm0uY1xuTUFJTlRBSU5FUlM6MjQxMDQ6RjpcdGRyaXZlcnMvczM5MC9ibG9jay9kYXNkKlxuTUFJTlRBSU5FUlMtMjQxMDUtRjpcdGluY2x1ZGUvbGludXgvZGFzZF9tb2QuaFxuLS1cbk1BSU5UQUlORVJTPTI0MTI4PVM6XHRTdXBwb3J0ZWRcbk1BSU5UQUlORVJTOjI0MTI5OkY6XHRkcml2ZXJzL3MzOTAvbmV0LyppdWN2KlxuTUFJTlRBSU5FUlMtMjQxMzAtRjpcdGluY2x1ZGUvbmV0L2l1Y3YvXG4tLVxuTUFJTlRBSU5FUlM9MjQxNDc9UzpcdFN1cHBvcnRlZFxuTUFJTlRBSU5FUlM6MjQxNDg6RjpcdGRyaXZlcnMvczM5MC9uZXQvXG5NQUlOVEFJTkVSUy0yNDE0OS1cbi0tXG5NQUlOVEFJTkVSUz0yNDE2OD1TOlx0U3VwcG9ydGVkXG5NQUlOVEFJTkVSUzoyNDE2OTpGOlx0ZHJpdmVycy9zMzkwL2Jsb2NrL3NjbSpcbk1BSU5UQUlORVJTOjI0MTcwOkY6XHRkcml2ZXJzL3MzOTAvY2lvL3NjbS5jXG5NQUlOVEFJTkVSUy0yNDE3MS1cbi0tXG5NQUlOVEFJTkVSUz0yNDE4MD1GOlx0RG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcCpcbk1BSU5UQUlORVJTOjI0MTgxOkY6XHRkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXAqXG5NQUlOVEFJTkVSUy0yNDE4Mi1cbi0tXG5NQUlOVEFJTkVSUz0yNDE5MT1GOlx0RG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0XG5NQUlOVEFJTkVSUzoyNDE5MjpGOlx0ZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njdypcbk1BSU5UQUlORVJTLTI0MTkzLUY6XHRpbmNsdWRlL3VhcGkvbGludXgvdmZpb19jY3cuaFxuLS1cbk1BSU5UQUlORVJTPTI0MjE2PUY6XHRhcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS96Y3J5cHQuaFxuTUFJTlRBSU5FUlM6MjQyMTc6RjpcdGRyaXZlcnMvczM5MC9jcnlwdG8vXG5NQUlOVEFJTkVSUy0yNDIxOC1cbi0tXG5NQUlOVEFJTkVSUz0yNDIyMj1TOlx0U3VwcG9ydGVkXG5NQUlOVEFJTkVSUzoyNDIyMzpGOlx0ZHJpdmVycy9zMzkwL3Njc2kvemZjcF8qXG5NQUlOVEFJTkVSUy0yNDIyNC1cbi0tXG5NQUlOVEFJTkVSUz0yODkxND1GOlx0YXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20vdmlydGlvLWNjdy5oXG5NQUlOVEFJTkVSUzoyODkxNTpGOlx0ZHJpdmVycy9zMzkwL3ZpcnRpby9cbk1BSU5UQUlORVJTLTI4OTE2LVxuLS1cbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTI0PUtCVUlMRF9DRkxBR1MgJiM0Mzs9ICQoY2FsbCBjYy1vcHRpb24sIC1Xbm8tZGVmYXVsdC1jb25zdC1pbml0LXVuc2FmZSlcbmFyY2gvczM5MC9ib290L01ha2VmaWxlLTI1LVxuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGU6MjY6Q0ZMQUdTX3NjbHBfZWFybHlfY29yZS5vICYjNDM7PSAtSSQoc3JjdHJlZSkvZHJpdmVycy9zMzkwL2NoYXJcbmFyY2gvczM5MC9ib290L01ha2VmaWxlLTI3LVxuLS1cbmFyY2gvczM5MC9ib290L3NjbHBfZWFybHlfY29yZS5jLTItI2luY2x1ZGUgXCYjMzQ7Ym9vdC5oXCYjMzQ7XG5hcmNoL3MzOTAvYm9vdC9zY2xwX2Vhcmx5X2NvcmUuYzozOiNpbmNsdWRlIFwmIzM0Oy4uLy4uLy4uL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHlfY29yZS5jXCYjMzQ7XG5hcmNoL3MzOTAvYm9vdC9zY2xwX2Vhcmx5X2NvcmUuYy00LVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaD0zNzQ9c3RydWN0IGdlbl9wb29sICpjaW9fZ3BfZG1hX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LCBpbnQgbnJfcGFnZXMpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oLTM3NS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaDozNzY6LyogRnVuY3Rpb24gZnJvbSBkcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oLTM3Ny1pbnQgY2hzY19zc3RwYyh2b2lkICpwYWdlLCB1bnNpZ25lZCBpbnQgb3AsIHUxNiBjdHJsLCBsb25nICpjbG9ja19kZWx0YSk7XG4tLVxuYXJjaC9zMzkwL21tL2NtbS5jPTMxPU1PRFVMRV9QQVJNX0RFU0Moc2VuZGVyLFxuLS1cbmFyY2gvczM5MC9tbS9jbW0uYy0zMy1cbmFyY2gvczM5MC9tbS9jbW0uYzozNDojaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmhcJiMzNDtcbmFyY2gvczM5MC9tbS9jbW0uYy0zNS1cbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjY3PWNvbmZpZyBTVU5WRENcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjczLVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjI3NDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNzUtXG4tLVxuZHJpdmVycy9jaGFyL0tjb25maWc9MzQ1PWNvbmZpZyBURUxDTE9DS1xuLS1cbmRyaXZlcnMvY2hhci9LY29uZmlnLTM1Ny1cbmRyaXZlcnMvY2hhci9LY29uZmlnOjM1ODpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9jaGFyL0tjb25maWctMzU5LVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTMwPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNTMxLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo1MzI6c291cmNlIFwmIzM0O2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy01MzMtXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTMtICogQXV0aG9yKHMpLi4uLi4uOiBIb2xnZXIgU21vbGluc2tpIFx1MDAzY0hvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbVx1MDAzZVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jOjQ6ICogQmFzZWQgb24uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svbWRpc2suY1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTUtICogLi4uLi4uLi4uLi4uLi4uOiBieSBIYXJ0bXVudCBQZW5uZXIgXHUwMDNjaHBlbm5lckBkZS5pYm0uY29tXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5oLTMtICogQXV0aG9yKHMpLi4uLi4uOiBIb2xnZXIgU21vbGluc2tpIFx1MDAzY0hvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbVx1MDAzZVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5oOjQ6ICogQmFzZWQgb24uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svbWRpc2suaFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5oLTUtICogLi4uLi4uLi4uLi4uLi4uOiBieSBIYXJ0bXVudCBQZW5uZXIgXHUwMDNjaHBlbm5lckBkZS5pYm0uY29tXHUwMDNlXG4tLVxuaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmgtMi0vKlxuaW5jbHVkZS9uZXQvaXVjdi9pdWN2Lmg6MzogKiAgZHJpdmVycy9zMzkwL25ldC9pdWN2LmhcbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oLTQtICogICAgSVVDViBiYXNlIHN1cHBvcnQuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGU9MjM9VEFSR0VUUyAmIzQzOz0gZHJpdmVycy9udHN5bmNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlOjI0OlRBUkdFVFMgJiM0Mzs9IGRyaXZlcnMvczM5MHgvdXZkZXZpY2VcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlLTI1LVRBUkdFVFMgJiM0Mzs9IGRyaXZlcnMvbmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MTkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGluIHRoZSBwcm9tcHQ6CgoqKkRpdmluZyBpbnRvIHRoZSBEcml2ZXIgSW5mcmFzdHJ1Y3R1cmUqKgoKT2theSwgc28gd2UgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRyaXZlciBidWlsZCBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgZm9yIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCBpdHMgY2hhbm5lbCBJL08gKENJTykgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGRyaXZlcnMvTWFrZWZpbGVgIGluIHRoZSByb290IGRyaXZlcnMgZGlyZWN0b3J5IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZnJhbWV3b3JrIGFuZCBob3cgdGhlc2UgczM5MC9DSU8gZHJpdmVycyBmaXQgaW4uIEFyZSB0aGVyZSBjb25kaXRpb25hbCBpbmNsdWRlcz8gQW55IGdlbmVyaWMgcnVsZXM/IFRoZW4sIHRvIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIHMzOTAvQ0lPIGNvZGUsIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZWAuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgc3BlY2lmaWMgc291cmNlIGZpbGVzIGFyZSBiZWluZyBidWlsdCwgYW55IGRlcGVuZGVuY2llcywgYW5kIGhvcGVmdWxseSBob3cgdGhleSYjMzk7cmUgYmVpbmcgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gQWx0ZXJuYXRpdmVseSwgaXQmIzM5O3MgYWxzbyB3b3J0aCBjaGVja2luZyBgZHJpdmVycy9zMzkwL2Npby9LY29uZmlnYC4gU29tZXRpbWVzIHRoZSBidWlsZCBwcm9jZXNzIGlzIGhlYXZpbHkgaW5mbHVlbmNlZCBieSB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgdGhpcyBtaWdodCBnaXZlIG1lIGNsdWVzIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBmZWF0dXJlIGZsYWdzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGRyaXZlci4gSXQmIzM5O3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBob3cgdGhlIHBpZWNlcyBhcmUgcHV0IHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2lvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1ha2VmaWxlIEp1bmdsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgYnVpbHQsIG9yIHBvdGVudGlhbGx5IGluY2x1ZGVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGxpa2VseSBhIGtlcm5lbCBkcml2ZXIsIHRoZSBgTWFrZWZpbGVgIGlzIHRoZSBwbGFjZSB0byBiZS4gVGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIGRyaXZlcnMgaXMgdXN1YWxseSB1bmRlciB0aGUgYGRyaXZlcnMvYCBkaXJlY3RvcnksIHNvIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBBbmQgc2luY2UgdGhpcyBzZWVtcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMsIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IHNvLCBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9NYWtlZmlsZWAgZmlyc3QsIGFzIHRoYXQgaXMgdGhlIGdlbmVyYWwgb25lLiBUaGVuIGlmIHRoYXQgZG9lcyBub3QgY29udGFpbiB3aGF0IEkgYW0gbG9va2luZyBmb3IsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGxvb2sgaW4gdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBsb2NhdGlvbiwgc28gYGRyaXZlcnMvczM5MC9NYWtlZmlsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7czM5MCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9NYWtlZmlsZT0xOTk9b2JqLSQoQ09ORklHX0RJQlMpXHRcdCYjNDM7PSBkaWJzL1xuZHJpdmVycy9NYWtlZmlsZToyMDA6b2JqLSQoQ09ORklHX1MzOTApXHRcdCYjNDM7PSBzMzkwL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDE0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5yZWFjaGFibGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UsIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYGRyaXZlcnMvTWFrZWZpbGVgIGhhcyBhZGRlZCBgb2JqLSQoQ09ORklHX1MzOTApICYjNDM7PSBzMzkwL2AsIG1lYW5pbmcgdGhhdCBzdHVmZiB1bmRlciBgZHJpdmVycy9zMzkwL2AgaXMgb25seSBidWlsdCBpZiB0aGUgYENPTkZJR19TMzkwYCBvcHRpb24gaXMgc2V0LiBBbmQsIGZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oYCBpcyAqYWxzbyogb25seSBpbmNsdWRlZCBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCB2aW9sYXRlIHRoZSBwcm9tcHQmIzM5O3MgbmVnYXRpdmUgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgd29ycmllZCBhYm91dCB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuIFRoZSBwcm9tcHQgbGlzdHMgYSBmZXcsIGJ1dCB0aGUgcmVsZXZhbnQgb25lcyBoZXJlIGFyZSBjb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIGFtZDY0LgoKR2l2ZW4gdGhhdCB0aGUgdGFyZ2V0IGlzIGFtZDY0LCBhbmQgdGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgaW4gYGFyY2gvczM5MC9gIGFuZCBgZHJpdmVycy9zMzkwL2Npby9gLCBhbmQgdGhhdCBgQ09ORklHX1MzOTBgIGlzICpvbmx5KiBkZWZpbmVkIGZvciBzMzkwLCB0aGlzIGlzIHByZXR0eSBjbGVhci4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgbm90aGluZyBpbiBgZHJpdmVycy9zMzkwL2Npb2Agb3IgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oYCBjYW4gc29tZWhvdyBiZSBjb21waWxlZCBvciBleGVjdXRlZCBvbiBhbWQ2NC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvczM5MC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2lvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc1OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9zMzkwL01ha2VmaWxlLTUtXG5kcml2ZXJzL3MzOTAvTWFrZWZpbGU6NjpvYmoteSAmIzQzOz0gY2lvLyBibG9jay8gY2hhci8gY3J5cHRvLyBuZXQvIHNjc2kvIHZpcnRpby9cbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMtMzAtI2luY2x1ZGUgXHUwMDNjYXNtL2ViY2RpYy5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmM6MzE6I2luY2x1ZGUgXHUwMDNjYXNtL2Npby5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMtMzItI2luY2x1ZGUgXHUwMDNjYXNtL2Njd2Rldi5oXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTI3LSNpbmNsdWRlIFx1MDAzY2FzbS9jY3dkZXYuaFx1MDAzZVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jOjI4OiNpbmNsdWRlIFx1MDAzY2FzbS9jaW8uaFx1MDAzZVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMtMjYtI2luY2x1ZGUgXHUwMDNjYXNtL2Njd2Rldi5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmM6Mjc6I2luY2x1ZGUgXHUwMDNjYXNtL2Npby5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMtMjgtI2luY2x1ZGUgXHUwMDNjYXNtL2ViY2RpYy5oXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMtMjItI2luY2x1ZGUgXHUwMDNjYXNtL2Njd2Rldi5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2hhci9mczMyNzAuYzoyMzojaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jLTI0LSNpbmNsdWRlIFx1MDAzY2FzbS9lYmNkaWMuaFx1MDAzZVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy0yMi0jaW5jbHVkZSBcdTAwM2Nhc20vY2N3ZGV2LmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYzoyMzojaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy0yNC0jaW5jbHVkZSBcdTAwM2Nhc20vZWJjZGljLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMtMjAtI2luY2x1ZGUgXHUwMDNjYXNtL21hY2hpbmUuaFx1MDAzZVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jOjIxOiNpbmNsdWRlIFx1MDAzY2FzbS9jaW8uaFx1MDAzZVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jLTIyLSNpbmNsdWRlIFx1MDAzY2FzbS9jY3dkZXYuaFx1MDAzZVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGU9MTA9Q0ZMQUdTX3ZmaW9fY2N3X3RyYWNlLm8gOj0gLUkkKHNyYylcbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUtMTEtXG5kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlOjEyOm9iai15ICYjNDM7PSBhaXJxLm8gYmxhY2tsaXN0Lm8gY2hzYy5vIGNpby5vIGNzcy5vIGNocC5vIGlkc2V0Lm8gaXNjLm8gXFxcbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGU6MTM6XHRmY3gubyBpdGN3Lm8gY3J3Lm8gY2N3cmVxLm8gdHJhY2UubyBpb2FzbS5vIGNpb19kZWJ1Z2ZzLm9cbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUtMTQtY2N3X2RldmljZS1vYmpzICYjNDM7PSBkZXZpY2UubyBkZXZpY2VfZnNtLm8gZGV2aWNlX29wcy5vXG4tLVxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZT0yNz1vYmotJChDT05GSUdfVkZJT19DQ1cpICYjNDM7PSB2ZmlvX2Njdy5vXG5kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlLTI4LVxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZToyOTpvYmotJChDT05GSUdfQ0lPX0lOSkVDVCkgJiM0Mzs9IGNpb19pbmplY3Qub1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTIzLSNpbmNsdWRlIFx1MDAzY2FzbS9pc2MuaFx1MDAzZVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6MjQ6I2luY2x1ZGUgXHUwMDNjYXNtL2Npby5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy0yNS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jOjI2OiNpbmNsdWRlIFwmIzM0O2Npby5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzoyNzojaW5jbHVkZSBcJiMzNDtjaW9fZGVidWcuaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMjgtI2luY2x1ZGUgXCYjMzQ7aW9hc20uaFwmIzM0O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jPTQxPWludCByZWdpc3Rlcl9hZGFwdGVyX2ludGVycnVwdChzdHJ1Y3QgYWlycV9zdHJ1Y3QgKmFpcnEpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtNDctXHRpZiAoIWFpcnEtXHUwMDNlbHNpX3B0cikge1xuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6NDg6XHRcdGFpcnEtXHUwMDNlbHNpX3B0ciA9IGNpb19kbWFfemFsbG9jKDEpO1xuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtNDktXHRcdGlmICghYWlycS1cdTAwM2Vsc2lfcHRyKVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jPTY3PXZvaWQgdW5yZWdpc3Rlcl9hZGFwdGVyX2ludGVycnVwdChzdHJ1Y3QgYWlycV9zdHJ1Y3QgKmFpcnEpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtODAtXHRpZiAoYWlycS1cdTAwM2VmbGFncyBcdTAwMjYgQUlSUV9QVFJfQUxMT0NBVEVEKSB7XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzo4MTpcdFx0Y2lvX2RtYV9mcmVlKGFpcnEtXHUwMDNlbHNpX3B0ciwgMSk7XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy04Mi1cdFx0YWlycS1cdTAwM2Vsc2lfcHRyID0gTlVMTDtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYz04OD1zdGF0aWMgaXJxcmV0dXJuX3QgZG9fYWlycV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZHVtbXkpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtOTQtXHR0cGlfaW5mbyA9IFx1MDAyNmdldF9pcnFfcmVncygpLVx1MDAzZXRwaV9pbmZvO1xuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6OTU6XHR0cmFjZV9zMzkwX2Npb19hZGFwdGVyX2ludCh0cGlfaW5mbyk7XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy05Ni1cdGhlYWQgPSBcdTAwMjZhaXJxX2xpc3RzW3RwaV9pbmZvLVx1MDAzZWlzY107XG4tLVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM9MTI3PXN0cnVjdCBhaXJxX2l2ICphaXJxX2l2X2NyZWF0ZSh1bnNpZ25lZCBsb25nIGJpdHMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMTUxLVx0fSBlbHNlIHtcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jOjE1MjpcdFx0aXYtXHUwMDNldmVjdG9yID0gY2lvX2RtYV96YWxsb2Moc2l6ZSk7XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy0xNTMtXHRcdGlmICghaXYtXHUwMDNldmVjdG9yKVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTE5MC1cdGVsc2UgaWYgKCEoaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUlFfSVZfR1VFU1RWRUMpKVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6MTkxOlx0XHRjaW9fZG1hX2ZyZWUoaXYtXHUwMDNldmVjdG9yLCBzaXplKTtcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTE5Mi1cdGtmcmVlKGl2KTtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYz0yMDI9dm9pZCBhaXJxX2l2X3JlbGVhc2Uoc3RydWN0IGFpcnFfaXYgKml2KVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTIwOS1cdGVsc2UgaWYgKCEoaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUlFfSVZfR1VFU1RWRUMpKVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6MjEwOlx0XHRjaW9fZG1hX2ZyZWUoaXYtXHUwMDNldmVjdG9yLCBpdl9zaXplKGl2LVx1MDAzZWJpdHMpKTtcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTIxMS1cdGtmcmVlKGl2LVx1MDAzZWF2YWlsKTtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYz0zMDU9aW50IF9faW5pdCBhaXJxX2luaXQodm9pZClcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTMwNi17XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzozMDc6XHRhaXJxX2l2X2NhY2hlID0gZG1hX3Bvb2xfY3JlYXRlKFwmIzM0O2FpcnFfaXZfY2FjaGVcJiMzNDssIGNpb19nZXRfZG1hX2Nzc19kZXYoKSxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTMwOC1cdFx0XHRcdFx0Y2FjaGVfbGluZV9zaXplKCksXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0xMC1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MTE6I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtjaW86IFwmIzM0OyBmbXRcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMTItXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yMS0jaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MjI6I2luY2x1ZGUgXHUwMDNjYXNtL2Npby5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTIzLSNpbmNsdWRlIFx1MDAzY2FzbS9pcGwuaFx1MDAzZVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjUtI2luY2x1ZGUgXCYjMzQ7YmxhY2tsaXN0LmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MjY6I2luY2x1ZGUgXCYjMzQ7Y2lvLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6Mjc6I2luY2x1ZGUgXCYjMzQ7Y2lvX2RlYnVnLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjgtI2luY2x1ZGUgXCYjMzQ7Y3NzLmhcJiMzNDtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTMyLSAqIFwmIzM0O0JsYWNrbGlzdGluZ1wmIzM0OyBvZiBjZXJ0YWluIGRldmljZXM6XG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjMzOiAqIERldmljZSBudW1iZXJzIGdpdmVuIGluIHRoZSBjb21tYW5kbGluZSBhcyBjaW9faWdub3JlPS4uLiB3b24mIzM5O3QgYmUga25vd25cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzQtICogdG8gTGludXguXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz00OT1zdGF0aWMgaW50IGJsYWNrbGlzdF9yYW5nZShyYW5nZV9hY3Rpb24gYWN0aW9uLCB1bnNpZ25lZCBpbnQgZnJvbV9zc2lkLFxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNTQtXHRcdGlmIChtc2d0cmlnZ2VyKVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo1NTpcdFx0XHRwcl93YXJuKFwmIzM0OzAuJXguJTA0eCB0byAwLiV4LiUwNHggaXMgbm90IGEgdmFsaWQgcmFuZ2UgZm9yIGNpb19pZ25vcmVcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTU2LVx0XHRcdFx0ZnJvbV9zc2lkLCBmcm9tLCB0b19zc2lkLCB0byk7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0xMDE9c3RhdGljIGludCBwYXJzZV9idXNpZChjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqY3NzaWQsIHVuc2lnbmVkIGludCAqc3NpZCxcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTE0Mi1cdGlmIChyYyBcdTAwMjZcdTAwMjYgbXNndHJpZ2dlcilcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MTQzOlx0XHRwcl93YXJuKFwmIzM0OyVzIGlzIG5vdCBhIHZhbGlkIGRldmljZSBmb3IgdGhlIGNpb19pZ25vcmUga2VybmVsIHBhcmFtZXRlclxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMTQ0LVx0XHRcdHN0cik7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0yMjc9YmxhY2tsaXN0X3NldHVwIChjaGFyICpzdHIpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yMzQtXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjIzNTpfX3NldHVwIChcJiMzNDtjaW9faWdub3JlPVwmIzM0OywgYmxhY2tsaXN0X3NldHVwKTtcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjM2LVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MjQ2PWlzX2JsYWNrbGlzdGVkIChpbnQgc3NpZCwgaW50IGRldm5vKVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjUzLSAqIEZ1bmN0aW9uOiBibGFja2xpc3RfcGFyc2VfcHJvY19wYXJhbWV0ZXJzXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjI1NDogKiBwYXJzZSB0aGUgc3R1ZmYgd2hpY2ggaXMgcGlwZWQgdG8gL3Byb2MvY2lvX2lnbm9yZVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yNTUtICovXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0yODk9c3RhdGljIHZvaWQgKlxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzoyOTA6Y2lvX2lnbm9yZV9wcm9jX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqb2Zmc2V0KVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yOTEte1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MzAyPXN0YXRpYyB2b2lkXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjMwMzpjaW9faWdub3JlX3Byb2Nfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICppdClcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzA0LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jPTMwNz1zdGF0aWMgdm9pZCAqXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjMwODpjaW9faWdub3JlX3Byb2Nfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICppdCwgbG9mZl90ICpvZmZzZXQpXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTMwOS17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0zMjc9c3RhdGljIGludFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozMjg6Y2lvX2lnbm9yZV9wcm9jX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqaXQpXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTMyOS17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0zNTc9c3RhdGljIHNzaXplX3RcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MzU4OmNpb19pZ25vcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZixcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzU5LVx0XHQgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKm9mZnNldClcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTM5Mi1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MzkzOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY2lvX2lnbm9yZV9wcm9jX3NlcV9vcHMgPSB7XG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjM5NDpcdC5zdGFydCA9IGNpb19pZ25vcmVfcHJvY19zZXFfc3RhcnQsXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjM5NTpcdC5zdG9wICA9IGNpb19pZ25vcmVfcHJvY19zZXFfc3RvcCxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6Mzk2Olx0Lm5leHQgID0gY2lvX2lnbm9yZV9wcm9jX3NlcV9uZXh0LFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozOTc6XHQuc2hvdyAgPSBjaW9faWdub3JlX3Byb2Nfc2VxX3Nob3csXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTM5OC19O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9NDAwPXN0YXRpYyBpbnRcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6NDAxOmNpb19pZ25vcmVfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MDIte1xuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MDM6XHRyZXR1cm4gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZjaW9faWdub3JlX3Byb2Nfc2VxX29wcyxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDA0LVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBjY3dkZXZfaXRlcikpO1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDA2LVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MDc6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBjaW9faWdub3JlX3Byb2Nfb3BzID0ge1xuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MDg6XHQucHJvY19vcGVuXHQ9IGNpb19pZ25vcmVfcHJvY19vcGVuLFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MDktXHQucHJvY19yZWFkXHQ9IHNlcV9yZWFkLFxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDExLVx0LnByb2NfcmVsZWFzZVx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MTI6XHQucHJvY193cml0ZVx0PSBjaW9faWdub3JlX3dyaXRlLFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MTMtfTtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jPTQxNT1zdGF0aWMgaW50XG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQxNjpjaW9faWdub3JlX3Byb2NfaW5pdCAodm9pZClcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDE3LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQxOS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6NDIwOlx0ZW50cnkgPSBwcm9jX2NyZWF0ZShcJiMzNDtjaW9faWdub3JlXCYjMzQ7LCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsIE5VTEwsXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQyMTpcdFx0XHQgICAgXHUwMDI2Y2lvX2lnbm9yZV9wcm9jX29wcyk7XG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQyMi1cdGlmICghZW50cnkpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MjYtXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQyNzpfX2luaXRjYWxsIChjaW9faWdub3JlX3Byb2NfaW5pdCk7XG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQyOC1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMtMjAtXG5kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmM6MjE6I2luY2x1ZGUgXHUwMDNjYXNtL2Npby5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMtMjItI2luY2x1ZGUgXHUwMDNjYXNtL2Njd2Rldi5oXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy04LVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzo5OiNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7Y2lvOiBcJiMzNDsgZm10XG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTEwLVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTMtI2luY2x1ZGUgXHUwMDNjYXNtL2Njd2Rldi5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjE0OiNpbmNsdWRlIFx1MDAzY2FzbS9jaW8uaFx1MDAzZVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xNS1cbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTYtI2luY2x1ZGUgXCYjMzQ7aW9fc2NoLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTc6I2luY2x1ZGUgXCYjMzQ7Y2lvLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTgtI2luY2x1ZGUgXCYjMzQ7ZGV2aWNlLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTk6I2luY2x1ZGUgXCYjMzQ7Y2lvX2RlYnVnLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMjAtXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYz03ND1zdGF0aWMgdm9pZCBjY3dyZXFfZG8oc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy04OC1cdFx0bWVtc2V0KFx1MDAyNmNkZXYtXHUwMDNlcHJpdmF0ZS1cdTAwM2VkbWFfYXJlYS1cdTAwM2VpcmIsIDAsIHNpemVvZihzdHJ1Y3QgaXJiKSk7XG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjg5Olx0XHRyYyA9IGNpb19zdGFydChzY2gsIGNwLCAodTgpIHJlcS1cdTAwM2VtYXNrKTtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtOTAtXHRcdGlmIChyYyA9PSAwKSB7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xMDQtXHRcdC8qIFRlbXBvcmFyeSBpbXByb3BlciBzdGF0dXMuICovXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjEwNTpcdFx0cmMgPSBjaW9fY2xlYXIoc2NoKTtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTA2LVx0XHRpZiAocmMpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYz0xNTA9aW50IGNjd19yZXF1ZXN0X2NhbmNlbChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldilcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTE1OC1cdHJlcS1cdTAwM2VjYW5jZWwgPSAxO1xuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzoxNTk6XHRyYyA9IGNpb19jbGVhcihzY2gpO1xuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xNjAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYz0yNTQ9dm9pZCBjY3dfcmVxdWVzdF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0yNTUte1xuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzoyNTY6XHRzdHJ1Y3QgaXJiICppcmIgPSB0aGlzX2NwdV9wdHIoXHUwMDI2Y2lvX2lyYik7XG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTI1Ny1cdHN0cnVjdCBjY3dfcmVxdWVzdCAqcmVxID0gXHUwMDI2Y2Rldi1cdTAwM2Vwcml2YXRlLVx1MDAzZXJlcTtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jPTMyNj12b2lkIGNjd19yZXF1ZXN0X3RpbWVvdXQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0zMzEtXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjMzMjpcdGlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTMzMy1cdFx0Z290byBlcnI7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0zNDgtXHR9XG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjM0OTpcdHJjID0gY2lvX2NsZWFyKHNjaCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTM1MC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2NocC5jLTIzLVxuZHJpdmVycy9zMzkwL2Npby9jaHAuYzoyNDojaW5jbHVkZSBcJiMzNDtjaW8uaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaHAuYy0yNS0jaW5jbHVkZSBcJiMzNDtjc3MuaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaHAuYy0yNi0jaW5jbHVkZSBcJiMzNDtpb2FzbS5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2NocC5jOjI3OiNpbmNsdWRlIFwmIzM0O2Npb19kZWJ1Zy5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2NocC5jLTI4LSNpbmNsdWRlIFwmIzM0O2NocC5oXCYjMzQ7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMTAtXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzoxMTojZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2NpbzogXCYjMzQ7IGZtdFxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMTItXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMjAtXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzoyMTojaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaW8vY2hzYy5jLTIyLSNpbmNsdWRlIFx1MDAzY2FzbS9jaHBpZC5oXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMjgtI2luY2x1ZGUgXCYjMzQ7Y3NzLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2hzYy5jOjI5OiNpbmNsdWRlIFwmIzM0O2Npby5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzozMDojaW5jbHVkZSBcJiMzNDtjaW9fZGVidWcuaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMzEtI2luY2x1ZGUgXCYjMzQ7aW9hc20uaFwmIzM0O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0xOS1cbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzoyMDojaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0yMS0jaW5jbHVkZSBcdTAwM2Nhc20vY2hzYy5oXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTIzLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjI0OiNpbmNsdWRlIFwmIzM0O2Npby5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmM6MjU6I2luY2x1ZGUgXCYjMzQ7Y2lvX2RlYnVnLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0yNi0jaW5jbHVkZSBcJiMzNDtjc3MuaFwmIzM0O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYz01ND1zdGF0aWMgdm9pZCBjaHNjX3N1YmNoYW5uZWxfaXJxKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTU3LVx0c3RydWN0IGNoc2NfcmVxdWVzdCAqcmVxdWVzdCA9IHByaXZhdGUtXHUwMDNlcmVxdWVzdDtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzo1ODpcdHN0cnVjdCBpcmIgKmlyYiA9IHRoaXNfY3B1X3B0cihcdTAwMjZjaW9faXJiKTtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy01OS1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtNzEtXHRtZW1jcHkoXHUwMDI2cmVxdWVzdC1cdTAwM2VpcmIsIGlyYiwgc2l6ZW9mKCppcmIpKTtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzo3MjpcdGNpb191cGRhdGVfc2NoaWIoc2NoKTtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy03My1cdGNvbXBsZXRlKFx1MDAyNnJlcXVlc3QtXHUwMDNlY29tcGxldGlvbik7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jPTc3PXN0YXRpYyBpbnQgY2hzY19zdWJjaGFubmVsX3Byb2JlKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTg4LVx0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNnNjaC1cdTAwM2VkZXYsIHByaXZhdGUpO1xuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjg5Olx0cmV0ID0gY2lvX2VuYWJsZV9zdWJjaGFubmVsKHNjaCwgKHUzMil2aXJ0X3RvX3BoeXMoc2NoKSk7XG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtOTAtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jPTk5PXN0YXRpYyB2b2lkIGNoc2Nfc3ViY2hhbm5lbF9yZW1vdmUoc3RydWN0IHN1YmNoYW5uZWwgKnNjaClcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtMTAyLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjEwMzpcdGNpb19kaXNhYmxlX3N1YmNoYW5uZWwoc2NoKTtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0xMDQtXHRwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNnNjaC1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYz0xMTM9c3RhdGljIHZvaWQgY2hzY19zdWJjaGFubmVsX3NodXRkb3duKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtMTE0LXtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzoxMTU6XHRjaW9fZGlzYWJsZV9zdWJjaGFubmVsKHNjaCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtMTE2LX1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTExLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoxMjojZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2NpbzogXCYjMzQ7IGZtdFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMy1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTIyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjIzOiNpbmNsdWRlIFx1MDAzY2FzbS9jaW8uaFx1MDAzZVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNC0jaW5jbHVkZSBcdTAwM2Nhc20vZGVsYXkuaFx1MDAzZVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzUtI2luY2x1ZGUgXHUwMDNjYXNtL2Nydy5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjM2OiNpbmNsdWRlIFwmIzM0O2Npby5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM3LSNpbmNsdWRlIFwmIzM0O2Nzcy5oXCYjMzQ7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00MS0jaW5jbHVkZSBcJiMzNDtibGFja2xpc3QuaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0MjojaW5jbHVkZSBcJiMzNDtjaW9fZGVidWcuaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00My0jaW5jbHVkZSBcJiMzNDtjaHAuaFwmIzM0O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDUtXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ2OmRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX21zZ19pZDtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDc6ZGVidWdfaW5mb190ICpjaW9fZGVidWdfdHJhY2VfaWQ7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ4OmRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX2Nyd19pZDtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDktXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjUwOkRFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IGlyYiwgY2lvX2lyYik7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjUxOkVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjaW9faXJiKTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNTItXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTUzLS8qXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjU0OiAqIEZ1bmN0aW9uOiBjaW9fZGVidWdfaW5pdFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy01NS0gKiBJbml0aWFsaXplcyB0aHJlZSBkZWJ1ZyBsb2dzIGZvciBjb21tb24gSS9POlxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo1NjogKiAtIGNpb19tc2cgbG9ncyBnZW5lcmljIGNpbyBtZXNzYWdlc1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo1NzogKiAtIGNpb190cmFjZSBsb2dzIHRoZSBjYWxsaW5nIG9mIGRpZmZlcmVudCBmdW5jdGlvbnNcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NTg6ICogLSBjaW9fY3J3IGxvZ3MgbWFjaGluZSBjaGVjayByZWxhdGVkIGNpbyBtZXNzYWdlc1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy01OS0gKi9cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NjA6c3RhdGljIGludCBfX2luaXQgY2lvX2RlYnVnX2luaXQodm9pZClcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNjEte1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo2MjpcdGNpb19kZWJ1Z19tc2dfaWQgPSBkZWJ1Z19yZWdpc3RlcihcJiMzNDtjaW9fbXNnXCYjMzQ7LCAxNiwgMSwgMTEgKiBzaXplb2YobG9uZykpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo2MzpcdGlmICghY2lvX2RlYnVnX21zZ19pZClcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNjQtXHRcdGdvdG8gb3V0X3VucmVnaXN0ZXI7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjY1Olx0ZGVidWdfcmVnaXN0ZXJfdmlldyhjaW9fZGVidWdfbXNnX2lkLCBcdTAwMjZkZWJ1Z19zcHJpbnRmX3ZpZXcpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo2NjpcdGRlYnVnX3NldF9sZXZlbChjaW9fZGVidWdfbXNnX2lkLCAyKTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Njc6XHRjaW9fZGVidWdfdHJhY2VfaWQgPSBkZWJ1Z19yZWdpc3RlcihcJiMzNDtjaW9fdHJhY2VcJiMzNDssIDE2LCAxLCAxNik7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjY4Olx0aWYgKCFjaW9fZGVidWdfdHJhY2VfaWQpXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTY5LVx0XHRnb3RvIG91dF91bnJlZ2lzdGVyO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo3MDpcdGRlYnVnX3JlZ2lzdGVyX3ZpZXcoY2lvX2RlYnVnX3RyYWNlX2lkLCBcdTAwMjZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjcxOlx0ZGVidWdfc2V0X2xldmVsKGNpb19kZWJ1Z190cmFjZV9pZCwgMik7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjcyOlx0Y2lvX2RlYnVnX2Nyd19pZCA9IGRlYnVnX3JlZ2lzdGVyKFwmIzM0O2Npb19jcndcJiMzNDssIDgsIDEsIDggKiBzaXplb2YobG9uZykpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo3MzpcdGlmICghY2lvX2RlYnVnX2Nyd19pZClcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNzQtXHRcdGdvdG8gb3V0X3VucmVnaXN0ZXI7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjc1Olx0ZGVidWdfcmVnaXN0ZXJfdmlldyhjaW9fZGVidWdfY3J3X2lkLCBcdTAwMjZkZWJ1Z19zcHJpbnRmX3ZpZXcpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo3NjpcdGRlYnVnX3NldF9sZXZlbChjaW9fZGVidWdfY3J3X2lkLCA0KTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNzctXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTc5LW91dF91bnJlZ2lzdGVyOlxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo4MDpcdGRlYnVnX3VucmVnaXN0ZXIoY2lvX2RlYnVnX21zZ19pZCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjgxOlx0ZGVidWdfdW5yZWdpc3RlcihjaW9fZGVidWdfdHJhY2VfaWQpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo4MjpcdGRlYnVnX3VucmVnaXN0ZXIoY2lvX2RlYnVnX2Nyd19pZCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTgzLVx0cmV0dXJuIC0xO1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtODUtXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjg2OmFyY2hfaW5pdGNhbGwgKGNpb19kZWJ1Z19pbml0KTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtODctXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjg4OmludCBjaW9fc2V0X29wdGlvbnMoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgaW50IGZsYWdzKVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy04OS17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz05OD1zdGF0aWMgaW50XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjk5OmNpb19zdGFydF9oYW5kbGVfbm90b3BlcihzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLCBfX3U4IGxwbSlcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTAwLXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTEwNy1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTA4Olx0Q0lPX01TR19FVkVOVCgyLCBcJiMzNDtjaW9fc3RhcnQ6ICYjMzk7bm90IG9wZXImIzM5OyBzdGF0dXMgZm9yIFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMDktXHRcdCAgICAgIFwmIzM0O3N1YmNoYW5uZWwgMC4leC4lMDR4IVxcblwmIzM0Oywgc2NoLVx1MDAzZXNjaGlkLnNzaWQsXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMTEtXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjExMjpcdGlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTExMy1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz0xMjI9aW50XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjEyMzpjaW9fc3RhcnRfa2V5IChzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLFx0Lyogc3ViY2hhbm5lbCBzdHJ1Y3R1cmUgKi9cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTI0LVx0ICAgICAgIHN0cnVjdCBjY3cxICogY3BhLFx0LyogbG9naWNhbCBjaGFubmVsIHByb2cgYWRkciAqL1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTY3LVx0Y2FzZSAzOlx0XHQvKiBkZXZpY2UvcGF0aCBub3Qgb3BlcmF0aW9uYWwgKi9cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTY4Olx0XHRyZXR1cm4gY2lvX3N0YXJ0X2hhbmRsZV9ub3RvcGVyKHNjaCwgbHBtKTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTY5LVx0ZGVmYXVsdDpcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTE3Mi19XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjE3MzpFWFBPUlRfU1lNQk9MX0dQTChjaW9fc3RhcnRfa2V5KTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTc0LVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz0xNzU9aW50XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjE3NjpjaW9fc3RhcnQgKHN0cnVjdCBzdWJjaGFubmVsICpzY2gsIHN0cnVjdCBjY3cxICpjcGEsIF9fdTggbHBtKVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xNzcte1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoxNzg6XHRyZXR1cm4gY2lvX3N0YXJ0X2tleShzY2gsIGNwYSwgbHBtLCBQQUdFX0RFRkFVTFRfS0VZKTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTc5LX1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTgwOkVYUE9SVF9TWU1CT0xfR1BMKGNpb19zdGFydCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTE4MS1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jPTE4NT1pbnRcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTg2OmNpb19yZXN1bWUgKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTE4Ny17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yMTItfVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyMTM6RVhQT1JUX1NZTUJPTF9HUEwoY2lvX3Jlc3VtZSk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTIxNC1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jPTIxOD1pbnRcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MjE5OmNpb19oYWx0KHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTIyMC17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNDYtfVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyNDc6RVhQT1JUX1NZTUJPTF9HUEwoY2lvX2hhbHQpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNDgtXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz0yNTI9aW50XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjI1MzpjaW9fY2xlYXIoc3RydWN0IHN1YmNoYW5uZWwgKnNjaClcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMjU0LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI3Ny19XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjI3ODpFWFBPUlRfU1lNQk9MX0dQTChjaW9fY2xlYXIpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNzktXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI4MC0vKlxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyODE6ICogRnVuY3Rpb246IGNpb19jYW5jZWxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMjgyLSAqIElzc3VlcyBhIFwmIzM0O0NhbmNlbCBTdWJjaGFubmVsXCYjMzQ7IG9uIHRoZSBzcGVjaWZpZWQgc3ViY2hhbm5lbFxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM9Mjg3PWludFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyODg6Y2lvX2NhbmNlbCAoc3RydWN0IHN1YmNoYW5uZWwgKnNjaClcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMjg5LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMwNC1cdFx0LyogVXBkYXRlIGluZm9ybWF0aW9uIGluIHNjc3cuICovXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMwNTpcdFx0aWYgKGNpb191cGRhdGVfc2NoaWIoc2NoKSlcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzA2LVx0XHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzE1LX1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzE2OkVYUE9SVF9TWU1CT0xfR1BMKGNpb19jYW5jZWwpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMTctXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMxOC0vKipcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzE5OiAqIGNpb19jYW5jZWxfaGFsdF9jbGVhciAtIENhbmNlbCBydW5uaW5nIEkvTyBieSBwZXJmb3JtaW5nIGNhbmNlbCwgaGFsdFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMjAtICogYW5kIGNsZWFyIG9yZGluYWxseSBpZiBzdWJjaGFubmVsIGlzIHZhbGlkLlxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzI0LSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCByZXBlYXRlZGx5IHNpbmNlIGhhbHQvY2xlYXIgYXJlIGFzeW5jaHJvbm91c1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozMjU6ICogb3BlcmF0aW9ucy4gV2UgZG8gb25lIHRyeSB3aXRoIGNpb19jYW5jZWwsIHRocmVlIHRyaWVzIHdpdGggY2lvX2hhbHQsXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMyNjogKiAyNTUgdHJpZXMgd2l0aCBjaW9fY2xlYXIuIFRoZSBjYWxsZXIgc2hvdWxkIGluaXRpYWxpemUgQGlyZXRyeSB3aXRoXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMyNy0gKiB0aGUgdmFsdWUgMjU1IGZvciBpdHMgZmlyc3QgY2FsbCB0byB0aGlzLCBhbmQga2VlcCB1c2luZyB0aGUgc2FtZVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzMzLSAqL1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozMzQ6aW50IGNpb19jYW5jZWxfaGFsdF9jbGVhcihzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLCBpbnQgKmlyZXRyeSlcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzM1LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMzNy1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzM4Olx0aWYgKGNpb191cGRhdGVfc2NoaWIoc2NoKSlcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzM5LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM0Ni1cdFx0aWYgKCFzY3N3X2lzX3RtKFx1MDAyNnNjaC1cdTAwM2VzY2hpYi5zY3N3KSkge1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozNDc6XHRcdFx0cmV0ID0gY2lvX2NhbmNlbChzY2gpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zNDgtXHRcdFx0aWYgKHJldCAhPSAtRUlOVkFMKVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzYwLVx0XHRcdCppcmV0cnkgLT0gMTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzYxOlx0XHRcdHJldCA9IGNpb19oYWx0KHNjaCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM2Mi1cdFx0XHRpZiAocmV0ICE9IC1FQlVTWSlcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM3MC1cdFx0KmlyZXRyeSAtPSAxO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozNzE6XHRcdHJldCA9IGNpb19jbGVhcihzY2gpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zNzItXHRcdHJldHVybiAocmV0ID09IDApID8gLUVCVVNZIDogcmV0O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzc2LX1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Mzc3OkVYUE9SVF9TWU1CT0xfR1BMKGNpb19jYW5jZWxfaGFsdF9jbGVhcik7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM3OC1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Mzc5OnN0YXRpYyB2b2lkIGNpb19hcHBseV9jb25maWcoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgc3RydWN0IHNjaGliICpzY2hpYilcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzgwLXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM5Mi1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzkzOnN0YXRpYyBpbnQgY2lvX2NoZWNrX2NvbmZpZyhzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLCBzdHJ1Y3Qgc2NoaWIgKnNjaGliKVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zOTQte1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDA2LS8qXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQwNzogKiBjaW9fY29tbWl0X2NvbmZpZyAtIGFwcGx5IGNvbmZpZ3VyYXRpb24gdG8gdGhlIHN1YmNoYW5uZWxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDA4LSAqL1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0MDk6aW50IGNpb19jb21taXRfY29uZmlnKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQxMC17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00MTktXHRcdC8qIGNvcHkgZGVzaXJlZCBjaGFuZ2VzIHRvIGxvY2FsIHNjaGliICovXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQyMDpcdFx0Y2lvX2FwcGx5X2NvbmZpZyhzY2gsIFx1MDAyNnNjaGliKTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDIxLVx0XHRjY29kZSA9IG1zY2goc2NoLVx1MDAzZXNjaGlkLCBcdTAwMjZzY2hpYik7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00MjgtXHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDI5Olx0XHRcdGlmIChjaW9fY2hlY2tfY29uZmlnKHNjaCwgXHUwMDI2c2NoaWIpKSB7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQzMC1cdFx0XHRcdC8qIGNvbW1pdCBjaGFuZ2VzIGZyb20gbG9jYWwgc2NoaWIgKi9cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ1MC19XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ1MTpFWFBPUlRfU1lNQk9MX0dQTChjaW9fY29tbWl0X2NvbmZpZyk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ1Mi1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDUzLS8qKlxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0NTQ6ICogY2lvX3VwZGF0ZV9zY2hpYiAtIFBlcmZvcm0gc3RzY2ggYW5kIHVwZGF0ZSBzY2hpYiBpZiBzdWJjaGFubmVsIGlzIHZhbGlkLlxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NTUtICogQHNjaDogc3ViY2hhbm5lbCBvbiB3aGljaCB0byBwZXJmb3JtIHN0c2NoXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NTctICovXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ1ODppbnQgY2lvX3VwZGF0ZV9zY2hpYihzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NTkte1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDcxLX1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDcyOkVYUE9SVF9TWU1CT0xfR1BMKGNpb191cGRhdGVfc2NoaWIpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NzMtXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ3NC0vKipcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDc1OiAqIGNpb19lbmFibGVfc3ViY2hhbm5lbCAtIGVuYWJsZSBhIHN1YmNoYW5uZWwuXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ3Ni0gKiBAc2NoOiBzdWJjaGFubmVsIHRvIGJlIGVuYWJsZWRcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ3OC0gKi9cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDc5OmludCBjaW9fZW5hYmxlX3N1YmNoYW5uZWwoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgdTMyIGludHBhcm0pXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ4MC17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00ODctXHRcdHJldHVybiAtRUlOVkFMO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0ODg6XHRpZiAoY2lvX3VwZGF0ZV9zY2hpYihzY2gpKVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00ODktXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDk0LVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0OTU6XHRyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00OTYtXHRpZiAocmV0ID09IC1FSU8pIHtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTUwMS1cdFx0c2NoLVx1MDAzZWNvbmZpZy5jc2Vuc2UgPSAwO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo1MDI6XHRcdHJldCA9IGNpb19jb21taXRfY29uZmlnKHNjaCk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1NTYKCQkJCQkJCW91dHB1dDogMTEwCgkJCQkJCQl0aG91Z2h0czogNjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29udGV4dCBmb3IgYGRyaXZlcnMvczM5MGAuIEEgcXVpY2sgcGVlayBhdCBgZHJpdmVycy9NYWtlZmlsZWAgY29uZmlybXMgdGhlIGV4cGVjdGVkIGRlcGVuZGVuY3k6IGBvYmotJChDT05GSUdfUzM5MCkgJiM0Mzs9IHMzOTAvYC4gQW5kIGBhcmNoL3MzOTAvS2NvbmZpZ2AgZGVmaW5lcyBgQ09ORklHX1MzOTBgLiBPbiBteSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBhbWQ2NCAoeDg2XzY0KSwgYENPTkZJR19TMzkwYCBpcyB1bmVxdWl2b2NhbGx5IGZhbHNlLCBwcmV2ZW50aW5nIHRoZSBidWlsZCBvZiBgZHJpdmVycy9zMzkwL2AuIE1vcmVvdmVyLCB0aGUgaGVhZGVyIGZpbGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oYCBtYWtlcyBpdCBjbGVhciB0aGlzIGlzIHMzOTAtc3BlY2lmaWMgY29kZS4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBSRUFDSEFCSUxJVFkgSVMgUEFSQU1PVU5UOyBtb2RpZmllZCBjb2RlIG11c3QgYmUgcmVhY2hhYmxlLiBUaGUgbmVnYXRpdmUgY3JpdGVyaW9uIHRlbGxzIG1lIHRoYXQgY29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgbXVzdCAqbm90KiBiZSBmdXp6ZWQuIE15IHRhcmdldCBpcyBhbWQ2NC4KCkxvb2tpbmcgYXQgdGhlIGxpc3Qgb2YgYWxsIG1vZGlmaWVkIGZpbGVzOgotIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaGAKLSBgZHJpdmVycy9zMzkwL2Npby9jaHNjLmNgCi0gYGRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY2AKLSBgZHJpdmVycy9zMzkwL2Npby9jbWYuY2AKLSBgZHJpdmVycy9zMzkwL2Npby9xZGlvLmhgCi0gYGRyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNgCi0gYGRyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jYAotIGBkcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jYAotIGBkcml2ZXJzL3MzOTAvY2lvL3NjbS5jYAoKRXZlcnkgc2luZ2xlIGZpbGUgcmVzaWRlcyBpbiBlaXRoZXIgYGFyY2gvczM5MGAgb3IgYGRyaXZlcnMvczM5MGAuIFRoaXMgc2NyZWFtcyAmIzM0O3MzOTAgYXJjaGl0ZWN0dXJlIG9ubHkuJiMzNDsgVGhlc2UgZmlsZXMgYXJlICpub3QqIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiBhbWQ2NC4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzICpub3QqIHdhcnJhbnQgZnV6emluZy4gVGhlIG91dGNvbWUgaXM6IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAsIGBFbmFibGVDb25maWdzID0gW11gLCBhbmQgYEZvY3VzU3ltYm9scyA9IFtdYC4gTXkgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgY29kZSBzcGVjaWZpYyB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGFuZCBpcyB0aGVyZWZvcmUgdW5yZWFjaGFibGUgb24gYW1kNjQuCgpBcyBhIGZpbmFsIHNhbml0eSBjaGVjaywgYSBxdWljayBzd2VlcCBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGF0ICpvbmx5KiBzMzkwLXNwZWNpZmljIGZpbGVzIGFyZSBtb2RpZmllZCwgYW5kIG5vIGdlbmVyaWMgaGVhZGVycyBvciBhcmNoLWFnbm9zdGljIGZpbGVzIHdlcmUgdG91Y2hlZC4gVGhlIGluaXRpYWwgYW5hbHlzaXMgaG9sZHMuIFRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIGNhbiBub3cgYmUgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHMzOTAtc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gaGVscGVycyBhbmQgdGhlIHMzOTAgQ2hhbm5lbCBJL08gKENJTykgc3Vic3lzdGVtIChhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBhbmQgZHJpdmVycy9zMzkwL2Npby8qKS4gVGhlc2UgZmlsZXMgYXJlIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgYW5kIGFyZSBub3QgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzMzkwLXNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9uIGhlbHBlcnMgYW5kIHRoZSBzMzkwIENoYW5uZWwgSS9PIChDSU8pIHN1YnN5c3RlbSAoYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmggYW5kIGRyaXZlcnMvczM5MC9jaW8vKikuIFRoZXNlIGZpbGVzIGFyZSBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCBhcmUgbm90IGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjM0LjA3MjkwMTkzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzE1ODMyNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgczM5MC1zcGVjaWZpYyBtZW1vcnkgYWxsb2NhdGlvbiBoZWxwZXJzIGFuZCB0aGUgczM5MCBDaGFubmVsIEkvTyAoQ0lPKSBzdWJzeXN0ZW0gKGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oIGFuZCBkcml2ZXJzL3MzOTAvY2lvLyopLiBUaGVzZSBmaWxlcyBhcmUgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgYXJlIG5vdCBjb21waWxlZCBvciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjM0LjA3MjkxMTA0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDE5MTE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY0NDBmMWUwYjljYmVhMDYzZTljZmM2MmM4N2UxNjllYzIyZjc4MWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDoxMjozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oXFxuaW5kZXggMDZlMWVjMmFmZDVhZi4uMjQ4ODI5ZDQ2MWJjZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oXFxuQEAgLTE0Nyw3ICsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxcbiBcXHRcXHRcXHRpYi1cXHUwMDNlZGF0YVtpXSA9IGRtYTY0X2FkZChpYi1cXHUwMDNlZGF0YVtpIC0gMV0sIElEQV9CTE9DS19TSVpFKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0dmFkZHIgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgcGFnZV9vcmRlcik7XFxuK1xcdFxcdHZhZGRyID0ga21hbGxvYyhQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgcGFnZV9vcmRlciwgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdGlmICghdmFkZHIpXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcdFxcdGliLVxcdTAwM2VkYXRhW2ldID0gdmlydF90b19kbWE2NCh2YWRkcik7XFxuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxcbiBcXHR3aGlsZSAoaSBcXHUwMDNlPSBucl9jaHVua3MpIHtcXG4gXFx0XFx0aSAtPSBucl9jaHVua3M7XFxuIFxcdFxcdHZhZGRyID0gZG1hNjRfdG9fdmlydChpYi1cXHUwMDNlZGF0YVtpXSk7XFxuLVxcdFxcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGliLVxcdTAwM2VwYWdlX29yZGVyKTtcXG4rXFx0XFx0a2ZyZWUodmFkZHIpO1xcbiBcXHR9XFxuIFxcdGtmcmVlKGliKTtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuQEAgLTE3NSw3ICsxNzUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRhbF9idWZmZXJfZnJlZShzdHJ1Y3QgaWRhbF9idWZmZXIgKmliKVxcbiBcXHRucl9jaHVua3MgPSAoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIGliLVxcdTAwM2VwYWdlX29yZGVyKSBcXHUwMDNlXFx1MDAzZSBJREFfU0laRV9TSElGVDtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3B0cnM7IGkgKz0gbnJfY2h1bmtzKSB7XFxuIFxcdFxcdHZhZGRyID0gZG1hNjRfdG9fdmlydChpYi1cXHUwMDNlZGF0YVtpXSk7XFxuLVxcdFxcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGliLVxcdTAwM2VwYWdlX29yZGVyKTtcXG4rXFx0XFx0a2ZyZWUodmFkZHIpO1xcbiBcXHR9XFxuIFxcdGtmcmVlKGliKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXFxuaW5kZXggOTY4OWY3MjJjODYzYy4uZDk4ZjYyOWU4OTI5NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuY1xcbisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXFxuQEAgLTkzMSwxMiArOTMxLDEyIEBAIHN0YXRpYyBpbnQgY3ViX2FsbG9jKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzKVxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDU1NfTlVNX0NVQl9QQUdFUzsgaSsrKSB7XFxuLVxcdFxcdGNzcy1cXHUwMDNlY3ViW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbitcXHRcXHRjc3MtXFx1MDAzZWN1YltpXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdFxcdGlmICghY3NzLVxcdTAwM2VjdWJbaV0pXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDU1NfTlVNX0VDVUJfUEFHRVM7IGkrKykge1xcbi1cXHRcXHRjc3MtXFx1MDAzZWVjdWJbaV0gPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcXG4rXFx0XFx0Y3NzLVxcdTAwM2VlY3ViW2ldID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRpZiAoIWNzcy1cXHUwMDNlZWN1YltpXSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG5AQCAtOTQ5LDExICs5NDksMTEgQEAgc3RhdGljIHZvaWQgY3ViX2ZyZWUoc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3MpXFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENTU19OVU1fQ1VCX1BBR0VTOyBpKyspIHtcXG4tXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNzcy1cXHUwMDNlY3ViW2ldKTtcXG4rXFx0XFx0a2ZyZWUoY3NzLVxcdTAwM2VjdWJbaV0pO1xcbiBcXHRcXHRjc3MtXFx1MDAzZWN1YltpXSA9IE5VTEw7XFxuIFxcdH1cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENTU19OVU1fRUNVQl9QQUdFUzsgaSsrKSB7XFxuLVxcdFxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljc3MtXFx1MDAzZWVjdWJbaV0pO1xcbitcXHRcXHRrZnJlZShjc3MtXFx1MDAzZWVjdWJbaV0pO1xcbiBcXHRcXHRjc3MtXFx1MDAzZWVjdWJbaV0gPSBOVUxMO1xcbiBcXHR9XFxuIH1cXG5AQCAtMTE0Miw4ICsxMTQyLDggQEAgaW50IF9faW5pdCBjaHNjX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0c2VpX3BhZ2UgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuLVxcdGNoc2NfcGFnZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4rXFx0c2VpX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbitcXHRjaHNjX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbiBcXHRpZiAoIXNlaV9wYWdlIHx8ICFjaHNjX3BhZ2UpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbkBAIC0xMTUzLDE2ICsxMTUzLDE2IEBAIGludCBfX2luaXQgY2hzY19pbml0KHZvaWQpXFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0cmV0dXJuIHJldDtcXG4gb3V0X2VycjpcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfcGFnZSk7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWlfcGFnZSk7XFxuK1xcdGtmcmVlKGNoc2NfcGFnZSk7XFxuK1xcdGtmcmVlKHNlaV9wYWdlKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gdm9pZCBfX2luaXQgY2hzY19pbml0X2NsZWFudXAodm9pZClcXG4ge1xcbiBcXHRjcndfdW5yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1NTKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfcGFnZSk7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWlfcGFnZSk7XFxuK1xcdGtmcmVlKGNoc2NfcGFnZSk7XFxuK1xcdGtmcmVlKHNlaV9wYWdlKTtcXG4gfVxcbiBcXG4gaW50IF9fY2hzY19lbmFibGVfZmFjaWxpdHkoc3RydWN0IGNoc2Nfc2RhX2FyZWEgKnNkYV9hcmVhLCBpbnQgb3BlcmF0aW9uX2NvZGUpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY1xcbmluZGV4IGI2Y2I4YmI4YmNjNGIuLjIyNWFhYWM3ZGQzMDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jXFxuQEAgLTE1LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pc2NkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbF9zdGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2Noc2MuaFxcdTAwM2VcXG5AQCAtMjkyLDcgKzI5Myw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9zdGFydCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxcbiBcXHRpZiAoIWNzc19nZW5lcmFsX2NoYXJhY3RlcmlzdGljcy5keW5pbylcXG4gXFx0XFx0LyogSXQgbWFrZXMgbm8gc2Vuc2UgdG8gdHJ5LiAqL1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLVxcdGNoc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcXG4rXFx0Y2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFjaHNjX2FyZWEpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRyZXF1ZXN0ID0ga3phbGxvY19vYmooKnJlcXVlc3QpO1xcbkBAIC0zMjEsNyArMzIyLDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX3N0YXJ0KHZvaWQgX191c2VyICp1c2VyX2FyZWEpXFxuIFxcdHNucHJpbnRmKGRiZiwgc2l6ZW9mKGRiZiksIFxcXCJyZXQ6JWRcXFwiLCByZXQpO1xcbiBcXHRDSFNDX0xPRygwLCBkYmYpO1xcbiBcXHRrZnJlZShyZXF1ZXN0KTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfYXJlYSk7XFxuK1xcdGtmcmVlKGNoc2NfYXJlYSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTM0MCw3ICszNDEsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfb25fY2xvc2Vfc2V0KHZvaWQgX191c2VyICp1c2VyX2FyZWEpXFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbi1cXHRvbl9jbG9zZV9jaHNjX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7XFxuK1xcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghb25fY2xvc2VfY2hzY19hcmVhKSB7XFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfcmVxdWVzdDtcXG5AQCAtMzUzLDcgKzM1NCw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9zZXQodm9pZCBfX3VzZXIgKnVzZXJfYXJlYSlcXG4gXFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gb3V0X2ZyZWVfY2hzYzpcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuK1xcdGtmcmVlKG9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuIFxcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XFxuIG91dF9mcmVlX3JlcXVlc3Q6XFxuIFxcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xcbkBAIC0zNzUsNyArMzc2LDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3JlbW92ZSh2b2lkKVxcbiBcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuK1xcdGtmcmVlKG9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuIFxcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XFxuIFxcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xcbiBcXHRvbl9jbG9zZV9yZXF1ZXN0ID0gTlVMTDtcXG5AQCAtMzg5LDM5ICszOTAsMjkgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3JlbW92ZSh2b2lkKVxcbiBcXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX3N0YXJ0X3N5bmModm9pZCBfX3VzZXIgKnVzZXJfYXJlYSlcXG4ge1xcbi1cXHRzdHJ1Y3QgY2hzY19zeW5jX2FyZWEgKmNoc2NfYXJlYTtcXG4tXFx0aW50IHJldCwgY2NvZGU7XFxuK1xcdHN0cnVjdCBjaHNjX3N5bmNfYXJlYSAqY2hzY19hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbitcXHRpbnQgY2NvZGU7XFxuIFxcbi1cXHRjaHNjX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuK1xcdGNoc2NfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghY2hzY19hcmVhKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0aWYgKGNvcHlfZnJvbV91c2VyKGNoc2NfYXJlYSwgdXNlcl9hcmVhLCBQQUdFX1NJWkUpKSB7XFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4tXFx0aWYgKGNoc2NfYXJlYS1cXHUwMDNlaGVhZGVyLmNvZGUgXFx1MDAyNiAweDQwMDApIHtcXG4tXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY2hzY19hcmVhLCB1c2VyX2FyZWEsIFBBR0VfU0laRSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRpZiAoY2hzY19hcmVhLVxcdTAwM2VoZWFkZXIuY29kZSBcXHUwMDI2IDB4NDAwMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdGNoc2NfbG9nX2NvbW1hbmQoY2hzY19hcmVhKTtcXG4gXFx0Y2NvZGUgPSBjaHNjKGNoc2NfYXJlYSk7XFxuLVxcdGlmIChjY29kZSAhPSAwKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKGNjb2RlICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRpZiAoY29weV90b191c2VyKHVzZXJfYXJlYSwgY2hzY19hcmVhLCBQQUdFX1NJWkUpKVxcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldCA9IDA7XFxuLW91dF9mcmVlOlxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19hcmVhKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jaGFubmVsX3BhdGgodm9pZCBfX3VzZXIgKnVzZXJfY2QpXFxuIHtcXG4tXFx0c3RydWN0IGNoc2NfY2hwX2NkICpjZDtcXG4tXFx0aW50IHJldCwgY2NvZGU7XFxuK1xcdHN0cnVjdCBjaHNjX2NocF9jZCAqY2QgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuK1xcdGludCBjY29kZTtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XFxuIFxcdFxcdHUzMiA6IDI7XFxuQEAgLTQzNiwyMCArNDI3LDE2IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2NoYW5uZWxfcGF0aCh2b2lkIF9fdXNlciAqdXNlcl9jZClcXG4gXFx0XFx0dTMyIDogMzI7XFxuIFxcdFxcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcXG4gXFx0XFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XFxuLVxcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3BjZF9hcmVhO1xcbitcXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NwY2RfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFxuLVxcdHNjcGNkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuK1xcdHNjcGNkX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbiBcXHRpZiAoIXNjcGNkX2FyZWEpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRjZCA9IGt6YWxsb2Nfb2JqKCpjZCk7XFxuLVxcdGlmICghY2QpIHtcXG4tXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbi1cXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkge1xcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuK1xcdGlmICghY2QpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHNjcGNkX2FyZWEtXFx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDEwO1xcbiBcXHRzY3BjZF9hcmVhLVxcdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMjg7XFxuIFxcdHNjcGNkX2FyZWEtXFx1MDAzZW0gPSBjZC1cXHUwMDNlbTtcXG5AQCAtNDU5LDMxICs0NDYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY2hhbm5lbF9wYXRoKHZvaWQgX191c2VyICp1c2VyX2NkKVxcbiBcXHRzY3BjZF9hcmVhLVxcdTAwM2VsYXN0X2NocGlkID0gY2QtXFx1MDAzZWNocGlkLmlkO1xcbiBcXG4gXFx0Y2NvZGUgPSBjaHNjKHNjcGNkX2FyZWEpO1xcbi1cXHRpZiAoY2NvZGUgIT0gMCkge1xcbi1cXHRcXHRyZXQgPSAtRUlPO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuK1xcdGlmIChjY29kZSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0aWYgKHNjcGNkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuIFxcdFxcdENIU0NfTVNHKDAsIFxcXCJzY3BjZDogcmVzcG9uc2UgY29kZT0leFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0IHNjcGNkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmNvZGUpO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0fVxcbiBcXHRtZW1jcHkoXFx1MDAyNmNkLVxcdTAwM2VjcGNiLCBcXHUwMDI2c2NwY2RfYXJlYS1cXHUwMDNlcmVzcG9uc2UsIHNjcGNkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XFxuIFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jZCwgY2QsIHNpemVvZigqY2QpKSlcXG4tXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyZXQgPSAwO1xcbi1vdXRfZnJlZTpcXG4tXFx0a2ZyZWUoY2QpO1xcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NwY2RfYXJlYSk7XFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpXFxuIHtcXG4tXFx0c3RydWN0IGNoc2NfY3VfY2QgKmNkO1xcbi1cXHRpbnQgcmV0LCBjY29kZTtcXG4rXFx0c3RydWN0IGNoc2NfY3VfY2QgKmNkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbitcXHRpbnQgY2NvZGU7XFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdHN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0O1xcbiBcXHRcXHR1MzIgOiAyO1xcbkBAIC00OTgsMjAgKzQ3NywxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jdSh2b2lkIF9fdXNlciAqdXNlcl9jZClcXG4gXFx0XFx0dTMyIDogMzI7XFxuIFxcdFxcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcXG4gXFx0XFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XFxuLVxcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3VjZF9hcmVhO1xcbitcXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2N1Y2RfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFxuLVxcdHNjdWNkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuK1xcdHNjdWNkX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbiBcXHRpZiAoIXNjdWNkX2FyZWEpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRjZCA9IGt6YWxsb2Nfb2JqKCpjZCk7XFxuLVxcdGlmICghY2QpIHtcXG4tXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbi1cXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkge1xcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuK1xcdGlmICghY2QpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHNjdWNkX2FyZWEtXFx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDEwO1xcbiBcXHRzY3VjZF9hcmVhLVxcdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMjY7XFxuIFxcdHNjdWNkX2FyZWEtXFx1MDAzZW0gPSBjZC1cXHUwMDNlbTtcXG5AQCAtNTIxLDMxICs0OTYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpXFxuIFxcdHNjdWNkX2FyZWEtXFx1MDAzZWxhc3RfY3VuID0gY2QtXFx1MDAzZWN1bjtcXG4gXFxuIFxcdGNjb2RlID0gY2hzYyhzY3VjZF9hcmVhKTtcXG4tXFx0aWYgKGNjb2RlICE9IDApIHtcXG4tXFx0XFx0cmV0ID0gLUVJTztcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbitcXHRpZiAoY2NvZGUgIT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdGlmIChzY3VjZF9hcmVhLVxcdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xcbi1cXHRcXHRyZXQgPSAtRUlPO1xcbiBcXHRcXHRDSFNDX01TRygwLCBcXFwic2N1Y2Q6IHJlc3BvbnNlIGNvZGU9JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBzY3VjZF9hcmVhLVxcdTAwM2VyZXNwb25zZS5jb2RlKTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4gXFx0bWVtY3B5KFxcdTAwMjZjZC1cXHUwMDNlY3VjYiwgXFx1MDAyNnNjdWNkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLCBzY3VjZF9hcmVhLVxcdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xcbiBcXHRpZiAoY29weV90b191c2VyKHVzZXJfY2QsIGNkLCBzaXplb2YoKmNkKSkpXFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cmV0ID0gMDtcXG4tb3V0X2ZyZWU6XFxuLVxcdGtmcmVlKGNkKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjdWNkX2FyZWEpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX3NjaF9jdSh2b2lkIF9fdXNlciAqdXNlcl9jdWQpXFxuIHtcXG4tXFx0c3RydWN0IGNoc2Nfc2NoX2N1ZCAqY3VkO1xcbi1cXHRpbnQgcmV0LCBjY29kZTtcXG4rXFx0c3RydWN0IGNoc2Nfc2NoX2N1ZCAqY3VkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbitcXHRpbnQgY2NvZGU7XFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdHN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0O1xcbiBcXHRcXHR1MzIgOiAyO1xcbkBAIC01NjEsMjAgKzUyOCwxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19zY2hfY3Uodm9pZCBfX3VzZXIgKnVzZXJfY3VkKVxcbiBcXHRcXHR1MzIgOiAzMjtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xcbiBcXHRcXHR1OCBkYXRhW1BBR0VfU0laRSAtIDIwXTtcXG4tXFx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNzY3VkX2FyZWE7XFxuK1xcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzc2N1ZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbiBcXG4tXFx0c3NjdWRfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4rXFx0c3NjdWRfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghc3NjdWRfYXJlYSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGN1ZCA9IGt6YWxsb2Nfb2JqKCpjdWQpO1xcbi1cXHRpZiAoIWN1ZCkge1xcbi1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuLVxcdGlmIChjb3B5X2Zyb21fdXNlcihjdWQsIHVzZXJfY3VkLCBzaXplb2YoKmN1ZCkpKSB7XFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKCFjdWQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY3VkLCB1c2VyX2N1ZCwgc2l6ZW9mKCpjdWQpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHNzY3VkX2FyZWEtXFx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDEwO1xcbiBcXHRzc2N1ZF9hcmVhLVxcdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMDY7XFxuIFxcdHNzY3VkX2FyZWEtXFx1MDAzZW0gPSBjdWQtXFx1MDAzZXNjaGlkLm07XFxuQEAgLTU4NSwzMSArNTQ4LDIzIEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX3NjaF9jdSh2b2lkIF9fdXNlciAqdXNlcl9jdWQpXFxuIFxcdHNzY3VkX2FyZWEtXFx1MDAzZWxhc3Rfc2NoID0gY3VkLVxcdTAwM2VzY2hpZC5zY2hfbm87XFxuIFxcbiBcXHRjY29kZSA9IGNoc2Moc3NjdWRfYXJlYSk7XFxuLVxcdGlmIChjY29kZSAhPSAwKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKGNjb2RlICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRpZiAoc3NjdWRfYXJlYS1cXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcXG4tXFx0XFx0cmV0ID0gLUVJTztcXG4gXFx0XFx0Q0hTQ19NU0coMCwgXFxcInNzY3VkOiByZXNwb25zZSBjb2RlPSV4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgc3NjdWRfYXJlYS1cXHUwMDNlcmVzcG9uc2UuY29kZSk7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcdG1lbWNweShcXHUwMDI2Y3VkLVxcdTAwM2VzY3ViLCBcXHUwMDI2c3NjdWRfYXJlYS1cXHUwMDNlcmVzcG9uc2UsIHNzY3VkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XFxuIFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jdWQsIGN1ZCwgc2l6ZW9mKCpjdWQpKSlcXG4tXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyZXQgPSAwO1xcbi1vdXRfZnJlZTpcXG4tXFx0a2ZyZWUoY3VkKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNzY3VkX2FyZWEpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jb25mX2luZm8odm9pZCBfX3VzZXIgKnVzZXJfY2kpXFxuIHtcXG4tXFx0c3RydWN0IGNoc2NfY29uZl9pbmZvICpjaTtcXG4tXFx0aW50IHJldCwgY2NvZGU7XFxuK1xcdHN0cnVjdCBjaHNjX2NvbmZfaW5mbyAqY2kgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuK1xcdGludCBjY29kZTtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XFxuIFxcdFxcdHUzMiA6IDI7XFxuQEAgLTYyMywyMCArNTc4LDE2IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jb25mX2luZm8odm9pZCBfX3VzZXIgKnVzZXJfY2kpXFxuIFxcdFxcdHU2NCA6IDY0O1xcbiBcXHRcXHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVzcG9uc2U7XFxuIFxcdFxcdHU4IGRhdGFbUEFHRV9TSVpFIC0gMjBdO1xcbi1cXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NpX2FyZWE7XFxuK1xcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY2lfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFxuLVxcdHNjaV9hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbitcXHRzY2lfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghc2NpX2FyZWEpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRjaSA9IGt6YWxsb2Nfb2JqKCpjaSk7XFxuLVxcdGlmICghY2kpIHtcXG4tXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbi1cXHRpZiAoY29weV9mcm9tX3VzZXIoY2ksIHVzZXJfY2ksIHNpemVvZigqY2kpKSkge1xcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuK1xcdGlmICghY2kpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY2ksIHVzZXJfY2ksIHNpemVvZigqY2kpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHNjaV9hcmVhLVxcdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAxMDtcXG4gXFx0c2NpX2FyZWEtXFx1MDAzZXJlcXVlc3QuY29kZSA9IDB4MDAxMjtcXG4gXFx0c2NpX2FyZWEtXFx1MDAzZW0gPSBjaS1cXHUwMDNlaWQubTtcXG5AQCAtNjQ1LDMxICs1OTYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcXG4gXFx0c2NpX2FyZWEtXFx1MDAzZXNzaWQgPSBjaS1cXHUwMDNlaWQuc3NpZDtcXG4gXFxuIFxcdGNjb2RlID0gY2hzYyhzY2lfYXJlYSk7XFxuLVxcdGlmIChjY29kZSAhPSAwKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKGNjb2RlICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRpZiAoc2NpX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuIFxcdFxcdENIU0NfTVNHKDAsIFxcXCJzY2k6IHJlc3BvbnNlIGNvZGU9JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBzY2lfYXJlYS1cXHUwMDNlcmVzcG9uc2UuY29kZSk7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcdG1lbWNweShcXHUwMDI2Y2ktXFx1MDAzZXNjaWQsIFxcdTAwMjZzY2lfYXJlYS1cXHUwMDNlcmVzcG9uc2UsIHNjaV9hcmVhLVxcdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xcbiBcXHRpZiAoY29weV90b191c2VyKHVzZXJfY2ksIGNpLCBzaXplb2YoKmNpKSkpXFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cmV0ID0gMDtcXG4tb3V0X2ZyZWU6XFxuLVxcdGtmcmVlKGNpKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjaV9hcmVhKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKVxcbiB7XFxuLVxcdHN0cnVjdCBjaHNjX2NvbXBfbGlzdCAqY2NsO1xcbi1cXHRpbnQgcmV0LCBjY29kZTtcXG4rXFx0c3RydWN0IGNoc2NfY29tcF9saXN0ICpjY2wgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuK1xcdGludCBjY29kZTtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XFxuIFxcdFxcdHUzMiBjdHlwZSA6IDg7XFxuQEAgLTY4MSw3ICs2MjQsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKVxcbiBcXHRcXHR1NjQgOiA2NDtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xcbiBcXHRcXHR1OCBkYXRhW1BBR0VfU0laRSAtIDM2XTtcXG4tXFx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjY2xfYXJlYTtcXG4rXFx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjY2xfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0dTMyIG0gOiAxO1xcbiBcXHRcXHR1MzIgOiAzMTtcXG5AQCAtNjk2LDE4ICs2MzksMTQgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcXG4gXFx0XFx0dTMyIHJlcztcXG4gXFx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKmNzc2lkc19wYXJtO1xcbiBcXG4tXFx0c2NjbF9hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbitcXHRzY2NsX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbiBcXHRpZiAoIXNjY2xfYXJlYSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGNjbCA9IGt6YWxsb2Nfb2JqKCpjY2wpO1xcbi1cXHRpZiAoIWNjbCkge1xcbi1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuLVxcdGlmIChjb3B5X2Zyb21fdXNlcihjY2wsIHVzZXJfY2NsLCBzaXplb2YoKmNjbCkpKSB7XFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKCFjY2wpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY2NsLCB1c2VyX2NjbCwgc2l6ZW9mKCpjY2wpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHNjY2xfYXJlYS1cXHUwMDNlcmVxdWVzdC5sZW5ndGggPSAweDAwMjA7XFxuIFxcdHNjY2xfYXJlYS1cXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDMwO1xcbiBcXHRzY2NsX2FyZWEtXFx1MDAzZWZtdCA9IGNjbC1cXHUwMDNlcmVxLmZtdDtcXG5AQCAtNzI4LDYxICs2NjcsNDYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFx0Y2NvZGUgPSBjaHNjKHNjY2xfYXJlYSk7XFxuLVxcdGlmIChjY29kZSAhPSAwKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKGNjb2RlICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRpZiAoc2NjbF9hcmVhLVxcdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xcbi1cXHRcXHRyZXQgPSAtRUlPO1xcbiBcXHRcXHRDSFNDX01TRygwLCBcXFwic2NjbDogcmVzcG9uc2UgY29kZT0leFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0IHNjY2xfYXJlYS1cXHUwMDNlcmVzcG9uc2UuY29kZSk7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcdG1lbWNweShcXHUwMDI2Y2NsLVxcdTAwM2VzY2NsLCBcXHUwMDI2c2NjbF9hcmVhLVxcdTAwM2VyZXNwb25zZSwgc2NjbF9hcmVhLVxcdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xcbiBcXHRpZiAoY29weV90b191c2VyKHVzZXJfY2NsLCBjY2wsIHNpemVvZigqY2NsKSkpXFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cmV0ID0gMDtcXG4tb3V0X2ZyZWU6XFxuLVxcdGtmcmVlKGNjbCk7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY2NsX2FyZWEpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jaHBkKHZvaWQgX191c2VyICp1c2VyX2NocGQpXFxuIHtcXG4tXFx0c3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhO1xcbi1cXHRzdHJ1Y3QgY2hzY19jcGRfaW5mbyAqY2hwZDtcXG4rXFx0c3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgY2hzY19jcGRfaW5mbyAqY2hwZCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGNocGQgPSBremFsbG9jX29iaigqY2hwZCk7XFxuLVxcdHNjcGRfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4tXFx0aWYgKCFzY3BkX2FyZWEgfHwgIWNocGQpIHtcXG4tXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbi1cXHRpZiAoY29weV9mcm9tX3VzZXIoY2hwZCwgdXNlcl9jaHBkLCBzaXplb2YoKmNocGQpKSkge1xcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuK1xcdHNjcGRfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuK1xcdGlmICghc2NwZF9hcmVhIHx8ICFjaHBkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKGNocGQsIHVzZXJfY2hwZCwgc2l6ZW9mKCpjaHBkKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRyZXQgPSBjaHNjX2RldGVybWluZV9jaGFubmVsX3BhdGhfZGVzYyhjaHBkLVxcdTAwM2VjaHBpZCwgY2hwZC1cXHUwMDNlZm10LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgY2hwZC1cXHUwMDNlcmZtdCwgY2hwZC1cXHUwMDNlYywgY2hwZC1cXHUwMDNlbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNjcGRfYXJlYSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdG1lbWNweShcXHUwMDI2Y2hwZC1cXHUwMDNlY2hwZGIsIFxcdTAwMjZzY3BkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLCBzY3BkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XFxuIFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jaHBkLCBjaHBkLCBzaXplb2YoKmNocGQpKSlcXG4tXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4tb3V0X2ZyZWU6XFxuLVxcdGtmcmVlKGNocGQpO1xcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NwZF9hcmVhKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfZGNhbCh2b2lkIF9fdXNlciAqdXNlcl9kY2FsKVxcbiB7XFxuLVxcdHN0cnVjdCBjaHNjX2RjYWwgKmRjYWw7XFxuLVxcdGludCByZXQsIGNjb2RlO1xcbitcXHRzdHJ1Y3QgY2hzY19kY2FsICpkY2FsIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbitcXHRpbnQgY2NvZGU7XFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdHN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0O1xcbiBcXHRcXHR1MzIgYXR5cGUgOiA4O1xcbkBAIC03OTQsMjAgKzcxOCwxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfZGNhbCh2b2lkIF9fdXNlciAqdXNlcl9kY2FsKVxcbiBcXHRcXHR1MzIgcmVzMVsyXTtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xcbiBcXHRcXHR1OCBkYXRhW1BBR0VfU0laRSAtIDM2XTtcXG4tXFx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNkY2FsX2FyZWE7XFxuK1xcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzZGNhbF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbiBcXG4tXFx0c2RjYWxfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4rXFx0c2RjYWxfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghc2RjYWxfYXJlYSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGRjYWwgPSBremFsbG9jX29iaigqZGNhbCk7XFxuLVxcdGlmICghZGNhbCkge1xcbi1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuLVxcdGlmIChjb3B5X2Zyb21fdXNlcihkY2FsLCB1c2VyX2RjYWwsIHNpemVvZigqZGNhbCkpKSB7XFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKCFkY2FsKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKGRjYWwsIHVzZXJfZGNhbCwgc2l6ZW9mKCpkY2FsKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRzZGNhbF9hcmVhLVxcdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAyMDtcXG4gXFx0c2RjYWxfYXJlYS1cXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDM0O1xcbiBcXHRzZGNhbF9hcmVhLVxcdTAwM2VhdHlwZSA9IGRjYWwtXFx1MDAzZXJlcS5hdHlwZTtcXG5AQCAtODE2LDI2ICs3MzYsMTggQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2RjYWwodm9pZCBfX3VzZXIgKnVzZXJfZGNhbClcXG4gXFx0ICAgICAgIHNpemVvZihzZGNhbF9hcmVhLVxcdTAwM2VsaXN0X3Bhcm0pKTtcXG4gXFxuIFxcdGNjb2RlID0gY2hzYyhzZGNhbF9hcmVhKTtcXG4tXFx0aWYgKGNjb2RlICE9IDApIHtcXG4tXFx0XFx0cmV0ID0gLUVJTztcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbitcXHRpZiAoY2NvZGUgIT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdGlmIChzZGNhbF9hcmVhLVxcdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xcbi1cXHRcXHRyZXQgPSAtRUlPO1xcbiBcXHRcXHRDSFNDX01TRygwLCBcXFwic2RjYWw6IHJlc3BvbnNlIGNvZGU9JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBzZGNhbF9hcmVhLVxcdTAwM2VyZXNwb25zZS5jb2RlKTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4gXFx0bWVtY3B5KFxcdTAwMjZkY2FsLVxcdTAwM2VzZGNhbCwgXFx1MDAyNnNkY2FsX2FyZWEtXFx1MDAzZXJlc3BvbnNlLFxcbiBcXHQgICAgICAgc2RjYWxfYXJlYS1cXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcXG4gXFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2RjYWwsIGRjYWwsIHNpemVvZigqZGNhbCkpKVxcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldCA9IDA7XFxuLW91dF9mcmVlOlxcbi1cXHRrZnJlZShkY2FsKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNkY2FsX2FyZWEpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBsb25nIGNoc2NfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXFxuQEAgLTkwNCw3ICs4MTYsNyBAQCBzdGF0aWMgaW50IGNoc2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4gXFx0fVxcbiBcXHRzbnByaW50ZihkYmYsIHNpemVvZihkYmYpLCBcXFwicmVscmV0OiVkXFxcIiwgcmV0KTtcXG4gXFx0Q0hTQ19MT0coMCwgZGJmKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuK1xcdGtmcmVlKG9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuIFxcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XFxuIFxcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xcbiBcXHRvbl9jbG9zZV9yZXF1ZXN0ID0gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jbWYuYyBiL2RyaXZlcnMvczM5MC9jaW8vY21mLmNcXG5pbmRleCA5MmFiM2Q1NDZmZTQ3Li42YzQ2YjBkMGIzZGE0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY21mLmNcXG4rKysgYi9kcml2ZXJzL3MzOTAvY2lvL2NtZi5jXFxuQEAgLTUwMSwxMiArNTAxLDEyIEBAIHN0YXRpYyBpbnQgYWxsb2NfY21iKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxcbiBcXHRcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZjbWJfYXJlYS5saXN0KSk7XFxuIFxcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y21iX2FyZWEubG9jayk7XFxuLVxcdFxcdG1lbSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBnZXRfb3JkZXIoc2l6ZSkpO1xcbitcXHRcXHRtZW0gPSBrbWFsbG9jKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBnZXRfb3JkZXIoc2l6ZSksIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNtYl9hcmVhLmxvY2spO1xcbiBcXG4gXFx0XFx0aWYgKGNtYl9hcmVhLm1lbSkge1xcbiBcXHRcXHRcXHQvKiBvaywgYW5vdGhlciB0aHJlYWQgd2FzIGZhc3RlciAqL1xcbi1cXHRcXHRcXHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW1lbSwgZ2V0X29yZGVyKHNpemUpKTtcXG4rXFx0XFx0XFx0a2ZyZWUobWVtKTtcXG4gXFx0XFx0fSBlbHNlIGlmICghbWVtKSB7XFxuIFxcdFxcdFxcdC8qIG5vIGx1Y2sgKi9cXG4gXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG5AQCAtNTQ3LDEwICs1NDcsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX2NtYihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcXG4gXFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlY21iX2xpc3QpO1xcbiBcXG4gXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmNtYl9hcmVhLmxpc3QpKSB7XFxuLVxcdFxcdHNzaXplX3Qgc2l6ZTtcXG4tXFx0XFx0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgY21iKSAqIGNtYl9hcmVhLm51bV9jaGFubmVscztcXG4gXFx0XFx0Y21mX2FjdGl2YXRlKE5VTEwsIENNRl9PRkYpO1xcbi1cXHRcXHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWNtYl9hcmVhLm1lbSwgZ2V0X29yZGVyKHNpemUpKTtcXG4rXFx0XFx0a2ZyZWUoY21iX2FyZWEubWVtKTtcXG4gXFx0XFx0Y21iX2FyZWEubWVtID0gTlVMTDtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19pcnEoY2Rldi1cXHUwMDNlY2N3bG9jayk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmhcXG5pbmRleCA0YmQ0YzAwYzljMGNhLi5kZmY1ZjUzYTg3OTVkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oXFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmhcXG5AQCAtMjQ0LDcgKzI0NCw3IEBAIHN0cnVjdCBxZGlvX2lycSB7XFxuIFxcdGludCBwZXJmX3N0YXRfZW5hYmxlZDtcXG4gXFxuIFxcdHN0cnVjdCBxZHIgKnFkcjtcXG4tXFx0dW5zaWduZWQgbG9uZyBjaHNjX3BhZ2U7XFxuK1xcdHZvaWQgKmNoc2NfcGFnZTtcXG4gXFxuIFxcdHN0cnVjdCBxZGlvX3EgKmlucHV0X3FzW1FESU9fTUFYX1FVRVVFU19QRVJfSVJRXTtcXG4gXFx0c3RydWN0IHFkaW9fcSAqb3V0cHV0X3FzW1FESU9fTUFYX1FVRVVFU19QRVJfSVJRXTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNcXG5pbmRleCBjMWUwOWZhMzRlNzc0Li5iZWJjMTI1MGViZWJmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNcXG4rKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jXFxuQEAgLTE3LDYgKzE3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2RlYnVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2FzbS5oXFx1MDAzZVxcbkBAIC05MzMsMTAgKzkzNCwxMCBAQCBpbnQgcWRpb19mcmVlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmlycV9wdHItXFx1MDAzZXNldHVwX211dGV4KTtcXG4gXFxuIFxcdHFkaW9fZnJlZV9xdWV1ZXMoaXJxX3B0cik7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0ci1cXHUwMDNlcWRyKTtcXG4tXFx0ZnJlZV9wYWdlKGlycV9wdHItXFx1MDAzZWNoc2NfcGFnZSk7XFxuK1xcdGtmcmVlKGlycV9wdHItXFx1MDAzZXFkcik7XFxuK1xcdGtmcmVlKGlycV9wdHItXFx1MDAzZWNoc2NfcGFnZSk7XFxuIFxcdGtmcmVlKGlycV9wdHItXFx1MDAzZWNjdyk7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0cik7XFxuK1xcdGtmcmVlKGlycV9wdHIpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChxZGlvX2ZyZWUpO1xcbkBAIC05NjEsNyArOTYyLDcgQEAgaW50IHFkaW9fYWxsb2NhdGUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkIGludCBub19pbnB1dF9xcyxcXG4gXFx0ICAgIG5vX291dHB1dF9xcyBcXHUwMDNlIFFESU9fTUFYX1FVRVVFU19QRVJfSVJRKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGlycV9wdHIgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XFxuK1xcdGlycV9wdHIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghaXJxX3B0cilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC05ODYsMTIgKzk4NywxMiBAQCBpbnQgcWRpb19hbGxvY2F0ZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IG5vX2lucHV0X3FzLFxcbiBcXHQgKiBxZGlvX2VzdGFibGlzaC4gSW4gY2FzZSBvZiBsb3cgbWVtb3J5IGFuZCBzd2FwIG9uIGEgemZjcCBkaXNrXFxuIFxcdCAqIHdlIG1heSBub3QgYmUgYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgb3RoZXJ3aXNlLlxcbiBcXHQgKi9cXG4tXFx0aXJxX3B0ci1cXHUwMDNlY2hzY19wYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xcbitcXHRpcnFfcHRyLVxcdTAwM2VjaHNjX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghaXJxX3B0ci1cXHUwMDNlY2hzY19wYWdlKVxcbiBcXHRcXHRnb3RvIGVycl9jaHNjO1xcbiBcXG4gXFx0LyogcWRyIGlzIHVzZWQgaW4gY2N3MS5jZGEgd2hpY2ggaXMgdTMyICovXFxuLVxcdGlycV9wdHItXFx1MDAzZXFkciA9IChzdHJ1Y3QgcWRyICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuK1xcdGlycV9wdHItXFx1MDAzZXFkciA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghaXJxX3B0ci1cXHUwMDNlcWRyKVxcbiBcXHRcXHRnb3RvIGVycl9xZHI7XFxuIFxcbkBAIC0xMDA0LDE0ICsxMDA1LDE0IEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyX3F1ZXVlczpcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyLVxcdTAwM2VxZHIpO1xcbitcXHRrZnJlZShpcnFfcHRyLVxcdTAwM2VxZHIpO1xcbiBlcnJfcWRyOlxcbi1cXHRmcmVlX3BhZ2UoaXJxX3B0ci1cXHUwMDNlY2hzY19wYWdlKTtcXG4rXFx0a2ZyZWUoaXJxX3B0ci1cXHUwMDNlY2hzY19wYWdlKTtcXG4gZXJyX2Noc2M6XFxuIGVycl9kYmY6XFxuIFxcdGtmcmVlKGlycV9wdHItXFx1MDAzZWNjdyk7XFxuIGVycl9jY3c6XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0cik7XFxuK1xcdGtmcmVlKGlycV9wdHIpO1xcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocWRpb19hbGxvY2F0ZSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmNcXG5pbmRleCBlYTA5YWFkYWFlNGVjLi5jMDIxNWE3ZDI5YTgxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmNcXG5AQCAtMzUsNyArMzUsNyBAQCB2b2lkIHFkaW9fZnJlZV9idWZmZXJzKHN0cnVjdCBxZGlvX2J1ZmZlciAqKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KVxcbiBcXHRpbnQgcG9zO1xcbiBcXG4gXFx0Zm9yIChwb3MgPSAwOyBwb3MgXFx1MDAzYyBjb3VudDsgcG9zICs9IFFCVUZGX1BFUl9QQUdFKVxcbi1cXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zltwb3NdKTtcXG4rXFx0XFx0a2ZyZWUoYnVmW3Bvc10pO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHFkaW9fZnJlZV9idWZmZXJzKTtcXG4gXFxuQEAgLTQ5LDcgKzQ5LDcgQEAgaW50IHFkaW9fYWxsb2NfYnVmZmVycyhzdHJ1Y3QgcWRpb19idWZmZXIgKipidWYsIHVuc2lnbmVkIGludCBjb3VudClcXG4gXFx0aW50IHBvcztcXG4gXFxuIFxcdGZvciAocG9zID0gMDsgcG9zIFxcdTAwM2MgY291bnQ7IHBvcyArPSBRQlVGRl9QRVJfUEFHRSkge1xcbi1cXHRcXHRidWZbcG9zXSA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcXG4rXFx0XFx0YnVmW3Bvc10gPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdGlmICghYnVmW3Bvc10pIHtcXG4gXFx0XFx0XFx0cWRpb19mcmVlX2J1ZmZlcnMoYnVmLCBjb3VudCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC04Myw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIF9fcWRpb19mcmVlX3F1ZXVlcyhzdHJ1Y3QgcWRpb19xICoqcXVldWVzLCB1bnNpZ25lZCBpbnQgY291bnQpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKykge1xcbiBcXHRcXHRxID0gcXVldWVzW2ldO1xcbi1cXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcS1cXHUwMDNlc2xfcGFnZSk7XFxuK1xcdFxcdGtmcmVlKHEtXFx1MDAzZXNsX3BhZ2UpO1xcbiBcXHRcXHRrbWVtX2NhY2hlX2ZyZWUocWRpb19xX2NhY2hlLCBxKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTEwOSw3ICsxMDksNyBAQCBzdGF0aWMgaW50IF9fcWRpb19hbGxvY2F0ZV9xcyhzdHJ1Y3QgcWRpb19xICoqaXJxX3B0cl9xcywgaW50IG5yX3F1ZXVlcylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHEtXFx1MDAzZXNsX3BhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTtcXG4rXFx0XFx0cS1cXHUwMDNlc2xfcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gXFx0XFx0aWYgKCFxLVxcdTAwM2VzbF9wYWdlKSB7XFxuIFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShxZGlvX3FfY2FjaGUsIHEpO1xcbiBcXHRcXHRcXHRfX3FkaW9fZnJlZV9xdWV1ZXMoaXJxX3B0cl9xcywgaSk7XFxuQEAgLTI0OSwxMSArMjQ5LDExIEBAIGludCBxZGlvX3NldHVwX2dldF9zc3FkKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0cixcXG4gXFxuIFxcdERCRl9FVkVOVChcXFwiZ2V0c3NxZDolNHhcXFwiLCBzY2hpZC1cXHUwMDNlc2NoX25vKTtcXG4gXFx0aWYgKCFpcnFfcHRyKSB7XFxuLVxcdFxcdHNzcWQgPSAoc3RydWN0IGNoc2Nfc3NxZF9hcmVhICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbitcXHRcXHRzc3FkID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRpZiAoIXNzcWQpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzc3FkID0gKHN0cnVjdCBjaHNjX3NzcWRfYXJlYSAqKWlycV9wdHItXFx1MDAzZWNoc2NfcGFnZTtcXG4rXFx0XFx0c3NxZCA9IGlycV9wdHItXFx1MDAzZWNoc2NfcGFnZTtcXG4gXFx0fVxcbiBcXG4gXFx0cmMgPSBjaHNjX3NzcWQoKnNjaGlkLCBzc3FkKTtcXG5AQCAtMjcwLDcgKzI3MCw3IEBAIGludCBxZGlvX3NldHVwX2dldF9zc3FkKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0cixcXG4gXFxuIG91dDpcXG4gXFx0aWYgKCFpcnFfcHRyKVxcbi1cXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3NxZCk7XFxuK1xcdFxcdGtmcmVlKHNzcWQpO1xcbiBcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jXFxuaW5kZXggZTE2N2FhNzVjM2RmZi4uYTJmZjUxODg3NTM3ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuY1xcbkBAIC0xMzYsNyArMTM2LDcgQEAgc3RhdGljIHN0cnVjdCBhaXJxX3N0cnVjdCB0aXFkaW9fYWlycSA9IHtcXG4gXFxuIHN0YXRpYyBpbnQgc2V0X3N1YmNoYW5uZWxfaW5kKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciwgaW50IHJlc2V0KVxcbiB7XFxuLVxcdHN0cnVjdCBjaHNjX3Njc3NjX2FyZWEgKnNjc3NjID0gKHZvaWQgKilpcnFfcHRyLVxcdTAwM2VjaHNjX3BhZ2U7XFxuK1xcdHN0cnVjdCBjaHNjX3Njc3NjX2FyZWEgKnNjc3NjID0gaXJxX3B0ci1cXHUwMDNlY2hzY19wYWdlO1xcbiBcXHRkbWE2NF90IHN1bW1hcnlfaW5kaWNhdG9yX2FkZHIsIHN1YmNoYW5uZWxfaW5kaWNhdG9yX2FkZHI7XFxuIFxcdGludCByYztcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vc2NtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jXFxuaW5kZXggMTcxMjEyYTZkMmQ5Yy4uYjc5ZmUwMjNhYjhkMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9zY20uY1xcbkBAIC0xMyw2ICsxMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9lYWRtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJjaHNjLmhcXFwiXFxuIFxcbkBAIC0yMjQsMTIgKzIyNSwxMiBAQCBzdGF0aWMgaW50IHNjbV9hZGQoc3RydWN0IGNoc2Nfc2NtX2luZm8gKnNjbV9pbmZvLCBzaXplX3QgbnVtKVxcbiBcXG4gaW50IHNjbV91cGRhdGVfaW5mb3JtYXRpb24odm9pZClcXG4ge1xcbi1cXHRzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm87XFxuK1xcdHN0cnVjdCBjaHNjX3NjbV9pbmZvICpzY21faW5mbyBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFx0dTY0IHRva2VuID0gMDtcXG4gXFx0c2l6ZV90IG51bTtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHNjbV9pbmZvID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbitcXHRzY21faW5mbyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghc2NtX2luZm8pXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjUwLDggKzI1MSw2IEBAIGludCBzY21fdXBkYXRlX2luZm9ybWF0aW9uKHZvaWQpXFxuIFxcdFxcdHRva2VuID0gc2NtX2luZm8tXFx1MDAzZXJlc3RvaztcXG4gXFx0fSB3aGlsZSAodG9rZW4pO1xcbiBcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjbV9pbmZvKTtcXG4tXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjM1LjY2Nzg1ODcwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk3MjA4NTg2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHMzOTAtc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gaGVscGVycyBhbmQgdGhlIHMzOTAgQ2hhbm5lbCBJL08gKENJTykgc3Vic3lzdGVtIChhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBhbmQgZHJpdmVycy9zMzkwL2Npby8qKS4gVGhlc2UgZmlsZXMgYXJlIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgYW5kIGFyZSBub3QgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY0NDBmMWUwYjljYmVhMDYzZTljZmM2MmM4N2UxNjllYzIyZjc4MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE0OjEyOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaFxuaW5kZXggMDZlMWVjMmFmZDVhZi4uMjQ4ODI5ZDQ2MWJjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaFxuQEAgLTE0Nyw3ICsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxuIFx0XHRcdGliLVx1MDAzZWRhdGFbaV0gPSBkbWE2NF9hZGQoaWItXHUwMDNlZGF0YVtpIC0gMV0sIElEQV9CTE9DS19TSVpFKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuLVx0XHR2YWRkciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlX29yZGVyKTtcbitcdFx0dmFkZHIgPSBrbWFsbG9jKFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgcGFnZV9vcmRlciwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghdmFkZHIpXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdFx0aWItXHUwMDNlZGF0YVtpXSA9IHZpcnRfdG9fZG1hNjQodmFkZHIpO1xuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxuIFx0d2hpbGUgKGkgXHUwMDNlPSBucl9jaHVua3MpIHtcbiBcdFx0aSAtPSBucl9jaHVua3M7XG4gXHRcdHZhZGRyID0gZG1hNjRfdG9fdmlydChpYi1cdTAwM2VkYXRhW2ldKTtcbi1cdFx0ZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgaWItXHUwMDNlcGFnZV9vcmRlcik7XG4rXHRcdGtmcmVlKHZhZGRyKTtcbiBcdH1cbiBcdGtmcmVlKGliKTtcbiBcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuQEAgLTE3NSw3ICsxNzUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRhbF9idWZmZXJfZnJlZShzdHJ1Y3QgaWRhbF9idWZmZXIgKmliKVxuIFx0bnJfY2h1bmtzID0gKFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgaWItXHUwMDNlcGFnZV9vcmRlcikgXHUwMDNlXHUwMDNlIElEQV9TSVpFX1NISUZUO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcHRyczsgaSArPSBucl9jaHVua3MpIHtcbiBcdFx0dmFkZHIgPSBkbWE2NF90b192aXJ0KGliLVx1MDAzZWRhdGFbaV0pO1xuLVx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBpYi1cdTAwM2VwYWdlX29yZGVyKTtcbitcdFx0a2ZyZWUodmFkZHIpO1xuIFx0fVxuIFx0a2ZyZWUoaWIpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXG5pbmRleCA5Njg5ZjcyMmM4NjNjLi5kOThmNjI5ZTg5Mjk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXG5AQCAtOTMxLDEyICs5MzEsMTIgQEAgc3RhdGljIGludCBjdWJfYWxsb2Moc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3MpXG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENTU19OVU1fQ1VCX1BBR0VTOyBpKyspIHtcbi1cdFx0Y3NzLVx1MDAzZWN1YltpXSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdFx0Y3NzLVx1MDAzZWN1YltpXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRcdGlmICghY3NzLVx1MDAzZWN1YltpXSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENTU19OVU1fRUNVQl9QQUdFUzsgaSsrKSB7XG4tXHRcdGNzcy1cdTAwM2VlY3ViW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRcdGNzcy1cdTAwM2VlY3ViW2ldID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIWNzcy1cdTAwM2VlY3ViW2ldKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuQEAgLTk0OSwxMSArOTQ5LDExIEBAIHN0YXRpYyB2b2lkIGN1Yl9mcmVlKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzKVxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDU1NfTlVNX0NVQl9QQUdFUzsgaSsrKSB7XG4tXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljc3MtXHUwMDNlY3ViW2ldKTtcbitcdFx0a2ZyZWUoY3NzLVx1MDAzZWN1YltpXSk7XG4gXHRcdGNzcy1cdTAwM2VjdWJbaV0gPSBOVUxMO1xuIFx0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1NTX05VTV9FQ1VCX1BBR0VTOyBpKyspIHtcbi1cdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNzcy1cdTAwM2VlY3ViW2ldKTtcbitcdFx0a2ZyZWUoY3NzLVx1MDAzZWVjdWJbaV0pO1xuIFx0XHRjc3MtXHUwMDNlZWN1YltpXSA9IE5VTEw7XG4gXHR9XG4gfVxuQEAgLTExNDIsOCArMTE0Miw4IEBAIGludCBfX2luaXQgY2hzY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHNlaV9wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuLVx0Y2hzY19wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuK1x0c2VpX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuK1x0Y2hzY19wYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2VpX3BhZ2UgfHwgIWNoc2NfcGFnZSkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dF9lcnI7XG5AQCAtMTE1MywxNiArMTE1MywxNiBAQCBpbnQgX19pbml0IGNoc2NfaW5pdCh2b2lkKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHRyZXR1cm4gcmV0O1xuIG91dF9lcnI6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19wYWdlKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWlfcGFnZSk7XG4rXHRrZnJlZShjaHNjX3BhZ2UpO1xuK1x0a2ZyZWUoc2VpX3BhZ2UpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4gdm9pZCBfX2luaXQgY2hzY19pbml0X2NsZWFudXAodm9pZClcbiB7XG4gXHRjcndfdW5yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1NTKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljaHNjX3BhZ2UpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNlaV9wYWdlKTtcbitcdGtmcmVlKGNoc2NfcGFnZSk7XG4rXHRrZnJlZShzZWlfcGFnZSk7XG4gfVxuIFxuIGludCBfX2Noc2NfZW5hYmxlX2ZhY2lsaXR5KHN0cnVjdCBjaHNjX3NkYV9hcmVhICpzZGFfYXJlYSwgaW50IG9wZXJhdGlvbl9jb2RlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY1xuaW5kZXggYjZjYjhiYjhiY2M0Yi4uMjI1YWFhYzdkZDMwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY1xuKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jXG5AQCAtMTUsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pc2NkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbF9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2hzYy5oXHUwMDNlXG5AQCAtMjkyLDcgKzI5Myw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9zdGFydCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxuIFx0aWYgKCFjc3NfZ2VuZXJhbF9jaGFyYWN0ZXJpc3RpY3MuZHluaW8pXG4gXHRcdC8qIEl0IG1ha2VzIG5vIHNlbnNlIHRvIHRyeS4gKi9cbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0Y2hzY19hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0RNQSB8IEdGUF9LRVJORUwpO1xuK1x0Y2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcbiBcdGlmICghY2hzY19hcmVhKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHJlcXVlc3QgPSBremFsbG9jX29iaigqcmVxdWVzdCk7XG5AQCAtMzIxLDcgKzMyMiw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9zdGFydCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxuIFx0c25wcmludGYoZGJmLCBzaXplb2YoZGJmKSwgXCJyZXQ6JWRcIiwgcmV0KTtcbiBcdENIU0NfTE9HKDAsIGRiZik7XG4gXHRrZnJlZShyZXF1ZXN0KTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljaHNjX2FyZWEpO1xuK1x0a2ZyZWUoY2hzY19hcmVhKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTM0MCw3ICszNDEsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfb25fY2xvc2Vfc2V0KHZvaWQgX191c2VyICp1c2VyX2FyZWEpXG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbi1cdG9uX2Nsb3NlX2Noc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcbitcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIW9uX2Nsb3NlX2Noc2NfYXJlYSkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dF9mcmVlX3JlcXVlc3Q7XG5AQCAtMzUzLDcgKzM1NCw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9zZXQodm9pZCBfX3VzZXIgKnVzZXJfYXJlYSlcbiBcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBvdXRfZnJlZV9jaHNjOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XG4rXHRrZnJlZShvbl9jbG9zZV9jaHNjX2FyZWEpO1xuIFx0b25fY2xvc2VfY2hzY19hcmVhID0gTlVMTDtcbiBvdXRfZnJlZV9yZXF1ZXN0OlxuIFx0a2ZyZWUob25fY2xvc2VfcmVxdWVzdCk7XG5AQCAtMzc1LDcgKzM3Niw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9yZW1vdmUodm9pZClcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XG4rXHRrZnJlZShvbl9jbG9zZV9jaHNjX2FyZWEpO1xuIFx0b25fY2xvc2VfY2hzY19hcmVhID0gTlVMTDtcbiBcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xuIFx0b25fY2xvc2VfcmVxdWVzdCA9IE5VTEw7XG5AQCAtMzg5LDM5ICszOTAsMjkgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3JlbW92ZSh2b2lkKVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9zdGFydF9zeW5jKHZvaWQgX191c2VyICp1c2VyX2FyZWEpXG4ge1xuLVx0c3RydWN0IGNoc2Nfc3luY19hcmVhICpjaHNjX2FyZWE7XG4tXHRpbnQgcmV0LCBjY29kZTtcbitcdHN0cnVjdCBjaHNjX3N5bmNfYXJlYSAqY2hzY19hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IGNjb2RlO1xuIFxuLVx0Y2hzY19hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuK1x0Y2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghY2hzY19hcmVhKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdGlmIChjb3B5X2Zyb21fdXNlcihjaHNjX2FyZWEsIHVzZXJfYXJlYSwgUEFHRV9TSVpFKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNoc2NfYXJlYS1cdTAwM2VoZWFkZXIuY29kZSBcdTAwMjYgMHg0MDAwKSB7XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4rXHRpZiAoY29weV9mcm9tX3VzZXIoY2hzY19hcmVhLCB1c2VyX2FyZWEsIFBBR0VfU0laRSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0aWYgKGNoc2NfYXJlYS1cdTAwM2VoZWFkZXIuY29kZSBcdTAwMjYgMHg0MDAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGNoc2NfbG9nX2NvbW1hbmQoY2hzY19hcmVhKTtcbiBcdGNjb2RlID0gY2hzYyhjaHNjX2FyZWEpO1xuLVx0aWYgKGNjb2RlICE9IDApIHtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmIChjY29kZSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmVhLCBjaHNjX2FyZWEsIFBBR0VfU0laRSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2NoYW5uZWxfcGF0aCh2b2lkIF9fdXNlciAqdXNlcl9jZClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19jaHBfY2QgKmNkO1xuLVx0aW50IHJldCwgY2NvZGU7XG4rXHRzdHJ1Y3QgY2hzY19jaHBfY2QgKmNkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IGNjb2RlO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XG4gXHRcdHUzMiA6IDI7XG5AQCAtNDM2LDIwICs0MjcsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY2hhbm5lbF9wYXRoKHZvaWQgX191c2VyICp1c2VyX2NkKVxuIFx0XHR1MzIgOiAzMjtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xuIFx0XHR1OCBkYXRhW1BBR0VfU0laRSAtIDIwXTtcbi1cdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3BjZF9hcmVhO1xuK1x0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjcGNkX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gXG4tXHRzY3BjZF9hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuK1x0c2NwY2RfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNjcGNkX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Y2QgPSBremFsbG9jX29iaigqY2QpO1xuLVx0aWYgKCFjZCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGNkLCB1c2VyX2NkLCBzaXplb2YoKmNkKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmICghY2QpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKGNkLCB1c2VyX2NkLCBzaXplb2YoKmNkKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NwY2RfYXJlYS1cdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAxMDtcbiBcdHNjcGNkX2FyZWEtXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDI4O1xuIFx0c2NwY2RfYXJlYS1cdTAwM2VtID0gY2QtXHUwMDNlbTtcbkBAIC00NTksMzEgKzQ0NiwyMyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jaGFubmVsX3BhdGgodm9pZCBfX3VzZXIgKnVzZXJfY2QpXG4gXHRzY3BjZF9hcmVhLVx1MDAzZWxhc3RfY2hwaWQgPSBjZC1cdTAwM2VjaHBpZC5pZDtcbiBcbiBcdGNjb2RlID0gY2hzYyhzY3BjZF9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4rXHRpZiAoY2NvZGUgIT0gMClcbitcdFx0cmV0dXJuIC1FSU87XG4gXHRpZiAoc2NwY2RfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcInNjcGNkOiByZXNwb25zZSBjb2RlPSV4XFxuXCIsXG4gXHRcdFx0IHNjcGNkX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSk7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFx0bWVtY3B5KFx1MDAyNmNkLVx1MDAzZWNwY2IsIFx1MDAyNnNjcGNkX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjcGNkX2FyZWEtXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jZCwgY2QsIHNpemVvZigqY2QpKSlcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gMDtcbi1vdXRfZnJlZTpcbi1cdGtmcmVlKGNkKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3BjZF9hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2N1KHZvaWQgX191c2VyICp1c2VyX2NkKVxuIHtcbi1cdHN0cnVjdCBjaHNjX2N1X2NkICpjZDtcbi1cdGludCByZXQsIGNjb2RlO1xuK1x0c3RydWN0IGNoc2NfY3VfY2QgKmNkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IGNjb2RlO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XG4gXHRcdHUzMiA6IDI7XG5AQCAtNDk4LDIwICs0NzcsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpXG4gXHRcdHUzMiA6IDMyO1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVzcG9uc2U7XG4gXHRcdHU4IGRhdGFbUEFHRV9TSVpFIC0gMjBdO1xuLVx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjdWNkX2FyZWE7XG4rXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2N1Y2RfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcbi1cdHNjdWNkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4rXHRzY3VjZF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2N1Y2RfYXJlYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRjZCA9IGt6YWxsb2Nfb2JqKCpjZCk7XG4tXHRpZiAoIWNkKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuK1x0aWYgKCFjZClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRzY3VjZF9hcmVhLVx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDEwO1xuIFx0c2N1Y2RfYXJlYS1cdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMjY7XG4gXHRzY3VjZF9hcmVhLVx1MDAzZW0gPSBjZC1cdTAwM2VtO1xuQEAgLTUyMSwzMSArNDk2LDIzIEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2N1KHZvaWQgX191c2VyICp1c2VyX2NkKVxuIFx0c2N1Y2RfYXJlYS1cdTAwM2VsYXN0X2N1biA9IGNkLVx1MDAzZWN1bjtcbiBcbiBcdGNjb2RlID0gY2hzYyhzY3VjZF9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4rXHRpZiAoY2NvZGUgIT0gMClcbitcdFx0cmV0dXJuIC1FSU87XG4gXHRpZiAoc2N1Y2RfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcInNjdWNkOiByZXNwb25zZSBjb2RlPSV4XFxuXCIsXG4gXHRcdFx0IHNjdWNkX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSk7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFx0bWVtY3B5KFx1MDAyNmNkLVx1MDAzZWN1Y2IsIFx1MDAyNnNjdWNkX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjdWNkX2FyZWEtXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jZCwgY2QsIHNpemVvZigqY2QpKSlcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gMDtcbi1vdXRfZnJlZTpcbi1cdGtmcmVlKGNkKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3VjZF9hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX3NjaF9jdSh2b2lkIF9fdXNlciAqdXNlcl9jdWQpXG4ge1xuLVx0c3RydWN0IGNoc2Nfc2NoX2N1ZCAqY3VkO1xuLVx0aW50IHJldCwgY2NvZGU7XG4rXHRzdHJ1Y3QgY2hzY19zY2hfY3VkICpjdWQgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4rXHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIDogMjtcbkBAIC01NjEsMjAgKzUyOCwxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19zY2hfY3Uodm9pZCBfX3VzZXIgKnVzZXJfY3VkKVxuIFx0XHR1MzIgOiAzMjtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xuIFx0XHR1OCBkYXRhW1BBR0VfU0laRSAtIDIwXTtcbi1cdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzc2N1ZF9hcmVhO1xuK1x0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNzY3VkX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gXG4tXHRzc2N1ZF9hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuK1x0c3NjdWRfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNzY3VkX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Y3VkID0ga3phbGxvY19vYmooKmN1ZCk7XG4tXHRpZiAoIWN1ZCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGN1ZCwgdXNlcl9jdWQsIHNpemVvZigqY3VkKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmICghY3VkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmIChjb3B5X2Zyb21fdXNlcihjdWQsIHVzZXJfY3VkLCBzaXplb2YoKmN1ZCkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHNzY3VkX2FyZWEtXHUwMDNlcmVxdWVzdC5sZW5ndGggPSAweDAwMTA7XG4gXHRzc2N1ZF9hcmVhLVx1MDAzZXJlcXVlc3QuY29kZSA9IDB4MDAwNjtcbiBcdHNzY3VkX2FyZWEtXHUwMDNlbSA9IGN1ZC1cdTAwM2VzY2hpZC5tO1xuQEAgLTU4NSwzMSArNTQ4LDIzIEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX3NjaF9jdSh2b2lkIF9fdXNlciAqdXNlcl9jdWQpXG4gXHRzc2N1ZF9hcmVhLVx1MDAzZWxhc3Rfc2NoID0gY3VkLVx1MDAzZXNjaGlkLnNjaF9ubztcbiBcbiBcdGNjb2RlID0gY2hzYyhzc2N1ZF9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4rXHRpZiAoY2NvZGUgIT0gMClcbitcdFx0cmV0dXJuIC1FSU87XG4gXHRpZiAoc3NjdWRfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcInNzY3VkOiByZXNwb25zZSBjb2RlPSV4XFxuXCIsXG4gXHRcdFx0IHNzY3VkX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSk7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFx0bWVtY3B5KFx1MDAyNmN1ZC1cdTAwM2VzY3ViLCBcdTAwMjZzc2N1ZF9hcmVhLVx1MDAzZXJlc3BvbnNlLCBzc2N1ZF9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY3VkLCBjdWQsIHNpemVvZigqY3VkKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjdWQpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNzY3VkX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcbiB7XG4tXHRzdHJ1Y3QgY2hzY19jb25mX2luZm8gKmNpO1xuLVx0aW50IHJldCwgY2NvZGU7XG4rXHRzdHJ1Y3QgY2hzY19jb25mX2luZm8gKmNpIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IGNjb2RlO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XG4gXHRcdHUzMiA6IDI7XG5AQCAtNjIzLDIwICs1NzgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcbiBcdFx0dTY0IDogNjQ7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NpX2FyZWE7XG4rXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NpX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gXG4tXHRzY2lfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdHNjaV9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2NpX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Y2kgPSBremFsbG9jX29iaigqY2kpO1xuLVx0aWYgKCFjaSkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGNpLCB1c2VyX2NpLCBzaXplb2YoKmNpKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmICghY2kpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKGNpLCB1c2VyX2NpLCBzaXplb2YoKmNpKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NpX2FyZWEtXHUwMDNlcmVxdWVzdC5sZW5ndGggPSAweDAwMTA7XG4gXHRzY2lfYXJlYS1cdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMTI7XG4gXHRzY2lfYXJlYS1cdTAwM2VtID0gY2ktXHUwMDNlaWQubTtcbkBAIC02NDUsMzEgKzU5NiwyMyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9pbmZvKHZvaWQgX191c2VyICp1c2VyX2NpKVxuIFx0c2NpX2FyZWEtXHUwMDNlc3NpZCA9IGNpLVx1MDAzZWlkLnNzaWQ7XG4gXG4gXHRjY29kZSA9IGNoc2Moc2NpX2FyZWEpO1xuLVx0aWYgKGNjb2RlICE9IDApIHtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmIChjY29kZSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChzY2lfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcInNjaTogcmVzcG9uc2UgY29kZT0leFxcblwiLFxuIFx0XHRcdCBzY2lfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlKTtcbi1cdFx0Z290byBvdXRfZnJlZTtcbitcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXHRtZW1jcHkoXHUwMDI2Y2ktXHUwMDNlc2NpZCwgXHUwMDI2c2NpX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjaV9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY2ksIGNpLCBzaXplb2YoKmNpKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjaSk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NpX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19jb21wX2xpc3QgKmNjbDtcbi1cdGludCByZXQsIGNjb2RlO1xuK1x0c3RydWN0IGNoc2NfY29tcF9saXN0ICpjY2wgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4rXHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIGN0eXBlIDogODtcbkBAIC02ODEsNyArNjI0LDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcbiBcdFx0dTY0IDogNjQ7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAzNl07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NjbF9hcmVhO1xuK1x0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjY2xfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcdHN0cnVjdCB7XG4gXHRcdHUzMiBtIDogMTtcbiBcdFx0dTMyIDogMzE7XG5AQCAtNjk2LDE4ICs2MzksMTQgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcbiBcdFx0dTMyIHJlcztcbiBcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpjc3NpZHNfcGFybTtcbiBcbi1cdHNjY2xfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdHNjY2xfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNjY2xfYXJlYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRjY2wgPSBremFsbG9jX29iaigqY2NsKTtcbi1cdGlmICghY2NsKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2NsLCB1c2VyX2NjbCwgc2l6ZW9mKCpjY2wpKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuK1x0aWYgKCFjY2wpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKGNjbCwgdXNlcl9jY2wsIHNpemVvZigqY2NsKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NjbF9hcmVhLVx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDIwO1xuIFx0c2NjbF9hcmVhLVx1MDAzZXJlcXVlc3QuY29kZSA9IDB4MDAzMDtcbiBcdHNjY2xfYXJlYS1cdTAwM2VmbXQgPSBjY2wtXHUwMDNlcmVxLmZtdDtcbkBAIC03MjgsNjEgKzY2Nyw0NiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNjb2RlID0gY2hzYyhzY2NsX2FyZWEpO1xuLVx0aWYgKGNjb2RlICE9IDApIHtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmIChjY29kZSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChzY2NsX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiBcdFx0Q0hTQ19NU0coMCwgXCJzY2NsOiByZXNwb25zZSBjb2RlPSV4XFxuXCIsXG4gXHRcdFx0IHNjY2xfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlKTtcbi1cdFx0Z290byBvdXRfZnJlZTtcbitcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXHRtZW1jcHkoXHUwMDI2Y2NsLVx1MDAzZXNjY2wsIFx1MDAyNnNjY2xfYXJlYS1cdTAwM2VyZXNwb25zZSwgc2NjbF9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY2NsLCBjY2wsIHNpemVvZigqY2NsKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjY2wpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjY2xfYXJlYSk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY2hwZCh2b2lkIF9fdXNlciAqdXNlcl9jaHBkKVxuIHtcbi1cdHN0cnVjdCBjaHNjX3NjcGQgKnNjcGRfYXJlYTtcbi1cdHN0cnVjdCBjaHNjX2NwZF9pbmZvICpjaHBkO1xuK1x0c3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0c3RydWN0IGNoc2NfY3BkX2luZm8gKmNocGQgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Y2hwZCA9IGt6YWxsb2Nfb2JqKCpjaHBkKTtcbi1cdHNjcGRfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbi1cdGlmICghc2NwZF9hcmVhIHx8ICFjaHBkKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2hwZCwgdXNlcl9jaHBkLCBzaXplb2YoKmNocGQpKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuK1x0c2NwZF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdGlmICghc2NwZF9hcmVhIHx8ICFjaHBkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmIChjb3B5X2Zyb21fdXNlcihjaHBkLCB1c2VyX2NocGQsIHNpemVvZigqY2hwZCkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHJldCA9IGNoc2NfZGV0ZXJtaW5lX2NoYW5uZWxfcGF0aF9kZXNjKGNocGQtXHUwMDNlY2hwaWQsIGNocGQtXHUwMDNlZm10LFxuIFx0XHRcdFx0XHQgICAgICAgY2hwZC1cdTAwM2VyZm10LCBjaHBkLVx1MDAzZWMsIGNocGQtXHUwMDNlbSxcbiBcdFx0XHRcdFx0ICAgICAgIHNjcGRfYXJlYSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFx0bWVtY3B5KFx1MDAyNmNocGQtXHUwMDNlY2hwZGIsIFx1MDAyNnNjcGRfYXJlYS1cdTAwM2VyZXNwb25zZSwgc2NwZF9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY2hwZCwgY2hwZCwgc2l6ZW9mKCpjaHBkKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjaHBkKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3BkX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2RjYWwodm9pZCBfX3VzZXIgKnVzZXJfZGNhbClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19kY2FsICpkY2FsO1xuLVx0aW50IHJldCwgY2NvZGU7XG4rXHRzdHJ1Y3QgY2hzY19kY2FsICpkY2FsIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IGNjb2RlO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XG4gXHRcdHUzMiBhdHlwZSA6IDg7XG5AQCAtNzk0LDIwICs3MTgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2RjYWwodm9pZCBfX3VzZXIgKnVzZXJfZGNhbClcbiBcdFx0dTMyIHJlczFbMl07XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAzNl07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2RjYWxfYXJlYTtcbitcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzZGNhbF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIFxuLVx0c2RjYWxfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdHNkY2FsX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuIFx0aWYgKCFzZGNhbF9hcmVhKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGRjYWwgPSBremFsbG9jX29iaigqZGNhbCk7XG4tXHRpZiAoIWRjYWwpIHtcbi1cdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbi1cdGlmIChjb3B5X2Zyb21fdXNlcihkY2FsLCB1c2VyX2RjYWwsIHNpemVvZigqZGNhbCkpKSB7XG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4rXHRpZiAoIWRjYWwpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKGRjYWwsIHVzZXJfZGNhbCwgc2l6ZW9mKCpkY2FsKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2RjYWxfYXJlYS1cdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAyMDtcbiBcdHNkY2FsX2FyZWEtXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDM0O1xuIFx0c2RjYWxfYXJlYS1cdTAwM2VhdHlwZSA9IGRjYWwtXHUwMDNlcmVxLmF0eXBlO1xuQEAgLTgxNiwyNiArNzM2LDE4IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9kY2FsKHZvaWQgX191c2VyICp1c2VyX2RjYWwpXG4gXHQgICAgICAgc2l6ZW9mKHNkY2FsX2FyZWEtXHUwMDNlbGlzdF9wYXJtKSk7XG4gXG4gXHRjY29kZSA9IGNoc2Moc2RjYWxfYXJlYSk7XG4tXHRpZiAoY2NvZGUgIT0gMCkge1xuLVx0XHRyZXQgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuK1x0aWYgKGNjb2RlICE9IDApXG4rXHRcdHJldHVybiAtRUlPO1xuIFx0aWYgKHNkY2FsX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiBcdFx0Q0hTQ19NU0coMCwgXCJzZGNhbDogcmVzcG9uc2UgY29kZT0leFxcblwiLFxuIFx0XHRcdCBzZGNhbF9hcmVhLVx1MDAzZXJlc3BvbnNlLmNvZGUpO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcdG1lbWNweShcdTAwMjZkY2FsLVx1MDAzZXNkY2FsLCBcdTAwMjZzZGNhbF9hcmVhLVx1MDAzZXJlc3BvbnNlLFxuIFx0ICAgICAgIHNkY2FsX2FyZWEtXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9kY2FsLCBkY2FsLCBzaXplb2YoKmRjYWwpKSlcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gMDtcbi1vdXRfZnJlZTpcbi1cdGtmcmVlKGRjYWwpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNkY2FsX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgY2hzY19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcbkBAIC05MDQsNyArODE2LDcgQEAgc3RhdGljIGludCBjaHNjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHR9XG4gXHRzbnByaW50ZihkYmYsIHNpemVvZihkYmYpLCBcInJlbHJldDolZFwiLCByZXQpO1xuIFx0Q0hTQ19MT0coMCwgZGJmKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylvbl9jbG9zZV9jaHNjX2FyZWEpO1xuK1x0a2ZyZWUob25fY2xvc2VfY2hzY19hcmVhKTtcbiBcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XG4gXHRrZnJlZShvbl9jbG9zZV9yZXF1ZXN0KTtcbiBcdG9uX2Nsb3NlX3JlcXVlc3QgPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY21mLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2NtZi5jXG5pbmRleCA5MmFiM2Q1NDZmZTQ3Li42YzQ2YjBkMGIzZGE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jbWYuY1xuKysrIGIvZHJpdmVycy9zMzkwL2Npby9jbWYuY1xuQEAgLTUwMSwxMiArNTAxLDEyIEBAIHN0YXRpYyBpbnQgYWxsb2NfY21iKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxuIFx0XHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmNtYl9hcmVhLmxpc3QpKTtcbiBcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y21iX2FyZWEubG9jayk7XG4tXHRcdG1lbSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBnZXRfb3JkZXIoc2l6ZSkpO1xuK1x0XHRtZW0gPSBrbWFsbG9jKFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNpemUpLCBHRlBfS0VSTkVMKTtcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNmNtYl9hcmVhLmxvY2spO1xuIFxuIFx0XHRpZiAoY21iX2FyZWEubWVtKSB7XG4gXHRcdFx0Lyogb2ssIGFub3RoZXIgdGhyZWFkIHdhcyBmYXN0ZXIgKi9cbi1cdFx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW1lbSwgZ2V0X29yZGVyKHNpemUpKTtcbitcdFx0XHRrZnJlZShtZW0pO1xuIFx0XHR9IGVsc2UgaWYgKCFtZW0pIHtcbiBcdFx0XHQvKiBubyBsdWNrICovXG4gXHRcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC01NDcsMTAgKzU0Nyw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfY21iKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxuIFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwcml2LVx1MDAzZWNtYl9saXN0KTtcbiBcbiBcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmNtYl9hcmVhLmxpc3QpKSB7XG4tXHRcdHNzaXplX3Qgc2l6ZTtcbi1cdFx0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgY21iKSAqIGNtYl9hcmVhLm51bV9jaGFubmVscztcbiBcdFx0Y21mX2FjdGl2YXRlKE5VTEwsIENNRl9PRkYpO1xuLVx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWNtYl9hcmVhLm1lbSwgZ2V0X29yZGVyKHNpemUpKTtcbitcdFx0a2ZyZWUoY21iX2FyZWEubWVtKTtcbiBcdFx0Y21iX2FyZWEubWVtID0gTlVMTDtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycShjZGV2LVx1MDAzZWNjd2xvY2spO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmhcbmluZGV4IDRiZDRjMDBjOWMwY2EuLmRmZjVmNTNhODc5NWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmhcbkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RydWN0IHFkaW9faXJxIHtcbiBcdGludCBwZXJmX3N0YXRfZW5hYmxlZDtcbiBcbiBcdHN0cnVjdCBxZHIgKnFkcjtcbi1cdHVuc2lnbmVkIGxvbmcgY2hzY19wYWdlO1xuK1x0dm9pZCAqY2hzY19wYWdlO1xuIFxuIFx0c3RydWN0IHFkaW9fcSAqaW5wdXRfcXNbUURJT19NQVhfUVVFVUVTX1BFUl9JUlFdO1xuIFx0c3RydWN0IHFkaW9fcSAqb3V0cHV0X3FzW1FESU9fTUFYX1FVRVVFU19QRVJfSVJRXTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uY1xuaW5kZXggYzFlMDlmYTM0ZTc3NC4uYmViYzEyNTBlYmViZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNcbkBAIC0xNyw2ICsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZGVidWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9xZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLmhcdTAwM2VcbkBAIC05MzMsMTAgKzkzNCwxMCBAQCBpbnQgcWRpb19mcmVlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmlycV9wdHItXHUwMDNlc2V0dXBfbXV0ZXgpO1xuIFxuIFx0cWRpb19mcmVlX3F1ZXVlcyhpcnFfcHRyKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0ci1cdTAwM2VxZHIpO1xuLVx0ZnJlZV9wYWdlKGlycV9wdHItXHUwMDNlY2hzY19wYWdlKTtcbitcdGtmcmVlKGlycV9wdHItXHUwMDNlcWRyKTtcbitcdGtmcmVlKGlycV9wdHItXHUwMDNlY2hzY19wYWdlKTtcbiBcdGtmcmVlKGlycV9wdHItXHUwMDNlY2N3KTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0cik7XG4rXHRrZnJlZShpcnFfcHRyKTtcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxZGlvX2ZyZWUpO1xuQEAgLTk2MSw3ICs5NjIsNyBAQCBpbnQgcWRpb19hbGxvY2F0ZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IG5vX2lucHV0X3FzLFxuIFx0ICAgIG5vX291dHB1dF9xcyBcdTAwM2UgUURJT19NQVhfUVVFVUVTX1BFUl9JUlEpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aXJxX3B0ciA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcbitcdGlycV9wdHIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWlycV9wdHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTk4NiwxMiArOTg3LDEyIEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsXG4gXHQgKiBxZGlvX2VzdGFibGlzaC4gSW4gY2FzZSBvZiBsb3cgbWVtb3J5IGFuZCBzd2FwIG9uIGEgemZjcCBkaXNrXG4gXHQgKiB3ZSBtYXkgbm90IGJlIGFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IG90aGVyd2lzZS5cbiBcdCAqL1xuLVx0aXJxX3B0ci1cdTAwM2VjaHNjX3BhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghaXJxX3B0ci1cdTAwM2VjaHNjX3BhZ2UpXG4gXHRcdGdvdG8gZXJyX2Noc2M7XG4gXG4gXHQvKiBxZHIgaXMgdXNlZCBpbiBjY3cxLmNkYSB3aGljaCBpcyB1MzIgKi9cbi1cdGlycV9wdHItXHUwMDNlcWRyID0gKHN0cnVjdCBxZHIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdGlycV9wdHItXHUwMDNlcWRyID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghaXJxX3B0ci1cdTAwM2VxZHIpXG4gXHRcdGdvdG8gZXJyX3FkcjtcbiBcbkBAIC0xMDA0LDE0ICsxMDA1LDE0IEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfcXVldWVzOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyLVx1MDAzZXFkcik7XG4rXHRrZnJlZShpcnFfcHRyLVx1MDAzZXFkcik7XG4gZXJyX3Fkcjpcbi1cdGZyZWVfcGFnZShpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSk7XG4rXHRrZnJlZShpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSk7XG4gZXJyX2Noc2M6XG4gZXJyX2RiZjpcbiBcdGtmcmVlKGlycV9wdHItXHUwMDNlY2N3KTtcbiBlcnJfY2N3OlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyKTtcbitcdGtmcmVlKGlycV9wdHIpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxZGlvX2FsbG9jYXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jXG5pbmRleCBlYTA5YWFkYWFlNGVjLi5jMDIxNWE3ZDI5YTgxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jXG5AQCAtMzUsNyArMzUsNyBAQCB2b2lkIHFkaW9fZnJlZV9idWZmZXJzKHN0cnVjdCBxZGlvX2J1ZmZlciAqKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KVxuIFx0aW50IHBvcztcbiBcbiBcdGZvciAocG9zID0gMDsgcG9zIFx1MDAzYyBjb3VudDsgcG9zICs9IFFCVUZGX1BFUl9QQUdFKVxuLVx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zltwb3NdKTtcbitcdFx0a2ZyZWUoYnVmW3Bvc10pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxZGlvX2ZyZWVfYnVmZmVycyk7XG4gXG5AQCAtNDksNyArNDksNyBAQCBpbnQgcWRpb19hbGxvY19idWZmZXJzKHN0cnVjdCBxZGlvX2J1ZmZlciAqKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KVxuIFx0aW50IHBvcztcbiBcbiBcdGZvciAocG9zID0gMDsgcG9zIFx1MDAzYyBjb3VudDsgcG9zICs9IFFCVUZGX1BFUl9QQUdFKSB7XG4tXHRcdGJ1Zltwb3NdID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuK1x0XHRidWZbcG9zXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFidWZbcG9zXSkge1xuIFx0XHRcdHFkaW9fZnJlZV9idWZmZXJzKGJ1ZiwgY291bnQpO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTgzLDcgKzgzLDcgQEAgc3RhdGljIHZvaWQgX19xZGlvX2ZyZWVfcXVldWVzKHN0cnVjdCBxZGlvX3EgKipxdWV1ZXMsIHVuc2lnbmVkIGludCBjb3VudClcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpKyspIHtcbiBcdFx0cSA9IHF1ZXVlc1tpXTtcbi1cdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXEtXHUwMDNlc2xfcGFnZSk7XG4rXHRcdGtmcmVlKHEtXHUwMDNlc2xfcGFnZSk7XG4gXHRcdGttZW1fY2FjaGVfZnJlZShxZGlvX3FfY2FjaGUsIHEpO1xuIFx0fVxuIH1cbkBAIC0xMDksNyArMTA5LDcgQEAgc3RhdGljIGludCBfX3FkaW9fYWxsb2NhdGVfcXMoc3RydWN0IHFkaW9fcSAqKmlycV9wdHJfcXMsIGludCBucl9xdWV1ZXMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcbi1cdFx0cS1cdTAwM2VzbF9wYWdlID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRcdHEtXHUwMDNlc2xfcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFxLVx1MDAzZXNsX3BhZ2UpIHtcbiBcdFx0XHRrbWVtX2NhY2hlX2ZyZWUocWRpb19xX2NhY2hlLCBxKTtcbiBcdFx0XHRfX3FkaW9fZnJlZV9xdWV1ZXMoaXJxX3B0cl9xcywgaSk7XG5AQCAtMjQ5LDExICsyNDksMTEgQEAgaW50IHFkaW9fc2V0dXBfZ2V0X3NzcWQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLFxuIFxuIFx0REJGX0VWRU5UKFwiZ2V0c3NxZDolNHhcIiwgc2NoaWQtXHUwMDNlc2NoX25vKTtcbiBcdGlmICghaXJxX3B0cikge1xuLVx0XHRzc3FkID0gKHN0cnVjdCBjaHNjX3NzcWRfYXJlYSAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTtcbitcdFx0c3NxZCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFzc3FkKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fSBlbHNlIHtcbi1cdFx0c3NxZCA9IChzdHJ1Y3QgY2hzY19zc3FkX2FyZWEgKilpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZTtcbitcdFx0c3NxZCA9IGlycV9wdHItXHUwMDNlY2hzY19wYWdlO1xuIFx0fVxuIFxuIFx0cmMgPSBjaHNjX3NzcWQoKnNjaGlkLCBzc3FkKTtcbkBAIC0yNzAsNyArMjcwLDcgQEAgaW50IHFkaW9fc2V0dXBfZ2V0X3NzcWQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLFxuIFxuIG91dDpcbiBcdGlmICghaXJxX3B0cilcbi1cdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNzcWQpO1xuK1x0XHRrZnJlZShzc3FkKTtcbiBcbiBcdHJldHVybiByYztcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmNcbmluZGV4IGUxNjdhYTc1YzNkZmYuLmEyZmY1MTg4NzUzN2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jXG4rKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jXG5AQCAtMTM2LDcgKzEzNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYWlycV9zdHJ1Y3QgdGlxZGlvX2FpcnEgPSB7XG4gXG4gc3RhdGljIGludCBzZXRfc3ViY2hhbm5lbF9pbmQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLCBpbnQgcmVzZXQpXG4ge1xuLVx0c3RydWN0IGNoc2Nfc2Nzc2NfYXJlYSAqc2Nzc2MgPSAodm9pZCAqKWlycV9wdHItXHUwMDNlY2hzY19wYWdlO1xuK1x0c3RydWN0IGNoc2Nfc2Nzc2NfYXJlYSAqc2Nzc2MgPSBpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZTtcbiBcdGRtYTY0X3Qgc3VtbWFyeV9pbmRpY2F0b3JfYWRkciwgc3ViY2hhbm5lbF9pbmRpY2F0b3JfYWRkcjtcbiBcdGludCByYztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jIGIvZHJpdmVycy9zMzkwL2Npby9zY20uY1xuaW5kZXggMTcxMjEyYTZkMmQ5Yy4uYjc5ZmUwMjNhYjhkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vc2NtLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jaW8vc2NtLmNcbkBAIC0xMyw2ICsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZWFkbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJjaHNjLmhcIlxuIFxuQEAgLTIyNCwxMiArMjI1LDEyIEBAIHN0YXRpYyBpbnQgc2NtX2FkZChzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm8sIHNpemVfdCBudW0pXG4gXG4gaW50IHNjbV91cGRhdGVfaW5mb3JtYXRpb24odm9pZClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm87XG4rXHRzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm8gX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gXHR1NjQgdG9rZW4gPSAwO1xuIFx0c2l6ZV90IG51bTtcbiBcdGludCByZXQ7XG4gXG4tXHRzY21faW5mbyA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdHNjbV9pbmZvID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2NtX2luZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTI1MCw4ICsyNTEsNiBAQCBpbnQgc2NtX3VwZGF0ZV9pbmZvcm1hdGlvbih2b2lkKVxuIFx0XHR0b2tlbiA9IHNjbV9pbmZvLVx1MDAzZXJlc3RvaztcbiBcdH0gd2hpbGUgKHRva2VuKTtcbiBcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY21faW5mbyk7XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjM1LjY2Nzg2MDQ4MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMTQ2NDExOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgQU1ENjQgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaWYgaXQgaGFzIGFueSByZWxldmFuY2UgdG8gdGhlIGBhbWQ2NGAgYXJjaGl0ZWN0dXJlIEknbSB3b3JraW5nIHdpdGguIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGNsZWFybHkgc3BlY2lmaWVkIGFzIGBhbWQ2NGAsIHNvIHRoYXQncyB0aGUgZm9jdXMuIE5vdywgbGV0J3MgbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMuXG5cbkhtbSwgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiB0aGUgYHMzOTBgIGFyY2hpdGVjdHVyZSwganVkZ2luZyBieSB0aGUgZmlsZSBwYXRocy4gSSBzZWUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oYCB3aGljaCBpcyBhbiBgczM5MGAgc3BlY2lmaWMgaGVhZGVyLCBhbmQgYSB3aG9sZSBzbGV3IG9mIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvczM5MC9jaW8vYCBkaXJlY3RvcnkuIFRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byB0aGUgYHMzOTBgIENJTyBkcml2ZXIuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgYW55IG9mIHRoaXMgYHMzOTBgIGNvZGUgaXMgZXZlbiBjb21waWxlZCBvciByZWFjaGFibGUgb24gYW4gYGFtZDY0YCBzeXN0ZW0uIEl0J3MgaGlnaGx5IHVubGlrZWx5LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGdyZXAgdGhlIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBmaWxlcyB0byBzZWUgaWYgYW55IG9mIHRoZXNlIGBzMzkwYCBkcml2ZXJzIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGZvciBgYW1kNjRgIG9yIGluY2x1ZGVkIGluIHNvbWUgZ2VuZXJhbCBidWlsZCBwcm9jZXNzLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZTsgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgYW5kIHdpbGwgdGVsbCBtZSB3aGV0aGVyIEkgbmVlZCB0byBwYXkgYW55IGZ1cnRoZXIgYXR0ZW50aW9uIHRvIHRoaXMgcGF0Y2ggaW4gdGhlIGNvbnRleHQgb2YgbXkgYGFtZDY0YCB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMyOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjM4Ljc4MjUwMzgxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQzMDUwNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRyaXZlcnMvczM5MFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05OD1LZXJuZWwgcGFyYW1ldGVyc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMTEzOC1cXHRkYXNkPVxcdFxcdFtIVyxORVRdXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MTEzOTpcXHRcXHRcXHRTZWUgaGVhZGVyIG9mIGRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTExNDAtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWFwLWxvY2tpbmcucnN0PTg9d2lsbCBiZSB1c2VkIHRvIGRlbm90ZSBpbnN0YW5jZXMgb2YgdGhlIHN0cnVjdHVyZXMgaGVyZWluIGRlc2NyaWJlZDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tYXAtbG9ja2luZy5yc3QtMTUtXFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdDoxNjpUaGUgTWF0cml4IERldmljZXMgTG9jayAoZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaClcXG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWFwLWxvY2tpbmcucnN0LTE3LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdD01Mj1iZWVuIGF0dGFjaGVkIHRvIHRoZSBLVk0gZ3Vlc3QuXFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdC01My1cXG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWFwLWxvY2tpbmcucnN0OjU0OlRoZSBHdWVzdHMgTG9jayAoZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaClcXG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWFwLWxvY2tpbmcucnN0LTU1LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdD03OT1zdHJhbmdlIHNpZGUgZWZmZWN0cyBtYXkgaGFwcGVuLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtODMtXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3Q6ODQ6Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmNcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC04NS0gICA6ZXhwb3J0OlxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTg2LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0Ojg3Oi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuY1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTg4LSAgIDpleHBvcnQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdD05NT1hdHRhY2hlZCBkZXZpY2UuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC05OS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdDoxMDA6Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvczM5MC9jaW8vY21mLmNcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC0xMDEtICAgOmV4cG9ydDpcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0PTExMj1jY3cgZ3JvdXAgZGV2aWNlc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtMTE3LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0OjExODouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtMTE5LSAgIDpleHBvcnQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdD0xMzI9aW50ZXJydXB0cyBhbmQgaW50ZXJydXB0IHZlY3RvcnMuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtMTMzLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0OjEzNDouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9zMzkwL2Npby9haXJxLmNcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC0xMzUtICAgOmV4cG9ydDpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MjcxPVVzZSBiZGV2X3JlYWRfb25seShiZGV2KSBpbnN0ZWFkIG9mIGlzX3JlYWRfb25seShrZGV2KS4gIFRoZSBsYXR0ZXJcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjI3MjppcyBzdGlsbCBhbGl2ZSwgYnV0IG9ubHkgYmVjYXVzZSBvZiB0aGUgbWVzcyBpbiBkcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMjczLUFzIHNvb24gYXMgaXQgZ2V0cyBmaXhlZCBpc19yZWFkX29ubHkoKSB3aWxsIGRpZS5cXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0PTczPUNvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHNcXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTExMC0nMicgICAwMS0wNCAgbGludXgvaTJvLmhcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdDoxMTE6JzMnICAgMDAtMEYgIGRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdCFcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdC0xMTItJzMnICAgMDAtMUYgIGxpbnV4L3N1c3BlbmRfaW9jdGxzLmgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdCFcXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTMxNC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2NtYWlsdG86b2VAcG9ydC5kZVxcdTAwM2VcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdDozMTU6J3onICAgMTAtNEYgIGRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdCFcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdC0zMTYtJ3wnICAgMDAtN0YgIGxpbnV4L21lZGlhLmhcXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTM5OC0weENGICAwMiAgICAgZnMvc21iL2NsaWVudC9jaWZzX2lvY3RsLmhcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdDozOTk6MHhERCAgMDAtM0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaRkNQIGRldmljZSBkcml2ZXIgc2VlIGRyaXZlcnMvczM5MC9zY3NpL1xcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTQwMC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2NtYWlsdG86YWhlcnJtYW5AZGUuaWJtLmNvbVxcdTAwM2VcXG4tLVxcbk1BSU5UQUlORVJTPTE0Mzg4PUY6XFx0YXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXFxuTUFJTlRBSU5FUlM6MTQzODk6RjpcXHRkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jXFxuTUFJTlRBSU5FUlM6MTQzOTA6RjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL3MzOTB4L3V2ZGV2aWNlL1xcbk1BSU5UQUlORVJTLTE0MzkxLUY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyovczM5MC9cXG4tLVxcbk1BSU5UQUlORVJTPTE4OTAyPUY6XFx0ZHJpdmVycy9wdHAvXFxuTUFJTlRBSU5FUlM6MTg5MDM6RjpcXHRkcml2ZXJzL3MzOTAvbmV0L1xcbk1BSU5UQUlORVJTLTE4OTA0LUY6XFx0aW5jbHVkZS9kdC1iaW5kaW5ncy9uZXQvXFxuLS1cXG5NQUlOVEFJTkVSUz0yNDA3Nz1GOlxcdGRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLXMzOTAuY1xcbk1BSU5UQUlORVJTOjI0MDc4OkY6XFx0ZHJpdmVycy9zMzkwL1xcbk1BSU5UQUlORVJTLTI0MDc5LUY6XFx0ZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jXFxuLS1cXG5NQUlOVEFJTkVSUz0yNDA4NT1TOlxcdFN1cHBvcnRlZFxcbk1BSU5UQUlORVJTOjI0MDg2OkY6XFx0ZHJpdmVycy9zMzkwL2Npby9cXG5NQUlOVEFJTkVSUy0yNDA4Ny1cXG4tLVxcbk1BSU5UQUlORVJTPTI0MTAzPUY6XFx0YmxvY2svcGFydGl0aW9ucy9pYm0uY1xcbk1BSU5UQUlORVJTOjI0MTA0OkY6XFx0ZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QqXFxuTUFJTlRBSU5FUlMtMjQxMDUtRjpcXHRpbmNsdWRlL2xpbnV4L2Rhc2RfbW9kLmhcXG4tLVxcbk1BSU5UQUlORVJTPTI0MTI4PVM6XFx0U3VwcG9ydGVkXFxuTUFJTlRBSU5FUlM6MjQxMjk6RjpcXHRkcml2ZXJzL3MzOTAvbmV0LyppdWN2Klxcbk1BSU5UQUlORVJTLTI0MTMwLUY6XFx0aW5jbHVkZS9uZXQvaXVjdi9cXG4tLVxcbk1BSU5UQUlORVJTPTI0MTQ3PVM6XFx0U3VwcG9ydGVkXFxuTUFJTlRBSU5FUlM6MjQxNDg6RjpcXHRkcml2ZXJzL3MzOTAvbmV0L1xcbk1BSU5UQUlORVJTLTI0MTQ5LVxcbi0tXFxuTUFJTlRBSU5FUlM9MjQxNjg9UzpcXHRTdXBwb3J0ZWRcXG5NQUlOVEFJTkVSUzoyNDE2OTpGOlxcdGRyaXZlcnMvczM5MC9ibG9jay9zY20qXFxuTUFJTlRBSU5FUlM6MjQxNzA6RjpcXHRkcml2ZXJzL3MzOTAvY2lvL3NjbS5jXFxuTUFJTlRBSU5FUlMtMjQxNzEtXFxuLS1cXG5NQUlOVEFJTkVSUz0yNDE4MD1GOlxcdERvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tYXAqXFxuTUFJTlRBSU5FUlM6MjQxODE6RjpcXHRkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXAqXFxuTUFJTlRBSU5FUlMtMjQxODItXFxuLS1cXG5NQUlOVEFJTkVSUz0yNDE5MT1GOlxcdERvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tY2N3LnJzdFxcbk1BSU5UQUlORVJTOjI0MTkyOkY6XFx0ZHJpdmVycy9zMzkwL2Npby92ZmlvX2NjdypcXG5NQUlOVEFJTkVSUy0yNDE5My1GOlxcdGluY2x1ZGUvdWFwaS9saW51eC92ZmlvX2Njdy5oXFxuLS1cXG5NQUlOVEFJTkVSUz0yNDIxNj1GOlxcdGFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL3pjcnlwdC5oXFxuTUFJTlRBSU5FUlM6MjQyMTc6RjpcXHRkcml2ZXJzL3MzOTAvY3J5cHRvL1xcbk1BSU5UQUlORVJTLTI0MjE4LVxcbi0tXFxuTUFJTlRBSU5FUlM9MjQyMjI9UzpcXHRTdXBwb3J0ZWRcXG5NQUlOVEFJTkVSUzoyNDIyMzpGOlxcdGRyaXZlcnMvczM5MC9zY3NpL3pmY3BfKlxcbk1BSU5UQUlORVJTLTI0MjI0LVxcbi0tXFxuTUFJTlRBSU5FUlM9Mjg5MTQ9RjpcXHRhcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS92aXJ0aW8tY2N3LmhcXG5NQUlOVEFJTkVSUzoyODkxNTpGOlxcdGRyaXZlcnMvczM5MC92aXJ0aW8vXFxuTUFJTlRBSU5FUlMtMjg5MTYtXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZT0yND1LQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sIC1Xbm8tZGVmYXVsdC1jb25zdC1pbml0LXVuc2FmZSlcXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZS0yNS1cXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZToyNjpDRkxBR1Nfc2NscF9lYXJseV9jb3JlLm8gKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvczM5MC9jaGFyXFxuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGUtMjctXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9zY2xwX2Vhcmx5X2NvcmUuYy0yLSNpbmNsdWRlIFxcXCJib290LmhcXFwiXFxuYXJjaC9zMzkwL2Jvb3Qvc2NscF9lYXJseV9jb3JlLmM6MzojaW5jbHVkZSBcXFwiLi4vLi4vLi4vZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseV9jb3JlLmNcXFwiXFxuYXJjaC9zMzkwL2Jvb3Qvc2NscF9lYXJseV9jb3JlLmMtNC1cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaD0zNzQ9c3RydWN0IGdlbl9wb29sICpjaW9fZ3BfZG1hX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LCBpbnQgbnJfcGFnZXMpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaC0zNzUtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oOjM3NjovKiBGdW5jdGlvbiBmcm9tIGRyaXZlcnMvczM5MC9jaW8vY2hzYy5jICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oLTM3Ny1pbnQgY2hzY19zc3RwYyh2b2lkICpwYWdlLCB1bnNpZ25lZCBpbnQgb3AsIHUxNiBjdHJsLCBsb25nICpjbG9ja19kZWx0YSk7XFxuLS1cXG5hcmNoL3MzOTAvbW0vY21tLmM9MzE9TU9EVUxFX1BBUk1fREVTQyhzZW5kZXIsXFxuLS1cXG5hcmNoL3MzOTAvbW0vY21tLmMtMzMtXFxuYXJjaC9zMzkwL21tL2NtbS5jOjM0OiNpbmNsdWRlIFxcXCIuLi8uLi8uLi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmhcXFwiXFxuYXJjaC9zMzkwL21tL2NtbS5jLTM1LVxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI2Nz1jb25maWcgU1VOVkRDXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjczLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoyNzQ6c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjc1LVxcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWc9MzQ1PWNvbmZpZyBURUxDTE9DS1xcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWctMzU3LVxcbmRyaXZlcnMvY2hhci9LY29uZmlnOjM1ODpzb3VyY2UgXFxcImRyaXZlcnMvczM5MC9jaGFyL0tjb25maWdcXFwiXFxuZHJpdmVycy9jaGFyL0tjb25maWctMzU5LVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz01MzA9c291cmNlIFxcXCJkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MzEtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1MzI6c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvbmV0L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MzMtXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMtMy0gKiBBdXRob3IocykuLi4uLi46IEhvbGdlciBTbW9saW5za2kgXFx1MDAzY0hvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbVxcdTAwM2VcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmM6NDogKiBCYXNlZCBvbi4uLi4uLi46IGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9tZGlzay5jXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTUtICogLi4uLi4uLi4uLi4uLi4uOiBieSBIYXJ0bXVudCBQZW5uZXIgXFx1MDAzY2hwZW5uZXJAZGUuaWJtLmNvbVxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuaC0zLSAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSBcXHUwMDNjSG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuaDo0OiAqIEJhc2VkIG9uLi4uLi4uLjogbGludXgvZHJpdmVycy9zMzkwL2Jsb2NrL21kaXNrLmhcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmgtNS0gKiAuLi4uLi4uLi4uLi4uLi46IGJ5IEhhcnRtdW50IFBlbm5lciBcXHUwMDNjaHBlbm5lckBkZS5pYm0uY29tXFx1MDAzZVxcbi0tXFxuaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmgtMi0vKlxcbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oOjM6ICogIGRyaXZlcnMvczM5MC9uZXQvaXVjdi5oXFxuaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmgtNC0gKiAgICBJVUNWIGJhc2Ugc3VwcG9ydC5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlPTIzPVRBUkdFVFMgKz0gZHJpdmVycy9udHN5bmNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZToyNDpUQVJHRVRTICs9IGRyaXZlcnMvczM5MHgvdXZkZXZpY2VcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZS0yNS1UQVJHRVRTICs9IGRyaXZlcnMvbmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjQwLjYyNTU1OTYyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzkzMTM1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGluIHRoZSBwcm9tcHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIERyaXZlciBJbmZyYXN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkcml2ZXIgYnVpbGQgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGZvciBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGNoYW5uZWwgSS9PIChDSU8pIHN1YnN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgc3RydWN0dXJlcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYGRyaXZlcnMvTWFrZWZpbGVgIGluIHRoZSByb290IGRyaXZlcnMgZGlyZWN0b3J5IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZnJhbWV3b3JrIGFuZCBob3cgdGhlc2UgczM5MC9DSU8gZHJpdmVycyBmaXQgaW4uIEFyZSB0aGVyZSBjb25kaXRpb25hbCBpbmNsdWRlcz8gQW55IGdlbmVyaWMgcnVsZXM/IFRoZW4sIHRvIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIHMzOTAvQ0lPIGNvZGUsIEknbGwgbmVlZCB0byBleGFtaW5lIGBkcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlYC4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZXMgYXJlIGJlaW5nIGJ1aWx0LCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgaG9wZWZ1bGx5IGhvdyB0aGV5J3JlIGJlaW5nIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwuIEFsdGVybmF0aXZlbHksIGl0J3MgYWxzbyB3b3J0aCBjaGVja2luZyBgZHJpdmVycy9zMzkwL2Npby9LY29uZmlnYC4gU29tZXRpbWVzIHRoZSBidWlsZCBwcm9jZXNzIGlzIGhlYXZpbHkgaW5mbHVlbmNlZCBieSB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgdGhpcyBtaWdodCBnaXZlIG1lIGNsdWVzIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBmZWF0dXJlIGZsYWdzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGRyaXZlci4gSXQncyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIGhvdyB0aGUgcGllY2VzIGFyZSBwdXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDE5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MTI6NDMuMjA0ODc1MTk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzU4OTMyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MTI6NDMuMjU3NjQwOTM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwMjE4MTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNYWtlZmlsZSBKdW5nbGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgYnVpbHQsIG9yIHBvdGVudGlhbGx5IGluY2x1ZGVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGxpa2VseSBhIGtlcm5lbCBkcml2ZXIsIHRoZSBgTWFrZWZpbGVgIGlzIHRoZSBwbGFjZSB0byBiZS4gVGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIGRyaXZlcnMgaXMgdXN1YWxseSB1bmRlciB0aGUgYGRyaXZlcnMvYCBkaXJlY3RvcnksIHNvIEknbGwgc3RhcnQgdGhlcmUuIEFuZCBzaW5jZSB0aGlzIHNlZW1zIGFyY2hpdGVjdHVyZSBzcGVjaWZpYywgb3IgYXQgbGVhc3QgcG90ZW50aWFsbHkgc28sIEknbGwgY2hlY2sgYGRyaXZlcnMvTWFrZWZpbGVgIGZpcnN0LCBhcyB0aGF0IGlzIHRoZSBnZW5lcmFsIG9uZS4gVGhlbiBpZiB0aGF0IGRvZXMgbm90IGNvbnRhaW4gd2hhdCBJIGFtIGxvb2tpbmcgZm9yLCBJIHNob3VsZCBpbW1lZGlhdGVseSBsb29rIGluIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgbG9jYXRpb24sIHNvIGBkcml2ZXJzL3MzOTAvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc0NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjQ1Ljg1OTgyNTUwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM4MzA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzMzkwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9NYWtlZmlsZT0xOTk9b2JqLSQoQ09ORklHX0RJQlMpXFx0XFx0Kz0gZGlicy9cXG5kcml2ZXJzL01ha2VmaWxlOjIwMDpvYmotJChDT05GSUdfUzM5MClcXHRcXHQrPSBzMzkwL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDoxMjo0NS45MTMyMTQ1NDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDE1NzgxMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5yZWFjaGFibGUgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGBkcml2ZXJzL01ha2VmaWxlYCBoYXMgYWRkZWQgYG9iai0kKENPTkZJR19TMzkwKSArPSBzMzkwL2AsIG1lYW5pbmcgdGhhdCBzdHVmZiB1bmRlciBgZHJpdmVycy9zMzkwL2AgaXMgb25seSBidWlsdCBpZiB0aGUgYENPTkZJR19TMzkwYCBvcHRpb24gaXMgc2V0LiBBbmQsIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmhgIGlzICphbHNvKiBvbmx5IGluY2x1ZGVkIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IHZpb2xhdGUgdGhlIHByb21wdCdzIG5lZ2F0aXZlIGNyaXRlcmlhLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgd29ycmllZCBhYm91dCB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuIFRoZSBwcm9tcHQgbGlzdHMgYSBmZXcsIGJ1dCB0aGUgcmVsZXZhbnQgb25lcyBoZXJlIGFyZSBjb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIGFtZDY0LlxuXG5HaXZlbiB0aGF0IHRoZSB0YXJnZXQgaXMgYW1kNjQsIGFuZCB0aGUgbW9kaWZpZWQgZmlsZXMgYXJlIGFsbCBpbiBgYXJjaC9zMzkwL2AgYW5kIGBkcml2ZXJzL3MzOTAvY2lvL2AsIGFuZCB0aGF0IGBDT05GSUdfUzM5MGAgaXMgKm9ubHkqIGRlZmluZWQgZm9yIHMzOTAsIHRoaXMgaXMgcHJldHR5IGNsZWFyLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IG5vdGhpbmcgaW4gYGRyaXZlcnMvczM5MC9jaW9gIG9yIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaGAgY2FuIHNvbWVob3cgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgb24gYW1kNjQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvczM5MC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAxNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDoxMjo0OS45Mjg5OTkxNzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDA0MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc1OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9zMzkwL01ha2VmaWxlLTUtXFxuZHJpdmVycy9zMzkwL01ha2VmaWxlOjY6b2JqLXkgKz0gY2lvLyBibG9jay8gY2hhci8gY3J5cHRvLyBuZXQvIHNjc2kvIHZpcnRpby9cXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYy0zMC0jaW5jbHVkZSBcXHUwMDNjYXNtL2ViY2RpYy5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYzozMTojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYy0zMi0jaW5jbHVkZSBcXHUwMDNjYXNtL2Njd2Rldi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTI3LSNpbmNsdWRlIFxcdTAwM2Nhc20vY2N3ZGV2LmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jOjI4OiNpbmNsdWRlIFxcdTAwM2Nhc20vY2lvLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTI5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jLTI2LSNpbmNsdWRlIFxcdTAwM2Nhc20vY2N3ZGV2LmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jOjI3OiNpbmNsdWRlIFxcdTAwM2Nhc20vY2lvLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jLTI4LSNpbmNsdWRlIFxcdTAwM2Nhc20vZWJjZGljLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9mczMyNzAuYy0yMi0jaW5jbHVkZSBcXHUwMDNjYXNtL2Njd2Rldi5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jOjIzOiNpbmNsdWRlIFxcdTAwM2Nhc20vY2lvLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMtMjQtI2luY2x1ZGUgXFx1MDAzY2FzbS9lYmNkaWMuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy0yMi0jaW5jbHVkZSBcXHUwMDNjYXNtL2Njd2Rldi5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYzoyMzojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy0yNC0jaW5jbHVkZSBcXHUwMDNjYXNtL2ViY2RpYy5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jLTIwLSNpbmNsdWRlIFxcdTAwM2Nhc20vbWFjaGluZS5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYzoyMTojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0yMi0jaW5jbHVkZSBcXHUwMDNjYXNtL2Njd2Rldi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZT0xMD1DRkxBR1NfdmZpb19jY3dfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUtMTEtXFxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZToxMjpvYmoteSArPSBhaXJxLm8gYmxhY2tsaXN0Lm8gY2hzYy5vIGNpby5vIGNzcy5vIGNocC5vIGlkc2V0Lm8gaXNjLm8gXFxcXFxcbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGU6MTM6XFx0ZmN4Lm8gaXRjdy5vIGNydy5vIGNjd3JlcS5vIHRyYWNlLm8gaW9hc20ubyBjaW9fZGVidWdmcy5vXFxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZS0xNC1jY3dfZGV2aWNlLW9ianMgKz0gZGV2aWNlLm8gZGV2aWNlX2ZzbS5vIGRldmljZV9vcHMub1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZT0yNz1vYmotJChDT05GSUdfVkZJT19DQ1cpICs9IHZmaW9fY2N3Lm9cXG5kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlLTI4LVxcbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGU6Mjk6b2JqLSQoQ09ORklHX0NJT19JTkpFQ1QpICs9IGNpb19pbmplY3Qub1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMjMtI2luY2x1ZGUgXFx1MDAzY2FzbS9pc2MuaFxcdTAwM2VcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzoyNDojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTI1LVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jOjI2OiNpbmNsdWRlIFxcXCJjaW8uaFxcXCJcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzoyNzojaW5jbHVkZSBcXFwiY2lvX2RlYnVnLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMjgtI2luY2x1ZGUgXFxcImlvYXNtLmhcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYz00MT1pbnQgcmVnaXN0ZXJfYWRhcHRlcl9pbnRlcnJ1cHQoc3RydWN0IGFpcnFfc3RydWN0ICphaXJxKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtNDctXFx0aWYgKCFhaXJxLVxcdTAwM2Vsc2lfcHRyKSB7XFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6NDg6XFx0XFx0YWlycS1cXHUwMDNlbHNpX3B0ciA9IGNpb19kbWFfemFsbG9jKDEpO1xcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTQ5LVxcdFxcdGlmICghYWlycS1cXHUwMDNlbHNpX3B0cilcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jPTY3PXZvaWQgdW5yZWdpc3Rlcl9hZGFwdGVyX2ludGVycnVwdChzdHJ1Y3QgYWlycV9zdHJ1Y3QgKmFpcnEpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy04MC1cXHRpZiAoYWlycS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJRX1BUUl9BTExPQ0FURUQpIHtcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzo4MTpcXHRcXHRjaW9fZG1hX2ZyZWUoYWlycS1cXHUwMDNlbHNpX3B0ciwgMSk7XFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtODItXFx0XFx0YWlycS1cXHUwMDNlbHNpX3B0ciA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYz04OD1zdGF0aWMgaXJxcmV0dXJuX3QgZG9fYWlycV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZHVtbXkpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy05NC1cXHR0cGlfaW5mbyA9IFxcdTAwMjZnZXRfaXJxX3JlZ3MoKS1cXHUwMDNldHBpX2luZm87XFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6OTU6XFx0dHJhY2VfczM5MF9jaW9fYWRhcHRlcl9pbnQodHBpX2luZm8pO1xcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTk2LVxcdGhlYWQgPSBcXHUwMDI2YWlycV9saXN0c1t0cGlfaW5mby1cXHUwMDNlaXNjXTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jPTEyNz1zdHJ1Y3QgYWlycV9pdiAqYWlycV9pdl9jcmVhdGUodW5zaWduZWQgbG9uZyBiaXRzLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMTUxLVxcdH0gZWxzZSB7XFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6MTUyOlxcdFxcdGl2LVxcdTAwM2V2ZWN0b3IgPSBjaW9fZG1hX3phbGxvYyhzaXplKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy0xNTMtXFx0XFx0aWYgKCFpdi1cXHUwMDNldmVjdG9yKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMTkwLVxcdGVsc2UgaWYgKCEoaXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQUlSUV9JVl9HVUVTVFZFQykpXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6MTkxOlxcdFxcdGNpb19kbWFfZnJlZShpdi1cXHUwMDNldmVjdG9yLCBzaXplKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy0xOTItXFx0a2ZyZWUoaXYpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM9MjAyPXZvaWQgYWlycV9pdl9yZWxlYXNlKHN0cnVjdCBhaXJxX2l2ICppdilcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTIwOS1cXHRlbHNlIGlmICghKGl2LVxcdTAwM2VmbGFncyBcXHUwMDI2IEFJUlFfSVZfR1VFU1RWRUMpKVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jOjIxMDpcXHRcXHRjaW9fZG1hX2ZyZWUoaXYtXFx1MDAzZXZlY3RvciwgaXZfc2l6ZShpdi1cXHUwMDNlYml0cykpO1xcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTIxMS1cXHRrZnJlZShpdi1cXHUwMDNlYXZhaWwpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM9MzA1PWludCBfX2luaXQgYWlycV9pbml0KHZvaWQpXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMzA2LXtcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzozMDc6XFx0YWlycV9pdl9jYWNoZSA9IGRtYV9wb29sX2NyZWF0ZShcXFwiYWlycV9pdl9jYWNoZVxcXCIsIGNpb19nZXRfZG1hX2Nzc19kZXYoKSxcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy0zMDgtXFx0XFx0XFx0XFx0XFx0Y2FjaGVfbGluZV9zaXplKCksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTEwLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MTE6I2RlZmluZSBwcl9mbXQoZm10KSBcXFwiY2lvOiBcXFwiIGZtdFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMTItXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzoyMjojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjMtI2luY2x1ZGUgXFx1MDAzY2FzbS9pcGwuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjUtI2luY2x1ZGUgXFxcImJsYWNrbGlzdC5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MjY6I2luY2x1ZGUgXFxcImNpby5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6Mjc6I2luY2x1ZGUgXFxcImNpb19kZWJ1Zy5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjgtI2luY2x1ZGUgXFxcImNzcy5oXFxcIlxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0zMi0gKiBcXFwiQmxhY2tsaXN0aW5nXFxcIiBvZiBjZXJ0YWluIGRldmljZXM6XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozMzogKiBEZXZpY2UgbnVtYmVycyBnaXZlbiBpbiB0aGUgY29tbWFuZGxpbmUgYXMgY2lvX2lnbm9yZT0uLi4gd29uJ3QgYmUga25vd25cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTM0LSAqIHRvIExpbnV4Llxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz00OT1zdGF0aWMgaW50IGJsYWNrbGlzdF9yYW5nZShyYW5nZV9hY3Rpb24gYWN0aW9uLCB1bnNpZ25lZCBpbnQgZnJvbV9zc2lkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy01NC1cXHRcXHRpZiAobXNndHJpZ2dlcilcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjU1OlxcdFxcdFxcdHByX3dhcm4oXFxcIjAuJXguJTA0eCB0byAwLiV4LiUwNHggaXMgbm90IGEgdmFsaWQgcmFuZ2UgZm9yIGNpb19pZ25vcmVcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy01Ni1cXHRcXHRcXHRcXHRmcm9tX3NzaWQsIGZyb20sIHRvX3NzaWQsIHRvKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MTAxPXN0YXRpYyBpbnQgcGFyc2VfYnVzaWQoY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgKmNzc2lkLCB1bnNpZ25lZCBpbnQgKnNzaWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTE0Mi1cXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgbXNndHJpZ2dlcilcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjE0MzpcXHRcXHRwcl93YXJuKFxcXCIlcyBpcyBub3QgYSB2YWxpZCBkZXZpY2UgZm9yIHRoZSBjaW9faWdub3JlIGtlcm5lbCBwYXJhbWV0ZXJcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0xNDQtXFx0XFx0XFx0c3RyKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MjI3PWJsYWNrbGlzdF9zZXR1cCAoY2hhciAqc3RyKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yMzQtXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzoyMzU6X19zZXR1cCAoXFxcImNpb19pZ25vcmU9XFxcIiwgYmxhY2tsaXN0X3NldHVwKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTIzNi1cXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MjQ2PWlzX2JsYWNrbGlzdGVkIChpbnQgc3NpZCwgaW50IGRldm5vKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yNTMtICogRnVuY3Rpb246IGJsYWNrbGlzdF9wYXJzZV9wcm9jX3BhcmFtZXRlcnNcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjI1NDogKiBwYXJzZSB0aGUgc3R1ZmYgd2hpY2ggaXMgcGlwZWQgdG8gL3Byb2MvY2lvX2lnbm9yZVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjU1LSAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0yODk9c3RhdGljIHZvaWQgKlxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MjkwOmNpb19pZ25vcmVfcHJvY19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKm9mZnNldClcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTI5MS17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jPTMwMj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MzAzOmNpb19pZ25vcmVfcHJvY19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0KVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzA0LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MzA3PXN0YXRpYyB2b2lkICpcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjMwODpjaW9faWdub3JlX3Byb2Nfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICppdCwgbG9mZl90ICpvZmZzZXQpXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0zMDkte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0zMjc9c3RhdGljIGludFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MzI4OmNpb19pZ25vcmVfcHJvY19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0KVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzI5LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MzU3PXN0YXRpYyBzc2l6ZV90XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozNTg6Y2lvX2lnbm9yZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzU5LVxcdFxcdCBzaXplX3QgdXNlcl9sZW4sIGxvZmZfdCAqb2Zmc2V0KVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0zOTItXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozOTM6c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjaW9faWdub3JlX3Byb2Nfc2VxX29wcyA9IHtcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjM5NDpcXHQuc3RhcnQgPSBjaW9faWdub3JlX3Byb2Nfc2VxX3N0YXJ0LFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6Mzk1OlxcdC5zdG9wICA9IGNpb19pZ25vcmVfcHJvY19zZXFfc3RvcCxcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjM5NjpcXHQubmV4dCAgPSBjaW9faWdub3JlX3Byb2Nfc2VxX25leHQsXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozOTc6XFx0LnNob3cgID0gY2lvX2lnbm9yZV9wcm9jX3NlcV9zaG93LFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzk4LX07XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jPTQwMD1zdGF0aWMgaW50XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MDE6Y2lvX2lnbm9yZV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MDIte1xcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6NDAzOlxcdHJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFxcdTAwMjZjaW9faWdub3JlX3Byb2Nfc2VxX29wcyxcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQwNC1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGNjd2Rldl9pdGVyKSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQwNi1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQwNzpzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGNpb19pZ25vcmVfcHJvY19vcHMgPSB7XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MDg6XFx0LnByb2Nfb3BlblxcdD0gY2lvX2lnbm9yZV9wcm9jX29wZW4sXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MDktXFx0LnByb2NfcmVhZFxcdD0gc2VxX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQxMS1cXHQucHJvY19yZWxlYXNlXFx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6NDEyOlxcdC5wcm9jX3dyaXRlXFx0PSBjaW9faWdub3JlX3dyaXRlLFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDEzLX07XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jPTQxNT1zdGF0aWMgaW50XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MTY6Y2lvX2lnbm9yZV9wcm9jX2luaXQgKHZvaWQpXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MTcte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MTktXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MjA6XFx0ZW50cnkgPSBwcm9jX2NyZWF0ZShcXFwiY2lvX2lnbm9yZVxcXCIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwgTlVMTCxcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQyMTpcXHRcXHRcXHQgICAgXFx1MDAyNmNpb19pZ25vcmVfcHJvY19vcHMpO1xcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDIyLVxcdGlmICghZW50cnkpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQyNi1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQyNzpfX2luaXRjYWxsIChjaW9faWdub3JlX3Byb2NfaW5pdCk7XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MjgtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMtMjAtXFxuZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jOjIxOiNpbmNsdWRlIFxcdTAwM2Nhc20vY2lvLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jLTIyLSNpbmNsdWRlIFxcdTAwM2Nhc20vY2N3ZGV2LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTgtXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzo5OiNkZWZpbmUgcHJfZm10KGZtdCkgXFxcImNpbzogXFxcIiBmbXRcXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTEwLVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xMy0jaW5jbHVkZSBcXHUwMDNjYXNtL2Njd2Rldi5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTQ6I2luY2x1ZGUgXFx1MDAzY2FzbS9jaW8uaFxcdTAwM2VcXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTE1LVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTYtI2luY2x1ZGUgXFxcImlvX3NjaC5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTc6I2luY2x1ZGUgXFxcImNpby5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTgtI2luY2x1ZGUgXFxcImRldmljZS5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTk6I2luY2x1ZGUgXFxcImNpb19kZWJ1Zy5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMjAtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jPTc0PXN0YXRpYyB2b2lkIGNjd3JlcV9kbyhzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtODgtXFx0XFx0bWVtc2V0KFxcdTAwMjZjZGV2LVxcdTAwM2Vwcml2YXRlLVxcdTAwM2VkbWFfYXJlYS1cXHUwMDNlaXJiLCAwLCBzaXplb2Yoc3RydWN0IGlyYikpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6ODk6XFx0XFx0cmMgPSBjaW9fc3RhcnQoc2NoLCBjcCwgKHU4KSByZXEtXFx1MDAzZW1hc2spO1xcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtOTAtXFx0XFx0aWYgKHJjID09IDApIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTA0LVxcdFxcdC8qIFRlbXBvcmFyeSBpbXByb3BlciBzdGF0dXMuICovXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzoxMDU6XFx0XFx0cmMgPSBjaW9fY2xlYXIoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTEwNi1cXHRcXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jPTE1MD1pbnQgY2N3X3JlcXVlc3RfY2FuY2VsKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xNTgtXFx0cmVxLVxcdTAwM2VjYW5jZWwgPSAxO1xcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTU5OlxcdHJjID0gY2lvX2NsZWFyKHNjaCk7XFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xNjAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYz0yNTQ9dm9pZCBjY3dfcmVxdWVzdF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMjU1LXtcXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjI1NjpcXHRzdHJ1Y3QgaXJiICppcmIgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmNpb19pcmIpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMjU3LVxcdHN0cnVjdCBjY3dfcmVxdWVzdCAqcmVxID0gXFx1MDAyNmNkZXYtXFx1MDAzZXByaXZhdGUtXFx1MDAzZXJlcTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM9MzI2PXZvaWQgY2N3X3JlcXVlc3RfdGltZW91dChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMzMxLVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MzMyOlxcdGlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0zMzMtXFx0XFx0Z290byBlcnI7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTM0OC1cXHR9XFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzozNDk6XFx0cmMgPSBjaW9fY2xlYXIoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTM1MC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2NocC5jLTIzLVxcbmRyaXZlcnMvczM5MC9jaW8vY2hwLmM6MjQ6I2luY2x1ZGUgXFxcImNpby5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2hwLmMtMjUtI2luY2x1ZGUgXFxcImNzcy5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2hwLmMtMjYtI2luY2x1ZGUgXFxcImlvYXNtLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9jaHAuYzoyNzojaW5jbHVkZSBcXFwiY2lvX2RlYnVnLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9jaHAuYy0yOC0jaW5jbHVkZSBcXFwiY2hwLmhcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYy0xMC1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzoxMTojZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJjaW86IFxcXCIgZm10XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMTItXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYy0yMC1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzoyMTojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzYy5jLTIyLSNpbmNsdWRlIFxcdTAwM2Nhc20vY2hwaWQuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzYy5jLTI4LSNpbmNsdWRlIFxcXCJjc3MuaFxcXCJcXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzoyOTojaW5jbHVkZSBcXFwiY2lvLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmM6MzA6I2luY2x1ZGUgXFxcImNpb19kZWJ1Zy5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2hzYy5jLTMxLSNpbmNsdWRlIFxcXCJpb2FzbS5oXFxcIlxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTE5LVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzoyMDojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0yMS0jaW5jbHVkZSBcXHUwMDNjYXNtL2Noc2MuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0yMy1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmM6MjQ6I2luY2x1ZGUgXFxcImNpby5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzoyNTojaW5jbHVkZSBcXFwiY2lvX2RlYnVnLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTI2LSNpbmNsdWRlIFxcXCJjc3MuaFxcXCJcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYz01ND1zdGF0aWMgdm9pZCBjaHNjX3N1YmNoYW5uZWxfaXJxKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtNTctXFx0c3RydWN0IGNoc2NfcmVxdWVzdCAqcmVxdWVzdCA9IHByaXZhdGUtXFx1MDAzZXJlcXVlc3Q7XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjU4OlxcdHN0cnVjdCBpcmIgKmlyYiA9IHRoaXNfY3B1X3B0cihcXHUwMDI2Y2lvX2lyYik7XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTU5LVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTcxLVxcdG1lbWNweShcXHUwMDI2cmVxdWVzdC1cXHUwMDNlaXJiLCBpcmIsIHNpemVvZigqaXJiKSk7XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjcyOlxcdGNpb191cGRhdGVfc2NoaWIoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtNzMtXFx0Y29tcGxldGUoXFx1MDAyNnJlcXVlc3QtXFx1MDAzZWNvbXBsZXRpb24pO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jPTc3PXN0YXRpYyBpbnQgY2hzY19zdWJjaGFubmVsX3Byb2JlKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtODgtXFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZzY2gtXFx1MDAzZWRldiwgcHJpdmF0ZSk7XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjg5OlxcdHJldCA9IGNpb19lbmFibGVfc3ViY2hhbm5lbChzY2gsICh1MzIpdmlydF90b19waHlzKHNjaCkpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy05MC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmM9OTk9c3RhdGljIHZvaWQgY2hzY19zdWJjaGFubmVsX3JlbW92ZShzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTEwMi1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmM6MTAzOlxcdGNpb19kaXNhYmxlX3N1YmNoYW5uZWwoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtMTA0LVxcdHByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNnNjaC1cXHUwMDNlZGV2KTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYz0xMTM9c3RhdGljIHZvaWQgY2hzY19zdWJjaGFubmVsX3NodXRkb3duKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTExNC17XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjExNTpcXHRjaW9fZGlzYWJsZV9zdWJjaGFubmVsKHNjaCk7XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTExNi19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTExLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTI6I2RlZmluZSBwcl9mbXQoZm10KSBcXFwiY2lvOiBcXFwiIGZtdFxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTMtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjIzOiNpbmNsdWRlIFxcdTAwM2Nhc20vY2lvLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNC0jaW5jbHVkZSBcXHUwMDNjYXNtL2RlbGF5LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM1LSNpbmNsdWRlIFxcdTAwM2Nhc20vY3J3LmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozNjojaW5jbHVkZSBcXFwiY2lvLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zNy0jaW5jbHVkZSBcXFwiY3NzLmhcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQxLSNpbmNsdWRlIFxcXCJibGFja2xpc3QuaFxcXCJcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQyOiNpbmNsdWRlIFxcXCJjaW9fZGVidWcuaFxcXCJcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQzLSNpbmNsdWRlIFxcXCJjaHAuaFxcXCJcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDUtXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0NjpkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z19tc2dfaWQ7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0NzpkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z190cmFjZV9pZDtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ4OmRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX2Nyd19pZDtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ5LVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NTA6REVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgaXJiLCBjaW9faXJiKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjUxOkVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjaW9faXJiKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTUyLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNTMtLypcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjU0OiAqIEZ1bmN0aW9uOiBjaW9fZGVidWdfaW5pdFxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNTUtICogSW5pdGlhbGl6ZXMgdGhyZWUgZGVidWcgbG9ncyBmb3IgY29tbW9uIEkvTzpcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjU2OiAqIC0gY2lvX21zZyBsb2dzIGdlbmVyaWMgY2lvIG1lc3NhZ2VzXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo1NzogKiAtIGNpb190cmFjZSBsb2dzIHRoZSBjYWxsaW5nIG9mIGRpZmZlcmVudCBmdW5jdGlvbnNcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjU4OiAqIC0gY2lvX2NydyBsb2dzIG1hY2hpbmUgY2hlY2sgcmVsYXRlZCBjaW8gbWVzc2FnZXNcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTU5LSAqL1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NjA6c3RhdGljIGludCBfX2luaXQgY2lvX2RlYnVnX2luaXQodm9pZClcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTYxLXtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjYyOlxcdGNpb19kZWJ1Z19tc2dfaWQgPSBkZWJ1Z19yZWdpc3RlcihcXFwiY2lvX21zZ1xcXCIsIDE2LCAxLCAxMSAqIHNpemVvZihsb25nKSk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo2MzpcXHRpZiAoIWNpb19kZWJ1Z19tc2dfaWQpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy02NC1cXHRcXHRnb3RvIG91dF91bnJlZ2lzdGVyO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NjU6XFx0ZGVidWdfcmVnaXN0ZXJfdmlldyhjaW9fZGVidWdfbXNnX2lkLCBcXHUwMDI2ZGVidWdfc3ByaW50Zl92aWV3KTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjY2OlxcdGRlYnVnX3NldF9sZXZlbChjaW9fZGVidWdfbXNnX2lkLCAyKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjY3OlxcdGNpb19kZWJ1Z190cmFjZV9pZCA9IGRlYnVnX3JlZ2lzdGVyKFxcXCJjaW9fdHJhY2VcXFwiLCAxNiwgMSwgMTYpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Njg6XFx0aWYgKCFjaW9fZGVidWdfdHJhY2VfaWQpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy02OS1cXHRcXHRnb3RvIG91dF91bnJlZ2lzdGVyO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NzA6XFx0ZGVidWdfcmVnaXN0ZXJfdmlldyhjaW9fZGVidWdfdHJhY2VfaWQsIFxcdTAwMjZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo3MTpcXHRkZWJ1Z19zZXRfbGV2ZWwoY2lvX2RlYnVnX3RyYWNlX2lkLCAyKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjcyOlxcdGNpb19kZWJ1Z19jcndfaWQgPSBkZWJ1Z19yZWdpc3RlcihcXFwiY2lvX2Nyd1xcXCIsIDgsIDEsIDggKiBzaXplb2YobG9uZykpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NzM6XFx0aWYgKCFjaW9fZGVidWdfY3J3X2lkKVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNzQtXFx0XFx0Z290byBvdXRfdW5yZWdpc3RlcjtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjc1OlxcdGRlYnVnX3JlZ2lzdGVyX3ZpZXcoY2lvX2RlYnVnX2Nyd19pZCwgXFx1MDAyNmRlYnVnX3NwcmludGZfdmlldyk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo3NjpcXHRkZWJ1Z19zZXRfbGV2ZWwoY2lvX2RlYnVnX2Nyd19pZCwgNCk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy03Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNzktb3V0X3VucmVnaXN0ZXI6XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo4MDpcXHRkZWJ1Z191bnJlZ2lzdGVyKGNpb19kZWJ1Z19tc2dfaWQpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6ODE6XFx0ZGVidWdfdW5yZWdpc3RlcihjaW9fZGVidWdfdHJhY2VfaWQpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6ODI6XFx0ZGVidWdfdW5yZWdpc3RlcihjaW9fZGVidWdfY3J3X2lkKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTgzLVxcdHJldHVybiAtMTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtODUtXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo4NjphcmNoX2luaXRjYWxsIChjaW9fZGVidWdfaW5pdCk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy04Ny1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjg4OmludCBjaW9fc2V0X29wdGlvbnMoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgaW50IGZsYWdzKVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtODkte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz05OD1zdGF0aWMgaW50XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo5OTpjaW9fc3RhcnRfaGFuZGxlX25vdG9wZXIoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgX191OCBscG0pXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMDAte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMDctXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoxMDg6XFx0Q0lPX01TR19FVkVOVCgyLCBcXFwiY2lvX3N0YXJ0OiAnbm90IG9wZXInIHN0YXR1cyBmb3IgXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTA5LVxcdFxcdCAgICAgIFxcXCJzdWJjaGFubmVsIDAuJXguJTA0eCFcXFxcblxcXCIsIHNjaC1cXHUwMDNlc2NoaWQuc3NpZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTExLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTEyOlxcdGlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMTMtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jPTEyMj1pbnRcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjEyMzpjaW9fc3RhcnRfa2V5IChzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLFxcdC8qIHN1YmNoYW5uZWwgc3RydWN0dXJlICovXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMjQtXFx0ICAgICAgIHN0cnVjdCBjY3cxICogY3BhLFxcdC8qIGxvZ2ljYWwgY2hhbm5lbCBwcm9nIGFkZHIgKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTY3LVxcdGNhc2UgMzpcXHRcXHQvKiBkZXZpY2UvcGF0aCBub3Qgb3BlcmF0aW9uYWwgKi9cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjE2ODpcXHRcXHRyZXR1cm4gY2lvX3N0YXJ0X2hhbmRsZV9ub3RvcGVyKHNjaCwgbHBtKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTE2OS1cXHRkZWZhdWx0Olxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xNzItfVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTczOkVYUE9SVF9TWU1CT0xfR1BMKGNpb19zdGFydF9rZXkpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTc0LVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM9MTc1PWludFxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTc2OmNpb19zdGFydCAoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgc3RydWN0IGNjdzEgKmNwYSwgX191OCBscG0pXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xNzcte1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTc4OlxcdHJldHVybiBjaW9fc3RhcnRfa2V5KHNjaCwgY3BhLCBscG0sIFBBR0VfREVGQVVMVF9LRVkpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTc5LX1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjE4MDpFWFBPUlRfU1lNQk9MX0dQTChjaW9fc3RhcnQpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTgxLVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz0xODU9aW50XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoxODY6Y2lvX3Jlc3VtZSAoc3RydWN0IHN1YmNoYW5uZWwgKnNjaClcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTE4Ny17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTIxMi19XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyMTM6RVhQT1JUX1NZTUJPTF9HUEwoY2lvX3Jlc3VtZSk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yMTQtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jPTIxOD1pbnRcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjIxOTpjaW9faGFsdChzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMjIwLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMjQ2LX1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjI0NzpFWFBPUlRfU1lNQk9MX0dQTChjaW9faGFsdCk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNDgtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jPTI1Mj1pbnRcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjI1MzpjaW9fY2xlYXIoc3RydWN0IHN1YmNoYW5uZWwgKnNjaClcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI1NC17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI3Ny19XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyNzg6RVhQT1JUX1NZTUJPTF9HUEwoY2lvX2NsZWFyKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI3OS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI4MC0vKlxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MjgxOiAqIEZ1bmN0aW9uOiBjaW9fY2FuY2VsXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yODItICogSXNzdWVzIGEgXFxcIkNhbmNlbCBTdWJjaGFubmVsXFxcIiBvbiB0aGUgc3BlY2lmaWVkIHN1YmNoYW5uZWxcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM9Mjg3PWludFxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Mjg4OmNpb19jYW5jZWwgKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yODkte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMDQtXFx0XFx0LyogVXBkYXRlIGluZm9ybWF0aW9uIGluIHNjc3cuICovXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozMDU6XFx0XFx0aWYgKGNpb191cGRhdGVfc2NoaWIoc2NoKSlcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMwNi1cXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzE1LX1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMxNjpFWFBPUlRfU1lNQk9MX0dQTChjaW9fY2FuY2VsKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMxNy1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMxOC0vKipcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMxOTogKiBjaW9fY2FuY2VsX2hhbHRfY2xlYXIgLSBDYW5jZWwgcnVubmluZyBJL08gYnkgcGVyZm9ybWluZyBjYW5jZWwsIGhhbHRcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMyMC0gKiBhbmQgY2xlYXIgb3JkaW5hbGx5IGlmIHN1YmNoYW5uZWwgaXMgdmFsaWQuXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMyNC0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgcmVwZWF0ZWRseSBzaW5jZSBoYWx0L2NsZWFyIGFyZSBhc3luY2hyb25vdXNcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMyNTogKiBvcGVyYXRpb25zLiBXZSBkbyBvbmUgdHJ5IHdpdGggY2lvX2NhbmNlbCwgdGhyZWUgdHJpZXMgd2l0aCBjaW9faGFsdCxcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMyNjogKiAyNTUgdHJpZXMgd2l0aCBjaW9fY2xlYXIuIFRoZSBjYWxsZXIgc2hvdWxkIGluaXRpYWxpemUgQGlyZXRyeSB3aXRoXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMjctICogdGhlIHZhbHVlIDI1NSBmb3IgaXRzIGZpcnN0IGNhbGwgdG8gdGhpcywgYW5kIGtlZXAgdXNpbmcgdGhlIHNhbWVcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzMzLSAqL1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzM0OmludCBjaW9fY2FuY2VsX2hhbHRfY2xlYXIoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgaW50ICppcmV0cnkpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMzUte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMzctXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozMzg6XFx0aWYgKGNpb191cGRhdGVfc2NoaWIoc2NoKSlcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMzOS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzQ2LVxcdFxcdGlmICghc2Nzd19pc190bShcXHUwMDI2c2NoLVxcdTAwM2VzY2hpYi5zY3N3KSkge1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzQ3OlxcdFxcdFxcdHJldCA9IGNpb19jYW5jZWwoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM0OC1cXHRcXHRcXHRpZiAocmV0ICE9IC1FSU5WQUwpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM2MC1cXHRcXHRcXHQqaXJldHJ5IC09IDE7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozNjE6XFx0XFx0XFx0cmV0ID0gY2lvX2hhbHQoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM2Mi1cXHRcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzcwLVxcdFxcdCppcmV0cnkgLT0gMTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjM3MTpcXHRcXHRyZXQgPSBjaW9fY2xlYXIoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM3Mi1cXHRcXHRyZXR1cm4gKHJldCA9PSAwKSA/IC1FQlVTWSA6IHJldDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzc2LX1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjM3NzpFWFBPUlRfU1lNQk9MX0dQTChjaW9fY2FuY2VsX2hhbHRfY2xlYXIpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzc4LVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Mzc5OnN0YXRpYyB2b2lkIGNpb19hcHBseV9jb25maWcoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgc3RydWN0IHNjaGliICpzY2hpYilcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM4MC17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM5Mi1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjM5MzpzdGF0aWMgaW50IGNpb19jaGVja19jb25maWcoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgc3RydWN0IHNjaGliICpzY2hpYilcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM5NC17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQwNi0vKlxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDA3OiAqIGNpb19jb21taXRfY29uZmlnIC0gYXBwbHkgY29uZmlndXJhdGlvbiB0byB0aGUgc3ViY2hhbm5lbFxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDA4LSAqL1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDA5OmludCBjaW9fY29tbWl0X2NvbmZpZyhzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDEwLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDE5LVxcdFxcdC8qIGNvcHkgZGVzaXJlZCBjaGFuZ2VzIHRvIGxvY2FsIHNjaGliICovXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0MjA6XFx0XFx0Y2lvX2FwcGx5X2NvbmZpZyhzY2gsIFxcdTAwMjZzY2hpYik7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00MjEtXFx0XFx0Y2NvZGUgPSBtc2NoKHNjaC1cXHUwMDNlc2NoaWQsIFxcdTAwMjZzY2hpYik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQyOC1cXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQyOTpcXHRcXHRcXHRpZiAoY2lvX2NoZWNrX2NvbmZpZyhzY2gsIFxcdTAwMjZzY2hpYikpIHtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQzMC1cXHRcXHRcXHRcXHQvKiBjb21taXQgY2hhbmdlcyBmcm9tIGxvY2FsIHNjaGliICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ1MC19XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0NTE6RVhQT1JUX1NZTUJPTF9HUEwoY2lvX2NvbW1pdF9jb25maWcpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDUyLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDUzLS8qKlxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDU0OiAqIGNpb191cGRhdGVfc2NoaWIgLSBQZXJmb3JtIHN0c2NoIGFuZCB1cGRhdGUgc2NoaWIgaWYgc3ViY2hhbm5lbCBpcyB2YWxpZC5cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ1NS0gKiBAc2NoOiBzdWJjaGFubmVsIG9uIHdoaWNoIHRvIHBlcmZvcm0gc3RzY2hcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDU3LSAqL1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDU4OmludCBjaW9fdXBkYXRlX3NjaGliKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NTkte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NzEtfVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDcyOkVYUE9SVF9TWU1CT0xfR1BMKGNpb191cGRhdGVfc2NoaWIpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDczLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDc0LS8qKlxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDc1OiAqIGNpb19lbmFibGVfc3ViY2hhbm5lbCAtIGVuYWJsZSBhIHN1YmNoYW5uZWwuXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NzYtICogQHNjaDogc3ViY2hhbm5lbCB0byBiZSBlbmFibGVkXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ3OC0gKi9cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ3OTppbnQgY2lvX2VuYWJsZV9zdWJjaGFubmVsKHN0cnVjdCBzdWJjaGFubmVsICpzY2gsIHUzMiBpbnRwYXJtKVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDgwLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDg3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDg4OlxcdGlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00ODktXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ5NC1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ5NTpcXHRyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDk2LVxcdGlmIChyZXQgPT0gLUVJTykge1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy01MDEtXFx0XFx0c2NoLVxcdTAwM2Vjb25maWcuY3NlbnNlID0gMDtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjUwMjpcXHRcXHRyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDoxMjo0OS45ODIwMTAyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDA2NjcyNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbnRleHQgZm9yIGBkcml2ZXJzL3MzOTBgLiBBIHF1aWNrIHBlZWsgYXQgYGRyaXZlcnMvTWFrZWZpbGVgIGNvbmZpcm1zIHRoZSBleHBlY3RlZCBkZXBlbmRlbmN5OiBgb2JqLSQoQ09ORklHX1MzOTApICs9IHMzOTAvYC4gQW5kIGBhcmNoL3MzOTAvS2NvbmZpZ2AgZGVmaW5lcyBgQ09ORklHX1MzOTBgLiBPbiBteSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBhbWQ2NCAoeDg2XzY0KSwgYENPTkZJR19TMzkwYCBpcyB1bmVxdWl2b2NhbGx5IGZhbHNlLCBwcmV2ZW50aW5nIHRoZSBidWlsZCBvZiBgZHJpdmVycy9zMzkwL2AuIE1vcmVvdmVyLCB0aGUgaGVhZGVyIGZpbGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oYCBtYWtlcyBpdCBjbGVhciB0aGlzIGlzIHMzOTAtc3BlY2lmaWMgY29kZS5cblxuTm93LCBsZXQncyBhcHBseSB0aGUgZnV6emluZyBjcml0ZXJpYS4gUkVBQ0hBQklMSVRZIElTIFBBUkFNT1VOVDsgbW9kaWZpZWQgY29kZSBtdXN0IGJlIHJlYWNoYWJsZS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlvbiB0ZWxscyBtZSB0aGF0IGNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IG11c3QgKm5vdCogYmUgZnV6emVkLiBNeSB0YXJnZXQgaXMgYW1kNjQuXG5cbkxvb2tpbmcgYXQgdGhlIGxpc3Qgb2YgYWxsIG1vZGlmaWVkIGZpbGVzOlxuLSBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmhgXG4tIGBkcml2ZXJzL3MzOTAvY2lvL2Noc2MuY2Bcbi0gYGRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY2Bcbi0gYGRyaXZlcnMvczM5MC9jaW8vY21mLmNgXG4tIGBkcml2ZXJzL3MzOTAvY2lvL3FkaW8uaGBcbi0gYGRyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNgXG4tIGBkcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuY2Bcbi0gYGRyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmNgXG4tIGBkcml2ZXJzL3MzOTAvY2lvL3NjbS5jYFxuXG5FdmVyeSBzaW5nbGUgZmlsZSByZXNpZGVzIGluIGVpdGhlciBgYXJjaC9zMzkwYCBvciBgZHJpdmVycy9zMzkwYC4gVGhpcyBzY3JlYW1zIFwiczM5MCBhcmNoaXRlY3R1cmUgb25seS5cIiBUaGVzZSBmaWxlcyBhcmUgKm5vdCogY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIGFtZDY0LlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiB3YXJyYW50IGZ1enppbmcuIFRoZSBvdXRjb21lIGlzOiBgV29ydGhGdXp6aW5nID0gZmFsc2VgLCBgRW5hYmxlQ29uZmlncyA9IFtdYCwgYW5kIGBGb2N1c1N5bWJvbHMgPSBbXWAuIE15IHJlYXNvbmluZyBpcyBzb2xpZDogdGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIGNvZGUgc3BlY2lmaWMgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBhbmQgaXMgdGhlcmVmb3JlIHVucmVhY2hhYmxlIG9uIGFtZDY0LlxuXG5BcyBhIGZpbmFsIHNhbml0eSBjaGVjaywgYSBxdWljayBzd2VlcCBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGF0ICpvbmx5KiBzMzkwLXNwZWNpZmljIGZpbGVzIGFyZSBtb2RpZmllZCwgYW5kIG5vIGdlbmVyaWMgaGVhZGVycyBvciBhcmNoLWFnbm9zdGljIGZpbGVzIHdlcmUgdG91Y2hlZC4gVGhlIGluaXRpYWwgYW5hbHlzaXMgaG9sZHMuIFRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIGNhbiBub3cgYmUgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU1NiwiT3V0cHV0VG9rZW5zIjoxMTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MTI6NTUuMzg4Njg2Nzk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgczM5MC1zcGVjaWZpYyBtZW1vcnkgYWxsb2NhdGlvbiBoZWxwZXJzIGFuZCB0aGUgczM5MCBDaGFubmVsIEkvTyAoQ0lPKSBzdWJzeXN0ZW0gKGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oIGFuZCBkcml2ZXJzL3MzOTAvY2lvLyopLiBUaGVzZSBmaWxlcyBhcmUgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgYXJlIG5vdCBjb21waWxlZCBvciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHMzOTAtc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gaGVscGVycyBhbmQgdGhlIHMzOTAgQ2hhbm5lbCBJL08gKENJTykgc3Vic3lzdGVtIChhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBhbmQgZHJpdmVycy9zMzkwL2Npby8qKS4gVGhlc2UgZmlsZXMgYXJlIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgYW5kIGFyZSBub3QgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDoxMjo1NS4zODg3MjAxMzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflownkvkn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 14:11:05 +0000 UTC FinishedAt: 2026-09-07 14:12:56 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgczM5MC1zcGVjaWZpYyBtZW1vcnkgYWxsb2NhdGlvbiBoZWxwZXJzIGFuZCB0aGUgczM5MCBDaGFubmVsIEkvTyAoQ0lPKSBzdWJzeXN0ZW0gKGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oIGFuZCBkcml2ZXJzL3MzOTAvY2lvLyopLiBUaGVzZSBmaWxlcyBhcmUgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgYXJlIG5vdCBjb21waWxlZCBvciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NDQwZjFlMGI5Y2JlYTA2M2U5Y2ZjNjJjODdlMTY5ZWMyMmY3ODFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDoxMjozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oXG5pbmRleCAwNmUxZWMyYWZkNWFmLi4yNDg4MjlkNDYxYmNlIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oXG5AQCAtMTQ3LDcgJiM0MzsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxuIFx0XHRcdGliLVx1MDAzZWRhdGFbaV0gPSBkbWE2NF9hZGQoaWItXHUwMDNlZGF0YVtpIC0gMV0sIElEQV9CTE9DS19TSVpFKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuLVx0XHR2YWRkciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlX29yZGVyKTtcbiYjNDM7XHRcdHZhZGRyID0ga21hbGxvYyhQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIHBhZ2Vfb3JkZXIsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIXZhZGRyKVxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdGliLVx1MDAzZWRhdGFbaV0gPSB2aXJ0X3RvX2RtYTY0KHZhZGRyKTtcbkBAIC0xNTcsNyAmIzQzOzE1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlkYWxfYnVmZmVyICppZGFsX2J1ZmZlcl9hbGxvYyhzaXplX3Qgc2l6ZSwgaW50IHBhZ2Vfb3JkZXIpXG4gXHR3aGlsZSAoaSBcdTAwM2U9IG5yX2NodW5rcykge1xuIFx0XHRpIC09IG5yX2NodW5rcztcbiBcdFx0dmFkZHIgPSBkbWE2NF90b192aXJ0KGliLVx1MDAzZWRhdGFbaV0pO1xuLVx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBpYi1cdTAwM2VwYWdlX29yZGVyKTtcbiYjNDM7XHRcdGtmcmVlKHZhZGRyKTtcbiBcdH1cbiBcdGtmcmVlKGliKTtcbiBcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuQEAgLTE3NSw3ICYjNDM7MTc1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkYWxfYnVmZmVyX2ZyZWUoc3RydWN0IGlkYWxfYnVmZmVyICppYilcbiBcdG5yX2NodW5rcyA9IChQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIGliLVx1MDAzZXBhZ2Vfb3JkZXIpIFx1MDAzZVx1MDAzZSBJREFfU0laRV9TSElGVDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3B0cnM7IGkgJiM0Mzs9IG5yX2NodW5rcykge1xuIFx0XHR2YWRkciA9IGRtYTY0X3RvX3ZpcnQoaWItXHUwMDNlZGF0YVtpXSk7XG4tXHRcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGliLVx1MDAzZXBhZ2Vfb3JkZXIpO1xuJiM0MztcdFx0a2ZyZWUodmFkZHIpO1xuIFx0fVxuIFx0a2ZyZWUoaWIpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXG5pbmRleCA5Njg5ZjcyMmM4NjNjLi5kOThmNjI5ZTg5Mjk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXG5AQCAtOTMxLDEyICYjNDM7OTMxLDEyIEBAIHN0YXRpYyBpbnQgY3ViX2FsbG9jKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzKVxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDU1NfTlVNX0NVQl9QQUdFUzsgaSYjNDM7JiM0MzspIHtcbi1cdFx0Y3NzLVx1MDAzZWN1YltpXSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiYjNDM7XHRcdGNzcy1cdTAwM2VjdWJbaV0gPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuIFx0XHRpZiAoIWNzcy1cdTAwM2VjdWJbaV0pXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDU1NfTlVNX0VDVUJfUEFHRVM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGNzcy1cdTAwM2VlY3ViW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRjc3MtXHUwMDNlZWN1YltpXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFjc3MtXHUwMDNlZWN1YltpXSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbkBAIC05NDksMTEgJiM0Mzs5NDksMTEgQEAgc3RhdGljIHZvaWQgY3ViX2ZyZWUoc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3MpXG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENTU19OVU1fQ1VCX1BBR0VTOyBpJiM0MzsmIzQzOykge1xuLVx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY3NzLVx1MDAzZWN1YltpXSk7XG4mIzQzO1x0XHRrZnJlZShjc3MtXHUwMDNlY3ViW2ldKTtcbiBcdFx0Y3NzLVx1MDAzZWN1YltpXSA9IE5VTEw7XG4gXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDU1NfTlVNX0VDVUJfUEFHRVM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljc3MtXHUwMDNlZWN1YltpXSk7XG4mIzQzO1x0XHRrZnJlZShjc3MtXHUwMDNlZWN1YltpXSk7XG4gXHRcdGNzcy1cdTAwM2VlY3ViW2ldID0gTlVMTDtcbiBcdH1cbiB9XG5AQCAtMTE0Miw4ICYjNDM7MTE0Miw4IEBAIGludCBfX2luaXQgY2hzY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHNlaV9wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuLVx0Y2hzY19wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuJiM0MztcdHNlaV9wYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiYjNDM7XHRjaHNjX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuIFx0aWYgKCFzZWlfcGFnZSB8fCAhY2hzY19wYWdlKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0X2VycjtcbkBAIC0xMTUzLDE2ICYjNDM7MTE1MywxNiBAQCBpbnQgX19pbml0IGNoc2NfaW5pdCh2b2lkKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHRyZXR1cm4gcmV0O1xuIG91dF9lcnI6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19wYWdlKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWlfcGFnZSk7XG4mIzQzO1x0a2ZyZWUoY2hzY19wYWdlKTtcbiYjNDM7XHRrZnJlZShzZWlfcGFnZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiB2b2lkIF9faW5pdCBjaHNjX2luaXRfY2xlYW51cCh2b2lkKVxuIHtcbiBcdGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DU1MpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfcGFnZSk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2VpX3BhZ2UpO1xuJiM0MztcdGtmcmVlKGNoc2NfcGFnZSk7XG4mIzQzO1x0a2ZyZWUoc2VpX3BhZ2UpO1xuIH1cbiBcbiBpbnQgX19jaHNjX2VuYWJsZV9mYWNpbGl0eShzdHJ1Y3QgY2hzY19zZGFfYXJlYSAqc2RhX2FyZWEsIGludCBvcGVyYXRpb25fY29kZSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmNcbmluZGV4IGI2Y2I4YmI4YmNjNGIuLjIyNWFhYWM3ZGQzMDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY1xuQEAgLTE1LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWlzY2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsX3N0YXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2hzYy5oXHUwMDNlXG5AQCAtMjkyLDcgJiM0MzsyOTMsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfc3RhcnQodm9pZCBfX3VzZXIgKnVzZXJfYXJlYSlcbiBcdGlmICghY3NzX2dlbmVyYWxfY2hhcmFjdGVyaXN0aWNzLmR5bmlvKVxuIFx0XHQvKiBJdCBtYWtlcyBubyBzZW5zZSB0byB0cnkuICovXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdGNoc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRjaHNjX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0RNQSB8IEdGUF9LRVJORUwpO1xuIFx0aWYgKCFjaHNjX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0cmVxdWVzdCA9IGt6YWxsb2Nfb2JqKCpyZXF1ZXN0KTtcbkBAIC0zMjEsNyAmIzQzOzMyMiw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9zdGFydCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxuIFx0c25wcmludGYoZGJmLCBzaXplb2YoZGJmKSwgXCYjMzQ7cmV0OiVkXCYjMzQ7LCByZXQpO1xuIFx0Q0hTQ19MT0coMCwgZGJmKTtcbiBcdGtmcmVlKHJlcXVlc3QpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfYXJlYSk7XG4mIzQzO1x0a2ZyZWUoY2hzY19hcmVhKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTM0MCw3ICYjNDM7MzQxLDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3NldCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4tXHRvbl9jbG9zZV9jaHNjX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0b25fY2xvc2VfY2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcbiBcdGlmICghb25fY2xvc2VfY2hzY19hcmVhKSB7XG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0X2ZyZWVfcmVxdWVzdDtcbkBAIC0zNTMsNyAmIzQzOzM1NCw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9zZXQodm9pZCBfX3VzZXIgKnVzZXJfYXJlYSlcbiBcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBvdXRfZnJlZV9jaHNjOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XG4mIzQzO1x0a2ZyZWUob25fY2xvc2VfY2hzY19hcmVhKTtcbiBcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XG4gb3V0X2ZyZWVfcmVxdWVzdDpcbiBcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xuQEAgLTM3NSw3ICYjNDM7Mzc2LDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3JlbW92ZSh2b2lkKVxuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpb25fY2xvc2VfY2hzY19hcmVhKTtcbiYjNDM7XHRrZnJlZShvbl9jbG9zZV9jaHNjX2FyZWEpO1xuIFx0b25fY2xvc2VfY2hzY19hcmVhID0gTlVMTDtcbiBcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xuIFx0b25fY2xvc2VfcmVxdWVzdCA9IE5VTEw7XG5AQCAtMzg5LDM5ICYjNDM7MzkwLDI5IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9yZW1vdmUodm9pZClcbiBcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfc3RhcnRfc3luYyh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxuIHtcbi1cdHN0cnVjdCBjaHNjX3N5bmNfYXJlYSAqY2hzY19hcmVhO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2Nfc3luY19hcmVhICpjaHNjX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4mIzQzO1x0aW50IGNjb2RlO1xuIFxuLVx0Y2hzY19hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuJiM0MztcdGNoc2NfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIWNoc2NfYXJlYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2hzY19hcmVhLCB1c2VyX2FyZWEsIFBBR0VfU0laRSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbi1cdGlmIChjaHNjX2FyZWEtXHUwMDNlaGVhZGVyLmNvZGUgXHUwMDI2IDB4NDAwMCkge1xuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihjaHNjX2FyZWEsIHVzZXJfYXJlYSwgUEFHRV9TSVpFKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdGlmIChjaHNjX2FyZWEtXHUwMDNlaGVhZGVyLmNvZGUgXHUwMDI2IDB4NDAwMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0Y2hzY19sb2dfY29tbWFuZChjaHNjX2FyZWEpO1xuIFx0Y2NvZGUgPSBjaHNjKGNoc2NfYXJlYSk7XG4tXHRpZiAoY2NvZGUgIT0gMCkge1xuLVx0XHRyZXQgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuJiM0MztcdGlmIChjY29kZSAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfYXJlYSwgY2hzY19hcmVhLCBQQUdFX1NJWkUpKVxuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0ZWxzZVxuLVx0XHRyZXQgPSAwO1xuLW91dF9mcmVlOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfYXJlYSk7XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2NoYW5uZWxfcGF0aCh2b2lkIF9fdXNlciAqdXNlcl9jZClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19jaHBfY2QgKmNkO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2NfY2hwX2NkICpjZCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjNDM7XHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIDogMjtcbkBAIC00MzYsMjAgJiM0Mzs0MjcsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY2hhbm5lbF9wYXRoKHZvaWQgX191c2VyICp1c2VyX2NkKVxuIFx0XHR1MzIgOiAzMjtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xuIFx0XHR1OCBkYXRhW1BBR0VfU0laRSAtIDIwXTtcbi1cdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3BjZF9hcmVhO1xuJiM0MztcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3BjZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIFxuLVx0c2NwY2RfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiYjNDM7XHRzY3BjZF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2NwY2RfYXJlYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRjZCA9IGt6YWxsb2Nfb2JqKCpjZCk7XG4tXHRpZiAoIWNkKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuJiM0MztcdGlmICghY2QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NwY2RfYXJlYS1cdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAxMDtcbiBcdHNjcGNkX2FyZWEtXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDI4O1xuIFx0c2NwY2RfYXJlYS1cdTAwM2VtID0gY2QtXHUwMDNlbTtcbkBAIC00NTksMzEgJiM0Mzs0NDYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY2hhbm5lbF9wYXRoKHZvaWQgX191c2VyICp1c2VyX2NkKVxuIFx0c2NwY2RfYXJlYS1cdTAwM2VsYXN0X2NocGlkID0gY2QtXHUwMDNlY2hwaWQuaWQ7XG4gXG4gXHRjY29kZSA9IGNoc2Moc2NwY2RfYXJlYSk7XG4tXHRpZiAoY2NvZGUgIT0gMCkge1xuLVx0XHRyZXQgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuJiM0MztcdGlmIChjY29kZSAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHRpZiAoc2NwY2RfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcJiMzNDtzY3BjZDogcmVzcG9uc2UgY29kZT0leFxcblwmIzM0OyxcbiBcdFx0XHQgc2NwY2RfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlKTtcbi1cdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFx0bWVtY3B5KFx1MDAyNmNkLVx1MDAzZWNwY2IsIFx1MDAyNnNjcGNkX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjcGNkX2FyZWEtXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jZCwgY2QsIHNpemVvZigqY2QpKSlcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gMDtcbi1vdXRfZnJlZTpcbi1cdGtmcmVlKGNkKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3BjZF9hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpXG4ge1xuLVx0c3RydWN0IGNoc2NfY3VfY2QgKmNkO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2NfY3VfY2QgKmNkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuJiM0MztcdGludCBjY29kZTtcbiBcdHN0cnVjdCB7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0O1xuIFx0XHR1MzIgOiAyO1xuQEAgLTQ5OCwyMCAmIzQzOzQ3NywxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jdSh2b2lkIF9fdXNlciAqdXNlcl9jZClcbiBcdFx0dTMyIDogMzI7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2N1Y2RfYXJlYTtcbiYjNDM7XHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2N1Y2RfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcbi1cdHNjdWNkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c2N1Y2RfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNjdWNkX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Y2QgPSBremFsbG9jX29iaigqY2QpO1xuLVx0aWYgKCFjZCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGNkLCB1c2VyX2NkLCBzaXplb2YoKmNkKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRpZiAoIWNkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKGNkLCB1c2VyX2NkLCBzaXplb2YoKmNkKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHNjdWNkX2FyZWEtXHUwMDNlcmVxdWVzdC5sZW5ndGggPSAweDAwMTA7XG4gXHRzY3VjZF9hcmVhLVx1MDAzZXJlcXVlc3QuY29kZSA9IDB4MDAyNjtcbiBcdHNjdWNkX2FyZWEtXHUwMDNlbSA9IGNkLVx1MDAzZW07XG5AQCAtNTIxLDMxICYjNDM7NDk2LDIzIEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2N1KHZvaWQgX191c2VyICp1c2VyX2NkKVxuIFx0c2N1Y2RfYXJlYS1cdTAwM2VsYXN0X2N1biA9IGNkLVx1MDAzZWN1bjtcbiBcbiBcdGNjb2RlID0gY2hzYyhzY3VjZF9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4mIzQzO1x0aWYgKGNjb2RlICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChzY3VjZF9hcmVhLVx1MDAzZXJlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7XG4tXHRcdHJldCA9IC1FSU87XG4gXHRcdENIU0NfTVNHKDAsIFwmIzM0O3NjdWNkOiByZXNwb25zZSBjb2RlPSV4XFxuXCYjMzQ7LFxuIFx0XHRcdCBzY3VjZF9hcmVhLVx1MDAzZXJlc3BvbnNlLmNvZGUpO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXHRtZW1jcHkoXHUwMDI2Y2QtXHUwMDNlY3VjYiwgXHUwMDI2c2N1Y2RfYXJlYS1cdTAwM2VyZXNwb25zZSwgc2N1Y2RfYXJlYS1cdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xuIFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2NkLCBjZCwgc2l6ZW9mKCpjZCkpKVxuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0ZWxzZVxuLVx0XHRyZXQgPSAwO1xuLW91dF9mcmVlOlxuLVx0a2ZyZWUoY2QpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjdWNkX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19zY2hfY3Uodm9pZCBfX3VzZXIgKnVzZXJfY3VkKVxuIHtcbi1cdHN0cnVjdCBjaHNjX3NjaF9jdWQgKmN1ZDtcbi1cdGludCByZXQsIGNjb2RlO1xuJiM0MztcdHN0cnVjdCBjaHNjX3NjaF9jdWQgKmN1ZCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjNDM7XHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIDogMjtcbkBAIC01NjEsMjAgJiM0Mzs1MjgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fc2NoX2N1KHZvaWQgX191c2VyICp1c2VyX2N1ZClcbiBcdFx0dTMyIDogMzI7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc3NjdWRfYXJlYTtcbiYjNDM7XHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc3NjdWRfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcbi1cdHNzY3VkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c3NjdWRfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNzY3VkX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Y3VkID0ga3phbGxvY19vYmooKmN1ZCk7XG4tXHRpZiAoIWN1ZCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGN1ZCwgdXNlcl9jdWQsIHNpemVvZigqY3VkKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRpZiAoIWN1ZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihjdWQsIHVzZXJfY3VkLCBzaXplb2YoKmN1ZCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRzc2N1ZF9hcmVhLVx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDEwO1xuIFx0c3NjdWRfYXJlYS1cdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMDY7XG4gXHRzc2N1ZF9hcmVhLVx1MDAzZW0gPSBjdWQtXHUwMDNlc2NoaWQubTtcbkBAIC01ODUsMzEgJiM0Mzs1NDgsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fc2NoX2N1KHZvaWQgX191c2VyICp1c2VyX2N1ZClcbiBcdHNzY3VkX2FyZWEtXHUwMDNlbGFzdF9zY2ggPSBjdWQtXHUwMDNlc2NoaWQuc2NoX25vO1xuIFxuIFx0Y2NvZGUgPSBjaHNjKHNzY3VkX2FyZWEpO1xuLVx0aWYgKGNjb2RlICE9IDApIHtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRpZiAoY2NvZGUgIT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFx0aWYgKHNzY3VkX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiBcdFx0Q0hTQ19NU0coMCwgXCYjMzQ7c3NjdWQ6IHJlc3BvbnNlIGNvZGU9JXhcXG5cJiMzNDssXG4gXHRcdFx0IHNzY3VkX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSk7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcdG1lbWNweShcdTAwMjZjdWQtXHUwMDNlc2N1YiwgXHUwMDI2c3NjdWRfYXJlYS1cdTAwM2VyZXNwb25zZSwgc3NjdWRfYXJlYS1cdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xuIFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2N1ZCwgY3VkLCBzaXplb2YoKmN1ZCkpKVxuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0ZWxzZVxuLVx0XHRyZXQgPSAwO1xuLW91dF9mcmVlOlxuLVx0a2ZyZWUoY3VkKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzc2N1ZF9hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcbiB7XG4tXHRzdHJ1Y3QgY2hzY19jb25mX2luZm8gKmNpO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2NfY29uZl9pbmZvICpjaSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjNDM7XHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIDogMjtcbkBAIC02MjMsMjAgJiM0Mzs1NzgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcbiBcdFx0dTY0IDogNjQ7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NpX2FyZWE7XG4mIzQzO1x0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjaV9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIFxuLVx0c2NpX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c2NpX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuIFx0aWYgKCFzY2lfYXJlYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRjaSA9IGt6YWxsb2Nfb2JqKCpjaSk7XG4tXHRpZiAoIWNpKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2ksIHVzZXJfY2ksIHNpemVvZigqY2kpKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuJiM0MztcdGlmICghY2kpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoY2ksIHVzZXJfY2ksIHNpemVvZigqY2kpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NpX2FyZWEtXHUwMDNlcmVxdWVzdC5sZW5ndGggPSAweDAwMTA7XG4gXHRzY2lfYXJlYS1cdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMTI7XG4gXHRzY2lfYXJlYS1cdTAwM2VtID0gY2ktXHUwMDNlaWQubTtcbkBAIC02NDUsMzEgJiM0Mzs1OTYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcbiBcdHNjaV9hcmVhLVx1MDAzZXNzaWQgPSBjaS1cdTAwM2VpZC5zc2lkO1xuIFxuIFx0Y2NvZGUgPSBjaHNjKHNjaV9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4mIzQzO1x0aWYgKGNjb2RlICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChzY2lfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcJiMzNDtzY2k6IHJlc3BvbnNlIGNvZGU9JXhcXG5cJiMzNDssXG4gXHRcdFx0IHNjaV9hcmVhLVx1MDAzZXJlc3BvbnNlLmNvZGUpO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXHRtZW1jcHkoXHUwMDI2Y2ktXHUwMDNlc2NpZCwgXHUwMDI2c2NpX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjaV9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY2ksIGNpLCBzaXplb2YoKmNpKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjaSk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NpX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKVxuIHtcbi1cdHN0cnVjdCBjaHNjX2NvbXBfbGlzdCAqY2NsO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2NfY29tcF9saXN0ICpjY2wgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4mIzQzO1x0aW50IGNjb2RlO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XG4gXHRcdHUzMiBjdHlwZSA6IDg7XG5AQCAtNjgxLDcgJiM0Mzs2MjQsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKVxuIFx0XHR1NjQgOiA2NDtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xuIFx0XHR1OCBkYXRhW1BBR0VfU0laRSAtIDM2XTtcbi1cdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY2NsX2FyZWE7XG4mIzQzO1x0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjY2xfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcdHN0cnVjdCB7XG4gXHRcdHUzMiBtIDogMTtcbiBcdFx0dTMyIDogMzE7XG5AQCAtNjk2LDE4ICYjNDM7NjM5LDE0IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jb25mX2NvbXBfbGlzdCh2b2lkIF9fdXNlciAqdXNlcl9jY2wpXG4gXHRcdHUzMiByZXM7XG4gXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqY3NzaWRzX3Bhcm07XG4gXG4tXHRzY2NsX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c2NjbF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2NjbF9hcmVhKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGNjbCA9IGt6YWxsb2Nfb2JqKCpjY2wpO1xuLVx0aWYgKCFjY2wpIHtcbi1cdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbi1cdGlmIChjb3B5X2Zyb21fdXNlcihjY2wsIHVzZXJfY2NsLCBzaXplb2YoKmNjbCkpKSB7XG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4mIzQzO1x0aWYgKCFjY2wpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoY2NsLCB1c2VyX2NjbCwgc2l6ZW9mKCpjY2wpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NjbF9hcmVhLVx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDIwO1xuIFx0c2NjbF9hcmVhLVx1MDAzZXJlcXVlc3QuY29kZSA9IDB4MDAzMDtcbiBcdHNjY2xfYXJlYS1cdTAwM2VmbXQgPSBjY2wtXHUwMDNlcmVxLmZtdDtcbkBAIC03MjgsNjEgJiM0Mzs2NjcsNDYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHRjY29kZSA9IGNoc2Moc2NjbF9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4mIzQzO1x0aWYgKGNjb2RlICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChzY2NsX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiBcdFx0Q0hTQ19NU0coMCwgXCYjMzQ7c2NjbDogcmVzcG9uc2UgY29kZT0leFxcblwmIzM0OyxcbiBcdFx0XHQgc2NjbF9hcmVhLVx1MDAzZXJlc3BvbnNlLmNvZGUpO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXHRtZW1jcHkoXHUwMDI2Y2NsLVx1MDAzZXNjY2wsIFx1MDAyNnNjY2xfYXJlYS1cdTAwM2VyZXNwb25zZSwgc2NjbF9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY2NsLCBjY2wsIHNpemVvZigqY2NsKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjY2wpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjY2xfYXJlYSk7XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jaHBkKHZvaWQgX191c2VyICp1c2VyX2NocGQpXG4ge1xuLVx0c3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhO1xuLVx0c3RydWN0IGNoc2NfY3BkX2luZm8gKmNocGQ7XG4mIzQzO1x0c3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBjaHNjX2NwZF9pbmZvICpjaHBkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIFx0aW50IHJldDtcbiBcbiBcdGNocGQgPSBremFsbG9jX29iaigqY2hwZCk7XG4tXHRzY3BkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4tXHRpZiAoIXNjcGRfYXJlYSB8fCAhY2hwZCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGNocGQsIHVzZXJfY2hwZCwgc2l6ZW9mKCpjaHBkKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRzY3BkX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuJiM0MztcdGlmICghc2NwZF9hcmVhIHx8ICFjaHBkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKGNocGQsIHVzZXJfY2hwZCwgc2l6ZW9mKCpjaHBkKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHJldCA9IGNoc2NfZGV0ZXJtaW5lX2NoYW5uZWxfcGF0aF9kZXNjKGNocGQtXHUwMDNlY2hwaWQsIGNocGQtXHUwMDNlZm10LFxuIFx0XHRcdFx0XHQgICAgICAgY2hwZC1cdTAwM2VyZm10LCBjaHBkLVx1MDAzZWMsIGNocGQtXHUwMDNlbSxcbiBcdFx0XHRcdFx0ICAgICAgIHNjcGRfYXJlYSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdG1lbWNweShcdTAwMjZjaHBkLVx1MDAzZWNocGRiLCBcdTAwMjZzY3BkX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjcGRfYXJlYS1cdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xuIFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2NocGQsIGNocGQsIHNpemVvZigqY2hwZCkpKVxuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLW91dF9mcmVlOlxuLVx0a2ZyZWUoY2hwZCk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NwZF9hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2RjYWwodm9pZCBfX3VzZXIgKnVzZXJfZGNhbClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19kY2FsICpkY2FsO1xuLVx0aW50IHJldCwgY2NvZGU7XG4mIzQzO1x0c3RydWN0IGNoc2NfZGNhbCAqZGNhbCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjNDM7XHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIGF0eXBlIDogODtcbkBAIC03OTQsMjAgJiM0Mzs3MTgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2RjYWwodm9pZCBfX3VzZXIgKnVzZXJfZGNhbClcbiBcdFx0dTMyIHJlczFbMl07XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAzNl07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2RjYWxfYXJlYTtcbiYjNDM7XHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2RjYWxfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcbi1cdHNkY2FsX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c2RjYWxfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNkY2FsX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0ZGNhbCA9IGt6YWxsb2Nfb2JqKCpkY2FsKTtcbi1cdGlmICghZGNhbCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGRjYWwsIHVzZXJfZGNhbCwgc2l6ZW9mKCpkY2FsKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRpZiAoIWRjYWwpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoZGNhbCwgdXNlcl9kY2FsLCBzaXplb2YoKmRjYWwpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2RjYWxfYXJlYS1cdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAyMDtcbiBcdHNkY2FsX2FyZWEtXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDM0O1xuIFx0c2RjYWxfYXJlYS1cdTAwM2VhdHlwZSA9IGRjYWwtXHUwMDNlcmVxLmF0eXBlO1xuQEAgLTgxNiwyNiAmIzQzOzczNiwxOCBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfZGNhbCh2b2lkIF9fdXNlciAqdXNlcl9kY2FsKVxuIFx0ICAgICAgIHNpemVvZihzZGNhbF9hcmVhLVx1MDAzZWxpc3RfcGFybSkpO1xuIFxuIFx0Y2NvZGUgPSBjaHNjKHNkY2FsX2FyZWEpO1xuLVx0aWYgKGNjb2RlICE9IDApIHtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbiYjNDM7XHRpZiAoY2NvZGUgIT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFx0aWYgKHNkY2FsX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiBcdFx0Q0hTQ19NU0coMCwgXCYjMzQ7c2RjYWw6IHJlc3BvbnNlIGNvZGU9JXhcXG5cJiMzNDssXG4gXHRcdFx0IHNkY2FsX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSk7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcdG1lbWNweShcdTAwMjZkY2FsLVx1MDAzZXNkY2FsLCBcdTAwMjZzZGNhbF9hcmVhLVx1MDAzZXJlc3BvbnNlLFxuIFx0ICAgICAgIHNkY2FsX2FyZWEtXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9kY2FsLCBkY2FsLCBzaXplb2YoKmRjYWwpKSlcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gMDtcbi1vdXRfZnJlZTpcbi1cdGtmcmVlKGRjYWwpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNkY2FsX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyBjaHNjX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuQEAgLTkwNCw3ICYjNDM7ODE2LDcgQEAgc3RhdGljIGludCBjaHNjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHR9XG4gXHRzbnByaW50ZihkYmYsIHNpemVvZihkYmYpLCBcJiMzNDtyZWxyZXQ6JWRcJiMzNDssIHJldCk7XG4gXHRDSFNDX0xPRygwLCBkYmYpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XG4mIzQzO1x0a2ZyZWUob25fY2xvc2VfY2hzY19hcmVhKTtcbiBcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XG4gXHRrZnJlZShvbl9jbG9zZV9yZXF1ZXN0KTtcbiBcdG9uX2Nsb3NlX3JlcXVlc3QgPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY21mLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2NtZi5jXG5pbmRleCA5MmFiM2Q1NDZmZTQ3Li42YzQ2YjBkMGIzZGE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jbWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2Npby9jbWYuY1xuQEAgLTUwMSwxMiAmIzQzOzUwMSwxMiBAQCBzdGF0aWMgaW50IGFsbG9jX2NtYihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcbiBcdFx0V0FSTl9PTighbGlzdF9lbXB0eShcdTAwMjZjbWJfYXJlYS5saXN0KSk7XG4gXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNtYl9hcmVhLmxvY2spO1xuLVx0XHRtZW0gPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgZ2V0X29yZGVyKHNpemUpKTtcbiYjNDM7XHRcdG1lbSA9IGttYWxsb2MoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBnZXRfb3JkZXIoc2l6ZSksIEdGUF9LRVJORUwpO1xuIFx0XHRzcGluX2xvY2soXHUwMDI2Y21iX2FyZWEubG9jayk7XG4gXG4gXHRcdGlmIChjbWJfYXJlYS5tZW0pIHtcbiBcdFx0XHQvKiBvaywgYW5vdGhlciB0aHJlYWQgd2FzIGZhc3RlciAqL1xuLVx0XHRcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpbWVtLCBnZXRfb3JkZXIoc2l6ZSkpO1xuJiM0MztcdFx0XHRrZnJlZShtZW0pO1xuIFx0XHR9IGVsc2UgaWYgKCFtZW0pIHtcbiBcdFx0XHQvKiBubyBsdWNrICovXG4gXHRcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC01NDcsMTAgJiM0Mzs1NDcsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX2NtYihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VjbWJfbGlzdCk7XG4gXG4gXHRpZiAobGlzdF9lbXB0eShcdTAwMjZjbWJfYXJlYS5saXN0KSkge1xuLVx0XHRzc2l6ZV90IHNpemU7XG4tXHRcdHNpemUgPSBzaXplb2Yoc3RydWN0IGNtYikgKiBjbWJfYXJlYS5udW1fY2hhbm5lbHM7XG4gXHRcdGNtZl9hY3RpdmF0ZShOVUxMLCBDTUZfT0ZGKTtcbi1cdFx0ZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyljbWJfYXJlYS5tZW0sIGdldF9vcmRlcihzaXplKSk7XG4mIzQzO1x0XHRrZnJlZShjbWJfYXJlYS5tZW0pO1xuIFx0XHRjbWJfYXJlYS5tZW0gPSBOVUxMO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfaXJxKGNkZXYtXHUwMDNlY2N3bG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaFxuaW5kZXggNGJkNGMwMGM5YzBjYS4uZGZmNWY1M2E4Nzk1ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaFxuQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgc3RydWN0IHFkaW9faXJxIHtcbiBcdGludCBwZXJmX3N0YXRfZW5hYmxlZDtcbiBcbiBcdHN0cnVjdCBxZHIgKnFkcjtcbi1cdHVuc2lnbmVkIGxvbmcgY2hzY19wYWdlO1xuJiM0MztcdHZvaWQgKmNoc2NfcGFnZTtcbiBcbiBcdHN0cnVjdCBxZGlvX3EgKmlucHV0X3FzW1FESU9fTUFYX1FVRVVFU19QRVJfSVJRXTtcbiBcdHN0cnVjdCBxZGlvX3EgKm91dHB1dF9xc1tRRElPX01BWF9RVUVVRVNfUEVSX0lSUV07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNcbmluZGV4IGMxZTA5ZmEzNGU3NzQuLmJlYmMxMjUwZWJlYmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jXG5AQCAtMTcsNiAmIzQzOzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZGVidWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9xZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLmhcdTAwM2VcbkBAIC05MzMsMTAgJiM0Mzs5MzQsMTAgQEAgaW50IHFkaW9fZnJlZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcbiBcdG11dGV4X3VubG9jayhcdTAwMjZpcnFfcHRyLVx1MDAzZXNldHVwX211dGV4KTtcbiBcbiBcdHFkaW9fZnJlZV9xdWV1ZXMoaXJxX3B0cik7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlycV9wdHItXHUwMDNlcWRyKTtcbi1cdGZyZWVfcGFnZShpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSk7XG4mIzQzO1x0a2ZyZWUoaXJxX3B0ci1cdTAwM2VxZHIpO1xuJiM0MztcdGtmcmVlKGlycV9wdHItXHUwMDNlY2hzY19wYWdlKTtcbiBcdGtmcmVlKGlycV9wdHItXHUwMDNlY2N3KTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0cik7XG4mIzQzO1x0a2ZyZWUoaXJxX3B0cik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocWRpb19mcmVlKTtcbkBAIC05NjEsNyAmIzQzOzk2Miw3IEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsXG4gXHQgICAgbm9fb3V0cHV0X3FzIFx1MDAzZSBRRElPX01BWF9RVUVVRVNfUEVSX0lSUSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpcnFfcHRyID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcdGlycV9wdHIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWlycV9wdHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTk4NiwxMiAmIzQzOzk4NywxMiBAQCBpbnQgcWRpb19hbGxvY2F0ZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IG5vX2lucHV0X3FzLFxuIFx0ICogcWRpb19lc3RhYmxpc2guIEluIGNhc2Ugb2YgbG93IG1lbW9yeSBhbmQgc3dhcCBvbiBhIHpmY3AgZGlza1xuIFx0ICogd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBvdGhlcndpc2UuXG4gXHQgKi9cbi1cdGlycV9wdHItXHUwMDNlY2hzY19wYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcdGlycV9wdHItXHUwMDNlY2hzY19wYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSlcbiBcdFx0Z290byBlcnJfY2hzYztcbiBcbiBcdC8qIHFkciBpcyB1c2VkIGluIGNjdzEuY2RhIHdoaWNoIGlzIHUzMiAqL1xuLVx0aXJxX3B0ci1cdTAwM2VxZHIgPSAoc3RydWN0IHFkciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuJiM0MztcdGlycV9wdHItXHUwMDNlcWRyID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghaXJxX3B0ci1cdTAwM2VxZHIpXG4gXHRcdGdvdG8gZXJyX3FkcjtcbiBcbkBAIC0xMDA0LDE0ICYjNDM7MTAwNSwxNCBAQCBpbnQgcWRpb19hbGxvY2F0ZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IG5vX2lucHV0X3FzLFxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3F1ZXVlczpcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0ci1cdTAwM2VxZHIpO1xuJiM0MztcdGtmcmVlKGlycV9wdHItXHUwMDNlcWRyKTtcbiBlcnJfcWRyOlxuLVx0ZnJlZV9wYWdlKGlycV9wdHItXHUwMDNlY2hzY19wYWdlKTtcbiYjNDM7XHRrZnJlZShpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSk7XG4gZXJyX2Noc2M6XG4gZXJyX2RiZjpcbiBcdGtmcmVlKGlycV9wdHItXHUwMDNlY2N3KTtcbiBlcnJfY2N3OlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyKTtcbiYjNDM7XHRrZnJlZShpcnFfcHRyKTtcbiBcdHJldHVybiByYztcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocWRpb19hbGxvY2F0ZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuY1xuaW5kZXggZWEwOWFhZGFhZTRlYy4uYzAyMTVhN2QyOWE4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuY1xuQEAgLTM1LDcgJiM0MzszNSw3IEBAIHZvaWQgcWRpb19mcmVlX2J1ZmZlcnMoc3RydWN0IHFkaW9fYnVmZmVyICoqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpXG4gXHRpbnQgcG9zO1xuIFxuIFx0Zm9yIChwb3MgPSAwOyBwb3MgXHUwMDNjIGNvdW50OyBwb3MgJiM0Mzs9IFFCVUZGX1BFUl9QQUdFKVxuLVx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zltwb3NdKTtcbiYjNDM7XHRcdGtmcmVlKGJ1Zltwb3NdKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocWRpb19mcmVlX2J1ZmZlcnMpO1xuIFxuQEAgLTQ5LDcgJiM0Mzs0OSw3IEBAIGludCBxZGlvX2FsbG9jX2J1ZmZlcnMoc3RydWN0IHFkaW9fYnVmZmVyICoqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpXG4gXHRpbnQgcG9zO1xuIFxuIFx0Zm9yIChwb3MgPSAwOyBwb3MgXHUwMDNjIGNvdW50OyBwb3MgJiM0Mzs9IFFCVUZGX1BFUl9QQUdFKSB7XG4tXHRcdGJ1Zltwb3NdID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuJiM0MztcdFx0YnVmW3Bvc10gPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghYnVmW3Bvc10pIHtcbiBcdFx0XHRxZGlvX2ZyZWVfYnVmZmVycyhidWYsIGNvdW50KTtcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC04Myw3ICYjNDM7ODMsNyBAQCBzdGF0aWMgdm9pZCBfX3FkaW9fZnJlZV9xdWV1ZXMoc3RydWN0IHFkaW9fcSAqKnF1ZXVlcywgdW5zaWduZWQgaW50IGNvdW50KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHEgPSBxdWV1ZXNbaV07XG4tXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylxLVx1MDAzZXNsX3BhZ2UpO1xuJiM0MztcdFx0a2ZyZWUocS1cdTAwM2VzbF9wYWdlKTtcbiBcdFx0a21lbV9jYWNoZV9mcmVlKHFkaW9fcV9jYWNoZSwgcSk7XG4gXHR9XG4gfVxuQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc3RhdGljIGludCBfX3FkaW9fYWxsb2NhdGVfcXMoc3RydWN0IHFkaW9fcSAqKmlycV9wdHJfcXMsIGludCBucl9xdWV1ZXMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcbi1cdFx0cS1cdTAwM2VzbF9wYWdlID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRxLVx1MDAzZXNsX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghcS1cdTAwM2VzbF9wYWdlKSB7XG4gXHRcdFx0a21lbV9jYWNoZV9mcmVlKHFkaW9fcV9jYWNoZSwgcSk7XG4gXHRcdFx0X19xZGlvX2ZyZWVfcXVldWVzKGlycV9wdHJfcXMsIGkpO1xuQEAgLTI0OSwxMSAmIzQzOzI0OSwxMSBAQCBpbnQgcWRpb19zZXR1cF9nZXRfc3NxZChzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIsXG4gXG4gXHREQkZfRVZFTlQoXCYjMzQ7Z2V0c3NxZDolNHhcJiMzNDssIHNjaGlkLVx1MDAzZXNjaF9ubyk7XG4gXHRpZiAoIWlycV9wdHIpIHtcbi1cdFx0c3NxZCA9IChzdHJ1Y3QgY2hzY19zc3FkX2FyZWEgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRzc3FkID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIXNzcWQpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9IGVsc2Uge1xuLVx0XHRzc3FkID0gKHN0cnVjdCBjaHNjX3NzcWRfYXJlYSAqKWlycV9wdHItXHUwMDNlY2hzY19wYWdlO1xuJiM0MztcdFx0c3NxZCA9IGlycV9wdHItXHUwMDNlY2hzY19wYWdlO1xuIFx0fVxuIFxuIFx0cmMgPSBjaHNjX3NzcWQoKnNjaGlkLCBzc3FkKTtcbkBAIC0yNzAsNyAmIzQzOzI3MCw3IEBAIGludCBxZGlvX3NldHVwX2dldF9zc3FkKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0cixcbiBcbiBvdXQ6XG4gXHRpZiAoIWlycV9wdHIpXG4tXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzc3FkKTtcbiYjNDM7XHRcdGtmcmVlKHNzcWQpO1xuIFxuIFx0cmV0dXJuIHJjO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuY1xuaW5kZXggZTE2N2FhNzVjM2RmZi4uYTJmZjUxODg3NTM3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmNcbkBAIC0xMzYsNyAmIzQzOzEzNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYWlycV9zdHJ1Y3QgdGlxZGlvX2FpcnEgPSB7XG4gXG4gc3RhdGljIGludCBzZXRfc3ViY2hhbm5lbF9pbmQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLCBpbnQgcmVzZXQpXG4ge1xuLVx0c3RydWN0IGNoc2Nfc2Nzc2NfYXJlYSAqc2Nzc2MgPSAodm9pZCAqKWlycV9wdHItXHUwMDNlY2hzY19wYWdlO1xuJiM0MztcdHN0cnVjdCBjaHNjX3Njc3NjX2FyZWEgKnNjc3NjID0gaXJxX3B0ci1cdTAwM2VjaHNjX3BhZ2U7XG4gXHRkbWE2NF90IHN1bW1hcnlfaW5kaWNhdG9yX2FkZHIsIHN1YmNoYW5uZWxfaW5kaWNhdG9yX2FkZHI7XG4gXHRpbnQgcmM7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9zY20uYyBiL2RyaXZlcnMvczM5MC9jaW8vc2NtLmNcbmluZGV4IDE3MTIxMmE2ZDJkOWMuLmI3OWZlMDIzYWI4ZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jXG5AQCAtMTMsNiAmIzQzOzEzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZWFkbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7Y2hzYy5oXCYjMzQ7XG4gXG5AQCAtMjI0LDEyICYjNDM7MjI1LDEyIEBAIHN0YXRpYyBpbnQgc2NtX2FkZChzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm8sIHNpemVfdCBudW0pXG4gXG4gaW50IHNjbV91cGRhdGVfaW5mb3JtYXRpb24odm9pZClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm87XG4mIzQzO1x0c3RydWN0IGNoc2Nfc2NtX2luZm8gKnNjbV9pbmZvIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIFx0dTY0IHRva2VuID0gMDtcbiBcdHNpemVfdCBudW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0c2NtX2luZm8gPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4mIzQzO1x0c2NtX2luZm8gPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuIFx0aWYgKCFzY21faW5mbylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjUwLDggJiM0MzsyNTEsNiBAQCBpbnQgc2NtX3VwZGF0ZV9pbmZvcm1hdGlvbih2b2lkKVxuIFx0XHR0b2tlbiA9IHNjbV9pbmZvLVx1MDAzZXJlc3RvaztcbiBcdH0gd2hpbGUgKHRva2VuKTtcbiBcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY21faW5mbyk7XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzMzkwLXNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9uIGhlbHBlcnMgYW5kIHRoZSBzMzkwIENoYW5uZWwgSS9PIChDSU8pIHN1YnN5c3RlbSAoYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmggYW5kIGRyaXZlcnMvczM5MC9jaW8vKikuIFRoZXNlIGZpbGVzIGFyZSBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCBhcmUgbm90IGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY0NDBmMWUwYjljYmVhMDYzZTljZmM2MmM4N2UxNjllYzIyZjc4MWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE0OjEyOjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaAppbmRleCAwNmUxZWMyYWZkNWFmLi4yNDg4MjlkNDYxYmNlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaApAQCAtMTQ3LDcgJiM0MzsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKQogCQkJaWItJmd0O2RhdGFbaV0gPSBkbWE2NF9hZGQoaWItJmd0O2RhdGFbaSAtIDFdLCBJREFfQkxPQ0tfU0laRSk7CiAJCQljb250aW51ZTsKIAkJfQotCQl2YWRkciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlX29yZGVyKTsKJiM0MzsJCXZhZGRyID0ga21hbGxvYyhQQUdFX1NJWkUgJmx0OyZsdDsgcGFnZV9vcmRlciwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdmFkZHIpCiAJCQlnb3RvIGVycm9yOwogCQlpYi0mZ3Q7ZGF0YVtpXSA9IHZpcnRfdG9fZG1hNjQodmFkZHIpOwpAQCAtMTU3LDcgJiM0MzsxNTcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKQogCXdoaWxlIChpICZndDs9IG5yX2NodW5rcykgewogCQlpIC09IG5yX2NodW5rczsKIAkJdmFkZHIgPSBkbWE2NF90b192aXJ0KGliLSZndDtkYXRhW2ldKTsKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgaWItJmd0O3BhZ2Vfb3JkZXIpOwomIzQzOwkJa2ZyZWUodmFkZHIpOwogCX0KIAlrZnJlZShpYik7CiAJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CkBAIC0xNzUsNyAmIzQzOzE3NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGFsX2J1ZmZlcl9mcmVlKHN0cnVjdCBpZGFsX2J1ZmZlciAqaWIpCiAJbnJfY2h1bmtzID0gKFBBR0VfU0laRSAmbHQ7Jmx0OyBpYi0mZ3Q7cGFnZV9vcmRlcikgJmd0OyZndDsgSURBX1NJWkVfU0hJRlQ7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3B0cnM7IGkgJiM0Mzs9IG5yX2NodW5rcykgewogCQl2YWRkciA9IGRtYTY0X3RvX3ZpcnQoaWItJmd0O2RhdGFbaV0pOwotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBpYi0mZ3Q7cGFnZV9vcmRlcik7CiYjNDM7CQlrZnJlZSh2YWRkcik7CiAJfQogCWtmcmVlKGliKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKaW5kZXggOTY4OWY3MjJjODYzYy4uZDk4ZjYyOWU4OTI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTkzMSwxMiAmIzQzOzkzMSwxMiBAQCBzdGF0aWMgaW50IGN1Yl9hbGxvYyhzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW0gKmNzcykKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBDU1NfTlVNX0NVQl9QQUdFUzsgaSYjNDM7JiM0MzspIHsKLQkJY3NzLSZndDtjdWJbaV0gPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiYjNDM7CQljc3MtJmd0O2N1YltpXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmICghY3NzLSZndDtjdWJbaV0pCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZm9yIChpID0gMDsgaSAmbHQ7IENTU19OVU1fRUNVQl9QQUdFUzsgaSYjNDM7JiM0MzspIHsKLQkJY3NzLSZndDtlY3ViW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CQljc3MtJmd0O2VjdWJbaV0gPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghY3NzLSZndDtlY3ViW2ldKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtOTQ5LDExICYjNDM7OTQ5LDExIEBAIHN0YXRpYyB2b2lkIGN1Yl9mcmVlKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzKQogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IENTU19OVU1fQ1VCX1BBR0VTOyBpJiM0MzsmIzQzOykgewotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY3NzLSZndDtjdWJbaV0pOwomIzQzOwkJa2ZyZWUoY3NzLSZndDtjdWJbaV0pOwogCQljc3MtJmd0O2N1YltpXSA9IE5VTEw7CiAJfQogCWZvciAoaSA9IDA7IGkgJmx0OyBDU1NfTlVNX0VDVUJfUEFHRVM7IGkmIzQzOyYjNDM7KSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljc3MtJmd0O2VjdWJbaV0pOwomIzQzOwkJa2ZyZWUoY3NzLSZndDtlY3ViW2ldKTsKIAkJY3NzLSZndDtlY3ViW2ldID0gTlVMTDsKIAl9CiB9CkBAIC0xMTQyLDggJiM0MzsxMTQyLDggQEAgaW50IF9faW5pdCBjaHNjX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0Jc2VpX3BhZ2UgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JY2hzY19wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwomIzQzOwlzZWlfcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiYjNDM7CWNoc2NfcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFzZWlfcGFnZSB8fCAhY2hzY19wYWdlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2VycjsKQEAgLTExNTMsMTYgJiM0MzsxMTUzLDE2IEBAIGludCBfX2luaXQgY2hzY19pbml0KHZvaWQpCiAJCWdvdG8gb3V0X2VycjsKIAlyZXR1cm4gcmV0Owogb3V0X2VycjoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19wYWdlKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2VpX3BhZ2UpOwomIzQzOwlrZnJlZShjaHNjX3BhZ2UpOwomIzQzOwlrZnJlZShzZWlfcGFnZSk7CiAJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBfX2luaXQgY2hzY19pbml0X2NsZWFudXAodm9pZCkKIHsKIAljcndfdW5yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1NTKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19wYWdlKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2VpX3BhZ2UpOwomIzQzOwlrZnJlZShjaHNjX3BhZ2UpOwomIzQzOwlrZnJlZShzZWlfcGFnZSk7CiB9CiAKIGludCBfX2Noc2NfZW5hYmxlX2ZhY2lsaXR5KHN0cnVjdCBjaHNjX3NkYV9hcmVhICpzZGFfYXJlYSwgaW50IG9wZXJhdGlvbl9jb2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCmluZGV4IGI2Y2I4YmI4YmNjNGIuLjIyNWFhYWM3ZGQzMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pc2NkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWxfc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vY2lvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2Noc2MuaCZndDsKQEAgLTI5Miw3ICYjNDM7MjkzLDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX3N0YXJ0KHZvaWQgX191c2VyICp1c2VyX2FyZWEpCiAJaWYgKCFjc3NfZ2VuZXJhbF9jaGFyYWN0ZXJpc3RpY3MuZHluaW8pCiAJCS8qIEl0IG1ha2VzIG5vIHNlbnNlIHRvIHRyeS4gKi8KIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCWNoc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKJiM0MzsJY2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoc2NfYXJlYSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVxdWVzdCA9IGt6YWxsb2Nfb2JqKCpyZXF1ZXN0KTsKQEAgLTMyMSw3ICYjNDM7MzIyLDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX3N0YXJ0KHZvaWQgX191c2VyICp1c2VyX2FyZWEpCiAJc25wcmludGYoZGJmLCBzaXplb2YoZGJmKSwgJiMzNDtyZXQ6JWQmIzM0OywgcmV0KTsKIAlDSFNDX0xPRygwLCBkYmYpOwogCWtmcmVlKHJlcXVlc3QpOwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljaHNjX2FyZWEpOwomIzQzOwlrZnJlZShjaHNjX2FyZWEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0MCw3ICYjNDM7MzQxLDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3NldCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKQogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQotCW9uX2Nsb3NlX2Noc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKJiM0MzsJb25fY2xvc2VfY2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKIAlpZiAoIW9uX2Nsb3NlX2Noc2NfYXJlYSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3JlcXVlc3Q7CkBAIC0zNTMsNyAmIzQzOzM1NCw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9zZXQodm9pZCBfX3VzZXIgKnVzZXJfYXJlYSkKIAlnb3RvIG91dF91bmxvY2s7CiAKIG91dF9mcmVlX2Noc2M6Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7CiYjNDM7CWtmcmVlKG9uX2Nsb3NlX2Noc2NfYXJlYSk7CiAJb25fY2xvc2VfY2hzY19hcmVhID0gTlVMTDsKIG91dF9mcmVlX3JlcXVlc3Q6CiAJa2ZyZWUob25fY2xvc2VfcmVxdWVzdCk7CkBAIC0zNzUsNyAmIzQzOzM3Niw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9yZW1vdmUodm9pZCkKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpb25fY2xvc2VfY2hzY19hcmVhKTsKJiM0MzsJa2ZyZWUob25fY2xvc2VfY2hzY19hcmVhKTsKIAlvbl9jbG9zZV9jaHNjX2FyZWEgPSBOVUxMOwogCWtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpOwogCW9uX2Nsb3NlX3JlcXVlc3QgPSBOVUxMOwpAQCAtMzg5LDM5ICYjNDM7MzkwLDI5IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9yZW1vdmUodm9pZCkKIAogc3RhdGljIGludCBjaHNjX2lvY3RsX3N0YXJ0X3N5bmModm9pZCBfX3VzZXIgKnVzZXJfYXJlYSkKIHsKLQlzdHJ1Y3QgY2hzY19zeW5jX2FyZWEgKmNoc2NfYXJlYTsKLQlpbnQgcmV0LCBjY29kZTsKJiM0MzsJc3RydWN0IGNoc2Nfc3luY19hcmVhICpjaHNjX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiYjNDM7CWludCBjY29kZTsKIAotCWNoc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJY2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIWNoc2NfYXJlYSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGNoc2NfYXJlYSwgdXNlcl9hcmVhLCBQQUdFX1NJWkUpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCWlmIChjaHNjX2FyZWEtJmd0O2hlYWRlci5jb2RlICZhbXA7IDB4NDAwMCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKGNoc2NfYXJlYSwgdXNlcl9hcmVhLCBQQUdFX1NJWkUpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWlmIChjaHNjX2FyZWEtJmd0O2hlYWRlci5jb2RlICZhbXA7IDB4NDAwMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwogCWNoc2NfbG9nX2NvbW1hbmQoY2hzY19hcmVhKTsKIAljY29kZSA9IGNoc2MoY2hzY19hcmVhKTsKLQlpZiAoY2NvZGUgIT0gMCkgewotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJaWYgKGNjb2RlICE9IDApCiYjNDM7CQlyZXR1cm4gLUVJTzsKIAlpZiAoY29weV90b191c2VyKHVzZXJfYXJlYSwgY2hzY19hcmVhLCBQQUdFX1NJWkUpKQotCQlyZXQgPSAtRUZBVUxUOwotCWVsc2UKLQkJcmV0ID0gMDsKLW91dF9mcmVlOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljaHNjX2FyZWEpOwotCXJldHVybiByZXQ7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2NoYW5uZWxfcGF0aCh2b2lkIF9fdXNlciAqdXNlcl9jZCkKIHsKLQlzdHJ1Y3QgY2hzY19jaHBfY2QgKmNkOwotCWludCByZXQsIGNjb2RlOwomIzQzOwlzdHJ1Y3QgY2hzY19jaHBfY2QgKmNkIF9fZnJlZShrZnJlZSkgPSBOVUxMOwomIzQzOwlpbnQgY2NvZGU7CiAJc3RydWN0IHsKIAkJc3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7CiAJCXUzMiA6IDI7CkBAIC00MzYsMjAgJiM0Mzs0MjcsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY2hhbm5lbF9wYXRoKHZvaWQgX191c2VyICp1c2VyX2NkKQogCQl1MzIgOiAzMjsKIAkJc3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlOwogCQl1OCBkYXRhW1BBR0VfU0laRSAtIDIwXTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NwY2RfYXJlYTsKJiM0MzsJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjcGNkX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiAKLQlzY3BjZF9hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwomIzQzOwlzY3BjZF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIXNjcGNkX2FyZWEpCiAJCXJldHVybiAtRU5PTUVNOwogCWNkID0ga3phbGxvY19vYmooKmNkKTsKLQlpZiAoIWNkKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCWlmIChjb3B5X2Zyb21fdXNlcihjZCwgdXNlcl9jZCwgc2l6ZW9mKCpjZCkpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoIWNkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcihjZCwgdXNlcl9jZCwgc2l6ZW9mKCpjZCkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiAJc2NwY2RfYXJlYS0mZ3Q7cmVxdWVzdC5sZW5ndGggPSAweDAwMTA7CiAJc2NwY2RfYXJlYS0mZ3Q7cmVxdWVzdC5jb2RlID0gMHgwMDI4OwogCXNjcGNkX2FyZWEtJmd0O20gPSBjZC0mZ3Q7bTsKQEAgLTQ1OSwzMSAmIzQzOzQ0NiwyMyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jaGFubmVsX3BhdGgodm9pZCBfX3VzZXIgKnVzZXJfY2QpCiAJc2NwY2RfYXJlYS0mZ3Q7bGFzdF9jaHBpZCA9IGNkLSZndDtjaHBpZC5pZDsKIAogCWNjb2RlID0gY2hzYyhzY3BjZF9hcmVhKTsKLQlpZiAoY2NvZGUgIT0gMCkgewotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJaWYgKGNjb2RlICE9IDApCiYjNDM7CQlyZXR1cm4gLUVJTzsKIAlpZiAoc2NwY2RfYXJlYS0mZ3Q7cmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHsKLQkJcmV0ID0gLUVJTzsKIAkJQ0hTQ19NU0coMCwgJiMzNDtzY3BjZDogcmVzcG9uc2UgY29kZT0leFxuJiMzNDssCiAJCQkgc2NwY2RfYXJlYS0mZ3Q7cmVzcG9uc2UuY29kZSk7Ci0JCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CQlyZXR1cm4gLUVJTzsKIAl9CiAJbWVtY3B5KCZhbXA7Y2QtJmd0O2NwY2IsICZhbXA7c2NwY2RfYXJlYS0mZ3Q7cmVzcG9uc2UsIHNjcGNkX2FyZWEtJmd0O3Jlc3BvbnNlLmxlbmd0aCk7CiAJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2NkLCBjZCwgc2l6ZW9mKCpjZCkpKQotCQlyZXQgPSAtRUZBVUxUOwotCWVsc2UKLQkJcmV0ID0gMDsKLW91dF9mcmVlOgotCWtmcmVlKGNkKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NwY2RfYXJlYSk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpCiB7Ci0Jc3RydWN0IGNoc2NfY3VfY2QgKmNkOwotCWludCByZXQsIGNjb2RlOwomIzQzOwlzdHJ1Y3QgY2hzY19jdV9jZCAqY2QgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiYjNDM7CWludCBjY29kZTsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDsKIAkJdTMyIDogMjsKQEAgLTQ5OCwyMCAmIzQzOzQ3NywxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jdSh2b2lkIF9fdXNlciAqdXNlcl9jZCkKIAkJdTMyIDogMzI7CiAJCXN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTsKIAkJdTggZGF0YVtQQUdFX1NJWkUgLSAyMF07Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjdWNkX2FyZWE7CiYjNDM7CX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3VjZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMOwogCi0Jc2N1Y2RfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJc2N1Y2RfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFzY3VjZF9hcmVhKQogCQlyZXR1cm4gLUVOT01FTTsKIAljZCA9IGt6YWxsb2Nfb2JqKCpjZCk7Ci0JaWYgKCFjZCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQlpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJaWYgKCFjZCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwogCXNjdWNkX2FyZWEtJmd0O3JlcXVlc3QubGVuZ3RoID0gMHgwMDEwOwogCXNjdWNkX2FyZWEtJmd0O3JlcXVlc3QuY29kZSA9IDB4MDAyNjsKIAlzY3VjZF9hcmVhLSZndDttID0gY2QtJmd0O207CkBAIC01MjEsMzEgJiM0Mzs0OTYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpCiAJc2N1Y2RfYXJlYS0mZ3Q7bGFzdF9jdW4gPSBjZC0mZ3Q7Y3VuOwogCiAJY2NvZGUgPSBjaHNjKHNjdWNkX2FyZWEpOwotCWlmIChjY29kZSAhPSAwKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoY2NvZGUgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlPOwogCWlmIChzY3VjZF9hcmVhLSZndDtyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkgewotCQlyZXQgPSAtRUlPOwogCQlDSFNDX01TRygwLCAmIzM0O3NjdWNkOiByZXNwb25zZSBjb2RlPSV4XG4mIzM0OywKIAkJCSBzY3VjZF9hcmVhLSZndDtyZXNwb25zZS5jb2RlKTsKLQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCXJldHVybiAtRUlPOwogCX0KIAltZW1jcHkoJmFtcDtjZC0mZ3Q7Y3VjYiwgJmFtcDtzY3VjZF9hcmVhLSZndDtyZXNwb25zZSwgc2N1Y2RfYXJlYS0mZ3Q7cmVzcG9uc2UubGVuZ3RoKTsKIAlpZiAoY29weV90b191c2VyKHVzZXJfY2QsIGNkLCBzaXplb2YoKmNkKSkpCi0JCXJldCA9IC1FRkFVTFQ7Ci0JZWxzZQotCQlyZXQgPSAwOwotb3V0X2ZyZWU6Ci0Ja2ZyZWUoY2QpOwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3VjZF9hcmVhKTsKLQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19zY2hfY3Uodm9pZCBfX3VzZXIgKnVzZXJfY3VkKQogewotCXN0cnVjdCBjaHNjX3NjaF9jdWQgKmN1ZDsKLQlpbnQgcmV0LCBjY29kZTsKJiM0MzsJc3RydWN0IGNoc2Nfc2NoX2N1ZCAqY3VkIF9fZnJlZShrZnJlZSkgPSBOVUxMOwomIzQzOwlpbnQgY2NvZGU7CiAJc3RydWN0IHsKIAkJc3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7CiAJCXUzMiA6IDI7CkBAIC01NjEsMjAgJiM0Mzs1MjgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fc2NoX2N1KHZvaWQgX191c2VyICp1c2VyX2N1ZCkKIAkJdTMyIDogMzI7CiAJCXN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTsKIAkJdTggZGF0YVtQQUdFX1NJWkUgLSAyMF07Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNzY3VkX2FyZWE7CiYjNDM7CX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzc2N1ZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMOwogCi0Jc3NjdWRfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJc3NjdWRfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFzc2N1ZF9hcmVhKQogCQlyZXR1cm4gLUVOT01FTTsKIAljdWQgPSBremFsbG9jX29iaigqY3VkKTsKLQlpZiAoIWN1ZCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQlpZiAoY29weV9mcm9tX3VzZXIoY3VkLCB1c2VyX2N1ZCwgc2l6ZW9mKCpjdWQpKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJaWYgKCFjdWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKGN1ZCwgdXNlcl9jdWQsIHNpemVvZigqY3VkKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKIAlzc2N1ZF9hcmVhLSZndDtyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAxMDsKIAlzc2N1ZF9hcmVhLSZndDtyZXF1ZXN0LmNvZGUgPSAweDAwMDY7CiAJc3NjdWRfYXJlYS0mZ3Q7bSA9IGN1ZC0mZ3Q7c2NoaWQubTsKQEAgLTU4NSwzMSAmIzQzOzU0OCwyMyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19zY2hfY3Uodm9pZCBfX3VzZXIgKnVzZXJfY3VkKQogCXNzY3VkX2FyZWEtJmd0O2xhc3Rfc2NoID0gY3VkLSZndDtzY2hpZC5zY2hfbm87CiAKIAljY29kZSA9IGNoc2Moc3NjdWRfYXJlYSk7Ci0JaWYgKGNjb2RlICE9IDApIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXRfZnJlZTsKLQl9CiYjNDM7CWlmIChjY29kZSAhPSAwKQomIzQzOwkJcmV0dXJuIC1FSU87CiAJaWYgKHNzY3VkX2FyZWEtJmd0O3Jlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7Ci0JCXJldCA9IC1FSU87CiAJCUNIU0NfTVNHKDAsICYjMzQ7c3NjdWQ6IHJlc3BvbnNlIGNvZGU9JXhcbiYjMzQ7LAogCQkJIHNzY3VkX2FyZWEtJmd0O3Jlc3BvbnNlLmNvZGUpOwotCQlnb3RvIG91dF9mcmVlOwomIzQzOwkJcmV0dXJuIC1FSU87CiAJfQogCW1lbWNweSgmYW1wO2N1ZC0mZ3Q7c2N1YiwgJmFtcDtzc2N1ZF9hcmVhLSZndDtyZXNwb25zZSwgc3NjdWRfYXJlYS0mZ3Q7cmVzcG9uc2UubGVuZ3RoKTsKIAlpZiAoY29weV90b191c2VyKHVzZXJfY3VkLCBjdWQsIHNpemVvZigqY3VkKSkpCi0JCXJldCA9IC1FRkFVTFQ7Ci0JZWxzZQotCQlyZXQgPSAwOwotb3V0X2ZyZWU6Ci0Ja2ZyZWUoY3VkKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3NjdWRfYXJlYSk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSkKIHsKLQlzdHJ1Y3QgY2hzY19jb25mX2luZm8gKmNpOwotCWludCByZXQsIGNjb2RlOwomIzQzOwlzdHJ1Y3QgY2hzY19jb25mX2luZm8gKmNpIF9fZnJlZShrZnJlZSkgPSBOVUxMOwomIzQzOwlpbnQgY2NvZGU7CiAJc3RydWN0IHsKIAkJc3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7CiAJCXUzMiA6IDI7CkBAIC02MjMsMjAgJiM0Mzs1NzgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSkKIAkJdTY0IDogNjQ7CiAJCXN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTsKIAkJdTggZGF0YVtQQUdFX1NJWkUgLSAyMF07Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjaV9hcmVhOwomIzQzOwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NpX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiAKLQlzY2lfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJc2NpX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmICghc2NpX2FyZWEpCiAJCXJldHVybiAtRU5PTUVNOwogCWNpID0ga3phbGxvY19vYmooKmNpKTsKLQlpZiAoIWNpKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCWlmIChjb3B5X2Zyb21fdXNlcihjaSwgdXNlcl9jaSwgc2l6ZW9mKCpjaSkpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoIWNpKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcihjaSwgdXNlcl9jaSwgc2l6ZW9mKCpjaSkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiAJc2NpX2FyZWEtJmd0O3JlcXVlc3QubGVuZ3RoID0gMHgwMDEwOwogCXNjaV9hcmVhLSZndDtyZXF1ZXN0LmNvZGUgPSAweDAwMTI7CiAJc2NpX2FyZWEtJmd0O20gPSBjaS0mZ3Q7aWQubTsKQEAgLTY0NSwzMSAmIzQzOzU5NiwyMyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9pbmZvKHZvaWQgX191c2VyICp1c2VyX2NpKQogCXNjaV9hcmVhLSZndDtzc2lkID0gY2ktJmd0O2lkLnNzaWQ7CiAKIAljY29kZSA9IGNoc2Moc2NpX2FyZWEpOwotCWlmIChjY29kZSAhPSAwKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoY2NvZGUgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlPOwogCWlmIChzY2lfYXJlYS0mZ3Q7cmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHsKLQkJcmV0ID0gLUVJTzsKIAkJQ0hTQ19NU0coMCwgJiMzNDtzY2k6IHJlc3BvbnNlIGNvZGU9JXhcbiYjMzQ7LAogCQkJIHNjaV9hcmVhLSZndDtyZXNwb25zZS5jb2RlKTsKLQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCXJldHVybiAtRUlPOwogCX0KIAltZW1jcHkoJmFtcDtjaS0mZ3Q7c2NpZCwgJmFtcDtzY2lfYXJlYS0mZ3Q7cmVzcG9uc2UsIHNjaV9hcmVhLSZndDtyZXNwb25zZS5sZW5ndGgpOwogCWlmIChjb3B5X3RvX3VzZXIodXNlcl9jaSwgY2ksIHNpemVvZigqY2kpKSkKLQkJcmV0ID0gLUVGQVVMVDsKLQllbHNlCi0JCXJldCA9IDA7Ci1vdXRfZnJlZToKLQlrZnJlZShjaSk7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjaV9hcmVhKTsKLQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKQogewotCXN0cnVjdCBjaHNjX2NvbXBfbGlzdCAqY2NsOwotCWludCByZXQsIGNjb2RlOwomIzQzOwlzdHJ1Y3QgY2hzY19jb21wX2xpc3QgKmNjbCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKJiM0MzsJaW50IGNjb2RlOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0OwogCQl1MzIgY3R5cGUgOiA4OwpAQCAtNjgxLDcgJiM0Mzs2MjQsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKQogCQl1NjQgOiA2NDsKIAkJc3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlOwogCQl1OCBkYXRhW1BBR0VfU0laRSAtIDM2XTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NjbF9hcmVhOwomIzQzOwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NjbF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMOwogCXN0cnVjdCB7CiAJCXUzMiBtIDogMTsKIAkJdTMyIDogMzE7CkBAIC02OTYsMTggJiM0Mzs2MzksMTQgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbCkKIAkJdTMyIHJlczsKIAl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqY3NzaWRzX3Bhcm07CiAKLQlzY2NsX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiYjNDM7CXNjY2xfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFzY2NsX2FyZWEpCiAJCXJldHVybiAtRU5PTUVNOwogCWNjbCA9IGt6YWxsb2Nfb2JqKCpjY2wpOwotCWlmICghY2NsKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCWlmIChjb3B5X2Zyb21fdXNlcihjY2wsIHVzZXJfY2NsLCBzaXplb2YoKmNjbCkpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoIWNjbCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoY2NsLCB1c2VyX2NjbCwgc2l6ZW9mKCpjY2wpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwogCXNjY2xfYXJlYS0mZ3Q7cmVxdWVzdC5sZW5ndGggPSAweDAwMjA7CiAJc2NjbF9hcmVhLSZndDtyZXF1ZXN0LmNvZGUgPSAweDAwMzA7CiAJc2NjbF9hcmVhLSZndDtmbXQgPSBjY2wtJmd0O3JlcS5mbXQ7CkBAIC03MjgsNjEgJiM0Mzs2NjcsNDYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbCkKIAkJYnJlYWs7CiAJfQogCWNjb2RlID0gY2hzYyhzY2NsX2FyZWEpOwotCWlmIChjY29kZSAhPSAwKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQomIzQzOwlpZiAoY2NvZGUgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlPOwogCWlmIChzY2NsX2FyZWEtJmd0O3Jlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7Ci0JCXJldCA9IC1FSU87CiAJCUNIU0NfTVNHKDAsICYjMzQ7c2NjbDogcmVzcG9uc2UgY29kZT0leFxuJiMzNDssCiAJCQkgc2NjbF9hcmVhLSZndDtyZXNwb25zZS5jb2RlKTsKLQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCXJldHVybiAtRUlPOwogCX0KIAltZW1jcHkoJmFtcDtjY2wtJmd0O3NjY2wsICZhbXA7c2NjbF9hcmVhLSZndDtyZXNwb25zZSwgc2NjbF9hcmVhLSZndDtyZXNwb25zZS5sZW5ndGgpOwogCWlmIChjb3B5X3RvX3VzZXIodXNlcl9jY2wsIGNjbCwgc2l6ZW9mKCpjY2wpKSkKLQkJcmV0ID0gLUVGQVVMVDsKLQllbHNlCi0JCXJldCA9IDA7Ci1vdXRfZnJlZToKLQlrZnJlZShjY2wpOwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY2NsX2FyZWEpOwotCXJldHVybiByZXQ7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jaHBkKHZvaWQgX191c2VyICp1c2VyX2NocGQpCiB7Ci0Jc3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhOwotCXN0cnVjdCBjaHNjX2NwZF9pbmZvICpjaHBkOwomIzQzOwlzdHJ1Y3QgY2hzY19zY3BkICpzY3BkX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBjaHNjX2NwZF9pbmZvICpjaHBkIF9fZnJlZShrZnJlZSkgPSBOVUxMOwogCWludCByZXQ7CiAKIAljaHBkID0ga3phbGxvY19vYmooKmNocGQpOwotCXNjcGRfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQlpZiAoIXNjcGRfYXJlYSB8fCAhY2hwZCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQlpZiAoY29weV9mcm9tX3VzZXIoY2hwZCwgdXNlcl9jaHBkLCBzaXplb2YoKmNocGQpKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dF9mcmVlOwotCX0KJiM0MzsJc2NwZF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJaWYgKCFzY3BkX2FyZWEgfHwgIWNocGQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKGNocGQsIHVzZXJfY2hwZCwgc2l6ZW9mKCpjaHBkKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKIAlyZXQgPSBjaHNjX2RldGVybWluZV9jaGFubmVsX3BhdGhfZGVzYyhjaHBkLSZndDtjaHBpZCwgY2hwZC0mZ3Q7Zm10LAogCQkJCQkgICAgICAgY2hwZC0mZ3Q7cmZtdCwgY2hwZC0mZ3Q7YywgY2hwZC0mZ3Q7bSwKIAkJCQkJICAgICAgIHNjcGRfYXJlYSk7CiAJaWYgKHJldCkKLQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCXJldHVybiByZXQ7CiAJbWVtY3B5KCZhbXA7Y2hwZC0mZ3Q7Y2hwZGIsICZhbXA7c2NwZF9hcmVhLSZndDtyZXNwb25zZSwgc2NwZF9hcmVhLSZndDtyZXNwb25zZS5sZW5ndGgpOwogCWlmIChjb3B5X3RvX3VzZXIodXNlcl9jaHBkLCBjaHBkLCBzaXplb2YoKmNocGQpKSkKLQkJcmV0ID0gLUVGQVVMVDsKLW91dF9mcmVlOgotCWtmcmVlKGNocGQpOwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3BkX2FyZWEpOwotCXJldHVybiByZXQ7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9kY2FsKHZvaWQgX191c2VyICp1c2VyX2RjYWwpCiB7Ci0Jc3RydWN0IGNoc2NfZGNhbCAqZGNhbDsKLQlpbnQgcmV0LCBjY29kZTsKJiM0MzsJc3RydWN0IGNoc2NfZGNhbCAqZGNhbCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKJiM0MzsJaW50IGNjb2RlOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0OwogCQl1MzIgYXR5cGUgOiA4OwpAQCAtNzk0LDIwICYjNDM7NzE4LDE2IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9kY2FsKHZvaWQgX191c2VyICp1c2VyX2RjYWwpCiAJCXUzMiByZXMxWzJdOwogCQlzdHJ1Y3QgY2hzY19oZWFkZXIgcmVzcG9uc2U7CiAJCXU4IGRhdGFbUEFHRV9TSVpFIC0gMzZdOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzZGNhbF9hcmVhOwomIzQzOwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2RjYWxfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKIAotCXNkY2FsX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiYjNDM7CXNkY2FsX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmICghc2RjYWxfYXJlYSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZGNhbCA9IGt6YWxsb2Nfb2JqKCpkY2FsKTsKLQlpZiAoIWRjYWwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGRjYWwsIHVzZXJfZGNhbCwgc2l6ZW9mKCpkY2FsKSkpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBvdXRfZnJlZTsKLQl9CiYjNDM7CWlmICghZGNhbCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoZGNhbCwgdXNlcl9kY2FsLCBzaXplb2YoKmRjYWwpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwogCXNkY2FsX2FyZWEtJmd0O3JlcXVlc3QubGVuZ3RoID0gMHgwMDIwOwogCXNkY2FsX2FyZWEtJmd0O3JlcXVlc3QuY29kZSA9IDB4MDAzNDsKIAlzZGNhbF9hcmVhLSZndDthdHlwZSA9IGRjYWwtJmd0O3JlcS5hdHlwZTsKQEAgLTgxNiwyNiAmIzQzOzczNiwxOCBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfZGNhbCh2b2lkIF9fdXNlciAqdXNlcl9kY2FsKQogCSAgICAgICBzaXplb2Yoc2RjYWxfYXJlYS0mZ3Q7bGlzdF9wYXJtKSk7CiAKIAljY29kZSA9IGNoc2Moc2RjYWxfYXJlYSk7Ci0JaWYgKGNjb2RlICE9IDApIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXRfZnJlZTsKLQl9CiYjNDM7CWlmIChjY29kZSAhPSAwKQomIzQzOwkJcmV0dXJuIC1FSU87CiAJaWYgKHNkY2FsX2FyZWEtJmd0O3Jlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7Ci0JCXJldCA9IC1FSU87CiAJCUNIU0NfTVNHKDAsICYjMzQ7c2RjYWw6IHJlc3BvbnNlIGNvZGU9JXhcbiYjMzQ7LAogCQkJIHNkY2FsX2FyZWEtJmd0O3Jlc3BvbnNlLmNvZGUpOwotCQlnb3RvIG91dF9mcmVlOwomIzQzOwkJcmV0dXJuIC1FSU87CiAJfQogCW1lbWNweSgmYW1wO2RjYWwtJmd0O3NkY2FsLCAmYW1wO3NkY2FsX2FyZWEtJmd0O3Jlc3BvbnNlLAogCSAgICAgICBzZGNhbF9hcmVhLSZndDtyZXNwb25zZS5sZW5ndGgpOwogCWlmIChjb3B5X3RvX3VzZXIodXNlcl9kY2FsLCBkY2FsLCBzaXplb2YoKmRjYWwpKSkKLQkJcmV0ID0gLUVGQVVMVDsKLQllbHNlCi0JCXJldCA9IDA7Ci1vdXRfZnJlZToKLQlrZnJlZShkY2FsKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2RjYWxfYXJlYSk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGxvbmcgY2hzY19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTkwNCw3ICYjNDM7ODE2LDcgQEAgc3RhdGljIGludCBjaHNjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiAJfQogCXNucHJpbnRmKGRiZiwgc2l6ZW9mKGRiZiksICYjMzQ7cmVscmV0OiVkJiMzNDssIHJldCk7CiAJQ0hTQ19MT0coMCwgZGJmKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpb25fY2xvc2VfY2hzY19hcmVhKTsKJiM0MzsJa2ZyZWUob25fY2xvc2VfY2hzY19hcmVhKTsKIAlvbl9jbG9zZV9jaHNjX2FyZWEgPSBOVUxMOwogCWtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpOwogCW9uX2Nsb3NlX3JlcXVlc3QgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jbWYuYyBiL2RyaXZlcnMvczM5MC9jaW8vY21mLmMKaW5kZXggOTJhYjNkNTQ2ZmU0Ny4uNmM0NmIwZDBiM2RhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jbWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL2NtZi5jCkBAIC01MDEsMTIgJiM0Mzs1MDEsMTIgQEAgc3RhdGljIGludCBhbGxvY19jbWIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiAJCVdBUk5fT04oIWxpc3RfZW1wdHkoJmFtcDtjbWJfYXJlYS5saXN0KSk7CiAKIAkJc3Bpbl91bmxvY2soJmFtcDtjbWJfYXJlYS5sb2NrKTsKLQkJbWVtID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihzaXplKSk7CiYjNDM7CQltZW0gPSBrbWFsbG9jKFBBR0VfU0laRSAmbHQ7Jmx0OyBnZXRfb3JkZXIoc2l6ZSksIEdGUF9LRVJORUwpOwogCQlzcGluX2xvY2soJmFtcDtjbWJfYXJlYS5sb2NrKTsKIAogCQlpZiAoY21iX2FyZWEubWVtKSB7CiAJCQkvKiBvaywgYW5vdGhlciB0aHJlYWQgd2FzIGZhc3RlciAqLwotCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyltZW0sIGdldF9vcmRlcihzaXplKSk7CiYjNDM7CQkJa2ZyZWUobWVtKTsKIAkJfSBlbHNlIGlmICghbWVtKSB7CiAJCQkvKiBubyBsdWNrICovCiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtNTQ3LDEwICYjNDM7NTQ3LDggQEAgc3RhdGljIHZvaWQgZnJlZV9jbWIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiAJbGlzdF9kZWxfaW5pdCgmYW1wO3ByaXYtJmd0O2NtYl9saXN0KTsKIAogCWlmIChsaXN0X2VtcHR5KCZhbXA7Y21iX2FyZWEubGlzdCkpIHsKLQkJc3NpemVfdCBzaXplOwotCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBjbWIpICogY21iX2FyZWEubnVtX2NoYW5uZWxzOwogCQljbWZfYWN0aXZhdGUoTlVMTCwgQ01GX09GRik7Ci0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpY21iX2FyZWEubWVtLCBnZXRfb3JkZXIoc2l6ZSkpOwomIzQzOwkJa2ZyZWUoY21iX2FyZWEubWVtKTsKIAkJY21iX2FyZWEubWVtID0gTlVMTDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKGNkZXYtJmd0O2Njd2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCA0YmQ0YzAwYzljMGNhLi5kZmY1ZjUzYTg3OTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMjQ0LDcgJiM0MzsyNDQsNyBAQCBzdHJ1Y3QgcWRpb19pcnEgewogCWludCBwZXJmX3N0YXRfZW5hYmxlZDsKIAogCXN0cnVjdCBxZHIgKnFkcjsKLQl1bnNpZ25lZCBsb25nIGNoc2NfcGFnZTsKJiM0MzsJdm9pZCAqY2hzY19wYWdlOwogCiAJc3RydWN0IHFkaW9fcSAqaW5wdXRfcXNbUURJT19NQVhfUVVFVUVTX1BFUl9JUlFdOwogCXN0cnVjdCBxZGlvX3EgKm91dHB1dF9xc1tRRElPX01BWF9RVUVVRVNfUEVSX0lSUV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCBjMWUwOWZhMzRlNzc0Li5iZWJjMTI1MGViZWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTE3LDYgJiM0MzsxNyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9hdG9taWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9kZWJ1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9xZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2FzbS5oJmd0OwpAQCAtOTMzLDEwICYjNDM7OTM0LDEwIEBAIGludCBxZGlvX2ZyZWUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiAJbXV0ZXhfdW5sb2NrKCZhbXA7aXJxX3B0ci0mZ3Q7c2V0dXBfbXV0ZXgpOwogCiAJcWRpb19mcmVlX3F1ZXVlcyhpcnFfcHRyKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlycV9wdHItJmd0O3Fkcik7Ci0JZnJlZV9wYWdlKGlycV9wdHItJmd0O2Noc2NfcGFnZSk7CiYjNDM7CWtmcmVlKGlycV9wdHItJmd0O3Fkcik7CiYjNDM7CWtmcmVlKGlycV9wdHItJmd0O2Noc2NfcGFnZSk7CiAJa2ZyZWUoaXJxX3B0ci0mZ3Q7Y2N3KTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlycV9wdHIpOwomIzQzOwlrZnJlZShpcnFfcHRyKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFkaW9fZnJlZSk7CkBAIC05NjEsNyAmIzQzOzk2Miw3IEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsCiAJICAgIG5vX291dHB1dF9xcyAmZ3Q7IFFESU9fTUFYX1FVRVVFU19QRVJfSVJRKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlycV9wdHIgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CWlycV9wdHIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpcnFfcHRyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtOTg2LDEyICYjNDM7OTg3LDEyIEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsCiAJICogcWRpb19lc3RhYmxpc2guIEluIGNhc2Ugb2YgbG93IG1lbW9yeSBhbmQgc3dhcCBvbiBhIHpmY3AgZGlzawogCSAqIHdlIG1heSBub3QgYmUgYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgb3RoZXJ3aXNlLgogCSAqLwotCWlycV9wdHItJmd0O2Noc2NfcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJaXJxX3B0ci0mZ3Q7Y2hzY19wYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghaXJxX3B0ci0mZ3Q7Y2hzY19wYWdlKQogCQlnb3RvIGVycl9jaHNjOwogCiAJLyogcWRyIGlzIHVzZWQgaW4gY2N3MS5jZGEgd2hpY2ggaXMgdTMyICovCi0JaXJxX3B0ci0mZ3Q7cWRyID0gKHN0cnVjdCBxZHIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKJiM0MzsJaXJxX3B0ci0mZ3Q7cWRyID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIWlycV9wdHItJmd0O3FkcikKIAkJZ290byBlcnJfcWRyOwogCkBAIC0xMDA0LDE0ICYjNDM7MTAwNSwxNCBAQCBpbnQgcWRpb19hbGxvY2F0ZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IG5vX2lucHV0X3FzLAogCXJldHVybiAwOwogCiBlcnJfcXVldWVzOgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0ci0mZ3Q7cWRyKTsKJiM0MzsJa2ZyZWUoaXJxX3B0ci0mZ3Q7cWRyKTsKIGVycl9xZHI6Ci0JZnJlZV9wYWdlKGlycV9wdHItJmd0O2Noc2NfcGFnZSk7CiYjNDM7CWtmcmVlKGlycV9wdHItJmd0O2Noc2NfcGFnZSk7CiBlcnJfY2hzYzoKIGVycl9kYmY6CiAJa2ZyZWUoaXJxX3B0ci0mZ3Q7Y2N3KTsKIGVycl9jY3c6Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyKTsKJiM0MzsJa2ZyZWUoaXJxX3B0cik7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocWRpb19hbGxvY2F0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCmluZGV4IGVhMDlhYWRhYWU0ZWMuLmMwMjE1YTdkMjlhODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCkBAIC0zNSw3ICYjNDM7MzUsNyBAQCB2b2lkIHFkaW9fZnJlZV9idWZmZXJzKHN0cnVjdCBxZGlvX2J1ZmZlciAqKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQogCWludCBwb3M7CiAKIAlmb3IgKHBvcyA9IDA7IHBvcyAmbHQ7IGNvdW50OyBwb3MgJiM0Mzs9IFFCVUZGX1BFUl9QQUdFKQotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zltwb3NdKTsKJiM0MzsJCWtmcmVlKGJ1Zltwb3NdKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFkaW9fZnJlZV9idWZmZXJzKTsKIApAQCAtNDksNyAmIzQzOzQ5LDcgQEAgaW50IHFkaW9fYWxsb2NfYnVmZmVycyhzdHJ1Y3QgcWRpb19idWZmZXIgKipidWYsIHVuc2lnbmVkIGludCBjb3VudCkKIAlpbnQgcG9zOwogCiAJZm9yIChwb3MgPSAwOyBwb3MgJmx0OyBjb3VudDsgcG9zICYjNDM7PSBRQlVGRl9QRVJfUEFHRSkgewotCQlidWZbcG9zXSA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJCWJ1Zltwb3NdID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWJ1Zltwb3NdKSB7CiAJCQlxZGlvX2ZyZWVfYnVmZmVycyhidWYsIGNvdW50KTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtODMsNyAmIzQzOzgzLDcgQEAgc3RhdGljIHZvaWQgX19xZGlvX2ZyZWVfcXVldWVzKHN0cnVjdCBxZGlvX3EgKipxdWV1ZXMsIHVuc2lnbmVkIGludCBjb3VudCkKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKIAkJcSA9IHF1ZXVlc1tpXTsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXEtJmd0O3NsX3BhZ2UpOwomIzQzOwkJa2ZyZWUocS0mZ3Q7c2xfcGFnZSk7CiAJCWttZW1fY2FjaGVfZnJlZShxZGlvX3FfY2FjaGUsIHEpOwogCX0KIH0KQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAgc3RhdGljIGludCBfX3FkaW9fYWxsb2NhdGVfcXMoc3RydWN0IHFkaW9fcSAqKmlycV9wdHJfcXMsIGludCBucl9xdWV1ZXMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCXEtJmd0O3NsX3BhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKJiM0MzsJCXEtJmd0O3NsX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcS0mZ3Q7c2xfcGFnZSkgewogCQkJa21lbV9jYWNoZV9mcmVlKHFkaW9fcV9jYWNoZSwgcSk7CiAJCQlfX3FkaW9fZnJlZV9xdWV1ZXMoaXJxX3B0cl9xcywgaSk7CkBAIC0yNDksMTEgJiM0MzsyNDksMTEgQEAgaW50IHFkaW9fc2V0dXBfZ2V0X3NzcWQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLAogCiAJREJGX0VWRU5UKCYjMzQ7Z2V0c3NxZDolNHgmIzM0Oywgc2NoaWQtJmd0O3NjaF9ubyk7CiAJaWYgKCFpcnFfcHRyKSB7Ci0JCXNzcWQgPSAoc3RydWN0IGNoc2Nfc3NxZF9hcmVhICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwomIzQzOwkJc3NxZCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzc3FkKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlIHsKLQkJc3NxZCA9IChzdHJ1Y3QgY2hzY19zc3FkX2FyZWEgKilpcnFfcHRyLSZndDtjaHNjX3BhZ2U7CiYjNDM7CQlzc3FkID0gaXJxX3B0ci0mZ3Q7Y2hzY19wYWdlOwogCX0KIAogCXJjID0gY2hzY19zc3FkKCpzY2hpZCwgc3NxZCk7CkBAIC0yNzAsNyAmIzQzOzI3MCw3IEBAIGludCBxZGlvX3NldHVwX2dldF9zc3FkKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciwKIAogb3V0OgogCWlmICghaXJxX3B0cikKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNzcWQpOwomIzQzOwkJa2ZyZWUoc3NxZCk7CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYwppbmRleCBlMTY3YWE3NWMzZGZmLi5hMmZmNTE4ODc1MzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKQEAgLTEzNiw3ICYjNDM7MTM2LDcgQEAgc3RhdGljIHN0cnVjdCBhaXJxX3N0cnVjdCB0aXFkaW9fYWlycSA9IHsKIAogc3RhdGljIGludCBzZXRfc3ViY2hhbm5lbF9pbmQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLCBpbnQgcmVzZXQpCiB7Ci0Jc3RydWN0IGNoc2Nfc2Nzc2NfYXJlYSAqc2Nzc2MgPSAodm9pZCAqKWlycV9wdHItJmd0O2Noc2NfcGFnZTsKJiM0MzsJc3RydWN0IGNoc2Nfc2Nzc2NfYXJlYSAqc2Nzc2MgPSBpcnFfcHRyLSZndDtjaHNjX3BhZ2U7CiAJZG1hNjRfdCBzdW1tYXJ5X2luZGljYXRvcl9hZGRyLCBzdWJjaGFubmVsX2luZGljYXRvcl9hZGRyOwogCWludCByYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9zY20uYyBiL2RyaXZlcnMvczM5MC9jaW8vc2NtLmMKaW5kZXggMTcxMjEyYTZkMmQ5Yy4uYjc5ZmUwMjNhYjhkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9zY20uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jCkBAIC0xMyw2ICYjNDM7MTMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDthc20vZWFkbS5oJmd0OwogI2luY2x1ZGUgJiMzNDtjaHNjLmgmIzM0OwogCkBAIC0yMjQsMTIgJiM0MzsyMjUsMTIgQEAgc3RhdGljIGludCBzY21fYWRkKHN0cnVjdCBjaHNjX3NjbV9pbmZvICpzY21faW5mbywgc2l6ZV90IG51bSkKIAogaW50IHNjbV91cGRhdGVfaW5mb3JtYXRpb24odm9pZCkKIHsKLQlzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm87CiYjNDM7CXN0cnVjdCBjaHNjX3NjbV9pbmZvICpzY21faW5mbyBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKIAl1NjQgdG9rZW4gPSAwOwogCXNpemVfdCBudW07CiAJaW50IHJldDsKIAotCXNjbV9pbmZvID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwomIzQzOwlzY21faW5mbyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFzY21faW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI1MCw4ICYjNDM7MjUxLDYgQEAgaW50IHNjbV91cGRhdGVfaW5mb3JtYXRpb24odm9pZCkKIAkJdG9rZW4gPSBzY21faW5mby0mZ3Q7cmVzdG9rOwogCX0gd2hpbGUgKHRva2VuKTsKIAotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY21faW5mbyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzI4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEFNRDY0IENvbXBhdGliaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaWYgaXQgaGFzIGFueSByZWxldmFuY2UgdG8gdGhlIGBhbWQ2NGAgYXJjaGl0ZWN0dXJlIEkmIzM5O20gd29ya2luZyB3aXRoLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBjbGVhcmx5IHNwZWNpZmllZCBhcyBgYW1kNjRgLCBzbyB0aGF0JiMzOTtzIHRoZSBmb2N1cy4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMuCgpIbW0sIGludGVyZXN0aW5nLiBJdCBzZWVtcyB0aGlzIHBhdGNoIGlzIGVudGlyZWx5IGZvY3VzZWQgb24gdGhlIGBzMzkwYCBhcmNoaXRlY3R1cmUsIGp1ZGdpbmcgYnkgdGhlIGZpbGUgcGF0aHMuIEkgc2VlIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaGAgd2hpY2ggaXMgYW4gYHMzOTBgIHNwZWNpZmljIGhlYWRlciwgYW5kIGEgd2hvbGUgc2xldyBvZiBmaWxlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL3MzOTAvY2lvL2AgZGlyZWN0b3J5LiBUaGVzZSBhcmUgYWxsIHJlbGF0ZWQgdG8gdGhlIGBzMzkwYCBDSU8gZHJpdmVyLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBhbnkgb2YgdGhpcyBgczM5MGAgY29kZSBpcyBldmVuIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiBhbiBgYW1kNjRgIHN5c3RlbS4gSXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGdyZXAgdGhlIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBmaWxlcyB0byBzZWUgaWYgYW55IG9mIHRoZXNlIGBzMzkwYCBkcml2ZXJzIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGZvciBgYW1kNjRgIG9yIGluY2x1ZGVkIGluIHNvbWUgZ2VuZXJhbCBidWlsZCBwcm9jZXNzLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZTsgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgY2hlY2ssIGFuZCB3aWxsIHRlbGwgbWUgd2hldGhlciBJIG5lZWQgdG8gcGF5IGFueSBmdXJ0aGVyIGF0dGVudGlvbiB0byB0aGlzIHBhdGNoIGluIHRoZSBjb250ZXh0IG9mIG15IGBhbWQ2NGAgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTg9S2VybmVsIHBhcmFtZXRlcnNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0xMTM4LVx0ZGFzZD1cdFx0W0hXLE5FVF1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjExMzk6XHRcdFx0U2VlIGhlYWRlciBvZiBkcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYy5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTExNDAtXG4tLVxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdD04PXdpbGwgYmUgdXNlZCB0byBkZW5vdGUgaW5zdGFuY2VzIG9mIHRoZSBzdHJ1Y3R1cmVzIGhlcmVpbiBkZXNjcmliZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdC0xNS1cbkRvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tYXAtbG9ja2luZy5yc3Q6MTY6VGhlIE1hdHJpeCBEZXZpY2VzIExvY2sgKGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgpXG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWFwLWxvY2tpbmcucnN0LTE3LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLS1cbkRvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tYXAtbG9ja2luZy5yc3Q9NTI9YmVlbiBhdHRhY2hlZCB0byB0aGUgS1ZNIGd1ZXN0LlxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdC01My1cbkRvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tYXAtbG9ja2luZy5yc3Q6NTQ6VGhlIEd1ZXN0cyBMb2NrIChkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oKVxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdC01NS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0PTc5PXN0cmFuZ2Ugc2lkZSBlZmZlY3RzIG1heSBoYXBwZW4uXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtODMtXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdDo4NDouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuY1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtODUtICAgOmV4cG9ydDpcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTg2LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3Q6ODc6Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC04OC0gICA6ZXhwb3J0OlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0PTk1PWF0dGFjaGVkIGRldmljZS5cbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC05OS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0OjEwMDouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9zMzkwL2Npby9jbWYuY1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtMTAxLSAgIDpleHBvcnQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3Q9MTEyPWNjdyBncm91cCBkZXZpY2VzXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtMTE3LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3Q6MTE4Oi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmNcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTExOS0gICA6ZXhwb3J0OlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0PTEzMj1pbnRlcnJ1cHRzIGFuZCBpbnRlcnJ1cHQgdmVjdG9ycy5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTEzMy1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0OjEzNDouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9zMzkwL2Npby9haXJxLmNcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTEzNS0gICA6ZXhwb3J0OlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MjcxPVVzZSBiZGV2X3JlYWRfb25seShiZGV2KSBpbnN0ZWFkIG9mIGlzX3JlYWRfb25seShrZGV2KS4gIFRoZSBsYXR0ZXJcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6MjcyOmlzIHN0aWxsIGFsaXZlLCBidXQgb25seSBiZWNhdXNlIG9mIHRoZSBtZXNzIGluIGRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTI3My1BcyBzb29uIGFzIGl0IGdldHMgZml4ZWQgaXNfcmVhZF9vbmx5KCkgd2lsbCBkaWUuXG4tLVxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3Q9NzM9Q29kZSAgU2VxIyAgICBJbmNsdWRlIEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50c1xuLS1cbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTExMC0mIzM5OzImIzM5OyAgIDAxLTA0ICBsaW51eC9pMm8uaFxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3Q6MTExOiYjMzk7MyYjMzk7ICAgMDAtMEYgIGRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdCFcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTExMi0mIzM5OzMmIzM5OyAgIDAwLTFGICBsaW51eC9zdXNwZW5kX2lvY3Rscy5oLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3QhXG4tLVxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3QtMzE0LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOm9lQHBvcnQuZGVcdTAwM2VcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0OjMxNTomIzM5O3omIzM5OyAgIDEwLTRGICBkcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuaCAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3QhXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdC0zMTYtJiMzOTt8JiMzOTsgICAwMC03RiAgbGludXgvbWVkaWEuaFxuLS1cbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTM5OC0weENGICAwMiAgICAgZnMvc21iL2NsaWVudC9jaWZzX2lvY3RsLmhcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0OjM5OToweEREICAwMC0zRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpGQ1AgZGV2aWNlIGRyaXZlciBzZWUgZHJpdmVycy9zMzkwL3Njc2kvXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdC00MDAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2NtYWlsdG86YWhlcnJtYW5AZGUuaWJtLmNvbVx1MDAzZVxuLS1cbk1BSU5UQUlORVJTPTE0Mzg4PUY6XHRhcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmNcbk1BSU5UQUlORVJTOjE0Mzg5OkY6XHRkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jXG5NQUlOVEFJTkVSUzoxNDM5MDpGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9zMzkweC91dmRldmljZS9cbk1BSU5UQUlORVJTLTE0MzkxLUY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKi9zMzkwL1xuLS1cbk1BSU5UQUlORVJTPTE4OTAyPUY6XHRkcml2ZXJzL3B0cC9cbk1BSU5UQUlORVJTOjE4OTAzOkY6XHRkcml2ZXJzL3MzOTAvbmV0L1xuTUFJTlRBSU5FUlMtMTg5MDQtRjpcdGluY2x1ZGUvZHQtYmluZGluZ3MvbmV0L1xuLS1cbk1BSU5UQUlORVJTPTI0MDc3PUY6XHRkcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1zMzkwLmNcbk1BSU5UQUlORVJTOjI0MDc4OkY6XHRkcml2ZXJzL3MzOTAvXG5NQUlOVEFJTkVSUy0yNDA3OS1GOlx0ZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jXG4tLVxuTUFJTlRBSU5FUlM9MjQwODU9UzpcdFN1cHBvcnRlZFxuTUFJTlRBSU5FUlM6MjQwODY6RjpcdGRyaXZlcnMvczM5MC9jaW8vXG5NQUlOVEFJTkVSUy0yNDA4Ny1cbi0tXG5NQUlOVEFJTkVSUz0yNDEwMz1GOlx0YmxvY2svcGFydGl0aW9ucy9pYm0uY1xuTUFJTlRBSU5FUlM6MjQxMDQ6RjpcdGRyaXZlcnMvczM5MC9ibG9jay9kYXNkKlxuTUFJTlRBSU5FUlMtMjQxMDUtRjpcdGluY2x1ZGUvbGludXgvZGFzZF9tb2QuaFxuLS1cbk1BSU5UQUlORVJTPTI0MTI4PVM6XHRTdXBwb3J0ZWRcbk1BSU5UQUlORVJTOjI0MTI5OkY6XHRkcml2ZXJzL3MzOTAvbmV0LyppdWN2KlxuTUFJTlRBSU5FUlMtMjQxMzAtRjpcdGluY2x1ZGUvbmV0L2l1Y3YvXG4tLVxuTUFJTlRBSU5FUlM9MjQxNDc9UzpcdFN1cHBvcnRlZFxuTUFJTlRBSU5FUlM6MjQxNDg6RjpcdGRyaXZlcnMvczM5MC9uZXQvXG5NQUlOVEFJTkVSUy0yNDE0OS1cbi0tXG5NQUlOVEFJTkVSUz0yNDE2OD1TOlx0U3VwcG9ydGVkXG5NQUlOVEFJTkVSUzoyNDE2OTpGOlx0ZHJpdmVycy9zMzkwL2Jsb2NrL3NjbSpcbk1BSU5UQUlORVJTOjI0MTcwOkY6XHRkcml2ZXJzL3MzOTAvY2lvL3NjbS5jXG5NQUlOVEFJTkVSUy0yNDE3MS1cbi0tXG5NQUlOVEFJTkVSUz0yNDE4MD1GOlx0RG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcCpcbk1BSU5UQUlORVJTOjI0MTgxOkY6XHRkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXAqXG5NQUlOVEFJTkVSUy0yNDE4Mi1cbi0tXG5NQUlOVEFJTkVSUz0yNDE5MT1GOlx0RG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1jY3cucnN0XG5NQUlOVEFJTkVSUzoyNDE5MjpGOlx0ZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njdypcbk1BSU5UQUlORVJTLTI0MTkzLUY6XHRpbmNsdWRlL3VhcGkvbGludXgvdmZpb19jY3cuaFxuLS1cbk1BSU5UQUlORVJTPTI0MjE2PUY6XHRhcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS96Y3J5cHQuaFxuTUFJTlRBSU5FUlM6MjQyMTc6RjpcdGRyaXZlcnMvczM5MC9jcnlwdG8vXG5NQUlOVEFJTkVSUy0yNDIxOC1cbi0tXG5NQUlOVEFJTkVSUz0yNDIyMj1TOlx0U3VwcG9ydGVkXG5NQUlOVEFJTkVSUzoyNDIyMzpGOlx0ZHJpdmVycy9zMzkwL3Njc2kvemZjcF8qXG5NQUlOVEFJTkVSUy0yNDIyNC1cbi0tXG5NQUlOVEFJTkVSUz0yODkxND1GOlx0YXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20vdmlydGlvLWNjdy5oXG5NQUlOVEFJTkVSUzoyODkxNTpGOlx0ZHJpdmVycy9zMzkwL3ZpcnRpby9cbk1BSU5UQUlORVJTLTI4OTE2LVxuLS1cbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTI0PUtCVUlMRF9DRkxBR1MgJiM0Mzs9ICQoY2FsbCBjYy1vcHRpb24sIC1Xbm8tZGVmYXVsdC1jb25zdC1pbml0LXVuc2FmZSlcbmFyY2gvczM5MC9ib290L01ha2VmaWxlLTI1LVxuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGU6MjY6Q0ZMQUdTX3NjbHBfZWFybHlfY29yZS5vICYjNDM7PSAtSSQoc3JjdHJlZSkvZHJpdmVycy9zMzkwL2NoYXJcbmFyY2gvczM5MC9ib290L01ha2VmaWxlLTI3LVxuLS1cbmFyY2gvczM5MC9ib290L3NjbHBfZWFybHlfY29yZS5jLTItI2luY2x1ZGUgXCYjMzQ7Ym9vdC5oXCYjMzQ7XG5hcmNoL3MzOTAvYm9vdC9zY2xwX2Vhcmx5X2NvcmUuYzozOiNpbmNsdWRlIFwmIzM0Oy4uLy4uLy4uL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHlfY29yZS5jXCYjMzQ7XG5hcmNoL3MzOTAvYm9vdC9zY2xwX2Vhcmx5X2NvcmUuYy00LVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaD0zNzQ9c3RydWN0IGdlbl9wb29sICpjaW9fZ3BfZG1hX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LCBpbnQgbnJfcGFnZXMpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oLTM3NS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaDozNzY6LyogRnVuY3Rpb24gZnJvbSBkcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oLTM3Ny1pbnQgY2hzY19zc3RwYyh2b2lkICpwYWdlLCB1bnNpZ25lZCBpbnQgb3AsIHUxNiBjdHJsLCBsb25nICpjbG9ja19kZWx0YSk7XG4tLVxuYXJjaC9zMzkwL21tL2NtbS5jPTMxPU1PRFVMRV9QQVJNX0RFU0Moc2VuZGVyLFxuLS1cbmFyY2gvczM5MC9tbS9jbW0uYy0zMy1cbmFyY2gvczM5MC9tbS9jbW0uYzozNDojaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmhcJiMzNDtcbmFyY2gvczM5MC9tbS9jbW0uYy0zNS1cbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MjY3PWNvbmZpZyBTVU5WRENcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjczLVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjI3NDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yNzUtXG4tLVxuZHJpdmVycy9jaGFyL0tjb25maWc9MzQ1PWNvbmZpZyBURUxDTE9DS1xuLS1cbmRyaXZlcnMvY2hhci9LY29uZmlnLTM1Ny1cbmRyaXZlcnMvY2hhci9LY29uZmlnOjM1ODpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9jaGFyL0tjb25maWctMzU5LVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTMwPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNTMxLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo1MzI6c291cmNlIFwmIzM0O2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy01MzMtXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTMtICogQXV0aG9yKHMpLi4uLi4uOiBIb2xnZXIgU21vbGluc2tpIFx1MDAzY0hvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbVx1MDAzZVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jOjQ6ICogQmFzZWQgb24uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svbWRpc2suY1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTUtICogLi4uLi4uLi4uLi4uLi4uOiBieSBIYXJ0bXVudCBQZW5uZXIgXHUwMDNjaHBlbm5lckBkZS5pYm0uY29tXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5oLTMtICogQXV0aG9yKHMpLi4uLi4uOiBIb2xnZXIgU21vbGluc2tpIFx1MDAzY0hvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbVx1MDAzZVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5oOjQ6ICogQmFzZWQgb24uLi4uLi4uOiBsaW51eC9kcml2ZXJzL3MzOTAvYmxvY2svbWRpc2suaFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5oLTUtICogLi4uLi4uLi4uLi4uLi4uOiBieSBIYXJ0bXVudCBQZW5uZXIgXHUwMDNjaHBlbm5lckBkZS5pYm0uY29tXHUwMDNlXG4tLVxuaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmgtMi0vKlxuaW5jbHVkZS9uZXQvaXVjdi9pdWN2Lmg6MzogKiAgZHJpdmVycy9zMzkwL25ldC9pdWN2LmhcbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oLTQtICogICAgSVVDViBiYXNlIHN1cHBvcnQuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvTWFrZWZpbGU9MjM9VEFSR0VUUyAmIzQzOz0gZHJpdmVycy9udHN5bmNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlOjI0OlRBUkdFVFMgJiM0Mzs9IGRyaXZlcnMvczM5MHgvdXZkZXZpY2VcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlLTI1LVRBUkdFVFMgJiM0Mzs9IGRyaXZlcnMvbmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MTkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGluIHRoZSBwcm9tcHQ6CgoqKkRpdmluZyBpbnRvIHRoZSBEcml2ZXIgSW5mcmFzdHJ1Y3R1cmUqKgoKT2theSwgc28gd2UgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRyaXZlciBidWlsZCBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgZm9yIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCBpdHMgY2hhbm5lbCBJL08gKENJTykgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGRyaXZlcnMvTWFrZWZpbGVgIGluIHRoZSByb290IGRyaXZlcnMgZGlyZWN0b3J5IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZnJhbWV3b3JrIGFuZCBob3cgdGhlc2UgczM5MC9DSU8gZHJpdmVycyBmaXQgaW4uIEFyZSB0aGVyZSBjb25kaXRpb25hbCBpbmNsdWRlcz8gQW55IGdlbmVyaWMgcnVsZXM/IFRoZW4sIHRvIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIHMzOTAvQ0lPIGNvZGUsIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZWAuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgc3BlY2lmaWMgc291cmNlIGZpbGVzIGFyZSBiZWluZyBidWlsdCwgYW55IGRlcGVuZGVuY2llcywgYW5kIGhvcGVmdWxseSBob3cgdGhleSYjMzk7cmUgYmVpbmcgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gQWx0ZXJuYXRpdmVseSwgaXQmIzM5O3MgYWxzbyB3b3J0aCBjaGVja2luZyBgZHJpdmVycy9zMzkwL2Npby9LY29uZmlnYC4gU29tZXRpbWVzIHRoZSBidWlsZCBwcm9jZXNzIGlzIGhlYXZpbHkgaW5mbHVlbmNlZCBieSB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgdGhpcyBtaWdodCBnaXZlIG1lIGNsdWVzIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBmZWF0dXJlIGZsYWdzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGRyaXZlci4gSXQmIzM5O3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBob3cgdGhlIHBpZWNlcyBhcmUgcHV0IHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2lvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1ha2VmaWxlIEp1bmdsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgYnVpbHQsIG9yIHBvdGVudGlhbGx5IGluY2x1ZGVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGxpa2VseSBhIGtlcm5lbCBkcml2ZXIsIHRoZSBgTWFrZWZpbGVgIGlzIHRoZSBwbGFjZSB0byBiZS4gVGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIGRyaXZlcnMgaXMgdXN1YWxseSB1bmRlciB0aGUgYGRyaXZlcnMvYCBkaXJlY3RvcnksIHNvIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBBbmQgc2luY2UgdGhpcyBzZWVtcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMsIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IHNvLCBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9NYWtlZmlsZWAgZmlyc3QsIGFzIHRoYXQgaXMgdGhlIGdlbmVyYWwgb25lLiBUaGVuIGlmIHRoYXQgZG9lcyBub3QgY29udGFpbiB3aGF0IEkgYW0gbG9va2luZyBmb3IsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGxvb2sgaW4gdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBsb2NhdGlvbiwgc28gYGRyaXZlcnMvczM5MC9NYWtlZmlsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7czM5MCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9NYWtlZmlsZT0xOTk9b2JqLSQoQ09ORklHX0RJQlMpXHRcdCYjNDM7PSBkaWJzL1xuZHJpdmVycy9NYWtlZmlsZToyMDA6b2JqLSQoQ09ORklHX1MzOTApXHRcdCYjNDM7PSBzMzkwL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDE0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVW5yZWFjaGFibGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UsIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgYGRyaXZlcnMvTWFrZWZpbGVgIGhhcyBhZGRlZCBgb2JqLSQoQ09ORklHX1MzOTApICYjNDM7PSBzMzkwL2AsIG1lYW5pbmcgdGhhdCBzdHVmZiB1bmRlciBgZHJpdmVycy9zMzkwL2AgaXMgb25seSBidWlsdCBpZiB0aGUgYENPTkZJR19TMzkwYCBvcHRpb24gaXMgc2V0LiBBbmQsIGZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oYCBpcyAqYWxzbyogb25seSBpbmNsdWRlZCBvbiB0aGUgczM5MCBhcmNoaXRlY3R1cmUuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCB2aW9sYXRlIHRoZSBwcm9tcHQmIzM5O3MgbmVnYXRpdmUgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgd29ycmllZCBhYm91dCB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuIFRoZSBwcm9tcHQgbGlzdHMgYSBmZXcsIGJ1dCB0aGUgcmVsZXZhbnQgb25lcyBoZXJlIGFyZSBjb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIGFtZDY0LgoKR2l2ZW4gdGhhdCB0aGUgdGFyZ2V0IGlzIGFtZDY0LCBhbmQgdGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgaW4gYGFyY2gvczM5MC9gIGFuZCBgZHJpdmVycy9zMzkwL2Npby9gLCBhbmQgdGhhdCBgQ09ORklHX1MzOTBgIGlzICpvbmx5KiBkZWZpbmVkIGZvciBzMzkwLCB0aGlzIGlzIHByZXR0eSBjbGVhci4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgbm90aGluZyBpbiBgZHJpdmVycy9zMzkwL2Npb2Agb3IgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oYCBjYW4gc29tZWhvdyBiZSBjb21waWxlZCBvciBleGVjdXRlZCBvbiBhbWQ2NC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvczM5MC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2lvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc1OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9zMzkwL01ha2VmaWxlLTUtXG5kcml2ZXJzL3MzOTAvTWFrZWZpbGU6NjpvYmoteSAmIzQzOz0gY2lvLyBibG9jay8gY2hhci8gY3J5cHRvLyBuZXQvIHNjc2kvIHZpcnRpby9cbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMtMzAtI2luY2x1ZGUgXHUwMDNjYXNtL2ViY2RpYy5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmM6MzE6I2luY2x1ZGUgXHUwMDNjYXNtL2Npby5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMtMzItI2luY2x1ZGUgXHUwMDNjYXNtL2Njd2Rldi5oXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTI3LSNpbmNsdWRlIFx1MDAzY2FzbS9jY3dkZXYuaFx1MDAzZVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jOjI4OiNpbmNsdWRlIFx1MDAzY2FzbS9jaW8uaFx1MDAzZVxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMtMjYtI2luY2x1ZGUgXHUwMDNjYXNtL2Njd2Rldi5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmM6Mjc6I2luY2x1ZGUgXHUwMDNjYXNtL2Npby5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2hhci9jb24zMjcwLmMtMjgtI2luY2x1ZGUgXHUwMDNjYXNtL2ViY2RpYy5oXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMtMjItI2luY2x1ZGUgXHUwMDNjYXNtL2Njd2Rldi5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2hhci9mczMyNzAuYzoyMzojaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jLTI0LSNpbmNsdWRlIFx1MDAzY2FzbS9lYmNkaWMuaFx1MDAzZVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy0yMi0jaW5jbHVkZSBcdTAwM2Nhc20vY2N3ZGV2LmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYzoyMzojaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy0yNC0jaW5jbHVkZSBcdTAwM2Nhc20vZWJjZGljLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMtMjAtI2luY2x1ZGUgXHUwMDNjYXNtL21hY2hpbmUuaFx1MDAzZVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jOjIxOiNpbmNsdWRlIFx1MDAzY2FzbS9jaW8uaFx1MDAzZVxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jLTIyLSNpbmNsdWRlIFx1MDAzY2FzbS9jY3dkZXYuaFx1MDAzZVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGU9MTA9Q0ZMQUdTX3ZmaW9fY2N3X3RyYWNlLm8gOj0gLUkkKHNyYylcbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUtMTEtXG5kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlOjEyOm9iai15ICYjNDM7PSBhaXJxLm8gYmxhY2tsaXN0Lm8gY2hzYy5vIGNpby5vIGNzcy5vIGNocC5vIGlkc2V0Lm8gaXNjLm8gXFxcbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGU6MTM6XHRmY3gubyBpdGN3Lm8gY3J3Lm8gY2N3cmVxLm8gdHJhY2UubyBpb2FzbS5vIGNpb19kZWJ1Z2ZzLm9cbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUtMTQtY2N3X2RldmljZS1vYmpzICYjNDM7PSBkZXZpY2UubyBkZXZpY2VfZnNtLm8gZGV2aWNlX29wcy5vXG4tLVxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZT0yNz1vYmotJChDT05GSUdfVkZJT19DQ1cpICYjNDM7PSB2ZmlvX2Njdy5vXG5kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlLTI4LVxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZToyOTpvYmotJChDT05GSUdfQ0lPX0lOSkVDVCkgJiM0Mzs9IGNpb19pbmplY3Qub1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTIzLSNpbmNsdWRlIFx1MDAzY2FzbS9pc2MuaFx1MDAzZVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6MjQ6I2luY2x1ZGUgXHUwMDNjYXNtL2Npby5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy0yNS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jOjI2OiNpbmNsdWRlIFwmIzM0O2Npby5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzoyNzojaW5jbHVkZSBcJiMzNDtjaW9fZGVidWcuaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMjgtI2luY2x1ZGUgXCYjMzQ7aW9hc20uaFwmIzM0O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jPTQxPWludCByZWdpc3Rlcl9hZGFwdGVyX2ludGVycnVwdChzdHJ1Y3QgYWlycV9zdHJ1Y3QgKmFpcnEpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtNDctXHRpZiAoIWFpcnEtXHUwMDNlbHNpX3B0cikge1xuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6NDg6XHRcdGFpcnEtXHUwMDNlbHNpX3B0ciA9IGNpb19kbWFfemFsbG9jKDEpO1xuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtNDktXHRcdGlmICghYWlycS1cdTAwM2Vsc2lfcHRyKVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jPTY3PXZvaWQgdW5yZWdpc3Rlcl9hZGFwdGVyX2ludGVycnVwdChzdHJ1Y3QgYWlycV9zdHJ1Y3QgKmFpcnEpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtODAtXHRpZiAoYWlycS1cdTAwM2VmbGFncyBcdTAwMjYgQUlSUV9QVFJfQUxMT0NBVEVEKSB7XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzo4MTpcdFx0Y2lvX2RtYV9mcmVlKGFpcnEtXHUwMDNlbHNpX3B0ciwgMSk7XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy04Mi1cdFx0YWlycS1cdTAwM2Vsc2lfcHRyID0gTlVMTDtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYz04OD1zdGF0aWMgaXJxcmV0dXJuX3QgZG9fYWlycV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZHVtbXkpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtOTQtXHR0cGlfaW5mbyA9IFx1MDAyNmdldF9pcnFfcmVncygpLVx1MDAzZXRwaV9pbmZvO1xuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6OTU6XHR0cmFjZV9zMzkwX2Npb19hZGFwdGVyX2ludCh0cGlfaW5mbyk7XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy05Ni1cdGhlYWQgPSBcdTAwMjZhaXJxX2xpc3RzW3RwaV9pbmZvLVx1MDAzZWlzY107XG4tLVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM9MTI3PXN0cnVjdCBhaXJxX2l2ICphaXJxX2l2X2NyZWF0ZSh1bnNpZ25lZCBsb25nIGJpdHMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMTUxLVx0fSBlbHNlIHtcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jOjE1MjpcdFx0aXYtXHUwMDNldmVjdG9yID0gY2lvX2RtYV96YWxsb2Moc2l6ZSk7XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy0xNTMtXHRcdGlmICghaXYtXHUwMDNldmVjdG9yKVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTE5MC1cdGVsc2UgaWYgKCEoaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUlFfSVZfR1VFU1RWRUMpKVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6MTkxOlx0XHRjaW9fZG1hX2ZyZWUoaXYtXHUwMDNldmVjdG9yLCBzaXplKTtcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTE5Mi1cdGtmcmVlKGl2KTtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYz0yMDI9dm9pZCBhaXJxX2l2X3JlbGVhc2Uoc3RydWN0IGFpcnFfaXYgKml2KVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTIwOS1cdGVsc2UgaWYgKCEoaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUlFfSVZfR1VFU1RWRUMpKVxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6MjEwOlx0XHRjaW9fZG1hX2ZyZWUoaXYtXHUwMDNldmVjdG9yLCBpdl9zaXplKGl2LVx1MDAzZWJpdHMpKTtcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTIxMS1cdGtmcmVlKGl2LVx1MDAzZWF2YWlsKTtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYz0zMDU9aW50IF9faW5pdCBhaXJxX2luaXQodm9pZClcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTMwNi17XG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzozMDc6XHRhaXJxX2l2X2NhY2hlID0gZG1hX3Bvb2xfY3JlYXRlKFwmIzM0O2FpcnFfaXZfY2FjaGVcJiMzNDssIGNpb19nZXRfZG1hX2Nzc19kZXYoKSxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTMwOC1cdFx0XHRcdFx0Y2FjaGVfbGluZV9zaXplKCksXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0xMC1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MTE6I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtjaW86IFwmIzM0OyBmbXRcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMTItXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yMS0jaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MjI6I2luY2x1ZGUgXHUwMDNjYXNtL2Npby5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTIzLSNpbmNsdWRlIFx1MDAzY2FzbS9pcGwuaFx1MDAzZVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjUtI2luY2x1ZGUgXCYjMzQ7YmxhY2tsaXN0LmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MjY6I2luY2x1ZGUgXCYjMzQ7Y2lvLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6Mjc6I2luY2x1ZGUgXCYjMzQ7Y2lvX2RlYnVnLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjgtI2luY2x1ZGUgXCYjMzQ7Y3NzLmhcJiMzNDtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTMyLSAqIFwmIzM0O0JsYWNrbGlzdGluZ1wmIzM0OyBvZiBjZXJ0YWluIGRldmljZXM6XG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjMzOiAqIERldmljZSBudW1iZXJzIGdpdmVuIGluIHRoZSBjb21tYW5kbGluZSBhcyBjaW9faWdub3JlPS4uLiB3b24mIzM5O3QgYmUga25vd25cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzQtICogdG8gTGludXguXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz00OT1zdGF0aWMgaW50IGJsYWNrbGlzdF9yYW5nZShyYW5nZV9hY3Rpb24gYWN0aW9uLCB1bnNpZ25lZCBpbnQgZnJvbV9zc2lkLFxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNTQtXHRcdGlmIChtc2d0cmlnZ2VyKVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo1NTpcdFx0XHRwcl93YXJuKFwmIzM0OzAuJXguJTA0eCB0byAwLiV4LiUwNHggaXMgbm90IGEgdmFsaWQgcmFuZ2UgZm9yIGNpb19pZ25vcmVcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTU2LVx0XHRcdFx0ZnJvbV9zc2lkLCBmcm9tLCB0b19zc2lkLCB0byk7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0xMDE9c3RhdGljIGludCBwYXJzZV9idXNpZChjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqY3NzaWQsIHVuc2lnbmVkIGludCAqc3NpZCxcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTE0Mi1cdGlmIChyYyBcdTAwMjZcdTAwMjYgbXNndHJpZ2dlcilcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MTQzOlx0XHRwcl93YXJuKFwmIzM0OyVzIGlzIG5vdCBhIHZhbGlkIGRldmljZSBmb3IgdGhlIGNpb19pZ25vcmUga2VybmVsIHBhcmFtZXRlclxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMTQ0LVx0XHRcdHN0cik7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0yMjc9YmxhY2tsaXN0X3NldHVwIChjaGFyICpzdHIpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yMzQtXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjIzNTpfX3NldHVwIChcJiMzNDtjaW9faWdub3JlPVwmIzM0OywgYmxhY2tsaXN0X3NldHVwKTtcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjM2LVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MjQ2PWlzX2JsYWNrbGlzdGVkIChpbnQgc3NpZCwgaW50IGRldm5vKVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjUzLSAqIEZ1bmN0aW9uOiBibGFja2xpc3RfcGFyc2VfcHJvY19wYXJhbWV0ZXJzXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjI1NDogKiBwYXJzZSB0aGUgc3R1ZmYgd2hpY2ggaXMgcGlwZWQgdG8gL3Byb2MvY2lvX2lnbm9yZVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yNTUtICovXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0yODk9c3RhdGljIHZvaWQgKlxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzoyOTA6Y2lvX2lnbm9yZV9wcm9jX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqb2Zmc2V0KVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yOTEte1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MzAyPXN0YXRpYyB2b2lkXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjMwMzpjaW9faWdub3JlX3Byb2Nfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICppdClcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzA0LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jPTMwNz1zdGF0aWMgdm9pZCAqXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjMwODpjaW9faWdub3JlX3Byb2Nfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICppdCwgbG9mZl90ICpvZmZzZXQpXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTMwOS17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0zMjc9c3RhdGljIGludFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozMjg6Y2lvX2lnbm9yZV9wcm9jX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqaXQpXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTMyOS17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0zNTc9c3RhdGljIHNzaXplX3RcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MzU4OmNpb19pZ25vcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZixcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzU5LVx0XHQgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKm9mZnNldClcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTM5Mi1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MzkzOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY2lvX2lnbm9yZV9wcm9jX3NlcV9vcHMgPSB7XG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjM5NDpcdC5zdGFydCA9IGNpb19pZ25vcmVfcHJvY19zZXFfc3RhcnQsXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjM5NTpcdC5zdG9wICA9IGNpb19pZ25vcmVfcHJvY19zZXFfc3RvcCxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6Mzk2Olx0Lm5leHQgID0gY2lvX2lnbm9yZV9wcm9jX3NlcV9uZXh0LFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozOTc6XHQuc2hvdyAgPSBjaW9faWdub3JlX3Byb2Nfc2VxX3Nob3csXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTM5OC19O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9NDAwPXN0YXRpYyBpbnRcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6NDAxOmNpb19pZ25vcmVfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MDIte1xuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MDM6XHRyZXR1cm4gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZjaW9faWdub3JlX3Byb2Nfc2VxX29wcyxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDA0LVx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBjY3dkZXZfaXRlcikpO1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDA2LVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MDc6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBjaW9faWdub3JlX3Byb2Nfb3BzID0ge1xuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MDg6XHQucHJvY19vcGVuXHQ9IGNpb19pZ25vcmVfcHJvY19vcGVuLFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MDktXHQucHJvY19yZWFkXHQ9IHNlcV9yZWFkLFxuLS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDExLVx0LnByb2NfcmVsZWFzZVx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MTI6XHQucHJvY193cml0ZVx0PSBjaW9faWdub3JlX3dyaXRlLFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MTMtfTtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jPTQxNT1zdGF0aWMgaW50XG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQxNjpjaW9faWdub3JlX3Byb2NfaW5pdCAodm9pZClcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDE3LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQxOS1cbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6NDIwOlx0ZW50cnkgPSBwcm9jX2NyZWF0ZShcJiMzNDtjaW9faWdub3JlXCYjMzQ7LCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsIE5VTEwsXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQyMTpcdFx0XHQgICAgXHUwMDI2Y2lvX2lnbm9yZV9wcm9jX29wcyk7XG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQyMi1cdGlmICghZW50cnkpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MjYtXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQyNzpfX2luaXRjYWxsIChjaW9faWdub3JlX3Byb2NfaW5pdCk7XG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQyOC1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMtMjAtXG5kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmM6MjE6I2luY2x1ZGUgXHUwMDNjYXNtL2Npby5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMtMjItI2luY2x1ZGUgXHUwMDNjYXNtL2Njd2Rldi5oXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy04LVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzo5OiNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7Y2lvOiBcJiMzNDsgZm10XG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTEwLVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTMtI2luY2x1ZGUgXHUwMDNjYXNtL2Njd2Rldi5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjE0OiNpbmNsdWRlIFx1MDAzY2FzbS9jaW8uaFx1MDAzZVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xNS1cbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTYtI2luY2x1ZGUgXCYjMzQ7aW9fc2NoLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTc6I2luY2x1ZGUgXCYjMzQ7Y2lvLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTgtI2luY2x1ZGUgXCYjMzQ7ZGV2aWNlLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTk6I2luY2x1ZGUgXCYjMzQ7Y2lvX2RlYnVnLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMjAtXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYz03ND1zdGF0aWMgdm9pZCBjY3dyZXFfZG8oc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy04OC1cdFx0bWVtc2V0KFx1MDAyNmNkZXYtXHUwMDNlcHJpdmF0ZS1cdTAwM2VkbWFfYXJlYS1cdTAwM2VpcmIsIDAsIHNpemVvZihzdHJ1Y3QgaXJiKSk7XG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjg5Olx0XHRyYyA9IGNpb19zdGFydChzY2gsIGNwLCAodTgpIHJlcS1cdTAwM2VtYXNrKTtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtOTAtXHRcdGlmIChyYyA9PSAwKSB7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xMDQtXHRcdC8qIFRlbXBvcmFyeSBpbXByb3BlciBzdGF0dXMuICovXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjEwNTpcdFx0cmMgPSBjaW9fY2xlYXIoc2NoKTtcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTA2LVx0XHRpZiAocmMpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYz0xNTA9aW50IGNjd19yZXF1ZXN0X2NhbmNlbChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldilcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTE1OC1cdHJlcS1cdTAwM2VjYW5jZWwgPSAxO1xuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzoxNTk6XHRyYyA9IGNpb19jbGVhcihzY2gpO1xuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xNjAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYz0yNTQ9dm9pZCBjY3dfcmVxdWVzdF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0yNTUte1xuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzoyNTY6XHRzdHJ1Y3QgaXJiICppcmIgPSB0aGlzX2NwdV9wdHIoXHUwMDI2Y2lvX2lyYik7XG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTI1Ny1cdHN0cnVjdCBjY3dfcmVxdWVzdCAqcmVxID0gXHUwMDI2Y2Rldi1cdTAwM2Vwcml2YXRlLVx1MDAzZXJlcTtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jPTMyNj12b2lkIGNjd19yZXF1ZXN0X3RpbWVvdXQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0zMzEtXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjMzMjpcdGlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTMzMy1cdFx0Z290byBlcnI7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0zNDgtXHR9XG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjM0OTpcdHJjID0gY2lvX2NsZWFyKHNjaCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTM1MC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2NocC5jLTIzLVxuZHJpdmVycy9zMzkwL2Npby9jaHAuYzoyNDojaW5jbHVkZSBcJiMzNDtjaW8uaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaHAuYy0yNS0jaW5jbHVkZSBcJiMzNDtjc3MuaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaHAuYy0yNi0jaW5jbHVkZSBcJiMzNDtpb2FzbS5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2NocC5jOjI3OiNpbmNsdWRlIFwmIzM0O2Npb19kZWJ1Zy5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2NocC5jLTI4LSNpbmNsdWRlIFwmIzM0O2NocC5oXCYjMzQ7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMTAtXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzoxMTojZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2NpbzogXCYjMzQ7IGZtdFxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMTItXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMjAtXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzoyMTojaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaW8vY2hzYy5jLTIyLSNpbmNsdWRlIFx1MDAzY2FzbS9jaHBpZC5oXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMjgtI2luY2x1ZGUgXCYjMzQ7Y3NzLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2hzYy5jOjI5OiNpbmNsdWRlIFwmIzM0O2Npby5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzozMDojaW5jbHVkZSBcJiMzNDtjaW9fZGVidWcuaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMzEtI2luY2x1ZGUgXCYjMzQ7aW9hc20uaFwmIzM0O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0xOS1cbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzoyMDojaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0yMS0jaW5jbHVkZSBcdTAwM2Nhc20vY2hzYy5oXHUwMDNlXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTIzLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjI0OiNpbmNsdWRlIFwmIzM0O2Npby5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmM6MjU6I2luY2x1ZGUgXCYjMzQ7Y2lvX2RlYnVnLmhcJiMzNDtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0yNi0jaW5jbHVkZSBcJiMzNDtjc3MuaFwmIzM0O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYz01ND1zdGF0aWMgdm9pZCBjaHNjX3N1YmNoYW5uZWxfaXJxKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTU3LVx0c3RydWN0IGNoc2NfcmVxdWVzdCAqcmVxdWVzdCA9IHByaXZhdGUtXHUwMDNlcmVxdWVzdDtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzo1ODpcdHN0cnVjdCBpcmIgKmlyYiA9IHRoaXNfY3B1X3B0cihcdTAwMjZjaW9faXJiKTtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy01OS1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtNzEtXHRtZW1jcHkoXHUwMDI2cmVxdWVzdC1cdTAwM2VpcmIsIGlyYiwgc2l6ZW9mKCppcmIpKTtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzo3MjpcdGNpb191cGRhdGVfc2NoaWIoc2NoKTtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy03My1cdGNvbXBsZXRlKFx1MDAyNnJlcXVlc3QtXHUwMDNlY29tcGxldGlvbik7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jPTc3PXN0YXRpYyBpbnQgY2hzY19zdWJjaGFubmVsX3Byb2JlKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTg4LVx0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNnNjaC1cdTAwM2VkZXYsIHByaXZhdGUpO1xuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjg5Olx0cmV0ID0gY2lvX2VuYWJsZV9zdWJjaGFubmVsKHNjaCwgKHUzMil2aXJ0X3RvX3BoeXMoc2NoKSk7XG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtOTAtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jPTk5PXN0YXRpYyB2b2lkIGNoc2Nfc3ViY2hhbm5lbF9yZW1vdmUoc3RydWN0IHN1YmNoYW5uZWwgKnNjaClcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtMTAyLVxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjEwMzpcdGNpb19kaXNhYmxlX3N1YmNoYW5uZWwoc2NoKTtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0xMDQtXHRwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNnNjaC1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYz0xMTM9c3RhdGljIHZvaWQgY2hzY19zdWJjaGFubmVsX3NodXRkb3duKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtMTE0LXtcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzoxMTU6XHRjaW9fZGlzYWJsZV9zdWJjaGFubmVsKHNjaCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtMTE2LX1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTExLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoxMjojZGVmaW5lIHByX2ZtdChmbXQpIFwmIzM0O2NpbzogXCYjMzQ7IGZtdFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMy1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTIyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjIzOiNpbmNsdWRlIFx1MDAzY2FzbS9jaW8uaFx1MDAzZVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNC0jaW5jbHVkZSBcdTAwM2Nhc20vZGVsYXkuaFx1MDAzZVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzUtI2luY2x1ZGUgXHUwMDNjYXNtL2Nydy5oXHUwMDNlXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjM2OiNpbmNsdWRlIFwmIzM0O2Npby5oXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM3LSNpbmNsdWRlIFwmIzM0O2Nzcy5oXCYjMzQ7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00MS0jaW5jbHVkZSBcJiMzNDtibGFja2xpc3QuaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0MjojaW5jbHVkZSBcJiMzNDtjaW9fZGVidWcuaFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00My0jaW5jbHVkZSBcJiMzNDtjaHAuaFwmIzM0O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDUtXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ2OmRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX21zZ19pZDtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDc6ZGVidWdfaW5mb190ICpjaW9fZGVidWdfdHJhY2VfaWQ7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ4OmRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX2Nyd19pZDtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDktXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjUwOkRFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IGlyYiwgY2lvX2lyYik7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjUxOkVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjaW9faXJiKTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNTItXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTUzLS8qXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjU0OiAqIEZ1bmN0aW9uOiBjaW9fZGVidWdfaW5pdFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy01NS0gKiBJbml0aWFsaXplcyB0aHJlZSBkZWJ1ZyBsb2dzIGZvciBjb21tb24gSS9POlxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo1NjogKiAtIGNpb19tc2cgbG9ncyBnZW5lcmljIGNpbyBtZXNzYWdlc1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo1NzogKiAtIGNpb190cmFjZSBsb2dzIHRoZSBjYWxsaW5nIG9mIGRpZmZlcmVudCBmdW5jdGlvbnNcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NTg6ICogLSBjaW9fY3J3IGxvZ3MgbWFjaGluZSBjaGVjayByZWxhdGVkIGNpbyBtZXNzYWdlc1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy01OS0gKi9cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NjA6c3RhdGljIGludCBfX2luaXQgY2lvX2RlYnVnX2luaXQodm9pZClcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNjEte1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo2MjpcdGNpb19kZWJ1Z19tc2dfaWQgPSBkZWJ1Z19yZWdpc3RlcihcJiMzNDtjaW9fbXNnXCYjMzQ7LCAxNiwgMSwgMTEgKiBzaXplb2YobG9uZykpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo2MzpcdGlmICghY2lvX2RlYnVnX21zZ19pZClcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNjQtXHRcdGdvdG8gb3V0X3VucmVnaXN0ZXI7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjY1Olx0ZGVidWdfcmVnaXN0ZXJfdmlldyhjaW9fZGVidWdfbXNnX2lkLCBcdTAwMjZkZWJ1Z19zcHJpbnRmX3ZpZXcpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo2NjpcdGRlYnVnX3NldF9sZXZlbChjaW9fZGVidWdfbXNnX2lkLCAyKTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Njc6XHRjaW9fZGVidWdfdHJhY2VfaWQgPSBkZWJ1Z19yZWdpc3RlcihcJiMzNDtjaW9fdHJhY2VcJiMzNDssIDE2LCAxLCAxNik7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjY4Olx0aWYgKCFjaW9fZGVidWdfdHJhY2VfaWQpXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTY5LVx0XHRnb3RvIG91dF91bnJlZ2lzdGVyO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo3MDpcdGRlYnVnX3JlZ2lzdGVyX3ZpZXcoY2lvX2RlYnVnX3RyYWNlX2lkLCBcdTAwMjZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjcxOlx0ZGVidWdfc2V0X2xldmVsKGNpb19kZWJ1Z190cmFjZV9pZCwgMik7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjcyOlx0Y2lvX2RlYnVnX2Nyd19pZCA9IGRlYnVnX3JlZ2lzdGVyKFwmIzM0O2Npb19jcndcJiMzNDssIDgsIDEsIDggKiBzaXplb2YobG9uZykpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo3MzpcdGlmICghY2lvX2RlYnVnX2Nyd19pZClcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNzQtXHRcdGdvdG8gb3V0X3VucmVnaXN0ZXI7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjc1Olx0ZGVidWdfcmVnaXN0ZXJfdmlldyhjaW9fZGVidWdfY3J3X2lkLCBcdTAwMjZkZWJ1Z19zcHJpbnRmX3ZpZXcpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo3NjpcdGRlYnVnX3NldF9sZXZlbChjaW9fZGVidWdfY3J3X2lkLCA0KTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNzctXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTc5LW91dF91bnJlZ2lzdGVyOlxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo4MDpcdGRlYnVnX3VucmVnaXN0ZXIoY2lvX2RlYnVnX21zZ19pZCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjgxOlx0ZGVidWdfdW5yZWdpc3RlcihjaW9fZGVidWdfdHJhY2VfaWQpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo4MjpcdGRlYnVnX3VucmVnaXN0ZXIoY2lvX2RlYnVnX2Nyd19pZCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTgzLVx0cmV0dXJuIC0xO1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtODUtXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjg2OmFyY2hfaW5pdGNhbGwgKGNpb19kZWJ1Z19pbml0KTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtODctXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjg4OmludCBjaW9fc2V0X29wdGlvbnMoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgaW50IGZsYWdzKVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy04OS17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz05OD1zdGF0aWMgaW50XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjk5OmNpb19zdGFydF9oYW5kbGVfbm90b3BlcihzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLCBfX3U4IGxwbSlcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTAwLXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTEwNy1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTA4Olx0Q0lPX01TR19FVkVOVCgyLCBcJiMzNDtjaW9fc3RhcnQ6ICYjMzk7bm90IG9wZXImIzM5OyBzdGF0dXMgZm9yIFwmIzM0O1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMDktXHRcdCAgICAgIFwmIzM0O3N1YmNoYW5uZWwgMC4leC4lMDR4IVxcblwmIzM0Oywgc2NoLVx1MDAzZXNjaGlkLnNzaWQsXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMTEtXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjExMjpcdGlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTExMy1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz0xMjI9aW50XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjEyMzpjaW9fc3RhcnRfa2V5IChzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLFx0Lyogc3ViY2hhbm5lbCBzdHJ1Y3R1cmUgKi9cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTI0LVx0ICAgICAgIHN0cnVjdCBjY3cxICogY3BhLFx0LyogbG9naWNhbCBjaGFubmVsIHByb2cgYWRkciAqL1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTY3LVx0Y2FzZSAzOlx0XHQvKiBkZXZpY2UvcGF0aCBub3Qgb3BlcmF0aW9uYWwgKi9cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTY4Olx0XHRyZXR1cm4gY2lvX3N0YXJ0X2hhbmRsZV9ub3RvcGVyKHNjaCwgbHBtKTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTY5LVx0ZGVmYXVsdDpcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTE3Mi19XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjE3MzpFWFBPUlRfU1lNQk9MX0dQTChjaW9fc3RhcnRfa2V5KTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTc0LVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz0xNzU9aW50XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjE3NjpjaW9fc3RhcnQgKHN0cnVjdCBzdWJjaGFubmVsICpzY2gsIHN0cnVjdCBjY3cxICpjcGEsIF9fdTggbHBtKVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xNzcte1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoxNzg6XHRyZXR1cm4gY2lvX3N0YXJ0X2tleShzY2gsIGNwYSwgbHBtLCBQQUdFX0RFRkFVTFRfS0VZKTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTc5LX1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTgwOkVYUE9SVF9TWU1CT0xfR1BMKGNpb19zdGFydCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTE4MS1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jPTE4NT1pbnRcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTg2OmNpb19yZXN1bWUgKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTE4Ny17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yMTItfVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyMTM6RVhQT1JUX1NZTUJPTF9HUEwoY2lvX3Jlc3VtZSk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTIxNC1cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jPTIxOD1pbnRcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MjE5OmNpb19oYWx0KHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTIyMC17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNDYtfVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyNDc6RVhQT1JUX1NZTUJPTF9HUEwoY2lvX2hhbHQpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNDgtXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz0yNTI9aW50XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjI1MzpjaW9fY2xlYXIoc3RydWN0IHN1YmNoYW5uZWwgKnNjaClcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMjU0LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI3Ny19XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjI3ODpFWFBPUlRfU1lNQk9MX0dQTChjaW9fY2xlYXIpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNzktXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI4MC0vKlxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyODE6ICogRnVuY3Rpb246IGNpb19jYW5jZWxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMjgyLSAqIElzc3VlcyBhIFwmIzM0O0NhbmNlbCBTdWJjaGFubmVsXCYjMzQ7IG9uIHRoZSBzcGVjaWZpZWQgc3ViY2hhbm5lbFxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM9Mjg3PWludFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyODg6Y2lvX2NhbmNlbCAoc3RydWN0IHN1YmNoYW5uZWwgKnNjaClcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMjg5LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMwNC1cdFx0LyogVXBkYXRlIGluZm9ybWF0aW9uIGluIHNjc3cuICovXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMwNTpcdFx0aWYgKGNpb191cGRhdGVfc2NoaWIoc2NoKSlcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzA2LVx0XHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzE1LX1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzE2OkVYUE9SVF9TWU1CT0xfR1BMKGNpb19jYW5jZWwpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMTctXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMxOC0vKipcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzE5OiAqIGNpb19jYW5jZWxfaGFsdF9jbGVhciAtIENhbmNlbCBydW5uaW5nIEkvTyBieSBwZXJmb3JtaW5nIGNhbmNlbCwgaGFsdFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMjAtICogYW5kIGNsZWFyIG9yZGluYWxseSBpZiBzdWJjaGFubmVsIGlzIHZhbGlkLlxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzI0LSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCByZXBlYXRlZGx5IHNpbmNlIGhhbHQvY2xlYXIgYXJlIGFzeW5jaHJvbm91c1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozMjU6ICogb3BlcmF0aW9ucy4gV2UgZG8gb25lIHRyeSB3aXRoIGNpb19jYW5jZWwsIHRocmVlIHRyaWVzIHdpdGggY2lvX2hhbHQsXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMyNjogKiAyNTUgdHJpZXMgd2l0aCBjaW9fY2xlYXIuIFRoZSBjYWxsZXIgc2hvdWxkIGluaXRpYWxpemUgQGlyZXRyeSB3aXRoXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMyNy0gKiB0aGUgdmFsdWUgMjU1IGZvciBpdHMgZmlyc3QgY2FsbCB0byB0aGlzLCBhbmQga2VlcCB1c2luZyB0aGUgc2FtZVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzMzLSAqL1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozMzQ6aW50IGNpb19jYW5jZWxfaGFsdF9jbGVhcihzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLCBpbnQgKmlyZXRyeSlcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzM1LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMzNy1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzM4Olx0aWYgKGNpb191cGRhdGVfc2NoaWIoc2NoKSlcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzM5LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM0Ni1cdFx0aWYgKCFzY3N3X2lzX3RtKFx1MDAyNnNjaC1cdTAwM2VzY2hpYi5zY3N3KSkge1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozNDc6XHRcdFx0cmV0ID0gY2lvX2NhbmNlbChzY2gpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zNDgtXHRcdFx0aWYgKHJldCAhPSAtRUlOVkFMKVxuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzYwLVx0XHRcdCppcmV0cnkgLT0gMTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzYxOlx0XHRcdHJldCA9IGNpb19oYWx0KHNjaCk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM2Mi1cdFx0XHRpZiAocmV0ICE9IC1FQlVTWSlcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM3MC1cdFx0KmlyZXRyeSAtPSAxO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozNzE6XHRcdHJldCA9IGNpb19jbGVhcihzY2gpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zNzItXHRcdHJldHVybiAocmV0ID09IDApID8gLUVCVVNZIDogcmV0O1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzc2LX1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Mzc3OkVYUE9SVF9TWU1CT0xfR1BMKGNpb19jYW5jZWxfaGFsdF9jbGVhcik7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM3OC1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Mzc5OnN0YXRpYyB2b2lkIGNpb19hcHBseV9jb25maWcoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgc3RydWN0IHNjaGliICpzY2hpYilcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzgwLXtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM5Mi1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzkzOnN0YXRpYyBpbnQgY2lvX2NoZWNrX2NvbmZpZyhzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLCBzdHJ1Y3Qgc2NoaWIgKnNjaGliKVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zOTQte1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDA2LS8qXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQwNzogKiBjaW9fY29tbWl0X2NvbmZpZyAtIGFwcGx5IGNvbmZpZ3VyYXRpb24gdG8gdGhlIHN1YmNoYW5uZWxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDA4LSAqL1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0MDk6aW50IGNpb19jb21taXRfY29uZmlnKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQxMC17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00MTktXHRcdC8qIGNvcHkgZGVzaXJlZCBjaGFuZ2VzIHRvIGxvY2FsIHNjaGliICovXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQyMDpcdFx0Y2lvX2FwcGx5X2NvbmZpZyhzY2gsIFx1MDAyNnNjaGliKTtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDIxLVx0XHRjY29kZSA9IG1zY2goc2NoLVx1MDAzZXNjaGlkLCBcdTAwMjZzY2hpYik7XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00MjgtXHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDI5Olx0XHRcdGlmIChjaW9fY2hlY2tfY29uZmlnKHNjaCwgXHUwMDI2c2NoaWIpKSB7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQzMC1cdFx0XHRcdC8qIGNvbW1pdCBjaGFuZ2VzIGZyb20gbG9jYWwgc2NoaWIgKi9cbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ1MC19XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ1MTpFWFBPUlRfU1lNQk9MX0dQTChjaW9fY29tbWl0X2NvbmZpZyk7XG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ1Mi1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDUzLS8qKlxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0NTQ6ICogY2lvX3VwZGF0ZV9zY2hpYiAtIFBlcmZvcm0gc3RzY2ggYW5kIHVwZGF0ZSBzY2hpYiBpZiBzdWJjaGFubmVsIGlzIHZhbGlkLlxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NTUtICogQHNjaDogc3ViY2hhbm5lbCBvbiB3aGljaCB0byBwZXJmb3JtIHN0c2NoXG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NTctICovXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ1ODppbnQgY2lvX3VwZGF0ZV9zY2hpYihzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NTkte1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDcxLX1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDcyOkVYUE9SVF9TWU1CT0xfR1BMKGNpb191cGRhdGVfc2NoaWIpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NzMtXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ3NC0vKipcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDc1OiAqIGNpb19lbmFibGVfc3ViY2hhbm5lbCAtIGVuYWJsZSBhIHN1YmNoYW5uZWwuXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ3Ni0gKiBAc2NoOiBzdWJjaGFubmVsIHRvIGJlIGVuYWJsZWRcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ3OC0gKi9cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDc5OmludCBjaW9fZW5hYmxlX3N1YmNoYW5uZWwoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgdTMyIGludHBhcm0pXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ4MC17XG4tLVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00ODctXHRcdHJldHVybiAtRUlOVkFMO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0ODg6XHRpZiAoY2lvX3VwZGF0ZV9zY2hpYihzY2gpKVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00ODktXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDk0LVxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0OTU6XHRyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00OTYtXHRpZiAocmV0ID09IC1FSU8pIHtcbi0tXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTUwMS1cdFx0c2NoLVx1MDAzZWNvbmZpZy5jc2Vuc2UgPSAwO1xuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo1MDI6XHRcdHJldCA9IGNpb19jb21taXRfY29uZmlnKHNjaCk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1NTYKCQkJCQkJCW91dHB1dDogMTEwCgkJCQkJCQl0aG91Z2h0czogNjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29udGV4dCBmb3IgYGRyaXZlcnMvczM5MGAuIEEgcXVpY2sgcGVlayBhdCBgZHJpdmVycy9NYWtlZmlsZWAgY29uZmlybXMgdGhlIGV4cGVjdGVkIGRlcGVuZGVuY3k6IGBvYmotJChDT05GSUdfUzM5MCkgJiM0Mzs9IHMzOTAvYC4gQW5kIGBhcmNoL3MzOTAvS2NvbmZpZ2AgZGVmaW5lcyBgQ09ORklHX1MzOTBgLiBPbiBteSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBhbWQ2NCAoeDg2XzY0KSwgYENPTkZJR19TMzkwYCBpcyB1bmVxdWl2b2NhbGx5IGZhbHNlLCBwcmV2ZW50aW5nIHRoZSBidWlsZCBvZiBgZHJpdmVycy9zMzkwL2AuIE1vcmVvdmVyLCB0aGUgaGVhZGVyIGZpbGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oYCBtYWtlcyBpdCBjbGVhciB0aGlzIGlzIHMzOTAtc3BlY2lmaWMgY29kZS4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBSRUFDSEFCSUxJVFkgSVMgUEFSQU1PVU5UOyBtb2RpZmllZCBjb2RlIG11c3QgYmUgcmVhY2hhYmxlLiBUaGUgbmVnYXRpdmUgY3JpdGVyaW9uIHRlbGxzIG1lIHRoYXQgY29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgbXVzdCAqbm90KiBiZSBmdXp6ZWQuIE15IHRhcmdldCBpcyBhbWQ2NC4KCkxvb2tpbmcgYXQgdGhlIGxpc3Qgb2YgYWxsIG1vZGlmaWVkIGZpbGVzOgotIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaGAKLSBgZHJpdmVycy9zMzkwL2Npby9jaHNjLmNgCi0gYGRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY2AKLSBgZHJpdmVycy9zMzkwL2Npby9jbWYuY2AKLSBgZHJpdmVycy9zMzkwL2Npby9xZGlvLmhgCi0gYGRyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNgCi0gYGRyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jYAotIGBkcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jYAotIGBkcml2ZXJzL3MzOTAvY2lvL3NjbS5jYAoKRXZlcnkgc2luZ2xlIGZpbGUgcmVzaWRlcyBpbiBlaXRoZXIgYGFyY2gvczM5MGAgb3IgYGRyaXZlcnMvczM5MGAuIFRoaXMgc2NyZWFtcyAmIzM0O3MzOTAgYXJjaGl0ZWN0dXJlIG9ubHkuJiMzNDsgVGhlc2UgZmlsZXMgYXJlICpub3QqIGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiBhbWQ2NC4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzICpub3QqIHdhcnJhbnQgZnV6emluZy4gVGhlIG91dGNvbWUgaXM6IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAsIGBFbmFibGVDb25maWdzID0gW11gLCBhbmQgYEZvY3VzU3ltYm9scyA9IFtdYC4gTXkgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgY29kZSBzcGVjaWZpYyB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGFuZCBpcyB0aGVyZWZvcmUgdW5yZWFjaGFibGUgb24gYW1kNjQuCgpBcyBhIGZpbmFsIHNhbml0eSBjaGVjaywgYSBxdWljayBzd2VlcCBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGF0ICpvbmx5KiBzMzkwLXNwZWNpZmljIGZpbGVzIGFyZSBtb2RpZmllZCwgYW5kIG5vIGdlbmVyaWMgaGVhZGVycyBvciBhcmNoLWFnbm9zdGljIGZpbGVzIHdlcmUgdG91Y2hlZC4gVGhlIGluaXRpYWwgYW5hbHlzaXMgaG9sZHMuIFRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIGNhbiBub3cgYmUgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHMzOTAtc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gaGVscGVycyBhbmQgdGhlIHMzOTAgQ2hhbm5lbCBJL08gKENJTykgc3Vic3lzdGVtIChhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBhbmQgZHJpdmVycy9zMzkwL2Npby8qKS4gVGhlc2UgZmlsZXMgYXJlIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgYW5kIGFyZSBub3QgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzMzkwLXNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9uIGhlbHBlcnMgYW5kIHRoZSBzMzkwIENoYW5uZWwgSS9PIChDSU8pIHN1YnN5c3RlbSAoYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmggYW5kIGRyaXZlcnMvczM5MC9jaW8vKikuIFRoZXNlIGZpbGVzIGFyZSBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCBhcmUgbm90IGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjM0LjA3MjkwMTkzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzE1ODMyNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgczM5MC1zcGVjaWZpYyBtZW1vcnkgYWxsb2NhdGlvbiBoZWxwZXJzIGFuZCB0aGUgczM5MCBDaGFubmVsIEkvTyAoQ0lPKSBzdWJzeXN0ZW0gKGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oIGFuZCBkcml2ZXJzL3MzOTAvY2lvLyopLiBUaGVzZSBmaWxlcyBhcmUgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgYXJlIG5vdCBjb21waWxlZCBvciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjM0LjA3MjkxMTA0OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NDE5MTE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY0NDBmMWUwYjljYmVhMDYzZTljZmM2MmM4N2UxNjllYzIyZjc4MWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDoxMjozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oXFxuaW5kZXggMDZlMWVjMmFmZDVhZi4uMjQ4ODI5ZDQ2MWJjZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaFxcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oXFxuQEAgLTE0Nyw3ICsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxcbiBcXHRcXHRcXHRpYi1cXHUwMDNlZGF0YVtpXSA9IGRtYTY0X2FkZChpYi1cXHUwMDNlZGF0YVtpIC0gMV0sIElEQV9CTE9DS19TSVpFKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0dmFkZHIgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgcGFnZV9vcmRlcik7XFxuK1xcdFxcdHZhZGRyID0ga21hbGxvYyhQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgcGFnZV9vcmRlciwgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdGlmICghdmFkZHIpXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcdFxcdGliLVxcdTAwM2VkYXRhW2ldID0gdmlydF90b19kbWE2NCh2YWRkcik7XFxuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxcbiBcXHR3aGlsZSAoaSBcXHUwMDNlPSBucl9jaHVua3MpIHtcXG4gXFx0XFx0aSAtPSBucl9jaHVua3M7XFxuIFxcdFxcdHZhZGRyID0gZG1hNjRfdG9fdmlydChpYi1cXHUwMDNlZGF0YVtpXSk7XFxuLVxcdFxcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGliLVxcdTAwM2VwYWdlX29yZGVyKTtcXG4rXFx0XFx0a2ZyZWUodmFkZHIpO1xcbiBcXHR9XFxuIFxcdGtmcmVlKGliKTtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuQEAgLTE3NSw3ICsxNzUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRhbF9idWZmZXJfZnJlZShzdHJ1Y3QgaWRhbF9idWZmZXIgKmliKVxcbiBcXHRucl9jaHVua3MgPSAoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIGliLVxcdTAwM2VwYWdlX29yZGVyKSBcXHUwMDNlXFx1MDAzZSBJREFfU0laRV9TSElGVDtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3B0cnM7IGkgKz0gbnJfY2h1bmtzKSB7XFxuIFxcdFxcdHZhZGRyID0gZG1hNjRfdG9fdmlydChpYi1cXHUwMDNlZGF0YVtpXSk7XFxuLVxcdFxcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGliLVxcdTAwM2VwYWdlX29yZGVyKTtcXG4rXFx0XFx0a2ZyZWUodmFkZHIpO1xcbiBcXHR9XFxuIFxcdGtmcmVlKGliKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXFxuaW5kZXggOTY4OWY3MjJjODYzYy4uZDk4ZjYyOWU4OTI5NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuY1xcbisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXFxuQEAgLTkzMSwxMiArOTMxLDEyIEBAIHN0YXRpYyBpbnQgY3ViX2FsbG9jKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzKVxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDU1NfTlVNX0NVQl9QQUdFUzsgaSsrKSB7XFxuLVxcdFxcdGNzcy1cXHUwMDNlY3ViW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbitcXHRcXHRjc3MtXFx1MDAzZWN1YltpXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdFxcdGlmICghY3NzLVxcdTAwM2VjdWJbaV0pXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDU1NfTlVNX0VDVUJfUEFHRVM7IGkrKykge1xcbi1cXHRcXHRjc3MtXFx1MDAzZWVjdWJbaV0gPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcXG4rXFx0XFx0Y3NzLVxcdTAwM2VlY3ViW2ldID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRpZiAoIWNzcy1cXHUwMDNlZWN1YltpXSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG5AQCAtOTQ5LDExICs5NDksMTEgQEAgc3RhdGljIHZvaWQgY3ViX2ZyZWUoc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3MpXFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENTU19OVU1fQ1VCX1BBR0VTOyBpKyspIHtcXG4tXFx0XFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNzcy1cXHUwMDNlY3ViW2ldKTtcXG4rXFx0XFx0a2ZyZWUoY3NzLVxcdTAwM2VjdWJbaV0pO1xcbiBcXHRcXHRjc3MtXFx1MDAzZWN1YltpXSA9IE5VTEw7XFxuIFxcdH1cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENTU19OVU1fRUNVQl9QQUdFUzsgaSsrKSB7XFxuLVxcdFxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljc3MtXFx1MDAzZWVjdWJbaV0pO1xcbitcXHRcXHRrZnJlZShjc3MtXFx1MDAzZWVjdWJbaV0pO1xcbiBcXHRcXHRjc3MtXFx1MDAzZWVjdWJbaV0gPSBOVUxMO1xcbiBcXHR9XFxuIH1cXG5AQCAtMTE0Miw4ICsxMTQyLDggQEAgaW50IF9faW5pdCBjaHNjX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0c2VpX3BhZ2UgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuLVxcdGNoc2NfcGFnZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4rXFx0c2VpX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbitcXHRjaHNjX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbiBcXHRpZiAoIXNlaV9wYWdlIHx8ICFjaHNjX3BhZ2UpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbkBAIC0xMTUzLDE2ICsxMTUzLDE2IEBAIGludCBfX2luaXQgY2hzY19pbml0KHZvaWQpXFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0cmV0dXJuIHJldDtcXG4gb3V0X2VycjpcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfcGFnZSk7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWlfcGFnZSk7XFxuK1xcdGtmcmVlKGNoc2NfcGFnZSk7XFxuK1xcdGtmcmVlKHNlaV9wYWdlKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gdm9pZCBfX2luaXQgY2hzY19pbml0X2NsZWFudXAodm9pZClcXG4ge1xcbiBcXHRjcndfdW5yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1NTKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfcGFnZSk7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWlfcGFnZSk7XFxuK1xcdGtmcmVlKGNoc2NfcGFnZSk7XFxuK1xcdGtmcmVlKHNlaV9wYWdlKTtcXG4gfVxcbiBcXG4gaW50IF9fY2hzY19lbmFibGVfZmFjaWxpdHkoc3RydWN0IGNoc2Nfc2RhX2FyZWEgKnNkYV9hcmVhLCBpbnQgb3BlcmF0aW9uX2NvZGUpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY1xcbmluZGV4IGI2Y2I4YmI4YmNjNGIuLjIyNWFhYWM3ZGQzMDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jXFxuQEAgLTE1LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pc2NkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbF9zdGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2Noc2MuaFxcdTAwM2VcXG5AQCAtMjkyLDcgKzI5Myw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9zdGFydCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxcbiBcXHRpZiAoIWNzc19nZW5lcmFsX2NoYXJhY3RlcmlzdGljcy5keW5pbylcXG4gXFx0XFx0LyogSXQgbWFrZXMgbm8gc2Vuc2UgdG8gdHJ5LiAqL1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLVxcdGNoc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcXG4rXFx0Y2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFjaHNjX2FyZWEpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRyZXF1ZXN0ID0ga3phbGxvY19vYmooKnJlcXVlc3QpO1xcbkBAIC0zMjEsNyArMzIyLDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX3N0YXJ0KHZvaWQgX191c2VyICp1c2VyX2FyZWEpXFxuIFxcdHNucHJpbnRmKGRiZiwgc2l6ZW9mKGRiZiksIFxcXCJyZXQ6JWRcXFwiLCByZXQpO1xcbiBcXHRDSFNDX0xPRygwLCBkYmYpO1xcbiBcXHRrZnJlZShyZXF1ZXN0KTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNoc2NfYXJlYSk7XFxuK1xcdGtmcmVlKGNoc2NfYXJlYSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTM0MCw3ICszNDEsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfb25fY2xvc2Vfc2V0KHZvaWQgX191c2VyICp1c2VyX2FyZWEpXFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbi1cXHRvbl9jbG9zZV9jaHNjX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7XFxuK1xcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghb25fY2xvc2VfY2hzY19hcmVhKSB7XFxuIFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfcmVxdWVzdDtcXG5AQCAtMzUzLDcgKzM1NCw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9zZXQodm9pZCBfX3VzZXIgKnVzZXJfYXJlYSlcXG4gXFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gb3V0X2ZyZWVfY2hzYzpcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuK1xcdGtmcmVlKG9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuIFxcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XFxuIG91dF9mcmVlX3JlcXVlc3Q6XFxuIFxcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xcbkBAIC0zNzUsNyArMzc2LDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3JlbW92ZSh2b2lkKVxcbiBcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuK1xcdGtmcmVlKG9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuIFxcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XFxuIFxcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xcbiBcXHRvbl9jbG9zZV9yZXF1ZXN0ID0gTlVMTDtcXG5AQCAtMzg5LDM5ICszOTAsMjkgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3JlbW92ZSh2b2lkKVxcbiBcXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX3N0YXJ0X3N5bmModm9pZCBfX3VzZXIgKnVzZXJfYXJlYSlcXG4ge1xcbi1cXHRzdHJ1Y3QgY2hzY19zeW5jX2FyZWEgKmNoc2NfYXJlYTtcXG4tXFx0aW50IHJldCwgY2NvZGU7XFxuK1xcdHN0cnVjdCBjaHNjX3N5bmNfYXJlYSAqY2hzY19hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbitcXHRpbnQgY2NvZGU7XFxuIFxcbi1cXHRjaHNjX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuK1xcdGNoc2NfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghY2hzY19hcmVhKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0aWYgKGNvcHlfZnJvbV91c2VyKGNoc2NfYXJlYSwgdXNlcl9hcmVhLCBQQUdFX1NJWkUpKSB7XFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4tXFx0aWYgKGNoc2NfYXJlYS1cXHUwMDNlaGVhZGVyLmNvZGUgXFx1MDAyNiAweDQwMDApIHtcXG4tXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY2hzY19hcmVhLCB1c2VyX2FyZWEsIFBBR0VfU0laRSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRpZiAoY2hzY19hcmVhLVxcdTAwM2VoZWFkZXIuY29kZSBcXHUwMDI2IDB4NDAwMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdGNoc2NfbG9nX2NvbW1hbmQoY2hzY19hcmVhKTtcXG4gXFx0Y2NvZGUgPSBjaHNjKGNoc2NfYXJlYSk7XFxuLVxcdGlmIChjY29kZSAhPSAwKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKGNjb2RlICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRpZiAoY29weV90b191c2VyKHVzZXJfYXJlYSwgY2hzY19hcmVhLCBQQUdFX1NJWkUpKVxcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldCA9IDA7XFxuLW91dF9mcmVlOlxcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19hcmVhKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jaGFubmVsX3BhdGgodm9pZCBfX3VzZXIgKnVzZXJfY2QpXFxuIHtcXG4tXFx0c3RydWN0IGNoc2NfY2hwX2NkICpjZDtcXG4tXFx0aW50IHJldCwgY2NvZGU7XFxuK1xcdHN0cnVjdCBjaHNjX2NocF9jZCAqY2QgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuK1xcdGludCBjY29kZTtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XFxuIFxcdFxcdHUzMiA6IDI7XFxuQEAgLTQzNiwyMCArNDI3LDE2IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2NoYW5uZWxfcGF0aCh2b2lkIF9fdXNlciAqdXNlcl9jZClcXG4gXFx0XFx0dTMyIDogMzI7XFxuIFxcdFxcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcXG4gXFx0XFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XFxuLVxcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3BjZF9hcmVhO1xcbitcXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NwY2RfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFxuLVxcdHNjcGNkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuK1xcdHNjcGNkX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbiBcXHRpZiAoIXNjcGNkX2FyZWEpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRjZCA9IGt6YWxsb2Nfb2JqKCpjZCk7XFxuLVxcdGlmICghY2QpIHtcXG4tXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbi1cXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkge1xcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuK1xcdGlmICghY2QpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHNjcGNkX2FyZWEtXFx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDEwO1xcbiBcXHRzY3BjZF9hcmVhLVxcdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMjg7XFxuIFxcdHNjcGNkX2FyZWEtXFx1MDAzZW0gPSBjZC1cXHUwMDNlbTtcXG5AQCAtNDU5LDMxICs0NDYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY2hhbm5lbF9wYXRoKHZvaWQgX191c2VyICp1c2VyX2NkKVxcbiBcXHRzY3BjZF9hcmVhLVxcdTAwM2VsYXN0X2NocGlkID0gY2QtXFx1MDAzZWNocGlkLmlkO1xcbiBcXG4gXFx0Y2NvZGUgPSBjaHNjKHNjcGNkX2FyZWEpO1xcbi1cXHRpZiAoY2NvZGUgIT0gMCkge1xcbi1cXHRcXHRyZXQgPSAtRUlPO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuK1xcdGlmIChjY29kZSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0aWYgKHNjcGNkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuIFxcdFxcdENIU0NfTVNHKDAsIFxcXCJzY3BjZDogcmVzcG9uc2UgY29kZT0leFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0IHNjcGNkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmNvZGUpO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0fVxcbiBcXHRtZW1jcHkoXFx1MDAyNmNkLVxcdTAwM2VjcGNiLCBcXHUwMDI2c2NwY2RfYXJlYS1cXHUwMDNlcmVzcG9uc2UsIHNjcGNkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XFxuIFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jZCwgY2QsIHNpemVvZigqY2QpKSlcXG4tXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyZXQgPSAwO1xcbi1vdXRfZnJlZTpcXG4tXFx0a2ZyZWUoY2QpO1xcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NwY2RfYXJlYSk7XFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpXFxuIHtcXG4tXFx0c3RydWN0IGNoc2NfY3VfY2QgKmNkO1xcbi1cXHRpbnQgcmV0LCBjY29kZTtcXG4rXFx0c3RydWN0IGNoc2NfY3VfY2QgKmNkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbitcXHRpbnQgY2NvZGU7XFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdHN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0O1xcbiBcXHRcXHR1MzIgOiAyO1xcbkBAIC00OTgsMjAgKzQ3NywxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jdSh2b2lkIF9fdXNlciAqdXNlcl9jZClcXG4gXFx0XFx0dTMyIDogMzI7XFxuIFxcdFxcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcXG4gXFx0XFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XFxuLVxcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3VjZF9hcmVhO1xcbitcXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2N1Y2RfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFxuLVxcdHNjdWNkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuK1xcdHNjdWNkX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbiBcXHRpZiAoIXNjdWNkX2FyZWEpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRjZCA9IGt6YWxsb2Nfb2JqKCpjZCk7XFxuLVxcdGlmICghY2QpIHtcXG4tXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbi1cXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkge1xcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuK1xcdGlmICghY2QpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHNjdWNkX2FyZWEtXFx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDEwO1xcbiBcXHRzY3VjZF9hcmVhLVxcdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMjY7XFxuIFxcdHNjdWNkX2FyZWEtXFx1MDAzZW0gPSBjZC1cXHUwMDNlbTtcXG5AQCAtNTIxLDMxICs0OTYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpXFxuIFxcdHNjdWNkX2FyZWEtXFx1MDAzZWxhc3RfY3VuID0gY2QtXFx1MDAzZWN1bjtcXG4gXFxuIFxcdGNjb2RlID0gY2hzYyhzY3VjZF9hcmVhKTtcXG4tXFx0aWYgKGNjb2RlICE9IDApIHtcXG4tXFx0XFx0cmV0ID0gLUVJTztcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbitcXHRpZiAoY2NvZGUgIT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdGlmIChzY3VjZF9hcmVhLVxcdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xcbi1cXHRcXHRyZXQgPSAtRUlPO1xcbiBcXHRcXHRDSFNDX01TRygwLCBcXFwic2N1Y2Q6IHJlc3BvbnNlIGNvZGU9JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBzY3VjZF9hcmVhLVxcdTAwM2VyZXNwb25zZS5jb2RlKTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4gXFx0bWVtY3B5KFxcdTAwMjZjZC1cXHUwMDNlY3VjYiwgXFx1MDAyNnNjdWNkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLCBzY3VjZF9hcmVhLVxcdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xcbiBcXHRpZiAoY29weV90b191c2VyKHVzZXJfY2QsIGNkLCBzaXplb2YoKmNkKSkpXFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cmV0ID0gMDtcXG4tb3V0X2ZyZWU6XFxuLVxcdGtmcmVlKGNkKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjdWNkX2FyZWEpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX3NjaF9jdSh2b2lkIF9fdXNlciAqdXNlcl9jdWQpXFxuIHtcXG4tXFx0c3RydWN0IGNoc2Nfc2NoX2N1ZCAqY3VkO1xcbi1cXHRpbnQgcmV0LCBjY29kZTtcXG4rXFx0c3RydWN0IGNoc2Nfc2NoX2N1ZCAqY3VkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbitcXHRpbnQgY2NvZGU7XFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdHN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0O1xcbiBcXHRcXHR1MzIgOiAyO1xcbkBAIC01NjEsMjAgKzUyOCwxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19zY2hfY3Uodm9pZCBfX3VzZXIgKnVzZXJfY3VkKVxcbiBcXHRcXHR1MzIgOiAzMjtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xcbiBcXHRcXHR1OCBkYXRhW1BBR0VfU0laRSAtIDIwXTtcXG4tXFx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNzY3VkX2FyZWE7XFxuK1xcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzc2N1ZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbiBcXG4tXFx0c3NjdWRfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4rXFx0c3NjdWRfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghc3NjdWRfYXJlYSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGN1ZCA9IGt6YWxsb2Nfb2JqKCpjdWQpO1xcbi1cXHRpZiAoIWN1ZCkge1xcbi1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuLVxcdGlmIChjb3B5X2Zyb21fdXNlcihjdWQsIHVzZXJfY3VkLCBzaXplb2YoKmN1ZCkpKSB7XFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKCFjdWQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY3VkLCB1c2VyX2N1ZCwgc2l6ZW9mKCpjdWQpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHNzY3VkX2FyZWEtXFx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDEwO1xcbiBcXHRzc2N1ZF9hcmVhLVxcdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMDY7XFxuIFxcdHNzY3VkX2FyZWEtXFx1MDAzZW0gPSBjdWQtXFx1MDAzZXNjaGlkLm07XFxuQEAgLTU4NSwzMSArNTQ4LDIzIEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX3NjaF9jdSh2b2lkIF9fdXNlciAqdXNlcl9jdWQpXFxuIFxcdHNzY3VkX2FyZWEtXFx1MDAzZWxhc3Rfc2NoID0gY3VkLVxcdTAwM2VzY2hpZC5zY2hfbm87XFxuIFxcbiBcXHRjY29kZSA9IGNoc2Moc3NjdWRfYXJlYSk7XFxuLVxcdGlmIChjY29kZSAhPSAwKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKGNjb2RlICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRpZiAoc3NjdWRfYXJlYS1cXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcXG4tXFx0XFx0cmV0ID0gLUVJTztcXG4gXFx0XFx0Q0hTQ19NU0coMCwgXFxcInNzY3VkOiByZXNwb25zZSBjb2RlPSV4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgc3NjdWRfYXJlYS1cXHUwMDNlcmVzcG9uc2UuY29kZSk7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcdG1lbWNweShcXHUwMDI2Y3VkLVxcdTAwM2VzY3ViLCBcXHUwMDI2c3NjdWRfYXJlYS1cXHUwMDNlcmVzcG9uc2UsIHNzY3VkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XFxuIFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jdWQsIGN1ZCwgc2l6ZW9mKCpjdWQpKSlcXG4tXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRyZXQgPSAwO1xcbi1vdXRfZnJlZTpcXG4tXFx0a2ZyZWUoY3VkKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNzY3VkX2FyZWEpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jb25mX2luZm8odm9pZCBfX3VzZXIgKnVzZXJfY2kpXFxuIHtcXG4tXFx0c3RydWN0IGNoc2NfY29uZl9pbmZvICpjaTtcXG4tXFx0aW50IHJldCwgY2NvZGU7XFxuK1xcdHN0cnVjdCBjaHNjX2NvbmZfaW5mbyAqY2kgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuK1xcdGludCBjY29kZTtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XFxuIFxcdFxcdHUzMiA6IDI7XFxuQEAgLTYyMywyMCArNTc4LDE2IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jb25mX2luZm8odm9pZCBfX3VzZXIgKnVzZXJfY2kpXFxuIFxcdFxcdHU2NCA6IDY0O1xcbiBcXHRcXHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVzcG9uc2U7XFxuIFxcdFxcdHU4IGRhdGFbUEFHRV9TSVpFIC0gMjBdO1xcbi1cXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NpX2FyZWE7XFxuK1xcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY2lfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFxuLVxcdHNjaV9hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbitcXHRzY2lfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghc2NpX2FyZWEpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRjaSA9IGt6YWxsb2Nfb2JqKCpjaSk7XFxuLVxcdGlmICghY2kpIHtcXG4tXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbi1cXHRpZiAoY29weV9mcm9tX3VzZXIoY2ksIHVzZXJfY2ksIHNpemVvZigqY2kpKSkge1xcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuK1xcdGlmICghY2kpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY2ksIHVzZXJfY2ksIHNpemVvZigqY2kpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHNjaV9hcmVhLVxcdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAxMDtcXG4gXFx0c2NpX2FyZWEtXFx1MDAzZXJlcXVlc3QuY29kZSA9IDB4MDAxMjtcXG4gXFx0c2NpX2FyZWEtXFx1MDAzZW0gPSBjaS1cXHUwMDNlaWQubTtcXG5AQCAtNjQ1LDMxICs1OTYsMjMgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcXG4gXFx0c2NpX2FyZWEtXFx1MDAzZXNzaWQgPSBjaS1cXHUwMDNlaWQuc3NpZDtcXG4gXFxuIFxcdGNjb2RlID0gY2hzYyhzY2lfYXJlYSk7XFxuLVxcdGlmIChjY29kZSAhPSAwKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKGNjb2RlICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRpZiAoc2NpX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmNvZGUgIT0gMHgwMDAxKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuIFxcdFxcdENIU0NfTVNHKDAsIFxcXCJzY2k6IHJlc3BvbnNlIGNvZGU9JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBzY2lfYXJlYS1cXHUwMDNlcmVzcG9uc2UuY29kZSk7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcdG1lbWNweShcXHUwMDI2Y2ktXFx1MDAzZXNjaWQsIFxcdTAwMjZzY2lfYXJlYS1cXHUwMDNlcmVzcG9uc2UsIHNjaV9hcmVhLVxcdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xcbiBcXHRpZiAoY29weV90b191c2VyKHVzZXJfY2ksIGNpLCBzaXplb2YoKmNpKSkpXFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cmV0ID0gMDtcXG4tb3V0X2ZyZWU6XFxuLVxcdGtmcmVlKGNpKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjaV9hcmVhKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKVxcbiB7XFxuLVxcdHN0cnVjdCBjaHNjX2NvbXBfbGlzdCAqY2NsO1xcbi1cXHRpbnQgcmV0LCBjY29kZTtcXG4rXFx0c3RydWN0IGNoc2NfY29tcF9saXN0ICpjY2wgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuK1xcdGludCBjY29kZTtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XFxuIFxcdFxcdHUzMiBjdHlwZSA6IDg7XFxuQEAgLTY4MSw3ICs2MjQsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKVxcbiBcXHRcXHR1NjQgOiA2NDtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xcbiBcXHRcXHR1OCBkYXRhW1BBR0VfU0laRSAtIDM2XTtcXG4tXFx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjY2xfYXJlYTtcXG4rXFx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjY2xfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0dTMyIG0gOiAxO1xcbiBcXHRcXHR1MzIgOiAzMTtcXG5AQCAtNjk2LDE4ICs2MzksMTQgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcXG4gXFx0XFx0dTMyIHJlcztcXG4gXFx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKmNzc2lkc19wYXJtO1xcbiBcXG4tXFx0c2NjbF9hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbitcXHRzY2NsX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbiBcXHRpZiAoIXNjY2xfYXJlYSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGNjbCA9IGt6YWxsb2Nfb2JqKCpjY2wpO1xcbi1cXHRpZiAoIWNjbCkge1xcbi1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuLVxcdGlmIChjb3B5X2Zyb21fdXNlcihjY2wsIHVzZXJfY2NsLCBzaXplb2YoKmNjbCkpKSB7XFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKCFjY2wpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoY2NsLCB1c2VyX2NjbCwgc2l6ZW9mKCpjY2wpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdHNjY2xfYXJlYS1cXHUwMDNlcmVxdWVzdC5sZW5ndGggPSAweDAwMjA7XFxuIFxcdHNjY2xfYXJlYS1cXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDMwO1xcbiBcXHRzY2NsX2FyZWEtXFx1MDAzZWZtdCA9IGNjbC1cXHUwMDNlcmVxLmZtdDtcXG5AQCAtNzI4LDYxICs2NjcsNDYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFx0Y2NvZGUgPSBjaHNjKHNjY2xfYXJlYSk7XFxuLVxcdGlmIChjY29kZSAhPSAwKSB7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKGNjb2RlICE9IDApXFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRpZiAoc2NjbF9hcmVhLVxcdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xcbi1cXHRcXHRyZXQgPSAtRUlPO1xcbiBcXHRcXHRDSFNDX01TRygwLCBcXFwic2NjbDogcmVzcG9uc2UgY29kZT0leFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0IHNjY2xfYXJlYS1cXHUwMDNlcmVzcG9uc2UuY29kZSk7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuIFxcdG1lbWNweShcXHUwMDI2Y2NsLVxcdTAwM2VzY2NsLCBcXHUwMDI2c2NjbF9hcmVhLVxcdTAwM2VyZXNwb25zZSwgc2NjbF9hcmVhLVxcdTAwM2VyZXNwb25zZS5sZW5ndGgpO1xcbiBcXHRpZiAoY29weV90b191c2VyKHVzZXJfY2NsLCBjY2wsIHNpemVvZigqY2NsKSkpXFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cmV0ID0gMDtcXG4tb3V0X2ZyZWU6XFxuLVxcdGtmcmVlKGNjbCk7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY2NsX2FyZWEpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9jaHBkKHZvaWQgX191c2VyICp1c2VyX2NocGQpXFxuIHtcXG4tXFx0c3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhO1xcbi1cXHRzdHJ1Y3QgY2hzY19jcGRfaW5mbyAqY2hwZDtcXG4rXFx0c3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgY2hzY19jcGRfaW5mbyAqY2hwZCBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGNocGQgPSBremFsbG9jX29iaigqY2hwZCk7XFxuLVxcdHNjcGRfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4tXFx0aWYgKCFzY3BkX2FyZWEgfHwgIWNocGQpIHtcXG4tXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbi1cXHRpZiAoY29weV9mcm9tX3VzZXIoY2hwZCwgdXNlcl9jaHBkLCBzaXplb2YoKmNocGQpKSkge1xcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuK1xcdHNjcGRfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuK1xcdGlmICghc2NwZF9hcmVhIHx8ICFjaHBkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKGNocGQsIHVzZXJfY2hwZCwgc2l6ZW9mKCpjaHBkKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRyZXQgPSBjaHNjX2RldGVybWluZV9jaGFubmVsX3BhdGhfZGVzYyhjaHBkLVxcdTAwM2VjaHBpZCwgY2hwZC1cXHUwMDNlZm10LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgY2hwZC1cXHUwMDNlcmZtdCwgY2hwZC1cXHUwMDNlYywgY2hwZC1cXHUwMDNlbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNjcGRfYXJlYSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdG1lbWNweShcXHUwMDI2Y2hwZC1cXHUwMDNlY2hwZGIsIFxcdTAwMjZzY3BkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLCBzY3BkX2FyZWEtXFx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XFxuIFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jaHBkLCBjaHBkLCBzaXplb2YoKmNocGQpKSlcXG4tXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4tb3V0X2ZyZWU6XFxuLVxcdGtmcmVlKGNocGQpO1xcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NwZF9hcmVhKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfZGNhbCh2b2lkIF9fdXNlciAqdXNlcl9kY2FsKVxcbiB7XFxuLVxcdHN0cnVjdCBjaHNjX2RjYWwgKmRjYWw7XFxuLVxcdGludCByZXQsIGNjb2RlO1xcbitcXHRzdHJ1Y3QgY2hzY19kY2FsICpkY2FsIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbitcXHRpbnQgY2NvZGU7XFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdHN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0O1xcbiBcXHRcXHR1MzIgYXR5cGUgOiA4O1xcbkBAIC03OTQsMjAgKzcxOCwxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfZGNhbCh2b2lkIF9fdXNlciAqdXNlcl9kY2FsKVxcbiBcXHRcXHR1MzIgcmVzMVsyXTtcXG4gXFx0XFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xcbiBcXHRcXHR1OCBkYXRhW1BBR0VfU0laRSAtIDM2XTtcXG4tXFx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNkY2FsX2FyZWE7XFxuK1xcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzZGNhbF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbiBcXG4tXFx0c2RjYWxfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcXG4rXFx0c2RjYWxfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghc2RjYWxfYXJlYSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdGRjYWwgPSBremFsbG9jX29iaigqZGNhbCk7XFxuLVxcdGlmICghZGNhbCkge1xcbi1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi1cXHR9XFxuLVxcdGlmIChjb3B5X2Zyb21fdXNlcihkY2FsLCB1c2VyX2RjYWwsIHNpemVvZigqZGNhbCkpKSB7XFxuLVxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLVxcdH1cXG4rXFx0aWYgKCFkY2FsKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKGRjYWwsIHVzZXJfZGNhbCwgc2l6ZW9mKCpkY2FsKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRzZGNhbF9hcmVhLVxcdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAyMDtcXG4gXFx0c2RjYWxfYXJlYS1cXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDM0O1xcbiBcXHRzZGNhbF9hcmVhLVxcdTAwM2VhdHlwZSA9IGRjYWwtXFx1MDAzZXJlcS5hdHlwZTtcXG5AQCAtODE2LDI2ICs3MzYsMTggQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2RjYWwodm9pZCBfX3VzZXIgKnVzZXJfZGNhbClcXG4gXFx0ICAgICAgIHNpemVvZihzZGNhbF9hcmVhLVxcdTAwM2VsaXN0X3Bhcm0pKTtcXG4gXFxuIFxcdGNjb2RlID0gY2hzYyhzZGNhbF9hcmVhKTtcXG4tXFx0aWYgKGNjb2RlICE9IDApIHtcXG4tXFx0XFx0cmV0ID0gLUVJTztcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tXFx0fVxcbitcXHRpZiAoY2NvZGUgIT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdGlmIChzZGNhbF9hcmVhLVxcdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xcbi1cXHRcXHRyZXQgPSAtRUlPO1xcbiBcXHRcXHRDSFNDX01TRygwLCBcXFwic2RjYWw6IHJlc3BvbnNlIGNvZGU9JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBzZGNhbF9hcmVhLVxcdTAwM2VyZXNwb25zZS5jb2RlKTtcXG4tXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4gXFx0bWVtY3B5KFxcdTAwMjZkY2FsLVxcdTAwM2VzZGNhbCwgXFx1MDAyNnNkY2FsX2FyZWEtXFx1MDAzZXJlc3BvbnNlLFxcbiBcXHQgICAgICAgc2RjYWxfYXJlYS1cXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcXG4gXFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2RjYWwsIGRjYWwsIHNpemVvZigqZGNhbCkpKVxcbi1cXHRcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldCA9IDA7XFxuLW91dF9mcmVlOlxcbi1cXHRrZnJlZShkY2FsKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNkY2FsX2FyZWEpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBsb25nIGNoc2NfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXFxuQEAgLTkwNCw3ICs4MTYsNyBAQCBzdGF0aWMgaW50IGNoc2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4gXFx0fVxcbiBcXHRzbnByaW50ZihkYmYsIHNpemVvZihkYmYpLCBcXFwicmVscmV0OiVkXFxcIiwgcmV0KTtcXG4gXFx0Q0hTQ19MT0coMCwgZGJmKTtcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuK1xcdGtmcmVlKG9uX2Nsb3NlX2Noc2NfYXJlYSk7XFxuIFxcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XFxuIFxcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xcbiBcXHRvbl9jbG9zZV9yZXF1ZXN0ID0gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jbWYuYyBiL2RyaXZlcnMvczM5MC9jaW8vY21mLmNcXG5pbmRleCA5MmFiM2Q1NDZmZTQ3Li42YzQ2YjBkMGIzZGE0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY21mLmNcXG4rKysgYi9kcml2ZXJzL3MzOTAvY2lvL2NtZi5jXFxuQEAgLTUwMSwxMiArNTAxLDEyIEBAIHN0YXRpYyBpbnQgYWxsb2NfY21iKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxcbiBcXHRcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZjbWJfYXJlYS5saXN0KSk7XFxuIFxcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y21iX2FyZWEubG9jayk7XFxuLVxcdFxcdG1lbSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBnZXRfb3JkZXIoc2l6ZSkpO1xcbitcXHRcXHRtZW0gPSBrbWFsbG9jKFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBnZXRfb3JkZXIoc2l6ZSksIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNtYl9hcmVhLmxvY2spO1xcbiBcXG4gXFx0XFx0aWYgKGNtYl9hcmVhLm1lbSkge1xcbiBcXHRcXHRcXHQvKiBvaywgYW5vdGhlciB0aHJlYWQgd2FzIGZhc3RlciAqL1xcbi1cXHRcXHRcXHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW1lbSwgZ2V0X29yZGVyKHNpemUpKTtcXG4rXFx0XFx0XFx0a2ZyZWUobWVtKTtcXG4gXFx0XFx0fSBlbHNlIGlmICghbWVtKSB7XFxuIFxcdFxcdFxcdC8qIG5vIGx1Y2sgKi9cXG4gXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG5AQCAtNTQ3LDEwICs1NDcsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX2NtYihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcXG4gXFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlY21iX2xpc3QpO1xcbiBcXG4gXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmNtYl9hcmVhLmxpc3QpKSB7XFxuLVxcdFxcdHNzaXplX3Qgc2l6ZTtcXG4tXFx0XFx0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgY21iKSAqIGNtYl9hcmVhLm51bV9jaGFubmVscztcXG4gXFx0XFx0Y21mX2FjdGl2YXRlKE5VTEwsIENNRl9PRkYpO1xcbi1cXHRcXHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWNtYl9hcmVhLm1lbSwgZ2V0X29yZGVyKHNpemUpKTtcXG4rXFx0XFx0a2ZyZWUoY21iX2FyZWEubWVtKTtcXG4gXFx0XFx0Y21iX2FyZWEubWVtID0gTlVMTDtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19pcnEoY2Rldi1cXHUwMDNlY2N3bG9jayk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmhcXG5pbmRleCA0YmQ0YzAwYzljMGNhLi5kZmY1ZjUzYTg3OTVkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oXFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmhcXG5AQCAtMjQ0LDcgKzI0NCw3IEBAIHN0cnVjdCBxZGlvX2lycSB7XFxuIFxcdGludCBwZXJmX3N0YXRfZW5hYmxlZDtcXG4gXFxuIFxcdHN0cnVjdCBxZHIgKnFkcjtcXG4tXFx0dW5zaWduZWQgbG9uZyBjaHNjX3BhZ2U7XFxuK1xcdHZvaWQgKmNoc2NfcGFnZTtcXG4gXFxuIFxcdHN0cnVjdCBxZGlvX3EgKmlucHV0X3FzW1FESU9fTUFYX1FVRVVFU19QRVJfSVJRXTtcXG4gXFx0c3RydWN0IHFkaW9fcSAqb3V0cHV0X3FzW1FESU9fTUFYX1FVRVVFU19QRVJfSVJRXTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNcXG5pbmRleCBjMWUwOWZhMzRlNzc0Li5iZWJjMTI1MGViZWJmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNcXG4rKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jXFxuQEAgLTE3LDYgKzE3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2RlYnVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vcWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2FzbS5oXFx1MDAzZVxcbkBAIC05MzMsMTAgKzkzNCwxMCBAQCBpbnQgcWRpb19mcmVlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmlycV9wdHItXFx1MDAzZXNldHVwX211dGV4KTtcXG4gXFxuIFxcdHFkaW9fZnJlZV9xdWV1ZXMoaXJxX3B0cik7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0ci1cXHUwMDNlcWRyKTtcXG4tXFx0ZnJlZV9wYWdlKGlycV9wdHItXFx1MDAzZWNoc2NfcGFnZSk7XFxuK1xcdGtmcmVlKGlycV9wdHItXFx1MDAzZXFkcik7XFxuK1xcdGtmcmVlKGlycV9wdHItXFx1MDAzZWNoc2NfcGFnZSk7XFxuIFxcdGtmcmVlKGlycV9wdHItXFx1MDAzZWNjdyk7XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0cik7XFxuK1xcdGtmcmVlKGlycV9wdHIpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChxZGlvX2ZyZWUpO1xcbkBAIC05NjEsNyArOTYyLDcgQEAgaW50IHFkaW9fYWxsb2NhdGUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkIGludCBub19pbnB1dF9xcyxcXG4gXFx0ICAgIG5vX291dHB1dF9xcyBcXHUwMDNlIFFESU9fTUFYX1FVRVVFU19QRVJfSVJRKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGlycV9wdHIgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XFxuK1xcdGlycV9wdHIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghaXJxX3B0cilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC05ODYsMTIgKzk4NywxMiBAQCBpbnQgcWRpb19hbGxvY2F0ZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IG5vX2lucHV0X3FzLFxcbiBcXHQgKiBxZGlvX2VzdGFibGlzaC4gSW4gY2FzZSBvZiBsb3cgbWVtb3J5IGFuZCBzd2FwIG9uIGEgemZjcCBkaXNrXFxuIFxcdCAqIHdlIG1heSBub3QgYmUgYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgb3RoZXJ3aXNlLlxcbiBcXHQgKi9cXG4tXFx0aXJxX3B0ci1cXHUwMDNlY2hzY19wYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xcbitcXHRpcnFfcHRyLVxcdTAwM2VjaHNjX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghaXJxX3B0ci1cXHUwMDNlY2hzY19wYWdlKVxcbiBcXHRcXHRnb3RvIGVycl9jaHNjO1xcbiBcXG4gXFx0LyogcWRyIGlzIHVzZWQgaW4gY2N3MS5jZGEgd2hpY2ggaXMgdTMyICovXFxuLVxcdGlycV9wdHItXFx1MDAzZXFkciA9IChzdHJ1Y3QgcWRyICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuK1xcdGlycV9wdHItXFx1MDAzZXFkciA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghaXJxX3B0ci1cXHUwMDNlcWRyKVxcbiBcXHRcXHRnb3RvIGVycl9xZHI7XFxuIFxcbkBAIC0xMDA0LDE0ICsxMDA1LDE0IEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyX3F1ZXVlczpcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyLVxcdTAwM2VxZHIpO1xcbitcXHRrZnJlZShpcnFfcHRyLVxcdTAwM2VxZHIpO1xcbiBlcnJfcWRyOlxcbi1cXHRmcmVlX3BhZ2UoaXJxX3B0ci1cXHUwMDNlY2hzY19wYWdlKTtcXG4rXFx0a2ZyZWUoaXJxX3B0ci1cXHUwMDNlY2hzY19wYWdlKTtcXG4gZXJyX2Noc2M6XFxuIGVycl9kYmY6XFxuIFxcdGtmcmVlKGlycV9wdHItXFx1MDAzZWNjdyk7XFxuIGVycl9jY3c6XFxuLVxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0cik7XFxuK1xcdGtmcmVlKGlycV9wdHIpO1xcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocWRpb19hbGxvY2F0ZSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmNcXG5pbmRleCBlYTA5YWFkYWFlNGVjLi5jMDIxNWE3ZDI5YTgxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmNcXG5AQCAtMzUsNyArMzUsNyBAQCB2b2lkIHFkaW9fZnJlZV9idWZmZXJzKHN0cnVjdCBxZGlvX2J1ZmZlciAqKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KVxcbiBcXHRpbnQgcG9zO1xcbiBcXG4gXFx0Zm9yIChwb3MgPSAwOyBwb3MgXFx1MDAzYyBjb3VudDsgcG9zICs9IFFCVUZGX1BFUl9QQUdFKVxcbi1cXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zltwb3NdKTtcXG4rXFx0XFx0a2ZyZWUoYnVmW3Bvc10pO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHFkaW9fZnJlZV9idWZmZXJzKTtcXG4gXFxuQEAgLTQ5LDcgKzQ5LDcgQEAgaW50IHFkaW9fYWxsb2NfYnVmZmVycyhzdHJ1Y3QgcWRpb19idWZmZXIgKipidWYsIHVuc2lnbmVkIGludCBjb3VudClcXG4gXFx0aW50IHBvcztcXG4gXFxuIFxcdGZvciAocG9zID0gMDsgcG9zIFxcdTAwM2MgY291bnQ7IHBvcyArPSBRQlVGRl9QRVJfUEFHRSkge1xcbi1cXHRcXHRidWZbcG9zXSA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcXG4rXFx0XFx0YnVmW3Bvc10gPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdGlmICghYnVmW3Bvc10pIHtcXG4gXFx0XFx0XFx0cWRpb19mcmVlX2J1ZmZlcnMoYnVmLCBjb3VudCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC04Myw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIF9fcWRpb19mcmVlX3F1ZXVlcyhzdHJ1Y3QgcWRpb19xICoqcXVldWVzLCB1bnNpZ25lZCBpbnQgY291bnQpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKykge1xcbiBcXHRcXHRxID0gcXVldWVzW2ldO1xcbi1cXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcS1cXHUwMDNlc2xfcGFnZSk7XFxuK1xcdFxcdGtmcmVlKHEtXFx1MDAzZXNsX3BhZ2UpO1xcbiBcXHRcXHRrbWVtX2NhY2hlX2ZyZWUocWRpb19xX2NhY2hlLCBxKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTEwOSw3ICsxMDksNyBAQCBzdGF0aWMgaW50IF9fcWRpb19hbGxvY2F0ZV9xcyhzdHJ1Y3QgcWRpb19xICoqaXJxX3B0cl9xcywgaW50IG5yX3F1ZXVlcylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHEtXFx1MDAzZXNsX3BhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTtcXG4rXFx0XFx0cS1cXHUwMDNlc2xfcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4gXFx0XFx0aWYgKCFxLVxcdTAwM2VzbF9wYWdlKSB7XFxuIFxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShxZGlvX3FfY2FjaGUsIHEpO1xcbiBcXHRcXHRcXHRfX3FkaW9fZnJlZV9xdWV1ZXMoaXJxX3B0cl9xcywgaSk7XFxuQEAgLTI0OSwxMSArMjQ5LDExIEBAIGludCBxZGlvX3NldHVwX2dldF9zc3FkKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0cixcXG4gXFxuIFxcdERCRl9FVkVOVChcXFwiZ2V0c3NxZDolNHhcXFwiLCBzY2hpZC1cXHUwMDNlc2NoX25vKTtcXG4gXFx0aWYgKCFpcnFfcHRyKSB7XFxuLVxcdFxcdHNzcWQgPSAoc3RydWN0IGNoc2Nfc3NxZF9hcmVhICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpO1xcbitcXHRcXHRzc3FkID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbiBcXHRcXHRpZiAoIXNzcWQpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzc3FkID0gKHN0cnVjdCBjaHNjX3NzcWRfYXJlYSAqKWlycV9wdHItXFx1MDAzZWNoc2NfcGFnZTtcXG4rXFx0XFx0c3NxZCA9IGlycV9wdHItXFx1MDAzZWNoc2NfcGFnZTtcXG4gXFx0fVxcbiBcXG4gXFx0cmMgPSBjaHNjX3NzcWQoKnNjaGlkLCBzc3FkKTtcXG5AQCAtMjcwLDcgKzI3MCw3IEBAIGludCBxZGlvX3NldHVwX2dldF9zc3FkKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0cixcXG4gXFxuIG91dDpcXG4gXFx0aWYgKCFpcnFfcHRyKVxcbi1cXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3NxZCk7XFxuK1xcdFxcdGtmcmVlKHNzcWQpO1xcbiBcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jXFxuaW5kZXggZTE2N2FhNzVjM2RmZi4uYTJmZjUxODg3NTM3ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuY1xcbkBAIC0xMzYsNyArMTM2LDcgQEAgc3RhdGljIHN0cnVjdCBhaXJxX3N0cnVjdCB0aXFkaW9fYWlycSA9IHtcXG4gXFxuIHN0YXRpYyBpbnQgc2V0X3N1YmNoYW5uZWxfaW5kKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciwgaW50IHJlc2V0KVxcbiB7XFxuLVxcdHN0cnVjdCBjaHNjX3Njc3NjX2FyZWEgKnNjc3NjID0gKHZvaWQgKilpcnFfcHRyLVxcdTAwM2VjaHNjX3BhZ2U7XFxuK1xcdHN0cnVjdCBjaHNjX3Njc3NjX2FyZWEgKnNjc3NjID0gaXJxX3B0ci1cXHUwMDNlY2hzY19wYWdlO1xcbiBcXHRkbWE2NF90IHN1bW1hcnlfaW5kaWNhdG9yX2FkZHIsIHN1YmNoYW5uZWxfaW5kaWNhdG9yX2FkZHI7XFxuIFxcdGludCByYztcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vc2NtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jXFxuaW5kZXggMTcxMjEyYTZkMmQ5Yy4uYjc5ZmUwMjNhYjhkMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9zY20uY1xcbkBAIC0xMyw2ICsxMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9lYWRtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJjaHNjLmhcXFwiXFxuIFxcbkBAIC0yMjQsMTIgKzIyNSwxMiBAQCBzdGF0aWMgaW50IHNjbV9hZGQoc3RydWN0IGNoc2Nfc2NtX2luZm8gKnNjbV9pbmZvLCBzaXplX3QgbnVtKVxcbiBcXG4gaW50IHNjbV91cGRhdGVfaW5mb3JtYXRpb24odm9pZClcXG4ge1xcbi1cXHRzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm87XFxuK1xcdHN0cnVjdCBjaHNjX3NjbV9pbmZvICpzY21faW5mbyBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gXFx0dTY0IHRva2VuID0gMDtcXG4gXFx0c2l6ZV90IG51bTtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHNjbV9pbmZvID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbitcXHRzY21faW5mbyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuIFxcdGlmICghc2NtX2luZm8pXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjUwLDggKzI1MSw2IEBAIGludCBzY21fdXBkYXRlX2luZm9ybWF0aW9uKHZvaWQpXFxuIFxcdFxcdHRva2VuID0gc2NtX2luZm8tXFx1MDAzZXJlc3RvaztcXG4gXFx0fSB3aGlsZSAodG9rZW4pO1xcbiBcXG4tXFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjbV9pbmZvKTtcXG4tXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjM1LjY2Nzg1ODcwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk3MjA4NTg2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHMzOTAtc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gaGVscGVycyBhbmQgdGhlIHMzOTAgQ2hhbm5lbCBJL08gKENJTykgc3Vic3lzdGVtIChhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBhbmQgZHJpdmVycy9zMzkwL2Npby8qKS4gVGhlc2UgZmlsZXMgYXJlIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgYW5kIGFyZSBub3QgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY0NDBmMWUwYjljYmVhMDYzZTljZmM2MmM4N2UxNjllYzIyZjc4MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE0OjEyOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaFxuaW5kZXggMDZlMWVjMmFmZDVhZi4uMjQ4ODI5ZDQ2MWJjZSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaFxuQEAgLTE0Nyw3ICsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxuIFx0XHRcdGliLVx1MDAzZWRhdGFbaV0gPSBkbWE2NF9hZGQoaWItXHUwMDNlZGF0YVtpIC0gMV0sIElEQV9CTE9DS19TSVpFKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuLVx0XHR2YWRkciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlX29yZGVyKTtcbitcdFx0dmFkZHIgPSBrbWFsbG9jKFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgcGFnZV9vcmRlciwgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghdmFkZHIpXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdFx0aWItXHUwMDNlZGF0YVtpXSA9IHZpcnRfdG9fZG1hNjQodmFkZHIpO1xuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZGFsX2J1ZmZlciAqaWRhbF9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUsIGludCBwYWdlX29yZGVyKVxuIFx0d2hpbGUgKGkgXHUwMDNlPSBucl9jaHVua3MpIHtcbiBcdFx0aSAtPSBucl9jaHVua3M7XG4gXHRcdHZhZGRyID0gZG1hNjRfdG9fdmlydChpYi1cdTAwM2VkYXRhW2ldKTtcbi1cdFx0ZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgaWItXHUwMDNlcGFnZV9vcmRlcik7XG4rXHRcdGtmcmVlKHZhZGRyKTtcbiBcdH1cbiBcdGtmcmVlKGliKTtcbiBcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuQEAgLTE3NSw3ICsxNzUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRhbF9idWZmZXJfZnJlZShzdHJ1Y3QgaWRhbF9idWZmZXIgKmliKVxuIFx0bnJfY2h1bmtzID0gKFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgaWItXHUwMDNlcGFnZV9vcmRlcikgXHUwMDNlXHUwMDNlIElEQV9TSVpFX1NISUZUO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcHRyczsgaSArPSBucl9jaHVua3MpIHtcbiBcdFx0dmFkZHIgPSBkbWE2NF90b192aXJ0KGliLVx1MDAzZWRhdGFbaV0pO1xuLVx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBpYi1cdTAwM2VwYWdlX29yZGVyKTtcbitcdFx0a2ZyZWUodmFkZHIpO1xuIFx0fVxuIFx0a2ZyZWUoaWIpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXG5pbmRleCA5Njg5ZjcyMmM4NjNjLi5kOThmNjI5ZTg5Mjk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jXG5AQCAtOTMxLDEyICs5MzEsMTIgQEAgc3RhdGljIGludCBjdWJfYWxsb2Moc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3MpXG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENTU19OVU1fQ1VCX1BBR0VTOyBpKyspIHtcbi1cdFx0Y3NzLVx1MDAzZWN1YltpXSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdFx0Y3NzLVx1MDAzZWN1YltpXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRcdGlmICghY3NzLVx1MDAzZWN1YltpXSlcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENTU19OVU1fRUNVQl9QQUdFUzsgaSsrKSB7XG4tXHRcdGNzcy1cdTAwM2VlY3ViW2ldID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRcdGNzcy1cdTAwM2VlY3ViW2ldID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIFx0XHRpZiAoIWNzcy1cdTAwM2VlY3ViW2ldKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuQEAgLTk0OSwxMSArOTQ5LDExIEBAIHN0YXRpYyB2b2lkIGN1Yl9mcmVlKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzKVxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDU1NfTlVNX0NVQl9QQUdFUzsgaSsrKSB7XG4tXHRcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljc3MtXHUwMDNlY3ViW2ldKTtcbitcdFx0a2ZyZWUoY3NzLVx1MDAzZWN1YltpXSk7XG4gXHRcdGNzcy1cdTAwM2VjdWJbaV0gPSBOVUxMO1xuIFx0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ1NTX05VTV9FQ1VCX1BBR0VTOyBpKyspIHtcbi1cdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNzcy1cdTAwM2VlY3ViW2ldKTtcbitcdFx0a2ZyZWUoY3NzLVx1MDAzZWVjdWJbaV0pO1xuIFx0XHRjc3MtXHUwMDNlZWN1YltpXSA9IE5VTEw7XG4gXHR9XG4gfVxuQEAgLTExNDIsOCArMTE0Miw4IEBAIGludCBfX2luaXQgY2hzY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHNlaV9wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuLVx0Y2hzY19wYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuK1x0c2VpX3BhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuK1x0Y2hzY19wYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2VpX3BhZ2UgfHwgIWNoc2NfcGFnZSkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dF9lcnI7XG5AQCAtMTE1MywxNiArMTE1MywxNiBAQCBpbnQgX19pbml0IGNoc2NfaW5pdCh2b2lkKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHRyZXR1cm4gcmV0O1xuIG91dF9lcnI6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19wYWdlKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWlfcGFnZSk7XG4rXHRrZnJlZShjaHNjX3BhZ2UpO1xuK1x0a2ZyZWUoc2VpX3BhZ2UpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4gdm9pZCBfX2luaXQgY2hzY19pbml0X2NsZWFudXAodm9pZClcbiB7XG4gXHRjcndfdW5yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1NTKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljaHNjX3BhZ2UpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNlaV9wYWdlKTtcbitcdGtmcmVlKGNoc2NfcGFnZSk7XG4rXHRrZnJlZShzZWlfcGFnZSk7XG4gfVxuIFxuIGludCBfX2Noc2NfZW5hYmxlX2ZhY2lsaXR5KHN0cnVjdCBjaHNjX3NkYV9hcmVhICpzZGFfYXJlYSwgaW50IG9wZXJhdGlvbl9jb2RlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY1xuaW5kZXggYjZjYjhiYjhiY2M0Yi4uMjI1YWFhYzdkZDMwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY1xuKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jXG5AQCAtMTUsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pc2NkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbF9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2hzYy5oXHUwMDNlXG5AQCAtMjkyLDcgKzI5Myw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9zdGFydCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxuIFx0aWYgKCFjc3NfZ2VuZXJhbF9jaGFyYWN0ZXJpc3RpY3MuZHluaW8pXG4gXHRcdC8qIEl0IG1ha2VzIG5vIHNlbnNlIHRvIHRyeS4gKi9cbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0Y2hzY19hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0RNQSB8IEdGUF9LRVJORUwpO1xuK1x0Y2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcbiBcdGlmICghY2hzY19hcmVhKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHJlcXVlc3QgPSBremFsbG9jX29iaigqcmVxdWVzdCk7XG5AQCAtMzIxLDcgKzMyMiw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9zdGFydCh2b2lkIF9fdXNlciAqdXNlcl9hcmVhKVxuIFx0c25wcmludGYoZGJmLCBzaXplb2YoZGJmKSwgXCJyZXQ6JWRcIiwgcmV0KTtcbiBcdENIU0NfTE9HKDAsIGRiZik7XG4gXHRrZnJlZShyZXF1ZXN0KTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljaHNjX2FyZWEpO1xuK1x0a2ZyZWUoY2hzY19hcmVhKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTM0MCw3ICszNDEsNyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfb25fY2xvc2Vfc2V0KHZvaWQgX191c2VyICp1c2VyX2FyZWEpXG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbi1cdG9uX2Nsb3NlX2Noc2NfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9ETUEgfCBHRlBfS0VSTkVMKTtcbitcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIW9uX2Nsb3NlX2Noc2NfYXJlYSkge1xuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dF9mcmVlX3JlcXVlc3Q7XG5AQCAtMzUzLDcgKzM1NCw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9zZXQodm9pZCBfX3VzZXIgKnVzZXJfYXJlYSlcbiBcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBvdXRfZnJlZV9jaHNjOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XG4rXHRrZnJlZShvbl9jbG9zZV9jaHNjX2FyZWEpO1xuIFx0b25fY2xvc2VfY2hzY19hcmVhID0gTlVMTDtcbiBvdXRfZnJlZV9yZXF1ZXN0OlxuIFx0a2ZyZWUob25fY2xvc2VfcmVxdWVzdCk7XG5AQCAtMzc1LDcgKzM3Niw3IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9vbl9jbG9zZV9yZW1vdmUodm9pZClcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW9uX2Nsb3NlX2Noc2NfYXJlYSk7XG4rXHRrZnJlZShvbl9jbG9zZV9jaHNjX2FyZWEpO1xuIFx0b25fY2xvc2VfY2hzY19hcmVhID0gTlVMTDtcbiBcdGtmcmVlKG9uX2Nsb3NlX3JlcXVlc3QpO1xuIFx0b25fY2xvc2VfcmVxdWVzdCA9IE5VTEw7XG5AQCAtMzg5LDM5ICszOTAsMjkgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX29uX2Nsb3NlX3JlbW92ZSh2b2lkKVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9zdGFydF9zeW5jKHZvaWQgX191c2VyICp1c2VyX2FyZWEpXG4ge1xuLVx0c3RydWN0IGNoc2Nfc3luY19hcmVhICpjaHNjX2FyZWE7XG4tXHRpbnQgcmV0LCBjY29kZTtcbitcdHN0cnVjdCBjaHNjX3N5bmNfYXJlYSAqY2hzY19hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IGNjb2RlO1xuIFxuLVx0Y2hzY19hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuK1x0Y2hzY19hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghY2hzY19hcmVhKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdGlmIChjb3B5X2Zyb21fdXNlcihjaHNjX2FyZWEsIHVzZXJfYXJlYSwgUEFHRV9TSVpFKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNoc2NfYXJlYS1cdTAwM2VoZWFkZXIuY29kZSBcdTAwMjYgMHg0MDAwKSB7XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4rXHRpZiAoY29weV9mcm9tX3VzZXIoY2hzY19hcmVhLCB1c2VyX2FyZWEsIFBBR0VfU0laRSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0aWYgKGNoc2NfYXJlYS1cdTAwM2VoZWFkZXIuY29kZSBcdTAwMjYgMHg0MDAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGNoc2NfbG9nX2NvbW1hbmQoY2hzY19hcmVhKTtcbiBcdGNjb2RlID0gY2hzYyhjaHNjX2FyZWEpO1xuLVx0aWYgKGNjb2RlICE9IDApIHtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmIChjY29kZSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmVhLCBjaHNjX2FyZWEsIFBBR0VfU0laRSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2hzY19hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2NoYW5uZWxfcGF0aCh2b2lkIF9fdXNlciAqdXNlcl9jZClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19jaHBfY2QgKmNkO1xuLVx0aW50IHJldCwgY2NvZGU7XG4rXHRzdHJ1Y3QgY2hzY19jaHBfY2QgKmNkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IGNjb2RlO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XG4gXHRcdHUzMiA6IDI7XG5AQCAtNDM2LDIwICs0MjcsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY2hhbm5lbF9wYXRoKHZvaWQgX191c2VyICp1c2VyX2NkKVxuIFx0XHR1MzIgOiAzMjtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xuIFx0XHR1OCBkYXRhW1BBR0VfU0laRSAtIDIwXTtcbi1cdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzY3BjZF9hcmVhO1xuK1x0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjcGNkX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gXG4tXHRzY3BjZF9hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuK1x0c2NwY2RfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNjcGNkX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Y2QgPSBremFsbG9jX29iaigqY2QpO1xuLVx0aWYgKCFjZCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGNkLCB1c2VyX2NkLCBzaXplb2YoKmNkKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmICghY2QpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKGNkLCB1c2VyX2NkLCBzaXplb2YoKmNkKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NwY2RfYXJlYS1cdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAxMDtcbiBcdHNjcGNkX2FyZWEtXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDI4O1xuIFx0c2NwY2RfYXJlYS1cdTAwM2VtID0gY2QtXHUwMDNlbTtcbkBAIC00NTksMzEgKzQ0NiwyMyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19jaGFubmVsX3BhdGgodm9pZCBfX3VzZXIgKnVzZXJfY2QpXG4gXHRzY3BjZF9hcmVhLVx1MDAzZWxhc3RfY2hwaWQgPSBjZC1cdTAwM2VjaHBpZC5pZDtcbiBcbiBcdGNjb2RlID0gY2hzYyhzY3BjZF9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4rXHRpZiAoY2NvZGUgIT0gMClcbitcdFx0cmV0dXJuIC1FSU87XG4gXHRpZiAoc2NwY2RfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcInNjcGNkOiByZXNwb25zZSBjb2RlPSV4XFxuXCIsXG4gXHRcdFx0IHNjcGNkX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSk7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFx0bWVtY3B5KFx1MDAyNmNkLVx1MDAzZWNwY2IsIFx1MDAyNnNjcGNkX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjcGNkX2FyZWEtXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jZCwgY2QsIHNpemVvZigqY2QpKSlcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gMDtcbi1vdXRfZnJlZTpcbi1cdGtmcmVlKGNkKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3BjZF9hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2N1KHZvaWQgX191c2VyICp1c2VyX2NkKVxuIHtcbi1cdHN0cnVjdCBjaHNjX2N1X2NkICpjZDtcbi1cdGludCByZXQsIGNjb2RlO1xuK1x0c3RydWN0IGNoc2NfY3VfY2QgKmNkIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IGNjb2RlO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XG4gXHRcdHUzMiA6IDI7XG5AQCAtNDk4LDIwICs0NzcsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2luZm9fY3Uodm9pZCBfX3VzZXIgKnVzZXJfY2QpXG4gXHRcdHUzMiA6IDMyO1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVzcG9uc2U7XG4gXHRcdHU4IGRhdGFbUEFHRV9TSVpFIC0gMjBdO1xuLVx0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjdWNkX2FyZWE7XG4rXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2N1Y2RfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcbi1cdHNjdWNkX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4rXHRzY3VjZF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2N1Y2RfYXJlYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRjZCA9IGt6YWxsb2Nfb2JqKCpjZCk7XG4tXHRpZiAoIWNkKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuK1x0aWYgKCFjZClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRpZiAoY29weV9mcm9tX3VzZXIoY2QsIHVzZXJfY2QsIHNpemVvZigqY2QpKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRzY3VjZF9hcmVhLVx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDEwO1xuIFx0c2N1Y2RfYXJlYS1cdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMjY7XG4gXHRzY3VjZF9hcmVhLVx1MDAzZW0gPSBjZC1cdTAwM2VtO1xuQEAgLTUyMSwzMSArNDk2LDIzIEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX2N1KHZvaWQgX191c2VyICp1c2VyX2NkKVxuIFx0c2N1Y2RfYXJlYS1cdTAwM2VsYXN0X2N1biA9IGNkLVx1MDAzZWN1bjtcbiBcbiBcdGNjb2RlID0gY2hzYyhzY3VjZF9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4rXHRpZiAoY2NvZGUgIT0gMClcbitcdFx0cmV0dXJuIC1FSU87XG4gXHRpZiAoc2N1Y2RfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcInNjdWNkOiByZXNwb25zZSBjb2RlPSV4XFxuXCIsXG4gXHRcdFx0IHNjdWNkX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSk7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFx0bWVtY3B5KFx1MDAyNmNkLVx1MDAzZWN1Y2IsIFx1MDAyNnNjdWNkX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjdWNkX2FyZWEtXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9jZCwgY2QsIHNpemVvZigqY2QpKSlcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gMDtcbi1vdXRfZnJlZTpcbi1cdGtmcmVlKGNkKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3VjZF9hcmVhKTtcbi1cdHJldHVybiByZXQ7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX3NjaF9jdSh2b2lkIF9fdXNlciAqdXNlcl9jdWQpXG4ge1xuLVx0c3RydWN0IGNoc2Nfc2NoX2N1ZCAqY3VkO1xuLVx0aW50IHJldCwgY2NvZGU7XG4rXHRzdHJ1Y3QgY2hzY19zY2hfY3VkICpjdWQgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4rXHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIDogMjtcbkBAIC01NjEsMjAgKzUyOCwxNiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfaW5mb19zY2hfY3Uodm9pZCBfX3VzZXIgKnVzZXJfY3VkKVxuIFx0XHR1MzIgOiAzMjtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlO1xuIFx0XHR1OCBkYXRhW1BBR0VfU0laRSAtIDIwXTtcbi1cdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzc2N1ZF9hcmVhO1xuK1x0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNzY3VkX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gXG4tXHRzc2N1ZF9hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuK1x0c3NjdWRfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNzY3VkX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Y3VkID0ga3phbGxvY19vYmooKmN1ZCk7XG4tXHRpZiAoIWN1ZCkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGN1ZCwgdXNlcl9jdWQsIHNpemVvZigqY3VkKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmICghY3VkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmIChjb3B5X2Zyb21fdXNlcihjdWQsIHVzZXJfY3VkLCBzaXplb2YoKmN1ZCkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHNzY3VkX2FyZWEtXHUwMDNlcmVxdWVzdC5sZW5ndGggPSAweDAwMTA7XG4gXHRzc2N1ZF9hcmVhLVx1MDAzZXJlcXVlc3QuY29kZSA9IDB4MDAwNjtcbiBcdHNzY3VkX2FyZWEtXHUwMDNlbSA9IGN1ZC1cdTAwM2VzY2hpZC5tO1xuQEAgLTU4NSwzMSArNTQ4LDIzIEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9pbmZvX3NjaF9jdSh2b2lkIF9fdXNlciAqdXNlcl9jdWQpXG4gXHRzc2N1ZF9hcmVhLVx1MDAzZWxhc3Rfc2NoID0gY3VkLVx1MDAzZXNjaGlkLnNjaF9ubztcbiBcbiBcdGNjb2RlID0gY2hzYyhzc2N1ZF9hcmVhKTtcbi1cdGlmIChjY29kZSAhPSAwKSB7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4rXHRpZiAoY2NvZGUgIT0gMClcbitcdFx0cmV0dXJuIC1FSU87XG4gXHRpZiAoc3NjdWRfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcInNzY3VkOiByZXNwb25zZSBjb2RlPSV4XFxuXCIsXG4gXHRcdFx0IHNzY3VkX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSk7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuIFx0bWVtY3B5KFx1MDAyNmN1ZC1cdTAwM2VzY3ViLCBcdTAwMjZzc2N1ZF9hcmVhLVx1MDAzZXJlc3BvbnNlLCBzc2N1ZF9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY3VkLCBjdWQsIHNpemVvZigqY3VkKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjdWQpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNzY3VkX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcbiB7XG4tXHRzdHJ1Y3QgY2hzY19jb25mX2luZm8gKmNpO1xuLVx0aW50IHJldCwgY2NvZGU7XG4rXHRzdHJ1Y3QgY2hzY19jb25mX2luZm8gKmNpIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IGNjb2RlO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XG4gXHRcdHUzMiA6IDI7XG5AQCAtNjIzLDIwICs1NzgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfaW5mbyh2b2lkIF9fdXNlciAqdXNlcl9jaSlcbiBcdFx0dTY0IDogNjQ7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAyMF07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NpX2FyZWE7XG4rXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NpX2FyZWEgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gXG4tXHRzY2lfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdHNjaV9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2NpX2FyZWEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0Y2kgPSBremFsbG9jX29iaigqY2kpO1xuLVx0aWYgKCFjaSkge1xuLVx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuLVx0aWYgKGNvcHlfZnJvbV91c2VyKGNpLCB1c2VyX2NpLCBzaXplb2YoKmNpKSkpIHtcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmICghY2kpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKGNpLCB1c2VyX2NpLCBzaXplb2YoKmNpKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NpX2FyZWEtXHUwMDNlcmVxdWVzdC5sZW5ndGggPSAweDAwMTA7XG4gXHRzY2lfYXJlYS1cdTAwM2VyZXF1ZXN0LmNvZGUgPSAweDAwMTI7XG4gXHRzY2lfYXJlYS1cdTAwM2VtID0gY2ktXHUwMDNlaWQubTtcbkBAIC02NDUsMzEgKzU5NiwyMyBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9pbmZvKHZvaWQgX191c2VyICp1c2VyX2NpKVxuIFx0c2NpX2FyZWEtXHUwMDNlc3NpZCA9IGNpLVx1MDAzZWlkLnNzaWQ7XG4gXG4gXHRjY29kZSA9IGNoc2Moc2NpX2FyZWEpO1xuLVx0aWYgKGNjb2RlICE9IDApIHtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmIChjY29kZSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChzY2lfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlICE9IDB4MDAwMSkge1xuLVx0XHRyZXQgPSAtRUlPO1xuIFx0XHRDSFNDX01TRygwLCBcInNjaTogcmVzcG9uc2UgY29kZT0leFxcblwiLFxuIFx0XHRcdCBzY2lfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlKTtcbi1cdFx0Z290byBvdXRfZnJlZTtcbitcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXHRtZW1jcHkoXHUwMDI2Y2ktXHUwMDNlc2NpZCwgXHUwMDI2c2NpX2FyZWEtXHUwMDNlcmVzcG9uc2UsIHNjaV9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY2ksIGNpLCBzaXplb2YoKmNpKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjaSk7XG4tXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2NpX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19jb21wX2xpc3QgKmNjbDtcbi1cdGludCByZXQsIGNjb2RlO1xuK1x0c3RydWN0IGNoc2NfY29tcF9saXN0ICpjY2wgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4rXHRpbnQgY2NvZGU7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDtcbiBcdFx0dTMyIGN0eXBlIDogODtcbkBAIC02ODEsNyArNjI0LDcgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcbiBcdFx0dTY0IDogNjQ7XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAzNl07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2NjbF9hcmVhO1xuK1x0fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnNjY2xfYXJlYSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiBcdHN0cnVjdCB7XG4gXHRcdHUzMiBtIDogMTtcbiBcdFx0dTMyIDogMzE7XG5AQCAtNjk2LDE4ICs2MzksMTQgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2NvbmZfY29tcF9saXN0KHZvaWQgX191c2VyICp1c2VyX2NjbClcbiBcdFx0dTMyIHJlcztcbiBcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpjc3NpZHNfcGFybTtcbiBcbi1cdHNjY2xfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdHNjY2xfYXJlYSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4gXHRpZiAoIXNjY2xfYXJlYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRjY2wgPSBremFsbG9jX29iaigqY2NsKTtcbi1cdGlmICghY2NsKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2NsLCB1c2VyX2NjbCwgc2l6ZW9mKCpjY2wpKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuK1x0aWYgKCFjY2wpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKGNjbCwgdXNlcl9jY2wsIHNpemVvZigqY2NsKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2NjbF9hcmVhLVx1MDAzZXJlcXVlc3QubGVuZ3RoID0gMHgwMDIwO1xuIFx0c2NjbF9hcmVhLVx1MDAzZXJlcXVlc3QuY29kZSA9IDB4MDAzMDtcbiBcdHNjY2xfYXJlYS1cdTAwM2VmbXQgPSBjY2wtXHUwMDNlcmVxLmZtdDtcbkBAIC03MjgsNjEgKzY2Nyw0NiBAQCBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY29uZl9jb21wX2xpc3Qodm9pZCBfX3VzZXIgKnVzZXJfY2NsKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcdGNjb2RlID0gY2hzYyhzY2NsX2FyZWEpO1xuLVx0aWYgKGNjb2RlICE9IDApIHtcbi1cdFx0cmV0ID0gLUVJTztcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbitcdGlmIChjY29kZSAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTztcbiBcdGlmIChzY2NsX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiBcdFx0Q0hTQ19NU0coMCwgXCJzY2NsOiByZXNwb25zZSBjb2RlPSV4XFxuXCIsXG4gXHRcdFx0IHNjY2xfYXJlYS1cdTAwM2VyZXNwb25zZS5jb2RlKTtcbi1cdFx0Z290byBvdXRfZnJlZTtcbitcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gXHRtZW1jcHkoXHUwMDI2Y2NsLVx1MDAzZXNjY2wsIFx1MDAyNnNjY2xfYXJlYS1cdTAwM2VyZXNwb25zZSwgc2NjbF9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY2NsLCBjY2wsIHNpemVvZigqY2NsKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRlbHNlXG4tXHRcdHJldCA9IDA7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjY2wpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNjY2xfYXJlYSk7XG4tXHRyZXR1cm4gcmV0O1xuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGNoc2NfaW9jdGxfY2hwZCh2b2lkIF9fdXNlciAqdXNlcl9jaHBkKVxuIHtcbi1cdHN0cnVjdCBjaHNjX3NjcGQgKnNjcGRfYXJlYTtcbi1cdHN0cnVjdCBjaHNjX2NwZF9pbmZvICpjaHBkO1xuK1x0c3RydWN0IGNoc2Nfc2NwZCAqc2NwZF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0c3RydWN0IGNoc2NfY3BkX2luZm8gKmNocGQgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gXHRpbnQgcmV0O1xuIFxuIFx0Y2hwZCA9IGt6YWxsb2Nfb2JqKCpjaHBkKTtcbi1cdHNjcGRfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbi1cdGlmICghc2NwZF9hcmVhIHx8ICFjaHBkKSB7XG4tXHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4tXHRpZiAoY29weV9mcm9tX3VzZXIoY2hwZCwgdXNlcl9jaHBkLCBzaXplb2YoKmNocGQpKSkge1xuLVx0XHRyZXQgPSAtRUZBVUxUO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuK1x0c2NwZF9hcmVhID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdGlmICghc2NwZF9hcmVhIHx8ICFjaHBkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdGlmIChjb3B5X2Zyb21fdXNlcihjaHBkLCB1c2VyX2NocGQsIHNpemVvZigqY2hwZCkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHJldCA9IGNoc2NfZGV0ZXJtaW5lX2NoYW5uZWxfcGF0aF9kZXNjKGNocGQtXHUwMDNlY2hwaWQsIGNocGQtXHUwMDNlZm10LFxuIFx0XHRcdFx0XHQgICAgICAgY2hwZC1cdTAwM2VyZm10LCBjaHBkLVx1MDAzZWMsIGNocGQtXHUwMDNlbSxcbiBcdFx0XHRcdFx0ICAgICAgIHNjcGRfYXJlYSk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFx0bWVtY3B5KFx1MDAyNmNocGQtXHUwMDNlY2hwZGIsIFx1MDAyNnNjcGRfYXJlYS1cdTAwM2VyZXNwb25zZSwgc2NwZF9hcmVhLVx1MDAzZXJlc3BvbnNlLmxlbmd0aCk7XG4gXHRpZiAoY29weV90b191c2VyKHVzZXJfY2hwZCwgY2hwZCwgc2l6ZW9mKCpjaHBkKSkpXG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tb3V0X2ZyZWU6XG4tXHRrZnJlZShjaHBkKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY3BkX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjaHNjX2lvY3RsX2RjYWwodm9pZCBfX3VzZXIgKnVzZXJfZGNhbClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19kY2FsICpkY2FsO1xuLVx0aW50IHJldCwgY2NvZGU7XG4rXHRzdHJ1Y3QgY2hzY19kY2FsICpkY2FsIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IGNjb2RlO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7XG4gXHRcdHUzMiBhdHlwZSA6IDg7XG5AQCAtNzk0LDIwICs3MTgsMTYgQEAgc3RhdGljIGludCBjaHNjX2lvY3RsX2RjYWwodm9pZCBfX3VzZXIgKnVzZXJfZGNhbClcbiBcdFx0dTMyIHJlczFbMl07XG4gXHRcdHN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTtcbiBcdFx0dTggZGF0YVtQQUdFX1NJWkUgLSAzNl07XG4tXHR9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2RjYWxfYXJlYTtcbitcdH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpzZGNhbF9hcmVhIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIFxuLVx0c2RjYWxfYXJlYSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdHNkY2FsX2FyZWEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuIFx0aWYgKCFzZGNhbF9hcmVhKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGRjYWwgPSBremFsbG9jX29iaigqZGNhbCk7XG4tXHRpZiAoIWRjYWwpIHtcbi1cdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXRfZnJlZTtcbi1cdH1cbi1cdGlmIChjb3B5X2Zyb21fdXNlcihkY2FsLCB1c2VyX2RjYWwsIHNpemVvZigqZGNhbCkpKSB7XG4tXHRcdHJldCA9IC1FRkFVTFQ7XG4tXHRcdGdvdG8gb3V0X2ZyZWU7XG4tXHR9XG4rXHRpZiAoIWRjYWwpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKGRjYWwsIHVzZXJfZGNhbCwgc2l6ZW9mKCpkY2FsKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0c2RjYWxfYXJlYS1cdTAwM2VyZXF1ZXN0Lmxlbmd0aCA9IDB4MDAyMDtcbiBcdHNkY2FsX2FyZWEtXHUwMDNlcmVxdWVzdC5jb2RlID0gMHgwMDM0O1xuIFx0c2RjYWxfYXJlYS1cdTAwM2VhdHlwZSA9IGRjYWwtXHUwMDNlcmVxLmF0eXBlO1xuQEAgLTgxNiwyNiArNzM2LDE4IEBAIHN0YXRpYyBpbnQgY2hzY19pb2N0bF9kY2FsKHZvaWQgX191c2VyICp1c2VyX2RjYWwpXG4gXHQgICAgICAgc2l6ZW9mKHNkY2FsX2FyZWEtXHUwMDNlbGlzdF9wYXJtKSk7XG4gXG4gXHRjY29kZSA9IGNoc2Moc2RjYWxfYXJlYSk7XG4tXHRpZiAoY2NvZGUgIT0gMCkge1xuLVx0XHRyZXQgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuLVx0fVxuK1x0aWYgKGNjb2RlICE9IDApXG4rXHRcdHJldHVybiAtRUlPO1xuIFx0aWYgKHNkY2FsX2FyZWEtXHUwMDNlcmVzcG9uc2UuY29kZSAhPSAweDAwMDEpIHtcbi1cdFx0cmV0ID0gLUVJTztcbiBcdFx0Q0hTQ19NU0coMCwgXCJzZGNhbDogcmVzcG9uc2UgY29kZT0leFxcblwiLFxuIFx0XHRcdCBzZGNhbF9hcmVhLVx1MDAzZXJlc3BvbnNlLmNvZGUpO1xuLVx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiBcdG1lbWNweShcdTAwMjZkY2FsLVx1MDAzZXNkY2FsLCBcdTAwMjZzZGNhbF9hcmVhLVx1MDAzZXJlc3BvbnNlLFxuIFx0ICAgICAgIHNkY2FsX2FyZWEtXHUwMDNlcmVzcG9uc2UubGVuZ3RoKTtcbiBcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9kY2FsLCBkY2FsLCBzaXplb2YoKmRjYWwpKSlcbi1cdFx0cmV0ID0gLUVGQVVMVDtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gMDtcbi1vdXRfZnJlZTpcbi1cdGtmcmVlKGRjYWwpO1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNkY2FsX2FyZWEpO1xuLVx0cmV0dXJuIHJldDtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGxvbmcgY2hzY19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcbkBAIC05MDQsNyArODE2LDcgQEAgc3RhdGljIGludCBjaHNjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHR9XG4gXHRzbnByaW50ZihkYmYsIHNpemVvZihkYmYpLCBcInJlbHJldDolZFwiLCByZXQpO1xuIFx0Q0hTQ19MT0coMCwgZGJmKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylvbl9jbG9zZV9jaHNjX2FyZWEpO1xuK1x0a2ZyZWUob25fY2xvc2VfY2hzY19hcmVhKTtcbiBcdG9uX2Nsb3NlX2Noc2NfYXJlYSA9IE5VTEw7XG4gXHRrZnJlZShvbl9jbG9zZV9yZXF1ZXN0KTtcbiBcdG9uX2Nsb3NlX3JlcXVlc3QgPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY21mLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2NtZi5jXG5pbmRleCA5MmFiM2Q1NDZmZTQ3Li42YzQ2YjBkMGIzZGE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jbWYuY1xuKysrIGIvZHJpdmVycy9zMzkwL2Npby9jbWYuY1xuQEAgLTUwMSwxMiArNTAxLDEyIEBAIHN0YXRpYyBpbnQgYWxsb2NfY21iKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxuIFx0XHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmNtYl9hcmVhLmxpc3QpKTtcbiBcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y21iX2FyZWEubG9jayk7XG4tXHRcdG1lbSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBnZXRfb3JkZXIoc2l6ZSkpO1xuK1x0XHRtZW0gPSBrbWFsbG9jKFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgZ2V0X29yZGVyKHNpemUpLCBHRlBfS0VSTkVMKTtcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNmNtYl9hcmVhLmxvY2spO1xuIFxuIFx0XHRpZiAoY21iX2FyZWEubWVtKSB7XG4gXHRcdFx0Lyogb2ssIGFub3RoZXIgdGhyZWFkIHdhcyBmYXN0ZXIgKi9cbi1cdFx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW1lbSwgZ2V0X29yZGVyKHNpemUpKTtcbitcdFx0XHRrZnJlZShtZW0pO1xuIFx0XHR9IGVsc2UgaWYgKCFtZW0pIHtcbiBcdFx0XHQvKiBubyBsdWNrICovXG4gXHRcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC01NDcsMTAgKzU0Nyw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfY21iKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxuIFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwcml2LVx1MDAzZWNtYl9saXN0KTtcbiBcbiBcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmNtYl9hcmVhLmxpc3QpKSB7XG4tXHRcdHNzaXplX3Qgc2l6ZTtcbi1cdFx0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgY21iKSAqIGNtYl9hcmVhLm51bV9jaGFubmVscztcbiBcdFx0Y21mX2FjdGl2YXRlKE5VTEwsIENNRl9PRkYpO1xuLVx0XHRmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWNtYl9hcmVhLm1lbSwgZ2V0X29yZGVyKHNpemUpKTtcbitcdFx0a2ZyZWUoY21iX2FyZWEubWVtKTtcbiBcdFx0Y21iX2FyZWEubWVtID0gTlVMTDtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycShjZGV2LVx1MDAzZWNjd2xvY2spO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmhcbmluZGV4IDRiZDRjMDBjOWMwY2EuLmRmZjVmNTNhODc5NWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaFxuKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmhcbkBAIC0yNDQsNyArMjQ0LDcgQEAgc3RydWN0IHFkaW9faXJxIHtcbiBcdGludCBwZXJmX3N0YXRfZW5hYmxlZDtcbiBcbiBcdHN0cnVjdCBxZHIgKnFkcjtcbi1cdHVuc2lnbmVkIGxvbmcgY2hzY19wYWdlO1xuK1x0dm9pZCAqY2hzY19wYWdlO1xuIFxuIFx0c3RydWN0IHFkaW9fcSAqaW5wdXRfcXNbUURJT19NQVhfUVVFVUVTX1BFUl9JUlFdO1xuIFx0c3RydWN0IHFkaW9fcSAqb3V0cHV0X3FzW1FESU9fTUFYX1FVRVVFU19QRVJfSVJRXTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uY1xuaW5kZXggYzFlMDlmYTM0ZTc3NC4uYmViYzEyNTBlYmViZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNcbkBAIC0xNyw2ICsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZGVidWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9xZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLmhcdTAwM2VcbkBAIC05MzMsMTAgKzkzNCwxMCBAQCBpbnQgcWRpb19mcmVlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmlycV9wdHItXHUwMDNlc2V0dXBfbXV0ZXgpO1xuIFxuIFx0cWRpb19mcmVlX3F1ZXVlcyhpcnFfcHRyKTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0ci1cdTAwM2VxZHIpO1xuLVx0ZnJlZV9wYWdlKGlycV9wdHItXHUwMDNlY2hzY19wYWdlKTtcbitcdGtmcmVlKGlycV9wdHItXHUwMDNlcWRyKTtcbitcdGtmcmVlKGlycV9wdHItXHUwMDNlY2hzY19wYWdlKTtcbiBcdGtmcmVlKGlycV9wdHItXHUwMDNlY2N3KTtcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXJxX3B0cik7XG4rXHRrZnJlZShpcnFfcHRyKTtcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxZGlvX2ZyZWUpO1xuQEAgLTk2MSw3ICs5NjIsNyBAQCBpbnQgcWRpb19hbGxvY2F0ZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IG5vX2lucHV0X3FzLFxuIFx0ICAgIG5vX291dHB1dF9xcyBcdTAwM2UgUURJT19NQVhfUVVFVUVTX1BFUl9JUlEpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aXJxX3B0ciA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcbitcdGlycV9wdHIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIWlycV9wdHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTk4NiwxMiArOTg3LDEyIEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsXG4gXHQgKiBxZGlvX2VzdGFibGlzaC4gSW4gY2FzZSBvZiBsb3cgbWVtb3J5IGFuZCBzd2FwIG9uIGEgemZjcCBkaXNrXG4gXHQgKiB3ZSBtYXkgbm90IGJlIGFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IG90aGVyd2lzZS5cbiBcdCAqL1xuLVx0aXJxX3B0ci1cdTAwM2VjaHNjX3BhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghaXJxX3B0ci1cdTAwM2VjaHNjX3BhZ2UpXG4gXHRcdGdvdG8gZXJyX2Noc2M7XG4gXG4gXHQvKiBxZHIgaXMgdXNlZCBpbiBjY3cxLmNkYSB3aGljaCBpcyB1MzIgKi9cbi1cdGlycV9wdHItXHUwMDNlcWRyID0gKHN0cnVjdCBxZHIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdGlycV9wdHItXHUwMDNlcWRyID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghaXJxX3B0ci1cdTAwM2VxZHIpXG4gXHRcdGdvdG8gZXJyX3FkcjtcbiBcbkBAIC0xMDA0LDE0ICsxMDA1LDE0IEBAIGludCBxZGlvX2FsbG9jYXRlKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgbm9faW5wdXRfcXMsXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfcXVldWVzOlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyLVx1MDAzZXFkcik7XG4rXHRrZnJlZShpcnFfcHRyLVx1MDAzZXFkcik7XG4gZXJyX3Fkcjpcbi1cdGZyZWVfcGFnZShpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSk7XG4rXHRrZnJlZShpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZSk7XG4gZXJyX2Noc2M6XG4gZXJyX2RiZjpcbiBcdGtmcmVlKGlycV9wdHItXHUwMDNlY2N3KTtcbiBlcnJfY2N3OlxuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpcnFfcHRyKTtcbitcdGtmcmVlKGlycV9wdHIpO1xuIFx0cmV0dXJuIHJjO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxZGlvX2FsbG9jYXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jXG5pbmRleCBlYTA5YWFkYWFlNGVjLi5jMDIxNWE3ZDI5YTgxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jXG5AQCAtMzUsNyArMzUsNyBAQCB2b2lkIHFkaW9fZnJlZV9idWZmZXJzKHN0cnVjdCBxZGlvX2J1ZmZlciAqKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KVxuIFx0aW50IHBvcztcbiBcbiBcdGZvciAocG9zID0gMDsgcG9zIFx1MDAzYyBjb3VudDsgcG9zICs9IFFCVUZGX1BFUl9QQUdFKVxuLVx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zltwb3NdKTtcbitcdFx0a2ZyZWUoYnVmW3Bvc10pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChxZGlvX2ZyZWVfYnVmZmVycyk7XG4gXG5AQCAtNDksNyArNDksNyBAQCBpbnQgcWRpb19hbGxvY19idWZmZXJzKHN0cnVjdCBxZGlvX2J1ZmZlciAqKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KVxuIFx0aW50IHBvcztcbiBcbiBcdGZvciAocG9zID0gMDsgcG9zIFx1MDAzYyBjb3VudDsgcG9zICs9IFFCVUZGX1BFUl9QQUdFKSB7XG4tXHRcdGJ1Zltwb3NdID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpO1xuK1x0XHRidWZbcG9zXSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFidWZbcG9zXSkge1xuIFx0XHRcdHFkaW9fZnJlZV9idWZmZXJzKGJ1ZiwgY291bnQpO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTgzLDcgKzgzLDcgQEAgc3RhdGljIHZvaWQgX19xZGlvX2ZyZWVfcXVldWVzKHN0cnVjdCBxZGlvX3EgKipxdWV1ZXMsIHVuc2lnbmVkIGludCBjb3VudClcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpKyspIHtcbiBcdFx0cSA9IHF1ZXVlc1tpXTtcbi1cdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXEtXHUwMDNlc2xfcGFnZSk7XG4rXHRcdGtmcmVlKHEtXHUwMDNlc2xfcGFnZSk7XG4gXHRcdGttZW1fY2FjaGVfZnJlZShxZGlvX3FfY2FjaGUsIHEpO1xuIFx0fVxuIH1cbkBAIC0xMDksNyArMTA5LDcgQEAgc3RhdGljIGludCBfX3FkaW9fYWxsb2NhdGVfcXMoc3RydWN0IHFkaW9fcSAqKmlycV9wdHJfcXMsIGludCBucl9xdWV1ZXMpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcbi1cdFx0cS1cdTAwM2VzbF9wYWdlID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXHRcdHEtXHUwMDNlc2xfcGFnZSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFxLVx1MDAzZXNsX3BhZ2UpIHtcbiBcdFx0XHRrbWVtX2NhY2hlX2ZyZWUocWRpb19xX2NhY2hlLCBxKTtcbiBcdFx0XHRfX3FkaW9fZnJlZV9xdWV1ZXMoaXJxX3B0cl9xcywgaSk7XG5AQCAtMjQ5LDExICsyNDksMTEgQEAgaW50IHFkaW9fc2V0dXBfZ2V0X3NzcWQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLFxuIFxuIFx0REJGX0VWRU5UKFwiZ2V0c3NxZDolNHhcIiwgc2NoaWQtXHUwMDNlc2NoX25vKTtcbiBcdGlmICghaXJxX3B0cikge1xuLVx0XHRzc3FkID0gKHN0cnVjdCBjaHNjX3NzcWRfYXJlYSAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTtcbitcdFx0c3NxZCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFzc3FkKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fSBlbHNlIHtcbi1cdFx0c3NxZCA9IChzdHJ1Y3QgY2hzY19zc3FkX2FyZWEgKilpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZTtcbitcdFx0c3NxZCA9IGlycV9wdHItXHUwMDNlY2hzY19wYWdlO1xuIFx0fVxuIFxuIFx0cmMgPSBjaHNjX3NzcWQoKnNjaGlkLCBzc3FkKTtcbkBAIC0yNzAsNyArMjcwLDcgQEAgaW50IHFkaW9fc2V0dXBfZ2V0X3NzcWQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLFxuIFxuIG91dDpcbiBcdGlmICghaXJxX3B0cilcbi1cdFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNzcWQpO1xuK1x0XHRrZnJlZShzc3FkKTtcbiBcbiBcdHJldHVybiByYztcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmNcbmluZGV4IGUxNjdhYTc1YzNkZmYuLmEyZmY1MTg4NzUzN2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jXG4rKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jXG5AQCAtMTM2LDcgKzEzNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgYWlycV9zdHJ1Y3QgdGlxZGlvX2FpcnEgPSB7XG4gXG4gc3RhdGljIGludCBzZXRfc3ViY2hhbm5lbF9pbmQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLCBpbnQgcmVzZXQpXG4ge1xuLVx0c3RydWN0IGNoc2Nfc2Nzc2NfYXJlYSAqc2Nzc2MgPSAodm9pZCAqKWlycV9wdHItXHUwMDNlY2hzY19wYWdlO1xuK1x0c3RydWN0IGNoc2Nfc2Nzc2NfYXJlYSAqc2Nzc2MgPSBpcnFfcHRyLVx1MDAzZWNoc2NfcGFnZTtcbiBcdGRtYTY0X3Qgc3VtbWFyeV9pbmRpY2F0b3JfYWRkciwgc3ViY2hhbm5lbF9pbmRpY2F0b3JfYWRkcjtcbiBcdGludCByYztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3NjbS5jIGIvZHJpdmVycy9zMzkwL2Npby9zY20uY1xuaW5kZXggMTcxMjEyYTZkMmQ5Yy4uYjc5ZmUwMjNhYjhkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vc2NtLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jaW8vc2NtLmNcbkBAIC0xMyw2ICsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZWFkbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJjaHNjLmhcIlxuIFxuQEAgLTIyNCwxMiArMjI1LDEyIEBAIHN0YXRpYyBpbnQgc2NtX2FkZChzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm8sIHNpemVfdCBudW0pXG4gXG4gaW50IHNjbV91cGRhdGVfaW5mb3JtYXRpb24odm9pZClcbiB7XG4tXHRzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm87XG4rXHRzdHJ1Y3QgY2hzY19zY21faW5mbyAqc2NtX2luZm8gX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gXHR1NjQgdG9rZW4gPSAwO1xuIFx0c2l6ZV90IG51bTtcbiBcdGludCByZXQ7XG4gXG4tXHRzY21faW5mbyA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbitcdHNjbV9pbmZvID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTtcbiBcdGlmICghc2NtX2luZm8pXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTI1MCw4ICsyNTEsNiBAQCBpbnQgc2NtX3VwZGF0ZV9pbmZvcm1hdGlvbih2b2lkKVxuIFx0XHR0b2tlbiA9IHNjbV9pbmZvLVx1MDAzZXJlc3RvaztcbiBcdH0gd2hpbGUgKHRva2VuKTtcbiBcbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY21faW5mbyk7XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjM1LjY2Nzg2MDQ4MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMTQ2NDExOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgQU1ENjQgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaWYgaXQgaGFzIGFueSByZWxldmFuY2UgdG8gdGhlIGBhbWQ2NGAgYXJjaGl0ZWN0dXJlIEknbSB3b3JraW5nIHdpdGguIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGNsZWFybHkgc3BlY2lmaWVkIGFzIGBhbWQ2NGAsIHNvIHRoYXQncyB0aGUgZm9jdXMuIE5vdywgbGV0J3MgbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMuXG5cbkhtbSwgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgZm9jdXNlZCBvbiB0aGUgYHMzOTBgIGFyY2hpdGVjdHVyZSwganVkZ2luZyBieSB0aGUgZmlsZSBwYXRocy4gSSBzZWUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oYCB3aGljaCBpcyBhbiBgczM5MGAgc3BlY2lmaWMgaGVhZGVyLCBhbmQgYSB3aG9sZSBzbGV3IG9mIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvczM5MC9jaW8vYCBkaXJlY3RvcnkuIFRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byB0aGUgYHMzOTBgIENJTyBkcml2ZXIuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgYW55IG9mIHRoaXMgYHMzOTBgIGNvZGUgaXMgZXZlbiBjb21waWxlZCBvciByZWFjaGFibGUgb24gYW4gYGFtZDY0YCBzeXN0ZW0uIEl0J3MgaGlnaGx5IHVubGlrZWx5LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIEkgc2hvdWxkIGdyZXAgdGhlIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBmaWxlcyB0byBzZWUgaWYgYW55IG9mIHRoZXNlIGBzMzkwYCBkcml2ZXJzIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGZvciBgYW1kNjRgIG9yIGluY2x1ZGVkIGluIHNvbWUgZ2VuZXJhbCBidWlsZCBwcm9jZXNzLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZTsgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgYW5kIHdpbGwgdGVsbCBtZSB3aGV0aGVyIEkgbmVlZCB0byBwYXkgYW55IGZ1cnRoZXIgYXR0ZW50aW9uIHRvIHRoaXMgcGF0Y2ggaW4gdGhlIGNvbnRleHQgb2YgbXkgYGFtZDY0YCB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMyOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjM4Ljc4MjUwMzgxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQzMDUwNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRyaXZlcnMvczM5MFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05OD1LZXJuZWwgcGFyYW1ldGVyc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMTEzOC1cXHRkYXNkPVxcdFxcdFtIVyxORVRdXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MTEzOTpcXHRcXHRcXHRTZWUgaGVhZGVyIG9mIGRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTExNDAtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWFwLWxvY2tpbmcucnN0PTg9d2lsbCBiZSB1c2VkIHRvIGRlbm90ZSBpbnN0YW5jZXMgb2YgdGhlIHN0cnVjdHVyZXMgaGVyZWluIGRlc2NyaWJlZDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tYXAtbG9ja2luZy5yc3QtMTUtXFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdDoxNjpUaGUgTWF0cml4IERldmljZXMgTG9jayAoZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaClcXG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWFwLWxvY2tpbmcucnN0LTE3LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdD01Mj1iZWVuIGF0dGFjaGVkIHRvIHRoZSBLVk0gZ3Vlc3QuXFxuRG9jdW1lbnRhdGlvbi9hcmNoL3MzOTAvdmZpby1hcC1sb2NraW5nLnJzdC01My1cXG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWFwLWxvY2tpbmcucnN0OjU0OlRoZSBHdWVzdHMgTG9jayAoZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaClcXG5Eb2N1bWVudGF0aW9uL2FyY2gvczM5MC92ZmlvLWFwLWxvY2tpbmcucnN0LTU1LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdD03OT1zdHJhbmdlIHNpZGUgZWZmZWN0cyBtYXkgaGFwcGVuLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtODMtXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3Q6ODQ6Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmNcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC04NS0gICA6ZXhwb3J0OlxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTg2LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0Ojg3Oi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuY1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0LTg4LSAgIDpleHBvcnQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdD05NT1hdHRhY2hlZCBkZXZpY2UuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC05OS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdDoxMDA6Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvczM5MC9jaW8vY21mLmNcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC0xMDEtICAgOmV4cG9ydDpcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0PTExMj1jY3cgZ3JvdXAgZGV2aWNlc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtMTE3LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0OjExODouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtMTE5LSAgIDpleHBvcnQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdD0xMzI9aW50ZXJydXB0cyBhbmQgaW50ZXJydXB0IHZlY3RvcnMuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3MzOTAtZHJpdmVycy5yc3QtMTMzLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9zMzkwLWRyaXZlcnMucnN0OjEzNDouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9zMzkwL2Npby9haXJxLmNcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvczM5MC1kcml2ZXJzLnJzdC0xMzUtICAgOmV4cG9ydDpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MjcxPVVzZSBiZGV2X3JlYWRfb25seShiZGV2KSBpbnN0ZWFkIG9mIGlzX3JlYWRfb25seShrZGV2KS4gIFRoZSBsYXR0ZXJcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjI3MjppcyBzdGlsbCBhbGl2ZSwgYnV0IG9ubHkgYmVjYXVzZSBvZiB0aGUgbWVzcyBpbiBkcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMjczLUFzIHNvb24gYXMgaXQgZ2V0cyBmaXhlZCBpc19yZWFkX29ubHkoKSB3aWxsIGRpZS5cXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0PTczPUNvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHNcXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTExMC0nMicgICAwMS0wNCAgbGludXgvaTJvLmhcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdDoxMTE6JzMnICAgMDAtMEYgIGRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdCFcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdC0xMTItJzMnICAgMDAtMUYgIGxpbnV4L3N1c3BlbmRfaW9jdGxzLmgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdCFcXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTMxNC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2NtYWlsdG86b2VAcG9ydC5kZVxcdTAwM2VcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdDozMTU6J3onICAgMTAtNEYgIGRyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mbGljdCFcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdC0zMTYtJ3wnICAgMDAtN0YgIGxpbnV4L21lZGlhLmhcXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTM5OC0weENGICAwMiAgICAgZnMvc21iL2NsaWVudC9jaWZzX2lvY3RsLmhcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdDozOTk6MHhERCAgMDAtM0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaRkNQIGRldmljZSBkcml2ZXIgc2VlIGRyaXZlcnMvczM5MC9zY3NpL1xcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0LTQwMC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2NtYWlsdG86YWhlcnJtYW5AZGUuaWJtLmNvbVxcdTAwM2VcXG4tLVxcbk1BSU5UQUlORVJTPTE0Mzg4PUY6XFx0YXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jXFxuTUFJTlRBSU5FUlM6MTQzODk6RjpcXHRkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jXFxuTUFJTlRBSU5FUlM6MTQzOTA6RjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL3MzOTB4L3V2ZGV2aWNlL1xcbk1BSU5UQUlORVJTLTE0MzkxLUY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyovczM5MC9cXG4tLVxcbk1BSU5UQUlORVJTPTE4OTAyPUY6XFx0ZHJpdmVycy9wdHAvXFxuTUFJTlRBSU5FUlM6MTg5MDM6RjpcXHRkcml2ZXJzL3MzOTAvbmV0L1xcbk1BSU5UQUlORVJTLTE4OTA0LUY6XFx0aW5jbHVkZS9kdC1iaW5kaW5ncy9uZXQvXFxuLS1cXG5NQUlOVEFJTkVSUz0yNDA3Nz1GOlxcdGRyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLXMzOTAuY1xcbk1BSU5UQUlORVJTOjI0MDc4OkY6XFx0ZHJpdmVycy9zMzkwL1xcbk1BSU5UQUlORVJTLTI0MDc5LUY6XFx0ZHJpdmVycy93YXRjaGRvZy9kaWFnMjg4X3dkdC5jXFxuLS1cXG5NQUlOVEFJTkVSUz0yNDA4NT1TOlxcdFN1cHBvcnRlZFxcbk1BSU5UQUlORVJTOjI0MDg2OkY6XFx0ZHJpdmVycy9zMzkwL2Npby9cXG5NQUlOVEFJTkVSUy0yNDA4Ny1cXG4tLVxcbk1BSU5UQUlORVJTPTI0MTAzPUY6XFx0YmxvY2svcGFydGl0aW9ucy9pYm0uY1xcbk1BSU5UQUlORVJTOjI0MTA0OkY6XFx0ZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QqXFxuTUFJTlRBSU5FUlMtMjQxMDUtRjpcXHRpbmNsdWRlL2xpbnV4L2Rhc2RfbW9kLmhcXG4tLVxcbk1BSU5UQUlORVJTPTI0MTI4PVM6XFx0U3VwcG9ydGVkXFxuTUFJTlRBSU5FUlM6MjQxMjk6RjpcXHRkcml2ZXJzL3MzOTAvbmV0LyppdWN2Klxcbk1BSU5UQUlORVJTLTI0MTMwLUY6XFx0aW5jbHVkZS9uZXQvaXVjdi9cXG4tLVxcbk1BSU5UQUlORVJTPTI0MTQ3PVM6XFx0U3VwcG9ydGVkXFxuTUFJTlRBSU5FUlM6MjQxNDg6RjpcXHRkcml2ZXJzL3MzOTAvbmV0L1xcbk1BSU5UQUlORVJTLTI0MTQ5LVxcbi0tXFxuTUFJTlRBSU5FUlM9MjQxNjg9UzpcXHRTdXBwb3J0ZWRcXG5NQUlOVEFJTkVSUzoyNDE2OTpGOlxcdGRyaXZlcnMvczM5MC9ibG9jay9zY20qXFxuTUFJTlRBSU5FUlM6MjQxNzA6RjpcXHRkcml2ZXJzL3MzOTAvY2lvL3NjbS5jXFxuTUFJTlRBSU5FUlMtMjQxNzEtXFxuLS1cXG5NQUlOVEFJTkVSUz0yNDE4MD1GOlxcdERvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tYXAqXFxuTUFJTlRBSU5FUlM6MjQxODE6RjpcXHRkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXAqXFxuTUFJTlRBSU5FUlMtMjQxODItXFxuLS1cXG5NQUlOVEFJTkVSUz0yNDE5MT1GOlxcdERvY3VtZW50YXRpb24vYXJjaC9zMzkwL3ZmaW8tY2N3LnJzdFxcbk1BSU5UQUlORVJTOjI0MTkyOkY6XFx0ZHJpdmVycy9zMzkwL2Npby92ZmlvX2NjdypcXG5NQUlOVEFJTkVSUy0yNDE5My1GOlxcdGluY2x1ZGUvdWFwaS9saW51eC92ZmlvX2Njdy5oXFxuLS1cXG5NQUlOVEFJTkVSUz0yNDIxNj1GOlxcdGFyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL3pjcnlwdC5oXFxuTUFJTlRBSU5FUlM6MjQyMTc6RjpcXHRkcml2ZXJzL3MzOTAvY3J5cHRvL1xcbk1BSU5UQUlORVJTLTI0MjE4LVxcbi0tXFxuTUFJTlRBSU5FUlM9MjQyMjI9UzpcXHRTdXBwb3J0ZWRcXG5NQUlOVEFJTkVSUzoyNDIyMzpGOlxcdGRyaXZlcnMvczM5MC9zY3NpL3pmY3BfKlxcbk1BSU5UQUlORVJTLTI0MjI0LVxcbi0tXFxuTUFJTlRBSU5FUlM9Mjg5MTQ9RjpcXHRhcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS92aXJ0aW8tY2N3LmhcXG5NQUlOVEFJTkVSUzoyODkxNTpGOlxcdGRyaXZlcnMvczM5MC92aXJ0aW8vXFxuTUFJTlRBSU5FUlMtMjg5MTYtXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZT0yND1LQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sIC1Xbm8tZGVmYXVsdC1jb25zdC1pbml0LXVuc2FmZSlcXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZS0yNS1cXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZToyNjpDRkxBR1Nfc2NscF9lYXJseV9jb3JlLm8gKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvczM5MC9jaGFyXFxuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGUtMjctXFxuLS1cXG5hcmNoL3MzOTAvYm9vdC9zY2xwX2Vhcmx5X2NvcmUuYy0yLSNpbmNsdWRlIFxcXCJib290LmhcXFwiXFxuYXJjaC9zMzkwL2Jvb3Qvc2NscF9lYXJseV9jb3JlLmM6MzojaW5jbHVkZSBcXFwiLi4vLi4vLi4vZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseV9jb3JlLmNcXFwiXFxuYXJjaC9zMzkwL2Jvb3Qvc2NscF9lYXJseV9jb3JlLmMtNC1cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaD0zNzQ9c3RydWN0IGdlbl9wb29sICpjaW9fZ3BfZG1hX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2LCBpbnQgbnJfcGFnZXMpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaC0zNzUtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oOjM3NjovKiBGdW5jdGlvbiBmcm9tIGRyaXZlcnMvczM5MC9jaW8vY2hzYy5jICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oLTM3Ny1pbnQgY2hzY19zc3RwYyh2b2lkICpwYWdlLCB1bnNpZ25lZCBpbnQgb3AsIHUxNiBjdHJsLCBsb25nICpjbG9ja19kZWx0YSk7XFxuLS1cXG5hcmNoL3MzOTAvbW0vY21tLmM9MzE9TU9EVUxFX1BBUk1fREVTQyhzZW5kZXIsXFxuLS1cXG5hcmNoL3MzOTAvbW0vY21tLmMtMzMtXFxuYXJjaC9zMzkwL21tL2NtbS5jOjM0OiNpbmNsdWRlIFxcXCIuLi8uLi8uLi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmhcXFwiXFxuYXJjaC9zMzkwL21tL2NtbS5jLTM1LVxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTI2Nz1jb25maWcgU1VOVkRDXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjczLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoyNzQ6c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjc1LVxcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWc9MzQ1PWNvbmZpZyBURUxDTE9DS1xcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWctMzU3LVxcbmRyaXZlcnMvY2hhci9LY29uZmlnOjM1ODpzb3VyY2UgXFxcImRyaXZlcnMvczM5MC9jaGFyL0tjb25maWdcXFwiXFxuZHJpdmVycy9jaGFyL0tjb25maWctMzU5LVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz01MzA9c291cmNlIFxcXCJkcml2ZXJzL25ldC9zbGlwL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MzEtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1MzI6c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvbmV0L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MzMtXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMtMy0gKiBBdXRob3IocykuLi4uLi46IEhvbGdlciBTbW9saW5za2kgXFx1MDAzY0hvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbVxcdTAwM2VcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmM6NDogKiBCYXNlZCBvbi4uLi4uLi46IGxpbnV4L2RyaXZlcnMvczM5MC9ibG9jay9tZGlzay5jXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jLTUtICogLi4uLi4uLi4uLi4uLi4uOiBieSBIYXJ0bXVudCBQZW5uZXIgXFx1MDAzY2hwZW5uZXJAZGUuaWJtLmNvbVxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuaC0zLSAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSBcXHUwMDNjSG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuaDo0OiAqIEJhc2VkIG9uLi4uLi4uLjogbGludXgvZHJpdmVycy9zMzkwL2Jsb2NrL21kaXNrLmhcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmgtNS0gKiAuLi4uLi4uLi4uLi4uLi46IGJ5IEhhcnRtdW50IFBlbm5lciBcXHUwMDNjaHBlbm5lckBkZS5pYm0uY29tXFx1MDAzZVxcbi0tXFxuaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmgtMi0vKlxcbmluY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oOjM6ICogIGRyaXZlcnMvczM5MC9uZXQvaXVjdi5oXFxuaW5jbHVkZS9uZXQvaXVjdi9pdWN2LmgtNC0gKiAgICBJVUNWIGJhc2Ugc3VwcG9ydC5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL01ha2VmaWxlPTIzPVRBUkdFVFMgKz0gZHJpdmVycy9udHN5bmNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZToyNDpUQVJHRVRTICs9IGRyaXZlcnMvczM5MHgvdXZkZXZpY2VcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9NYWtlZmlsZS0yNS1UQVJHRVRTICs9IGRyaXZlcnMvbmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjQwLjYyNTU1OTYyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzkzMTM1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZpbGVzLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGluIHRoZSBwcm9tcHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIERyaXZlciBJbmZyYXN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkcml2ZXIgYnVpbGQgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGZvciBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGNoYW5uZWwgSS9PIChDSU8pIHN1YnN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgc3RydWN0dXJlcy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYGRyaXZlcnMvTWFrZWZpbGVgIGluIHRoZSByb290IGRyaXZlcnMgZGlyZWN0b3J5IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZnJhbWV3b3JrIGFuZCBob3cgdGhlc2UgczM5MC9DSU8gZHJpdmVycyBmaXQgaW4uIEFyZSB0aGVyZSBjb25kaXRpb25hbCBpbmNsdWRlcz8gQW55IGdlbmVyaWMgcnVsZXM/IFRoZW4sIHRvIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIHMzOTAvQ0lPIGNvZGUsIEknbGwgbmVlZCB0byBleGFtaW5lIGBkcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlYC4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZXMgYXJlIGJlaW5nIGJ1aWx0LCBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgaG9wZWZ1bGx5IGhvdyB0aGV5J3JlIGJlaW5nIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwuIEFsdGVybmF0aXZlbHksIGl0J3MgYWxzbyB3b3J0aCBjaGVja2luZyBgZHJpdmVycy9zMzkwL2Npby9LY29uZmlnYC4gU29tZXRpbWVzIHRoZSBidWlsZCBwcm9jZXNzIGlzIGhlYXZpbHkgaW5mbHVlbmNlZCBieSB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgdGhpcyBtaWdodCBnaXZlIG1lIGNsdWVzIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBmZWF0dXJlIGZsYWdzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGRyaXZlci4gSXQncyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIGhvdyB0aGUgcGllY2VzIGFyZSBwdXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDE5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MTI6NDMuMjA0ODc1MTk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzU4OTMyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MTI6NDMuMjU3NjQwOTM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwMjE4MTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNYWtlZmlsZSBKdW5nbGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgYmVpbmcgYnVpbHQsIG9yIHBvdGVudGlhbGx5IGluY2x1ZGVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGxpa2VseSBhIGtlcm5lbCBkcml2ZXIsIHRoZSBgTWFrZWZpbGVgIGlzIHRoZSBwbGFjZSB0byBiZS4gVGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIGRyaXZlcnMgaXMgdXN1YWxseSB1bmRlciB0aGUgYGRyaXZlcnMvYCBkaXJlY3RvcnksIHNvIEknbGwgc3RhcnQgdGhlcmUuIEFuZCBzaW5jZSB0aGlzIHNlZW1zIGFyY2hpdGVjdHVyZSBzcGVjaWZpYywgb3IgYXQgbGVhc3QgcG90ZW50aWFsbHkgc28sIEknbGwgY2hlY2sgYGRyaXZlcnMvTWFrZWZpbGVgIGZpcnN0LCBhcyB0aGF0IGlzIHRoZSBnZW5lcmFsIG9uZS4gVGhlbiBpZiB0aGF0IGRvZXMgbm90IGNvbnRhaW4gd2hhdCBJIGFtIGxvb2tpbmcgZm9yLCBJIHNob3VsZCBpbW1lZGlhdGVseSBsb29rIGluIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgbG9jYXRpb24sIHNvIGBkcml2ZXJzL3MzOTAvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc0NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjEyOjQ1Ljg1OTgyNTUwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM4MzA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzMzkwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9NYWtlZmlsZT0xOTk9b2JqLSQoQ09ORklHX0RJQlMpXFx0XFx0Kz0gZGlicy9cXG5kcml2ZXJzL01ha2VmaWxlOjIwMDpvYmotJChDT05GSUdfUzM5MClcXHRcXHQrPSBzMzkwL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDoxMjo0NS45MTMyMTQ1NDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDE1NzgxMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5yZWFjaGFibGUgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlLCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGBkcml2ZXJzL01ha2VmaWxlYCBoYXMgYWRkZWQgYG9iai0kKENPTkZJR19TMzkwKSArPSBzMzkwL2AsIG1lYW5pbmcgdGhhdCBzdHVmZiB1bmRlciBgZHJpdmVycy9zMzkwL2AgaXMgb25seSBidWlsdCBpZiB0aGUgYENPTkZJR19TMzkwYCBvcHRpb24gaXMgc2V0LiBBbmQsIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmhgIGlzICphbHNvKiBvbmx5IGluY2x1ZGVkIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IHZpb2xhdGUgdGhlIHByb21wdCdzIG5lZ2F0aXZlIGNyaXRlcmlhLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgd29ycmllZCBhYm91dCB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuIFRoZSBwcm9tcHQgbGlzdHMgYSBmZXcsIGJ1dCB0aGUgcmVsZXZhbnQgb25lcyBoZXJlIGFyZSBjb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIGFtZDY0LlxuXG5HaXZlbiB0aGF0IHRoZSB0YXJnZXQgaXMgYW1kNjQsIGFuZCB0aGUgbW9kaWZpZWQgZmlsZXMgYXJlIGFsbCBpbiBgYXJjaC9zMzkwL2AgYW5kIGBkcml2ZXJzL3MzOTAvY2lvL2AsIGFuZCB0aGF0IGBDT05GSUdfUzM5MGAgaXMgKm9ubHkqIGRlZmluZWQgZm9yIHMzOTAsIHRoaXMgaXMgcHJldHR5IGNsZWFyLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IG5vdGhpbmcgaW4gYGRyaXZlcnMvczM5MC9jaW9gIG9yIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaGAgY2FuIHNvbWVob3cgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgb24gYW1kNjQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvczM5MC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvczM5MC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAxNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDoxMjo0OS45Mjg5OTkxNzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDA0MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc1OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9zMzkwL01ha2VmaWxlLTUtXFxuZHJpdmVycy9zMzkwL01ha2VmaWxlOjY6b2JqLXkgKz0gY2lvLyBibG9jay8gY2hhci8gY3J5cHRvLyBuZXQvIHNjc2kvIHZpcnRpby9cXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYy0zMC0jaW5jbHVkZSBcXHUwMDNjYXNtL2ViY2RpYy5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYzozMTojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYy0zMi0jaW5jbHVkZSBcXHUwMDNjYXNtL2Njd2Rldi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTI3LSNpbmNsdWRlIFxcdTAwM2Nhc20vY2N3ZGV2LmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jOjI4OiNpbmNsdWRlIFxcdTAwM2Nhc20vY2lvLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jLTI5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jLTI2LSNpbmNsdWRlIFxcdTAwM2Nhc20vY2N3ZGV2LmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jOjI3OiNpbmNsdWRlIFxcdTAwM2Nhc20vY2lvLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2NoYXIvY29uMzI3MC5jLTI4LSNpbmNsdWRlIFxcdTAwM2Nhc20vZWJjZGljLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci9mczMyNzAuYy0yMi0jaW5jbHVkZSBcXHUwMDNjYXNtL2Njd2Rldi5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jOjIzOiNpbmNsdWRlIFxcdTAwM2Nhc20vY2lvLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMtMjQtI2luY2x1ZGUgXFx1MDAzY2FzbS9lYmNkaWMuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy0yMi0jaW5jbHVkZSBcXHUwMDNjYXNtL2Njd2Rldi5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYzoyMzojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYy0yNC0jaW5jbHVkZSBcXHUwMDNjYXNtL2ViY2RpYy5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jLTIwLSNpbmNsdWRlIFxcdTAwM2Nhc20vbWFjaGluZS5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYzoyMTojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYy0yMi0jaW5jbHVkZSBcXHUwMDNjYXNtL2Njd2Rldi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZT0xMD1DRkxBR1NfdmZpb19jY3dfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUtMTEtXFxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZToxMjpvYmoteSArPSBhaXJxLm8gYmxhY2tsaXN0Lm8gY2hzYy5vIGNpby5vIGNzcy5vIGNocC5vIGlkc2V0Lm8gaXNjLm8gXFxcXFxcbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGU6MTM6XFx0ZmN4Lm8gaXRjdy5vIGNydy5vIGNjd3JlcS5vIHRyYWNlLm8gaW9hc20ubyBjaW9fZGVidWdmcy5vXFxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZS0xNC1jY3dfZGV2aWNlLW9ianMgKz0gZGV2aWNlLm8gZGV2aWNlX2ZzbS5vIGRldmljZV9vcHMub1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZT0yNz1vYmotJChDT05GSUdfVkZJT19DQ1cpICs9IHZmaW9fY2N3Lm9cXG5kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlLTI4LVxcbmRyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGU6Mjk6b2JqLSQoQ09ORklHX0NJT19JTkpFQ1QpICs9IGNpb19pbmplY3Qub1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMjMtI2luY2x1ZGUgXFx1MDAzY2FzbS9pc2MuaFxcdTAwM2VcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzoyNDojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTI1LVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jOjI2OiNpbmNsdWRlIFxcXCJjaW8uaFxcXCJcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzoyNzojaW5jbHVkZSBcXFwiY2lvX2RlYnVnLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMjgtI2luY2x1ZGUgXFxcImlvYXNtLmhcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYz00MT1pbnQgcmVnaXN0ZXJfYWRhcHRlcl9pbnRlcnJ1cHQoc3RydWN0IGFpcnFfc3RydWN0ICphaXJxKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtNDctXFx0aWYgKCFhaXJxLVxcdTAwM2Vsc2lfcHRyKSB7XFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6NDg6XFx0XFx0YWlycS1cXHUwMDNlbHNpX3B0ciA9IGNpb19kbWFfemFsbG9jKDEpO1xcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTQ5LVxcdFxcdGlmICghYWlycS1cXHUwMDNlbHNpX3B0cilcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jPTY3PXZvaWQgdW5yZWdpc3Rlcl9hZGFwdGVyX2ludGVycnVwdChzdHJ1Y3QgYWlycV9zdHJ1Y3QgKmFpcnEpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy04MC1cXHRpZiAoYWlycS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJRX1BUUl9BTExPQ0FURUQpIHtcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzo4MTpcXHRcXHRjaW9fZG1hX2ZyZWUoYWlycS1cXHUwMDNlbHNpX3B0ciwgMSk7XFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtODItXFx0XFx0YWlycS1cXHUwMDNlbHNpX3B0ciA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYz04OD1zdGF0aWMgaXJxcmV0dXJuX3QgZG9fYWlycV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZHVtbXkpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy05NC1cXHR0cGlfaW5mbyA9IFxcdTAwMjZnZXRfaXJxX3JlZ3MoKS1cXHUwMDNldHBpX2luZm87XFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6OTU6XFx0dHJhY2VfczM5MF9jaW9fYWRhcHRlcl9pbnQodHBpX2luZm8pO1xcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTk2LVxcdGhlYWQgPSBcXHUwMDI2YWlycV9saXN0c1t0cGlfaW5mby1cXHUwMDNlaXNjXTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jPTEyNz1zdHJ1Y3QgYWlycV9pdiAqYWlycV9pdl9jcmVhdGUodW5zaWduZWQgbG9uZyBiaXRzLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMTUxLVxcdH0gZWxzZSB7XFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6MTUyOlxcdFxcdGl2LVxcdTAwM2V2ZWN0b3IgPSBjaW9fZG1hX3phbGxvYyhzaXplKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy0xNTMtXFx0XFx0aWYgKCFpdi1cXHUwMDNldmVjdG9yKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMTkwLVxcdGVsc2UgaWYgKCEoaXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQUlSUV9JVl9HVUVTVFZFQykpXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM6MTkxOlxcdFxcdGNpb19kbWFfZnJlZShpdi1cXHUwMDNldmVjdG9yLCBzaXplKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy0xOTItXFx0a2ZyZWUoaXYpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM9MjAyPXZvaWQgYWlycV9pdl9yZWxlYXNlKHN0cnVjdCBhaXJxX2l2ICppdilcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTIwOS1cXHRlbHNlIGlmICghKGl2LVxcdTAwM2VmbGFncyBcXHUwMDI2IEFJUlFfSVZfR1VFU1RWRUMpKVxcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jOjIxMDpcXHRcXHRjaW9fZG1hX2ZyZWUoaXYtXFx1MDAzZXZlY3RvciwgaXZfc2l6ZShpdi1cXHUwMDNlYml0cykpO1xcbmRyaXZlcnMvczM5MC9jaW8vYWlycS5jLTIxMS1cXHRrZnJlZShpdi1cXHUwMDNlYXZhaWwpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmM9MzA1PWludCBfX2luaXQgYWlycV9pbml0KHZvaWQpXFxuZHJpdmVycy9zMzkwL2Npby9haXJxLmMtMzA2LXtcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYzozMDc6XFx0YWlycV9pdl9jYWNoZSA9IGRtYV9wb29sX2NyZWF0ZShcXFwiYWlycV9pdl9jYWNoZVxcXCIsIGNpb19nZXRfZG1hX2Nzc19kZXYoKSxcXG5kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYy0zMDgtXFx0XFx0XFx0XFx0XFx0Y2FjaGVfbGluZV9zaXplKCksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTEwLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MTE6I2RlZmluZSBwcl9mbXQoZm10KSBcXFwiY2lvOiBcXFwiIGZtdFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMTItXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzoyMjojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjMtI2luY2x1ZGUgXFx1MDAzY2FzbS9pcGwuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjUtI2luY2x1ZGUgXFxcImJsYWNrbGlzdC5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MjY6I2luY2x1ZGUgXFxcImNpby5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6Mjc6I2luY2x1ZGUgXFxcImNpb19kZWJ1Zy5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjgtI2luY2x1ZGUgXFxcImNzcy5oXFxcIlxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0zMi0gKiBcXFwiQmxhY2tsaXN0aW5nXFxcIiBvZiBjZXJ0YWluIGRldmljZXM6XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozMzogKiBEZXZpY2UgbnVtYmVycyBnaXZlbiBpbiB0aGUgY29tbWFuZGxpbmUgYXMgY2lvX2lnbm9yZT0uLi4gd29uJ3QgYmUga25vd25cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTM0LSAqIHRvIExpbnV4Llxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz00OT1zdGF0aWMgaW50IGJsYWNrbGlzdF9yYW5nZShyYW5nZV9hY3Rpb24gYWN0aW9uLCB1bnNpZ25lZCBpbnQgZnJvbV9zc2lkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy01NC1cXHRcXHRpZiAobXNndHJpZ2dlcilcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjU1OlxcdFxcdFxcdHByX3dhcm4oXFxcIjAuJXguJTA0eCB0byAwLiV4LiUwNHggaXMgbm90IGEgdmFsaWQgcmFuZ2UgZm9yIGNpb19pZ25vcmVcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy01Ni1cXHRcXHRcXHRcXHRmcm9tX3NzaWQsIGZyb20sIHRvX3NzaWQsIHRvKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MTAxPXN0YXRpYyBpbnQgcGFyc2VfYnVzaWQoY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgKmNzc2lkLCB1bnNpZ25lZCBpbnQgKnNzaWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTE0Mi1cXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgbXNndHJpZ2dlcilcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjE0MzpcXHRcXHRwcl93YXJuKFxcXCIlcyBpcyBub3QgYSB2YWxpZCBkZXZpY2UgZm9yIHRoZSBjaW9faWdub3JlIGtlcm5lbCBwYXJhbWV0ZXJcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0xNDQtXFx0XFx0XFx0c3RyKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MjI3PWJsYWNrbGlzdF9zZXR1cCAoY2hhciAqc3RyKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yMzQtXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzoyMzU6X19zZXR1cCAoXFxcImNpb19pZ25vcmU9XFxcIiwgYmxhY2tsaXN0X3NldHVwKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTIzNi1cXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MjQ2PWlzX2JsYWNrbGlzdGVkIChpbnQgc3NpZCwgaW50IGRldm5vKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0yNTMtICogRnVuY3Rpb246IGJsYWNrbGlzdF9wYXJzZV9wcm9jX3BhcmFtZXRlcnNcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjI1NDogKiBwYXJzZSB0aGUgc3R1ZmYgd2hpY2ggaXMgcGlwZWQgdG8gL3Byb2MvY2lvX2lnbm9yZVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMjU1LSAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0yODk9c3RhdGljIHZvaWQgKlxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MjkwOmNpb19pZ25vcmVfcHJvY19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKm9mZnNldClcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTI5MS17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jPTMwMj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MzAzOmNpb19pZ25vcmVfcHJvY19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0KVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzA0LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MzA3PXN0YXRpYyB2b2lkICpcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjMwODpjaW9faWdub3JlX3Byb2Nfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICppdCwgbG9mZl90ICpvZmZzZXQpXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0zMDkte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYz0zMjc9c3RhdGljIGludFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6MzI4OmNpb19pZ25vcmVfcHJvY19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0KVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzI5LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM9MzU3PXN0YXRpYyBzc2l6ZV90XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozNTg6Y2lvX2lnbm9yZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzU5LVxcdFxcdCBzaXplX3QgdXNlcl9sZW4sIGxvZmZfdCAqb2Zmc2V0KVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy0zOTItXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozOTM6c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjaW9faWdub3JlX3Byb2Nfc2VxX29wcyA9IHtcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjM5NDpcXHQuc3RhcnQgPSBjaW9faWdub3JlX3Byb2Nfc2VxX3N0YXJ0LFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6Mzk1OlxcdC5zdG9wICA9IGNpb19pZ25vcmVfcHJvY19zZXFfc3RvcCxcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjM5NjpcXHQubmV4dCAgPSBjaW9faWdub3JlX3Byb2Nfc2VxX25leHQsXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzozOTc6XFx0LnNob3cgID0gY2lvX2lnbm9yZV9wcm9jX3NlcV9zaG93LFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtMzk4LX07XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jPTQwMD1zdGF0aWMgaW50XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MDE6Y2lvX2lnbm9yZV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MDIte1xcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6NDAzOlxcdHJldHVybiBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFxcdTAwMjZjaW9faWdub3JlX3Byb2Nfc2VxX29wcyxcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQwNC1cXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGNjd2Rldl9pdGVyKSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQwNi1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQwNzpzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGNpb19pZ25vcmVfcHJvY19vcHMgPSB7XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MDg6XFx0LnByb2Nfb3BlblxcdD0gY2lvX2lnbm9yZV9wcm9jX29wZW4sXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MDktXFx0LnByb2NfcmVhZFxcdD0gc2VxX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQxMS1cXHQucHJvY19yZWxlYXNlXFx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmM6NDEyOlxcdC5wcm9jX3dyaXRlXFx0PSBjaW9faWdub3JlX3dyaXRlLFxcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDEzLX07XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jPTQxNT1zdGF0aWMgaW50XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MTY6Y2lvX2lnbm9yZV9wcm9jX2luaXQgKHZvaWQpXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MTcte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MTktXFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYzo0MjA6XFx0ZW50cnkgPSBwcm9jX2NyZWF0ZShcXFwiY2lvX2lnbm9yZVxcXCIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwgTlVMTCxcXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQyMTpcXHRcXHRcXHQgICAgXFx1MDAyNmNpb19pZ25vcmVfcHJvY19vcHMpO1xcbmRyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMtNDIyLVxcdGlmICghZW50cnkpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jLTQyNi1cXG5kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jOjQyNzpfX2luaXRjYWxsIChjaW9faWdub3JlX3Byb2NfaW5pdCk7XFxuZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYy00MjgtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMtMjAtXFxuZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jOjIxOiNpbmNsdWRlIFxcdTAwM2Nhc20vY2lvLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jLTIyLSNpbmNsdWRlIFxcdTAwM2Nhc20vY2N3ZGV2LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTgtXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzo5OiNkZWZpbmUgcHJfZm10KGZtdCkgXFxcImNpbzogXFxcIiBmbXRcXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTEwLVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xMy0jaW5jbHVkZSBcXHUwMDNjYXNtL2Njd2Rldi5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTQ6I2luY2x1ZGUgXFx1MDAzY2FzbS9jaW8uaFxcdTAwM2VcXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTE1LVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTYtI2luY2x1ZGUgXFxcImlvX3NjaC5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTc6I2luY2x1ZGUgXFxcImNpby5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTgtI2luY2x1ZGUgXFxcImRldmljZS5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTk6I2luY2x1ZGUgXFxcImNpb19kZWJ1Zy5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMjAtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jPTc0PXN0YXRpYyB2b2lkIGNjd3JlcV9kbyhzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtODgtXFx0XFx0bWVtc2V0KFxcdTAwMjZjZGV2LVxcdTAwM2Vwcml2YXRlLVxcdTAwM2VkbWFfYXJlYS1cXHUwMDNlaXJiLCAwLCBzaXplb2Yoc3RydWN0IGlyYikpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6ODk6XFx0XFx0cmMgPSBjaW9fc3RhcnQoc2NoLCBjcCwgKHU4KSByZXEtXFx1MDAzZW1hc2spO1xcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtOTAtXFx0XFx0aWYgKHJjID09IDApIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMTA0LVxcdFxcdC8qIFRlbXBvcmFyeSBpbXByb3BlciBzdGF0dXMuICovXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzoxMDU6XFx0XFx0cmMgPSBjaW9fY2xlYXIoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTEwNi1cXHRcXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jPTE1MD1pbnQgY2N3X3JlcXVlc3RfY2FuY2VsKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xNTgtXFx0cmVxLVxcdTAwM2VjYW5jZWwgPSAxO1xcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MTU5OlxcdHJjID0gY2lvX2NsZWFyKHNjaCk7XFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0xNjAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYz0yNTQ9dm9pZCBjY3dfcmVxdWVzdF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMjU1LXtcXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jOjI1NjpcXHRzdHJ1Y3QgaXJiICppcmIgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNmNpb19pcmIpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMjU3LVxcdHN0cnVjdCBjY3dfcmVxdWVzdCAqcmVxID0gXFx1MDAyNmNkZXYtXFx1MDAzZXByaXZhdGUtXFx1MDAzZXJlcTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM9MzI2PXZvaWQgY2N3X3JlcXVlc3RfdGltZW91dChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMtMzMxLVxcbmRyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmM6MzMyOlxcdGlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpXFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYy0zMzMtXFx0XFx0Z290byBlcnI7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTM0OC1cXHR9XFxuZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYzozNDk6XFx0cmMgPSBjaW9fY2xlYXIoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jLTM1MC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2NocC5jLTIzLVxcbmRyaXZlcnMvczM5MC9jaW8vY2hwLmM6MjQ6I2luY2x1ZGUgXFxcImNpby5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2hwLmMtMjUtI2luY2x1ZGUgXFxcImNzcy5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2hwLmMtMjYtI2luY2x1ZGUgXFxcImlvYXNtLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9jaHAuYzoyNzojaW5jbHVkZSBcXFwiY2lvX2RlYnVnLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9jaHAuYy0yOC0jaW5jbHVkZSBcXFwiY2hwLmhcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYy0xMC1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzoxMTojZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJjaW86IFxcXCIgZm10XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmMtMTItXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYy0yMC1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzoyMTojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzYy5jLTIyLSNpbmNsdWRlIFxcdTAwM2Nhc20vY2hwaWQuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzYy5jLTI4LSNpbmNsdWRlIFxcXCJjc3MuaFxcXCJcXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYzoyOTojaW5jbHVkZSBcXFwiY2lvLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjLmM6MzA6I2luY2x1ZGUgXFxcImNpb19kZWJ1Zy5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2hzYy5jLTMxLSNpbmNsdWRlIFxcXCJpb2FzbS5oXFxcIlxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTE5LVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzoyMDojaW5jbHVkZSBcXHUwMDNjYXNtL2Npby5oXFx1MDAzZVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0yMS0jaW5jbHVkZSBcXHUwMDNjYXNtL2Noc2MuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy0yMy1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmM6MjQ6I2luY2x1ZGUgXFxcImNpby5oXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYzoyNTojaW5jbHVkZSBcXFwiY2lvX2RlYnVnLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTI2LSNpbmNsdWRlIFxcXCJjc3MuaFxcXCJcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYz01ND1zdGF0aWMgdm9pZCBjaHNjX3N1YmNoYW5uZWxfaXJxKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtNTctXFx0c3RydWN0IGNoc2NfcmVxdWVzdCAqcmVxdWVzdCA9IHByaXZhdGUtXFx1MDAzZXJlcXVlc3Q7XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjU4OlxcdHN0cnVjdCBpcmIgKmlyYiA9IHRoaXNfY3B1X3B0cihcXHUwMDI2Y2lvX2lyYik7XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTU5LVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTcxLVxcdG1lbWNweShcXHUwMDI2cmVxdWVzdC1cXHUwMDNlaXJiLCBpcmIsIHNpemVvZigqaXJiKSk7XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjcyOlxcdGNpb191cGRhdGVfc2NoaWIoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtNzMtXFx0Y29tcGxldGUoXFx1MDAyNnJlcXVlc3QtXFx1MDAzZWNvbXBsZXRpb24pO1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jPTc3PXN0YXRpYyBpbnQgY2hzY19zdWJjaGFubmVsX3Byb2JlKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtODgtXFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZzY2gtXFx1MDAzZWRldiwgcHJpdmF0ZSk7XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjg5OlxcdHJldCA9IGNpb19lbmFibGVfc3ViY2hhbm5lbChzY2gsICh1MzIpdmlydF90b19waHlzKHNjaCkpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYy05MC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmM9OTk9c3RhdGljIHZvaWQgY2hzY19zdWJjaGFubmVsX3JlbW92ZShzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTEwMi1cXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmM6MTAzOlxcdGNpb19kaXNhYmxlX3N1YmNoYW5uZWwoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMtMTA0LVxcdHByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNnNjaC1cXHUwMDNlZGV2KTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYz0xMTM9c3RhdGljIHZvaWQgY2hzY19zdWJjaGFubmVsX3NodXRkb3duKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTExNC17XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jOjExNTpcXHRjaW9fZGlzYWJsZV9zdWJjaGFubmVsKHNjaCk7XFxuZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jLTExNi19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTExLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTI6I2RlZmluZSBwcl9mbXQoZm10KSBcXFwiY2lvOiBcXFwiIGZtdFxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTMtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjIzOiNpbmNsdWRlIFxcdTAwM2Nhc20vY2lvLmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNC0jaW5jbHVkZSBcXHUwMDNjYXNtL2RlbGF5LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM1LSNpbmNsdWRlIFxcdTAwM2Nhc20vY3J3LmhcXHUwMDNlXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozNjojaW5jbHVkZSBcXFwiY2lvLmhcXFwiXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zNy0jaW5jbHVkZSBcXFwiY3NzLmhcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQxLSNpbmNsdWRlIFxcXCJibGFja2xpc3QuaFxcXCJcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQyOiNpbmNsdWRlIFxcXCJjaW9fZGVidWcuaFxcXCJcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQzLSNpbmNsdWRlIFxcXCJjaHAuaFxcXCJcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDUtXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0NjpkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z19tc2dfaWQ7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0NzpkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z190cmFjZV9pZDtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ4OmRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX2Nyd19pZDtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ5LVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NTA6REVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgaXJiLCBjaW9faXJiKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjUxOkVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjaW9faXJiKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTUyLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNTMtLypcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjU0OiAqIEZ1bmN0aW9uOiBjaW9fZGVidWdfaW5pdFxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNTUtICogSW5pdGlhbGl6ZXMgdGhyZWUgZGVidWcgbG9ncyBmb3IgY29tbW9uIEkvTzpcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjU2OiAqIC0gY2lvX21zZyBsb2dzIGdlbmVyaWMgY2lvIG1lc3NhZ2VzXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo1NzogKiAtIGNpb190cmFjZSBsb2dzIHRoZSBjYWxsaW5nIG9mIGRpZmZlcmVudCBmdW5jdGlvbnNcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjU4OiAqIC0gY2lvX2NydyBsb2dzIG1hY2hpbmUgY2hlY2sgcmVsYXRlZCBjaW8gbWVzc2FnZXNcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTU5LSAqL1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NjA6c3RhdGljIGludCBfX2luaXQgY2lvX2RlYnVnX2luaXQodm9pZClcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTYxLXtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjYyOlxcdGNpb19kZWJ1Z19tc2dfaWQgPSBkZWJ1Z19yZWdpc3RlcihcXFwiY2lvX21zZ1xcXCIsIDE2LCAxLCAxMSAqIHNpemVvZihsb25nKSk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo2MzpcXHRpZiAoIWNpb19kZWJ1Z19tc2dfaWQpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy02NC1cXHRcXHRnb3RvIG91dF91bnJlZ2lzdGVyO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NjU6XFx0ZGVidWdfcmVnaXN0ZXJfdmlldyhjaW9fZGVidWdfbXNnX2lkLCBcXHUwMDI2ZGVidWdfc3ByaW50Zl92aWV3KTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjY2OlxcdGRlYnVnX3NldF9sZXZlbChjaW9fZGVidWdfbXNnX2lkLCAyKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjY3OlxcdGNpb19kZWJ1Z190cmFjZV9pZCA9IGRlYnVnX3JlZ2lzdGVyKFxcXCJjaW9fdHJhY2VcXFwiLCAxNiwgMSwgMTYpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Njg6XFx0aWYgKCFjaW9fZGVidWdfdHJhY2VfaWQpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy02OS1cXHRcXHRnb3RvIG91dF91bnJlZ2lzdGVyO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NzA6XFx0ZGVidWdfcmVnaXN0ZXJfdmlldyhjaW9fZGVidWdfdHJhY2VfaWQsIFxcdTAwMjZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo3MTpcXHRkZWJ1Z19zZXRfbGV2ZWwoY2lvX2RlYnVnX3RyYWNlX2lkLCAyKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjcyOlxcdGNpb19kZWJ1Z19jcndfaWQgPSBkZWJ1Z19yZWdpc3RlcihcXFwiY2lvX2Nyd1xcXCIsIDgsIDEsIDggKiBzaXplb2YobG9uZykpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NzM6XFx0aWYgKCFjaW9fZGVidWdfY3J3X2lkKVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNzQtXFx0XFx0Z290byBvdXRfdW5yZWdpc3RlcjtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjc1OlxcdGRlYnVnX3JlZ2lzdGVyX3ZpZXcoY2lvX2RlYnVnX2Nyd19pZCwgXFx1MDAyNmRlYnVnX3NwcmludGZfdmlldyk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo3NjpcXHRkZWJ1Z19zZXRfbGV2ZWwoY2lvX2RlYnVnX2Nyd19pZCwgNCk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy03Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNzktb3V0X3VucmVnaXN0ZXI6XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo4MDpcXHRkZWJ1Z191bnJlZ2lzdGVyKGNpb19kZWJ1Z19tc2dfaWQpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6ODE6XFx0ZGVidWdfdW5yZWdpc3RlcihjaW9fZGVidWdfdHJhY2VfaWQpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6ODI6XFx0ZGVidWdfdW5yZWdpc3RlcihjaW9fZGVidWdfY3J3X2lkKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTgzLVxcdHJldHVybiAtMTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtODUtXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo4NjphcmNoX2luaXRjYWxsIChjaW9fZGVidWdfaW5pdCk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy04Ny1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjg4OmludCBjaW9fc2V0X29wdGlvbnMoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgaW50IGZsYWdzKVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtODkte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz05OD1zdGF0aWMgaW50XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo5OTpjaW9fc3RhcnRfaGFuZGxlX25vdG9wZXIoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgX191OCBscG0pXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMDAte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMDctXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoxMDg6XFx0Q0lPX01TR19FVkVOVCgyLCBcXFwiY2lvX3N0YXJ0OiAnbm90IG9wZXInIHN0YXR1cyBmb3IgXFxcIlxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTA5LVxcdFxcdCAgICAgIFxcXCJzdWJjaGFubmVsIDAuJXguJTA0eCFcXFxcblxcXCIsIHNjaC1cXHUwMDNlc2NoaWQuc3NpZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTExLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTEyOlxcdGlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMTMtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jPTEyMj1pbnRcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjEyMzpjaW9fc3RhcnRfa2V5IChzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLFxcdC8qIHN1YmNoYW5uZWwgc3RydWN0dXJlICovXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xMjQtXFx0ICAgICAgIHN0cnVjdCBjY3cxICogY3BhLFxcdC8qIGxvZ2ljYWwgY2hhbm5lbCBwcm9nIGFkZHIgKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTY3LVxcdGNhc2UgMzpcXHRcXHQvKiBkZXZpY2UvcGF0aCBub3Qgb3BlcmF0aW9uYWwgKi9cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjE2ODpcXHRcXHRyZXR1cm4gY2lvX3N0YXJ0X2hhbmRsZV9ub3RvcGVyKHNjaCwgbHBtKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTE2OS1cXHRkZWZhdWx0Olxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xNzItfVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTczOkVYUE9SVF9TWU1CT0xfR1BMKGNpb19zdGFydF9rZXkpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTc0LVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM9MTc1PWludFxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTc2OmNpb19zdGFydCAoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgc3RydWN0IGNjdzEgKmNwYSwgX191OCBscG0pXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0xNzcte1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MTc4OlxcdHJldHVybiBjaW9fc3RhcnRfa2V5KHNjaCwgY3BhLCBscG0sIFBBR0VfREVGQVVMVF9LRVkpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTc5LX1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjE4MDpFWFBPUlRfU1lNQk9MX0dQTChjaW9fc3RhcnQpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMTgxLVxcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYz0xODU9aW50XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoxODY6Y2lvX3Jlc3VtZSAoc3RydWN0IHN1YmNoYW5uZWwgKnNjaClcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTE4Ny17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTIxMi19XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyMTM6RVhQT1JUX1NZTUJPTF9HUEwoY2lvX3Jlc3VtZSk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yMTQtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jPTIxOD1pbnRcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjIxOTpjaW9faGFsdChzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMjIwLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMjQ2LX1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjI0NzpFWFBPUlRfU1lNQk9MX0dQTChjaW9faGFsdCk7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yNDgtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jPTI1Mj1pbnRcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjI1MzpjaW9fY2xlYXIoc3RydWN0IHN1YmNoYW5uZWwgKnNjaClcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI1NC17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI3Ny19XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzoyNzg6RVhQT1JUX1NZTUJPTF9HUEwoY2lvX2NsZWFyKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI3OS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTI4MC0vKlxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MjgxOiAqIEZ1bmN0aW9uOiBjaW9fY2FuY2VsXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yODItICogSXNzdWVzIGEgXFxcIkNhbmNlbCBTdWJjaGFubmVsXFxcIiBvbiB0aGUgc3BlY2lmaWVkIHN1YmNoYW5uZWxcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM9Mjg3PWludFxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Mjg4OmNpb19jYW5jZWwgKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0yODkte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMDQtXFx0XFx0LyogVXBkYXRlIGluZm9ybWF0aW9uIGluIHNjc3cuICovXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozMDU6XFx0XFx0aWYgKGNpb191cGRhdGVfc2NoaWIoc2NoKSlcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMwNi1cXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzE1LX1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMxNjpFWFBPUlRfU1lNQk9MX0dQTChjaW9fY2FuY2VsKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMxNy1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMxOC0vKipcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMxOTogKiBjaW9fY2FuY2VsX2hhbHRfY2xlYXIgLSBDYW5jZWwgcnVubmluZyBJL08gYnkgcGVyZm9ybWluZyBjYW5jZWwsIGhhbHRcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMyMC0gKiBhbmQgY2xlYXIgb3JkaW5hbGx5IGlmIHN1YmNoYW5uZWwgaXMgdmFsaWQuXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMyNC0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgcmVwZWF0ZWRseSBzaW5jZSBoYWx0L2NsZWFyIGFyZSBhc3luY2hyb25vdXNcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMyNTogKiBvcGVyYXRpb25zLiBXZSBkbyBvbmUgdHJ5IHdpdGggY2lvX2NhbmNlbCwgdGhyZWUgdHJpZXMgd2l0aCBjaW9faGFsdCxcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjMyNjogKiAyNTUgdHJpZXMgd2l0aCBjaW9fY2xlYXIuIFRoZSBjYWxsZXIgc2hvdWxkIGluaXRpYWxpemUgQGlyZXRyeSB3aXRoXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMjctICogdGhlIHZhbHVlIDI1NSBmb3IgaXRzIGZpcnN0IGNhbGwgdG8gdGhpcywgYW5kIGtlZXAgdXNpbmcgdGhlIHNhbWVcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzMzLSAqL1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzM0OmludCBjaW9fY2FuY2VsX2hhbHRfY2xlYXIoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgaW50ICppcmV0cnkpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMzUte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy0zMzctXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozMzg6XFx0aWYgKGNpb191cGRhdGVfc2NoaWIoc2NoKSlcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTMzOS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzQ2LVxcdFxcdGlmICghc2Nzd19pc190bShcXHUwMDI2c2NoLVxcdTAwM2VzY2hpYi5zY3N3KSkge1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6MzQ3OlxcdFxcdFxcdHJldCA9IGNpb19jYW5jZWwoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM0OC1cXHRcXHRcXHRpZiAocmV0ICE9IC1FSU5WQUwpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM2MC1cXHRcXHRcXHQqaXJldHJ5IC09IDE7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzozNjE6XFx0XFx0XFx0cmV0ID0gY2lvX2hhbHQoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM2Mi1cXHRcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzcwLVxcdFxcdCppcmV0cnkgLT0gMTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjM3MTpcXHRcXHRyZXQgPSBjaW9fY2xlYXIoc2NoKTtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM3Mi1cXHRcXHRyZXR1cm4gKHJldCA9PSAwKSA/IC1FQlVTWSA6IHJldDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzc2LX1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjM3NzpFWFBPUlRfU1lNQk9MX0dQTChjaW9fY2FuY2VsX2hhbHRfY2xlYXIpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtMzc4LVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6Mzc5OnN0YXRpYyB2b2lkIGNpb19hcHBseV9jb25maWcoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgc3RydWN0IHNjaGliICpzY2hpYilcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM4MC17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM5Mi1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjM5MzpzdGF0aWMgaW50IGNpb19jaGVja19jb25maWcoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgc3RydWN0IHNjaGliICpzY2hpYilcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTM5NC17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQwNi0vKlxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDA3OiAqIGNpb19jb21taXRfY29uZmlnIC0gYXBwbHkgY29uZmlndXJhdGlvbiB0byB0aGUgc3ViY2hhbm5lbFxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDA4LSAqL1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDA5OmludCBjaW9fY29tbWl0X2NvbmZpZyhzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDEwLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDE5LVxcdFxcdC8qIGNvcHkgZGVzaXJlZCBjaGFuZ2VzIHRvIGxvY2FsIHNjaGliICovXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0MjA6XFx0XFx0Y2lvX2FwcGx5X2NvbmZpZyhzY2gsIFxcdTAwMjZzY2hpYik7XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00MjEtXFx0XFx0Y2NvZGUgPSBtc2NoKHNjaC1cXHUwMDNlc2NoaWQsIFxcdTAwMjZzY2hpYik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQyOC1cXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQyOTpcXHRcXHRcXHRpZiAoY2lvX2NoZWNrX2NvbmZpZyhzY2gsIFxcdTAwMjZzY2hpYikpIHtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQzMC1cXHRcXHRcXHRcXHQvKiBjb21taXQgY2hhbmdlcyBmcm9tIGxvY2FsIHNjaGliICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ1MC19XFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYzo0NTE6RVhQT1JUX1NZTUJPTF9HUEwoY2lvX2NvbW1pdF9jb25maWcpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDUyLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDUzLS8qKlxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDU0OiAqIGNpb191cGRhdGVfc2NoaWIgLSBQZXJmb3JtIHN0c2NoIGFuZCB1cGRhdGUgc2NoaWIgaWYgc3ViY2hhbm5lbCBpcyB2YWxpZC5cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ1NS0gKiBAc2NoOiBzdWJjaGFubmVsIG9uIHdoaWNoIHRvIHBlcmZvcm0gc3RzY2hcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDU3LSAqL1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDU4OmludCBjaW9fdXBkYXRlX3NjaGliKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NTkte1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NzEtfVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDcyOkVYUE9SVF9TWU1CT0xfR1BMKGNpb191cGRhdGVfc2NoaWIpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDczLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDc0LS8qKlxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDc1OiAqIGNpb19lbmFibGVfc3ViY2hhbm5lbCAtIGVuYWJsZSBhIHN1YmNoYW5uZWwuXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00NzYtICogQHNjaDogc3ViY2hhbm5lbCB0byBiZSBlbmFibGVkXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ3OC0gKi9cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ3OTppbnQgY2lvX2VuYWJsZV9zdWJjaGFubmVsKHN0cnVjdCBzdWJjaGFubmVsICpzY2gsIHUzMiBpbnRwYXJtKVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDgwLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDg3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmM6NDg4OlxcdGlmIChjaW9fdXBkYXRlX3NjaGliKHNjaCkpXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy00ODktXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jLTQ5NC1cXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjQ5NTpcXHRyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpO1xcbmRyaXZlcnMvczM5MC9jaW8vY2lvLmMtNDk2LVxcdGlmIChyZXQgPT0gLUVJTykge1xcbi0tXFxuZHJpdmVycy9zMzkwL2Npby9jaW8uYy01MDEtXFx0XFx0c2NoLVxcdTAwM2Vjb25maWcuY3NlbnNlID0gMDtcXG5kcml2ZXJzL3MzOTAvY2lvL2Npby5jOjUwMjpcXHRcXHRyZXQgPSBjaW9fY29tbWl0X2NvbmZpZyhzY2gpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDoxMjo0OS45ODIwMTAyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDA2NjcyNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbnRleHQgZm9yIGBkcml2ZXJzL3MzOTBgLiBBIHF1aWNrIHBlZWsgYXQgYGRyaXZlcnMvTWFrZWZpbGVgIGNvbmZpcm1zIHRoZSBleHBlY3RlZCBkZXBlbmRlbmN5OiBgb2JqLSQoQ09ORklHX1MzOTApICs9IHMzOTAvYC4gQW5kIGBhcmNoL3MzOTAvS2NvbmZpZ2AgZGVmaW5lcyBgQ09ORklHX1MzOTBgLiBPbiBteSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBhbWQ2NCAoeDg2XzY0KSwgYENPTkZJR19TMzkwYCBpcyB1bmVxdWl2b2NhbGx5IGZhbHNlLCBwcmV2ZW50aW5nIHRoZSBidWlsZCBvZiBgZHJpdmVycy9zMzkwL2AuIE1vcmVvdmVyLCB0aGUgaGVhZGVyIGZpbGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oYCBtYWtlcyBpdCBjbGVhciB0aGlzIGlzIHMzOTAtc3BlY2lmaWMgY29kZS5cblxuTm93LCBsZXQncyBhcHBseSB0aGUgZnV6emluZyBjcml0ZXJpYS4gUkVBQ0hBQklMSVRZIElTIFBBUkFNT1VOVDsgbW9kaWZpZWQgY29kZSBtdXN0IGJlIHJlYWNoYWJsZS4gVGhlIG5lZ2F0aXZlIGNyaXRlcmlvbiB0ZWxscyBtZSB0aGF0IGNvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IG11c3QgKm5vdCogYmUgZnV6emVkLiBNeSB0YXJnZXQgaXMgYW1kNjQuXG5cbkxvb2tpbmcgYXQgdGhlIGxpc3Qgb2YgYWxsIG1vZGlmaWVkIGZpbGVzOlxuLSBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmhgXG4tIGBkcml2ZXJzL3MzOTAvY2lvL2Noc2MuY2Bcbi0gYGRyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guY2Bcbi0gYGRyaXZlcnMvczM5MC9jaW8vY21mLmNgXG4tIGBkcml2ZXJzL3MzOTAvY2lvL3FkaW8uaGBcbi0gYGRyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmNgXG4tIGBkcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuY2Bcbi0gYGRyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmNgXG4tIGBkcml2ZXJzL3MzOTAvY2lvL3NjbS5jYFxuXG5FdmVyeSBzaW5nbGUgZmlsZSByZXNpZGVzIGluIGVpdGhlciBgYXJjaC9zMzkwYCBvciBgZHJpdmVycy9zMzkwYC4gVGhpcyBzY3JlYW1zIFwiczM5MCBhcmNoaXRlY3R1cmUgb25seS5cIiBUaGVzZSBmaWxlcyBhcmUgKm5vdCogY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIGFtZDY0LlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiB3YXJyYW50IGZ1enppbmcuIFRoZSBvdXRjb21lIGlzOiBgV29ydGhGdXp6aW5nID0gZmFsc2VgLCBgRW5hYmxlQ29uZmlncyA9IFtdYCwgYW5kIGBGb2N1c1N5bWJvbHMgPSBbXWAuIE15IHJlYXNvbmluZyBpcyBzb2xpZDogdGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIGNvZGUgc3BlY2lmaWMgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBhbmQgaXMgdGhlcmVmb3JlIHVucmVhY2hhYmxlIG9uIGFtZDY0LlxuXG5BcyBhIGZpbmFsIHNhbml0eSBjaGVjaywgYSBxdWljayBzd2VlcCBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGF0ICpvbmx5KiBzMzkwLXNwZWNpZmljIGZpbGVzIGFyZSBtb2RpZmllZCwgYW5kIG5vIGdlbmVyaWMgaGVhZGVycyBvciBhcmNoLWFnbm9zdGljIGZpbGVzIHdlcmUgdG91Y2hlZC4gVGhlIGluaXRpYWwgYW5hbHlzaXMgaG9sZHMuIFRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIGNhbiBub3cgYmUgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU1NiwiT3V0cHV0VG9rZW5zIjoxMTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6MTI6NTUuMzg4Njg2Nzk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgczM5MC1zcGVjaWZpYyBtZW1vcnkgYWxsb2NhdGlvbiBoZWxwZXJzIGFuZCB0aGUgczM5MCBDaGFubmVsIEkvTyAoQ0lPKSBzdWJzeXN0ZW0gKGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oIGFuZCBkcml2ZXJzL3MzOTAvY2lvLyopLiBUaGVzZSBmaWxlcyBhcmUgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgYXJlIG5vdCBjb21waWxlZCBvciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHMzOTAtc3BlY2lmaWMgbWVtb3J5IGFsbG9jYXRpb24gaGVscGVycyBhbmQgdGhlIHMzOTAgQ2hhbm5lbCBJL08gKENJTykgc3Vic3lzdGVtIChhcmNoL3MzOTAvaW5jbHVkZS9hc20vaWRhbHMuaCBhbmQgZHJpdmVycy9zMzkwL2Npby8qKS4gVGhlc2UgZmlsZXMgYXJlIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgYW5kIGFyZSBub3QgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDoxMjo1NS4zODg3MjAxMzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflownkvkn[1] Phase: Running StartedAt: 2026-09-07 14:13:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownkvkn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 14:13:06 +0000 UTC FinishedAt: 2026-09-07 14:13:21 +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,}