Name: series-workflow8s7w4 Phase: Failed StartedAt: 2026-09-14 22:44:35 +0000 UTC FinishedAt: 2026-09-14 23:35:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s7w4[0] Phase: Succeeded StartedAt: 2026-09-14 22:44:35 +0000 UTC FinishedAt: 2026-09-14 23:34:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s7w4[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 22:44:35 +0000 UTC FinishedAt: 2026-09-14 23:34:53 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBtb2RpZmllcyB0aGUgZmJuaWMgKE1ldGEgQVNJQyBOSUMpIGFuZCBibnh0IChCcm9hZGNvbSBOZXRYdHJlbWUgTklDKSBkcml2ZXJzLCBib3RoIG9mIHdoaWNoIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgQVNJQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBjaGFuZ2VzIGluIGluY2x1ZGUvbGludXgvZXRodG9vbC5oIGFuZCBuZXQvZXRodG9vbC9jb21tb24uaCBpbnRyb2R1Y2UgYW5kIGNoZWNrIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHNvIHRoYXQgZHJpdmVycyBjYW4gb3B0IGluIHRvIGhvbGRpbmcgcnRubF9sb2NrIGR1cmluZyBzZWxmLXRlc3Q7IHRoaXMgZmxhZyBpcyBleGNsdXNpdmVseSBzZXQgYnkgYm54dCBhbmQgZmJuaWMuIEZvciBhbGwgcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiB2aXJ0aW8tbmV0LCBkdW1teSwgdmV0aCwgbmV0ZGV2c2ltKSwgdGhpcyBmbGFnIGlzIG5ldmVyIHNldCBhbmQgdGhlIGNoZWNrIGV2YWx1YXRlcyB0byAwIChpZGVudGljYWwgdG8gcHJldmlvdXMgYmVoYXZpb3IpLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgZXhpc3QgdG8gd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU5ODVjY2Y5NjRjZTRhNDUxYjc4ZjNiYWJjMjM2ZmI2ZDg0ZTcxMDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMzozMTo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuY1xuaW5kZXggNjJiYzljYWU2MTNjMy4uNjIyZTg5NTg3ZTVkYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcbkBAIC01NzMzLDcgJiM0Mzs1NzMzLDggQEAgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJueHRfZXRodG9vbF9vcHMgPSB7XG4gXHQub3BfbmVlZHNfcnRubFx0XHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxuIFx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0UgfFxuLVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MsXG4mIzQzO1x0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1NfSVJRIHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbkBAIC05NzQsNiAmIzQzOzk3NCw3IEBAIGVudW0ge1xuIC8qIFBVTCBVc2VyIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgRkJOSUNfQ1NSX1NUQVJUX1BVTF9VU0VSXHQweDMxMDAwXHQvKiBDU1Igc2VjdGlvbiBkZWxpbWl0ZXIgKi9cbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR1x0MHgzMTAzZFx0XHQvKiAweGM0MGY0ICovXG4mIzQzOyNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIX01PREVcdENTUl9CSVQoMjApXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hcdENTUl9CSVQoMTkpXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfQk1FXHRcdENTUl9CSVQoMTgpXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfUkRFX0FUVFJcdENTUl9HRU5NQVNLKDE3LCAxNSlcbkBAIC0xMjE1LDYgJiM0MzsxMjE2LDEwIEBAIGVudW0ge1xuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0xFTl9NQVNLXHRERVNDX0dFTk1BU0soNjMsIDQ4KVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVx0XHRERVNDX0JJVCg0NilcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcdERFU0NfR0VOTUFTSyg0NSwgMylcbiYjNDM7LyogU2V0IHdpdGggRldfQ01QTCB3aGVuIHRoZSBGVyBjb21wbGV0ZWQgYSBkZXNjcmlwdG9yIHdpdGhvdXQgc3VjY2Vzc2Z1bGx5XG4mIzQzOyAqIHByb2Nlc3NpbmcgaXQgKGUuZy4gYSBtYWlsYm94IERNQSBlcnJvcik7IHRoZSBjb21wbGV0aW9uIGhhcyBubyB2YWxpZCBkYXRhLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSXHRERVNDX0JJVCgyKVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUExcdERFU0NfQklUKDEpXG4gI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfSE9TVF9DTVBMXHRERVNDX0JJVCgwKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcbmluZGV4IDNjNDU2M2M4ZjQwM2YuLjZlZGZhMGFhNjlmMTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcbkBAIC01MzksOCAmIzQzOzUzOSw4IEBAIHN0YXRpYyB2b2lkIGZibmljX2RiZ19md19tYnhfZGlzcGxheShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsXG4gXHQvKiBHZW5lcmF0ZSBoZWFkZXIgKi9cbiBcdHNlcV9wdXRzKHMsIG1ieF9pZHggPT0gRkJOSUNfSVBDX01CWF9SWF9JRFggPyBcJiMzNDtSeFxcblwmIzM0OyA6IFwmIzM0O1R4XFxuXCYjMzQ7KTtcbiBcbi1cdHNlcV9wcmludGYocywgXCYjMzQ7UmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZFxcblwmIzM0Oyxcbi1cdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwpO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7UmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZCByZXNwX2Vycm9yOiAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwsIG1ieC1cdTAwM2VyZXNwX2Vycm9yKTtcbiBcbiBcdHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksIFwmIzM0OyUzcyAlLTRzICVzICUtMTJzICVzICUtM3MgJS0xNnNcXG5cJiMzNDssXG4gXHRcdCBcJiMzNDtJZHhcJiMzNDssIFwmIzM0O0xlblwmIzM0OywgXCYjMzQ7RVwmIzM0OywgXCYjMzQ7QWRkclwmIzM0OywgXCYjMzQ7RlwmIzM0OywgXCYjMzQ7SFwmIzM0OywgXCYjMzQ7UmF3XCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXG5pbmRleCAwZTQ3MDg4ZWM0NGJhLi40MjNmMTc5YzlkNDc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXG5AQCAtMjAyNSw3ICYjNDM7MjAyNSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcbiBcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbiBcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG4tXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbiBcdC5nZXRfZHJ2aW5mb1x0XHRcdD0gZmJuaWNfZ2V0X2RydmluZm8sXG4gXHQuZ2V0X3JlZ3NfbGVuXHRcdFx0PSBmYm5pY19nZXRfcmVnc19sZW4sXG4gXHQuZ2V0X3JlZ3NcdFx0XHQ9IGZibmljX2dldF9yZWdzLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuaW5kZXggMjgzZDI1ZmFlNzllNy4uNmQ3ZWI4NDc5ZWRmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5AQCAtNjAsOCAmIzQzOzYwLDE1IEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9yZXNldF9kZXNjX3Jpbmcoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgbWJ4X2lkeClcbiBcdCAqL1xuIFx0c3dpdGNoIChtYnhfaWR4KSB7XG4gXHRjYXNlIEZCTklDX0lQQ19NQlhfUlhfSURYOlxuJiM0MztcdFx0LyogQ2xlYXJpbmcgQk1FIGJsb2NrcyB0aGUgZGV2aWNlIGZyb20gd3JpdGluZyB0byB0aGUgaG9zdFxuJiM0MztcdFx0ICogYnV0IGxlYXZlcyB0aGUgcmVxdWVzdHMgcGFya2VkIGluIHRoZSB3cml0ZSBwaXBlbGluZS4gVGhlXG4mIzQzO1x0XHQgKiB3cml0ZSBwYXRoIG9ubHkgY2xlYXJzIG91dHN0YW5kaW5nIHJlcXVlc3RzIHdoZW4gYm90aCBGTFVTSFxuJiM0MztcdFx0ICogYW5kIEZMVVNIX01PREUgYXJlIHNldDsgRkxVU0hfTU9ERSBsZXRzIHRoZW0gZHJhaW4gd2l0aG91dFxuJiM0MztcdFx0ICogbGFuZGluZyBvbiB0aGUgaG9zdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHR3cjMyKGZiZCwgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHLFxuLVx0XHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCk7XG4mIzQzO1x0XHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCB8XG4mIzQzO1x0XHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEZCTklDX0lQQ19NQlhfVFhfSURYOlxuIFx0XHR3cjMyKGZiZCwgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVJfQ0ZHLFxuQEAgLTI4NSw2ICYjNDM7MjkyLDEyIEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3R4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRpZiAoIShkZXNjIFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpXG4gXHRcdFx0YnJlYWs7XG4gXG4mIzQzO1x0XHRpZiAoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikge1xuJiM0MztcdFx0XHR0eF9tYngtXHUwMDNlcmVzcF9lcnJvciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKGZiZC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O0ZXIGNvbXBsZXRlZCBhIFR4IG1haWxib3ggcmVxdWVzdCB3aXRoIGFuIGVycm9yXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGZibmljX21ieF91bm1hcF9hbmRfZnJlZV9tc2coZmJkLCBGQk5JQ19JUENfTUJYX1RYX0lEWCwgaGVhZCk7XG4gXG4gXHRcdGhlYWQmIzQzOyYjNDM7O1xuQEAgLTE2NjYsNiAmIzQzOzE2NzksMTMgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gXHRcdGlmICghKGRlc2MgXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19DTVBMKSlcbiBcdFx0XHRicmVhaztcbiBcbiYjNDM7XHRcdGlmIChkZXNjIFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSKSB7XG4mIzQzO1x0XHRcdHJ4X21ieC1cdTAwM2VyZXNwX2Vycm9yJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoZmJkLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7RlcgcmVwb3J0ZWQgYW4gZXJyb3Igb24gYW4gUnggbWFpbGJveCBtZXNzYWdlOyBkcm9wcGluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gbmV4dF9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZmJkLVx1MDAzZWRldiwgcnhfbWJ4LVx1MDAzZWJ1Zl9pbmZvW2hlYWRdLmFkZHIsXG4gXHRcdFx0XHRcdEZCTklDX1JYX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcbiBcbkBAIC0xNzMzLDcgJiM0MzsxNzUzLDkgQEAgdm9pZCBmYm5pY19tYnhfcG9sbChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4gXHRzdHJ1Y3QgZmJuaWNfZndfbWJ4ICp0eF9tYnggPSBcdTAwMjZmYmQtXHUwMDNlbWJ4W0ZCTklDX0lQQ19NQlhfVFhfSURYXTtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfZndfbWJ4ICpyeF9tYnggPSBcdTAwMjZmYmQtXHUwMDNlbWJ4W0ZCTklDX0lQQ19NQlhfUlhfSURYXTtcbiBcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgJiM0MzsgMTAgKiBIWiAmIzQzOyAxO1xuJiM0MztcdHU2NCB0eF9yZXNwX2Vycm9yLCByeF9yZXNwX2Vycm9yO1xuIFx0aW50IGVyciwgaTtcbiBcbiBcdGRvIHtcbkBAIC0xNzY0LDYgJiM0MzsxNzg2LDkgQEAgaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiBcdCAqIG1nbXQudmVyc2lvbiBvbmNlIHdlIGdldCB0aGUgYWN0dWFsIHZlcnNpb24gZnJvbSB0aGUgZmlybXdhcmVcbiBcdCAqIGluIHRoZSBjYXBhYmlsaXRpZXMgcmVxdWVzdCBtZXNzYWdlLlxuIFx0ICovXG4mIzQzO3NlbmRfY2FwX3JlcTpcbiYjNDM7XHR0eF9yZXNwX2Vycm9yID0gdHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3I7XG4mIzQzO1x0cnhfcmVzcF9lcnJvciA9IHJ4X21ieC1cdTAwM2VyZXNwX2Vycm9yO1xuIFx0ZXJyID0gZmJuaWNfZndfeG1pdF9zaW1wbGVfbXNnKGZiZCwgRkJOSUNfVExWX01TR19JRF9IT1NUX0NBUF9SRVEpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBjbGVhbl9tYng7XG5AQCAtMTc4MSw5ICYjNDM7MTgwNiwyNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRtc2xlZXAoMjApO1xuIFx0XHRmYm5pY19tYnhfcG9sbChmYmQpO1xuIFxuJiM0MztcdFx0LyogQSB2YWxpZCBjYXBhYmlsaXRpZXMgcmVzcG9uc2UgZW5kcyB0aGUgcG9sbC4gQ2hlY2sgaXRcbiYjNDM7XHRcdCAqIGJlZm9yZSB0aGUgRldfRVJSIHJldHJ5IGJlbG93IHNvIGEgcmVzcG9uc2UgcGFyc2VkIGluIHRoZVxuJiM0MztcdFx0ICogc2FtZSBwb2xsIGFzIGFuIHVucmVsYXRlZCBGV19FUlIgaXMgbm90IGRpc2NhcmRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGZiZC1cdTAwM2Vmd19jYXAucnVubmluZy5tZ210LnZlcnNpb24gXHUwMDNlPSBNSU5fRldfVkVSX0NPREUpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0Lyogc2V0IGVyciwgYnV0IHdhaXQgdGlsbCBtZ210LnZlcnNpb24gY2hlY2sgdG8gcmVwb3J0IGl0ICovXG4tXHRcdGlmICghdGltZV9pc19hZnRlcl9qaWZmaWVzKHRpbWVvdXQpKVxuJiM0MztcdFx0aWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpIHtcbiBcdFx0XHRlcnIgPSAtRVRJTUVET1VUO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBUaGUgRlcgY2FuIGZsYWcgb3VyIGNhcGFiaWxpdGllcyByZXF1ZXN0IChUeCkgb3IgaXRzXG4mIzQzO1x0XHQgKiByZXNwb25zZSAoUngpIHdpdGggRldfRVJSLCBpbiB3aGljaCBjYXNlIGl0IHByb2R1Y2VkIG5vXG4mIzQzO1x0XHQgKiB1c2FibGUgcmVzcG9uc2UuIFRoZSByaW5nIGlzIG5vdCB3ZWRnZWQsIHNvIHJlLWlzc3VlIHRoZVxuJiM0MztcdFx0ICogcmVxdWVzdCBpbnN0ZWFkIG9mIHNwaW5uaW5nIHVudGlsIHRoZSB0aW1lb3V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3IgIT0gdHhfcmVzcF9lcnJvciB8fFxuJiM0MztcdFx0ICAgIHJ4X21ieC1cdTAwM2VyZXNwX2Vycm9yICE9IHJ4X3Jlc3BfZXJyb3IpXG4mIzQzO1x0XHRcdGdvdG8gc2VuZF9jYXBfcmVxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG5pbmRleCBkODQ3MjNlNGNmYTM2Li41Zjk5NjkyNDdlMzA1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbkBAIC0xMyw2ICYjNDM7MTMsNyBAQCBzdHJ1Y3QgZmJuaWNfdGx2X21zZztcbiBcbiBzdHJ1Y3QgZmJuaWNfZndfbWJ4IHtcbiBcdHU4IHJlYWR5LCBoZWFkLCB0YWlsO1xuJiM0MztcdHU2NCByZXNwX2Vycm9yO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZibmljX3Rsdl9tc2dcdCptc2c7XG4gXHRcdGRtYV9hZGRyX3RcdFx0YWRkcjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuaW5kZXggOGI5YmM5ZThlYTU2Yy4uYzY2OThlMzAwMmExMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcbkBAIC00MzQsNiAmIzQzOzQzNCw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZmJkLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfbmV0ICpmYm47XG4gXG4gXHRpZiAoZmJuaWNfaW5pdF9mYWlsdXJlKGZiZCkpXG4gXHRcdGdvdG8gbnVsbF91Y19hZGRyO1xuQEAgLTQ0MSwxMSAmIzQzOzQ0MiwxNiBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cnRubF9sb2NrKCk7XG4gXHRuZXRkZXZfbG9jayhuZXRkZXYpO1xuIFxuJiM0MztcdGZibiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuIFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuIFxuIFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiBcbiYjNDM7XHQvKiBUaGUgSVJRcyBhcmUgYWJvdXQgdG8gYmUgZnJlZWQsIHNvIGRyb3AgdGhlIG5hcGkgdmVjdG9yIGNvdW50ICovXG4mIzQzO1x0ZmJuLVx1MDAzZW51bV9uYXBpID0gMDtcbiYjNDM7XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4gXHRydG5sX3VubG9jaygpO1xuIFxuQEAgLTUwOCwxNiAmIzQzOzUxNCwyMCBAQCBzdGF0aWMgaW50IF9fZmJuaWNfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdGlmIChmYm5pY19pbml0X2ZhaWx1cmUoZmJkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0bmV0ZGV2X2xvY2sobmV0ZGV2KTtcbiYjNDM7XG4gXHRmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuIFx0LyogUmVzZXQgdGhlIHF1ZXVlcyBpZiBuZWVkZWQgKi9cbiBcdGZibmljX3Jlc2V0X3F1ZXVlcyhmYm4sIGZibi1cdTAwM2VudW1fdHhfcXVldWVzLCBmYm4tXHUwMDNlbnVtX3J4X3F1ZXVlcyk7XG4gXG4tXHRydG5sX2xvY2soKTtcbi1cdG5ldGRldl9sb2NrKG5ldGRldik7XG4tXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiBcdFx0ZXJyID0gX19mYm5pY19vcGVuKGZibik7XG4mIzQzO1x0XHQvKiBPbiBmYWlsdXJlIHRoZSB2ZWN0b3JzIGFyZSBmcmVlZCwgc28gZHJvcCB0aGUgY291bnQgKi9cbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGZibi1cdTAwM2VudW1fbmFwaSA9IDA7XG4mIzQzO1x0fVxuIFxuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jXG5pbmRleCA0MDFmOGI4YWUxY2FlLi5lOTMxNzRmYzEyMzlmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jXG5AQCAtNyw2ICYjNDM7Nyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9yeF9xdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwLmhcdTAwM2VcbkBAIC0xNzY4LDcgJiM0MzsxNzY5LDcgQEAgaW50IGZibmljX2FsbG9jX25hcGlfdmVjdG9ycyhzdHJ1Y3QgZmJuaWNfbmV0ICpmYm4pXG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogQWxsb2NhdGUgMSBUeCBxdWV1ZSBwZXIgbmFwaSB2ZWN0b3IgKi9cbi1cdGlmIChudW1fbmFwaSBcdTAwM2MgRkJOSUNfTUFYX1RYUVMgXHUwMDI2XHUwMDI2IG51bV9uYXBpID09IG51bV90eCAmIzQzOyBudW1fcngpIHtcbiYjNDM7XHRpZiAobnVtX25hcGkgXHUwMDNjPSBGQk5JQ19NQVhfVFhRUyBcdTAwMjZcdTAwMjYgbnVtX25hcGkgPT0gbnVtX3R4ICYjNDM7IG51bV9yeCkge1xuIFx0XHR3aGlsZSAobnVtX3R4KSB7XG4gXHRcdFx0ZXJyID0gZmJuaWNfYWxsb2NfbmFwaV92ZWN0b3IoZmJkLCBmYm4sXG4gXHRcdFx0XHRcdFx0ICAgICAgbnVtX25hcGksIHZfaWR4LFxuQEAgLTI4MjksNiAmIzQzOzI4MzAsMTcgQEAgdm9pZCBmYm5pY19uYXBpX2RlcGxldGlvbl9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZmJuaWNfd3JmbChmYmQpO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJucyB0aGUgbmFwaSB2ZWN0b3Igc2VydmljaW5nIGFuIFJ4IHF1ZXVlLCBvciBOVUxMIGlmIHRoZSBkYXRhcGF0aFxuJiM0MzsgKiBpcyB0b3JuIGRvd24uICBUaGUgYXNzb2NpYXRpb24gaXMgcHVibGlzaGVkIGJ5IGZibmljX3NldF9uZXRpZl9uYXBpKClcbiYjNDM7ICogYW5kIGNsZWFyZWQgYnkgZmJuaWNfcmVzZXRfbmV0aWZfbmFwaSgpLCBib3RoIHVuZGVyIHRoZSBpbnN0YW5jZSBsb2NrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvciAqZmJuaWNfcnhxX252KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpZHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBfX25ldGlmX2dldF9yeF9xdWV1ZShkZXYsIGlkeCktXHUwMDNlbmFwaTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5hcGkgPyBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGZibmljX25hcGlfdmVjdG9yLCBuYXBpKSA6IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBmYm5pY19xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX2NvbmZpZyAqcWNmZyxcbiBcdFx0XHRcdCB2b2lkICpxbWVtLCBpbnQgaWR4KVxuQEAgLTI4NDEsOCAmIzQzOzI4NTMsMTYgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRyZXR1cm4gZmJuaWNfYWxsb2NfcXRfcGFnZV9wb29scyhmYm4sIHF0LCBpZHgpO1xuIFxuJiM0MztcdC8qIEEgZmFpbGVkIFBDSWUgcmVjb3Zlcnkgb3IgcmVzdW1lIGNhbiBsZWF2ZSB0aGUgZGF0YXBhdGggdG9ybiBkb3duXG4mIzQzO1x0ICogd2hpbGUgbmV0aWZfcnVubmluZygpIGlzIHN0aWxsIHRydWUuICBUaGlzIG5kbyBydW5zIGJlZm9yZVxuJiM0MztcdCAqIG5ldGRldl9yeF9xdWV1ZV9yZXN0YXJ0KCkgY2hlY2tzIG5ldGlmX3J1bm5pbmcoKSwgc28gYmFpbCBvdXRcbiYjNDM7XHQgKiByYXRoZXIgdGhhbiB0b3VjaGluZyByaW5ncyBhbmQgdmVjdG9ycyB0aGF0IGFyZSBhbHJlYWR5IGZyZWVkLlxuJiM0MztcdCAqL1xuJiM0MztcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcbiYjNDM7XHRpZiAoIW52KVxuJiM0MztcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiYjNDM7XG4gXHRyZWFsID0gY29udGFpbmVyX29mKGZibi1cdTAwM2VyeFtpZHhdLCBzdHJ1Y3QgZmJuaWNfcV90cmlhZCwgY21wbCk7XG4tXHRudiA9IGZibi1cdTAwM2VuYXBpW2lkeCAlIGZibi1cdTAwM2VudW1fbmFwaV07XG4gXG4gXHRmYm5pY19yaW5nX2luaXQoXHUwMDI2cXQtXHUwMDNlc3ViMCwgcmVhbC1cdTAwM2VzdWIwLmRvb3JiZWxsLCByZWFsLVx1MDAzZXN1YjAucV9pZHgsXG4gXHRcdFx0cmVhbC1cdTAwM2VzdWIwLmZsYWdzKTtcbkBAIC0yODkzLDcgJiM0MzsyOTEzLDcgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3RydWN0IGZibmljX3FfdHJpYWQgKnJlYWw7XG4gXG4gXHRyZWFsID0gY29udGFpbmVyX29mKGZibi1cdTAwM2VyeFtpZHhdLCBzdHJ1Y3QgZmJuaWNfcV90cmlhZCwgY21wbCk7XG4tXHRudiA9IGZibi1cdTAwM2VuYXBpW2lkeCAlIGZibi1cdTAwM2VudW1fbmFwaV07XG4mIzQzO1x0bnYgPSBmYm5pY19yeHFfbnYoZGV2LCBpZHgpO1xuIFxuIFx0ZmJuaWNfYWdncmVnYXRlX3JpbmdfYmRxX2NvdW50ZXJzKGZibiwgXHUwMDI2cmVhbC1cdTAwM2VzdWIwKTtcbiBcdGZibmljX2FnZ3JlZ2F0ZV9yaW5nX2JkcV9jb3VudGVycyhmYm4sIFx1MDAyNnJlYWwtXHUwMDNlc3ViMSk7XG5AQCAtMjkxNSw3ICYjNDM7MjkzNSw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxuIFx0aW50IGVycjtcbiBcbiBcdHJlYWwgPSBjb250YWluZXJfb2YoZmJuLVx1MDAzZXJ4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTtcbi1cdG52ID0gZmJuLVx1MDAzZW5hcGlbaWR4ICUgZmJuLVx1MDAzZW51bV9uYXBpXTtcbiYjNDM7XHRudiA9IGZibmljX3J4cV9udihkZXYsIGlkeCk7XG4gXHRmYm5pY19kYmdfbnZfZXhpdChudik7XG4gXG4gXHRuYXBpX2Rpc2FibGVfbG9ja2VkKFx1MDAyNm52LVx1MDAzZW5hcGkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbmluZGV4IDI1MzYwMGMwZWNjZGYuLmM0YzljZTAzODYxMTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbkBAIC05NDQsNiAmIzQzOzk0NCw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTVx0QklUKDYpXG4gI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTXHRcdEJJVCg3KVxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LXHRcdEJJVCg4KVxuJiM0MzsjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXHRcdEJJVCg5KVxuIFxuIC8qKlxuICAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zXG5AQCAtOTgxLDYgJiM0Mzs5ODIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gICpcdCAtIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoKVxuICAqXHQgLSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKClcbiAgKlx0IC0gZXRodG9vbF9vcF9nZXRfbGluaygpIChzeW5jcyBsaW5rIHdhdGNoIHVuZGVyIHJ0bmxfbG9jaylcbiYjNDM7ICpcdCAtIG5ldGlmX29wZW4oKSAvIG5ldGlmX2Nsb3NlKCkgKHVzZWQgYnkgQHNlbGZfdGVzdClcbiAgKlxuICAqIEBnZXRfZHJ2aW5mbzogUmVwb3J0IGRyaXZlci9kZXZpY2UgaW5mb3JtYXRpb24uIE1vZGVybiBkcml2ZXJzIG5vXG4gICpcdGxvbmdlciBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLiBNb3N0IGZpZWxkcyBhcmVcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uaCBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5pbmRleCA0ZTUzNTZlMjZmNDAwLi5hZTMyZTdmZGI1NjNjIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5AQCAtMTYzLDYgJiM0MzsxNjMsOCBAQCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcbiBcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xuIFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxuIFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcbiYjNDM7XHRjYXNlIEVUSFRPT0xfVEVTVDpcbiYjNDM7XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG4gXHR9XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgbW9kaWZpZXMgdGhlIGZibmljIChNZXRhIEFTSUMgTklDKSBhbmQgYm54dCAoQnJvYWRjb20gTmV0WHRyZW1lIE5JQykgZHJpdmVycywgYm90aCBvZiB3aGljaCByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIEFTSUMgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBUaGUgY2hhbmdlcyBpbiBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBhbmQgbmV0L2V0aHRvb2wvY29tbW9uLmggaW50cm9kdWNlIGFuZCBjaGVjayB0aGUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZyBzbyB0aGF0IGRyaXZlcnMgY2FuIG9wdCBpbiB0byBob2xkaW5nIHJ0bmxfbG9jayBkdXJpbmcgc2VsZi10ZXN0OyB0aGlzIGZsYWcgaXMgZXhjbHVzaXZlbHkgc2V0IGJ5IGJueHQgYW5kIGZibmljLiBGb3IgYWxsIHJlYWNoYWJsZSBuZXR3b3JrIGRldmljZXMgKGUuZy4gdmlydGlvLW5ldCwgZHVtbXksIHZldGgsIG5ldGRldnNpbSksIHRoaXMgZmxhZyBpcyBuZXZlciBzZXQgYW5kIHRoZSBjaGVjayBldmFsdWF0ZXMgdG8gMCAoaWRlbnRpY2FsIHRvIHByZXZpb3VzIGJlaGF2aW9yKS4gVGhlcmVmb3JlLCBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGV4aXN0IHRvIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOTg1Y2NmOTY0Y2U0YTQ1MWI3OGYzYmFiYzIzNmZiNmQ4NGU3MTA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjM6MzE6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYwppbmRleCA2MmJjOWNhZTYxM2MzLi42MjJlODk1ODdlNWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMKQEAgLTU3MzMsNyAmIzQzOzU3MzMsOCBAQCBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54dF9ldGh0b29sX29wcyA9IHsKIAkub3BfbmVlZHNfcnRubAkJCT0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8CiAJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfAogCQkJCQkgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0UgfAotCQkJCQkgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MsCiYjNDM7CQkJCQkgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MgfAomIzQzOwkJCQkJICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCwKIAkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAogCQkJCSAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTIHwKIAkJCQkgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1NfSVJRIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oCmluZGV4IDY0Yjk1OGRmNzc3NDQuLmJhYmEzNDcxYmY1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaApAQCAtOTc0LDYgJiM0Mzs5NzQsNyBAQCBlbnVtIHsKIC8qIFBVTCBVc2VyIFJlZ2lzdGVycyAqLwogI2RlZmluZSBGQk5JQ19DU1JfU1RBUlRfUFVMX1VTRVIJMHgzMTAwMAkvKiBDU1Igc2VjdGlvbiBkZWxpbWl0ZXIgKi8KICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHCTB4MzEwM2QJCS8qIDB4YzQwZjQgKi8KJiM0MzsjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFCUNTUl9CSVQoMjApCiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSAlDU1JfQklUKDE5KQogI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfQk1FCQlDU1JfQklUKDE4KQogI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfUkRFX0FUVFIJQ1NSX0dFTk1BU0soMTcsIDE1KQpAQCAtMTIxNSw2ICYjNDM7MTIxNiwxMCBAQCBlbnVtIHsKICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0xFTl9NQVNLCURFU0NfR0VOTUFTSyg2MywgNDgpCiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19FT00JCURFU0NfQklUKDQ2KQogI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfQUREUl9NQVNLCURFU0NfR0VOTUFTSyg0NSwgMykKJiM0MzsvKiBTZXQgd2l0aCBGV19DTVBMIHdoZW4gdGhlIEZXIGNvbXBsZXRlZCBhIGRlc2NyaXB0b3Igd2l0aG91dCBzdWNjZXNzZnVsbHkKJiM0MzsgKiBwcm9jZXNzaW5nIGl0IChlLmcuIGEgbWFpbGJveCBETUEgZXJyb3IpOyB0aGUgY29tcGxldGlvbiBoYXMgbm8gdmFsaWQgZGF0YS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIJREVTQ19CSVQoMikKICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwJREVTQ19CSVQoMSkKICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0hPU1RfQ01QTAlERVNDX0JJVCgwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jCmluZGV4IDNjNDU2M2M4ZjQwM2YuLjZlZGZhMGFhNjlmMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jCkBAIC01MzksOCAmIzQzOzUzOSw4IEBAIHN0YXRpYyB2b2lkIGZibmljX2RiZ19md19tYnhfZGlzcGxheShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCiAJLyogR2VuZXJhdGUgaGVhZGVyICovCiAJc2VxX3B1dHMocywgbWJ4X2lkeCA9PSBGQk5JQ19JUENfTUJYX1JYX0lEWCA/ICYjMzQ7UnhcbiYjMzQ7IDogJiMzNDtUeFxuJiMzNDspOwogCi0Jc2VxX3ByaW50ZihzLCAmIzM0O1JkeTogJWQgSGVhZDogJWQgVGFpbDogJWRcbiYjMzQ7LAotCQkgICBtYngtJmd0O3JlYWR5LCBtYngtJmd0O2hlYWQsIG1ieC0mZ3Q7dGFpbCk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDtSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkIHJlc3BfZXJyb3I6ICVsbHVcbiYjMzQ7LAomIzQzOwkJICAgbWJ4LSZndDtyZWFkeSwgbWJ4LSZndDtoZWFkLCBtYngtJmd0O3RhaWwsIG1ieC0mZ3Q7cmVzcF9lcnJvcik7CiAKIAlzbnByaW50ZihoZHIsIHNpemVvZihoZHIpLCAmIzM0OyUzcyAlLTRzICVzICUtMTJzICVzICUtM3MgJS0xNnNcbiYjMzQ7LAogCQkgJiMzNDtJZHgmIzM0OywgJiMzNDtMZW4mIzM0OywgJiMzNDtFJiMzNDssICYjMzQ7QWRkciYjMzQ7LCAmIzM0O0YmIzM0OywgJiMzNDtIJiMzNDssICYjMzQ7UmF3JiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYwppbmRleCAwZTQ3MDg4ZWM0NGJhLi40MjNmMTc5YzlkNDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYwpAQCAtMjAyNSw3ICYjNDM7MjAyNSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7CiAJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHwKIAkJCQkJICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHwKIAkJCQkJICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8Ci0JCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLAomIzQzOwkJCQkJICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfAomIzQzOwkJCQkJICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCwKIAkuZ2V0X2RydmluZm8JCQk9IGZibmljX2dldF9kcnZpbmZvLAogCS5nZXRfcmVnc19sZW4JCQk9IGZibmljX2dldF9yZWdzX2xlbiwKIAkuZ2V0X3JlZ3MJCQk9IGZibmljX2dldF9yZWdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCmluZGV4IDI4M2QyNWZhZTc5ZTcuLjZkN2ViODQ3OWVkZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMKQEAgLTYwLDggJiM0Mzs2MCwxNSBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcmVzZXRfZGVzY19yaW5nKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IG1ieF9pZHgpCiAJICovCiAJc3dpdGNoIChtYnhfaWR4KSB7CiAJY2FzZSBGQk5JQ19JUENfTUJYX1JYX0lEWDoKJiM0MzsJCS8qIENsZWFyaW5nIEJNRSBibG9ja3MgdGhlIGRldmljZSBmcm9tIHdyaXRpbmcgdG8gdGhlIGhvc3QKJiM0MzsJCSAqIGJ1dCBsZWF2ZXMgdGhlIHJlcXVlc3RzIHBhcmtlZCBpbiB0aGUgd3JpdGUgcGlwZWxpbmUuIFRoZQomIzQzOwkJICogd3JpdGUgcGF0aCBvbmx5IGNsZWFycyBvdXRzdGFuZGluZyByZXF1ZXN0cyB3aGVuIGJvdGggRkxVU0gKJiM0MzsJCSAqIGFuZCBGTFVTSF9NT0RFIGFyZSBzZXQ7IEZMVVNIX01PREUgbGV0cyB0aGVtIGRyYWluIHdpdGhvdXQKJiM0MzsJCSAqIGxhbmRpbmcgb24gdGhlIGhvc3QuCiYjNDM7CQkgKi8KIAkJd3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGRywKLQkJICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0gpOwomIzQzOwkJICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0ggfAomIzQzOwkJICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hfTU9ERSk7CiAJCWJyZWFrOwogCWNhc2UgRkJOSUNfSVBDX01CWF9UWF9JRFg6CiAJCXdyMzIoZmJkLCBGQk5JQ19QVUxfT0JfVExQX0hEUl9BUl9DRkcsCkBAIC0yODUsNiAmIzQzOzI5MiwxMiBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc190eF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCkKIAkJaWYgKCEoZGVzYyAmYW1wOyBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpCiAJCQlicmVhazsKIAomIzQzOwkJaWYgKGRlc2MgJmFtcDsgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikgewomIzQzOwkJCXR4X21ieC0mZ3Q7cmVzcF9lcnJvciYjNDM7JiM0Mzs7CiYjNDM7CQkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoZmJkLSZndDtkZXYsCiYjNDM7CQkJCQkgICAgICYjMzQ7RlcgY29tcGxldGVkIGEgVHggbWFpbGJveCByZXF1ZXN0IHdpdGggYW4gZXJyb3JcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsKIAkJZmJuaWNfbWJ4X3VubWFwX2FuZF9mcmVlX21zZyhmYmQsIEZCTklDX0lQQ19NQlhfVFhfSURYLCBoZWFkKTsKIAogCQloZWFkJiM0MzsmIzQzOzsKQEAgLTE2NjYsNiAmIzQzOzE2NzksMTMgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiAJCWlmICghKGRlc2MgJmFtcDsgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKQogCQkJYnJlYWs7CiAKJiM0MzsJCWlmIChkZXNjICZhbXA7IEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIpIHsKJiM0MzsJCQlyeF9tYngtJmd0O3Jlc3BfZXJyb3ImIzQzOyYjNDM7OwomIzQzOwkJCWRldl93YXJuX3JhdGVsaW1pdGVkKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCQkJICAgICAmIzM0O0ZXIHJlcG9ydGVkIGFuIGVycm9yIG9uIGFuIFJ4IG1haWxib3ggbWVzc2FnZTsgZHJvcHBpbmdcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG5leHRfcGFnZTsKJiM0MzsJCX0KJiM0MzsKIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZmJkLSZndDtkZXYsIHJ4X21ieC0mZ3Q7YnVmX2luZm9baGVhZF0uYWRkciwKIAkJCQkJRkJOSUNfUlhfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwogCkBAIC0xNzMzLDcgJiM0MzsxNzUzLDkgQEAgdm9pZCBmYm5pY19tYnhfcG9sbChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKQogewogCXN0cnVjdCBmYm5pY19md19tYnggKnR4X21ieCA9ICZhbXA7ZmJkLSZndDttYnhbRkJOSUNfSVBDX01CWF9UWF9JRFhdOwomIzQzOwlzdHJ1Y3QgZmJuaWNfZndfbWJ4ICpyeF9tYnggPSAmYW1wO2ZiZC0mZ3Q7bWJ4W0ZCTklDX0lQQ19NQlhfUlhfSURYXTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IDEwICogSFogJiM0MzsgMTsKJiM0MzsJdTY0IHR4X3Jlc3BfZXJyb3IsIHJ4X3Jlc3BfZXJyb3I7CiAJaW50IGVyciwgaTsKIAogCWRvIHsKQEAgLTE3NjQsNiAmIzQzOzE3ODYsOSBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKQogCSAqIG1nbXQudmVyc2lvbiBvbmNlIHdlIGdldCB0aGUgYWN0dWFsIHZlcnNpb24gZnJvbSB0aGUgZmlybXdhcmUKIAkgKiBpbiB0aGUgY2FwYWJpbGl0aWVzIHJlcXVlc3QgbWVzc2FnZS4KIAkgKi8KJiM0MztzZW5kX2NhcF9yZXE6CiYjNDM7CXR4X3Jlc3BfZXJyb3IgPSB0eF9tYngtJmd0O3Jlc3BfZXJyb3I7CiYjNDM7CXJ4X3Jlc3BfZXJyb3IgPSByeF9tYngtJmd0O3Jlc3BfZXJyb3I7CiAJZXJyID0gZmJuaWNfZndfeG1pdF9zaW1wbGVfbXNnKGZiZCwgRkJOSUNfVExWX01TR19JRF9IT1NUX0NBUF9SRVEpOwogCWlmIChlcnIpCiAJCWdvdG8gY2xlYW5fbWJ4OwpAQCAtMTc4MSw5ICYjNDM7MTgwNiwyNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKQogCQltc2xlZXAoMjApOwogCQlmYm5pY19tYnhfcG9sbChmYmQpOwogCiYjNDM7CQkvKiBBIHZhbGlkIGNhcGFiaWxpdGllcyByZXNwb25zZSBlbmRzIHRoZSBwb2xsLiBDaGVjayBpdAomIzQzOwkJICogYmVmb3JlIHRoZSBGV19FUlIgcmV0cnkgYmVsb3cgc28gYSByZXNwb25zZSBwYXJzZWQgaW4gdGhlCiYjNDM7CQkgKiBzYW1lIHBvbGwgYXMgYW4gdW5yZWxhdGVkIEZXX0VSUiBpcyBub3QgZGlzY2FyZGVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoZmJkLSZndDtmd19jYXAucnVubmluZy5tZ210LnZlcnNpb24gJmd0Oz0gTUlOX0ZXX1ZFUl9DT0RFKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQkvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi8KLQkJaWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpCiYjNDM7CQlpZiAoIXRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0aW1lb3V0KSkgewogCQkJZXJyID0gLUVUSU1FRE9VVDsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIFRoZSBGVyBjYW4gZmxhZyBvdXIgY2FwYWJpbGl0aWVzIHJlcXVlc3QgKFR4KSBvciBpdHMKJiM0MzsJCSAqIHJlc3BvbnNlIChSeCkgd2l0aCBGV19FUlIsIGluIHdoaWNoIGNhc2UgaXQgcHJvZHVjZWQgbm8KJiM0MzsJCSAqIHVzYWJsZSByZXNwb25zZS4gVGhlIHJpbmcgaXMgbm90IHdlZGdlZCwgc28gcmUtaXNzdWUgdGhlCiYjNDM7CQkgKiByZXF1ZXN0IGluc3RlYWQgb2Ygc3Bpbm5pbmcgdW50aWwgdGhlIHRpbWVvdXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0eF9tYngtJmd0O3Jlc3BfZXJyb3IgIT0gdHhfcmVzcF9lcnJvciB8fAomIzQzOwkJICAgIHJ4X21ieC0mZ3Q7cmVzcF9lcnJvciAhPSByeF9yZXNwX2Vycm9yKQomIzQzOwkJCWdvdG8gc2VuZF9jYXBfcmVxOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjVmOTk2OTI0N2UzMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmgKQEAgLTEzLDYgJiM0MzsxMyw3IEBAIHN0cnVjdCBmYm5pY190bHZfbXNnOwogCiBzdHJ1Y3QgZmJuaWNfZndfbWJ4IHsKIAl1OCByZWFkeSwgaGVhZCwgdGFpbDsKJiM0MzsJdTY0IHJlc3BfZXJyb3I7CiAJc3RydWN0IHsKIAkJc3RydWN0IGZibmljX3Rsdl9tc2cJKm1zZzsKIAkJZG1hX2FkZHJfdAkJYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jCmluZGV4IDhiOWJjOWU4ZWE1NmMuLmM2Njk4ZTMwMDJhMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYwpAQCAtNDM0LDYgJiM0Mzs0MzQsNyBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmYmQtJmd0O25ldGRldjsKJiM0MzsJc3RydWN0IGZibmljX25ldCAqZmJuOwogCiAJaWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKQogCQlnb3RvIG51bGxfdWNfYWRkcjsKQEAgLTQ0MSwxMSAmIzQzOzQ0MiwxNiBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogCXJ0bmxfbG9jaygpOwogCW5ldGRldl9sb2NrKG5ldGRldik7CiAKJiM0MzsJZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsKIAluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQluZXRkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19zdG9wKG5ldGRldik7CiAKJiM0MzsJLyogVGhlIElSUXMgYXJlIGFib3V0IHRvIGJlIGZyZWVkLCBzbyBkcm9wIHRoZSBuYXBpIHZlY3RvciBjb3VudCAqLwomIzQzOwlmYm4tJmd0O251bV9uYXBpID0gMDsKJiM0MzsKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7CiAJcnRubF91bmxvY2soKTsKIApAQCAtNTA4LDE2ICYjNDM7NTE0LDIwIEBAIHN0YXRpYyBpbnQgX19mYm5pY19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCWlmIChmYm5pY19pbml0X2ZhaWx1cmUoZmJkKSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGRldl9sb2NrKG5ldGRldik7CiYjNDM7CiAJZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCS8qIFJlc2V0IHRoZSBxdWV1ZXMgaWYgbmVlZGVkICovCiAJZmJuaWNfcmVzZXRfcXVldWVzKGZibiwgZmJuLSZndDtudW1fdHhfcXVldWVzLCBmYm4tJmd0O251bV9yeF9xdWV1ZXMpOwogCi0JcnRubF9sb2NrKCk7Ci0JbmV0ZGV2X2xvY2sobmV0ZGV2KTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJZXJyID0gX19mYm5pY19vcGVuKGZibik7CiYjNDM7CQkvKiBPbiBmYWlsdXJlIHRoZSB2ZWN0b3JzIGFyZSBmcmVlZCwgc28gZHJvcCB0aGUgY291bnQgKi8KJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZmJuLSZndDtudW1fbmFwaSA9IDA7CiYjNDM7CX0KIAogCW5ldGRldl91bmxvY2sobmV0ZGV2KTsKIAlydG5sX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguYwppbmRleCA0MDFmOGI4YWUxY2FlLi5lOTMxNzRmYzEyMzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguYwpAQCAtNyw2ICYjNDM7Nyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9xdWV1ZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9yeF9xdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wYWdlX3Bvb2wvaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGRwLmgmZ3Q7CkBAIC0xNzY4LDcgJiM0MzsxNzY5LDcgQEAgaW50IGZibmljX2FsbG9jX25hcGlfdmVjdG9ycyhzdHJ1Y3QgZmJuaWNfbmV0ICpmYm4pCiAJaW50IGVycjsKIAogCS8qIEFsbG9jYXRlIDEgVHggcXVldWUgcGVyIG5hcGkgdmVjdG9yICovCi0JaWYgKG51bV9uYXBpICZsdDsgRkJOSUNfTUFYX1RYUVMgJmFtcDsmYW1wOyBudW1fbmFwaSA9PSBudW1fdHggJiM0MzsgbnVtX3J4KSB7CiYjNDM7CWlmIChudW1fbmFwaSAmbHQ7PSBGQk5JQ19NQVhfVFhRUyAmYW1wOyZhbXA7IG51bV9uYXBpID09IG51bV90eCAmIzQzOyBudW1fcngpIHsKIAkJd2hpbGUgKG51bV90eCkgewogCQkJZXJyID0gZmJuaWNfYWxsb2NfbmFwaV92ZWN0b3IoZmJkLCBmYm4sCiAJCQkJCQkgICAgICBudW1fbmFwaSwgdl9pZHgsCkBAIC0yODI5LDYgJiM0MzsyODMwLDE3IEBAIHZvaWQgZmJuaWNfbmFwaV9kZXBsZXRpb25fY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlmYm5pY193cmZsKGZiZCk7CiB9CiAKJiM0MzsvKiBSZXR1cm5zIHRoZSBuYXBpIHZlY3RvciBzZXJ2aWNpbmcgYW4gUnggcXVldWUsIG9yIE5VTEwgaWYgdGhlIGRhdGFwYXRoCiYjNDM7ICogaXMgdG9ybiBkb3duLiAgVGhlIGFzc29jaWF0aW9uIGlzIHB1Ymxpc2hlZCBieSBmYm5pY19zZXRfbmV0aWZfbmFwaSgpCiYjNDM7ICogYW5kIGNsZWFyZWQgYnkgZmJuaWNfcmVzZXRfbmV0aWZfbmFwaSgpLCBib3RoIHVuZGVyIHRoZSBpbnN0YW5jZSBsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3IgKmZibmljX3J4cV9udihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gX19uZXRpZl9nZXRfcnhfcXVldWUoZGV2LCBpZHgpLSZndDtuYXBpOwomIzQzOwomIzQzOwlyZXR1cm4gbmFwaSA/IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3IsIG5hcGkpIDogTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGZibmljX3F1ZXVlX21lbV9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX2NvbmZpZyAqcWNmZywKIAkJCQkgdm9pZCAqcW1lbSwgaW50IGlkeCkKQEAgLTI4NDEsOCAmIzQzOzI4NTMsMTYgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIGZibmljX2FsbG9jX3F0X3BhZ2VfcG9vbHMoZmJuLCBxdCwgaWR4KTsKIAomIzQzOwkvKiBBIGZhaWxlZCBQQ0llIHJlY292ZXJ5IG9yIHJlc3VtZSBjYW4gbGVhdmUgdGhlIGRhdGFwYXRoIHRvcm4gZG93bgomIzQzOwkgKiB3aGlsZSBuZXRpZl9ydW5uaW5nKCkgaXMgc3RpbGwgdHJ1ZS4gIFRoaXMgbmRvIHJ1bnMgYmVmb3JlCiYjNDM7CSAqIG5ldGRldl9yeF9xdWV1ZV9yZXN0YXJ0KCkgY2hlY2tzIG5ldGlmX3J1bm5pbmcoKSwgc28gYmFpbCBvdXQKJiM0MzsJICogcmF0aGVyIHRoYW4gdG91Y2hpbmcgcmluZ3MgYW5kIHZlY3RvcnMgdGhhdCBhcmUgYWxyZWFkeSBmcmVlZC4KJiM0MzsJICovCiYjNDM7CW52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTsKJiM0MzsJaWYgKCFudikKJiM0MzsJCXJldHVybiAtRU5FVERPV047CiYjNDM7CiAJcmVhbCA9IGNvbnRhaW5lcl9vZihmYm4tJmd0O3J4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTsKLQludiA9IGZibi0mZ3Q7bmFwaVtpZHggJSBmYm4tJmd0O251bV9uYXBpXTsKIAogCWZibmljX3JpbmdfaW5pdCgmYW1wO3F0LSZndDtzdWIwLCByZWFsLSZndDtzdWIwLmRvb3JiZWxsLCByZWFsLSZndDtzdWIwLnFfaWR4LAogCQkJcmVhbC0mZ3Q7c3ViMC5mbGFncyk7CkBAIC0yODkzLDcgJiM0MzsyOTEzLDcgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCXN0cnVjdCBmYm5pY19xX3RyaWFkICpyZWFsOwogCiAJcmVhbCA9IGNvbnRhaW5lcl9vZihmYm4tJmd0O3J4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTsKLQludiA9IGZibi0mZ3Q7bmFwaVtpZHggJSBmYm4tJmd0O251bV9uYXBpXTsKJiM0MzsJbnYgPSBmYm5pY19yeHFfbnYoZGV2LCBpZHgpOwogCiAJZmJuaWNfYWdncmVnYXRlX3JpbmdfYmRxX2NvdW50ZXJzKGZibiwgJmFtcDtyZWFsLSZndDtzdWIwKTsKIAlmYm5pY19hZ2dyZWdhdGVfcmluZ19iZHFfY291bnRlcnMoZmJuLCAmYW1wO3JlYWwtJmd0O3N1YjEpOwpAQCAtMjkxNSw3ICYjNDM7MjkzNSw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KQogCWludCBlcnI7CiAKIAlyZWFsID0gY29udGFpbmVyX29mKGZibi0mZ3Q7cnhbaWR4XSwgc3RydWN0IGZibmljX3FfdHJpYWQsIGNtcGwpOwotCW52ID0gZmJuLSZndDtuYXBpW2lkeCAlIGZibi0mZ3Q7bnVtX25hcGldOwomIzQzOwludiA9IGZibmljX3J4cV9udihkZXYsIGlkeCk7CiAJZmJuaWNfZGJnX252X2V4aXQobnYpOwogCiAJbmFwaV9kaXNhYmxlX2xvY2tlZCgmYW1wO252LSZndDtuYXBpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKaW5kZXggMjUzNjAwYzBlY2NkZi4uYzRjOWNlMDM4NjExMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTk0NCw2ICYjNDM7OTQ0LDcgQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gewogI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU0JQklUKDYpCiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MJCUJJVCg3KQogI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksJCUJJVCg4KQomIzQzOyNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QJCUJJVCg5KQogCiAvKioKICAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zCkBAIC05ODEsNiAmIzQzOzk4Miw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHsKICAqCSAtIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoKQogICoJIC0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcygpCiAgKgkgLSBldGh0b29sX29wX2dldF9saW5rKCkgKHN5bmNzIGxpbmsgd2F0Y2ggdW5kZXIgcnRubF9sb2NrKQomIzQzOyAqCSAtIG5ldGlmX29wZW4oKSAvIG5ldGlmX2Nsb3NlKCkgKHVzZWQgYnkgQHNlbGZfdGVzdCkKICAqCiAgKiBAZ2V0X2RydmluZm86IFJlcG9ydCBkcml2ZXIvZGV2aWNlIGluZm9ybWF0aW9uLiBNb2Rlcm4gZHJpdmVycyBubwogICoJbG9uZ2VyIGhhdmUgdG8gaW1wbGVtZW50IHRoaXMgY2FsbGJhY2suIE1vc3QgZmllbGRzIGFyZQpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvY29tbW9uLmggYi9uZXQvZXRodG9vbC9jb21tb24uaAppbmRleCA0ZTUzNTZlMjZmNDAwLi5hZTMyZTdmZGI1NjNjIDEwMDY0NAotLS0gYS9uZXQvZXRodG9vbC9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9jb21tb24uaApAQCAtMTYzLDYgJiM0MzsxNjMsOCBAQCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZCkKIAkJcmV0dXJuIG9wcy0mZ3Q7b3BfbmVlZHNfcnRubCAmYW1wOyBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTOwogCWNhc2UgRVRIVE9PTF9HTElOSzoKIAkJcmV0dXJuIG9wcy0mZ3Q7b3BfbmVlZHNfcnRubCAmYW1wOyBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTks7CiYjNDM7CWNhc2UgRVRIVE9PTF9URVNUOgomIzQzOwkJcmV0dXJuIG9wcy0mZ3Q7b3BfbmVlZHNfcnRubCAmYW1wOyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVDsKIAl9CiAJcmV0dXJuIGZhbHNlOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTUyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3VpdGFiaWxpdHkgRXZhbHVhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBMZXQmIzM5O3Mgc2VlLi4uIGZpcnN0LCB0aGUgcmlzayBhc3Nlc3NtZW50LiBTdGFuZGFyZCBrZXJuZWwgbWFpbnRlbmFuY2UsIFFBLCBkZWZlbnNpdmUgc2VjdXJpdHkg4oCTIHNvdW5kcyBwcmV0dHkgYmVuaWduLiBObyBleHBsb2l0IGNyZWF0aW9uLCBqdXN0IGNoZWNraW5nIGZvciB2dWxuZXJhYmlsaXRpZXMuIEdvb2QsIGdvb2QuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEl0JiMzOTtzIHRvdWNoaW5nIGEgYnVuY2ggb2YgZmlsZXM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jYCwgYSB3aG9sZSBidW5jaCBvZiBgZmJuaWNgIGZpbGVzLCBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgLCBhbmQgYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gQWgsIHdhaXQhIFRoZSBjb3JlIG5ldCBjaGFuZ2VzIGFyZSB3aGF0IGNhdGNoZXMgbXkgZXllLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYDogYCNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGFuZCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgLCBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCB1c2VzIGl0LiBBbmQgYGJueHRfZXRodG9vbC5jYCBpcyBhZGRpbmcgdGhhdCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHRvIGBibnh0X2V0aHRvb2xfb3BzLm9wX25lZWRzX3J0bmxgLiBUaGUgYGZibmljYCBjaGFuZ2VzIGFyZSBhbHNvIHRoZXJlLgoKSG9sZCBvbiwgd2hhdCBhcmUgdGhlc2UgYGJueHRgIGFuZCBgZmJuaWNgIHRoaW5ncz8gUmlnaHQsIGBibnh0YCBpcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lIGRyaXZlciwgcGh5c2ljYWwgUENJZSBOSUNzLiBBbmQgYGZibmljYCBpcyBNZXRhJiMzOTtzIGN1c3RvbSBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlLCBhbHNvIFBDSWUgbmV0d29yayBjYXJkLiBTbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGRyaXZlcnMgaGVyZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpCdXQgdGhvc2UgY29yZSBuZXQgY2hhbmdlcywgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhbmQgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCBzcGVjaWZpY2FsbHkuLi4gaXMgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgcmVhY2hhYmxlPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgaXMgYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBjb2RlYmFzZS4gTGV0JiMzOTtzIGRvIGEgc2VhcmNoIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLiBUaGF0IHdpbGwgdGVsbCB1cyBpZiB0aGVzZSBjb3JlIGNoYW5nZXMgYXJlIGV2ZW4gcmVsZXZhbnQgaW4gcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5oPTkyPWV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggY21kKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEyOS0vKipcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEzMDogKiBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoKSAtIGRvZXMgdGhpcyBsZWdhY3kgaW9jdGwgY21kIG5lZWQgcnRubF9sb2NrP1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTMxLSAqIEBkZXY6IHRhcmdldCBkZXZpY2Vcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uaD0xMzc9c3RhdGljIGlubGluZSBib29sXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMzg6ZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBldGhjbWQpXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMzkte1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzI3Mj1kZXZfZXRodG9vbF9sb2NrZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzU5MC0gKiBEcml2ZXItZGVjaWRlZCBTRVQgY29tbWFuZHMgdGhhdCBtYXkgY2hhaW4gaW50byBydG5sLW9ubHkgaGVscGVycyBhcmVcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzU5MTogKiBjb3ZlcmVkIGJ5IGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCgpL0VUSFRPT0xfT1BfTkVFRFNfUlROTF8qLlxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTkyLSAqL1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzYxMD1fX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2MjMtXHRcdCAgICBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZCkgfHxcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzYyNDpcdFx0ICAgIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2MjUtXHRpZiAobmVlZF9ydG5sKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGV0aHRvb2wgU291cmNlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXRodG9vbCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhyb3VnaCBpb2N0bHMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYG5ldC9ldGh0b29sL2lvY3RsLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDM2MTAgdG8gMzY1MC4gVGhpcyBsaWtlbHkgZGVhbHMgd2l0aCBzb21lIHNwZWNpZmljIGZlYXR1cmUgb3IgZnVuY3Rpb24gY2FsbC4gSSBhbHNvIG5lZWQgdG8ga2VlcCBgbmV0L2V0aHRvb2wvY29tbW9uLmhgIG9wZW4uIFRoYXQgaGVhZGVyIGZpbGUgaXMgcHJhY3RpY2FsbHkgdGhlIGV0aHRvb2wgYmlibGUg4oCTIGl0IHByb2JhYmx5IGRlZmluZXMgdGhlIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cyBJJiMzOTtsbCBuZWVkIHRvIGludGVycHJldCB0aGUgaW9jdGwgY2FsbHMgYW5kIGRhdGEuIEkmIzM5O2xsIHJlYWQgdGhvc2UgdHdvIGZpbGVzIGFuZCB0cnkgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiBldGh0b29sIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzYwMDpcdFx0Y2FzZSBFVEhUT09MX1NTRzpcbjM2MDE6XHRcdGNhc2UgRVRIVE9PTF9TVFNPOlxuMzYwMjpcdFx0Y2FzZSBFVEhUT09MX1NHU086XG4zNjAzOlx0XHRjYXNlIEVUSFRPT0xfU0dSTzpcbjM2MDQ6XHRcdFx0cmV0dXJuIHRydWU7XG4zNjA1Olx0XHR9XG4zNjA2Olx0XHRyZXR1cm4gZmFsc2U7XG4zNjA3Olx0fVxuMzYwODpcdFxuMzYwOTpcdHN0YXRpYyBpbnRcbjM2MTA6XHRfX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcbjM2MTE6XHRcdCAgICAgIHUzMiBldGhjbWQsIHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpkZXZsaW5rX3N0YXRlKVxuMzYxMjpcdHtcbjM2MTM6XHRcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuMzYxNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjM2MTU6XHRcdGJvb2wgbmVlZF9ydG5sO1xuMzYxNjpcdFx0aW50IHJjO1xuMzYxNzpcdFxuMzYxODpcdFx0ZGV2ID0gbmV0ZGV2X2dldF9ieV9uYW1lKG5ldCwgaWZyLVx1MDAzZWlmcl9uYW1lLCBcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG4zNjE5Olx0XHRpZiAoIWRldilcbjM2MjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4zNjIxOlx0XG4zNjIyOlx0XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxuMzYyMzpcdFx0XHQgICAgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8XG4zNjI0Olx0XHRcdCAgICBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBldGhjbWQpO1xuMzYyNTpcdFx0aWYgKG5lZWRfcnRubClcbjM2MjY6XHRcdFx0cnRubF9sb2NrKCk7XG4zNjI3Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbjM2Mjg6XHRcdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlIFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxuMzYyOTpcdFx0ICAgIGRldi1cdTAwM2Vtb3ZpbmdfbnMgfHwgIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkpIHtcbjM2MzA6XHRcdFx0cmMgPSAtRU5PREVWO1xuMzYzMTpcdFx0XHRnb3RvIGV4aXRfb3BzX3VubG9jaztcbjM2MzI6XHRcdH1cbjM2MzM6XHRcbjM2MzQ6XHRcdHJjID0gZGV2X2V0aHRvb2xfbG9ja2VkKG5ldCwgZGV2LCB1c2VyYWRkciwgZXRoY21kLCBkZXZsaW5rX3N0YXRlLFxuMzYzNTpcdFx0XHRcdFx0bmVlZF9ydG5sKTtcbjM2MzY6XHRcbjM2Mzc6XHRleGl0X29wc191bmxvY2s6XG4zNjM4Olx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuMzYzOTpcdFx0aWYgKG5lZWRfcnRubClcbjM2NDA6XHRcdFx0cnRubF91bmxvY2soKTtcbjM2NDE6XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4zNjQyOlx0XG4zNjQzOlx0XHRyZXR1cm4gcmM7XG4zNjQ0Olx0fVxuMzY0NTpcdFxuMzY0NjpcdGludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4zNjQ3Olx0e1xuMzY0ODpcdFx0c3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnN0YXRlO1xuMzY0OTpcdFx0dTMyIGV0aGNtZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIyNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKClgIGFuZCBOZXR3b3JrIERldmljZSBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZClgIGZ1bmN0aW9uLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgb3Igbm90IGEgbmV0d29yayBkZXZpY2UgYGRldmAgcmVxdWlyZXMgdGhlIFJlYWwtVGltZSBOZXRsaW5rIChSVE5MKSBzdWJzeXN0ZW0gdG8gaGFuZGxlIHRoZSBgZXRoY21kYCAodGhlIHNwZWNpZmljIGV0aHRvb2wgY29tbWFuZCkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHdlIGRlY2lkZSBSVE5MIGlzIG5lY2Vzc2FyeS4KCk15IG5leHQgbW92ZSBpcyB0byBjcmFjayBvcGVuIGBuZXQvZXRodG9vbC9jb21tb24uaGAsIHNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhhdCBzZWN0aW9uIGFyb3VuZCBsaW5lcyAxMzAgdG8gMTcwLiBUaGF0JiMzOTtzIHdoZXJlIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIGxvZ2ljIG9yIHJlbGV2YW50IGRlZmluaXRpb25zIHRvIGRlY29kZSBleGFjdGx5IHdoYXQgdHJpZ2dlcnMgdGhhdCBkZXRlcm1pbmF0aW9uLiBUaGVyZSYjMzk7cyBsaWtlbHkgYSBzZXJpZXMgb2YgY2hlY2tzLCBmbGFncywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRlZmluZWQgaW4gdGhhdCBhcmVhIHRoYXQgYXJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGludGVyYWN0aW9uLCBhbmQgdGhvc2Ugd2lsbCBpbGx1bWluYXRlIHdoZW4gUlROTCBpcyB0cnVseSByZXF1aXJlZCBmb3IgYSBzcGVjaWZpYyBldGh0b29sIG9wZXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBlZmZpY2llbnQgYW5kIGNvcnJlY3QgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHQgKiBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoKSAtIGRvZXMgdGhpcyBsZWdhY3kgaW9jdGwgY21kIG5lZWQgcnRubF9sb2NrP1xuIDEzMTpcdCAqIEBkZXY6IHRhcmdldCBkZXZpY2VcbiAxMzI6XHQgKiBAZXRoY21kOiBFVEhUT09MXyogaW9jdGwgY29tbWFuZCB2YWx1ZVxuIDEzMzpcdCAqXG4gMTM0Olx0ICogUmV0dXJuOiB0cnVlIGlmIEBldGhjbWQgaXMgYSBjb21tYW5kIGZvciB3aGljaCBAZGV2IGhhcyBvcHRlZC1pbiB0b1xuIDEzNTpcdCAqIGtlZXBpbmcgcnRubF9sb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsICh2aWEgb3BfbmVlZHNfcnRubCkuXG4gMTM2Olx0ICovXG4gMTM3Olx0c3RhdGljIGlubGluZSBib29sXG4gMTM4Olx0ZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBldGhjbWQpXG4gMTM5Olx0e1xuIDE0MDpcdFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHM7XG4gMTQxOlx0XG4gMTQyOlx0XHRzd2l0Y2ggKGV0aGNtZCkge1xuIDE0MzpcdFx0Y2FzZSBFVEhUT09MX0dMSU5LU0VUVElOR1M6XG4gMTQ0Olx0XHRjYXNlIEVUSFRPT0xfR1NFVDpcbiAxNDU6XHRcdGNhc2UgRVRIVE9PTF9TTElOS1NFVFRJTkdTOlxuIDE0NjpcdFx0Y2FzZSBFVEhUT09MX1NTRVQ6XG4gMTQ3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUztcbiAxNDg6XHRcdGNhc2UgRVRIVE9PTF9TUEZMQUdTOlxuIDE0OTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTO1xuIDE1MDpcdFx0Y2FzZSBFVEhUT09MX1NSSU5HUEFSQU06XG4gMTUxOlx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU07XG4gMTUyOlx0XHRjYXNlIEVUSFRPT0xfU0NIQU5ORUxTOlxuIDE1MzpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFM7XG4gMTU0Olx0XHRjYXNlIEVUSFRPT0xfU0NPQUxFU0NFOlxuIDE1NTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0U7XG4gMTU2Olx0XHRjYXNlIEVUSFRPT0xfR1BBVVNFUEFSQU06XG4gMTU3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNO1xuIDE1ODpcdFx0Y2FzZSBFVEhUT09MX1NQQVVTRVBBUkFNOlxuIDE1OTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTTtcbiAxNjA6XHRcdGNhc2UgRVRIVE9PTF9TUlNTSDpcbiAxNjE6XHRcdGNhc2UgRVRIVE9PTF9TUlhGSDpcbiAxNjI6XHRcdGNhc2UgRVRIVE9PTF9TUlhGSElORElSOlxuIDE2MzpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG4gMTY0Olx0XHRjYXNlIEVUSFRPT0xfR0xJTks6XG4gMTY1Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xuIDE2NjpcdFx0Y2FzZSBFVEhUT09MX1RFU1Q6XG4gMTY3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG4gMTY4Olx0XHR9XG4gMTY5Olx0XHRyZXR1cm4gZmFsc2U7XG4gMTcwOlx0fVxuIDE3MTpcdFxuIDE3MjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19FVEhUT09MX05FVExJTkspXG4gMTczOlx0dm9pZCBldGh0b29sX3Jzc19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHR5cGUsIHUzMiByc3NfY29udGV4dCk7XG4gMTc0Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqVW5yYXZlbGluZyBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBzZWUgdGhpcyBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgY2FsbCwgYW5kIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGF0IHRoYXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcuIEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgYWxvbmUuIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBhIHBvdGVudGlhbGx5IHRyaWNreSBwaWVjZSBvZiBuZXR3b3JrIGRldmljZSBkcml2ZXIgY29kZSwgZXNwZWNpYWxseSBpZiB3ZSBhcmUgaW4gYSBtdWx0aSB0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGltZSB0byBkaWcgaW4sIHJhdGhlciB0aGFuIG1ha2UgYXNzdW1wdGlvbnMuIExldCYjMzk7cyBnZXQgdGhlIGNvbnRleHQgcmlnaHQgYXdheS4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBgbmV0ZGV2X25lZWRfb3BzX2xvY2tgIGFuZCBzZWUgd2hhdCB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgbWlnaHQgb2ZmZXIuIEhvcGVmdWxseSwgdGhlIHNlYXJjaCByZXN1bHRzIHdpbGwgcXVpY2tseSBpbGx1bWluYXRlIGlmIGl0JiMzOTtzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgY29udHJvbCwgZGV2aWNlIG9wZXJhdGlvbiBvcmRlcmluZywgb3Igc29tZSBvdGhlciBhc3BlY3Qgb2YgbmV0d29yayBkZXZpY2UgbWFuYWdlbWVudCB0aGF0IGRlbWFuZHMgY2FyZWZ1bCBhdHRlbnRpb24uIEEgZ29vZCBzZWFyY2ggc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24sIGFsb25nIHdpdGggdXNlcywgYW5kIG1heWJlIGV2ZW4gYSBicmllZiBkZXNjcmlwdGlvbiBmcm9tIHRoZSBjb2RlLCBvciBob3BlZnVsbHkgYmV0dGVyIHlldCwgYSBtZWFuaW5nZnVsIGNvbW1pdCBtZXNzYWdlLiBJIGFtIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3doeSYjMzQ7IGFuZCAmIzM0O3doZW4mIzM0OyBiZWhpbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBleGlzdGVuY2UuIEkgc3VzcGVjdCB0aGlzIGlzIHNvbWV0aGluZyBmdW5kYW1lbnRhbCwgbGlrZSBsb2NraW5nIHRoZSBkZXZpY2Ugb3BlcmF0aW9ucyBzdHJ1Y3R1cmUsIGFuZCBJIG5lZWQgdG8gZXN0YWJsaXNoIHRoZSBwcmVjaXNlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGRldl9uZWVkX29wc19sb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTMxPWludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy00NC1cdCAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmM6NDU6XHRpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtNDYtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM9ODI9c3RhdGljIF9faW5saW5lX18gaW50IGRldl9pc19ldGhkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy04My17XG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6ODQ6XHRyZXR1cm4gZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSIFx1MDAyNlx1MDAyNiAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy04NS19XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTU4PXN0cnVjdCBuZXRfZGV2aWNlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI2MDEtXHQgKiAgIGFuZCBvdGhlciBjYWxsYmFja3MsIHRoYXQgaXMgdGhlIGluc3RhbmNlIGxvY2sgb24gZGV2aWNlcyBmb3JcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjYwMjpcdCAqICAgd2hpY2ggbmV0ZGV2X25lZWRfb3BzX2xvY2soKSByZXR1cm5zIHRydWUsIG90aGVyd2lzZSBieSBydG5sX2xvY2s7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI2MDMtXHQgKlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNjA0LVx0ICogLSBkb3VibGUgb3BzIHByb3RlY3RlZCAtIGFsd2F5cyBwcm90ZWN0ZWQgYnkgcnRubF9sb2NrIGJ1dCBmb3JcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjYwNTpcdCAqICAgZGV2aWNlcyBmb3Igd2hpY2ggbmV0ZGV2X25lZWRfb3BzX2xvY2soKSByZXR1cm5zIHRydWUgLSBhbHNvXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI2MDYtXHQgKiAgIHRoZSBpbnN0YW5jZSBsb2NrLlxuLS1cbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9MjE9bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3JfaW52aXNpYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC0yNy1cbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6Mjg6c3RhdGljIGlubGluZSBib29sIG5ldGRldl9uZWVkX29wc19sb2NrKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTI5LXtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTM5PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNDAte1xuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo0MTpcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC00Mi1cdFx0bmV0ZGV2X2xvY2soZGV2KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTQ1PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC00Ni17XG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjQ3Olx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTQ4LVx0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD01MT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX3RvX2Z1bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNTIte1xuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo1MzpcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC01NC1cdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTU5PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX2Z1bGxfdG9fb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTYwLXtcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6NjE6XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNjItXHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD02Nz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC02OC17XG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjY5Olx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTcwLVx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTgzPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtODQte1xuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo4NTpcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC04Ni1cdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTg5PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTkwLXtcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6OTE6XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtOTItXHRcdG5ldGRldl9sb2NrKGRldik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD05Nz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTk4LXtcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6OTk6XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMTAwLVx0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0xMDY9c3RhdGljIGlubGluZSBpbnQgbmV0ZGV2X2lzX2xvY2tlZF9vcHNfY29tcGF0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTEwNy17XG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjEwODpcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC0xMDktXHRcdHJldHVybiBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuLS1cbmluY2x1ZGUvbmV0L25ldGRldl9xdWV1ZXMuaD00Mz1zdHJ1Y3QgbmV0ZGV2X3F1ZXVlX3N0YXRzX3R4IHtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfcXVldWVzLmgtOTEtICpcbmluY2x1ZGUvbmV0L25ldGRldl9xdWV1ZXMuaDo5MjogKiBPcHMgYXJlIGNhbGxlZCB1bmRlciB0aGUgaW5zdGFuY2UgbG9jayBpZiBuZXRkZXZfbmVlZF9vcHNfbG9jaygpXG5pbmNsdWRlL25ldC9uZXRkZXZfcXVldWVzLmgtOTMtICogcmV0dXJucyB0cnVlLCBvdGhlcndpc2UgdW5kZXIgcnRubF9sb2NrLlxuLS1cbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTQzOC1cbm5ldC9jb3JlL2Rldi5jOjExNDM5Olx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9kZXYuYy0xMTQ0MC1cdCAgICBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGUgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2NvcmUvZGV2LmM9MTI0NDE9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyNDc0LVx0XHRcdGNvbnRpbnVlO1xubmV0L2NvcmUvZGV2LmM6MTI0NzU6XHRcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSB7XG5uZXQvY29yZS9kZXYuYy0xMjQ3Ni1cdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2VjbG9zZV9saXN0LCBcdTAwMjZjbG9zZV9oZWFkKTtcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjQ4My1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBoZWFkLCB1bnJlZ19saXN0KSB7XG5uZXQvY29yZS9kZXYuYzoxMjQ4NDpcdFx0aWYgKCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxubmV0L2NvcmUvZGV2LmMtMTI0ODUtXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNlY2xvc2VfbGlzdCwgXHUwMDI2Y2xvc2VfaGVhZCk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTI3MDI9aW50IF9fZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjc5OC1cbm5ldC9jb3JlL2Rldi5jOjEyNzk5Olx0aWYgKCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxubmV0L2NvcmUvZGV2LmMtMTI4MDAtXHRcdG5ldGRldl9sb2NrKGRldik7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTI4NzMtXHRkZXYtXHUwMDNlbW92aW5nX25zID0gZmFsc2U7XG5uZXQvY29yZS9kZXYuYzoxMjg3NDpcdGlmICghbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbm5ldC9jb3JlL2Rldi5jLTEyODc1LVx0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4tLVxubmV0L2NvcmUvZGV2Lmg9MTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zZXRfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB2YWx1ZSlcbi0tXG5uZXQvY29yZS9kZXYuaC0xOTctXG5uZXQvY29yZS9kZXYuaDoxOTg6XHRpZiAoIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG5uZXQvY29yZS9kZXYuaC0xOTktXHRcdG5ldGRldl9sb2NrKGRldik7XG5uZXQvY29yZS9kZXYuaC0yMDAtXHRkZXYtXHUwMDNldXAgPSB2YWx1ZTtcbm5ldC9jb3JlL2Rldi5oOjIwMTpcdGlmICghbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbm5ldC9jb3JlL2Rldi5oLTIwMi1cdFx0bmV0ZGV2X3VubG9jayhkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTM2Mj12b2lkIF9fZGV2X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzc0LVx0aWYgKG9wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMgfHwgb3BzLVx1MDAzZW5kb19jaGFuZ2VfcnhfZmxhZ3MgfHxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3NTpcdCAgICBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzYtXHRcdG5ldGlmX3J4X21vZGVfcXVldWUoZGV2KTtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTEwMTM9aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwNjktXHRcdGVyciA9IC1FTk9ERVY7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEwNzA6XHRlbHNlIGlmICghbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSlcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTA3MS1cdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvbmV0ZGV2X3J4X3F1ZXVlLmM9MjQ1PWludCBuZXRpZl9tcF9vcGVuX3J4cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcnhxX2lkeCxcbi0tXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYy0yNTAtXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYzoyNTE6XHRpZiAoIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYy0yNTItXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM2MTA9X19kZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjIxLVxubmV0L2V0aHRvb2wvaW9jdGwuYzozNjIyOlx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikgfHxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzYyMy1cdFx0ICAgIGV0aHRvb2xfY21kX2NoYW5nZXNfZmVhdHVyZXMoZXRoY21kKSB8fFxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz01MDc9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNTM5LVx0aWYgKHJlcV9pbmZvLVx1MDAzZWRldikge1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjU0MDpcdFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKHJlcV9pbmZvLVx1MDAzZWRldikgfHxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01NDEtXHRcdFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwocmVxX2luZm8tXHUwMDNlZGV2LCBjbWQpO1xuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz01OTQ9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jLTYwOC1cdGV0aG5sX2luaXRfcmVwbHlfZGF0YShjdHgtXHUwMDNlcmVwbHlfZGF0YSwgY3R4LVx1MDAzZW9wcywgZGV2KTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2MDk6XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTYxMC1cdFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwoZGV2LCBjdHgtXHUwMDNlb3BzLVx1MDAzZXJlcXVlc3RfY21kKTtcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9OTAwPXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy05MzAtXHRkZXYgPSByZXFfaW5mby1cdTAwM2VkZXY7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6OTMxOlx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikgfHxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy05MzItXHRcdCAgICBldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGRldiwgY21kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG5ldGRldl9uZWVkX29wc19sb2NrYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldGRldl9uZWVkX29wc19sb2NrYC4uLiBteSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1doYXQgYWN0dWFsbHkgKnRyaWdnZXJzKiB0aGF0IHJldHVybiB2YWx1ZSBvZiB0cnVlPyBXaGF0IGNvbmRpdGlvbnMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBsb2dpYy4gSSBrbm93IEkmIzM5O3ZlIHNlZW4gdGhpcyBmdW5jdGlvbiBiZWZvcmUsIGJ1dCBhIHF1aWNrIHJlZnJlc2hlciBuZXZlciBodXJ0cy4KCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBkaXZlIGludG8gYGluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6MjhgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgbG9naWMgYmVoaW5kIHRoaXMgZnVuY3Rpb24uIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHRvIGRldGVybWluZSB0aGUgbmVlZCBmb3IgdGhhdCBsb2NrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4gIDI2Olx0fVxuICAyNzpcdFxuICAyODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRkZXZfbmVlZF9vcHNfbG9jayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICAyOTpcdHtcbiAgMzA6XHRcdGJvb2wgcmV0ID0gZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHM7XG4gIDMxOlx0XG4gIDMyOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9TSEFQRVIpXG4gIDMzOlx0XHRyZXQgfD0gISFkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZXRfc2hhcGVyX29wcztcbiAgMzQ6XHQjZW5kaWZcbiAgMzU6XHRcbiAgMzY6XHRcdHJldHVybiByZXQ7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgNDA6XHR7XG4gIDQxOlx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAgNDI6XHRcdFx0bmV0ZGV2X2xvY2soZGV2KTtcbiAgNDM6XHR9XG4gIDQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTcyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGV0aHRvb2xgIElPQ1RMIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYG5ldC9ldGh0b29sL2lvY3RsLmNgIGNvZGUgc25pcHBldC4gVGhlIGNvcmUgY29uY2VybiBoZXJlIGlzIHRoZSBgbmVlZF9ydG5sYCB2YXJpYWJsZSwgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByb3V0aW5lIG5lZWRzIHRvIGFjcXVpcmUgdGhlIFJUTkwgKFJvdXRpbmcgVGFibGUgTmV0bGluaykgbG9jay4gSXQgbG9va3MgbGlrZSB0aGUgY29uZGl0aW9uIHRoYXQgc2V0cyBpdCBpcyBhIGJpdC4uLiB1bnVzdWFsLgoKVGhlIGtleSBsaW5lIGlzOiBgbmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikgfHwgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8IGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7YCBJZiBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgcmV0dXJucyBmYWxzZSwgYG5lZWRfcnRubGAgKmltbWVkaWF0ZWx5KiBiZWNvbWVzIHRydWUuICBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgdHJ1ZSBmb3IgJiMzNDthbGwgc3RhbmRhcmQgZGV2aWNlcywmIzM0OyBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCAqaXMqIHRydWUuCgpMZXQmIzM5O3MgZHJpbGwgZG93bjogaXQgc2VlbXMgYG5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIHJldHVybnMgdHJ1ZSB3aGVuIGBkZXYtJmd0O3JlcXVlc3Rfb3BzX2xvY2tgIGlzIHRydWUsIG9yIGBkZXYtJmd0O3F1ZXVlX21nbXRfb3BzYCBpcyBzZXQsIG9yIGBkZXYtJmd0O25ldGRldl9vcHMtJmd0O25ldF9zaGFwZXJfb3BzYCBpcyBzZXQuICBTbywgZm9yIG1vc3QgZGV2aWNlcywgd2UmIzM5O3JlIHRha2luZyB0aGUgUlROTCBsb2NrICphbnl3YXkqLiBCdXQgd2h5IHRoZXNlIHRocmVlIHNwZWNpZmljIHRyaWdnZXJzPyBUaGF0JiMzOTtzIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGRyaXZlcnMgYXJlIHNldHRpbmcgYHJlcXVlc3Rfb3BzX2xvY2tgLCBgcXVldWVfbWdtdF9vcHNgLCBvciBgbmV0X3NoYXBlcl9vcHNgLiAgSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBrZXJuZWwgc291cmNlIGZvciB0aG9zZSBleGFjdCB0ZXJtcyB0byB1bmRlcnN0YW5kIHdoZW4gdGhleSYjMzk7cmUgdXNlZC4gIEkmIzM5O20gY3VyaW91cyB0byBzZWUgd2hhdCBraW5kIG9mIGRldmljZXMgYXJlIHRyaWdnZXJpbmcgdGhlc2UgZmxhZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlcXVlc3Rfb3BzX2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTM0Mz1Ecml2ZXJzIGNhbiBhbHNvIGV4cGxpY2l0bHkgcmVxdWVzdCBpbnN0YW5jZSBsb2NrIHRvIGJlIGhlbGQgZHVyaW5nIG9wc1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjM0NDpieSBzZXR0aW5nIGBgcmVxdWVzdF9vcHNfbG9ja2BgIHRvIHRydWUuIENvZGUgY29tbWVudHMgYW5kIGRvY3MgcmVmZXJcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zNDUtdG8gZHJpdmVycyB3aGljaCBoYXZlIG9wcyBjYWxsZWQgdW5kZXIgdGhlIGluc3RhbmNlIGxvY2sgYXMgXCYjMzQ7b3BzIGxvY2tlZFwmIzM0Oy5cbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jPTEwMz1zdGF0aWMgdm9pZCBkdW1teV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2R1bW15LmMtMTEwLVx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2R1bW15LmM6MTExOlx0ZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO1xuZHJpdmVycy9uZXQvZHVtbXkuYy0xMTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jPTM0MDI9aW50IGJuZ2VfbmV0ZGV2X2FsbG9jKHN0cnVjdCBibmdlX2RldiAqYmQsIGludCBtYXhfaXJxcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzUxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzozNTE5Olx0bmV0ZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jLTM1MjAtXHRyYyA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTgyOT1zdGF0aWMgdm9pZCBtbHg1ZV9idWlsZF9uaWNfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODQxLVx0bmV0ZGV2LVx1MDAzZXhza190eF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZtbHg1ZV94c2tfdHhfbWV0YWRhdGFfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1ODQyOlx0bmV0ZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODQzLVx0bmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMobmV0ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM9ODkzPXN0YXRpYyB2b2lkIG1seDVlX2J1aWxkX3JlcF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtODk3LVx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZtbHg1ZV9uZXRkZXZfb3BzX3JlcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYzo4OTg6XHRuZXRkZXYtXHUwMDNlcmVxdWVzdF9vcHNfbG9jayA9IHRydWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtODk5LVx0bmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMobmV0ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuYz05OT1pbnQgbWx4NWlfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuYy0xMjMtXHRuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZtbHg1aV9ldGh0b29sX29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5jOjEyNDpcdG5ldGRldi1cdTAwM2VyZXF1ZXN0X29wc19sb2NrID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5jLTEyNS1cdG5ldGRldl9sb2NrZGVwX3NldF9jbGFzc2VzKG5ldGRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYz0xNDYwPXN0YXRpYyBpbnQgbWx4c3dfc3BfcG9ydF9jcmVhdGUoc3RydWN0IG1seHN3X3NwICptbHhzd19zcCwgdTE2IGxvY2FsX3BvcnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYy0xNTU0LVx0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jOjE1NTU6XHRkZXYtXHUwMDNlcmVxdWVzdF9vcHNfbG9jayA9IHRydWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jLTE1NTYtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTU4PXN0cnVjdCBuZXRfZGV2aWNlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI1NzctXHQvKipcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjU3ODpcdCAqIEByZXF1ZXN0X29wc19sb2NrOiByZXF1ZXN0IHRoZSBjb3JlIHRvIHJ1biBhbGwgQG5ldGRldl9vcHMgYW5kXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI1NzktXHQgKiBAZXRodG9vbF9vcHMgdW5kZXIgdGhlIEBsb2NrLlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTgwLVx0ICovXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI1ODE6XHRib29sXHRcdFx0cmVxdWVzdF9vcHNfbG9jaztcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjU4Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI1OTAtXHQgKiBvcGVyYXRpb25zLiBEcml2ZXJzIG1heSBvcHQtaW4gdG8gdGhpcyBiZWhhdmlvciBieSBzZXR0aW5nXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI1OTE6XHQgKiBAcmVxdWVzdF9vcHNfbG9jay5cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjU5Mi1cdCAqXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0yOD1zdGF0aWMgaW5saW5lIGJvb2wgbmV0ZGV2X25lZWRfb3BzX2xvY2soY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMjkte1xuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDozMDpcdGJvb2wgcmV0ID0gZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHM7XG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTMxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYxOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRHVtbXkgRHJpdmVyJiMzOTtzIFJlcXVlc3QgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGR1bW15LmNgIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0JiMzOTtzIHNldHRpbmcgYGRldi0mZ3Q7cmVxdWVzdF9vcHNfbG9jayA9IHRydWU7YC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgaXMgaGFwcGVuaW5nLiBJcyBpdCBmb3IgY29uY3VycmVuY3kgcHJvdGVjdGlvbj8gSXMgdGhpcyBhIHN0YW5kYXJkIHBhdHRlcm4gd2l0aGluIHRoZSBkdW1teSBkcml2ZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4KCkJ1dCwgYmVmb3JlIEkgZ28gZGVlcGVyIGludG8gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBlbHNlLiBEb2VzIHRoZSBgZHVtbXkuY2AgZHJpdmVyIGRlZmluZSBhbmQgc2V0IHRoZSBmbGFnIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgc29tZXdoZXJlPyBUaGF0IGZsYWcgaXMgcmVhbGx5IGltcG9ydGFudC4gSXQgd291bGQgY2hhbmdlIHRoZSB3YXkgSSB0aGluayBhYm91dCBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgYmVpbmcgcGVyZm9ybWVkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBldGh0b29sIG9wZXJhdGlvbnMgb2YgdGhlIGR1bW15IGRyaXZlciB0byBzZWUuIEkgYmV0dGVyIGdvIHRocm91Z2ggYW5kIGNoZWNrIHRoZSBldGh0b29sIG9wZXJhdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGF0IGZsYWcgaXNuJiMzOTt0IHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRodG9vbF9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kdW1teS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2R1bW15LmM9ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkdW1teV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2R1bW15LmMtOTgtXG5kcml2ZXJzL25ldC9kdW1teS5jOjk5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZHVtbXlfZXRodG9vbF9vcHMgPSB7XG5kcml2ZXJzL25ldC9kdW1teS5jLTEwMC1cdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4tLVxuZHJpdmVycy9uZXQvZHVtbXkuYz0xMDM9c3RhdGljIHZvaWQgZHVtbXlfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jLTEwOC1cdGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2ZHVtbXlfbmV0ZGV2X29wcztcbmRyaXZlcnMvbmV0L2R1bW15LmM6MTA5Olx0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2ZHVtbXlfZXRodG9vbF9vcHM7XG5kcml2ZXJzL25ldC9kdW1teS5jLTExMC1cdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTUwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdGh0b29sIER1bW15IE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGR1bW15X2V0aHRvb2xfb3BzYCBzdHJ1Y3R1cmUuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBub3QgZmxhZ2dpbmcgYG9wX25lZWRzX3J0bmxgLCBhbmQgaXQmIzM5O3MgbWlzc2luZyB0aGUgYHNlbGZfdGVzdGAgaW1wbGVtZW50YXRpb24uIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIGtub3cgc29tZSBldGh0b29sIG9wZXJhdGlvbnMgcmVxdWlyZSB0aGUgcm91dGluZyBuZXRsaW5rIGludGVyZmFjZSwgYW5kIGBzZWxmX3Rlc3RgIGlzIHByZXR0eSBpbXBvcnRhbnQgZm9yIGEgYmFzaWMgZHJpdmVyLgoKTm93IEkmIzM5O20gd29uZGVyaW5nLCB3aGljaCBvdGhlciBkcml2ZXJzIGFjdHVhbGx5ICpkbyogc2V0IGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGA/IEl0JiMzOTtzIGVhc3kgZW5vdWdoIHRvIGZpbmQgb3V0LiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LCBzbyBsZXQmIzM5O3MgZmlyZSB1cCBhIGdyZXAgYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIHNvdXJjZSB0cmVlLiBMZXQmIzM5O3MgZmluZCBvdXQgd2hlcmUgdGhpcyBmbGFnIGlzIGFjdGl2ZWx5IHVzZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVudCBiZWhpbmQgdXNpbmcgaXQsIGFuZCB3aGV0aGVyIGl0cyBhYnNlbmNlIGluIGBkdW1teV9ldGh0b29sX29wc2AgaXMgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2Ugb3IgYW4gb3ZlcnNpZ2h0LiBUaGlzIHJlcXVpcmVzIGxvb2tpbmcgYXQgdGhlIGFjdHVhbCBjb2RlIHdoZXJlIHRoZSBmbGFnIGlzIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYz01NzI3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczNi1cdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNzpcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczOC1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MjAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwMjgtXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjk6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDMwLVx0LmdldF9kcnZpbmZvXHRcdFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD05MjM9c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk0Ni0jZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOS1x0XHRCSVQoOClcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0NzojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXHRcdEJJVCg5KVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTQ4LVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oPTEzOD1ldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjYtXHRjYXNlIEVUSFRPT0xfVEVTVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2NzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVDtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2OC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwOTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBpbiBOZXR3b3JrIERyaXZlcnMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBvbmx5IHRoZSBgYm54dGAgYW5kIGBmYm5pY2AgZHJpdmVycyBzZXQgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgZmxhZy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgbGV0JiMzOTtzIGRpZyBpbnRvICp3aHkqLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSB2aXJ0dWFsIGRyaXZlcnMgb3IgcmVwcmVzZW50IHBoeXNpY2FsIFBDSWUgZGV2aWNlcywgYXMgdGhhdCBtaWdodCBiZSBrZXkuCgpMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYm54dGAuIEEgcXVpY2sgbG9vayBhdCB0aGUgY29kZSBzdWdnZXN0cyB0aGF0IGl0JiMzOTtzIGEgUENJIGRyaXZlciDigJNzcGVjaWZpY2FsbHksIGBibnh0X3BjaV9kcml2ZXJgIGluIGBibnh0LmNgIOKAkyBmb3IgQnJvYWRjb20gTmV0WHRyZW1lLUUgaGFyZHdhcmUuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb247IGl0JiMzOTtzIGEgZHJpdmVyIGZvciAqcmVhbCogaGFyZHdhcmUuCgpOb3csIG9uIHRvIGBmYm5pY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxzbyBhIFBDSSBkcml2ZXIsIGBmYm5pY19wY2kuY2AsIHdoaWNoIHNvdW5kcyBsaWtlIGl0JiMzOTtzIGhhbmRsaW5nIE1ldGEmIzM5O3MgQVNJQyBuZXR3b3JrIGNhcmQuIEFnYWluLCB0aGlzIHBvaW50cyB0b3dhcmRzIHBoeXNpY2FsIGhhcmR3YXJlLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogQ2FuIHRoZXNlIGRyaXZlcnMgZnVuY3Rpb24gaW4gYSBwdXJlbHkgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIHN0YW5kYXJkIFFFTVUgb3IgR0NFLCB3aXRob3V0IHRoZSBzcGVjaWZpYyBBU0lDIGhhcmR3YXJlIHRoZXkmIzM5O3JlIGRlc2lnbmVkIGZvcj8gSSYjMzk7bSBkb3VidGZ1bC4gTGV0JiMzOTtzIHNlZSBpZiBRRU1VICplbXVsYXRlcyogZWl0aGVyIGBibnh0YCBvciBgZmJuaWNgLgoKQSBxdWljayBjaGVjayBjb25maXJtcyBteSBzdXNwaWNpb246IFFFTVUgZW11bGF0ZXMgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgZTEwMDAsIHZpcnRpby1uZXQsIGFuZCBzbyBvbiwgYnV0ICpub3QqIGBibnh0YCBvciBgZmJuaWNgLgoKT2theSwgbGV0IG1lIGdvIG9uZSBzdGVwIGZ1cnRoZXIgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkga2luZCBvZiBzb2Z0d2FyZSBidXMgZW11bGF0aW9uIG9yIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLCBzb21ldGhpbmcgdGhhdCBtaWdodCBhdCBsZWFzdCAqc2ltdWxhdGUqIHRoZSBwcmVzZW5jZSBvZiBgYm54dGAgb3IgYGZibmljYCBkZXZpY2VzLgoKSSBuZWVkIHRvIGNvbmZpcm0gYnkgY2hlY2tpbmcgdGhlIHNvdXJjZSBjb2RlIG9mIGJvdGggYGJueHRgIGFuZCBgZmJuaWNgLiBUaW1lIHRvIGxvb2sgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3JpZXM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2AgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2AgZm9yIGNsdWVzLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgbXkgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNzczMD1zdGF0aWMgaW50IF9faW5pdCBibnh0X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzczNC1cdGJueHRfZGVidWdfaW5pdCgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTc3MzU6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmJueHRfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzczNi1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgZmJuaWNgIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgY29udGV4dCBpcyBsaWtlbHkgZmluYW5jaWFsIG9yIHJlbGF0ZWQgdG8gbmV0d29yayBpbmZyYXN0cnVjdHVyZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBmYm5pY2AmIzM0Oy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG9zc2liaWxpdGllcywgdGhhdCBpdCBpcyBsaWtlbHkgYSBuZXR3b3JrIHdpdGggZmluYW5jaWFsIHJlc3BvbnNpYmlsaXRpZXMsIG9yIGlzIHBhcnQgb2YgYSBmaW5hbmNpYWwgc2VydmljZXMgaW5mcmFzdHJ1Y3R1cmUuIE15IGludHVpdGlvbiBpcyB0byBxdWlja2x5IGNoZWNrIHRoZSBwYXJhbWV0ZXJzIHN1cnJvdW5kaW5nIHRoYXQgcGFydGljdWxhciB0ZXJtLCBsaWtlbHkgdG8gdW5kZXJzdGFuZCB0aGUgaXNzdWUgYXQgaGFuZC4gSXQgbWlnaHQgYmUgYSBjb25maWd1cmF0aW9uIGZpbGUsIGEgZGF0YWJhc2UgZW50cnksIG9yIGV2ZW4gYW4gaW50ZXJuYWwgY29kZSBkZXNpZ25hdGlvbi4gSSBuZWVkIHRvIGtub3cgKndoYXQqIGBmYm5pY2AgKmlzKiwgYW5kIHdoZXJlIHRvIGZpbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgbW9zdCBvYnZpb3VzIGFuZCBxdWlja2VzdCBjaGVja3MsIHByb2JhYmx5IGxvb2tpbmcgYXQgcmVjZW50IGxvZ3MsIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCB0b29scywgb3Iga25vd24gc3lzdGVtcyBkb2N1bWVudGF0aW9uIGlmIGF2YWlsYWJsZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBgZmJuaWNgIHRvIGJlIGtleSB0byB0aGUgcHJvYmxlbSwgc28gbGV0JiMzOTtzIGdldCBtb3ZpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9NjU0PXN0YXRpYyBpbnQgX19pbml0IGZibmljX2luaXRfbW9kdWxlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjY2MDpcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2ZmJuaWNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtNjYxLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ5NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgRVRIVE9PTF9URVNUIGFuZCBSVE5MIExvY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFBDSSBkcml2ZXJzLCBgYm54dGAgYW5kIGBmYm5pY2AsIHdoaWNoIGFyZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIChCcm9hZGNvbSBhbmQgTWV0YSBBU0lDKS4gTXkgdHJhaW4gb2YgdGhvdWdodCBub3cgaXMgZHJhd24gdG8gYSBjaGFuZ2UgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhbmQgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYC4gSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzLgoKQWxyaWdodCwgdGhlIGRpZmYgaW50cm9kdWNlcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIChiaXQgOSkgYW5kIGFkZHMgYG5ldGlmX29wZW4oKWAgYW5kIGBuZXRpZl9jbG9zZSgpYCB0byB0aGUgbGlzdCBvZiBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBwcm90ZWN0ZWQgYnkgdGhlIFJUTkwgKHJvdXRpbmcgdGFibGUgbmV0bGluaykgbG9jay4gTm93LCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGJpZ2dlciBwaWN0dXJlLiBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKClgIGNhbiBiZSBjYWxsZWQgZm9yICphbnkqIGRldmljZSB0aGF0IHJlY2VpdmVzIGFuIGBFVEhUT09MX1RFU1RgIGlvY3RsIGNhbGwgKHZpYSBgU0lPQ0VUSFRPT0xgIHdpdGggYGNtZCA9IEVUSFRPT0xfVEVTVGApLgoKTG9va2luZyBhdCBgX19kZXZfZXRodG9vbGAsIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBgU0lPQ0VUSFRPT0xgIGlvY3RsLiBJdCBjaGVja3MgYG5lZWRfcnRubGAsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8IGV0aHRvb2xfY21kX2NoYW5nZXNfZmVhdHVyZXMoZXRoY21kKSB8fCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBldGhjbWQpYC4gIEl0JiMzOTtzIGNyaXRpY2FsIEkgY29uc2lkZXIgd2hhdCB0aGlzIG1lYW5zIGZvciB2YXJpb3VzIG5ldHdvcmsgZGV2aWNlcy4KClN1cHBvc2UgYGRldmAgaXMsIGZvciBpbnN0YW5jZSwgYSBkdW1teSBkZXZpY2UsIG9yIGEgdmV0aCBwYWlyLCBvciBsb29wYmFjay4gVGhlIGBkdW1teWAgZGV2aWNlLCBzcGVjaWZpY2FsbHksIGhhcyBgZGV2LSZndDtyZXF1ZXN0X29wc19sb2NrID0gdHJ1ZTtgISBUaHVzLCBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgaXMgYHRydWVgLiAgVGhlcmVmb3JlLCBgIW5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIGBmYWxzZWAuIGBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKEVUSFRPT0xfVEVTVClgIGlzIGFsc28gYGZhbHNlYC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIEVUSFRPT0xfVEVTVClgICp3aWxsKiBiZSBjYWxsZWQuCgpJbiBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCwgd2Ugc2VlIHRoYXQgd2hlbiBgZXRoY21kYCBpcyBgRVRIVE9PTF9URVNUYCwgaXQgcmV0dXJucyBgb3BzLSZndDtvcF9uZWVkc19ydG5sICZhbXA7IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gRm9yIGEgZHVtbXkgZGV2aWNlLCBgb3BzID0gZGV2LSZndDtldGh0b29sX29wcyA9ICZhbXA7ZHVtbXlfZXRodG9vbF9vcHNgLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgb3BzLSZndDtvcF9uZWVkc19ydG5sYCBpcyAqdW5pbml0aWFsaXplZCogKGxpa2VseSB6ZXJvKS4gU28sIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoKWAgcmV0dXJucyAwIQoKVGhpcyBtZWFucyBgbmVlZF9ydG5sYCBpbiBgX19kZXZfZXRodG9vbGAgYmVjb21lcyBgZmFsc2VgLiBDb25zZXF1ZW50bHksIGBkZXZfZXRodG9vbF9sb2NrZWQoLi4uLCBuZWVkX3J0bmwpYCBpcyBjYWxsZWQgd2l0aCBgbmVlZF9ydG5sYCBiZWluZyBmYWxzZS4gSSBub3cgbmVlZCB0byB2ZXJpZnkgd2hhdCBgZGV2X2V0aHRvb2xfbG9ja2VkYCBkb2VzIHdoZW4gYEVUSFRPT0xfVEVTVGAgaXMgdGhlIGBldGhjbWRgIGFuZCBgbmVlZF9ydG5sYCBpcyBgZmFsc2VgLiBJIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgY29uZGl0aW9uYWwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMwMDpcdFx0Y2FzZSBFVEhUT09MX0dTVFJJTkdTOlxuMzMwMTpcdFx0Y2FzZSBFVEhUT09MX0dTVEFUUzpcbjMzMDI6XHRcdGNhc2UgRVRIVE9PTF9HUEhZU1RBVFM6XG4zMzAzOlx0XHRjYXNlIEVUSFRPT0xfR1RTTzpcbjMzMDQ6XHRcdGNhc2UgRVRIVE9PTF9HUEVSTUFERFI6XG4zMzA1Olx0XHRjYXNlIEVUSFRPT0xfR1VGTzpcbjMzMDY6XHRcdGNhc2UgRVRIVE9PTF9HR1NPOlxuMzMwNzpcdFx0Y2FzZSBFVEhUT09MX0dHUk86XG4zMzA4Olx0XHRjYXNlIEVUSFRPT0xfR0ZMQUdTOlxuMzMwOTpcdFx0Y2FzZSBFVEhUT09MX0dQRkxBR1M6XG4zMzEwOlx0XHRjYXNlIEVUSFRPT0xfR1JYRkg6XG4zMzExOlx0XHRjYXNlIEVUSFRPT0xfR1JYUklOR1M6XG4zMzEyOlx0XHRjYXNlIEVUSFRPT0xfR1JYQ0xTUkxDTlQ6XG4zMzEzOlx0XHRjYXNlIEVUSFRPT0xfR1JYQ0xTUlVMRTpcbjMzMTQ6XHRcdGNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDpcbjMzMTU6XHRcdGNhc2UgRVRIVE9PTF9HUlhGSElORElSOlxuMzMxNjpcdFx0Y2FzZSBFVEhUT09MX0dSU1NIOlxuMzMxNzpcdFx0Y2FzZSBFVEhUT09MX0dGRUFUVVJFUzpcbjMzMTg6XHRcdGNhc2UgRVRIVE9PTF9HQ0hBTk5FTFM6XG4zMzE5Olx0XHRjYXNlIEVUSFRPT0xfR0VUX1RTX0lORk86XG4zMzIwOlx0XHRjYXNlIEVUSFRPT0xfR0VFRTpcbjMzMjE6XHRcdGNhc2UgRVRIVE9PTF9HVFVOQUJMRTpcbjMzMjI6XHRcdGNhc2UgRVRIVE9PTF9QSFlfR1RVTkFCTEU6XG4zMzIzOlx0XHRjYXNlIEVUSFRPT0xfR0xJTktTRVRUSU5HUzpcbjMzMjQ6XHRcdGNhc2UgRVRIVE9PTF9HRkVDUEFSQU06XG4zMzI1Olx0XHRcdGJyZWFrO1xuMzMyNjpcdFx0ZGVmYXVsdDpcbjMzMjc6XHRcdFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcbjMzMjg6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMzMyOTpcdFx0fVxuMzMzMDpcdFxuMzMzMTpcdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChkZXYpO1xuMzMzMjpcdFxuMzMzMzpcdFx0aWYgKGRldi1cdTAwM2VkZXYucGFyZW50KVxuMzMzNDpcdFx0XHRwbV9ydW50aW1lX2dldF9zeW5jKGRldi1cdTAwM2VkZXYucGFyZW50KTtcbjMzMzU6XHRcbjMzMzY6XHRcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkge1xuMzMzNzpcdFx0XHRyYyA9IC1FTk9ERVY7XG4zMzM4Olx0XHRcdGdvdG8gb3V0O1xuMzMzOTpcdFx0fVxuMzM0MDpcdFxuMzM0MTpcdFx0aWYgKGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2ViZWdpbikge1xuMzM0MjpcdFx0XHRyYyA9IGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2ViZWdpbihkZXYpO1xuMzM0MzpcdFx0XHRpZiAocmMgXHUwMDNjIDApXG4zMzQ0Olx0XHRcdFx0Z290byBvdXQ7XG4zMzQ1Olx0XHR9XG4zMzQ2Olx0XHRvbGRfZmVhdHVyZXMgPSBkZXYtXHUwMDNlZmVhdHVyZXM7XG4zMzQ3Olx0XG4zMzQ4Olx0XHRzd2l0Y2ggKGV0aGNtZCkge1xuMzM0OTpcdFx0Y2FzZSBFVEhUT09MX0dTRVQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTQ3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEVUSFRPT0xfVEVTVCBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgRVRIVE9PTF9URVNUYCBpcyBhY3R1YWxseSAqcHJvY2Vzc2VkKiB3aXRoaW4gdGhlIGBkZXZfZXRodG9vbF9sb2NrZWRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgZXRodG9vbCBwdXp6bGUsIGFuZCBrbm93aW5nIGl0cyBleGVjdXRpb24gcGF0aCBpcyBmdW5kYW1lbnRhbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGZsb3cgaGVyZSBhbmQgZmluZCBleGFjdGx5IGhvdyB0aGlzIHNwZWNpZmljIGNvbW1hbmQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGRyaXZlcuKAmXMgb3ZlcmFsbCBldGh0b29sIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgY29kZeKApiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgcm91dGluZXMgaXQgaW50ZXJmYWNlcyB3aXRoIGZvciBoYW5kbGluZyB0aGlzIHRlc3QgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGV4YWN0IGxvY2F0aW9uIGlzIGltcG9ydGFudCBmb3IgYW5hbHl6aW5nIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nhc2UgRVRIVE9PTF9URVNUOiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNDEyLVx0XHRicmVhaztcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzQxMzpcdGNhc2UgRVRIVE9PTF9URVNUOlxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNDE0LVx0XHRyYyA9IGV0aHRvb2xfc2VsZl90ZXN0KGRldiwgdXNlcmFkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoaXMgZnVuY3Rpb24gY2FsbDogYGV0aHRvb2xfc2VsZl90ZXN0KGRldiwgdXNlcmFkZHIpYC4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7bmV0d29yayBpbnRlcmZhY2Ugc2VsZi10ZXN0JiMzNDsgdG8gbWUsIGFuZCBteSBicmFpbiBpcyBhbHJlYWR5IHNlYXJjaGluZyBmb3IgdGhlIGltcGxlbWVudGF0aW9uLiBHaXZlbiB0aGF0IGBldGh0b29sYCBpcyBpbiB0aGUgbmFtZSwgbXkgZ3V0IHNheXMgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgYGV0aHRvb2xgIHV0aWxpdHkuIFNvLCBJIG5lZWQgdG8gZmluZCB0aGUgc291cmNlIGZvciBgZXRodG9vbF9zZWxmX3Rlc3RgLiBDb25zaWRlcmluZyB0aGUga2VybmVsIHN0cnVjdHVyZSwgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBuZXRgIHN1YnN5c3RlbSwgc28gSSYjMzk7bGwgY2hlY2sgYG5ldC9ldGh0b29sL2lvY3RsLmNgIHRvIHRyYWNlIHRoZSBjYWxsLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgdGhlIGRlZmluaXRpb24gdGhlcmUgYW5kIHVuZGVyc3RhbmQgdGhlIHBhcmFtZXRlcnMgYGRldmAgYW5kIGB1c2VyYWRkcmAuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRodG9vbF9zZWxmX3Rlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9pb2N0bC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmM9MjMzMz1zdGF0aWMgaW50IGV0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMjM0OS1cbm5ldC9ldGh0b29sL2lvY3RsLmM6MjM1MDpzdGF0aWMgaW50IGV0aHRvb2xfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgX191c2VyICp1c2VyYWRkcilcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjM1MS17XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNDEzLVx0Y2FzZSBFVEhUT09MX1RFU1Q6XG5uZXQvZXRodG9vbC9pb2N0bC5jOjM0MTQ6XHRcdHJjID0gZXRodG9vbF9zZWxmX3Rlc3QoZGV2LCB1c2VyYWRkcik7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTM0MTUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbnN0cnVjdGlvbnMsIGFzIHRob3VnaCB0aGV5IGFyZSBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBldGh0b29sIFNlbGYtVGVzdCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgZ2V0IGludG8gdGhlIGd1dHMgb2YgYGV0aHRvb2xgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBgZXRodG9vbF9zZWxmX3Rlc3RgIGxvY2F0ZWQgaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgc2VsZi10ZXN0IGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nLiBXaGF0IGtpbmQgb2YgdGVzdCB2ZWN0b3JzIGRvZXMgaXQgdXNlPyBJcyB0aGVyZSBhIGNvbXByZWhlbnNpdmUgc3RyYXRlZ3kgZm9yIGNvdmVyaW5nIGRpZmZlcmVudCBQSFkgbW9kZXMgYW5kIGxpbmsgc3BlZWRzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2VsbCBpdCBhZGhlcmVzIHRvIHRoZSBsYXRlc3Qgc3RhbmRhcmRzIGFuZCBiZXN0IHByYWN0aWNlcyBmb3IgbmV0d29yayBpbnRlcmZhY2UgdGVzdGluZy4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBpcyBhcmNoaXRlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzUwOlx0c3RhdGljIGludCBldGh0b29sX3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqdXNlcmFkZHIpXG4yMzUxOlx0e1xuMjM1MjpcdFx0c3RydWN0IGV0aHRvb2xfdGVzdCB0ZXN0O1xuMjM1MzpcdFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHM7XG4yMzU0Olx0XHR1NjQgKmRhdGE7XG4yMzU1Olx0XHRpbnQgcmV0LCB0ZXN0X2xlbjtcbjIzNTY6XHRcbjIzNTc6XHRcdGlmICghb3BzLVx1MDAzZXNlbGZfdGVzdCB8fCAhb3BzLVx1MDAzZWdldF9zc2V0X2NvdW50KVxuMjM1ODpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4yMzU5Olx0XG4yMzYwOlx0XHR0ZXN0X2xlbiA9IG9wcy1cdTAwM2VnZXRfc3NldF9jb3VudChkZXYsIEVUSF9TU19URVNUKTtcbjIzNjE6XHRcdGlmICh0ZXN0X2xlbiBcdTAwM2MgMClcbjIzNjI6XHRcdFx0cmV0dXJuIHRlc3RfbGVuO1xuMjM2MzpcdFx0V0FSTl9PTih0ZXN0X2xlbiA9PSAwKTtcbjIzNjQ6XHRcbjIzNjU6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ0ZXN0LCB1c2VyYWRkciwgc2l6ZW9mKHRlc3QpKSlcbjIzNjY6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yMzY3Olx0XG4yMzY4Olx0XHR0ZXN0LmxlbiA9IHRlc3RfbGVuO1xuMjM2OTpcdFx0ZGF0YSA9IGtjYWxsb2ModGVzdF9sZW4sIHNpemVvZih1NjQpLCBHRlBfVVNFUik7XG4yMzcwOlx0XHRpZiAoIWRhdGEpXG4yMzcxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjM3MjpcdFxuMjM3MzpcdFx0bmV0aWZfdGVzdGluZ19vbihkZXYpO1xuMjM3NDpcdFx0b3BzLVx1MDAzZXNlbGZfdGVzdChkZXYsIFx1MDAyNnRlc3QsIGRhdGEpO1xuMjM3NTpcdFx0bmV0aWZfdGVzdGluZ19vZmYoZGV2KTtcbjIzNzY6XHRcbjIzNzc6XHRcdHJldCA9IC1FRkFVTFQ7XG4yMzc4Olx0XHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBcdTAwMjZ0ZXN0LCBzaXplb2YodGVzdCkpKVxuMjM3OTpcdFx0XHRnb3RvIG91dDtcbjIzODA6XHRcdHVzZXJhZGRyICYjNDM7PSBzaXplb2YodGVzdCk7XG4yMzgxOlx0XHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBkYXRhLCBhcnJheV9zaXplKHRlc3QubGVuLCBzaXplb2YodTY0KSkpKVxuMjM4MjpcdFx0XHRnb3RvIG91dDtcbjIzODM6XHRcdHJldCA9IDA7XG4yMzg0Olx0XG4yMzg1Olx0IG91dDpcbjIzODY6XHRcdGtmcmVlKGRhdGEpO1xuMjM4NzpcdFx0cmV0dXJuIHJldDtcbjIzODg6XHR9XG4yMzg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODE3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoOiBBIERldGVjdGl2ZSYjMzk7cyBNaW5kc2V0KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEJlZm9yZSBJIGRpdmUgZGVlcCBpbnRvIHRoaXMgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpbmVhZ2UuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgY29tbWl0IGRvZXMgdGhpcyBiZWxvbmcgdG8/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgcGF0Y2ggc2VyaWVzPyBNeSB1c3VhbCBnby10byB3b3VsZCBiZSBgZ2l0IGxvZ2AsIGJ1dCBpdCBsb29rcyBsaWtlIEkgZG9uJiMzOTt0IGhhdmUgdGhhdCB0b29sIGF2YWlsYWJsZS4gSG1tLCBubyBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHJlY29uc3RydWN0IHRoZSBpbmZvcm1hdGlvbi4gSSBjYW4mIzM5O3QgZGlyZWN0bHkgY2hlY2sgdGhlIGhpc3RvcnkgdXNpbmcgYGdpdCBsb2dgLiBJZiBJIGRpZCwgSSB3b3VsZCB1c2UgYGdpdCBsb2cgLTFgLCBidXQgdGhhdCYjMzk7cyBub3QgcG9zc2libGUgaGVyZS4KClJpZ2h0LCBzbywgSSBjYW4mIzM5O3QgdXNlIGBnaXQgbG9nYCBkaXJlY3RseSwgYnV0IGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgaXMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjb21taXQgYXBwbGllZCB0aGUgcGF0Y2guCkkgY2FuIGF0dGVtcHQgdG8gdmlldyB0aGUgY2hhbmdlcyBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgY29tbWl0LiBJIHdvdWxkIHR5cGljYWxseSBydW4gc29tZXRoaW5nIGxpa2UgYGdpdCBkaWZmIEhFQUR+MWAsIGJ1dCB3aXRob3V0IHRoZSBHaXQgQ0xJLCB0aGF0JiMzOTtzIG9mZiB0aGUgdGFibGUuCgpBbHJpZ2h0LCB0aGluaywgdGhpbmsuLi4gSSAqY2FuKiBwcm9iYWJseSBnbGVhbiBzb21lIGluZm9ybWF0aW9uIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlIGl0c2VsZiBpZiBJIGNhbiBnZXQgdG8gaXQuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVudCBvZiB0aGUgcGF0Y2ggc2VyaWVzIHdpbGwgYmUgaGVscGZ1bC4gTm93LCBJIHNob3VsZCBzaGlmdCBteSBmb2N1cyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGJ5IHRoaXMgcGF0Y2guCgpSaWdodCwgbGV0JiMzOTtzIGNoYW5nZSBnZWFycy4gQSBwcm9taXNpbmcgbGVhZCBpcyB0byBzZWUgd2hhdCBkcml2ZXJzIG1pZ2h0IGJlIGltcGFjdGVkIGJ5IHRoaXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEkmIzM5O2xsIGdyZXAgZm9yIGAuc2VsZl90ZXN0YCB0byBzZWUgd2hpY2ggZHJpdmVycyBtaWdodCBiZSB0b3VjaGluZyB0aGF0IGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UgYW5kIHRoZSBhcmVhIGl0IGFmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLnNlbGZfdGVzdFxccyo9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmM9MTQ5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHBjbmV0MzJfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3BjbmV0MzIuYy0xNTAxLVx0LmdldF9zdHJpbmdzXHRcdD0gcGNuZXQzMl9nZXRfc3RyaW5ncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmM6MTUwMjpcdC5zZWxmX3Rlc3RcdFx0PSBwY25ldDMyX2V0aHRvb2xfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmMtMTUwMy1cdC5zZXRfcGh5c19pZFx0XHQ9IHBjbmV0MzJfc2V0X3BoeXNfaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1ldGh0b29sLmM9NzM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgeGdiZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWV0aHRvb2wuYy03NjQtXHQuc2V0X2NoYW5uZWxzID0geGdiZV9zZXRfY2hhbm5lbHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWV0aHRvb2wuYzo3NjU6XHQuc2VsZl90ZXN0ID0geGdiZV9zZWxmdGVzdF9ydW4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWV0aHRvb2wuYy03NjYtfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTU0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGFnNzF4eF9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTU1My1cdC5nZXRfc3NldF9jb3VudFx0XHRcdD0gYWc3MXh4X2V0aHRvb2xfZ2V0X3NzZXRfY291bnQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjU1NDpcdC5zZWxmX3Rlc3RcdFx0XHQ9IG5ldF9zZWxmdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNTU1LX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jPTc4MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibngyX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYy03ODQ0LVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gYm54Ml9zZXRfcGF1c2VwYXJhbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYzo3ODQ1Olx0LnNlbGZfdGVzdFx0XHQ9IGJueDJfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jLTc4NDYtXHQuZ2V0X3N0cmluZ3NcdFx0PSBibngyX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYz0zNjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54MnhfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jLTM2NjItXHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBibngyeF9zZXRfcGF1c2VwYXJhbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYzozNjYzOlx0LnNlbGZfdGVzdFx0XHQ9IGJueDJ4X3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNjY0LVx0LmdldF9zc2V0X2NvdW50XHRcdD0gYm54MnhfZ2V0X3NzZXRfY291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYz01NzI3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTc5OS1cdC5zZXRfcGh5c19pZFx0XHQ9IGJueHRfc2V0X3BoeXNfaWQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jOjU4MDA6XHQuc2VsZl90ZXN0XHRcdD0gYm54dF9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jLTU4MDEtXHQuZ2V0X3RzX2luZm9cdFx0PSBibnh0X2dldF90c19pbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE0MjI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdGczX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE0MjUwLVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gdGczX3NldF9wYXVzZXBhcmFtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM6MTQyNTE6XHQuc2VsZl90ZXN0XHRcdD0gdGczX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE0MjUyLVx0LmdldF9zdHJpbmdzXHRcdD0gdGczX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZXRodG9vbC5jPTIxNzY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBjeGdiX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZXRodG9vbC5jLTIyMTEtXHQuZ2V0X3J4ZmhfZmllbGRzICAgPSBjeGdiNF9nZXRfcnhmaF9maWVsZHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2V0aHRvb2wuYzoyMjEyOlx0LnNlbGZfdGVzdFx0ICAgPSBjeGdiNF9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2V0aHRvb2wuYy0yMjEzLVx0LmZsYXNoX2RldmljZSAgICAgID0gc2V0X2ZsYXNoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmM9MTQwOT1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX2V0aHRvb2wuYy0xNDMzLVx0LmZsYXNoX2RldmljZSA9IGJlX2RvX2ZsYXNoLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX2V0aHRvb2wuYzoxNDM0Olx0LnNlbGZfdGVzdCA9IGJlX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmMtMTQzNS1cdC5nZXRfcnhfcmluZ19jb3VudCA9IGJlX2dldF9yeF9yaW5nX2NvdW50LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYz00NjE9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHRzbmVwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYy00NjktXHQuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfZXRodG9vbC5jOjQ3MDpcdC5zZWxmX3Rlc3QgPSB0c25lcF9ldGh0b29sX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYy00NzEtXHQuZ2V0X3N0cmluZ3MgPSB0c25lcF9ldGh0b29sX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTM3ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBmZWNfZW5ldF9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zODEwLVx0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozODExOlx0LnNlbGZfdGVzdFx0XHQ9IG5ldF9zZWxmdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTM4MTItfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19ldGh0b29sLmM9MTI0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGhuc19ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19ldGh0b29sLmMtMTI1My1cdC5nZXRfY2hhbm5lbHMgPSBobnNfZ2V0X2NoYW5uZWxzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZXRodG9vbC5jOjEyNTQ6XHQuc2VsZl90ZXN0ID0gaG5zX25pY19zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19ldGh0b29sLmMtMTI1NS1cdC5nZXRfc3RyaW5ncyA9IGhuc19nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYz0yMTkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaG5zM19ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYy0yMTkzLVx0LmNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZCA9IHRydWUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYzoyMTk0Olx0LnNlbGZfdGVzdCA9IGhuczNfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmMtMjE5NS1cdC5nZXRfZHJ2aW5mbyA9IGhuczNfZ2V0X2RydmluZm8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL2hpbmljX2V0aHRvb2wuYz0xNzI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaGluaWNfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL2hpbmljX2V0aHRvb2wuYy0xNzU5LVx0LmdldF9zdHJpbmdzID0gaGluaWNfZ2V0X3N0cmluZ3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvaGluaWNfZXRodG9vbC5jOjE3NjA6XHQuc2VsZl90ZXN0ID0gaGluaWNfZGlhZ190ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL2hpbmljX2V0aHRvb2wuYy0xNzYxLVx0LnNldF9waHlzX2lkID0gaGluaWNfc2V0X3BoeXNfaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI3MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlMTAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzUwLVx0LnNldF9yaW5ncGFyYW1cdFx0PSBlMTAwX3NldF9yaW5ncGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjc1MTpcdC5zZWxmX3Rlc3RcdFx0PSBlMTAwX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzUyLVx0LmdldF9zdHJpbmdzXHRcdD0gZTEwMF9nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9ldGh0b29sLmM9MTg2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX2V0aHRvb2wuYy0xODgxLVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gZTEwMDBfc2V0X3BhdXNlcGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9ldGh0b29sLmM6MTg4MjpcdC5zZWxmX3Rlc3RcdFx0PSBlMTAwMF9kaWFnX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9ldGh0b29sLmMtMTg4My1cdC5nZXRfc3RyaW5nc1x0XHQ9IGUxMDAwX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmM9MjM2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMjM3OC1cdC5zZXRfcGF1c2VwYXJhbVx0XHQ9IGUxMDAwX3NldF9wYXVzZXBhcmFtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL2V0aHRvb2wuYzoyMzc5Olx0LnNlbGZfdGVzdFx0XHQ9IGUxMDAwX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMjM4MC1cdC5nZXRfc3RyaW5nc1x0XHQ9IGUxMDAwX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2V0aHRvb2wuYz0xMTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZm0xMGtfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfZXRodG9vbC5jLTExNTQtXHQuZ2V0X3JlZ3NfbGVuICAgICAgICAgICA9IGZtMTBrX2dldF9yZWdzX2xlbixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2V0aHRvb2wuYzoxMTU1Olx0LnNlbGZfdGVzdFx0XHQ9IGZtMTBrX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2V0aHRvb2wuYy0xMTU2LVx0LmdldF9wcml2X2ZsYWdzXHRcdD0gZm0xMGtfZ2V0X3ByaXZfZmxhZ3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYz01Nzg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaTQwZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTU4MTQtXHQuZ2V0X3J4X3JpbmdfY291bnRcdD0gaTQwZV9nZXRfcnhfcmluZ19jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmM6NTgxNTpcdC5zZWxmX3Rlc3RcdFx0PSBpNDBlX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMtNTgxNi1cdC5nZXRfc3RyaW5nc1x0XHQ9IGk0MGVfZ2V0X3N0cmluZ3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmM9NDgyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGljZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYy00ODQ3LVx0LnNldF9tc2dsZXZlbFx0XHQ9IGljZV9zZXRfbXNnbGV2ZWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYzo0ODQ4Olx0LnNlbGZfdGVzdFx0XHQ9IGljZV9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYy00ODQ5LVx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYz0zNDgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWdiX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jLTM1MDAtXHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBpZ2Jfc2V0X3BhdXNlcGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYzozNTAxOlx0LnNlbGZfdGVzdFx0XHQ9IGlnYl9kaWFnX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0zNTAyLVx0LmdldF9zdHJpbmdzXHRcdD0gaWdiX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL2V0aHRvb2wuYz00MzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpZ2J2Zl9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2J2Zi9ldGh0b29sLmMtNDUxLVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gaWdidmZfc2V0X3BhdXNlcGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2J2Zi9ldGh0b29sLmM6NDUyOlx0LnNlbGZfdGVzdFx0XHQ9IGlnYnZmX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL2V0aHRvb2wuYy00NTMtXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBpZ2J2Zl9nZXRfc3NldF9jb3VudCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX2V0aHRvb2wuYz0yMjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWdjX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfZXRodG9vbC5jLTIzMDItXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IGlnY19ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfZXRodG9vbC5jOjIzMDM6XHQuc2VsZl90ZXN0XHRcdD0gaWdjX2V0aHRvb2xfZGlhZ190ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19ldGh0b29sLmMtMjMwNC1cdC5nZXRfbW1cdFx0XHQ9IGlnY19ldGh0b29sX2dldF9tbSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmM9Mzg2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JlX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYy0zODgwLVx0LnNldF9tc2dsZXZlbCAgICAgICAgICAgPSBpeGdiZV9zZXRfbXNnbGV2ZWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmM6Mzg4MTpcdC5zZWxmX3Rlc3QgICAgICAgICAgICAgID0gaXhnYmVfZGlhZ190ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jLTM4ODItXHQuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IGl4Z2JlX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYz0zOTEwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaXhnYmVfZXRodG9vbF9vcHNfZTYxMCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmMtMzkyOS1cdC5zZXRfbXNnbGV2ZWwgICAgICAgICAgID0gaXhnYmVfc2V0X21zZ2xldmVsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jOjM5MzA6XHQuc2VsZl90ZXN0ICAgICAgICAgICAgICA9IGl4Z2JlX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYy0zOTMxLVx0LmdldF9zdHJpbmdzICAgICAgICAgICAgPSBpeGdiZV9nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYz05NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpeGdiZXZmX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk3NS1cdC5zZXRfbXNnbGV2ZWxcdFx0PSBpeGdiZXZmX3NldF9tc2dsZXZlbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk3NjpcdC5zZWxmX3Rlc3RcdFx0PSBpeGdiZXZmX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk3Ny1cdC5nZXRfc3NldF9jb3VudFx0XHQ9IGl4Z2JldmZfZ2V0X3NzZXRfY291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9ldGh0b29sLmM9MjEzND1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NF9lbl9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2V0aHRvb2wuYy0yMTQ1LVx0LmdldF9ldGh0b29sX3N0YXRzID0gbWx4NF9lbl9nZXRfZXRodG9vbF9zdGF0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fZXRodG9vbC5jOjIxNDY6XHQuc2VsZl90ZXN0ID0gbWx4NF9lbl9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2V0aHRvb2wuYy0yMTQ3LVx0LnNldF9waHlzX2lkID0gbWx4NF9lbl9zZXRfcGh5c19pZCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jPTI3MTg9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVlX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmMtMjc3Ny1cdC5zZXRfcHJpdl9mbGFncyAgICA9IG1seDVlX3NldF9wcml2X2ZsYWdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYzoyNzc4Olx0LnNlbGZfdGVzdCAgICAgICAgID0gbWx4NWVfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYy0yNzc5LVx0LmdldF9mZWNfc3RhdHMgICAgID0gbWx4NWVfZ2V0X2ZlY19zdGF0cyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjA0MS1cdC5zZXRfcGF1c2VwYXJhbVx0XHRcdD0gZmJuaWNfcGh5bGlua19zZXRfcGF1c2VwYXJhbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwNDI6XHQuc2VsZl90ZXN0XHRcdFx0PSBmYm5pY19zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDQzLVx0LmdldF9zdHJpbmdzXHRcdFx0PSBmYm5pY19nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jPTI1MDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZnBfbmV0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmMtMjUxMi1cdC5zZXRfcmluZ3BhcmFtXHRcdD0gbmZwX25ldF9zZXRfcmluZ3BhcmFtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2V0aHRvb2wuYzoyNTEzOlx0LnNlbGZfdGVzdFx0XHQ9IG5mcF9uZXRfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2V0aHRvb2wuYy0yNTE0LVx0LmdldF9zdHJpbmdzXHRcdD0gbmZwX25ldF9nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jPTI1NTA9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5mcF9wb3J0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmMtMjU1NS1cdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBuZnBfcG9ydF9nZXRfc3RhdHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jOjI1NTY6XHQuc2VsZl90ZXN0XHRcdD0gbmZwX25ldF9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jLTI1NTctXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBuZnBfcG9ydF9nZXRfc3NldF9jb3VudCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM9NTM0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtNTM1NS1cdC5nZXRfc3NldF9jb3VudCA9IG52X2dldF9zc2V0X2NvdW50LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnZpZGlhL2ZvcmNlZGV0aC5jOjUzNTY6XHQuc2VsZl90ZXN0ID0gbnZfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnZpZGlhL2ZvcmNlZGV0aC5jLTUzNTctXHQuZ2V0X3RzX2luZm8gPSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmM9OTE5PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXR4ZW5fbmljX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMtOTMzLVx0LnNldF93b2wgPSBuZXR4ZW5fbmljX3NldF93b2wsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jOjkzNDpcdC5zZWxmX3Rlc3QgPSBuZXR4ZW5fbmljX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMtOTM1LVx0LmdldF9zdHJpbmdzID0gbmV0eGVuX25pY19nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkZS9xZWRlX2V0aHRvb2wuYz0yMjY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcWVkZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkZS9xZWRlX2V0aHRvb2wuYy0yMzA1LVx0LnNldF9jaGFubmVsc1x0XHRcdD0gcWVkZV9zZXRfY2hhbm5lbHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkZS9xZWRlX2V0aHRvb2wuYzoyMzA2Olx0LnNlbGZfdGVzdFx0XHRcdD0gcWVkZV9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkZS9xZWRlX2V0aHRvb2wuYy0yMzA3LVx0LmdldF9tb2R1bGVfaW5mb1x0XHQ9IHFlZGVfZ2V0X21vZHVsZV9pbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYz0xODIzPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBxbGNuaWNfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfZXRodG9vbC5jLTE4MzktXHQuc2V0X3dvbCA9IHFsY25pY19zZXRfd29sLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfZXRodG9vbC5jOjE4NDA6XHQuc2VsZl90ZXN0ID0gcWxjbmljX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYy0xODQxLVx0LmdldF9zdHJpbmdzID0gcWxjbmljX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmM9Mzk9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVmMTAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmMtNDUtXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBlZnhfZXRodG9vbF9nZXRfc3NldF9jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmM6NDY6XHQuc2VsZl90ZXN0XHRcdD0gZWZ4X2V0aHRvb2xfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAwX2V0aHRvb2wuYy00Ny1cdC5nZXRfc3RyaW5nc1x0XHQ9IGVmeF9ldGh0b29sX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9ldGh0b29sLmM9MjQwPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlZnhfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2V0aHRvb2wuYy0yNTYtXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBlZnhfZXRodG9vbF9nZXRfc3NldF9jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9ldGh0b29sLmM6MjU3Olx0LnNlbGZfdGVzdFx0XHQ9IGVmeF9ldGh0b29sX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9ldGh0b29sLmMtMjU4LVx0LmdldF9zdHJpbmdzXHRcdD0gZWZ4X2V0aHRvb2xfZ2V0X3N0cmluZ3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9ldGh0b29sLmM9MTMyNz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZWY0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vZXRodG9vbC5jLTEzNDQtXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBlZjRfZXRodG9vbF9nZXRfc3NldF9jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vZXRodG9vbC5jOjEzNDU6XHQuc2VsZl90ZXN0XHRcdD0gZWY0X2V0aHRvb2xfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9ldGh0b29sLmMtMTM0Ni1cdC5nZXRfc3RyaW5nc1x0XHQ9IGVmNF9ldGh0b29sX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9ldGh0b29sLmM9MjM4PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlZnhfc2llbmFfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2V0aHRvb2wuYy0yNTQtXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBlZnhfc2llbmFfZXRodG9vbF9nZXRfc3NldF9jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9ldGh0b29sLmM6MjU1Olx0LnNlbGZfdGVzdFx0XHQ9IGVmeF9zaWVuYV9ldGh0b29sX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9ldGh0b29sLmMtMjU2LVx0LmdldF9zdHJpbmdzXHRcdD0gZWZ4X3NpZW5hX2V0aHRvb2xfZ2V0X3N0cmluZ3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0xMDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3RtbWFjX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMTEwOC1cdC5zZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19zZXRfcGF1c2VwYXJhbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MTEwOTpcdC5zZWxmX3Rlc3QgPSBzdG1tYWNfc2VsZnRlc3RfcnVuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTEwLVx0LmdldF9ldGh0b29sX3N0YXRzID0gc3RtbWFjX2dldF9ldGh0b29sX3N0YXRzLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0zMTI9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheDg4NzcyX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0zMjQtXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzozMjU6XHQuc2VsZl90ZXN0XHRcdD0gbmV0X3NlbGZ0ZXN0LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTMyNi1cdC5nZXRfc3RyaW5nc1x0XHQ9IGF4ODg3NzJfZXRodG9vbF9nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTE5MTg9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBsYW43OHh4X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTkyOC1cdC5nZXRfc3NldF9jb3VudCA9IGxhbjc4eHhfZ2V0X3NzZXRfY291bnQsXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjE5Mjk6XHQuc2VsZl90ZXN0XHQ9IG5ldF9zZWxmdGVzdCxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTkzMC1cdC5nZXRfc3RyaW5nc1x0PSBsYW43OHh4X2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTgzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHNtc2M5NXh4X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTg0OC1cdC5nZXRfdHNfaW5mb1x0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6ODQ5Olx0LnNlbGZfdGVzdFx0PSBuZXRfc2VsZnRlc3QsXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy04NTAtXHQuZ2V0X3N0cmluZ3NcdD0gc21zYzk1eHhfZXRodG9vbF9nZXRfc3RyaW5ncyxcbi0tXG5uZXQvZHNhL3VzZXIuYz0yNDkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZHNhX3VzZXJfZXRodG9vbF9vcHMgPSB7XG4tLVxubmV0L2RzYS91c2VyLmMtMjUyMC1cdC5nZXRfdHNfaW5mb1x0XHQ9IGRzYV91c2VyX2dldF90c19pbmZvLFxubmV0L2RzYS91c2VyLmM6MjUyMTpcdC5zZWxmX3Rlc3RcdFx0PSBkc2FfdXNlcl9uZXRfc2VsZnRlc3QsXG5uZXQvZHNhL3VzZXIuYy0yNTIyLVx0LmdldF9tbVx0XHRcdD0gZHNhX3VzZXJfZ2V0X21tLFxuLS1cbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vcGFyYWxsZWwtcGVyZi5weT0yND1jbGFzcyBWZXJib3NpdHkoKTpcbi0tXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3BhcmFsbGVsLXBlcmYucHktMjktXHRcdHNlbGYuZGVidWcgICAgID0gZGVidWdcbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vcGFyYWxsZWwtcGVyZi5weTozMDpcdFx0c2VsZi5zZWxmX3Rlc3QgPSBUcnVlXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3BhcmFsbGVsLXBlcmYucHktMzEtXHRcdGlmIHNlbGYuZGVidWc6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MjIxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgRmxhZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGZsYWcsIGFuZCBJJiMzOTttIHdvbmRlcmluZyB3aHkgaXQmIzM5O3MgZXZlbiB0aGVyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcywgSSYjMzk7bGwgY2hlY2sgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQ6IGFoYSwgaXQmIzM5O3MganVzdCBhIGJpdCBmbGFnLCBub3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuIE5vdywgbGV0JiMzOTtzIGxvb2sgYXQgd2hlcmUgdGhpcyBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gSSBzZWUgdGhlIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdG8gYmUgY2hlY2tpbmcgaWYgYSBwYXJ0aWN1bGFyIGBldGhjbWRgIG5lZWRzIHRoZSBSVE5MIChSb3V0aW5nIFRhYmxlIE5ldGxpbmspIGxvY2suIEl0IG1ha2VzIHNlbnNlIHRoYXQgdGVzdGluZyBtaWdodCBuZWVkIGl0LCB3aGljaCBpcyBjb25maXJtZWQgaGVyZSwgZm9yIGBFVEhUT09MX1RFU1RgLiBCdXQgc3RpbGwsIEkgbmVlZCBzb21lIG1vcmUgY29udGV4dC4gSSYjMzk7bSBub3QgZmFtaWxpYXIgd2l0aCB3aHkgdGhpcyBmbGFnIHdhcyBleHBsaWNpdGx5IGFkZGVkLCBhbmQgaWYgaXQmIzM5O3MgbmV3LCBvciBhbiBvbGQgY29uY2VwdCB0aGF0IGdvdCBleHBsaWNpdGx5IGRvY3VtZW50ZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGdpdCBoaXN0b3J5LCBvciBhdCBsZWFzdCBncmVwIGZvciBvdGhlciB1c2VzIG9mIGBFVEhUT09MX09QX05FRURTX1JUTkxfYCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gVGhlIG5hbWluZyBjb252ZW50aW9uIGhpbnRzIHRoZXJlIG1pZ2h0IGJlIG90aGVyIHJlbGF0ZWQgZmxhZ3MsIGFuZCBzZWVpbmcgdGhvc2Ugb3RoZXIgb3B0aW9ucyB3b3VsZCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHRzIGludG8gdGhlIGRlc2lnbiBkZWNpc2lvbnMgaGVyZS4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIGNoZWNrIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VUSFRPT0xfT1BfTkVFRFNfUlROTF8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldi1mZWF0dXJlcy5yc3Q9ODA9ZXRodG9vbCBjYWxsYmFja3MgdGhhdCBtYXkgZW5kIHVwIGludm9raW5nIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoKSBtdXN0XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2LWZlYXR1cmVzLnJzdDo4MTpvcHQgYmFjayBpbnRvIHJ0bmxfbG9jayBieSBzZXR0aW5nIHRoZSBtYXRjaGluZyBFVEhUT09MX09QX05FRURTX1JUTkxfKlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldi1mZWF0dXJlcy5yc3QtODItYml0IGluIGBgZXRodG9vbF9vcHM6Om9wX25lZWRzX3J0bmxgYC4gVGhlIGV0aHRvb2wgY29yZSB0aGVuIGtlZXBzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTM3OT1hcHByb3ByaWF0ZSBiaXRzIGluIGBgZXRodG9vbF9vcHM6Om9wX25lZWRzX3J0bmxgYCAoaWYgdGhlIG5lY2Vzc2FyeVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjM4MDpgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qYGAgYml0IGRvZXNuJiMzOTt0IGV4aXN0LCBqdXN0IGFkZCBpdCkuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMzgxLUNvbW1vbmx5IHVzZWQgY29yZSBoZWxwZXJzIHdoaWNoIGZvcmNlIGRyaXZlcnMgdG8gc2VsZWN0aXZlbHkgb3B0LWluIHRvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYz01NzI3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczMi1cdC5yeGZoX3ByaXZfc2l6ZVx0XHRcdD0gc2l6ZW9mKHN0cnVjdCBibnh0X3Jzc19jdHgpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYzo1NzMzOlx0Lm9wX25lZWRzX3J0bmxcdFx0XHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYzo1NzM0Olx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNTpcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNjpcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNzpcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczOC1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTk4Mj1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ3ZlX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy05ODUtXHRcdFx0XHQgRVRIVE9PTF9SSU5HX1VTRV9SWF9CVUZfTEVOLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjk4NjpcdC5vcF9uZWVkc19ydG5sID0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg3Olx0XHRcdCBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg4Olx0XHRcdCBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTg5LVx0LmdldF9kcnZpbmZvID0gZ3ZlX2dldF9kcnZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmM9MTg1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlhdmZfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuYy0xODU3LVx0LnN1cHBvcnRlZF9pbnB1dF94ZnJtXHQ9IFJYSF9YRlJNX1NZTV9YT1IsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jOjE4NTg6XHQub3BfbmVlZHNfcnRubFx0XHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmMtMTg1OS1cdC5nZXRfZHJ2aW5mb1x0XHQ9IGlhdmZfZ2V0X2RydmluZm8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYz0yNzE4PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg1ZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3MjItXHQucnhmaF9tYXhfbnVtX2NvbnRleHRzXHQ9IE1MWDVFX01BWF9OVU1fUlNTLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYzoyNzIzOlx0Lm9wX25lZWRzX3J0bmxcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM6MjcyNDpcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYzoyNzI1Olx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jOjI3MjY6XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmMtMjcyNy1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jPTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVlX3JlcF9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtNDE5LVx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYzo0MjA6XHQub3BfbmVlZHNfcnRubFx0ICAgPSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYzo0MjE6XHRcdFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM6NDIyOlx0XHRcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTQyMy1cdC5nZXRfZHJ2aW5mb1x0ICAgPSBtbHg1ZV9yZXBfZ2V0X2RydmluZm8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYz0yODQ9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVpX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9ldGh0b29sLmMtMjg3LVx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9ldGh0b29sLmM6Mjg4Olx0Lm9wX25lZWRzX3J0bmxcdCAgICA9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYzoyODk6XHRcdFx0ICAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYzoyOTA6XHRcdFx0ICAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYy0yOTEtXHQuZ2V0X2RydmluZm8gICAgICAgID0gbWx4NWlfZ2V0X2RydmluZm8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYz0zMTI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVpX3BrZXlfZXRodG9vbF9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jOjMxMzpcdC5vcF9uZWVkc19ydG5sXHQgICAgPSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jLTMxNC1cdC5nZXRfZHJ2aW5mbyAgICAgICAgPSBtbHg1aV9nZXRfZHJ2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmM9MTI2Mz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4c3dfc3BfcG9ydF9ldGh0b29sX29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYy0xMjY0LVx0LmNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZFx0PSB0cnVlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fZXRodG9vbC5jOjEyNjU6XHQub3BfbmVlZHNfcnRubFx0XHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYzoxMjY2Olx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYy0xMjY3LVx0LmdldF9kcnZpbmZvXHRcdFx0PSBtbHhzd19zcF9wb3J0X2dldF9kcnZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jPTIwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBmYm5pY19ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDIyLVx0LnJ4ZmhfbWF4X251bV9jb250ZXh0c1x0XHQ9IEZCTklDX1JQQ19SU1NfVEJMX0NPVU5ULFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MjAyMzpcdC5vcF9uZWVkc19ydG5sXHRcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjQ6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjU6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjY6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoyMDI3Olx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjg6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjk6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDMwLVx0LmdldF9kcnZpbmZvXHRcdFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYz04NjM9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1hbmFfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMtODcwLVx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRV9UWCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jOjg3MTpcdC5vcF9uZWVkc19ydG5sXHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYzo4NzI6XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jOjg3MzpcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1MgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmM6ODc0Olx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYy04NzUtXHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gbWFuYV9nZXRfZXRodG9vbF9zdGF0cyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jPTIwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5zaW1fZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYy0yMTEtXHRcdFx0XHRcdCAgRVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM6MjEyOlx0Lm9wX25lZWRzX3J0bmxcdFx0XHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jLTIxMy1cdC5nZXRfcGF1c2Vfc3RhdHNcdCAgICAgICAgPSBuc2ltX2dldF9wYXVzZV9zdGF0cyxcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD05MjM9c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTkzNy0gKi9cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjkzODojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1NcdEJJVCgwKVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTM5OiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1NcdFx0QklUKDEpXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDA6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTVx0QklUKDIpXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDE6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTXHRcdEJJVCgzKVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTQyOiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDT0FMRVNDRVx0XHRCSVQoNClcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0MzojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTVx0QklUKDUpXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDQ6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU1cdEJJVCg2KVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTQ1OiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTU1x0XHRCSVQoNylcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0NjojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOS1x0XHRCSVQoOClcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0NzojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXHRcdEJJVCg5KVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTQ4LVxuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk3NC0gKiBAc3VwcG9ydGVkX2h3dHN0YW1wX3F1YWxpZmllcnM6IGJpdGZpZWxkIG9mIHN1cHBvcnRlZCBod3RzdGFtcCBxdWFsaWZpZXIuXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NzU6ICogQG9wX25lZWRzX3J0bmw6IG1hc2sgb2YgJUVUSFRPT0xfT1BfTkVFRFNfUlROTF8qIGJpdHMuXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05NzYtICpcdEZvciB1c2Ugd2l0aCBvcHMtbG9ja2VkIGRyaXZlcnMgKGlnbm9yZWQgb3RoZXJ3aXNlKS4gU2VsZWN0cyB3aGljaFxuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTExOTYtICogYGBydG5sX2xvY2tgYCBpcyBhZGRpdGlvbmFsbHkgaGVsZCBvbmx5IGZvciBjYWxsYmFja3MgZm9yIHdoaWNoXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDoxMTk3OiAqIHRoZSBkcml2ZXIgb3B0cyBpbiB2aWEgdGhlIG1hdGNoaW5nIGBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgYCBiaXRcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTExOTgtICogaW4gQG9wX25lZWRzX3J0bmwuXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9OTI9ZXRodG9vbF9ubF9tc2dfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBjbWQpXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTAwLVx0Y2FzZSBFVEhUT09MX01TR19MSU5LTU9ERVNfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTAxOlx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDItXHRjYXNlIEVUSFRPT0xfTVNHX1BSSVZGTEFHU19TRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMDM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDQtXHRjYXNlIEVUSFRPT0xfTVNHX1JJTkdTX1NFVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwNTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEwNi1cdGNhc2UgRVRIVE9PTF9NU0dfQ0hBTk5FTFNfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTA3Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFM7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDgtXHRjYXNlIEVUSFRPT0xfTVNHX0NPQUxFU0NFX1NFVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwOTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTEwLVx0Y2FzZSBFVEhUT09MX01TR19QQVVTRV9HRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTE6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTEyLVx0Y2FzZSBFVEhUT09MX01TR19QQVVTRV9TRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE0LVx0Y2FzZSBFVEhUT09MX01TR19SU1NfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTE1Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTYtXHRjYXNlIEVUSFRPT0xfTVNHX0xJTktTVEFURV9HRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTc6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE4LVx0Y2FzZSBFVEhUT09MX01TR19UU0NPTkZJR19HRVQ6XG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM4PWV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE0Ni1cdGNhc2UgRVRIVE9PTF9TU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTQ3Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNDgtXHRjYXNlIEVUSFRPT0xfU1BGTEFHUzpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE0OTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUztcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1MC1cdGNhc2UgRVRIVE9PTF9TUklOR1BBUkFNOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTUxOlx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTUyLVx0Y2FzZSBFVEhUT09MX1NDSEFOTkVMUzpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1MzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTU0LVx0Y2FzZSBFVEhUT09MX1NDT0FMRVNDRTpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1NTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTU2LVx0Y2FzZSBFVEhUT09MX0dQQVVTRVBBUkFNOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTU3Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1OC1cdGNhc2UgRVRIVE9PTF9TUEFVU0VQQVJBTTpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1OTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU07XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjAtXHRjYXNlIEVUSFRPT0xfU1JTU0g6XG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTYyLVx0Y2FzZSBFVEhUT09MX1NSWEZISU5ESVI6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUztcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2NC1cdGNhc2UgRVRIVE9PTF9HTElOSzpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2NTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTks7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjYtXHRjYXNlIEVUSFRPT0xfVEVTVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2NzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVDtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2OC1cdH1cbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTMyNzI9ZGV2X2V0aHRvb2xfbG9ja2VkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM1OTAtICogRHJpdmVyLWRlY2lkZWQgU0VUIGNvbW1hbmRzIHRoYXQgbWF5IGNoYWluIGludG8gcnRubC1vbmx5IGhlbHBlcnMgYXJlXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM1OTE6ICogY292ZXJlZCBieSBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoKS9FVEhUT09MX09QX05FRURTX1JUTkxfKi5cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzU5Mi0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzMzIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5kZXJzdGFuZGluZyB0aGUgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qYCBGbGFnIGluIHRoZSBMaW51eCBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIE15IGZvY3VzIGlzIG9uIGhvdyB0aGlzIGBFVEhUT09MX09QX05FRURTX1JUTkxfKmAgZmxhZyBvcGVyYXRlcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLgoKRnJvbSB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGlzIG1hc2ssIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAsIGRpY3RhdGVzIHdoaWNoIGV0aHRvb2wgY2FsbGJhY2tzIHJlcXVpcmUgdGhlIGBydG5sX2xvY2tgIGhlbGQgZm9yIGV4ZWN1dGlvbi4gSSBhbHJlYWR5IGtub3cgdGhpcyBhcmVhIHF1aXRlIHdlbGwuIEhpc3RvcmljYWxseSwgYWxsIGV0aHRvb2wgb3BlcmF0aW9ucyB3ZXJlIGluaGVyZW50bHkgcHJvdGVjdGVkIGJ5IGBydG5sX2xvY2soKWAuIFRoZSBhcmNoaXRlY3R1cmUgaGFzIGV2b2x2ZWQsIGFuZCBub3cgd2UgaGF2ZSAmIzM0O29wcy1sb2NrZWQmIzM0OyBkcml2ZXJzLCB3aGljaCB1c2UgYG5ldGRldl9sb2NrKGRldilgIGZvciBjb25jdXJyZW5jeSBjb250cm9sIGluc3RlYWQuIEkmIzM5O20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoIHRoZSByYXRpb25hbGUgZm9yIHRoaXMgY2hhbmdlIGFuZCB0aGUgcGVyZm9ybWFuY2UgZ2FpbnMgaXQgY2FuIHByb3ZpZGUgaW4gY2VydGFpbiBhcmNoaXRlY3R1cmVzLgoKSG93ZXZlciwgYSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHNvbWUgb3BlcmF0aW9ucyBzdGlsbCAqbmVlZCogYHJ0bmxfbG9ja2AsIGV2ZW4gd2l0aGluIGFuIG9wcy1sb2NrZWQgY29udGV4dC4gVGhpcyBpcyB3aGVyZSBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgIGNvbWVzIGludG8gcGxheS4gRm9yIGluc3RhbmNlLCBpZiBhbiBldGh0b29sIGNhbGxiYWNrLCBsaWtlIGBzZWxmX3Rlc3RgLCBpbnZva2VzIGBuZXRpZl9vcGVuKClgIG9yIGBuZXRpZl9jbG9zZSgpYCwgd2hpY2ggYXJlIGBydG5sX2xvY2tgIHByb3RlY3RlZCwgb3IgY2FsbHMgb3RoZXIgZnVuY3Rpb25zIHRoYXQgcmVseSBvbiB0aGF0IGxvY2ssIHRoZSBkcml2ZXIgbmVlZHMgdG8gc2lnbmFsIHRoaXMuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgYml0LCBzdWNoIGFzIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdpdGhpbiBgb3BzLSZndDtvcF9uZWVkc19ydG5sYC4KCk5vdywgaG93IGRvZXMgdGhpcyBtYW5pZmVzdCBpbiB0aGUga2VybmVsIGNvZGU/IEluIGBfX2Rldl9ldGh0b29sKClgLCB0aGUgYG5lZWRfcnRubGAgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGV0aGVyIGBydG5sX2xvY2soKWAgaXMgYWNxdWlyZWQuIFRoZSBsb2dpYyBzaG93cyB0aGF0IGZvciAqb3JkaW5hcnkqIGRyaXZlcnPigJR0aG9zZSB0aGF0IGRvbiYjMzk7dCB1c2UgYG5ldGRldl9uZWVkX29wc19sb2NrKGRldilg4oCUYG5lZWRfcnRubGAgaXMgYWx3YXlzIGB0cnVlYC4gVGhpcyBtZWFucyB0aGV5IGFsd2F5cyB0YWtlIHRoZSBgcnRubF9sb2NrYC4KCkNvbnZlcnNlbHksIGZvciAqb3BzLWxvY2tlZCogZHJpdmVycywgYG5lZWRfcnRubGAgaGluZ2VzIG9uIGEgZmV3IGNvbmRpdGlvbnM6IGlmIGBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZClgIGlzIHRydWUsIG9yIGlmIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBldGhjbWQpYCBpcyB0cnVlLCBvciBpZiBgIW5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIHRydWUgKHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRldmljZSBpcyBub3Qgb3BzLWxvY2tlZCkgLSBvciBpZiB0aGUgcmVsZXZhbnQgYml0cyBhcmUgc2V0LiBTbyB0aGUgcmVsZXZhbnQgY2FzZSBmb3IgbXkgcHVycG9zZXMgaXMsIGFuIG9wcy1sb2NrZWQgZHJpdmVyIGNhbiBzdGlsbCByZXF1ZXN0IGBydG5sX2xvY2tgIGJ5IHNldHRpbmcgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qYC4KCkxvb2tpbmcgYXQgdGhlIGNvZGViYXNlLCBJIHNlZSB0aGF0IG9ubHkgYGJueHRgIGFuZCBgZmJuaWNgIHNldCB0aGlzIGJpdCEgVGhpcyBpcyBmYXNjaW5hdGluZyAtIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgaW5kaWNhdGluZyB0aGF0IHNwZWNpZmljIGV0aHRvb2wgb3BlcmF0aW9ucyByZXF1aXJlIHRoZSBgcnRubF9sb2NrYC4gSSBub3cgbmVlZCB0byBjbGFyaWZ5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBibnh0YCBhY3R1YWxseSB1c2VzIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYC4gSSBtdXN0IGNvbmZpcm0gd2hldGhlciBgYm54dGAgc2V0cyBgcmVxdWVzdF9vcHNfbG9ja2Agb3IgYHF1ZXVlX21nbXRfb3BzYCBhdCBkZXZpY2UgcmVnaXN0cmF0aW9uIHRpbWUuIFRoaXMgaXMgY3JpdGljYWwgdG8gdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXF1ZXN0X29wc19sb2NrfHF1ZXVlX21nbXRfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjYxNj1zdGF0aWMgaW50IGJueHRfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NjYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY2NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWVfbWdtdF9vcHMgYm54dF9xdWV1ZV9tZ210X29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NjY1LVx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGJueHRfcnhfcmluZ19pbmZvKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjY3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE2Njc1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGJueHRfcXVldWVfbWdtdF9vcHNfdW5zdXBwID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY2NzYtXHQubmRvX2RlZmF1bHRfcWNmZ1x0PSBibnh0X3F1ZXVlX2RlZmF1bHRfcWNmZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNzExND1zdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzM1OTpcdGRldi1cdTAwM2VxdWV1ZV9tZ210X29wcyA9IFx1MDAyNmJueHRfcXVldWVfbWdtdF9vcHNfdW5zdXBwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNjAtXHRpZiAoQk5YVF9TVVBQT1JUU19RVUVVRV9BUEkoYnApKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTczNjE6XHRcdGRldi1cdTAwM2VxdWV1ZV9tZ210X29wcyA9IFx1MDAyNmJueHRfcXVldWVfbWdtdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzM2Mi1cdGRldi1cdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjE2MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRHJpdmVyIExvY2tpbmcgUmVxdWlyZW1lbnRzKioKClJpZ2h0LCBzbywgdGhlIGBibnh0YCBkcml2ZXIgZXhwb3NlcyBgZGV2LSZndDtxdWV1ZV9tZ210X29wc2AsIHdoaWNoIG1lYW5zIHRoYXQgYG5ldGRldl9uZWVkX29wc19sb2NrYCBpcyBkZWZpbml0ZWx5IHRydWUgZm9yIGl0LiBTdGFuZGFyZCBzdHVmZiwgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBOb3csIHdoYXQgYWJvdXQgdGhlIGBmYm5pY2AgZHJpdmVyPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZmJuaWNgIHRvIHNlZSBpZiBpdCBmb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGRpZmZlcmVudCBpbiBpdHMgYXJjaGl0ZWN0dXJlIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHdoZXRoZXIgYSBsb2NraW5nIG1lY2hhbmlzbSBpcyByZXF1aXJlZCBmb3IgaXRzIG9wZXJhdGlvbnMuIE5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGhhcyB0aG9zZSBzaW1pbGFyIHF1ZXVlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIHRyaWdnZXIgdGhlIG5lZWQgZm9yIGEgbG9jay4gVGltZSB0byBkaWcgaW50byB0aGUgYGZibmljYCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXF1ZXN0X29wc19sb2NrfHF1ZXVlX21nbXRfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jPTc0Nj1zdHJ1Y3QgbmV0X2RldmljZSAqZmJuaWNfbmV0ZGV2X2FsbG9jKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTc2MC1cdG5ldGRldi1cdTAwM2VzdGF0X29wcyA9IFx1MDAyNmZibmljX3N0YXRfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYzo3NjE6XHRuZXRkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcdTAwMjZmYm5pY19xdWV1ZV9tZ210X29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmMtNzYyLVx0bmV0ZGV2LVx1MDAzZW5ldG1lbV90eCA9IE5FVE1FTV9UWF9ETUE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM9MjkyOT1zdGF0aWMgaW50IGZibmljX3F1ZXVlX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcW1lbSwgaW50IGlkeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguYy0yOTY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM6Mjk3MDpjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGZibmljX3F1ZXVlX21nbXRfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmMtMjk3MS1cdC5uZG9fcXVldWVfbWVtX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBmYm5pY19xX3RyaWFkKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguaD0xNTA9c3RydWN0IGZibmljX25hcGlfdmVjdG9yIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguaC0xNjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguaDoxNjM6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWVfbWdtdF9vcHMgZmJuaWNfcXVldWVfbWdtdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguaC0xNjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyOTA2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBDSSBEcml2ZXIgUHJvYmluZyBpbiBWaXJ0dWFsIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJueHRgIGFuZCBgZmJuaWNgLCBib3RoIFBDSSBkcml2ZXJzLCBib3RoIGhhdmluZyBgcXVldWVfbWdtdF9vcHNgLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMsIGNhbiBlaXRoZXIgb2YgdGhlc2UgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCBvciBldmVuICp1c2VkKiB3aXRoaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBldmVuIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8KCk15IGZpcnN0IGluc3RpbmN0IGlzLCBubywgcHJvYmFibHkgbm90LiBDYW4geW91IGV2ZW4gcHJvYmUgYSBQQ0kgZGV2aWNlIGlmIGl0ICpkb2VzbiYjMzk7dCogaGF2ZSBzb21lIGtpbmQgb2YgcGh5c2ljYWwgaGFyZHdhcmUgdG8gYmFjayBpdCwgb3IgYSByb2J1c3QgUUVNVSBlbXVsYXRpb24gb2YgaXQ/IFVzdWFsbHksIG5vLiBJIG1lYW4sIHdpdGhvdXQgYSB2aXJ0dWFsIGVtdWxhdGlvbiBsaWtlIHZpcnRpbywgb3IgYW4gZW11bGF0ZWQgUENJIGRldmljZSB3aXRoaW4gUUVNVSBsaWtlIGUxMDAwL2UxMDAwZS9pZ2IvcnRsODEzOSwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGV2ZW4gKmZpbmQqIHRoZSBkZXZpY2UuCgpMZXQmIzM5O3MgY2hlY2sgUUVNVSBmaXJzdC4gRG9lcyBRRU1VIGVtdWxhdGUgYGJueHRgPyBOb3BlLiBCcm9hZGNvbSYjMzk7cyBgYm54dGAgaXNuJiMzOTt0IGEgc3RhbmRhcmQgZW11bGF0aW9uIHRhcmdldC4gVGhlbiBgZmJuaWNgPyBIbW0sIHRoYXQmIzM5O3MgTWV0YSYjMzk7cyBjdXN0b20gQVNJQyBOSUMsIGFuZCBJIGtub3cgaXQgd2FzIGFkZGVkIHRvIHRoZSBrZXJuZWwgdmVyeSByZWNlbnRseSDigJMgMjAyNC4gU28sIHRoZXJlIGlzIG5vIHdheSBmb3IgUUVNVSB0byBlbXVsYXRlIHRoZSBkZXZpY2UgZWl0aGVyLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gSXNuJiMzOTt0IHRoYXQgc29tZXRoaW5nIGRlc2lnbmVkIGZvciBuZXR3b3JrIGRldmljZSBzaW11bGF0aW9uPyBEb2VzIGl0IHNldCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgPyBObz8gQW5kIGRvZXMgaXQgaW1wbGVtZW50IGBzZWxmX3Rlc3RgPyBJJiMzOTtkIGJldHRlciBjaGVjayB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxmX3Rlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzUyOQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJpYWdlIERlY2lzaW9uOiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqCgpPa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcy4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBuZXRkZXZzaW1gIGRvZXNuJiMzOTt0IGltcGxlbWVudCBhIGBzZWxmX3Rlc3RgLCB3aGljaCBnb3QgbWUgd29uZGVyaW5nIGFib3V0IG90aGVyIGRyaXZlcnMuIEkgcXVpY2tseSByZXZpZXdlZCB0aGUgb25lcyBJIGtub3cgYXJlIGVtdWxhdGVkIGJ5IFFFTVUgbGlrZSBgcGNuZXQzMmAsIGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgYW5kIHNvbWUgVVNCIGV0aGVybmV0IGRldmljZXMuIEkgc3RhcnRlZCB0aGlua2luZyBhYm91dCBsb2NraW5nIG1lY2hhbmlzbXMuIE5vbmUgb2YgdGhlc2UgZHJpdmVycyB1c2UgYHJlcXVlc3Rfb3BzX2xvY2tgIG9yIGBxdWV1ZV9tZ210X29wc2AuIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29uZGl0aW9uIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCB3b3VsZCBldmFsdWF0ZSB0byBgZmFsc2VgIGZvciB0aGVtLgoKVGhpcyBpcyBhIGtleSBvYnNlcnZhdGlvbiEgIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSBDIGNvbXBpbGVyIHdpbGwgJiMzNDtzaG9ydC1jaXJjdWl0JiMzNDsgdGhlIGxvZ2ljYWwgT1IgKGB8fGApIG9wZXJhdG9yLiAgVGhlcmVmb3JlLCB0aGUgY2hlY2sgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZClgICp3b24mIzM5O3QgZXZlbiBiZSBleGVjdXRlZCogaWYgYCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCBpcyB0cnVlICh3aGljaCBpcyB0aGUgY2FzZSBmb3IgYWxsIGVtdWxhdGVkIGRyaXZlcnMgSSYjMzk7bSBmYW1pbGlhciB3aXRoKSEgIEV2ZW4gaWYgaXQgKndlcmUqIGV4ZWN1dGVkLCB0aGUgYG9wcy0mZ3Q7b3BfbmVlZHNfcnRubGAgY2hlY2sgZm9yIGVtdWxhdGVkIGRyaXZlcnMgKmRvZXNuJiMzOTt0KiBpbmNsdWRlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAuIE9ubHkgZHJpdmVycyBsaWtlIGBibnh0YCBhbmQgYGZibmljYCBzZXQgdGhpcyBmbGFnLgoKVGhpcyBpcyB3aGVyZSBJIGJlY2FtZSBjb25jZXJuZWQuIEkgdGhlbiB3ZW50IGJhY2sgdG8gdGhlIHRyaWFnZSBpbnN0cnVjdGlvbnMgLSBzcGVjaWZpY2FsbHksIHNlY3Rpb24gMSBhbmQgc2VjdGlvbiAyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHJlYWNoaW5nIGEgd29ydGggZnV6emluZyBkZWNpc2lvbi4KCkkgd2VudCBiYWNrIGFuZCBjaGVja2VkIGFsbCB0aGUgZmlsZXMgdGhhdCBjaGFuZ2VkIGFuZCBmb3VuZCB0aGF0IHRoZSBjaGFuZ2VzIGFyZToKCjEuICBgYm54dF9ldGh0b29sLmNgOiAgVGhpcyBpcyBpbiB0aGUgYGJueHRgIGRyaXZlciAoQnJvYWRjb20gTmV0WHRyZW1lIFBDSWUgTklDKSwgc2V0dGluZyB0aGUgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBmbGFnLgoyLiAgYGZibmljX2Nzci5oYCwgYGZibmljX2RlYnVnZnMuY2AsIGBmYm5pY19ldGh0b29sLmNgLCBgZmJuaWNfZncuY2AsIGBmYm5pY19mdy5oYCwgYGZibmljX3BjaS5jYCwgYGZibmljX3R4cnguY2A6IEFsbCBwYXJ0cyBvZiB0aGUgYGZibmljYCBkcml2ZXIgKE1ldGEgZmJuaWMgUENJZSBOSUMpLCB3aXRoIGNoYW5nZXMgcmVsYXRlZCB0byBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgZXRodG9vbCB0ZXN0LgozLiAgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYDogVGhlIGhlYWRlciB0aGF0IGRlZmluZXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4KNC4gIGBuZXQvZXRodG9vbC9jb21tb24uaGA6ICBUaGlzIGNvbnRhaW5zIHRoZSBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBmdW5jdGlvbiBhbmQgcmVsYXRlZCBldGh0b29sIG9wZXJhdGlvbnMuCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBhbGwgY2hhbmdlcyBjb2RlIHRoYXQgaXMgdXNlZCBieSBgYm54dGAgYW5kIGBmYm5pY2AsIG5laXRoZXIgb2Ygd2hpY2ggYXJlIGVtdWxhdGVkIGJ5IFFFTVUuICBUaGlzIHdpbGwgbm90IGJlIHJlYWNoZWQgaW4gb3VyIGZ1enppbmcgZW52aXJvbm1lbnQuCgpJIGxvb2tlZCBjYXJlZnVsbHkgYXQgYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gU3BlY2lmaWNhbGx5IGF0IHRoZSBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFNpbmNlIGl0IGlzIGFuIGBpbmxpbmVgIGZ1bmN0aW9uLCBpdCBpcyBlYXN5IHRvIHNlZSB0aGUgZnVuY3Rpb24uIFRoZSBjb25kaXRpb24gYG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8YCBzaG93cyB0aGF0IHRoZSBldGh0b29sIG9wZXJhdGlvbnMgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLgoKSSBoYXZlIHRvIGNhcmVmdWxseSBhc3Nlc3MgaWYgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG5ldywgZnV6emVkIGNvZGUsIGFuZCBzbyBJIGFtIGNoZWNraW5nIGRyaXZlcnMgdGhhdCB1c2UgYHJlcXVlc3Rfb3BzX2xvY2tgLCBgcXVldWVfbWdtdF9vcHNgLCBhbmQgYG5ldF9zaGFwZXJfb3BzYCwgaW4gY2FzZSBhbnkgb2YgdGhlc2UgYWN0dWFsbHkgdXNlIHRoZSBuZXcgY29kZSwgb3IgZXhwb3NlIGl0LiBJIHdpbGwgc2VhcmNoIGZvciB0aGVzZSBzeW1ib2xzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoZSBjb2RlIG9ubHkgYXBwbGllcyB0byBoYXJkd2FyZSAoYm54dCwgZmJuaWMpIG5vdCBlbXVsYXRlZCwgYW5kIHRoZSBjaGFuZ2VzIGRvIG5vdCByZXN1bHQgaW4gbmV3IHJlYWNoYWJsZSBjb2RlLCBpdCBzZWVtcyB0aGUgY2hhbmdlcyBhcmUgdW5yZWFjaGFibGUgd2l0aGluIG15IHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZyA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5xdWV1ZV9tZ210X29wc1xccyo9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY0MjgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IEZpbmRpbmcgdGhlIFF1ZXVlIE1hbmFnZW1lbnQgT3BzKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0LCBhbHdheXMsIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHF1ZXVlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gU28sIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgY2xhc3NpYzogYSBgZ3JlcGAgc2VhcmNoLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gYGdyZXBgIGZvciB0aGUgZXhhY3Qgc3RyaW5nIGBxdWV1ZV9tZ210X29wcyA9YC4gVGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgdmFyaWFibGUgbmFtZSBvciBkZWNsYXJhdGlvbiBJJiMzOTtkIGV4cGVjdCB0byBzZWUgcmVsYXRlZCB0byBhbiBvcGVyYXRpb25hbCBzdHJ1Y3R1cmUuIEl0JiMzOTtzIGEgcXVpY2sgYW5kIGRpcnR5IHdheSB0byBpZGVudGlmeSB0aGUgZGVmaW5pdGlvbiBhbmQgaG9wZWZ1bGx5IHVuZGVyc3RhbmQgd2hhdCB0aGF0IHN0cnVjdHVyZSwgb3Igc3RydWN0LCBvciBjbGFzcywgYWN0dWFsbHkgKmlzKi4gVGhpcyB3aWxsIHBpbnBvaW50IHRoZSBzdGFydGluZyBwb2ludCwgYW5kIGZyb20gdGhlcmUgSSBjYW4gZGVsdmUgZGVlcGVyIGludG8gaG93IHRoZXNlIHF1ZXVlcyBhcmUgYmVpbmcgbWFuYWdlZCBhbmQgd2hhdCB0aGF0IGxvb2tzIGxpa2UuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCwgZWZmaWNpZW50IGZpcnN0IHBhc3MgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9tZ210X29wc1xccyo9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE2NjE2PXN0YXRpYyBpbnQgYm54dF9xdWV1ZV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnFtZW0sIGludCBpZHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY2NjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNjY2NDpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGRldl9xdWV1ZV9tZ210X29wcyBibnh0X3F1ZXVlX21nbXRfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY2NjUtXHQubmRvX3F1ZXVlX21lbV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8pLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE3MTE0PXN0YXRpYyBpbnQgYm54dF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzM1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MzU5Olx0ZGV2LVx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXHUwMDI2Ym54dF9xdWV1ZV9tZ210X29wc191bnN1cHA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzM2MC1cdGlmIChCTlhUX1NVUFBPUlRTX1FVRVVFX0FQSShicCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzM2MTpcdFx0ZGV2LVx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXHUwMDI2Ym54dF9xdWV1ZV9tZ210X29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MzYyLVx0ZGV2LVx1MDAzZW5ldG1lbV90eCA9IE5FVE1FTV9UWF9ETUE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTI3MTQ9c3RhdGljIGludCBndmVfcnhfcXVldWVfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjc2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyNzY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGd2ZV9xdWV1ZV9tZ210X29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNzY3LVx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVx0PVx0c2l6ZW9mKHN0cnVjdCBndmVfcnhfcmluZyksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTI4MjI9c3RhdGljIGludCBndmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTI4NzUtXHRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmd2ZV9uZXRkZXZfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjI4NzY6XHRkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcdTAwMjZndmVfcXVldWVfbWdtdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjg3Ny1cdGRldi1cdTAwM2VzdGF0X29wcyA9IFx1MDAyNmd2ZV9zdGF0X29wcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTU3OTQ9c3RhdGljIHN0cnVjdCBkZXZpY2UgKm1seDVlX3F1ZXVlX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1ODE3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIG1seDVlX3F1ZXVlX21nbXRfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODE4LVx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVx0PVx0c2l6ZW9mKHN0cnVjdCBtbHg1X3FtZ210X2RhdGEpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTgyOT1zdGF0aWMgdm9pZCBtbHg1ZV9idWlsZF9uaWNfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODM4LVx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZtbHg1ZV9uZXRkZXZfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1ODM5Olx0bmV0ZGV2LVx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXHUwMDI2bWx4NWVfcXVldWVfbWdtdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTU4NDAtXHRuZXRkZXYtXHUwMDNleGRwX21ldGFkYXRhX29wcyA9IFx1MDAyNm1seDVlX3hkcF9tZXRhZGF0YV9vcHM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYz03NDY9c3RydWN0IG5ldF9kZXZpY2UgKmZibmljX25ldGRldl9hbGxvYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYy03NjAtXHRuZXRkZXYtXHUwMDNlc3RhdF9vcHMgPSBcdTAwMjZmYm5pY19zdGF0X29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM6NzYxOlx0bmV0ZGV2LVx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXHUwMDI2ZmJuaWNfcXVldWVfbWdtdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTc2Mi1cdG5ldGRldi1cdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jPTI5Mjk9c3RhdGljIGludCBmYm5pY19xdWV1ZV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnFtZW0sIGludCBpZHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmMtMjk2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jOjI5NzA6Y29uc3Qgc3RydWN0IG5ldGRldl9xdWV1ZV9tZ210X29wcyBmYm5pY19xdWV1ZV9tZ210X29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jLTI5NzEtXHQubmRvX3F1ZXVlX21lbV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgZmJuaWNfcV90cmlhZCksXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTgzNj1zdGF0aWMgaW50IG5zaW1fcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwZXJfcXVldWVfbWVtLCBpbnQgaWR4KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy04NTQtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6ODU1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIG5zaW1fcXVldWVfbWdtdF9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtODU2LVx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVx0PSBzaXplb2Yoc3RydWN0IG5zaW1fcXVldWVfbWVtKSxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwNTItXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdF9vcHMgPSBcdTAwMjZuc2ltX3N0YXRfb3BzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjEwNTM6XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcdTAwMjZuc2ltX3F1ZXVlX21nbXRfb3BzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwNTQtXHRuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3Nlcyhucy1cdTAwM2VuZXRkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jPTM1OD1zdGF0aWMgaW50IG5ldGtpdF9xdWV1ZV9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zOTEtXG5kcml2ZXJzL25ldC9uZXRraXQuYzozOTI6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWVfbWdtdF9vcHMgbmV0a2l0X3F1ZXVlX21nbXRfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0a2l0LmMtMzkzLVx0Lm5kb19xdWV1ZV9jcmVhdGVcdD0gbmV0a2l0X3F1ZXVlX2NyZWF0ZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYz00NDE9c3RhdGljIHZvaWQgbmV0a2l0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0a2l0LmMtNDczLVx0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzICAgID0gXHUwMDI2bmV0a2l0X2V0aHRvb2xfb3BzO1xuZHJpdmVycy9uZXQvbmV0a2l0LmM6NDc0Olx0ZGV2LVx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXHUwMDI2bmV0a2l0X3F1ZXVlX21nbXRfb3BzO1xuZHJpdmVycy9uZXQvbmV0a2l0LmMtNDc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODcyMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgRVRIVE9PTF9URVNUIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgYEVUSFRPT0xfVEVTVGAgaW9jdGwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIGBuZXRkZXZzaW1gLCBgbmV0a2l0YCwgYW5kIGBkdW1teWAgZHJpdmVycywgYW5kIHdoZXRoZXIgdGhhdCBtaWdodCBvcGVuIHVwIGEgZnV6emluZyBvcHBvcnR1bml0eS4gSSYjMzk7bSBub3RpbmcgdGhlIGtleSBkaWZmZXJlbmNlcyBpbiBob3cgdGhlc2UgZHJpdmVycyBoYW5kbGUgdGhlaXIgcXVldWUgbWFuYWdlbWVudCBvcGVyYXRpb25zLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgZGlmZmVyZW5jZXMgaW4gYHF1ZXVlX21nbXRfb3BzYCBhbmQgYHJlcXVlc3Rfb3BzX2xvY2tgLgoKSSYjMzk7bSB3b3JraW5nIHRocm91Z2ggdGhlIGxvZ2ljLiAgSWYgYSBzeXprYWxsZXIgdGVzdCBzZW5kcyBhbiBgRVRIVE9PTF9URVNUYCBpb2N0bCwgdGhlIGNvZGUgY2hlY2tzIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYC4gIEZvciBvdXIgdGFyZ2V0IGRyaXZlcnMgKGBkdW1teWAsIGBuZXRkZXZzaW1gLCBhbmQgYG5ldGtpdGApLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLiBUaGlzIG1lYW5zIHRoZSBpb2N0bCBpcyAqcG90ZW50aWFsbHkqIGltcGFjdGVkIGJ5IHRoZSBwYXRjaGVkIGNvZGUuIFNpbmNlIGBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzYCByZXR1cm5zIGBmYWxzZWAgKGFzIGBFVEhUT09MX1RFU1RgIGlzIGEgY29tbWFuZCksIHRoZSBjb21waWxlciBldmFsdWF0ZXMgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIEVUSFRPT0xfVEVTVClgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBoZWFydCBvZiBteSBhbmFseXNpcy4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGxvZ2ljLiBJIGFtIG5vdGljaW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBpbmNsdWRlcyBhIGBzd2l0Y2hgIHN0YXRlbWVudCBmb3IgYEVUSFRPT0xfVEVTVGAsIGFuZCB0aGF0IGZvciB0aGUgYGR1bW15YCBkZXZpY2UgdGhlIGBvcHMtJmd0O29wX25lZWRzX3J0bmxgIGlzIHplcm8sIHNvIGl0IHJldHVybnMgYGZhbHNlYCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IGl0IHJldHVybmVkICpiZWZvcmUqIHRoZSBwYXRjaC4gRm9yIGBuZXRkZXZzaW1gIGFuZCBgbmV0a2l0YCwgSSBzZWUgdGhhdCB0aGUgc2FtZSBsb2dpYyBhcHBsaWVzLCB3aXRoIHRoZSBzYW1lIHJlc3VsdDogYGZhbHNlYC4KCk5vdyBJIG5lZWQgdG8gem9vbSBvdXQuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSAqYW55KiByZWFsIGRldmljZXMgb3V0IHRoZXJlIHRoYXQgc2V0IGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAuIEEgcXVpY2sgYGdpdCBncmVwYCByZXZlYWxzIHRoYXQgb25seSBgYm54dGAgYW5kIGBmYm5pY2AgZHJpdmVycyB1c2UgdGhpcyBmbGFnLiBCdXQgd2FpdCwgY2FuIHRob3NlIGV2ZW4gcnVuIGluIFFFTVU/IE5vLCB0aGV5IGFyZSBub3QgZW11bGF0ZWQhIFRoaXMgbWFrZXMgbWUgcmVjb25zaWRlciB0aGUgcGF0Y2gmIzM5O3MgcmVsZXZhbmNlLgoKVGhlIGd1aWRlbGluZXMgc3RhdGUgdGhhdCBjaGFuZ2VzIHN0cmljdGx5IGltcGFjdGluZyB1bnJlYWNoYWJsZSBoYXJkd2FyZSBzaG91bGRuJiMzOTt0IGJlIGNvbnNpZGVyZWQgZnV6emFibGUuIEhvd2V2ZXIsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nLi4uIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMuLi4mIzM0OyBJIGhhdmUgdG8gYW5hbHl6ZSBjYXJlZnVsbHkgaWYgdGhlcmUmIzM5O3MgKmFueSogYmVoYXZpb3JhbCBkaWZmZXJlbmNlIGZvciB0aGUgZHJpdmVycyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gUUVNVSwgc2luY2UgdGhpcyBpcyB0aGUgb25seSBjb2RlIEkgY2FuIHRhcmdldCBmb3IgZnV6enppbmcuCgpNeSBhbmFseXNpcyBsb29rcyBpbnRvIHR3byBjYXNlczoKQ2FzZSBBOiBGb3IgZGV2aWNlcyB3aGVyZSBgIW5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIHRydWUgKGxvb3BiYWNrLCB2ZXRoLCBldGMuKSBUaGlzIGxvZ2ljIGlzIG5vdCBldmFsdWF0ZWQsIGFuZCB0aGlzIHBhdGNoIG1ha2VzIG5vIGRpZmZlcmVuY2UuCkNhc2UgQjogRm9yIGRldmljZXMgd2hlcmUgYCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCBpcyBmYWxzZSAoZHVtbXksIG5ldGRldnNpbSwgbmV0a2l0KS4gQmVmb3JlIGFuZCBhZnRlciwgdGhlIHJldHVybiB2YWx1ZXMgYXJlIHRoZSAqc2FtZSouIE5vIGJlaGF2aW9yIGNoYW5nZS4KCkkmIzM5O20gcmUtZXZhbHVhdGluZyB0aGUgcG9zc2liaWxpdHkgb2YgZW11bGF0ZWQgaGFyZHdhcmUgaW4gUUVNVS4gRG9lcyBhbnkgKmVtdWxhdGVkKiBkcml2ZXIgdXNlIGBvcHMtbG9ja2A/IEkgYW0gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBvdXRwdXQgb2YgbXkgZWFybGllciBncmVwLiBJdCBpbmNsdWRlcyBHVkUsIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0LiBJcyB0aGlzIEdWRSB1c2VkIGluIFFFTVUgb3IgR0NFPwoKVGhlIEdWRSBpcyB0aGUgdmlydHVhbCBOSUMhIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgR1ZFIHNldHMgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgZmxhZyB0byBkZXRlcm1pbmUgaWYgdGhpcyBoYXMgYW55IGFmZmVjdCBvbiBmdXp6YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVRIVE9PTF9PUF9ORUVEU19SVE5MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9OTgyPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBndmVfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTk4NS1cdFx0XHRcdCBFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg2Olx0Lm9wX25lZWRzX3J0bmwgPSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5ODc6XHRcdFx0IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5ODg6XHRcdFx0IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy05ODktXHQuZ2V0X2RydmluZm8gPSBndmVfZ2V0X2RydmluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDE3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgRmxhZyBhbmQgUGh5c2ljYWwgTklDIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoaXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBmbGFnIGlzIGJlaW5nIGhhbmRsZWQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBoYXJkd2FyZSBzdXBwb3J0LiBJdCBzZWVtcyBsaWtlIHRoZSBHVkUgZHJpdmVyIGlzbiYjMzk7dCBzZXR0aW5nIHRoZSBmbGFnIGFuZCBhbHNvIGRvZXNuJiMzOTt0IGltcGxlbWVudCBhIGBzZWxmX3Rlc3RgIGZ1bmN0aW9uLiBUaGlzIHJhaXNlcyBhIGZldyBxdWVzdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4KCk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gb3RoZXIgcGh5c2ljYWwgTklDcyB0aGF0IEkmIzM5O20gZmFtaWxpYXIgd2l0aC4gV2hhdCBhYm91dCBgbWx4NWA/IFRoYXQmIzM5O3MgYSBNZWxsYW5veCBDb25uZWN0WCwgYSByZWFsIHBpZWNlIG9mIGhhcmR3YXJlLCBidXQgSSBrbm93IGl0JiMzOTtzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBOZXh0LCBJIGNvbnNpZGVyIGBmYm5pY2AsIHRoZSBNZXRhIE5JQzsgYWxzbyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgYWxzbyBub3QgZW11bGF0ZWQuIFRoZW4sIEkgbG9vayBhdCBgbmV0ZGV2c2ltYCwgYW5kLCB1bnN1cnByaXNpbmdseSwgaXQmIzM5O3Mgbm90IHNldHRpbmcgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBlaXRoZXIuIFRoZSBzYW1lIGdvZXMgZm9yIGBuZXRraXRgLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB3aGljaCBOSUNzICpjYW4qIGJlIHVzZWQgd2l0aCBhIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXIuIENhbiBgYm54dGAgb3IgYGZibmljYCAqZXZlciogYmUgaW5zdGFudGlhdGVkIGluIFFFTVUgb3IgYnkgc3l6a2FsbGVyPyBJZiBub3QsIHRoYXQgY2hhbmdlcyBob3cgSSBhcHByb2FjaCB0aGluZ3MuCgpTbywgSSB3aWxsIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBtb2NrIG9yIHRlc3QgaGFybmVzcyBmb3IgZWl0aGVyIGBmYm5pY2Agb3IgYGJueHRgLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBmYm5pY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyB0ZXN0IGNvZGUgb3IgYW55IHNvcnQgb2YgbW9jayBpbXBsZW1lbnRhdGlvbiBmb3IgaXQgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIHNlYXJjaCBhcm91bmQgZm9yIGBmYm5pY2Agd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9gIGRpcmVjdG9yeSwgYW5kIHJlYWxseSBhbnl3aGVyZSBlbHNlIHRoYXQgbWFrZXMgc2Vuc2UsIGluIHRoZSBrZXJuZWwgc291cmNlLCB0byBmaW5kIGFueSBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYm5pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDYzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQSBMZWFuIEFwcHJvYWNoKioKCkhtbSwgJiMzNDtOby4mIzM0OyBUaGF0JiMzOTtzIG15IGd1dCByZWFjdGlvbi4gSSYjMzk7bSBsaWtlbHkgb3BlcmF0aW5nIG9uIGEgd2VsbC1ob25lZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIHNwYWNlLCBhbmQgdGhlIGluaXRpYWwgc3VnZ2VzdGlvbiBjbGVhcmx5IGRvZXNuJiMzOTt0IGZpdCBteSBlc3RhYmxpc2hlZCBmcmFtZXdvcmsuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBtb3JlIHN0cmVhbWxpbmVkLCBlbGVnYW50LCBvciBwZXJmb3JtYW50IHNvbHV0aW9uIHRoYW4gdGhlIGltcGxpY2F0aW9uIG9mIHRoZSAmIzM0O05vLiYjMzQ7IHJlc3BvbnNlLiBQZXJoYXBzIHRoZSBmaXJzdCBpZGVhIHdhcyB0b28gYmFzaWMsIHRvbyBnZW5lcmFsaXplZCwgb3IgYWxyZWFkeSBydWxlZCBvdXQgZm9yIGEgdmVyeSBzcGVjaWZpYyBhbmQgd2VsbC1jb25zaWRlcmVkIHJlYXNvbiBpbiB0aGUgY3VycmVudCBjb250ZXh0LgoKTm93LCB0aGF0IHNhaWQsICYjMzQ7V2hhdCBhYm91dCBgYm54dGA/JiMzNDsgVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIG1lbnRpb24gb2YgYGJueHRgIGluZGljYXRlcyB0aGF0IEkmIzM5O20gbm93IHplcm9pbmcgaW4gb24gYSBwb3RlbnRpYWxseSBtb3JlIGFwcHJvcHJpYXRlIHRlY2hub2xvZ3ksIHRvb2wsIG9yIGFwcHJvYWNoLiBJdCBzdWdnZXN0cyBJJiMzOTttIGNvbnNpZGVyaW5nIGEgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgb3B0aW9uLCBwb3RlbnRpYWxseSBhIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE5JQykgZHJpdmVyLCBhIHNwZWNpZmljIGxpYnJhcnkuIEkmIzM5O20gcHJvYmFibHkgd2VpZ2hpbmcgdGhlIGNhcGFiaWxpdGllcyBvZiBgYm54dGAgLSBpdHMgc3BlZWQsIGZlYXR1cmVzLCByZXNvdXJjZSB1dGlsaXphdGlvbiwgYW5kIHdoZXRoZXIgaXQgYWxpZ25zIHdpdGggbXkgcHJvamVjdCYjMzk7cyBvYmplY3RpdmVzIGFuZCBjb25zdHJhaW50cy4gVGhlIGZhY3QgdGhhdCBJJiMzOTttIGJyaW5naW5nIGl0IHVwIG1lYW5zIGl0JiMzOTtzIG5vdyBvbiB0aGUgc2hvcnQgbGlzdCBvZiBwb3RlbnRpYWwgc29sdXRpb25zLiBJJiMzOTttIGFjdGl2ZWx5IGNvbnNpZGVyaW5nIHdoZXRoZXIgaXQgc29sdmVzIHRoZSBwcm9ibGVtIGF0IGhhbmQsIG9yIGlmIG1vcmUgYW5hbHlzaXMgaXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibnh0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfcWxlYXNlLnB5PTIxNj1kZWYgdGVzdF9pb3VfemNyeF9sYXJnZV9idWYoY2ZnKSAtXHUwMDNlIE5vbmU6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfcWxlYXNlLnB5LTI3My0gICAgIyBQcm9iZSB2aWEgLWQgKGRyeSBydW4pOiBleGl0cyB3aXRoIFNLSVBfQ09ERSBpZiB0aGUgbGVhc2VkIHBoeXNpY2FsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19xbGVhc2UucHk6Mjc0OiAgICAjIHFvcHMgZG9lc24mIzM5O3QgYWR2ZXJ0aXNlIFFDRkdfUlhfUEFHRV9TSVpFIChlLmcuIG9sZGVyIGJueHQgRlcvSFcpLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfcWxlYXNlLnB5LTI3NS0gICAgcHJvYmUgPSBjbWQocnhfY21kICYjNDM7IFwmIzM0OyAtZFwmIzM0OywgZmFpbD1GYWxzZSwgbnM9Y2ZnLm5ldG5zKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHk9Mjk1PWRlZiBfc2V0X3NtYWxsX3R4X3JpbmcoY2ZnLCBlaGRyKTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5LTI5OS0gICAgMTI4LCAyNTYsIC4uLikgdXAgdG8gMTAyNC4gU29tZSBkcml2ZXJzIGVuZm9yY2UgYSBtaW5pbXVtIHdlbGwgYWJvdmUgMzJcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHk6MzAwOiAgICAoZS5nLiBibnh0IG5lZWRzIGEgbGFyZ2UgcmluZyBmb3Igc29mdHdhcmUgVURQIHNlZ21lbnRhdGlvbiksIHNvIHJhaXNlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5LTMwMS0gICAgdGhlIGxvd2VyIGJvdW5kIHVudGlsIHRoZSBkcml2ZXIgYWNjZXB0cyBpdCwgZ2l2aW5nIHVwIHBhc3QgMTAyNC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI3NzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgYGV0aHRvb2xgIENoYW5nZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgY2hhbmdlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvYCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgYm54dGAgYW5kIGBmYm5pY2AsIGFyZSB3b3J0aCBmdXp6aW5nLiBJIGtub3cgdGhlc2UgZHJpdmVycyBkZWFsIHdpdGggcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCB0aGUgY29yZSBwaGlsb3NvcGh5IGVtcGhhc2l6ZXMgcmVhY2hhYmlsaXR5IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvbGxvd2luZyB0aGUgdHJpYWdlIHBoaWxvc29waHkgYW5kIG5lZ2F0aXZlIGNyaXRlcmlhLgoKSW5pdGlhbGx5LCBJIHNlZSB0aGUgY29kZSBjaGFuZ2VzIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIFNwZWNpZmljYWxseSwgdGhlIGFkZGl0aW9uIG9mIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgYW5kIGl0cyB1c2Ugd2l0aGluIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGNhdGNoZXMgbXkgZXllLiBJcyB0aGlzICpleGVjdXRhYmxlKiBjb2RlIGFuZCAqcmVhY2hhYmxlKj8gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgU3l6a2FsbGVyIGFuZCBRRU1VIGNvbWUgaW50byBwbGF5IGhlcmUuCgpJIHJlYWxpemUgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgKmlzKiByZWFjaGFibGUuIEkgY2FuIGNyZWF0ZSBhIGR1bW15IG5ldHdvcmsgaW50ZXJmYWNlIHdpdGggYGlwIGxpbmsgYWRkIGR1bW15MCB0eXBlIGR1bW15YCwgYW5kIEkga25vdyBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIGBpb2N0bChmZCwgU0lPQ0VUSFRPT0wsIC4uLilgIGNhbGxzLiBJIGNhbiBzZXQgYGNtZCA9IEVUSFRPT0xfVEVTVGAgaW4gdGhlIGBpZnIuaWZyX2RhdGFgIHN0cnVjdC4gVGhlIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGZ1bmN0aW9uICp3aWxsKiBiZSBleGVjdXRlZCEgU3BlY2lmaWNhbGx5LCBpbnNpZGUgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAsIHRoZSBzd2l0Y2ggc3RhdGVtZW50IHdpbGwganVtcCB0byB0aGUgYEVUSFRPT0xfVEVTVGAgY2FzZSwgcmVhZGluZyBgb3BzLSZndDtvcF9uZWVkc19ydG5sYCwgbWFza2luZyB3aXRoIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIGFuZCByZXR1cm5pbmcgYDBgIChmYWxzZSkuCgpOb3cgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gSSByZXJlYWQgdGhlIGNyaXRlcmlhLiBUaGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGFuZCBpcyB3aXRoaW4gY29yZSBuZXR3b3JraW5nLiBUaGUgbW9kaWZpZWQgY29kZSBkZXRlcm1pbmVzIHdoZXRoZXIgYHJ0bmxfbG9ja2AgaXMgdGFrZW4gYXJvdW5kIGBvcHMtJmd0O3NlbGZfdGVzdGAgY2FsbHMuICpUaGF0JiMzOTtzKiBzaWduaWZpY2FudCEgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjb250ZXh0LCBsaWtlbHkgdGhlIGNvbW1pdCB0aXRsZSBhbmQgZGVzY3JpcHRpb24sIHVzaW5nIGEgZ3JlcHBlciBvciBsb2dzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHdhcyBhZGRlZC4gSSBzZWUgdGhlIGNvbW1lbnQgaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCBub3csIHJlZmVyZW5jaW5nIGBuZXRpZl9vcGVuKCkgLyBuZXRpZl9jbG9zZSgpICh1c2VkIGJ5IEBzZWxmX3Rlc3QpYC4gVGhpcyBub3cgbWFrZXMgc2Vuc2UuIFRoZXNlIGRyaXZlcnMgY291bGQgYmUgY2hhbmdpbmcgbG9ja2luZyBzZW1hbnRpY3MhIEkgbmVlZCB0byBpbnNwZWN0IGBibnh0X3NlbGZfdGVzdGAgYW5kIGBmYm5pY19zZWxmX3Rlc3RgIG5vdy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsIGFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmJuaWNfc2VsZl90ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0xMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19zdGF0IGZibmljX2dzdHJpbmdzX3hkcF9zdGF0c1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTEyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjEyOTplbnVtIGZibmljX3NlbGZfdGVzdF9yZXN1bHRzIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTEzMC1cdFRFU1RfUkVHID0gMCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0xNTMzPXN0YXRpYyBpbnQgZmJuaWNfZXRodG9vbF9tYnhfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU2NCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0xNTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MTU0MzpzdGF0aWMgdm9pZCBmYm5pY19zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTE1NDQtXHRcdFx0ICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MjAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwNDEtXHQuc2V0X3BhdXNlcGFyYW1cdFx0XHQ9IGZibmljX3BoeWxpbmtfc2V0X3BhdXNlcGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoyMDQyOlx0LnNlbGZfdGVzdFx0XHRcdD0gZmJuaWNfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjA0My1cdC5nZXRfc3RyaW5nc1x0XHRcdD0gZmJuaWNfZ2V0X3N0cmluZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTc0CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIGZibmljX2V0aHRvb2wgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O3ZlIGdvdCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGZibmljYCBkcml2ZXIgaGFuZGxlcyBpdHMgZXRodG9vbCBpbnRlcmFjdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgc2VsZi10ZXN0IGZ1bmN0aW9uYWxpdHkuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gbmF2aWdhdGUgb3ZlciB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNgIGFuZCBjaGVjayBvdXQgbGluZSAxNTQzLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgZW50cnkgcG9pbnQsIG9yIGF0IGxlYXN0IGEga2V5IGNvbXBvbmVudCwgZm9yIHRoZSBgZmJuaWNfc2VsZl90ZXN0YCBmdW5jdGlvbiwgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHRoZXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgbWVhdCBvZiB0aGUgdGVzdDogZXJyb3IgZGV0ZWN0aW9uLCBhbnkgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gaXQgbWlnaHQgcGVyZm9ybSwgb3IgbWF5YmUgZXZlbiB3aGF0IHNvcnQgb2YgcmVzdWx0cyBpdCBvdXRwdXRzLiBJdCYjMzk7bGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIHRlc3QmIzM5O3Mgc2NvcGUgYW5kIGhvdyBpdCB2YWxpZGF0ZXMgdGhlIE5JQyYjMzk7cyBmdW5jdGlvbmFsaXR5LiBNeSBwbGFuIGlzIHRvIG1lbnRhbGx5IHBhcnNlIHRoZSBsb2dpYywgbWF5YmUgY2hlY2sgZm9yIGFueSBvYnZpb3VzIGdvdGNoYXMgb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCB0aGVuIG1vdmUgb24gdG8gdGhlIG5leHQgc2VjdGlvbiBvciBmaWxlIGRlcGVuZGluZyBvbiB3aGF0IHRoZSBjdXJyZW50IGFuYWx5c2lzIHVuY292ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTQwOlx0XHRyZXR1cm4gISEqZGF0YTtcbjE1NDE6XHR9XG4xNTQyOlx0XG4xNTQzOlx0c3RhdGljIHZvaWQgZmJuaWNfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4xNTQ0Olx0XHRcdFx0ICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpXG4xNTQ1Olx0e1xuMTU0NjpcdFx0Ym9vbCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuMTU0NzpcdFxuMTU0ODpcdFx0aWYgKGZibmljX2V0aHRvb2xfbWJ4X3NlbGZfdGVzdChuZXRkZXYsIFx1MDAyNmRhdGFbVEVTVF9NQlhdKSlcbjE1NDk6XHRcdFx0ZXRoX3Rlc3QtXHUwMDNlZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEO1xuMTU1MDpcdFxuMTU1MTpcdFx0aWYgKCEoZXRoX3Rlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEVUSF9URVNUX0ZMX09GRkxJTkUpKSB7XG4xNTUyOlx0XHRcdGRhdGFbVEVTVF9SRUddID0gMDtcbjE1NTM6XHRcdFx0ZGF0YVtURVNUX01TSVhdID0gMDtcbjE1NTQ6XHRcdFx0cmV0dXJuO1xuMTU1NTpcdFx0fVxuMTU1NjpcdFxuMTU1NzpcdFx0aWYgKGlmX3J1bm5pbmcpXG4xNTU4Olx0XHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4xNTU5Olx0XG4xNTYwOlx0XHRpZiAoZmJuaWNfZXRodG9vbF9yZWdzX3Rlc3QobmV0ZGV2LCBcdTAwMjZkYXRhW1RFU1RfUkVHXSkpXG4xNTYxOlx0XHRcdGV0aF90ZXN0LVx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcbjE1NjI6XHRcbjE1NjM6XHRcdGlmIChmYm5pY19ldGh0b29sX21zaXhfdGVzdChuZXRkZXYsIFx1MDAyNmRhdGFbVEVTVF9NU0lYXSkpXG4xNTY0Olx0XHRcdGV0aF90ZXN0LVx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcbjE1NjU6XHRcbjE1NjY6XHRcdGlmIChpZl9ydW5uaW5nIFx1MDAyNlx1MDAyNiBuZXRpZl9vcGVuKG5ldGRldiwgTlVMTCkpIHtcbjE1Njc6XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4xNTY4Olx0XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIHJlLWluaXRpYWxpemUgaGFyZHdhcmUgZm9sbG93aW5nIHRlc3RcXG5cJiMzNDspO1xuMTU2OTpcdFx0XHRldGhfdGVzdC1cdTAwM2VmbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7XG4xNTcwOlx0XHR9XG4xNTcxOlx0fVxuMTU3MjpcdFxuMTU3MzpcdHN0YXRpYyB2b2lkIGZibmljX2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuMTU3NDpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqY2gpXG4xNTc1Olx0e1xuMTU3NjpcdFx0c3RydWN0IGZibmljX25ldCAqZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbjE1Nzc6XHRcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGZibi1cdTAwM2VmYmQ7XG4xNTc4Olx0XG4xNTc5Olx0XHRjaC1cdTAwM2VtYXhfcnggPSBmYmQtXHUwMDNlbWF4X251bV9xdWV1ZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTYxCgkJCQkJCQlvdXRwdXQ6IDIxMgoJCQkJCQkJdGhvdWdodHM6IDEwOTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBldGh0b29sIFBhdGNoIFNlcmllczogV29ydGhGdXp6aW5nPWZhbHNlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gY2FyZWZ1bGx5IGRpc3NlY3RpbmcgdGhpcyBldGh0b29sIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtIZXksIGNvcmUgbmV0d29ya2luZyBjb2RlISBHb3R0YSBiZSB3b3J0aCBmdXp6aW5nLCByaWdodD8mIzM0OyBCdXQgYWZ0ZXIgZGlnZ2luZyBpbiwgSSYjMzk7dmUgY29tcGxldGVseSBjaGFuZ2VkIG15IG1pbmQuIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBpcyByZWFjaGFiaWxpdHkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcsIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIGFuZCBzb21lIHJlbGF0ZWQgbG9naWMgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhbmQgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYC4gIFRoaXMgZmxhZyBpcyAqb25seSogc2V0IGJ5IHRoZSBgYm54dGAgYW5kIGBmYm5pY2AgZHJpdmVycy4gTm93LCBoZXJl4oCZcyB0aGUgcHJvYmxlbTogdGhlc2UgYXJlICpwaHlzaWNhbCogTklDIGRyaXZlcnMuIGBibnh0YCBpcyBhIEJyb2FkY29tIE5ldFh0cmVtZSBjYXJkLCBhbmQgYGZibmljYCBpcyBNZXRhJiMzOTtzIGN1c3RvbSBoYXJkd2FyZS4gU3l6a2FsbGVyLCBhbmQgaW5kZWVkIGFueSBzdGFuZGFyZCBmdXp6ZXIgc2V0dXAsIGRvZXNuJiMzOTt0IGhhdmUgYWNjZXNzIHRvIHRoaXMga2luZCBvZiBoYXJkd2FyZS4gVGhleSBydW4gaW4gUUVNVSBvciBHQ0Ugd2l0aCB2aXJ0dWFsIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSB0dW4vdGFwLCB2ZXRoLCBvciBkdW1teS4KClllcywgdGVjaG5pY2FsbHksIHRoZSBgY2FzZSBFVEhUT09MX1RFU1Q6YCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgIGlzICpyZWFjaGFibGUqIGluIFFFTVUsIGJ1dCB0aGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZSBjb25kaXRpb24gdGhhdCB0cmlnZ2VycyB0aGUgKmludGVuZGVkKiBiZWhhdmlvciwgYG9wcy0mZ3Q7b3BfbmVlZHNfcnRubCAmYW1wOyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdpbGwgKmFsd2F5cyogZXZhbHVhdGUgdG8gemVybyBpbiBhbnkgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gIFRoZSBwYXRjaCYjMzk7cyAqZWZmZWN0KiBvbiB0aGUgY29kZSBwYXRoIGlzIG9ubHkgdG8gYWRkIGEgY2hlY2sgZm9yIGEgYml0IG9ubHkgc2V0IGJ5IHVucmVhY2hhYmxlIGhhcmR3YXJlIGFuZCBpcyBmdW5jdGlvbmFsbHkgaW5lcnQgZm9yIGFsbCByZWFjaGFibGUgZHJpdmVycyEgSXQgZG9lc24mIzM5O3QgbW9kaWZ5IHRoZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5IG9mIGV0aHRvb2wgaW4gdGhlIHByZXNlbmNlIG9mIHN0YW5kYXJkIHZpcnR1YWwgZGV2aWNlcy4gRm9yIGFsbCB0aGUgcmVhY2hhYmxlIGRyaXZlcnMgKHZpcnRpb19uZXQsIHR1bi90YXAsIHZldGgsIGV0Yy4pLCB0aGUgb3JpZ2luYWwgYmVoYXZpb3IgaXMgcmV0YWluZWQuCgpUaGUgY2hhbmdlcyBpbiBgZmJuaWNgIGFuZCBgYm54dGAgdGhlbXNlbHZlcyBhcmUgbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFRoZXNlIGFyZSB0aGUgbWFpbiBwYXJ0cyBvZiB0aGUgcGF0Y2guIFRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgaXMgYSBub24tZXhlY3V0YWJsZSBtYWNyby4gVGhlIGNoYW5nZXMgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhcmUgb25seSBmb3IgdGhlIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdGhlIG5ldCBlZmZlY3Qgb24gcmVhY2hhYmxlIGNvZGUgaXMgbmlsLgoKVGhlcmVmb3JlLCBzaW5jZSAqYWxsKiB0aGUgbW9kaWZpZWQgY29kZSByZWxhdGVzIHRvIHVucmVhY2hhYmxlIGhhcmR3YXJlIG9yIG5vbi1leGVjdXRhYmxlIGRlZmluaXRpb25zLCBpdCBkb2VzbiYjMzk7dCBtZWV0IHRoZSBjcml0ZXJpYSBmb3IgZnV6emluZy4gSXQmIzM5O3MgbGlrZSB3b3JraW5nIHdpdGggYW4gYGFtZGdwdWAgZHJpdmVyIOKAkyBpbnRlcmVzdGluZyBjb2RlLCBidXQgdG90YWxseSB1bmludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIGJlY2F1c2UgaXQmIzM5O3Mgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgVGhlIHByZXNlbmNlIG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgZmlsZSBpcyBpcnJlbGV2YW50LiAgQmVjYXVzZSB0aGUgY29kZSBjaGFuZ2VzIGluIGl0IGFyZSByZWxhdGVkICpleGNsdXNpdmVseSogdG8gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiAgVGh1cywgdGhpcyBwYXRjaCBzZXJpZXMgaXMgbm90IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBtb2RpZmllcyB0aGUgZmJuaWMgKE1ldGEgQVNJQyBOSUMpIGFuZCBibnh0IChCcm9hZGNvbSBOZXRYdHJlbWUgTklDKSBkcml2ZXJzLCBib3RoIG9mIHdoaWNoIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgQVNJQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBjaGFuZ2VzIGluIGluY2x1ZGUvbGludXgvZXRodG9vbC5oIGFuZCBuZXQvZXRodG9vbC9jb21tb24uaCBpbnRyb2R1Y2UgYW5kIGNoZWNrIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHNvIHRoYXQgZHJpdmVycyBjYW4gb3B0IGluIHRvIGhvbGRpbmcgcnRubF9sb2NrIGR1cmluZyBzZWxmLXRlc3Q7IHRoaXMgZmxhZyBpcyBleGNsdXNpdmVseSBzZXQgYnkgYm54dCBhbmQgZmJuaWMuIEZvciBhbGwgcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiB2aXJ0aW8tbmV0LCBkdW1teSwgdmV0aCwgbmV0ZGV2c2ltKSwgdGhpcyBmbGFnIGlzIG5ldmVyIHNldCBhbmQgdGhlIGNoZWNrIGV2YWx1YXRlcyB0byAwIChpZGVudGljYWwgdG8gcHJldmlvdXMgYmVoYXZpb3IpLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgZXhpc3QgdG8gd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBtb2RpZmllcyB0aGUgZmJuaWMgKE1ldGEgQVNJQyBOSUMpIGFuZCBibnh0IChCcm9hZGNvbSBOZXRYdHJlbWUgTklDKSBkcml2ZXJzLCBib3RoIG9mIHdoaWNoIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgQVNJQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBjaGFuZ2VzIGluIGluY2x1ZGUvbGludXgvZXRodG9vbC5oIGFuZCBuZXQvZXRodG9vbC9jb21tb24uaCBpbnRyb2R1Y2UgYW5kIGNoZWNrIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHNvIHRoYXQgZHJpdmVycyBjYW4gb3B0IGluIHRvIGhvbGRpbmcgcnRubF9sb2NrIGR1cmluZyBzZWxmLXRlc3Q7IHRoaXMgZmxhZyBpcyBleGNsdXNpdmVseSBzZXQgYnkgYm54dCBhbmQgZmJuaWMuIEZvciBhbGwgcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiB2aXJ0aW8tbmV0LCBkdW1teSwgdmV0aCwgbmV0ZGV2c2ltKSwgdGhpcyBmbGFnIGlzIG5ldmVyIHNldCBhbmQgdGhlIGNoZWNrIGV2YWx1YXRlcyB0byAwIChpZGVudGljYWwgdG8gcHJldmlvdXMgYmVoYXZpb3IpLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgZXhpc3QgdG8gd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMxOjQ1LjAzMDI5MjcxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzY3MTYxOTQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgbW9kaWZpZXMgdGhlIGZibmljIChNZXRhIEFTSUMgTklDKSBhbmQgYm54dCAoQnJvYWRjb20gTmV0WHRyZW1lIE5JQykgZHJpdmVycywgYm90aCBvZiB3aGljaCByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIEFTSUMgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBUaGUgY2hhbmdlcyBpbiBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBhbmQgbmV0L2V0aHRvb2wvY29tbW9uLmggaW50cm9kdWNlIGFuZCBjaGVjayB0aGUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZyBzbyB0aGF0IGRyaXZlcnMgY2FuIG9wdCBpbiB0byBob2xkaW5nIHJ0bmxfbG9jayBkdXJpbmcgc2VsZi10ZXN0OyB0aGlzIGZsYWcgaXMgZXhjbHVzaXZlbHkgc2V0IGJ5IGJueHQgYW5kIGZibmljLiBGb3IgYWxsIHJlYWNoYWJsZSBuZXR3b3JrIGRldmljZXMgKGUuZy4gdmlydGlvLW5ldCwgZHVtbXksIHZldGgsIG5ldGRldnNpbSksIHRoaXMgZmxhZyBpcyBuZXZlciBzZXQgYW5kIHRoZSBjaGVjayBldmFsdWF0ZXMgdG8gMCAoaWRlbnRpY2FsIHRvIHByZXZpb3VzIGJlaGF2aW9yKS4gVGhlcmVmb3JlLCBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGV4aXN0IHRvIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMxOjQ1LjAzMDI5NzI3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzYxOTg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5ODVjY2Y5NjRjZTRhNDUxYjc4ZjNiYWJjMjM2ZmI2ZDg0ZTcxMDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6MzE6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcXG5pbmRleCA2MmJjOWNhZTYxM2MzLi42MjJlODk1ODdlNWRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jXFxuQEAgLTU3MzMsNyArNTczMyw4IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xcbiBcXHQub3BfbmVlZHNfcnRubFxcdFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuIFxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbiBcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0UgfFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsXFxuIFxcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTIHxcXG4gXFx0XFx0XFx0XFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRUNTX0lSUSB8XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oXFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxcbkBAIC05NzQsNiArOTc0LDcgQEAgZW51bSB7XFxuIC8qIFBVTCBVc2VyIFJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIEZCTklDX0NTUl9TVEFSVF9QVUxfVVNFUlxcdDB4MzEwMDBcXHQvKiBDU1Igc2VjdGlvbiBkZWxpbWl0ZXIgKi9cXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdcXHQweDMxMDNkXFx0XFx0LyogMHhjNDBmNCAqL1xcbisjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFXFx0Q1NSX0JJVCgyMClcXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hcXHRDU1JfQklUKDE5KVxcbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19CTUVcXHRcXHRDU1JfQklUKDE4KVxcbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19SREVfQVRUUlxcdENTUl9HRU5NQVNLKDE3LCAxNSlcXG5AQCAtMTIxNSw2ICsxMjE2LDEwIEBAIGVudW0ge1xcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19MRU5fTUFTS1xcdERFU0NfR0VOTUFTSyg2MywgNDgpXFxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVxcdFxcdERFU0NfQklUKDQ2KVxcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcXHRERVNDX0dFTk1BU0soNDUsIDMpXFxuKy8qIFNldCB3aXRoIEZXX0NNUEwgd2hlbiB0aGUgRlcgY29tcGxldGVkIGEgZGVzY3JpcHRvciB3aXRob3V0IHN1Y2Nlc3NmdWxseVxcbisgKiBwcm9jZXNzaW5nIGl0IChlLmcuIGEgbWFpbGJveCBETUEgZXJyb3IpOyB0aGUgY29tcGxldGlvbiBoYXMgbm8gdmFsaWQgZGF0YS5cXG4rICovXFxuKyNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUlxcdERFU0NfQklUKDIpXFxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUExcXHRERVNDX0JJVCgxKVxcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19IT1NUX0NNUExcXHRERVNDX0JJVCgwKVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xcbmluZGV4IDNjNDU2M2M4ZjQwM2YuLjZlZGZhMGFhNjlmMTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xcbkBAIC01MzksOCArNTM5LDggQEAgc3RhdGljIHZvaWQgZmJuaWNfZGJnX2Z3X21ieF9kaXNwbGF5KHN0cnVjdCBzZXFfZmlsZSAqcyxcXG4gXFx0LyogR2VuZXJhdGUgaGVhZGVyICovXFxuIFxcdHNlcV9wdXRzKHMsIG1ieF9pZHggPT0gRkJOSUNfSVBDX01CWF9SWF9JRFggPyBcXFwiUnhcXFxcblxcXCIgOiBcXFwiVHhcXFxcblxcXCIpO1xcbiBcXG4tXFx0c2VxX3ByaW50ZihzLCBcXFwiUmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZFxcXFxuXFxcIixcXG4tXFx0XFx0ICAgbWJ4LVxcdTAwM2VyZWFkeSwgbWJ4LVxcdTAwM2VoZWFkLCBtYngtXFx1MDAzZXRhaWwpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkIHJlc3BfZXJyb3I6ICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdCAgIG1ieC1cXHUwMDNlcmVhZHksIG1ieC1cXHUwMDNlaGVhZCwgbWJ4LVxcdTAwM2V0YWlsLCBtYngtXFx1MDAzZXJlc3BfZXJyb3IpO1xcbiBcXG4gXFx0c25wcmludGYoaGRyLCBzaXplb2YoaGRyKSwgXFxcIiUzcyAlLTRzICVzICUtMTJzICVzICUtM3MgJS0xNnNcXFxcblxcXCIsXFxuIFxcdFxcdCBcXFwiSWR4XFxcIiwgXFxcIkxlblxcXCIsIFxcXCJFXFxcIiwgXFxcIkFkZHJcXFwiLCBcXFwiRlxcXCIsIFxcXCJIXFxcIiwgXFxcIlJhd1xcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXFxuaW5kZXggMGU0NzA4OGVjNDRiYS4uNDIzZjE3OWM5ZDQ3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXFxuQEAgLTIwMjUsNyArMjAyNSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XFxuIFxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcXG4gXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG4gXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XFxuLVxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxcbitcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsXFxuIFxcdC5nZXRfZHJ2aW5mb1xcdFxcdFxcdD0gZmJuaWNfZ2V0X2RydmluZm8sXFxuIFxcdC5nZXRfcmVnc19sZW5cXHRcXHRcXHQ9IGZibmljX2dldF9yZWdzX2xlbixcXG4gXFx0LmdldF9yZWdzXFx0XFx0XFx0PSBmYm5pY19nZXRfcmVncyxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXFxuaW5kZXggMjgzZDI1ZmFlNzllNy4uNmQ3ZWI4NDc5ZWRmNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG5AQCAtNjAsOCArNjAsMTUgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Jlc2V0X2Rlc2NfcmluZyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBtYnhfaWR4KVxcbiBcXHQgKi9cXG4gXFx0c3dpdGNoIChtYnhfaWR4KSB7XFxuIFxcdGNhc2UgRkJOSUNfSVBDX01CWF9SWF9JRFg6XFxuK1xcdFxcdC8qIENsZWFyaW5nIEJNRSBibG9ja3MgdGhlIGRldmljZSBmcm9tIHdyaXRpbmcgdG8gdGhlIGhvc3RcXG4rXFx0XFx0ICogYnV0IGxlYXZlcyB0aGUgcmVxdWVzdHMgcGFya2VkIGluIHRoZSB3cml0ZSBwaXBlbGluZS4gVGhlXFxuK1xcdFxcdCAqIHdyaXRlIHBhdGggb25seSBjbGVhcnMgb3V0c3RhbmRpbmcgcmVxdWVzdHMgd2hlbiBib3RoIEZMVVNIXFxuK1xcdFxcdCAqIGFuZCBGTFVTSF9NT0RFIGFyZSBzZXQ7IEZMVVNIX01PREUgbGV0cyB0aGVtIGRyYWluIHdpdGhvdXRcXG4rXFx0XFx0ICogbGFuZGluZyBvbiB0aGUgaG9zdC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHdyMzIoZmJkLCBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkcsXFxuLVxcdFxcdCAgICAgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIKTtcXG4rXFx0XFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0ggfFxcbitcXHRcXHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgRkJOSUNfSVBDX01CWF9UWF9JRFg6XFxuIFxcdFxcdHdyMzIoZmJkLCBGQk5JQ19QVUxfT0JfVExQX0hEUl9BUl9DRkcsXFxuQEAgLTI4NSw2ICsyOTIsMTIgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfdHhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuIFxcdFxcdGlmICghKGRlc2MgXFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0aWYgKGRlc2MgXFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSKSB7XFxuK1xcdFxcdFxcdHR4X21ieC1cXHUwMDNlcmVzcF9lcnJvcisrO1xcbitcXHRcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRlcgY29tcGxldGVkIGEgVHggbWFpbGJveCByZXF1ZXN0IHdpdGggYW4gZXJyb3JcXFxcblxcXCIpO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRmYm5pY19tYnhfdW5tYXBfYW5kX2ZyZWVfbXNnKGZiZCwgRkJOSUNfSVBDX01CWF9UWF9JRFgsIGhlYWQpO1xcbiBcXG4gXFx0XFx0aGVhZCsrO1xcbkBAIC0xNjY2LDYgKzE2NzksMTMgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuIFxcdFxcdGlmICghKGRlc2MgXFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0aWYgKGRlc2MgXFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSKSB7XFxuK1xcdFxcdFxcdHJ4X21ieC1cXHUwMDNlcmVzcF9lcnJvcisrO1xcbitcXHRcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRlcgcmVwb3J0ZWQgYW4gZXJyb3Igb24gYW4gUnggbWFpbGJveCBtZXNzYWdlOyBkcm9wcGluZ1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gbmV4dF9wYWdlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShmYmQtXFx1MDAzZWRldiwgcnhfbWJ4LVxcdTAwM2VidWZfaW5mb1toZWFkXS5hZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHRGQk5JQ19SWF9QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XFxuIFxcbkBAIC0xNzMzLDcgKzE3NTMsOSBAQCB2b2lkIGZibmljX21ieF9wb2xsKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4gaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4ge1xcbiBcXHRzdHJ1Y3QgZmJuaWNfZndfbWJ4ICp0eF9tYnggPSBcXHUwMDI2ZmJkLVxcdTAwM2VtYnhbRkJOSUNfSVBDX01CWF9UWF9JRFhdO1xcbitcXHRzdHJ1Y3QgZmJuaWNfZndfbWJ4ICpyeF9tYnggPSBcXHUwMDI2ZmJkLVxcdTAwM2VtYnhbRkJOSUNfSVBDX01CWF9SWF9JRFhdO1xcbiBcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgMTAgKiBIWiArIDE7XFxuK1xcdHU2NCB0eF9yZXNwX2Vycm9yLCByeF9yZXNwX2Vycm9yO1xcbiBcXHRpbnQgZXJyLCBpO1xcbiBcXG4gXFx0ZG8ge1xcbkBAIC0xNzY0LDYgKzE3ODYsOSBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiBcXHQgKiBtZ210LnZlcnNpb24gb25jZSB3ZSBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGZpcm13YXJlXFxuIFxcdCAqIGluIHRoZSBjYXBhYmlsaXRpZXMgcmVxdWVzdCBtZXNzYWdlLlxcbiBcXHQgKi9cXG4rc2VuZF9jYXBfcmVxOlxcbitcXHR0eF9yZXNwX2Vycm9yID0gdHhfbWJ4LVxcdTAwM2VyZXNwX2Vycm9yO1xcbitcXHRyeF9yZXNwX2Vycm9yID0gcnhfbWJ4LVxcdTAwM2VyZXNwX2Vycm9yO1xcbiBcXHRlcnIgPSBmYm5pY19md194bWl0X3NpbXBsZV9tc2coZmJkLCBGQk5JQ19UTFZfTVNHX0lEX0hPU1RfQ0FQX1JFUSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gY2xlYW5fbWJ4O1xcbkBAIC0xNzgxLDkgKzE4MDYsMjcgQEAgaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4gXFx0XFx0bXNsZWVwKDIwKTtcXG4gXFx0XFx0ZmJuaWNfbWJ4X3BvbGwoZmJkKTtcXG4gXFxuK1xcdFxcdC8qIEEgdmFsaWQgY2FwYWJpbGl0aWVzIHJlc3BvbnNlIGVuZHMgdGhlIHBvbGwuIENoZWNrIGl0XFxuK1xcdFxcdCAqIGJlZm9yZSB0aGUgRldfRVJSIHJldHJ5IGJlbG93IHNvIGEgcmVzcG9uc2UgcGFyc2VkIGluIHRoZVxcbitcXHRcXHQgKiBzYW1lIHBvbGwgYXMgYW4gdW5yZWxhdGVkIEZXX0VSUiBpcyBub3QgZGlzY2FyZGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGZiZC1cXHUwMDNlZndfY2FwLnJ1bm5pbmcubWdtdC52ZXJzaW9uIFxcdTAwM2U9IE1JTl9GV19WRVJfQ09ERSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHQvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi9cXG4tXFx0XFx0aWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpXFxuK1xcdFxcdGlmICghdGltZV9pc19hZnRlcl9qaWZmaWVzKHRpbWVvdXQpKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBUaGUgRlcgY2FuIGZsYWcgb3VyIGNhcGFiaWxpdGllcyByZXF1ZXN0IChUeCkgb3IgaXRzXFxuK1xcdFxcdCAqIHJlc3BvbnNlIChSeCkgd2l0aCBGV19FUlIsIGluIHdoaWNoIGNhc2UgaXQgcHJvZHVjZWQgbm9cXG4rXFx0XFx0ICogdXNhYmxlIHJlc3BvbnNlLiBUaGUgcmluZyBpcyBub3Qgd2VkZ2VkLCBzbyByZS1pc3N1ZSB0aGVcXG4rXFx0XFx0ICogcmVxdWVzdCBpbnN0ZWFkIG9mIHNwaW5uaW5nIHVudGlsIHRoZSB0aW1lb3V0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHR4X21ieC1cXHUwMDNlcmVzcF9lcnJvciAhPSB0eF9yZXNwX2Vycm9yIHx8XFxuK1xcdFxcdCAgICByeF9tYngtXFx1MDAzZXJlc3BfZXJyb3IgIT0gcnhfcmVzcF9lcnJvcilcXG4rXFx0XFx0XFx0Z290byBzZW5kX2NhcF9yZXE7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcXG5pbmRleCBkODQ3MjNlNGNmYTM2Li41Zjk5NjkyNDdlMzA1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbkBAIC0xMyw2ICsxMyw3IEBAIHN0cnVjdCBmYm5pY190bHZfbXNnO1xcbiBcXG4gc3RydWN0IGZibmljX2Z3X21ieCB7XFxuIFxcdHU4IHJlYWR5LCBoZWFkLCB0YWlsO1xcbitcXHR1NjQgcmVzcF9lcnJvcjtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGZibmljX3Rsdl9tc2dcXHQqbXNnO1xcbiBcXHRcXHRkbWFfYWRkcl90XFx0XFx0YWRkcjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcXG5pbmRleCA4YjliYzllOGVhNTZjLi5jNjY5OGUzMDAyYTEzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jXFxuQEAgLTQzNCw2ICs0MzQsNyBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZmJkLVxcdTAwM2VuZXRkZXY7XFxuK1xcdHN0cnVjdCBmYm5pY19uZXQgKmZibjtcXG4gXFxuIFxcdGlmIChmYm5pY19pbml0X2ZhaWx1cmUoZmJkKSlcXG4gXFx0XFx0Z290byBudWxsX3VjX2FkZHI7XFxuQEAgLTQ0MSwxMSArNDQyLDE2IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRuZXRkZXZfbG9jayhuZXRkZXYpO1xcbiBcXG4rXFx0ZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuIFxcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcXG4gXFxuIFxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcXG4gXFxuK1xcdC8qIFRoZSBJUlFzIGFyZSBhYm91dCB0byBiZSBmcmVlZCwgc28gZHJvcCB0aGUgbmFwaSB2ZWN0b3IgY291bnQgKi9cXG4rXFx0ZmJuLVxcdTAwM2VudW1fbmFwaSA9IDA7XFxuK1xcbiBcXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuIFxcbkBAIC01MDgsMTYgKzUxNCwyMCBAQCBzdGF0aWMgaW50IF9fZmJuaWNfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0aWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRkZXZfbG9jayhuZXRkZXYpO1xcbitcXG4gXFx0ZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuIFxcdC8qIFJlc2V0IHRoZSBxdWV1ZXMgaWYgbmVlZGVkICovXFxuIFxcdGZibmljX3Jlc2V0X3F1ZXVlcyhmYm4sIGZibi1cXHUwMDNlbnVtX3R4X3F1ZXVlcywgZmJuLVxcdTAwM2VudW1fcnhfcXVldWVzKTtcXG4gXFxuLVxcdHJ0bmxfbG9jaygpO1xcbi1cXHRuZXRkZXZfbG9jayhuZXRkZXYpO1xcbi1cXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbiBcXHRcXHRlcnIgPSBfX2ZibmljX29wZW4oZmJuKTtcXG4rXFx0XFx0LyogT24gZmFpbHVyZSB0aGUgdmVjdG9ycyBhcmUgZnJlZWQsIHNvIGRyb3AgdGhlIGNvdW50ICovXFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGZibi1cXHUwMDNlbnVtX25hcGkgPSAwO1xcbitcXHR9XFxuIFxcbiBcXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmNcXG5pbmRleCA0MDFmOGI4YWUxY2FlLi5lOTMxNzRmYzEyMzlmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmNcXG5AQCAtNyw2ICs3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X3F1ZXVlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9yeF9xdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGRwLmhcXHUwMDNlXFxuQEAgLTE3NjgsNyArMTc2OSw3IEBAIGludCBmYm5pY19hbGxvY19uYXBpX3ZlY3RvcnMoc3RydWN0IGZibmljX25ldCAqZmJuKVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogQWxsb2NhdGUgMSBUeCBxdWV1ZSBwZXIgbmFwaSB2ZWN0b3IgKi9cXG4tXFx0aWYgKG51bV9uYXBpIFxcdTAwM2MgRkJOSUNfTUFYX1RYUVMgXFx1MDAyNlxcdTAwMjYgbnVtX25hcGkgPT0gbnVtX3R4ICsgbnVtX3J4KSB7XFxuK1xcdGlmIChudW1fbmFwaSBcXHUwMDNjPSBGQk5JQ19NQVhfVFhRUyBcXHUwMDI2XFx1MDAyNiBudW1fbmFwaSA9PSBudW1fdHggKyBudW1fcngpIHtcXG4gXFx0XFx0d2hpbGUgKG51bV90eCkge1xcbiBcXHRcXHRcXHRlcnIgPSBmYm5pY19hbGxvY19uYXBpX3ZlY3RvcihmYmQsIGZibixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbnVtX25hcGksIHZfaWR4LFxcbkBAIC0yODI5LDYgKzI4MzAsMTcgQEAgdm9pZCBmYm5pY19uYXBpX2RlcGxldGlvbl9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRmYm5pY193cmZsKGZiZCk7XFxuIH1cXG4gXFxuKy8qIFJldHVybnMgdGhlIG5hcGkgdmVjdG9yIHNlcnZpY2luZyBhbiBSeCBxdWV1ZSwgb3IgTlVMTCBpZiB0aGUgZGF0YXBhdGhcXG4rICogaXMgdG9ybiBkb3duLiAgVGhlIGFzc29jaWF0aW9uIGlzIHB1Ymxpc2hlZCBieSBmYm5pY19zZXRfbmV0aWZfbmFwaSgpXFxuKyAqIGFuZCBjbGVhcmVkIGJ5IGZibmljX3Jlc2V0X25ldGlmX25hcGkoKSwgYm90aCB1bmRlciB0aGUgaW5zdGFuY2UgbG9jay5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3IgKmZibmljX3J4cV9udihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWR4KVxcbit7XFxuK1xcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IF9fbmV0aWZfZ2V0X3J4X3F1ZXVlKGRldiwgaWR4KS1cXHUwMDNlbmFwaTtcXG4rXFxuK1xcdHJldHVybiBuYXBpID8gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvciwgbmFwaSkgOiBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGZibmljX3F1ZXVlX21lbV9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGRldl9xdWV1ZV9jb25maWcgKnFjZmcsXFxuIFxcdFxcdFxcdFxcdCB2b2lkICpxbWVtLCBpbnQgaWR4KVxcbkBAIC0yODQxLDggKzI4NTMsMTYgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKCFuZXRpZl9ydW5uaW5nKGRldikpXFxuIFxcdFxcdHJldHVybiBmYm5pY19hbGxvY19xdF9wYWdlX3Bvb2xzKGZibiwgcXQsIGlkeCk7XFxuIFxcbitcXHQvKiBBIGZhaWxlZCBQQ0llIHJlY292ZXJ5IG9yIHJlc3VtZSBjYW4gbGVhdmUgdGhlIGRhdGFwYXRoIHRvcm4gZG93blxcbitcXHQgKiB3aGlsZSBuZXRpZl9ydW5uaW5nKCkgaXMgc3RpbGwgdHJ1ZS4gIFRoaXMgbmRvIHJ1bnMgYmVmb3JlXFxuK1xcdCAqIG5ldGRldl9yeF9xdWV1ZV9yZXN0YXJ0KCkgY2hlY2tzIG5ldGlmX3J1bm5pbmcoKSwgc28gYmFpbCBvdXRcXG4rXFx0ICogcmF0aGVyIHRoYW4gdG91Y2hpbmcgcmluZ3MgYW5kIHZlY3RvcnMgdGhhdCBhcmUgYWxyZWFkeSBmcmVlZC5cXG4rXFx0ICovXFxuK1xcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcXG4rXFx0aWYgKCFudilcXG4rXFx0XFx0cmV0dXJuIC1FTkVURE9XTjtcXG4rXFxuIFxcdHJlYWwgPSBjb250YWluZXJfb2YoZmJuLVxcdTAwM2VyeFtpZHhdLCBzdHJ1Y3QgZmJuaWNfcV90cmlhZCwgY21wbCk7XFxuLVxcdG52ID0gZmJuLVxcdTAwM2VuYXBpW2lkeCAlIGZibi1cXHUwMDNlbnVtX25hcGldO1xcbiBcXG4gXFx0ZmJuaWNfcmluZ19pbml0KFxcdTAwMjZxdC1cXHUwMDNlc3ViMCwgcmVhbC1cXHUwMDNlc3ViMC5kb29yYmVsbCwgcmVhbC1cXHUwMDNlc3ViMC5xX2lkeCxcXG4gXFx0XFx0XFx0cmVhbC1cXHUwMDNlc3ViMC5mbGFncyk7XFxuQEAgLTI4OTMsNyArMjkxMyw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0c3RydWN0IGZibmljX3FfdHJpYWQgKnJlYWw7XFxuIFxcbiBcXHRyZWFsID0gY29udGFpbmVyX29mKGZibi1cXHUwMDNlcnhbaWR4XSwgc3RydWN0IGZibmljX3FfdHJpYWQsIGNtcGwpO1xcbi1cXHRudiA9IGZibi1cXHUwMDNlbmFwaVtpZHggJSBmYm4tXFx1MDAzZW51bV9uYXBpXTtcXG4rXFx0bnYgPSBmYm5pY19yeHFfbnYoZGV2LCBpZHgpO1xcbiBcXG4gXFx0ZmJuaWNfYWdncmVnYXRlX3JpbmdfYmRxX2NvdW50ZXJzKGZibiwgXFx1MDAyNnJlYWwtXFx1MDAzZXN1YjApO1xcbiBcXHRmYm5pY19hZ2dyZWdhdGVfcmluZ19iZHFfY291bnRlcnMoZmJuLCBcXHUwMDI2cmVhbC1cXHUwMDNlc3ViMSk7XFxuQEAgLTI5MTUsNyArMjkzNSw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0cmVhbCA9IGNvbnRhaW5lcl9vZihmYm4tXFx1MDAzZXJ4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTtcXG4tXFx0bnYgPSBmYm4tXFx1MDAzZW5hcGlbaWR4ICUgZmJuLVxcdTAwM2VudW1fbmFwaV07XFxuK1xcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcXG4gXFx0ZmJuaWNfZGJnX252X2V4aXQobnYpO1xcbiBcXG4gXFx0bmFwaV9kaXNhYmxlX2xvY2tlZChcXHUwMDI2bnYtXFx1MDAzZW5hcGkpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXFxuaW5kZXggMjUzNjAwYzBlY2NkZi4uYzRjOWNlMDM4NjExMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXFxuQEAgLTk0NCw2ICs5NDQsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XFxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNXFx0QklUKDYpXFxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTU1xcdFxcdEJJVCg3KVxcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOS1xcdFxcdEJJVCg4KVxcbisjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXFx0XFx0QklUKDkpXFxuIFxcbiAvKipcXG4gICogc3RydWN0IGV0aHRvb2xfb3BzIC0gb3B0aW9uYWwgbmV0ZGV2IG9wZXJhdGlvbnNcXG5AQCAtOTgxLDYgKzk4Miw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcXG4gICpcXHQgLSBuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKClcXG4gICpcXHQgLSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKClcXG4gICpcXHQgLSBldGh0b29sX29wX2dldF9saW5rKCkgKHN5bmNzIGxpbmsgd2F0Y2ggdW5kZXIgcnRubF9sb2NrKVxcbisgKlxcdCAtIG5ldGlmX29wZW4oKSAvIG5ldGlmX2Nsb3NlKCkgKHVzZWQgYnkgQHNlbGZfdGVzdClcXG4gICpcXG4gICogQGdldF9kcnZpbmZvOiBSZXBvcnQgZHJpdmVyL2RldmljZSBpbmZvcm1hdGlvbi4gTW9kZXJuIGRyaXZlcnMgbm9cXG4gICpcXHRsb25nZXIgaGF2ZSB0byBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjay4gTW9zdCBmaWVsZHMgYXJlXFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL2NvbW1vbi5oIGIvbmV0L2V0aHRvb2wvY29tbW9uLmhcXG5pbmRleCA0ZTUzNTZlMjZmNDAwLi5hZTMyZTdmZGI1NjNjIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL2NvbW1vbi5oXFxuKysrIGIvbmV0L2V0aHRvb2wvY29tbW9uLmhcXG5AQCAtMTYzLDYgKzE2Myw4IEBAIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxcbiBcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUztcXG4gXFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxcbiBcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xcbitcXHRjYXNlIEVUSFRPT0xfVEVTVDpcXG4rXFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbiBcXHR9XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMTo0Ni42MzQ1NDM3NjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3NjA2NzM1NjE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBtb2RpZmllcyB0aGUgZmJuaWMgKE1ldGEgQVNJQyBOSUMpIGFuZCBibnh0IChCcm9hZGNvbSBOZXRYdHJlbWUgTklDKSBkcml2ZXJzLCBib3RoIG9mIHdoaWNoIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgQVNJQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBjaGFuZ2VzIGluIGluY2x1ZGUvbGludXgvZXRodG9vbC5oIGFuZCBuZXQvZXRodG9vbC9jb21tb24uaCBpbnRyb2R1Y2UgYW5kIGNoZWNrIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHNvIHRoYXQgZHJpdmVycyBjYW4gb3B0IGluIHRvIGhvbGRpbmcgcnRubF9sb2NrIGR1cmluZyBzZWxmLXRlc3Q7IHRoaXMgZmxhZyBpcyBleGNsdXNpdmVseSBzZXQgYnkgYm54dCBhbmQgZmJuaWMuIEZvciBhbGwgcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiB2aXJ0aW8tbmV0LCBkdW1teSwgdmV0aCwgbmV0ZGV2c2ltKSwgdGhpcyBmbGFnIGlzIG5ldmVyIHNldCBhbmQgdGhlIGNoZWNrIGV2YWx1YXRlcyB0byAwIChpZGVudGljYWwgdG8gcHJldmlvdXMgYmVoYXZpb3IpLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgZXhpc3QgdG8gd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOTg1Y2NmOTY0Y2U0YTQ1MWI3OGYzYmFiYzIzNmZiNmQ4NGU3MTA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6MzE6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuY1xuaW5kZXggNjJiYzljYWU2MTNjMy4uNjIyZTg5NTg3ZTVkYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcbkBAIC01NzMzLDcgKzU3MzMsOCBAQCBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54dF9ldGh0b29sX29wcyA9IHtcbiBcdC5vcF9uZWVkc19ydG5sXHRcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbiBcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDT0FMRVNDRSB8XG4tXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUyxcbitcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTIHxcbitcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1NfSVJRIHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbkBAIC05NzQsNiArOTc0LDcgQEAgZW51bSB7XG4gLyogUFVMIFVzZXIgUmVnaXN0ZXJzICovXG4gI2RlZmluZSBGQk5JQ19DU1JfU1RBUlRfUFVMX1VTRVJcdDB4MzEwMDBcdC8qIENTUiBzZWN0aW9uIGRlbGltaXRlciAqL1xuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHXHQweDMxMDNkXHRcdC8qIDB4YzQwZjQgKi9cbisjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFXHRDU1JfQklUKDIwKVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIXHRDU1JfQklUKDE5KVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0JNRVx0XHRDU1JfQklUKDE4KVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX1JERV9BVFRSXHRDU1JfR0VOTUFTSygxNywgMTUpXG5AQCAtMTIxNSw2ICsxMjE2LDEwIEBAIGVudW0ge1xuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0xFTl9NQVNLXHRERVNDX0dFTk1BU0soNjMsIDQ4KVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVx0XHRERVNDX0JJVCg0NilcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcdERFU0NfR0VOTUFTSyg0NSwgMylcbisvKiBTZXQgd2l0aCBGV19DTVBMIHdoZW4gdGhlIEZXIGNvbXBsZXRlZCBhIGRlc2NyaXB0b3Igd2l0aG91dCBzdWNjZXNzZnVsbHlcbisgKiBwcm9jZXNzaW5nIGl0IChlLmcuIGEgbWFpbGJveCBETUEgZXJyb3IpOyB0aGUgY29tcGxldGlvbiBoYXMgbm8gdmFsaWQgZGF0YS5cbisgKi9cbisjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlJcdERFU0NfQklUKDIpXG4gI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTFx0REVTQ19CSVQoMSlcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19IT1NUX0NNUExcdERFU0NfQklUKDApXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuaW5kZXggM2M0NTYzYzhmNDAzZi4uNmVkZmEwYWE2OWYxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuQEAgLTUzOSw4ICs1MzksOCBAQCBzdGF0aWMgdm9pZCBmYm5pY19kYmdfZndfbWJ4X2Rpc3BsYXkoc3RydWN0IHNlcV9maWxlICpzLFxuIFx0LyogR2VuZXJhdGUgaGVhZGVyICovXG4gXHRzZXFfcHV0cyhzLCBtYnhfaWR4ID09IEZCTklDX0lQQ19NQlhfUlhfSURYID8gXCJSeFxcblwiIDogXCJUeFxcblwiKTtcbiBcbi1cdHNlcV9wcmludGYocywgXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkXFxuXCIsXG4tXHRcdCAgIG1ieC1cdTAwM2VyZWFkeSwgbWJ4LVx1MDAzZWhlYWQsIG1ieC1cdTAwM2V0YWlsKTtcbitcdHNlcV9wcmludGYocywgXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkIHJlc3BfZXJyb3I6ICVsbHVcXG5cIixcbitcdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwsIG1ieC1cdTAwM2VyZXNwX2Vycm9yKTtcbiBcbiBcdHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksIFwiJTNzICUtNHMgJXMgJS0xMnMgJXMgJS0zcyAlLTE2c1xcblwiLFxuIFx0XHQgXCJJZHhcIiwgXCJMZW5cIiwgXCJFXCIsIFwiQWRkclwiLCBcIkZcIiwgXCJIXCIsIFwiUmF3XCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbmluZGV4IDBlNDcwODhlYzQ0YmEuLjQyM2YxNzljOWQ0NzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbkBAIC0yMDI1LDcgKzIwMjUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xuIFx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTSB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxuLVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbitcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxuK1x0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNULFxuIFx0LmdldF9kcnZpbmZvXHRcdFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfcmVnc19sZW5cdFx0XHQ9IGZibmljX2dldF9yZWdzX2xlbixcbiBcdC5nZXRfcmVnc1x0XHRcdD0gZmJuaWNfZ2V0X3JlZ3MsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5pbmRleCAyODNkMjVmYWU3OWU3Li42ZDdlYjg0NzllZGY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbkBAIC02MCw4ICs2MCwxNSBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcmVzZXRfZGVzY19yaW5nKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IG1ieF9pZHgpXG4gXHQgKi9cbiBcdHN3aXRjaCAobWJ4X2lkeCkge1xuIFx0Y2FzZSBGQk5JQ19JUENfTUJYX1JYX0lEWDpcbitcdFx0LyogQ2xlYXJpbmcgQk1FIGJsb2NrcyB0aGUgZGV2aWNlIGZyb20gd3JpdGluZyB0byB0aGUgaG9zdFxuK1x0XHQgKiBidXQgbGVhdmVzIHRoZSByZXF1ZXN0cyBwYXJrZWQgaW4gdGhlIHdyaXRlIHBpcGVsaW5lLiBUaGVcbitcdFx0ICogd3JpdGUgcGF0aCBvbmx5IGNsZWFycyBvdXRzdGFuZGluZyByZXF1ZXN0cyB3aGVuIGJvdGggRkxVU0hcbitcdFx0ICogYW5kIEZMVVNIX01PREUgYXJlIHNldDsgRkxVU0hfTU9ERSBsZXRzIHRoZW0gZHJhaW4gd2l0aG91dFxuK1x0XHQgKiBsYW5kaW5nIG9uIHRoZSBob3N0LlxuK1x0XHQgKi9cbiBcdFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGRyxcbi1cdFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0gpO1xuK1x0XHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCB8XG4rXHRcdCAgICAgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIX01PREUpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgRkJOSUNfSVBDX01CWF9UWF9JRFg6XG4gXHRcdHdyMzIoZmJkLCBGQk5JQ19QVUxfT0JfVExQX0hEUl9BUl9DRkcsXG5AQCAtMjg1LDYgKzI5MiwxMiBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc190eF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiBcdFx0aWYgKCEoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKVxuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRpZiAoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikge1xuK1x0XHRcdHR4X21ieC1cdTAwM2VyZXNwX2Vycm9yKys7XG4rXHRcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoZmJkLVx1MDAzZWRldixcbitcdFx0XHRcdFx0ICAgICBcIkZXIGNvbXBsZXRlZCBhIFR4IG1haWxib3ggcmVxdWVzdCB3aXRoIGFuIGVycm9yXFxuXCIpO1xuK1x0XHR9XG4rXG4gXHRcdGZibmljX21ieF91bm1hcF9hbmRfZnJlZV9tc2coZmJkLCBGQk5JQ19JUENfTUJYX1RYX0lEWCwgaGVhZCk7XG4gXG4gXHRcdGhlYWQrKztcbkBAIC0xNjY2LDYgKzE2NzksMTMgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gXHRcdGlmICghKGRlc2MgXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19DTVBMKSlcbiBcdFx0XHRicmVhaztcbiBcbitcdFx0aWYgKGRlc2MgXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIpIHtcbitcdFx0XHRyeF9tYngtXHUwMDNlcmVzcF9lcnJvcisrO1xuK1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCAgICAgXCJGVyByZXBvcnRlZCBhbiBlcnJvciBvbiBhbiBSeCBtYWlsYm94IG1lc3NhZ2U7IGRyb3BwaW5nXFxuXCIpO1xuK1x0XHRcdGdvdG8gbmV4dF9wYWdlO1xuK1x0XHR9XG4rXG4gXHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGZiZC1cdTAwM2VkZXYsIHJ4X21ieC1cdTAwM2VidWZfaW5mb1toZWFkXS5hZGRyLFxuIFx0XHRcdFx0XHRGQk5JQ19SWF9QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4gXG5AQCAtMTczMyw3ICsxNzUzLDkgQEAgdm9pZCBmYm5pY19tYnhfcG9sbChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4gXHRzdHJ1Y3QgZmJuaWNfZndfbWJ4ICp0eF9tYnggPSBcdTAwMjZmYmQtXHUwMDNlbWJ4W0ZCTklDX0lQQ19NQlhfVFhfSURYXTtcbitcdHN0cnVjdCBmYm5pY19md19tYnggKnJ4X21ieCA9IFx1MDAyNmZiZC1cdTAwM2VtYnhbRkJOSUNfSVBDX01CWF9SWF9JRFhdO1xuIFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwICogSFogKyAxO1xuK1x0dTY0IHR4X3Jlc3BfZXJyb3IsIHJ4X3Jlc3BfZXJyb3I7XG4gXHRpbnQgZXJyLCBpO1xuIFxuIFx0ZG8ge1xuQEAgLTE3NjQsNiArMTc4Niw5IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gXHQgKiBtZ210LnZlcnNpb24gb25jZSB3ZSBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGZpcm13YXJlXG4gXHQgKiBpbiB0aGUgY2FwYWJpbGl0aWVzIHJlcXVlc3QgbWVzc2FnZS5cbiBcdCAqL1xuK3NlbmRfY2FwX3JlcTpcbitcdHR4X3Jlc3BfZXJyb3IgPSB0eF9tYngtXHUwMDNlcmVzcF9lcnJvcjtcbitcdHJ4X3Jlc3BfZXJyb3IgPSByeF9tYngtXHUwMDNlcmVzcF9lcnJvcjtcbiBcdGVyciA9IGZibmljX2Z3X3htaXRfc2ltcGxlX21zZyhmYmQsIEZCTklDX1RMVl9NU0dfSURfSE9TVF9DQVBfUkVRKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gY2xlYW5fbWJ4O1xuQEAgLTE3ODEsOSArMTgwNiwyNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRtc2xlZXAoMjApO1xuIFx0XHRmYm5pY19tYnhfcG9sbChmYmQpO1xuIFxuK1x0XHQvKiBBIHZhbGlkIGNhcGFiaWxpdGllcyByZXNwb25zZSBlbmRzIHRoZSBwb2xsLiBDaGVjayBpdFxuK1x0XHQgKiBiZWZvcmUgdGhlIEZXX0VSUiByZXRyeSBiZWxvdyBzbyBhIHJlc3BvbnNlIHBhcnNlZCBpbiB0aGVcbitcdFx0ICogc2FtZSBwb2xsIGFzIGFuIHVucmVsYXRlZCBGV19FUlIgaXMgbm90IGRpc2NhcmRlZC5cbitcdFx0ICovXG4rXHRcdGlmIChmYmQtXHUwMDNlZndfY2FwLnJ1bm5pbmcubWdtdC52ZXJzaW9uIFx1MDAzZT0gTUlOX0ZXX1ZFUl9DT0RFKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHQvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi9cbi1cdFx0aWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpXG4rXHRcdGlmICghdGltZV9pc19hZnRlcl9qaWZmaWVzKHRpbWVvdXQpKSB7XG4gXHRcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBUaGUgRlcgY2FuIGZsYWcgb3VyIGNhcGFiaWxpdGllcyByZXF1ZXN0IChUeCkgb3IgaXRzXG4rXHRcdCAqIHJlc3BvbnNlIChSeCkgd2l0aCBGV19FUlIsIGluIHdoaWNoIGNhc2UgaXQgcHJvZHVjZWQgbm9cbitcdFx0ICogdXNhYmxlIHJlc3BvbnNlLiBUaGUgcmluZyBpcyBub3Qgd2VkZ2VkLCBzbyByZS1pc3N1ZSB0aGVcbitcdFx0ICogcmVxdWVzdCBpbnN0ZWFkIG9mIHNwaW5uaW5nIHVudGlsIHRoZSB0aW1lb3V0LlxuK1x0XHQgKi9cbitcdFx0aWYgKHR4X21ieC1cdTAwM2VyZXNwX2Vycm9yICE9IHR4X3Jlc3BfZXJyb3IgfHxcbitcdFx0ICAgIHJ4X21ieC1cdTAwM2VyZXNwX2Vycm9yICE9IHJ4X3Jlc3BfZXJyb3IpXG4rXHRcdFx0Z290byBzZW5kX2NhcF9yZXE7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjVmOTk2OTI0N2UzMDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuQEAgLTEzLDYgKzEzLDcgQEAgc3RydWN0IGZibmljX3Rsdl9tc2c7XG4gXG4gc3RydWN0IGZibmljX2Z3X21ieCB7XG4gXHR1OCByZWFkeSwgaGVhZCwgdGFpbDtcbitcdHU2NCByZXNwX2Vycm9yO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZibmljX3Rsdl9tc2dcdCptc2c7XG4gXHRcdGRtYV9hZGRyX3RcdFx0YWRkcjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuaW5kZXggOGI5YmM5ZThlYTU2Yy4uYzY2OThlMzAwMmExMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcbkBAIC00MzQsNiArNDM0LDcgQEAgc3RhdGljIGludCBmYm5pY19wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmYmQtXHUwMDNlbmV0ZGV2O1xuK1x0c3RydWN0IGZibmljX25ldCAqZmJuO1xuIFxuIFx0aWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKVxuIFx0XHRnb3RvIG51bGxfdWNfYWRkcjtcbkBAIC00NDEsMTEgKzQ0MiwxNiBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cnRubF9sb2NrKCk7XG4gXHRuZXRkZXZfbG9jayhuZXRkZXYpO1xuIFxuK1x0ZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbiBcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbiBcbiBcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4gXG4rXHQvKiBUaGUgSVJRcyBhcmUgYWJvdXQgdG8gYmUgZnJlZWQsIHNvIGRyb3AgdGhlIG5hcGkgdmVjdG9yIGNvdW50ICovXG4rXHRmYm4tXHUwMDNlbnVtX25hcGkgPSAwO1xuK1xuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbiBcbkBAIC01MDgsMTYgKzUxNCwyMCBAQCBzdGF0aWMgaW50IF9fZmJuaWNfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdGlmIChmYm5pY19pbml0X2ZhaWx1cmUoZmJkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRydG5sX2xvY2soKTtcbitcdG5ldGRldl9sb2NrKG5ldGRldik7XG4rXG4gXHRmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuIFx0LyogUmVzZXQgdGhlIHF1ZXVlcyBpZiBuZWVkZWQgKi9cbiBcdGZibmljX3Jlc2V0X3F1ZXVlcyhmYm4sIGZibi1cdTAwM2VudW1fdHhfcXVldWVzLCBmYm4tXHUwMDNlbnVtX3J4X3F1ZXVlcyk7XG4gXG4tXHRydG5sX2xvY2soKTtcbi1cdG5ldGRldl9sb2NrKG5ldGRldik7XG4tXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuIFx0XHRlcnIgPSBfX2ZibmljX29wZW4oZmJuKTtcbitcdFx0LyogT24gZmFpbHVyZSB0aGUgdmVjdG9ycyBhcmUgZnJlZWQsIHNvIGRyb3AgdGhlIGNvdW50ICovXG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0ZmJuLVx1MDAzZW51bV9uYXBpID0gMDtcbitcdH1cbiBcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguY1xuaW5kZXggNDAxZjhiOGFlMWNhZS4uZTkzMTc0ZmMxMjM5ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguY1xuQEAgLTcsNiArNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X3J4X3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuQEAgLTE3NjgsNyArMTc2OSw3IEBAIGludCBmYm5pY19hbGxvY19uYXBpX3ZlY3RvcnMoc3RydWN0IGZibmljX25ldCAqZmJuKVxuIFx0aW50IGVycjtcbiBcbiBcdC8qIEFsbG9jYXRlIDEgVHggcXVldWUgcGVyIG5hcGkgdmVjdG9yICovXG4tXHRpZiAobnVtX25hcGkgXHUwMDNjIEZCTklDX01BWF9UWFFTIFx1MDAyNlx1MDAyNiBudW1fbmFwaSA9PSBudW1fdHggKyBudW1fcngpIHtcbitcdGlmIChudW1fbmFwaSBcdTAwM2M9IEZCTklDX01BWF9UWFFTIFx1MDAyNlx1MDAyNiBudW1fbmFwaSA9PSBudW1fdHggKyBudW1fcngpIHtcbiBcdFx0d2hpbGUgKG51bV90eCkge1xuIFx0XHRcdGVyciA9IGZibmljX2FsbG9jX25hcGlfdmVjdG9yKGZiZCwgZmJuLFxuIFx0XHRcdFx0XHRcdCAgICAgIG51bV9uYXBpLCB2X2lkeCxcbkBAIC0yODI5LDYgKzI4MzAsMTcgQEAgdm9pZCBmYm5pY19uYXBpX2RlcGxldGlvbl9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZmJuaWNfd3JmbChmYmQpO1xuIH1cbiBcbisvKiBSZXR1cm5zIHRoZSBuYXBpIHZlY3RvciBzZXJ2aWNpbmcgYW4gUnggcXVldWUsIG9yIE5VTEwgaWYgdGhlIGRhdGFwYXRoXG4rICogaXMgdG9ybiBkb3duLiAgVGhlIGFzc29jaWF0aW9uIGlzIHB1Ymxpc2hlZCBieSBmYm5pY19zZXRfbmV0aWZfbmFwaSgpXG4rICogYW5kIGNsZWFyZWQgYnkgZmJuaWNfcmVzZXRfbmV0aWZfbmFwaSgpLCBib3RoIHVuZGVyIHRoZSBpbnN0YW5jZSBsb2NrLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3IgKmZibmljX3J4cV9udihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWR4KVxuK3tcbitcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IF9fbmV0aWZfZ2V0X3J4X3F1ZXVlKGRldiwgaWR4KS1cdTAwM2VuYXBpO1xuK1xuK1x0cmV0dXJuIG5hcGkgPyBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGZibmljX25hcGlfdmVjdG9yLCBuYXBpKSA6IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfbWVtX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgc3RydWN0IG5ldGRldl9xdWV1ZV9jb25maWcgKnFjZmcsXG4gXHRcdFx0XHQgdm9pZCAqcW1lbSwgaW50IGlkeClcbkBAIC0yODQxLDggKzI4NTMsMTYgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRyZXR1cm4gZmJuaWNfYWxsb2NfcXRfcGFnZV9wb29scyhmYm4sIHF0LCBpZHgpO1xuIFxuK1x0LyogQSBmYWlsZWQgUENJZSByZWNvdmVyeSBvciByZXN1bWUgY2FuIGxlYXZlIHRoZSBkYXRhcGF0aCB0b3JuIGRvd25cbitcdCAqIHdoaWxlIG5ldGlmX3J1bm5pbmcoKSBpcyBzdGlsbCB0cnVlLiAgVGhpcyBuZG8gcnVucyBiZWZvcmVcbitcdCAqIG5ldGRldl9yeF9xdWV1ZV9yZXN0YXJ0KCkgY2hlY2tzIG5ldGlmX3J1bm5pbmcoKSwgc28gYmFpbCBvdXRcbitcdCAqIHJhdGhlciB0aGFuIHRvdWNoaW5nIHJpbmdzIGFuZCB2ZWN0b3JzIHRoYXQgYXJlIGFscmVhZHkgZnJlZWQuXG4rXHQgKi9cbitcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcbitcdGlmICghbnYpXG4rXHRcdHJldHVybiAtRU5FVERPV047XG4rXG4gXHRyZWFsID0gY29udGFpbmVyX29mKGZibi1cdTAwM2VyeFtpZHhdLCBzdHJ1Y3QgZmJuaWNfcV90cmlhZCwgY21wbCk7XG4tXHRudiA9IGZibi1cdTAwM2VuYXBpW2lkeCAlIGZibi1cdTAwM2VudW1fbmFwaV07XG4gXG4gXHRmYm5pY19yaW5nX2luaXQoXHUwMDI2cXQtXHUwMDNlc3ViMCwgcmVhbC1cdTAwM2VzdWIwLmRvb3JiZWxsLCByZWFsLVx1MDAzZXN1YjAucV9pZHgsXG4gXHRcdFx0cmVhbC1cdTAwM2VzdWIwLmZsYWdzKTtcbkBAIC0yODkzLDcgKzI5MTMsNyBAQCBzdGF0aWMgaW50IGZibmljX3F1ZXVlX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRzdHJ1Y3QgZmJuaWNfcV90cmlhZCAqcmVhbDtcbiBcbiBcdHJlYWwgPSBjb250YWluZXJfb2YoZmJuLVx1MDAzZXJ4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTtcbi1cdG52ID0gZmJuLVx1MDAzZW5hcGlbaWR4ICUgZmJuLVx1MDAzZW51bV9uYXBpXTtcbitcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcbiBcbiBcdGZibmljX2FnZ3JlZ2F0ZV9yaW5nX2JkcV9jb3VudGVycyhmYm4sIFx1MDAyNnJlYWwtXHUwMDNlc3ViMCk7XG4gXHRmYm5pY19hZ2dyZWdhdGVfcmluZ19iZHFfY291bnRlcnMoZmJuLCBcdTAwMjZyZWFsLVx1MDAzZXN1YjEpO1xuQEAgLTI5MTUsNyArMjkzNSw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxuIFx0aW50IGVycjtcbiBcbiBcdHJlYWwgPSBjb250YWluZXJfb2YoZmJuLVx1MDAzZXJ4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTtcbi1cdG52ID0gZmJuLVx1MDAzZW5hcGlbaWR4ICUgZmJuLVx1MDAzZW51bV9uYXBpXTtcbitcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcbiBcdGZibmljX2RiZ19udl9leGl0KG52KTtcbiBcbiBcdG5hcGlfZGlzYWJsZV9sb2NrZWQoXHUwMDI2bnYtXHUwMDNlbmFwaSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuaW5kZXggMjUzNjAwYzBlY2NkZi4uYzRjOWNlMDM4NjExMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuQEAgLTk0NCw2ICs5NDQsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU1cdEJJVCg2KVxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTU1x0XHRCSVQoNylcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOS1x0XHRCSVQoOClcbisjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXHRcdEJJVCg5KVxuIFxuIC8qKlxuICAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zXG5AQCAtOTgxLDYgKzk4Miw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcbiAgKlx0IC0gbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcygpXG4gICpcdCAtIG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMoKVxuICAqXHQgLSBldGh0b29sX29wX2dldF9saW5rKCkgKHN5bmNzIGxpbmsgd2F0Y2ggdW5kZXIgcnRubF9sb2NrKVxuKyAqXHQgLSBuZXRpZl9vcGVuKCkgLyBuZXRpZl9jbG9zZSgpICh1c2VkIGJ5IEBzZWxmX3Rlc3QpXG4gICpcbiAgKiBAZ2V0X2RydmluZm86IFJlcG9ydCBkcml2ZXIvZGV2aWNlIGluZm9ybWF0aW9uLiBNb2Rlcm4gZHJpdmVycyBub1xuICAqXHRsb25nZXIgaGF2ZSB0byBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjay4gTW9zdCBmaWVsZHMgYXJlXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvY29tbW9uLmggYi9uZXQvZXRodG9vbC9jb21tb24uaFxuaW5kZXggNGU1MzU2ZTI2ZjQwMC4uYWUzMmU3ZmRiNTYzYyAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL2NvbW1vbi5oXG4rKysgYi9uZXQvZXRodG9vbC9jb21tb24uaFxuQEAgLTE2Myw2ICsxNjMsOCBAQCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcbiBcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xuIFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxuIFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcbitcdGNhc2UgRVRIVE9PTF9URVNUOlxuK1x0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xuIFx0fVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMxOjQ2LjYzNDU0NTcwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NDc1ODYwNzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3VpdGFiaWxpdHkgRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIExldCdzIHNlZS4uLiBmaXJzdCwgdGhlIHJpc2sgYXNzZXNzbWVudC4gU3RhbmRhcmQga2VybmVsIG1haW50ZW5hbmNlLCBRQSwgZGVmZW5zaXZlIHNlY3VyaXR5IOKAkyBzb3VuZHMgcHJldHR5IGJlbmlnbi4gTm8gZXhwbG9pdCBjcmVhdGlvbiwganVzdCBjaGVja2luZyBmb3IgdnVsbmVyYWJpbGl0aWVzLiBHb29kLCBnb29kLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyB0b3VjaGluZyBhIGJ1bmNoIG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuY2AsIGEgd2hvbGUgYnVuY2ggb2YgYGZibmljYCBmaWxlcywgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCwgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIEFoLCB3YWl0ISBUaGUgY29yZSBuZXQgY2hhbmdlcyBhcmUgd2hhdCBjYXRjaGVzIG15IGV5ZS5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYDogYCNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGFuZCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgLCBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCB1c2VzIGl0LiBBbmQgYGJueHRfZXRodG9vbC5jYCBpcyBhZGRpbmcgdGhhdCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHRvIGBibnh0X2V0aHRvb2xfb3BzLm9wX25lZWRzX3J0bmxgLiBUaGUgYGZibmljYCBjaGFuZ2VzIGFyZSBhbHNvIHRoZXJlLlxuXG5Ib2xkIG9uLCB3aGF0IGFyZSB0aGVzZSBgYm54dGAgYW5kIGBmYm5pY2AgdGhpbmdzPyBSaWdodCwgYGJueHRgIGlzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUgZHJpdmVyLCBwaHlzaWNhbCBQQ0llIE5JQ3MuIEFuZCBgZmJuaWNgIGlzIE1ldGEncyBjdXN0b20gSG9zdCBOZXR3b3JrIEludGVyZmFjZSwgYWxzbyBQQ0llIG5ldHdvcmsgY2FyZC4gU28gd2UncmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGRyaXZlcnMgaGVyZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cbkJ1dCB0aG9zZSBjb3JlIG5ldCBjaGFuZ2VzLCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgIGFuZCBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgIHNwZWNpZmljYWxseS4uLiBpcyBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCByZWFjaGFibGU/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGlzIGFjdHVhbGx5ICp1c2VkKiBpbiB0aGUgY29kZWJhc2UuIExldCdzIGRvIGEgc2VhcmNoIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQuIFRoYXQgd2lsbCB0ZWxsIHVzIGlmIHRoZXNlIGNvcmUgY2hhbmdlcyBhcmUgZXZlbiByZWxldmFudCBpbiBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU1MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjA1LjExMDQwODQzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyOTQ3NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9jb21tb24uaD05Mj1ldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNtZClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEyOS0vKipcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMzA6ICogZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkgLSBkb2VzIHRoaXMgbGVnYWN5IGlvY3RsIGNtZCBuZWVkIHJ0bmxfbG9jaz9cXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMzEtICogQGRldjogdGFyZ2V0IGRldmljZVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbFxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEzODpldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMzkte1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM1OTAtICogRHJpdmVyLWRlY2lkZWQgU0VUIGNvbW1hbmRzIHRoYXQgbWF5IGNoYWluIGludG8gcnRubC1vbmx5IGhlbHBlcnMgYXJlXFxubmV0L2V0aHRvb2wvaW9jdGwuYzozNTkxOiAqIGNvdmVyZWQgYnkgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkvRVRIVE9PTF9PUF9ORUVEU19SVE5MXyouXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTkyLSAqL1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zNjEwPV9fZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyLFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjIzLVxcdFxcdCAgICBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZCkgfHxcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2MjQ6XFx0XFx0ICAgIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjI1LVxcdGlmIChuZWVkX3J0bmwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjA2LjczMzM2MDU0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgzODE1NDgwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBldGh0b29sIFNvdXJjZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXRodG9vbCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhyb3VnaCBpb2N0bHMuIEknbSBnb2luZyB0byBmb2N1cyBvbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMzYxMCB0byAzNjUwLiBUaGlzIGxpa2VseSBkZWFscyB3aXRoIHNvbWUgc3BlY2lmaWMgZmVhdHVyZSBvciBmdW5jdGlvbiBjYWxsLiBJIGFsc28gbmVlZCB0byBrZWVwIGBuZXQvZXRodG9vbC9jb21tb24uaGAgb3Blbi4gVGhhdCBoZWFkZXIgZmlsZSBpcyBwcmFjdGljYWxseSB0aGUgZXRodG9vbCBiaWJsZSDigJMgaXQgcHJvYmFibHkgZGVmaW5lcyB0aGUgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzIEknbGwgbmVlZCB0byBpbnRlcnByZXQgdGhlIGlvY3RsIGNhbGxzIGFuZCBkYXRhLiBJJ2xsIHJlYWQgdGhvc2UgdHdvIGZpbGVzIGFuZCB0cnkgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiBldGh0b29sIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjE1LjExNDkxMDY4MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM2MDA6XFx0XFx0Y2FzZSBFVEhUT09MX1NTRzpcXG4zNjAxOlxcdFxcdGNhc2UgRVRIVE9PTF9TVFNPOlxcbjM2MDI6XFx0XFx0Y2FzZSBFVEhUT09MX1NHU086XFxuMzYwMzpcXHRcXHRjYXNlIEVUSFRPT0xfU0dSTzpcXG4zNjA0OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjM2MDU6XFx0XFx0fVxcbjM2MDY6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjM2MDc6XFx0fVxcbjM2MDg6XFx0XFxuMzYwOTpcXHRzdGF0aWMgaW50XFxuMzYxMDpcXHRfX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcXG4zNjExOlxcdFxcdCAgICAgIHUzMiBldGhjbWQsIHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpkZXZsaW5rX3N0YXRlKVxcbjM2MTI6XFx0e1xcbjM2MTM6XFx0XFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuMzYxNDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjM2MTU6XFx0XFx0Ym9vbCBuZWVkX3J0bmw7XFxuMzYxNjpcXHRcXHRpbnQgcmM7XFxuMzYxNzpcXHRcXG4zNjE4OlxcdFxcdGRldiA9IG5ldGRldl9nZXRfYnlfbmFtZShuZXQsIGlmci1cXHUwMDNlaWZyX25hbWUsIFxcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuMzYxOTpcXHRcXHRpZiAoIWRldilcXG4zNjIwOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjM2MjE6XFx0XFxuMzYyMjpcXHRcXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxcbjM2MjM6XFx0XFx0XFx0ICAgIGV0aHRvb2xfY21kX2NoYW5nZXNfZmVhdHVyZXMoZXRoY21kKSB8fFxcbjM2MjQ6XFx0XFx0XFx0ICAgIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7XFxuMzYyNTpcXHRcXHRpZiAobmVlZF9ydG5sKVxcbjM2MjY6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuMzYyNzpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4zNjI4OlxcdFxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSBcXHUwMDNlIE5FVFJFR19SRUdJU1RFUkVEIHx8XFxuMzYyOTpcXHRcXHQgICAgZGV2LVxcdTAwM2Vtb3ZpbmdfbnMgfHwgIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkpIHtcXG4zNjMwOlxcdFxcdFxcdHJjID0gLUVOT0RFVjtcXG4zNjMxOlxcdFxcdFxcdGdvdG8gZXhpdF9vcHNfdW5sb2NrO1xcbjM2MzI6XFx0XFx0fVxcbjM2MzM6XFx0XFxuMzYzNDpcXHRcXHRyYyA9IGRldl9ldGh0b29sX2xvY2tlZChuZXQsIGRldiwgdXNlcmFkZHIsIGV0aGNtZCwgZGV2bGlua19zdGF0ZSxcXG4zNjM1OlxcdFxcdFxcdFxcdFxcdG5lZWRfcnRubCk7XFxuMzYzNjpcXHRcXG4zNjM3OlxcdGV4aXRfb3BzX3VubG9jazpcXG4zNjM4OlxcdFxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuMzYzOTpcXHRcXHRpZiAobmVlZF9ydG5sKVxcbjM2NDA6XFx0XFx0XFx0cnRubF91bmxvY2soKTtcXG4zNjQxOlxcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2X3RyYWNrZXIpO1xcbjM2NDI6XFx0XFxuMzY0MzpcXHRcXHRyZXR1cm4gcmM7XFxuMzY0NDpcXHR9XFxuMzY0NTpcXHRcXG4zNjQ2OlxcdGludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXFxuMzY0NzpcXHR7XFxuMzY0ODpcXHRcXHRzdHJ1Y3QgZXRodG9vbF9kZXZsaW5rX2NvbXBhdCAqc3RhdGU7XFxuMzY0OTpcXHRcXHR1MzIgZXRoY21kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjoxNS4xMTUwNjMxNjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0Mzk3MzM1MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCgpYCBhbmQgTmV0d29yayBEZXZpY2UgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGRldiwgZXRoY21kKWAgZnVuY3Rpb24uIFRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBvciBub3QgYSBuZXR3b3JrIGRldmljZSBgZGV2YCByZXF1aXJlcyB0aGUgUmVhbC1UaW1lIE5ldGxpbmsgKFJUTkwpIHN1YnN5c3RlbSB0byBoYW5kbGUgdGhlIGBldGhjbWRgICh0aGUgc3BlY2lmaWMgZXRodG9vbCBjb21tYW5kKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggd2UgZGVjaWRlIFJUTkwgaXMgbmVjZXNzYXJ5LlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gY3JhY2sgb3BlbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgLCBzcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhhdCBzZWN0aW9uIGFyb3VuZCBsaW5lcyAxMzAgdG8gMTcwLiBUaGF0J3Mgd2hlcmUgSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGNvcmUgbG9naWMgb3IgcmVsZXZhbnQgZGVmaW5pdGlvbnMgdG8gZGVjb2RlIGV4YWN0bHkgd2hhdCB0cmlnZ2VycyB0aGF0IGRldGVybWluYXRpb24uIFRoZXJlJ3MgbGlrZWx5IGEgc2VyaWVzIG9mIGNoZWNrcywgZmxhZ3MsIG9yIGRhdGEgc3RydWN0dXJlcyBkZWZpbmVkIGluIHRoYXQgYXJlYSB0aGF0IGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiwgYW5kIHRob3NlIHdpbGwgaWxsdW1pbmF0ZSB3aGVuIFJUTkwgaXMgdHJ1bHkgcmVxdWlyZWQgZm9yIGEgc3BlY2lmaWMgZXRodG9vbCBvcGVyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gZWZmaWNpZW50IGFuZCBjb3JyZWN0IG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjI1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjoxOS41MTI0MDMyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9jb21tb24uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0ICogZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkgLSBkb2VzIHRoaXMgbGVnYWN5IGlvY3RsIGNtZCBuZWVkIHJ0bmxfbG9jaz9cXG4gMTMxOlxcdCAqIEBkZXY6IHRhcmdldCBkZXZpY2VcXG4gMTMyOlxcdCAqIEBldGhjbWQ6IEVUSFRPT0xfKiBpb2N0bCBjb21tYW5kIHZhbHVlXFxuIDEzMzpcXHQgKlxcbiAxMzQ6XFx0ICogUmV0dXJuOiB0cnVlIGlmIEBldGhjbWQgaXMgYSBjb21tYW5kIGZvciB3aGljaCBAZGV2IGhhcyBvcHRlZC1pbiB0b1xcbiAxMzU6XFx0ICoga2VlcGluZyBydG5sX2xvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwgKHZpYSBvcF9uZWVkc19ydG5sKS5cXG4gMTM2OlxcdCAqL1xcbiAxMzc6XFx0c3RhdGljIGlubGluZSBib29sXFxuIDEzODpcXHRldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG4gMTM5OlxcdHtcXG4gMTQwOlxcdFxcdGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LVxcdTAwM2VldGh0b29sX29wcztcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0c3dpdGNoIChldGhjbWQpIHtcXG4gMTQzOlxcdFxcdGNhc2UgRVRIVE9PTF9HTElOS1NFVFRJTkdTOlxcbiAxNDQ6XFx0XFx0Y2FzZSBFVEhUT09MX0dTRVQ6XFxuIDE0NTpcXHRcXHRjYXNlIEVUSFRPT0xfU0xJTktTRVRUSU5HUzpcXG4gMTQ2OlxcdFxcdGNhc2UgRVRIVE9PTF9TU0VUOlxcbiAxNDc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1M7XFxuIDE0ODpcXHRcXHRjYXNlIEVUSFRPT0xfU1BGTEFHUzpcXG4gMTQ5OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUztcXG4gMTUwOlxcdFxcdGNhc2UgRVRIVE9PTF9TUklOR1BBUkFNOlxcbiAxNTE6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNO1xcbiAxNTI6XFx0XFx0Y2FzZSBFVEhUT09MX1NDSEFOTkVMUzpcXG4gMTUzOlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTO1xcbiAxNTQ6XFx0XFx0Y2FzZSBFVEhUT09MX1NDT0FMRVNDRTpcXG4gMTU1OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xcbiAxNTY6XFx0XFx0Y2FzZSBFVEhUT09MX0dQQVVTRVBBUkFNOlxcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTTtcXG4gMTU4OlxcdFxcdGNhc2UgRVRIVE9PTF9TUEFVU0VQQVJBTTpcXG4gMTU5OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU07XFxuIDE2MDpcXHRcXHRjYXNlIEVUSFRPT0xfU1JTU0g6XFxuIDE2MTpcXHRcXHRjYXNlIEVUSFRPT0xfU1JYRkg6XFxuIDE2MjpcXHRcXHRjYXNlIEVUSFRPT0xfU1JYRkhJTkRJUjpcXG4gMTYzOlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xcbiAxNjQ6XFx0XFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxcbiAxNjU6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcXG4gMTY2OlxcdFxcdGNhc2UgRVRIVE9PTF9URVNUOlxcbiAxNjc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbiAxNjg6XFx0XFx0fVxcbiAxNjk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxNzA6XFx0fVxcbiAxNzE6XFx0XFxuIDE3MjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRVRIVE9PTF9ORVRMSU5LKVxcbiAxNzM6XFx0dm9pZCBldGh0b29sX3Jzc19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHR5cGUsIHUzMiByc3NfY29udGV4dCk7XFxuIDE3NDpcXHQjZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjoxOS41MTI2MDQxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNjQ1NTg4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqVW5yYXZlbGluZyBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZSB0aGlzIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCBjYWxsLCBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoYXQgdGhhdCdzIGFjdHVhbGx5IGRvaW5nLiBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgYWxvbmUuIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBhIHBvdGVudGlhbGx5IHRyaWNreSBwaWVjZSBvZiBuZXR3b3JrIGRldmljZSBkcml2ZXIgY29kZSwgZXNwZWNpYWxseSBpZiB3ZSBhcmUgaW4gYSBtdWx0aSB0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGltZSB0byBkaWcgaW4sIHJhdGhlciB0aGFuIG1ha2UgYXNzdW1wdGlvbnMuIExldCdzIGdldCB0aGUgY29udGV4dCByaWdodCBhd2F5LiBMZXQncyBkbyBhIHF1aWNrIHNlYXJjaCBmb3IgYG5ldGRldl9uZWVkX29wc19sb2NrYCBhbmQgc2VlIHdoYXQgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIG1pZ2h0IG9mZmVyLiBIb3BlZnVsbHksIHRoZSBzZWFyY2ggcmVzdWx0cyB3aWxsIHF1aWNrbHkgaWxsdW1pbmF0ZSBpZiBpdCdzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgY29udHJvbCwgZGV2aWNlIG9wZXJhdGlvbiBvcmRlcmluZywgb3Igc29tZSBvdGhlciBhc3BlY3Qgb2YgbmV0d29yayBkZXZpY2UgbWFuYWdlbWVudCB0aGF0IGRlbWFuZHMgY2FyZWZ1bCBhdHRlbnRpb24uIEEgZ29vZCBzZWFyY2ggc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24sIGFsb25nIHdpdGggdXNlcywgYW5kIG1heWJlIGV2ZW4gYSBicmllZiBkZXNjcmlwdGlvbiBmcm9tIHRoZSBjb2RlLCBvciBob3BlZnVsbHkgYmV0dGVyIHlldCwgYSBtZWFuaW5nZnVsIGNvbW1pdCBtZXNzYWdlLiBJIGFtIGxvb2tpbmcgZm9yIHRoZSBcIndoeVwiIGFuZCBcIndoZW5cIiBiZWhpbmQgdGhpcyBmdW5jdGlvbidzIGV4aXN0ZW5jZS4gSSBzdXNwZWN0IHRoaXMgaXMgc29tZXRoaW5nIGZ1bmRhbWVudGFsLCBsaWtlIGxvY2tpbmcgdGhlIGRldmljZSBvcGVyYXRpb25zIHN0cnVjdHVyZSwgYW5kIEkgbmVlZCB0byBlc3RhYmxpc2ggdGhlIHByZWNpc2Ugc2NvcGUgYW5kIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NTgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjIxLjg3NzE2NjAyM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NzYxNjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbmVlZF9vcHNfbG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYz0zMT1pbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy00NC1cXHQgKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYzo0NTpcXHRpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jLTQ2LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz04Mj1zdGF0aWMgX19pbmxpbmVfXyBpbnQgZGV2X2lzX2V0aGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy04My17XFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jOjg0OlxcdHJldHVybiBkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSIFxcdTAwMjZcXHUwMDI2ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy04NS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIxNTg9c3RydWN0IG5ldF9kZXZpY2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNjAxLVxcdCAqICAgYW5kIG90aGVyIGNhbGxiYWNrcywgdGhhdCBpcyB0aGUgaW5zdGFuY2UgbG9jayBvbiBkZXZpY2VzIGZvclxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjYwMjpcXHQgKiAgIHdoaWNoIG5ldGRldl9uZWVkX29wc19sb2NrKCkgcmV0dXJucyB0cnVlLCBvdGhlcndpc2UgYnkgcnRubF9sb2NrO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjYwMy1cXHQgKlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjYwNC1cXHQgKiAtIGRvdWJsZSBvcHMgcHJvdGVjdGVkIC0gYWx3YXlzIHByb3RlY3RlZCBieSBydG5sX2xvY2sgYnV0IGZvclxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjYwNTpcXHQgKiAgIGRldmljZXMgZm9yIHdoaWNoIG5ldGRldl9uZWVkX29wc19sb2NrKCkgcmV0dXJucyB0cnVlIC0gYWxzb1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjYwNi1cXHQgKiAgIHRoZSBpbnN0YW5jZSBsb2NrLlxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0yMT1uZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcl9pbnZpc2libGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMjctXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDoyODpzdGF0aWMgaW5saW5lIGJvb2wgbmV0ZGV2X25lZWRfb3BzX2xvY2soY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTI5LXtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9Mzk9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNDAte1xcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6NDE6XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC00Mi1cXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD00NT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3VubG9ja19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTQ2LXtcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjQ3OlxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNDgtXFx0XFx0bmV0ZGV2X3VubG9jayhkZXYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD01MT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX3RvX2Z1bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTUyLXtcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjUzOlxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNTQtXFx0XFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9NTk9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl91bmxvY2tfZnVsbF90b19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTYwLXtcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjYxOlxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNjItXFx0XFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9Njc9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTY4LXtcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjY5OlxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNzAtXFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9ODM9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtODQte1xcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6ODU6XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC04Ni1cXHRcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChkZXYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD04OT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtOTAte1xcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6OTE6XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC05Mi1cXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD05Nz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC05OC17XFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo5OTpcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTEwMC1cXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTEwNj1zdGF0aWMgaW5saW5lIGludCBuZXRkZXZfaXNfbG9ja2VkX29wc19jb21wYXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTEwNy17XFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDoxMDg6XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC0xMDktXFx0XFx0cmV0dXJuIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9xdWV1ZXMuaD00Mz1zdHJ1Y3QgbmV0ZGV2X3F1ZXVlX3N0YXRzX3R4IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9xdWV1ZXMuaC05MS0gKlxcbmluY2x1ZGUvbmV0L25ldGRldl9xdWV1ZXMuaDo5MjogKiBPcHMgYXJlIGNhbGxlZCB1bmRlciB0aGUgaW5zdGFuY2UgbG9jayBpZiBuZXRkZXZfbmVlZF9vcHNfbG9jaygpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X3F1ZXVlcy5oLTkzLSAqIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIHVuZGVyIHJ0bmxfbG9jay5cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTExNDM4LVxcbm5ldC9jb3JlL2Rldi5jOjExNDM5OlxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZGV2LmMtMTE0NDAtXFx0ICAgIGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjQ0MT12b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbm90aWZ5KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjQ3NC1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvY29yZS9kZXYuYzoxMjQ3NTpcXHRcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkge1xcbm5ldC9jb3JlL2Rldi5jLTEyNDc2LVxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmRldi1cXHUwMDNlY2xvc2VfbGlzdCwgXFx1MDAyNmNsb3NlX2hlYWQpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI0ODMtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGhlYWQsIHVucmVnX2xpc3QpIHtcXG5uZXQvY29yZS9kZXYuYzoxMjQ4NDpcXHRcXHRpZiAoIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxubmV0L2NvcmUvZGV2LmMtMTI0ODUtXFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2VjbG9zZV9saXN0LCBcXHUwMDI2Y2xvc2VfaGVhZCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjcwMj1pbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI3OTgtXFxubmV0L2NvcmUvZGV2LmM6MTI3OTk6XFx0aWYgKCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbm5ldC9jb3JlL2Rldi5jLTEyODAwLVxcdFxcdG5ldGRldl9sb2NrKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjg3My1cXHRkZXYtXFx1MDAzZW1vdmluZ19ucyA9IGZhbHNlO1xcbm5ldC9jb3JlL2Rldi5jOjEyODc0OlxcdGlmICghbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG5uZXQvY29yZS9kZXYuYy0xMjg3NS1cXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuaD0xOTE9c3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3NldF91cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHZhbHVlKVxcbi0tXFxubmV0L2NvcmUvZGV2LmgtMTk3LVxcbm5ldC9jb3JlL2Rldi5oOjE5ODpcXHRpZiAoIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxubmV0L2NvcmUvZGV2LmgtMTk5LVxcdFxcdG5ldGRldl9sb2NrKGRldik7XFxubmV0L2NvcmUvZGV2LmgtMjAwLVxcdGRldi1cXHUwMDNldXAgPSB2YWx1ZTtcXG5uZXQvY29yZS9kZXYuaDoyMDE6XFx0aWYgKCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbm5ldC9jb3JlL2Rldi5oLTIwMi1cXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzNjI9dm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzc0LVxcdGlmIChvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYyB8fCBvcHMtXFx1MDAzZW5kb19jaGFuZ2VfcnhfZmxhZ3MgfHxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzNzU6XFx0ICAgIG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzYtXFx0XFx0bmV0aWZfcnhfbW9kZV9xdWV1ZShkZXYpO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMDEzPWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwNjktXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEwNzA6XFx0ZWxzZSBpZiAoIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikpXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDcxLVxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3J4X3F1ZXVlLmM9MjQ1PWludCBuZXRpZl9tcF9vcGVuX3J4cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcnhxX2lkeCxcXG4tLVxcbm5ldC9jb3JlL25ldGRldl9yeF9xdWV1ZS5jLTI1MC1cXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYzoyNTE6XFx0aWYgKCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbm5ldC9jb3JlL25ldGRldl9yeF9xdWV1ZS5jLTI1Mi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM2MTA9X19kZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2MjEtXFxubmV0L2V0aHRvb2wvaW9jdGwuYzozNjIyOlxcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjIzLVxcdFxcdCAgICBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZCkgfHxcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz01MDc9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01MzktXFx0aWYgKHJlcV9pbmZvLVxcdTAwM2VkZXYpIHtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTQwOlxcdFxcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhyZXFfaW5mby1cXHUwMDNlZGV2KSB8fFxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01NDEtXFx0XFx0XFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwocmVxX2luZm8tXFx1MDAzZWRldiwgY21kKTtcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz01OTQ9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjA4LVxcdGV0aG5sX2luaXRfcmVwbHlfZGF0YShjdHgtXFx1MDAzZXJlcGx5X2RhdGEsIGN0eC1cXHUwMDNlb3BzLCBkZXYpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2MDk6XFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikgfHxcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjEwLVxcdFxcdCAgICBldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGRldiwgY3R4LVxcdTAwM2VvcHMtXFx1MDAzZXJlcXVlc3RfY21kKTtcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz05MDA9c3RhdGljIGludCBldGhubF9kZWZhdWx0X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtOTMwLVxcdGRldiA9IHJlcV9pbmZvLVxcdTAwM2VkZXY7XFxubmV0L2V0aHRvb2wvbmV0bGluay5jOjkzMTpcXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy05MzItXFx0XFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwoZGV2LCBjbWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjoyNC4zMzQ3OTA0NTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjkyMzg1ODY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBuZXRkZXZfbmVlZF9vcHNfbG9ja2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0ZGV2X25lZWRfb3BzX2xvY2tgLi4uIG15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2hhdCBhY3R1YWxseSAqdHJpZ2dlcnMqIHRoYXQgcmV0dXJuIHZhbHVlIG9mIHRydWU/IFdoYXQgY29uZGl0aW9ucyBhcmUgd2UgdGFsa2luZyBhYm91dCBoZXJlP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJIGtub3cgSSd2ZSBzZWVuIHRoaXMgZnVuY3Rpb24gYmVmb3JlLCBidXQgYSBxdWljayByZWZyZXNoZXIgbmV2ZXIgaHVydHMuXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgc291cmNlIGNvZGUuIExldCdzIGRpdmUgaW50byBgaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDoyOGAuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGZ1bmN0aW9uLiBUaW1lIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHRvIGRldGVybWluZSB0aGUgbmVlZCBmb3IgdGhhdCBsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA2MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjI3LjI1ODY1MTMyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XFxuICAyNjpcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRkZXZfbmVlZF9vcHNfbG9jayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgMjk6XFx0e1xcbiAgMzA6XFx0XFx0Ym9vbCByZXQgPSBkZXYtXFx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzO1xcbiAgMzE6XFx0XFxuICAzMjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1NIQVBFUilcXG4gIDMzOlxcdFxcdHJldCB8PSAhIWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmV0X3NoYXBlcl9vcHM7XFxuICAzNDpcXHQjZW5kaWZcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDM3OlxcdH1cXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA0MjpcXHRcXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjI3LjI1ODcyMDk2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDU0MDY3NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGV0aHRvb2xgIElPQ1RMIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGBuZXQvZXRodG9vbC9pb2N0bC5jYCBjb2RlIHNuaXBwZXQuIFRoZSBjb3JlIGNvbmNlcm4gaGVyZSBpcyB0aGUgYG5lZWRfcnRubGAgdmFyaWFibGUsIHdoaWNoIGRldGVybWluZXMgd2hldGhlciB0aGUgcm91dGluZSBuZWVkcyB0byBhY3F1aXJlIHRoZSBSVE5MIChSb3V0aW5nIFRhYmxlIE5ldGxpbmspIGxvY2suIEl0IGxvb2tzIGxpa2UgdGhlIGNvbmRpdGlvbiB0aGF0IHNldHMgaXQgaXMgYSBiaXQuLi4gdW51c3VhbC5cblxuVGhlIGtleSBsaW5lIGlzOiBgbmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikgfHwgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8IGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7YCBJZiBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgcmV0dXJucyBmYWxzZSwgYG5lZWRfcnRubGAgKmltbWVkaWF0ZWx5KiBiZWNvbWVzIHRydWUuICBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgdHJ1ZSBmb3IgXCJhbGwgc3RhbmRhcmQgZGV2aWNlcyxcIiBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCAqaXMqIHRydWUuXG5cbkxldCdzIGRyaWxsIGRvd246IGl0IHNlZW1zIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCByZXR1cm5zIHRydWUgd2hlbiBgZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2tgIGlzIHRydWUsIG9yIGBkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHNgIGlzIHNldCwgb3IgYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5ldF9zaGFwZXJfb3BzYCBpcyBzZXQuICBTbywgZm9yIG1vc3QgZGV2aWNlcywgd2UncmUgdGFraW5nIHRoZSBSVE5MIGxvY2sgKmFueXdheSouIEJ1dCB3aHkgdGhlc2UgdGhyZWUgc3BlY2lmaWMgdHJpZ2dlcnM/IFRoYXQncyB3aGF0IEkgd2FudCB0byB1bmRlcnN0YW5kLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGRyaXZlcnMgYXJlIHNldHRpbmcgYHJlcXVlc3Rfb3BzX2xvY2tgLCBgcXVldWVfbWdtdF9vcHNgLCBvciBgbmV0X3NoYXBlcl9vcHNgLiAgSSdsbCBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIHRob3NlIGV4YWN0IHRlcm1zIHRvIHVuZGVyc3RhbmQgd2hlbiB0aGV5J3JlIHVzZWQuICBJJ20gY3VyaW91cyB0byBzZWUgd2hhdCBraW5kIG9mIGRldmljZXMgYXJlIHRyaWdnZXJpbmcgdGhlc2UgZmxhZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTcyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzI6MzAuMzEyNzkxMTg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQzNDgxMTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXVlc3Rfb3BzX2xvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTM0Mz1Ecml2ZXJzIGNhbiBhbHNvIGV4cGxpY2l0bHkgcmVxdWVzdCBpbnN0YW5jZSBsb2NrIHRvIGJlIGhlbGQgZHVyaW5nIG9wc1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDozNDQ6Ynkgc2V0dGluZyBgYHJlcXVlc3Rfb3BzX2xvY2tgYCB0byB0cnVlLiBDb2RlIGNvbW1lbnRzIGFuZCBkb2NzIHJlZmVyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTM0NS10byBkcml2ZXJzIHdoaWNoIGhhdmUgb3BzIGNhbGxlZCB1bmRlciB0aGUgaW5zdGFuY2UgbG9jayBhcyBcXFwib3BzIGxvY2tlZFxcXCIuXFxuLS1cXG5kcml2ZXJzL25ldC9kdW1teS5jPTEwMz1zdGF0aWMgdm9pZCBkdW1teV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHVtbXkuYy0xMTAtXFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuZHJpdmVycy9uZXQvZHVtbXkuYzoxMTE6XFx0ZGV2LVxcdTAwM2VyZXF1ZXN0X29wc19sb2NrID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9kdW1teS5jLTExMi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYz0zNDAyPWludCBibmdlX25ldGRldl9hbGxvYyhzdHJ1Y3QgYm5nZV9kZXYgKmJkLCBpbnQgbWF4X2lycXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzUxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmM6MzUxOTpcXHRuZXRkZXYtXFx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYy0zNTIwLVxcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTU4Mjk9c3RhdGljIHZvaWQgbWx4NWVfYnVpbGRfbmljX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODQxLVxcdG5ldGRldi1cXHUwMDNleHNrX3R4X21ldGFkYXRhX29wcyA9IFxcdTAwMjZtbHg1ZV94c2tfdHhfbWV0YWRhdGFfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM6NTg0MjpcXHRuZXRkZXYtXFx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMtNTg0My1cXHRuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhuZXRkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jPTg5Mz1zdGF0aWMgdm9pZCBtbHg1ZV9idWlsZF9yZXBfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtODk3LVxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZtbHg1ZV9uZXRkZXZfb3BzX3JlcDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM6ODk4OlxcdG5ldGRldi1cXHUwMDNlcmVxdWVzdF9vcHNfbG9jayA9IHRydWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTg5OS1cXHRuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhuZXRkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmM9OTk9aW50IG1seDVpX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuYy0xMjMtXFx0bmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZtbHg1aV9ldGh0b29sX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuYzoxMjQ6XFx0bmV0ZGV2LVxcdTAwM2VyZXF1ZXN0X29wc19sb2NrID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuYy0xMjUtXFx0bmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMobmV0ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM9MTQ2MD1zdGF0aWMgaW50IG1seHN3X3NwX3BvcnRfY3JlYXRlKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsIHUxNiBsb2NhbF9wb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYy0xNTU0LVxcdGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jOjE1NTU6XFx0ZGV2LVxcdTAwM2VyZXF1ZXN0X29wc19sb2NrID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jLTE1NTYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIxNTg9c3RydWN0IG5ldF9kZXZpY2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTc3LVxcdC8qKlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjU3ODpcXHQgKiBAcmVxdWVzdF9vcHNfbG9jazogcmVxdWVzdCB0aGUgY29yZSB0byBydW4gYWxsIEBuZXRkZXZfb3BzIGFuZFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjU3OS1cXHQgKiBAZXRodG9vbF9vcHMgdW5kZXIgdGhlIEBsb2NrLlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjU4MC1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI1ODE6XFx0Ym9vbFxcdFxcdFxcdHJlcXVlc3Rfb3BzX2xvY2s7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTgyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTkwLVxcdCAqIG9wZXJhdGlvbnMuIERyaXZlcnMgbWF5IG9wdC1pbiB0byB0aGlzIGJlaGF2aW9yIGJ5IHNldHRpbmdcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI1OTE6XFx0ICogQHJlcXVlc3Rfb3BzX2xvY2suXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTkyLVxcdCAqXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTI4PXN0YXRpYyBpbmxpbmUgYm9vbCBuZXRkZXZfbmVlZF9vcHNfbG9jayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMjkte1xcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6MzA6XFx0Ym9vbCByZXQgPSBkZXYtXFx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzO1xcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjMxLjg1NjI3ODY4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3Nzg3NDE4MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRHVtbXkgRHJpdmVyJ3MgUmVxdWVzdCBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGR1bW15LmNgIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3Mgc2V0dGluZyBgZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO2AuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGlzIGhhcHBlbmluZy4gSXMgaXQgZm9yIGNvbmN1cnJlbmN5IHByb3RlY3Rpb24/IElzIHRoaXMgYSBzdGFuZGFyZCBwYXR0ZXJuIHdpdGhpbiB0aGUgZHVtbXkgZHJpdmVyPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cbkJ1dCwgYmVmb3JlIEkgZ28gZGVlcGVyIGludG8gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBlbHNlLiBEb2VzIHRoZSBgZHVtbXkuY2AgZHJpdmVyIGRlZmluZSBhbmQgc2V0IHRoZSBmbGFnIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgc29tZXdoZXJlPyBUaGF0IGZsYWcgaXMgcmVhbGx5IGltcG9ydGFudC4gSXQgd291bGQgY2hhbmdlIHRoZSB3YXkgSSB0aGluayBhYm91dCBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgYmVpbmcgcGVyZm9ybWVkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV0aHRvb2wgb3BlcmF0aW9ucyBvZiB0aGUgZHVtbXkgZHJpdmVyIHRvIHNlZS4gSSBiZXR0ZXIgZ28gdGhyb3VnaCBhbmQgY2hlY2sgdGhlIGV0aHRvb2wgb3BlcmF0aW9ucyBhbmQgbWFrZSBzdXJlIHRoYXQgZmxhZyBpc24ndCBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjE4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzI6MzkuNjQzNjk5NDIxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ4MjkzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRodG9vbF9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHVtbXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kdW1teS5jPTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHVtbXlfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2R1bW15LmMtOTgtXFxuZHJpdmVycy9uZXQvZHVtbXkuYzo5OTpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGR1bW15X2V0aHRvb2xfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2R1bW15LmMtMTAwLVxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2R1bW15LmM9MTAzPXN0YXRpYyB2b2lkIGR1bW15X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kdW1teS5jLTEwOC1cXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2ZHVtbXlfbmV0ZGV2X29wcztcXG5kcml2ZXJzL25ldC9kdW1teS5jOjEwOTpcXHRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNmR1bW15X2V0aHRvb2xfb3BzO1xcbmRyaXZlcnMvbmV0L2R1bW15LmMtMTEwLVxcdGRldi1cXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjo0MC4yNDg1MzY2MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTkzODIxMzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEV0aHRvb2wgRHVtbXkgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGR1bW15X2V0aHRvb2xfb3BzYCBzdHJ1Y3R1cmUuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIG5vdCBmbGFnZ2luZyBgb3BfbmVlZHNfcnRubGAsIGFuZCBpdCdzIG1pc3NpbmcgdGhlIGBzZWxmX3Rlc3RgIGltcGxlbWVudGF0aW9uLiBUaGF0J3MgYSBiaXQgb2RkLiBJIGtub3cgc29tZSBldGh0b29sIG9wZXJhdGlvbnMgcmVxdWlyZSB0aGUgcm91dGluZyBuZXRsaW5rIGludGVyZmFjZSwgYW5kIGBzZWxmX3Rlc3RgIGlzIHByZXR0eSBpbXBvcnRhbnQgZm9yIGEgYmFzaWMgZHJpdmVyLlxuXG5Ob3cgSSdtIHdvbmRlcmluZywgd2hpY2ggb3RoZXIgZHJpdmVycyBhY3R1YWxseSAqZG8qIHNldCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgPyBJdCdzIGVhc3kgZW5vdWdoIHRvIGZpbmQgb3V0LiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LCBzbyBsZXQncyBmaXJlIHVwIGEgZ3JlcCBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgc291cmNlIHRyZWUuIExldCdzIGZpbmQgb3V0IHdoZXJlIHRoaXMgZmxhZyBpcyBhY3RpdmVseSB1c2VkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlbnQgYmVoaW5kIHVzaW5nIGl0LCBhbmQgd2hldGhlciBpdHMgYWJzZW5jZSBpbiBgZHVtbXlfZXRodG9vbF9vcHNgIGlzIGEgZGVsaWJlcmF0ZSBkZXNpZ24gY2hvaWNlIG9yIGFuIG92ZXJzaWdodC4gVGhpcyByZXF1aXJlcyBsb29raW5nIGF0IHRoZSBhY3R1YWwgY29kZSB3aGVyZSB0aGUgZmxhZyBpcyB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTUwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzI6NDYuMTg2NzUzMjc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyODUxNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM9NTcyNz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54dF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczNi1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNzpcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNULFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczOC1cXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MjAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjAyOC1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MjAyOTpcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNULFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwMzAtXFx0LmdldF9kcnZpbmZvXFx0XFx0XFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTkyMz1zdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05NDYtI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTktcXHRcXHRCSVQoOClcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDc6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVFxcdFxcdEJJVCg5KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk0OC1cXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oPTEzOD1ldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2Ni1cXHRjYXNlIEVUSFRPT0xfVEVTVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjc6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjQ3LjcyOTYxMjk2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODg1NDY2MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgaW4gTmV0d29yayBEcml2ZXJzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBvbmx5IHRoZSBgYm54dGAgYW5kIGBmYm5pY2AgZHJpdmVycyBzZXQgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgZmxhZy4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBsZXQncyBkaWcgaW50byAqd2h5Ki4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGVzZSBhcmUgdmlydHVhbCBkcml2ZXJzIG9yIHJlcHJlc2VudCBwaHlzaWNhbCBQQ0llIGRldmljZXMsIGFzIHRoYXQgbWlnaHQgYmUga2V5LlxuXG5MZXQncyBzdGFydCB3aXRoIGBibnh0YC4gQSBxdWljayBsb29rIGF0IHRoZSBjb2RlIHN1Z2dlc3RzIHRoYXQgaXQncyBhIFBDSSBkcml2ZXIg4oCTc3BlY2lmaWNhbGx5LCBgYm54dF9wY2lfZHJpdmVyYCBpbiBgYm54dC5jYCDigJMgZm9yIEJyb2FkY29tIE5ldFh0cmVtZS1FIGhhcmR3YXJlLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgc3VzcGljaW9uOyBpdCdzIGEgZHJpdmVyIGZvciAqcmVhbCogaGFyZHdhcmUuXG5cbk5vdywgb24gdG8gYGZibmljYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFsc28gYSBQQ0kgZHJpdmVyLCBgZmJuaWNfcGNpLmNgLCB3aGljaCBzb3VuZHMgbGlrZSBpdCdzIGhhbmRsaW5nIE1ldGEncyBBU0lDIG5ldHdvcmsgY2FyZC4gQWdhaW4sIHRoaXMgcG9pbnRzIHRvd2FyZHMgcGh5c2ljYWwgaGFyZHdhcmUuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IENhbiB0aGVzZSBkcml2ZXJzIGZ1bmN0aW9uIGluIGEgcHVyZWx5IHZpcnR1YWwgZW52aXJvbm1lbnQgbGlrZSBzdGFuZGFyZCBRRU1VIG9yIEdDRSwgd2l0aG91dCB0aGUgc3BlY2lmaWMgQVNJQyBoYXJkd2FyZSB0aGV5J3JlIGRlc2lnbmVkIGZvcj8gSSdtIGRvdWJ0ZnVsLiBMZXQncyBzZWUgaWYgUUVNVSAqZW11bGF0ZXMqIGVpdGhlciBgYm54dGAgb3IgYGZibmljYC5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyBteSBzdXNwaWNpb246IFFFTVUgZW11bGF0ZXMgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgZTEwMDAsIHZpcnRpby1uZXQsIGFuZCBzbyBvbiwgYnV0ICpub3QqIGBibnh0YCBvciBgZmJuaWNgLlxuXG5Pa2F5LCBsZXQgbWUgZ28gb25lIHN0ZXAgZnVydGhlciBhbmQgc2VlIGlmIHRoZXJlJ3MgYW55IGtpbmQgb2Ygc29mdHdhcmUgYnVzIGVtdWxhdGlvbiBvciBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgc29tZXRoaW5nIHRoYXQgbWlnaHQgYXQgbGVhc3QgKnNpbXVsYXRlKiB0aGUgcHJlc2VuY2Ugb2YgYGJueHRgIG9yIGBmYm5pY2AgZGV2aWNlcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gYnkgY2hlY2tpbmcgdGhlIHNvdXJjZSBjb2RlIG9mIGJvdGggYGJueHRgIGFuZCBgZmJuaWNgLiBUaW1lIHRvIGxvb2sgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3JpZXM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2AgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2AgZm9yIGNsdWVzLiBUaGlzIGlzIHdoZXJlIEknbGwgZmluZCBteSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjUxLjYxNTA4MTY3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NzQ1OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE3NzMwPXN0YXRpYyBpbnQgX19pbml0IGJueHRfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTc3MzQtXFx0Ym54dF9kZWJ1Z19pbml0KCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTc3MzU6XFx0ZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2Ym54dF9wY2lfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzczNi1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjUxLjY2MzY2MjUyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTEwMDAxODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGZibmljYCBTaXR1YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBjb250ZXh0IGlzIGxpa2VseSBmaW5hbmNpYWwgb3IgcmVsYXRlZCB0byBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMgXCJMZXQncyBjaGVjayBgZmJuaWNgXCIuIEknbSB0aGlua2luZyBhYm91dCB0aGUgcG9zc2liaWxpdGllcywgdGhhdCBpdCBpcyBsaWtlbHkgYSBuZXR3b3JrIHdpdGggZmluYW5jaWFsIHJlc3BvbnNpYmlsaXRpZXMsIG9yIGlzIHBhcnQgb2YgYSBmaW5hbmNpYWwgc2VydmljZXMgaW5mcmFzdHJ1Y3R1cmUuIE15IGludHVpdGlvbiBpcyB0byBxdWlja2x5IGNoZWNrIHRoZSBwYXJhbWV0ZXJzIHN1cnJvdW5kaW5nIHRoYXQgcGFydGljdWxhciB0ZXJtLCBsaWtlbHkgdG8gdW5kZXJzdGFuZCB0aGUgaXNzdWUgYXQgaGFuZC4gSXQgbWlnaHQgYmUgYSBjb25maWd1cmF0aW9uIGZpbGUsIGEgZGF0YWJhc2UgZW50cnksIG9yIGV2ZW4gYW4gaW50ZXJuYWwgY29kZSBkZXNpZ25hdGlvbi4gSSBuZWVkIHRvIGtub3cgKndoYXQqIGBmYm5pY2AgKmlzKiwgYW5kIHdoZXJlIHRvIGZpbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBtb3N0IG9idmlvdXMgYW5kIHF1aWNrZXN0IGNoZWNrcywgcHJvYmFibHkgbG9va2luZyBhdCByZWNlbnQgbG9ncywgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IHRvb2xzLCBvciBrbm93biBzeXN0ZW1zIGRvY3VtZW50YXRpb24gaWYgYXZhaWxhYmxlLiBJJ20gZXhwZWN0aW5nIHRoaXMgYGZibmljYCB0byBiZSBrZXkgdG8gdGhlIHByb2JsZW0sIHNvIGxldCdzIGdldCBtb3ZpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjo1My43NzM2NjczNThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjkzNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jPTY1ND1zdGF0aWMgaW50IF9faW5pdCBmYm5pY19pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzo2NjA6XFx0ZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2ZmJuaWNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTY2MS1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjUzLjgyMDk2NzA5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MTA2ODY0MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIEVUSFRPT0xfVEVTVCBhbmQgUlROTCBMb2NrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgUENJIGRyaXZlcnMsIGBibnh0YCBhbmQgYGZibmljYCwgd2hpY2ggYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgKEJyb2FkY29tIGFuZCBNZXRhIEFTSUMpLiBNeSB0cmFpbiBvZiB0aG91Z2h0IG5vdyBpcyBkcmF3biB0byBhIGNoYW5nZSBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgIGFuZCBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgLiBJJ3ZlIGdvdCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcy5cblxuQWxyaWdodCwgdGhlIGRpZmYgaW50cm9kdWNlcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIChiaXQgOSkgYW5kIGFkZHMgYG5ldGlmX29wZW4oKWAgYW5kIGBuZXRpZl9jbG9zZSgpYCB0byB0aGUgbGlzdCBvZiBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBwcm90ZWN0ZWQgYnkgdGhlIFJUTkwgKHJvdXRpbmcgdGFibGUgbmV0bGluaykgbG9jay4gTm93LCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGJpZ2dlciBwaWN0dXJlLiBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKClgIGNhbiBiZSBjYWxsZWQgZm9yICphbnkqIGRldmljZSB0aGF0IHJlY2VpdmVzIGFuIGBFVEhUT09MX1RFU1RgIGlvY3RsIGNhbGwgKHZpYSBgU0lPQ0VUSFRPT0xgIHdpdGggYGNtZCA9IEVUSFRPT0xfVEVTVGApLlxuXG5Mb29raW5nIGF0IGBfX2Rldl9ldGh0b29sYCwgdGhhdCdzIHRoZSBmdW5jdGlvbiBoYW5kbGluZyB0aGUgYFNJT0NFVEhUT09MYCBpb2N0bC4gSXQgY2hlY2tzIGBuZWVkX3J0bmxgLCB3aGljaCBpcyBkZXRlcm1pbmVkIGJ5IGAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fCBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZCkgfHwgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGRldiwgZXRoY21kKWAuICBJdCdzIGNyaXRpY2FsIEkgY29uc2lkZXIgd2hhdCB0aGlzIG1lYW5zIGZvciB2YXJpb3VzIG5ldHdvcmsgZGV2aWNlcy5cblxuU3VwcG9zZSBgZGV2YCBpcywgZm9yIGluc3RhbmNlLCBhIGR1bW15IGRldmljZSwgb3IgYSB2ZXRoIHBhaXIsIG9yIGxvb3BiYWNrLiBUaGUgYGR1bW15YCBkZXZpY2UsIHNwZWNpZmljYWxseSwgaGFzIGBkZXYtXHUwMDNlcmVxdWVzdF9vcHNfbG9jayA9IHRydWU7YCEgVGh1cywgYG5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIGB0cnVlYC4gIFRoZXJlZm9yZSwgYCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCBpcyBgZmFsc2VgLiBgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhFVEhUT09MX1RFU1QpYCBpcyBhbHNvIGBmYWxzZWAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBFVEhUT09MX1RFU1QpYCAqd2lsbCogYmUgY2FsbGVkLlxuXG5JbiBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCwgd2Ugc2VlIHRoYXQgd2hlbiBgZXRoY21kYCBpcyBgRVRIVE9PTF9URVNUYCwgaXQgcmV0dXJucyBgb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gRm9yIGEgZHVtbXkgZGV2aWNlLCBgb3BzID0gZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2ZHVtbXlfZXRodG9vbF9vcHNgLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgb3BzLVx1MDAzZW9wX25lZWRzX3J0bmxgIGlzICp1bmluaXRpYWxpemVkKiAobGlrZWx5IHplcm8pLiBTbywgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCgpYCByZXR1cm5zIDAhXG5cblRoaXMgbWVhbnMgYG5lZWRfcnRubGAgaW4gYF9fZGV2X2V0aHRvb2xgIGJlY29tZXMgYGZhbHNlYC4gQ29uc2VxdWVudGx5LCBgZGV2X2V0aHRvb2xfbG9ja2VkKC4uLiwgbmVlZF9ydG5sKWAgaXMgY2FsbGVkIHdpdGggYG5lZWRfcnRubGAgYmVpbmcgZmFsc2UuIEkgbm93IG5lZWQgdG8gdmVyaWZ5IHdoYXQgYGRldl9ldGh0b29sX2xvY2tlZGAgZG9lcyB3aGVuIGBFVEhUT09MX1RFU1RgIGlzIHRoZSBgZXRoY21kYCBhbmQgYG5lZWRfcnRubGAgaXMgYGZhbHNlYC4gSSBuZWVkIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGggdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGNvbmRpdGlvbmFsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6MDAuOTI3ODM0NjQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMDA6XFx0XFx0Y2FzZSBFVEhUT09MX0dTVFJJTkdTOlxcbjMzMDE6XFx0XFx0Y2FzZSBFVEhUT09MX0dTVEFUUzpcXG4zMzAyOlxcdFxcdGNhc2UgRVRIVE9PTF9HUEhZU1RBVFM6XFxuMzMwMzpcXHRcXHRjYXNlIEVUSFRPT0xfR1RTTzpcXG4zMzA0OlxcdFxcdGNhc2UgRVRIVE9PTF9HUEVSTUFERFI6XFxuMzMwNTpcXHRcXHRjYXNlIEVUSFRPT0xfR1VGTzpcXG4zMzA2OlxcdFxcdGNhc2UgRVRIVE9PTF9HR1NPOlxcbjMzMDc6XFx0XFx0Y2FzZSBFVEhUT09MX0dHUk86XFxuMzMwODpcXHRcXHRjYXNlIEVUSFRPT0xfR0ZMQUdTOlxcbjMzMDk6XFx0XFx0Y2FzZSBFVEhUT09MX0dQRkxBR1M6XFxuMzMxMDpcXHRcXHRjYXNlIEVUSFRPT0xfR1JYRkg6XFxuMzMxMTpcXHRcXHRjYXNlIEVUSFRPT0xfR1JYUklOR1M6XFxuMzMxMjpcXHRcXHRjYXNlIEVUSFRPT0xfR1JYQ0xTUkxDTlQ6XFxuMzMxMzpcXHRcXHRjYXNlIEVUSFRPT0xfR1JYQ0xTUlVMRTpcXG4zMzE0OlxcdFxcdGNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDpcXG4zMzE1OlxcdFxcdGNhc2UgRVRIVE9PTF9HUlhGSElORElSOlxcbjMzMTY6XFx0XFx0Y2FzZSBFVEhUT09MX0dSU1NIOlxcbjMzMTc6XFx0XFx0Y2FzZSBFVEhUT09MX0dGRUFUVVJFUzpcXG4zMzE4OlxcdFxcdGNhc2UgRVRIVE9PTF9HQ0hBTk5FTFM6XFxuMzMxOTpcXHRcXHRjYXNlIEVUSFRPT0xfR0VUX1RTX0lORk86XFxuMzMyMDpcXHRcXHRjYXNlIEVUSFRPT0xfR0VFRTpcXG4zMzIxOlxcdFxcdGNhc2UgRVRIVE9PTF9HVFVOQUJMRTpcXG4zMzIyOlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlfR1RVTkFCTEU6XFxuMzMyMzpcXHRcXHRjYXNlIEVUSFRPT0xfR0xJTktTRVRUSU5HUzpcXG4zMzI0OlxcdFxcdGNhc2UgRVRIVE9PTF9HRkVDUEFSQU06XFxuMzMyNTpcXHRcXHRcXHRicmVhaztcXG4zMzI2OlxcdFxcdGRlZmF1bHQ6XFxuMzMyNzpcXHRcXHRcXHRpZiAoIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcXG4zMzI4OlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMzMyOTpcXHRcXHR9XFxuMzMzMDpcXHRcXG4zMzMxOlxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcXG4zMzMyOlxcdFxcbjMzMzM6XFx0XFx0aWYgKGRldi1cXHUwMDNlZGV2LnBhcmVudClcXG4zMzM0OlxcdFxcdFxcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2LVxcdTAwM2VkZXYucGFyZW50KTtcXG4zMzM1OlxcdFxcbjMzMzY6XFx0XFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSB7XFxuMzMzNzpcXHRcXHRcXHRyYyA9IC1FTk9ERVY7XFxuMzMzODpcXHRcXHRcXHRnb3RvIG91dDtcXG4zMzM5OlxcdFxcdH1cXG4zMzQwOlxcdFxcbjMzNDE6XFx0XFx0aWYgKGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWJlZ2luKSB7XFxuMzM0MjpcXHRcXHRcXHRyYyA9IGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWJlZ2luKGRldik7XFxuMzM0MzpcXHRcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbjMzNDQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMzM0NTpcXHRcXHR9XFxuMzM0NjpcXHRcXHRvbGRfZmVhdHVyZXMgPSBkZXYtXFx1MDAzZWZlYXR1cmVzO1xcbjMzNDc6XFx0XFxuMzM0ODpcXHRcXHRzd2l0Y2ggKGV0aGNtZCkge1xcbjMzNDk6XFx0XFx0Y2FzZSBFVEhUT09MX0dTRVQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjAwLjkyNzk5MDIwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjkwNTcwOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgRVRIVE9PTF9URVNUIExvZ2ljKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYEVUSFRPT0xfVEVTVGAgaXMgYWN0dWFsbHkgKnByb2Nlc3NlZCogd2l0aGluIHRoZSBgZGV2X2V0aHRvb2xfbG9ja2VkYCBmdW5jdGlvbi4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgZXRodG9vbCBwdXp6bGUsIGFuZCBrbm93aW5nIGl0cyBleGVjdXRpb24gcGF0aCBpcyBmdW5kYW1lbnRhbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGZsb3cgaGVyZSBhbmQgZmluZCBleGFjdGx5IGhvdyB0aGlzIHNwZWNpZmljIGNvbW1hbmQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGRyaXZlcuKAmXMgb3ZlcmFsbCBldGh0b29sIGltcGxlbWVudGF0aW9uLiBMZXQncyBzdGFydCB3aXRoIHRoZSBjb2Rl4oCmIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciByb3V0aW5lcyBpdCBpbnRlcmZhY2VzIHdpdGggZm9yIGhhbmRsaW5nIHRoaXMgdGVzdCBmdW5jdGlvbi4gS25vd2luZyB0aGUgZXhhY3QgbG9jYXRpb24gaXMgaW1wb3J0YW50IGZvciBhbmFseXppbmcgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjAyLjYxODU2MzE1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxODY1MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FzZSBFVEhUT09MX1RFU1Q6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM0MTItXFx0XFx0YnJlYWs7XFxubmV0L2V0aHRvb2wvaW9jdGwuYzozNDEzOlxcdGNhc2UgRVRIVE9PTF9URVNUOlxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzQxNC1cXHRcXHRyYyA9IGV0aHRvb2xfc2VsZl90ZXN0KGRldiwgdXNlcmFkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzowMi42NjU3NTQ3OTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUwNzEwOTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoaXMgZnVuY3Rpb24gY2FsbDogYGV0aHRvb2xfc2VsZl90ZXN0KGRldiwgdXNlcmFkZHIpYC4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIFwibmV0d29yayBpbnRlcmZhY2Ugc2VsZi10ZXN0XCIgdG8gbWUsIGFuZCBteSBicmFpbiBpcyBhbHJlYWR5IHNlYXJjaGluZyBmb3IgdGhlIGltcGxlbWVudGF0aW9uLiBHaXZlbiB0aGF0IGBldGh0b29sYCBpcyBpbiB0aGUgbmFtZSwgbXkgZ3V0IHNheXMgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgYGV0aHRvb2xgIHV0aWxpdHkuIFNvLCBJIG5lZWQgdG8gZmluZCB0aGUgc291cmNlIGZvciBgZXRodG9vbF9zZWxmX3Rlc3RgLiBDb25zaWRlcmluZyB0aGUga2VybmVsIHN0cnVjdHVyZSwgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBuZXRgIHN1YnN5c3RlbSwgc28gSSdsbCBjaGVjayBgbmV0L2V0aHRvb2wvaW9jdGwuY2AgdG8gdHJhY2UgdGhlIGNhbGwuIEhvcGVmdWxseSwgSSBjYW4gZmluZCB0aGUgZGVmaW5pdGlvbiB0aGVyZSBhbmQgdW5kZXJzdGFuZCB0aGUgcGFyYW1ldGVycyBgZGV2YCBhbmQgYHVzZXJhZGRyYC4gTGV0J3Mgc2VlIGlmIHRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzowNS4xNzI4NjYwNTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjkxOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xfc2VsZl90ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuYz0yMzMzPXN0YXRpYyBpbnQgZXRodG9vbF9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTIzNDktXFxubmV0L2V0aHRvb2wvaW9jdGwuYzoyMzUwOnN0YXRpYyBpbnQgZXRodG9vbF9zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyKVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjM1MS17XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTMyNzI9ZGV2X2V0aHRvb2xfbG9ja2VkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzQxMy1cXHRjYXNlIEVUSFRPT0xfVEVTVDpcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM0MTQ6XFx0XFx0cmMgPSBldGh0b29sX3NlbGZfdGVzdChkZXYsIHVzZXJhZGRyKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM0MTUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjA1LjI1MDU2MzgyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDIyNDM5NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgaW5zdHJ1Y3Rpb25zLCBhcyB0aG91Z2ggdGhleSBhcmUgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBldGh0b29sIFNlbGYtVGVzdCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgaW50byB0aGUgZ3V0cyBvZiBgZXRodG9vbGAuIExldCdzIHplcm8gaW4gb24gYGV0aHRvb2xfc2VsZl90ZXN0YCBsb2NhdGVkIGluIGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIHNlbGYtdGVzdCBmdW5jdGlvbmFsaXR5IHJlc2lkZXMsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nLiBXaGF0IGtpbmQgb2YgdGVzdCB2ZWN0b3JzIGRvZXMgaXQgdXNlPyBJcyB0aGVyZSBhIGNvbXByZWhlbnNpdmUgc3RyYXRlZ3kgZm9yIGNvdmVyaW5nIGRpZmZlcmVudCBQSFkgbW9kZXMgYW5kIGxpbmsgc3BlZWRzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2VsbCBpdCBhZGhlcmVzIHRvIHRoZSBsYXRlc3Qgc3RhbmRhcmRzIGFuZCBiZXN0IHByYWN0aWNlcyBmb3IgbmV0d29yayBpbnRlcmZhY2UgdGVzdGluZy4gTGV0J3Mgc2VlIGhvdyB0aGlzIGlzIGFyY2hpdGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDk3MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjA3LjI3MzAwNjYxNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzUwOlxcdHN0YXRpYyBpbnQgZXRodG9vbF9zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyKVxcbjIzNTE6XFx0e1xcbjIzNTI6XFx0XFx0c3RydWN0IGV0aHRvb2xfdGVzdCB0ZXN0O1xcbjIzNTM6XFx0XFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtXFx1MDAzZWV0aHRvb2xfb3BzO1xcbjIzNTQ6XFx0XFx0dTY0ICpkYXRhO1xcbjIzNTU6XFx0XFx0aW50IHJldCwgdGVzdF9sZW47XFxuMjM1NjpcXHRcXG4yMzU3OlxcdFxcdGlmICghb3BzLVxcdTAwM2VzZWxmX3Rlc3QgfHwgIW9wcy1cXHUwMDNlZ2V0X3NzZXRfY291bnQpXFxuMjM1ODpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMjM1OTpcXHRcXG4yMzYwOlxcdFxcdHRlc3RfbGVuID0gb3BzLVxcdTAwM2VnZXRfc3NldF9jb3VudChkZXYsIEVUSF9TU19URVNUKTtcXG4yMzYxOlxcdFxcdGlmICh0ZXN0X2xlbiBcXHUwMDNjIDApXFxuMjM2MjpcXHRcXHRcXHRyZXR1cm4gdGVzdF9sZW47XFxuMjM2MzpcXHRcXHRXQVJOX09OKHRlc3RfbGVuID09IDApO1xcbjIzNjQ6XFx0XFxuMjM2NTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnRlc3QsIHVzZXJhZGRyLCBzaXplb2YodGVzdCkpKVxcbjIzNjY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjM2NzpcXHRcXG4yMzY4OlxcdFxcdHRlc3QubGVuID0gdGVzdF9sZW47XFxuMjM2OTpcXHRcXHRkYXRhID0ga2NhbGxvYyh0ZXN0X2xlbiwgc2l6ZW9mKHU2NCksIEdGUF9VU0VSKTtcXG4yMzcwOlxcdFxcdGlmICghZGF0YSlcXG4yMzcxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIzNzI6XFx0XFxuMjM3MzpcXHRcXHRuZXRpZl90ZXN0aW5nX29uKGRldik7XFxuMjM3NDpcXHRcXHRvcHMtXFx1MDAzZXNlbGZfdGVzdChkZXYsIFxcdTAwMjZ0ZXN0LCBkYXRhKTtcXG4yMzc1OlxcdFxcdG5ldGlmX3Rlc3Rpbmdfb2ZmKGRldik7XFxuMjM3NjpcXHRcXG4yMzc3OlxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjM3ODpcXHRcXHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBcXHUwMDI2dGVzdCwgc2l6ZW9mKHRlc3QpKSlcXG4yMzc5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIzODA6XFx0XFx0dXNlcmFkZHIgKz0gc2l6ZW9mKHRlc3QpO1xcbjIzODE6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgZGF0YSwgYXJyYXlfc2l6ZSh0ZXN0Lmxlbiwgc2l6ZW9mKHU2NCkpKSlcXG4yMzgyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIzODM6XFx0XFx0cmV0ID0gMDtcXG4yMzg0OlxcdFxcbjIzODU6XFx0IG91dDpcXG4yMzg2OlxcdFxcdGtmcmVlKGRhdGEpO1xcbjIzODc6XFx0XFx0cmV0dXJuIHJldDtcXG4yMzg4OlxcdH1cXG4yMzg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzowNy4yNzMyNDE2NDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA0MDU1NTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBEZXRlY3RpdmUncyBNaW5kc2V0KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZCEgQmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gdGhpcyBjb2RlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGluZWFnZS4gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGNvbW1pdCBkb2VzIHRoaXMgYmVsb25nIHRvPyBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIHBhdGNoIHNlcmllcz8gTXkgdXN1YWwgZ28tdG8gd291bGQgYmUgYGdpdCBsb2dgLCBidXQgaXQgbG9va3MgbGlrZSBJIGRvbid0IGhhdmUgdGhhdCB0b29sIGF2YWlsYWJsZS4gSG1tLCBubyBwcm9ibGVtLiBMZXQncyBzZWUgaWYgSSBjYW4gcmVjb25zdHJ1Y3QgdGhlIGluZm9ybWF0aW9uLiBJIGNhbid0IGRpcmVjdGx5IGNoZWNrIHRoZSBoaXN0b3J5IHVzaW5nIGBnaXQgbG9nYC4gSWYgSSBkaWQsIEkgd291bGQgdXNlIGBnaXQgbG9nIC0xYCwgYnV0IHRoYXQncyBub3QgcG9zc2libGUgaGVyZS5cblxuUmlnaHQsIHNvLCBJIGNhbid0IHVzZSBgZ2l0IGxvZ2AgZGlyZWN0bHksIGJ1dCBsZXQncyBzZWUgaWYgdGhlcmUgaXMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjb21taXQgYXBwbGllZCB0aGUgcGF0Y2guXG5JIGNhbiBhdHRlbXB0IHRvIHZpZXcgdGhlIGNoYW5nZXMgY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIGNvbW1pdC4gSSB3b3VsZCB0eXBpY2FsbHkgcnVuIHNvbWV0aGluZyBsaWtlIGBnaXQgZGlmZiBIRUFEfjFgLCBidXQgd2l0aG91dCB0aGUgR2l0IENMSSwgdGhhdCdzIG9mZiB0aGUgdGFibGUuXG5cbkFscmlnaHQsIHRoaW5rLCB0aGluay4uLiBJICpjYW4qIHByb2JhYmx5IGdsZWFuIHNvbWUgaW5mb3JtYXRpb24gZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UgaXRzZWxmIGlmIEkgY2FuIGdldCB0byBpdC4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZW50IG9mIHRoZSBwYXRjaCBzZXJpZXMgd2lsbCBiZSBoZWxwZnVsLiBOb3csIEkgc2hvdWxkIHNoaWZ0IG15IGZvY3VzIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gY2hhbmdlZCBieSB0aGlzIHBhdGNoLlxuXG5SaWdodCwgbGV0J3MgY2hhbmdlIGdlYXJzLiBBIHByb21pc2luZyBsZWFkIGlzIHRvIHNlZSB3aGF0IGRyaXZlcnMgbWlnaHQgYmUgaW1wYWN0ZWQgYnkgdGhpcy4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoLiBJJ2xsIGdyZXAgZm9yIGAuc2VsZl90ZXN0YCB0byBzZWUgd2hpY2ggZHJpdmVycyBtaWdodCBiZSB0b3VjaGluZyB0aGF0IGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UgYW5kIHRoZSBhcmVhIGl0IGFmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODE3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6MTAuMzEzNzk5NjQzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY4NzY0MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuc2VsZl90ZXN0XFxcXHMqPVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jPTE0OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBwY25ldDMyX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3BjbmV0MzIuYy0xNTAxLVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gcGNuZXQzMl9nZXRfc3RyaW5ncyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jOjE1MDI6XFx0LnNlbGZfdGVzdFxcdFxcdD0gcGNuZXQzMl9ldGh0b29sX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3BjbmV0MzIuYy0xNTAzLVxcdC5zZXRfcGh5c19pZFxcdFxcdD0gcGNuZXQzMl9zZXRfcGh5c19pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZXRodG9vbC5jPTczNz1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHhnYmVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWV0aHRvb2wuYy03NjQtXFx0LnNldF9jaGFubmVscyA9IHhnYmVfc2V0X2NoYW5uZWxzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZXRodG9vbC5jOjc2NTpcXHQuc2VsZl90ZXN0ID0geGdiZV9zZWxmdGVzdF9ydW4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1ldGh0b29sLmMtNzY2LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTU0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGFnNzF4eF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNTUzLVxcdC5nZXRfc3NldF9jb3VudFxcdFxcdFxcdD0gYWc3MXh4X2V0aHRvb2xfZ2V0X3NzZXRfY291bnQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzo1NTQ6XFx0LnNlbGZfdGVzdFxcdFxcdFxcdD0gbmV0X3NlbGZ0ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNTU1LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyLmM9NzgyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJueDJfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyLmMtNzg0NC1cXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IGJueDJfc2V0X3BhdXNlcGFyYW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jOjc4NDU6XFx0LnNlbGZfdGVzdFxcdFxcdD0gYm54Ml9zZWxmX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jLTc4NDYtXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBibngyX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jPTM2NDA9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibngyeF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNjYyLVxcdC5zZXRfcGF1c2VwYXJhbVxcdFxcdD0gYm54Mnhfc2V0X3BhdXNlcGFyYW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jOjM2NjM6XFx0LnNlbGZfdGVzdFxcdFxcdD0gYm54Mnhfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNjY0LVxcdC5nZXRfc3NldF9jb3VudFxcdFxcdD0gYm54MnhfZ2V0X3NzZXRfY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jPTU3Mjc9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJueHRfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jLTU3OTktXFx0LnNldF9waHlzX2lkXFx0XFx0PSBibnh0X3NldF9waHlzX2lkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTgwMDpcXHQuc2VsZl90ZXN0XFx0XFx0PSBibnh0X3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jLTU4MDEtXFx0LmdldF90c19pbmZvXFx0XFx0PSBibnh0X2dldF90c19pbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM9MTQyMjk9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0ZzNfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNDI1MC1cXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IHRnM19zZXRfcGF1c2VwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNDI1MTpcXHQuc2VsZl90ZXN0XFx0XFx0PSB0ZzNfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE0MjUyLVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gdGczX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9ldGh0b29sLmM9MjE3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGN4Z2JfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2V0aHRvb2wuYy0yMjExLVxcdC5nZXRfcnhmaF9maWVsZHMgICA9IGN4Z2I0X2dldF9yeGZoX2ZpZWxkcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2V0aHRvb2wuYzoyMjEyOlxcdC5zZWxmX3Rlc3RcXHQgICA9IGN4Z2I0X3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2V0aHRvb2wuYy0yMjEzLVxcdC5mbGFzaF9kZXZpY2UgICAgICA9IHNldF9mbGFzaCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmM9MTQwOT1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfZXRodG9vbC5jLTE0MzMtXFx0LmZsYXNoX2RldmljZSA9IGJlX2RvX2ZsYXNoLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmM6MTQzNDpcXHQuc2VsZl90ZXN0ID0gYmVfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmMtMTQzNS1cXHQuZ2V0X3J4X3JpbmdfY291bnQgPSBiZV9nZXRfcnhfcmluZ19jb3VudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYz00NjE9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHRzbmVwX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfZXRodG9vbC5jLTQ2OS1cXHQuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYzo0NzA6XFx0LnNlbGZfdGVzdCA9IHRzbmVwX2V0aHRvb2xfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYy00NzEtXFx0LmdldF9zdHJpbmdzID0gdHNuZXBfZXRodG9vbF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTM3ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBmZWNfZW5ldF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTM4MTAtXFx0LnNldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjM4MTE6XFx0LnNlbGZfdGVzdFxcdFxcdD0gbmV0X3NlbGZ0ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTM4MTItfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2V0aHRvb2wuYz0xMjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaG5zX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZXRodG9vbC5jLTEyNTMtXFx0LmdldF9jaGFubmVscyA9IGhuc19nZXRfY2hhbm5lbHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZXRodG9vbC5jOjEyNTQ6XFx0LnNlbGZfdGVzdCA9IGhuc19uaWNfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2V0aHRvb2wuYy0xMjU1LVxcdC5nZXRfc3RyaW5ncyA9IGhuc19nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jPTIxOTA9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBobnMzX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmMtMjE5My1cXHQuY2FwX2xpbmtfbGFuZXNfc3VwcG9ydGVkID0gdHJ1ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYzoyMTk0OlxcdC5zZWxmX3Rlc3QgPSBobnMzX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYy0yMTk1LVxcdC5nZXRfZHJ2aW5mbyA9IGhuczNfZ2V0X2RydmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvaGluaWNfZXRodG9vbC5jPTE3Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBoaW5pY19ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9oaW5pY19ldGh0b29sLmMtMTc1OS1cXHQuZ2V0X3N0cmluZ3MgPSBoaW5pY19nZXRfc3RyaW5ncyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvaGluaWNfZXRodG9vbC5jOjE3NjA6XFx0LnNlbGZfdGVzdCA9IGhpbmljX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvaGluaWNfZXRodG9vbC5jLTE3NjEtXFx0LnNldF9waHlzX2lkID0gaGluaWNfc2V0X3BoeXNfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjczNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc1MC1cXHQuc2V0X3JpbmdwYXJhbVxcdFxcdD0gZTEwMF9zZXRfcmluZ3BhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNzUxOlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGUxMDBfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzUyLVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gZTEwMF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX2V0aHRvb2wuYz0xODY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMDBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9ldGh0b29sLmMtMTg4MS1cXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IGUxMDAwX3NldF9wYXVzZXBhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX2V0aHRvb2wuYzoxODgyOlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGUxMDAwX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9ldGh0b29sLmMtMTg4My1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGUxMDAwX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL2V0aHRvb2wuYz0yMzYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMDBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvZXRodG9vbC5jLTIzNzgtXFx0LnNldF9wYXVzZXBhcmFtXFx0XFx0PSBlMTAwMF9zZXRfcGF1c2VwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvZXRodG9vbC5jOjIzNzk6XFx0LnNlbGZfdGVzdFxcdFxcdD0gZTEwMDBfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMjM4MC1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGUxMDAwX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfZXRodG9vbC5jPTExMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBmbTEwa19ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2V0aHRvb2wuYy0xMTU0LVxcdC5nZXRfcmVnc19sZW4gICAgICAgICAgID0gZm0xMGtfZ2V0X3JlZ3NfbGVuLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2V0aHRvb2wuYzoxMTU1OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGZtMTBrX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19ldGh0b29sLmMtMTE1Ni1cXHQuZ2V0X3ByaXZfZmxhZ3NcXHRcXHQ9IGZtMTBrX2dldF9wcml2X2ZsYWdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYz01Nzg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaTQwZV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMtNTgxNC1cXHQuZ2V0X3J4X3JpbmdfY291bnRcXHQ9IGk0MGVfZ2V0X3J4X3JpbmdfY291bnQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYzo1ODE1OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGk0MGVfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMtNTgxNi1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGk0MGVfZ2V0X3N0cmluZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYz00ODI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWNlX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMtNDg0Ny1cXHQuc2V0X21zZ2xldmVsXFx0XFx0PSBpY2Vfc2V0X21zZ2xldmVsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jOjQ4NDg6XFx0LnNlbGZfdGVzdFxcdFxcdD0gaWNlX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYy00ODQ5LVxcdC5nZXRfbGlua1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jPTM0ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpZ2JfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0zNTAwLVxcdC5zZXRfcGF1c2VwYXJhbVxcdFxcdD0gaWdiX3NldF9wYXVzZXBhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jOjM1MDE6XFx0LnNlbGZfdGVzdFxcdFxcdD0gaWdiX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0zNTAyLVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gaWdiX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvZXRodG9vbC5jPTQzND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlnYnZmX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvZXRodG9vbC5jLTQ1MS1cXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IGlnYnZmX3NldF9wYXVzZXBhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL2V0aHRvb2wuYzo0NTI6XFx0LnNlbGZfdGVzdFxcdFxcdD0gaWdidmZfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL2V0aHRvb2wuYy00NTMtXFx0LmdldF9zc2V0X2NvdW50XFx0XFx0PSBpZ2J2Zl9nZXRfc3NldF9jb3VudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfZXRodG9vbC5jPTIyNjI9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpZ2NfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX2V0aHRvb2wuYy0yMzAyLVxcdC5zZXRfbGlua19rc2V0dGluZ3NcXHQ9IGlnY19ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX2V0aHRvb2wuYzoyMzAzOlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGlnY19ldGh0b29sX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX2V0aHRvb2wuYy0yMzA0LVxcdC5nZXRfbW1cXHRcXHRcXHQ9IGlnY19ldGh0b29sX2dldF9tbSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYz0zODYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaXhnYmVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmMtMzg4MC1cXHQuc2V0X21zZ2xldmVsICAgICAgICAgICA9IGl4Z2JlX3NldF9tc2dsZXZlbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmM6Mzg4MTpcXHQuc2VsZl90ZXN0ICAgICAgICAgICAgICA9IGl4Z2JlX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmMtMzg4Mi1cXHQuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IGl4Z2JlX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jPTM5MTA9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpeGdiZV9ldGh0b29sX29wc19lNjEwID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jLTM5MjktXFx0LnNldF9tc2dsZXZlbCAgICAgICAgICAgPSBpeGdiZV9zZXRfbXNnbGV2ZWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jOjM5MzA6XFx0LnNlbGZfdGVzdCAgICAgICAgICAgICAgPSBpeGdiZV9kaWFnX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jLTM5MzEtXFx0LmdldF9zdHJpbmdzICAgICAgICAgICAgPSBpeGdiZV9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTk2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JldmZfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzUtXFx0LnNldF9tc2dsZXZlbFxcdFxcdD0gaXhnYmV2Zl9zZXRfbXNnbGV2ZWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTc2OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGl4Z2JldmZfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk3Ny1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGl4Z2JldmZfZ2V0X3NzZXRfY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2V0aHRvb2wuYz0yMTM0PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg0X2VuX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9ldGh0b29sLmMtMjE0NS1cXHQuZ2V0X2V0aHRvb2xfc3RhdHMgPSBtbHg0X2VuX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fZXRodG9vbC5jOjIxNDY6XFx0LnNlbGZfdGVzdCA9IG1seDRfZW5fc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fZXRodG9vbC5jLTIxNDctXFx0LnNldF9waHlzX2lkID0gbWx4NF9lbl9zZXRfcGh5c19pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM9MjcxOD1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3NzctXFx0LnNldF9wcml2X2ZsYWdzICAgID0gbWx4NWVfc2V0X3ByaXZfZmxhZ3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYzoyNzc4OlxcdC5zZWxmX3Rlc3QgICAgICAgICA9IG1seDVlX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3NzktXFx0LmdldF9mZWNfc3RhdHMgICAgID0gbWx4NWVfZ2V0X2ZlY19zdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jPTIwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBmYm5pY19ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwNDEtXFx0LnNldF9wYXVzZXBhcmFtXFx0XFx0XFx0PSBmYm5pY19waHlsaW5rX3NldF9wYXVzZXBhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwNDI6XFx0LnNlbGZfdGVzdFxcdFxcdFxcdD0gZmJuaWNfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwNDMtXFx0LmdldF9zdHJpbmdzXFx0XFx0XFx0PSBmYm5pY19nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmM9MjUwND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5mcF9uZXRfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jLTI1MTItXFx0LnNldF9yaW5ncGFyYW1cXHRcXHQ9IG5mcF9uZXRfc2V0X3JpbmdwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jOjI1MTM6XFx0LnNlbGZfdGVzdFxcdFxcdD0gbmZwX25ldF9zZWxmX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2V0aHRvb2wuYy0yNTE0LVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gbmZwX25ldF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmM9MjU1MD1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmZwX3BvcnRfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jLTI1NTUtXFx0LmdldF9ldGh0b29sX3N0YXRzXFx0PSBuZnBfcG9ydF9nZXRfc3RhdHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2V0aHRvb2wuYzoyNTU2OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IG5mcF9uZXRfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmMtMjU1Ny1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IG5mcF9wb3J0X2dldF9zc2V0X2NvdW50LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnZpZGlhL2ZvcmNlZGV0aC5jPTUzNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtNTM1NS1cXHQuZ2V0X3NzZXRfY291bnQgPSBudl9nZXRfc3NldF9jb3VudCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM6NTM1NjpcXHQuc2VsZl90ZXN0ID0gbnZfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9mb3JjZWRldGguYy01MzU3LVxcdC5nZXRfdHNfaW5mbyA9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jPTkxOT1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0eGVuX25pY19ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMtOTMzLVxcdC5zZXRfd29sID0gbmV0eGVuX25pY19zZXRfd29sLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmM6OTM0OlxcdC5zZWxmX3Rlc3QgPSBuZXR4ZW5fbmljX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jLTkzNS1cXHQuZ2V0X3N0cmluZ3MgPSBuZXR4ZW5fbmljX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZGUvcWVkZV9ldGh0b29sLmM9MjI2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHFlZGVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkZS9xZWRlX2V0aHRvb2wuYy0yMzA1LVxcdC5zZXRfY2hhbm5lbHNcXHRcXHRcXHQ9IHFlZGVfc2V0X2NoYW5uZWxzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWRlL3FlZGVfZXRodG9vbC5jOjIzMDY6XFx0LnNlbGZfdGVzdFxcdFxcdFxcdD0gcWVkZV9zZWxmX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZGUvcWVkZV9ldGh0b29sLmMtMjMwNy1cXHQuZ2V0X21vZHVsZV9pbmZvXFx0XFx0PSBxZWRlX2dldF9tb2R1bGVfaW5mbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYz0xODIzPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBxbGNuaWNfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19ldGh0b29sLmMtMTgzOS1cXHQuc2V0X3dvbCA9IHFsY25pY19zZXRfd29sLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYzoxODQwOlxcdC5zZWxmX3Rlc3QgPSBxbGNuaWNfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYy0xODQxLVxcdC5nZXRfc3RyaW5ncyA9IHFsY25pY19nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmM9Mzk9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVmMTAwX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAwX2V0aHRvb2wuYy00NS1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGVmeF9ldGh0b29sX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmM6NDY6XFx0LnNlbGZfdGVzdFxcdFxcdD0gZWZ4X2V0aHRvb2xfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmMtNDctXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBlZnhfZXRodG9vbF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9ldGh0b29sLmM9MjQwPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlZnhfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZXRodG9vbC5jLTI1Ni1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGVmeF9ldGh0b29sX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9ldGh0b29sLmM6MjU3OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGVmeF9ldGh0b29sX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZXRodG9vbC5jLTI1OC1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGVmeF9ldGh0b29sX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9ldGh0b29sLmM9MTMyNz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZWY0X2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9ldGh0b29sLmMtMTM0NC1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGVmNF9ldGh0b29sX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vZXRodG9vbC5jOjEzNDU6XFx0LnNlbGZfdGVzdFxcdFxcdD0gZWY0X2V0aHRvb2xfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vZXRodG9vbC5jLTEzNDYtXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBlZjRfZXRodG9vbF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9ldGh0b29sLmM9MjM4PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlZnhfc2llbmFfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZXRodG9vbC5jLTI1NC1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGVmeF9zaWVuYV9ldGh0b29sX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9ldGh0b29sLmM6MjU1OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGVmeF9zaWVuYV9ldGh0b29sX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZXRodG9vbC5jLTI1Ni1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGVmeF9zaWVuYV9ldGh0b29sX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0xMDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3RtbWFjX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTA4LVxcdC5zZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19zZXRfcGF1c2VwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jOjExMDk6XFx0LnNlbGZfdGVzdCA9IHN0bW1hY19zZWxmdGVzdF9ydW4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTEwLVxcdC5nZXRfZXRodG9vbF9zdGF0cyA9IHN0bW1hY19nZXRfZXRodG9vbF9zdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0zMTI9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheDg4NzcyX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTMyNC1cXHQuc2V0X2xpbmtfa3NldHRpbmdzXFx0PSBwaHlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjMyNTpcXHQuc2VsZl90ZXN0XFx0XFx0PSBuZXRfc2VsZnRlc3QsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTMyNi1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGF4ODg3NzJfZXRodG9vbF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MTkxOD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGxhbjc4eHhfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE5MjgtXFx0LmdldF9zc2V0X2NvdW50ID0gbGFuNzh4eF9nZXRfc3NldF9jb3VudCxcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjE5Mjk6XFx0LnNlbGZfdGVzdFxcdD0gbmV0X3NlbGZ0ZXN0LFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTkzMC1cXHQuZ2V0X3N0cmluZ3NcXHQ9IGxhbjc4eHhfZ2V0X3N0cmluZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz04MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzbXNjOTV4eF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTg0OC1cXHQuZ2V0X3RzX2luZm9cXHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6ODQ5OlxcdC5zZWxmX3Rlc3RcXHQ9IG5ldF9zZWxmdGVzdCxcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy04NTAtXFx0LmdldF9zdHJpbmdzXFx0PSBzbXNjOTV4eF9ldGh0b29sX2dldF9zdHJpbmdzLFxcbi0tXFxubmV0L2RzYS91c2VyLmM9MjQ5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGRzYV91c2VyX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxubmV0L2RzYS91c2VyLmMtMjUyMC1cXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGRzYV91c2VyX2dldF90c19pbmZvLFxcbm5ldC9kc2EvdXNlci5jOjI1MjE6XFx0LnNlbGZfdGVzdFxcdFxcdD0gZHNhX3VzZXJfbmV0X3NlbGZ0ZXN0LFxcbm5ldC9kc2EvdXNlci5jLTI1MjItXFx0LmdldF9tbVxcdFxcdFxcdD0gZHNhX3VzZXJfZ2V0X21tLFxcbi0tXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9wYXJhbGxlbC1wZXJmLnB5PTI0PWNsYXNzIFZlcmJvc2l0eSgpOlxcbi0tXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9wYXJhbGxlbC1wZXJmLnB5LTI5LVxcdFxcdHNlbGYuZGVidWcgICAgID0gZGVidWdcXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3BhcmFsbGVsLXBlcmYucHk6MzA6XFx0XFx0c2VsZi5zZWxmX3Rlc3QgPSBUcnVlXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9wYXJhbGxlbC1wZXJmLnB5LTMxLVxcdFxcdGlmIHNlbGYuZGVidWc6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjEyLjA4MjU3MjI0MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTA1NjE2MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgRmxhZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBmbGFnLCBhbmQgSSdtIHdvbmRlcmluZyB3aHkgaXQncyBldmVuIHRoZXJlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBiYXNpY3MsIEknbGwgY2hlY2sgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZDogYWhhLCBpdCdzIGp1c3QgYSBiaXQgZmxhZywgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBOb3csIGxldCdzIGxvb2sgYXQgd2hlcmUgdGhpcyBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gSSBzZWUgdGhlIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdG8gYmUgY2hlY2tpbmcgaWYgYSBwYXJ0aWN1bGFyIGBldGhjbWRgIG5lZWRzIHRoZSBSVE5MIChSb3V0aW5nIFRhYmxlIE5ldGxpbmspIGxvY2suIEl0IG1ha2VzIHNlbnNlIHRoYXQgdGVzdGluZyBtaWdodCBuZWVkIGl0LCB3aGljaCBpcyBjb25maXJtZWQgaGVyZSwgZm9yIGBFVEhUT09MX1RFU1RgLiBCdXQgc3RpbGwsIEkgbmVlZCBzb21lIG1vcmUgY29udGV4dC4gSSdtIG5vdCBmYW1pbGlhciB3aXRoIHdoeSB0aGlzIGZsYWcgd2FzIGV4cGxpY2l0bHkgYWRkZWQsIGFuZCBpZiBpdCdzIG5ldywgb3IgYW4gb2xkIGNvbmNlcHQgdGhhdCBnb3QgZXhwbGljaXRseSBkb2N1bWVudGVkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGdpdCBoaXN0b3J5LCBvciBhdCBsZWFzdCBncmVwIGZvciBvdGhlciB1c2VzIG9mIGBFVEhUT09MX09QX05FRURTX1JUTkxfYCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gVGhlIG5hbWluZyBjb252ZW50aW9uIGhpbnRzIHRoZXJlIG1pZ2h0IGJlIG90aGVyIHJlbGF0ZWQgZmxhZ3MsIGFuZCBzZWVpbmcgdGhvc2Ugb3RoZXIgb3B0aW9ucyB3b3VsZCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHRzIGludG8gdGhlIGRlc2lnbiBkZWNpc2lvbnMgaGVyZS4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIGNoZWNrIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjIxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjE0Ljk4ODE5MDk4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1Mjc1MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVUSFRPT0xfT1BfTkVFRFNfUlROTF9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldi1mZWF0dXJlcy5yc3Q9ODA9ZXRodG9vbCBjYWxsYmFja3MgdGhhdCBtYXkgZW5kIHVwIGludm9raW5nIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoKSBtdXN0XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldi1mZWF0dXJlcy5yc3Q6ODE6b3B0IGJhY2sgaW50byBydG5sX2xvY2sgYnkgc2V0dGluZyB0aGUgbWF0Y2hpbmcgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2LWZlYXR1cmVzLnJzdC04Mi1iaXQgaW4gYGBldGh0b29sX29wczo6b3BfbmVlZHNfcnRubGBgLiBUaGUgZXRodG9vbCBjb3JlIHRoZW4ga2VlcHNcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0zNzk9YXBwcm9wcmlhdGUgYml0cyBpbiBgYGV0aHRvb2xfb3BzOjpvcF9uZWVkc19ydG5sYGAgKGlmIHRoZSBuZWNlc3NhcnlcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6MzgwOmBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgYCBiaXQgZG9lc24ndCBleGlzdCwganVzdCBhZGQgaXQpLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zODEtQ29tbW9ubHkgdXNlZCBjb3JlIGhlbHBlcnMgd2hpY2ggZm9yY2UgZHJpdmVycyB0byBzZWxlY3RpdmVseSBvcHQtaW4gdG9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM9NTcyNz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54dF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczMi1cXHQucnhmaF9wcml2X3NpemVcXHRcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgYm54dF9yc3NfY3R4KSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jOjU3MzM6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNDpcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jOjU3MzU6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jOjU3MzY6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jOjU3Mzc6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jLTU3MzgtXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz05ODI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGd2ZV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy05ODUtXFx0XFx0XFx0XFx0IEVUSFRPT0xfUklOR19VU0VfUlhfQlVGX0xFTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg2OlxcdC5vcF9uZWVkc19ydG5sID0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjk4NzpcXHRcXHRcXHQgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5ODg6XFx0XFx0XFx0IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTg5LVxcdC5nZXRfZHJ2aW5mbyA9IGd2ZV9nZXRfZHJ2aW5mbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmM9MTg1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlhdmZfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jLTE4NTctXFx0LnN1cHBvcnRlZF9pbnB1dF94ZnJtXFx0PSBSWEhfWEZSTV9TWU1fWE9SLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmM6MTg1ODpcXHQub3BfbmVlZHNfcnRubFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmMtMTg1OS1cXHQuZ2V0X2RydmluZm9cXHRcXHQ9IGlhdmZfZ2V0X2RydmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jPTI3MTg9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVlX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYy0yNzIyLVxcdC5yeGZoX21heF9udW1fY29udGV4dHNcXHQ9IE1MWDVFX01BWF9OVU1fUlNTLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM6MjcyMzpcXHQub3BfbmVlZHNfcnRubFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYzoyNzI0OlxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM6MjcyNTpcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jOjI3MjY6XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYy0yNzI3LVxcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM9NDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWVfcmVwX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTQxOS1cXHRcXHRcXHRcXHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYzo0MjA6XFx0Lm9wX25lZWRzX3J0bmxcXHQgICA9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYzo0MjE6XFx0XFx0XFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jOjQyMjpcXHRcXHRcXHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtNDIzLVxcdC5nZXRfZHJ2aW5mb1xcdCAgID0gbWx4NWVfcmVwX2dldF9kcnZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYz0yODQ9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVpX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYy0yODctXFx0XFx0XFx0XFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jOjI4ODpcXHQub3BfbmVlZHNfcnRubFxcdCAgICA9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9ldGh0b29sLmM6Mjg5OlxcdFxcdFxcdCAgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jOjI5MDpcXHRcXHRcXHQgICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYy0yOTEtXFx0LmdldF9kcnZpbmZvICAgICAgICA9IG1seDVpX2dldF9kcnZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYz0zMTI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVpX3BrZXlfZXRodG9vbF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYzozMTM6XFx0Lm9wX25lZWRzX3J0bmxcXHQgICAgPSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYy0zMTQtXFx0LmdldF9kcnZpbmZvICAgICAgICA9IG1seDVpX2dldF9kcnZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fZXRodG9vbC5jPTEyNjM9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seHN3X3NwX3BvcnRfZXRodG9vbF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fZXRodG9vbC5jLTEyNjQtXFx0LmNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmM6MTI2NTpcXHQub3BfbmVlZHNfcnRubFxcdFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmM6MTI2NjpcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmMtMTI2Ny1cXHQuZ2V0X2RydmluZm9cXHRcXHRcXHQ9IG1seHN3X3NwX3BvcnRfZ2V0X2RydmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDIyLVxcdC5yeGZoX21heF9udW1fY29udGV4dHNcXHRcXHQ9IEZCTklDX1JQQ19SU1NfVEJMX0NPVU5ULFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjM6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjQ6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR1BBVVNFUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjU6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjY6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoyMDI3OlxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjg6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjk6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDMwLVxcdC5nZXRfZHJ2aW5mb1xcdFxcdFxcdD0gZmJuaWNfZ2V0X2RydmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYz04NjM9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1hbmFfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYy04NzAtXFx0XFx0XFx0XFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRV9UWCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYzo4NzE6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jOjg3MjpcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYzo4NzM6XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmM6ODc0OlxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jLTg3NS1cXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IG1hbmFfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jPTIwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5zaW1fZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jLTIxMS1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfUklOR19VU0VfSERTX1RIUlMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYzoyMTI6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYy0yMTMtXFx0LmdldF9wYXVzZV9zdGF0c1xcdCAgICAgICAgPSBuc2ltX2dldF9wYXVzZV9zdGF0cyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTkyMz1zdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05MzctICovXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTM4OiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HU1xcdEJJVCgwKVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjkzOTojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTXFx0XFx0QklUKDEpXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTQwOiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU1cXHRCSVQoMilcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDE6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTXFx0XFx0QklUKDMpXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTQyOiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDT0FMRVNDRVxcdFxcdEJJVCg0KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0MzojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTVxcdEJJVCg1KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0NDojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTVxcdEJJVCg2KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0NTojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1NcXHRcXHRCSVQoNylcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDY6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTktcXHRcXHRCSVQoOClcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDc6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVFxcdFxcdEJJVCg5KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk0OC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk3NC0gKiBAc3VwcG9ydGVkX2h3dHN0YW1wX3F1YWxpZmllcnM6IGJpdGZpZWxkIG9mIHN1cHBvcnRlZCBod3RzdGFtcCBxdWFsaWZpZXIuXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTc1OiAqIEBvcF9uZWVkc19ydG5sOiBtYXNrIG9mICVFVEhUT09MX09QX05FRURTX1JUTkxfKiBiaXRzLlxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk3Ni0gKlxcdEZvciB1c2Ugd2l0aCBvcHMtbG9ja2VkIGRyaXZlcnMgKGlnbm9yZWQgb3RoZXJ3aXNlKS4gU2VsZWN0cyB3aGljaFxcbi0tXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTE5Ni0gKiBgYHJ0bmxfbG9ja2BgIGlzIGFkZGl0aW9uYWxseSBoZWxkIG9ubHkgZm9yIGNhbGxiYWNrcyBmb3Igd2hpY2hcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDoxMTk3OiAqIHRoZSBkcml2ZXIgb3B0cyBpbiB2aWEgdGhlIG1hdGNoaW5nIGBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgYCBiaXRcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0xMTk4LSAqIGluIEBvcF9uZWVkc19ydG5sLlxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmg9OTI9ZXRodG9vbF9ubF9tc2dfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBjbWQpXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDAtXFx0Y2FzZSBFVEhUT09MX01TR19MSU5LTU9ERVNfU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwMTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDItXFx0Y2FzZSBFVEhUT09MX01TR19QUklWRkxBR1NfU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwMzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1M7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTA0LVxcdGNhc2UgRVRIVE9PTF9NU0dfUklOR1NfU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwNTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU07XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTA2LVxcdGNhc2UgRVRIVE9PTF9NU0dfQ0hBTk5FTFNfU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwNzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDgtXFx0Y2FzZSBFVEhUT09MX01TR19DT0FMRVNDRV9TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTA5OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTExMC1cXHRjYXNlIEVUSFRPT0xfTVNHX1BBVVNFX0dFVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTE6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTItXFx0Y2FzZSBFVEhUT09MX01TR19QQVVTRV9TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTEzOlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU07XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE0LVxcdGNhc2UgRVRIVE9PTF9NU0dfUlNTX1NFVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTU6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE2LVxcdGNhc2UgRVRIVE9PTF9NU0dfTElOS1NUQVRFX0dFVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTc6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTgtXFx0Y2FzZSBFVEhUT09MX01TR19UU0NPTkZJR19HRVQ6XFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaD0xMzg9ZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBldGhjbWQpXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNDYtXFx0Y2FzZSBFVEhUT09MX1NTRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTQ3OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE0OC1cXHRjYXNlIEVUSFRPT0xfU1BGTEFHUzpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNDk6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1MC1cXHRjYXNlIEVUSFRPT0xfU1JJTkdQQVJBTTpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTE6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1Mi1cXHRjYXNlIEVUSFRPT0xfU0NIQU5ORUxTOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1MzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTQtXFx0Y2FzZSBFVEhUT09MX1NDT0FMRVNDRTpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTU6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0U7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTU2LVxcdGNhc2UgRVRIVE9PTF9HUEFVU0VQQVJBTTpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTc6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTgtXFx0Y2FzZSBFVEhUT09MX1NQQVVTRVBBUkFNOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1OTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2MC1cXHRjYXNlIEVUSFRPT0xfU1JTU0g6XFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjItXFx0Y2FzZSBFVEhUT09MX1NSWEZISU5ESVI6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTYzOlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2NC1cXHRjYXNlIEVUSFRPT0xfR0xJTks6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTY1OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTks7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTY2LVxcdGNhc2UgRVRIVE9PTF9URVNUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2NzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTY4LVxcdH1cXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MzI3Mj1kZXZfZXRodG9vbF9sb2NrZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTkwLSAqIERyaXZlci1kZWNpZGVkIFNFVCBjb21tYW5kcyB0aGF0IG1heSBjaGFpbiBpbnRvIHJ0bmwtb25seSBoZWxwZXJzIGFyZVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzU5MTogKiBjb3ZlcmVkIGJ5IGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCgpL0VUSFRPT0xfT1BfTkVFRFNfUlROTF8qLlxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzU5Mi0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6MTYuNDQzNDc2Mzg4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxNjg5OTQ3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5kZXJzdGFuZGluZyB0aGUgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qYCBGbGFnIGluIHRoZSBMaW51eCBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gbWV0aWN1bG91c2x5LiBNeSBmb2N1cyBpcyBvbiBob3cgdGhpcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgIGZsYWcgb3BlcmF0ZXMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy5cblxuRnJvbSB0aGUgY29kZSwgaXQncyBjbGVhciB0aGF0IHRoaXMgbWFzaywgc3BlY2lmaWNhbGx5IGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCwgZGljdGF0ZXMgd2hpY2ggZXRodG9vbCBjYWxsYmFja3MgcmVxdWlyZSB0aGUgYHJ0bmxfbG9ja2AgaGVsZCBmb3IgZXhlY3V0aW9uLiBJIGFscmVhZHkga25vdyB0aGlzIGFyZWEgcXVpdGUgd2VsbC4gSGlzdG9yaWNhbGx5LCBhbGwgZXRodG9vbCBvcGVyYXRpb25zIHdlcmUgaW5oZXJlbnRseSBwcm90ZWN0ZWQgYnkgYHJ0bmxfbG9jaygpYC4gVGhlIGFyY2hpdGVjdHVyZSBoYXMgZXZvbHZlZCwgYW5kIG5vdyB3ZSBoYXZlIFwib3BzLWxvY2tlZFwiIGRyaXZlcnMsIHdoaWNoIHVzZSBgbmV0ZGV2X2xvY2soZGV2KWAgZm9yIGNvbmN1cnJlbmN5IGNvbnRyb2wgaW5zdGVhZC4gSSdtIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZSBhbmQgdGhlIHBlcmZvcm1hbmNlIGdhaW5zIGl0IGNhbiBwcm92aWRlIGluIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcy5cblxuSG93ZXZlciwgYSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHNvbWUgb3BlcmF0aW9ucyBzdGlsbCAqbmVlZCogYHJ0bmxfbG9ja2AsIGV2ZW4gd2l0aGluIGFuIG9wcy1sb2NrZWQgY29udGV4dC4gVGhpcyBpcyB3aGVyZSBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgIGNvbWVzIGludG8gcGxheS4gRm9yIGluc3RhbmNlLCBpZiBhbiBldGh0b29sIGNhbGxiYWNrLCBsaWtlIGBzZWxmX3Rlc3RgLCBpbnZva2VzIGBuZXRpZl9vcGVuKClgIG9yIGBuZXRpZl9jbG9zZSgpYCwgd2hpY2ggYXJlIGBydG5sX2xvY2tgIHByb3RlY3RlZCwgb3IgY2FsbHMgb3RoZXIgZnVuY3Rpb25zIHRoYXQgcmVseSBvbiB0aGF0IGxvY2ssIHRoZSBkcml2ZXIgbmVlZHMgdG8gc2lnbmFsIHRoaXMuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgYml0LCBzdWNoIGFzIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdpdGhpbiBgb3BzLVx1MDAzZW9wX25lZWRzX3J0bmxgLlxuXG5Ob3csIGhvdyBkb2VzIHRoaXMgbWFuaWZlc3QgaW4gdGhlIGtlcm5lbCBjb2RlPyBJbiBgX19kZXZfZXRodG9vbCgpYCwgdGhlIGBuZWVkX3J0bmxgIHZhcmlhYmxlIGRldGVybWluZXMgd2hldGhlciBgcnRubF9sb2NrKClgIGlzIGFjcXVpcmVkLiBUaGUgbG9naWMgc2hvd3MgdGhhdCBmb3IgKm9yZGluYXJ5KiBkcml2ZXJz4oCUdGhvc2UgdGhhdCBkb24ndCB1c2UgYG5ldGRldl9uZWVkX29wc19sb2NrKGRldilg4oCUYG5lZWRfcnRubGAgaXMgYWx3YXlzIGB0cnVlYC4gVGhpcyBtZWFucyB0aGV5IGFsd2F5cyB0YWtlIHRoZSBgcnRubF9sb2NrYC5cblxuQ29udmVyc2VseSwgZm9yICpvcHMtbG9ja2VkKiBkcml2ZXJzLCBgbmVlZF9ydG5sYCBoaW5nZXMgb24gYSBmZXcgY29uZGl0aW9uczogaWYgYGV0aHRvb2xfY21kX2NoYW5nZXNfZmVhdHVyZXMoZXRoY21kKWAgaXMgdHJ1ZSwgb3IgaWYgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZClgIGlzIHRydWUsIG9yIGlmIGAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgaXMgdHJ1ZSAod2hpY2ggbWVhbnMgdGhhdCB0aGUgZGV2aWNlIGlzIG5vdCBvcHMtbG9ja2VkKSAtIG9yIGlmIHRoZSByZWxldmFudCBiaXRzIGFyZSBzZXQuIFNvIHRoZSByZWxldmFudCBjYXNlIGZvciBteSBwdXJwb3NlcyBpcywgYW4gb3BzLWxvY2tlZCBkcml2ZXIgY2FuIHN0aWxsIHJlcXVlc3QgYHJ0bmxfbG9ja2AgYnkgc2V0dGluZyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlYmFzZSwgSSBzZWUgdGhhdCBvbmx5IGBibnh0YCBhbmQgYGZibmljYCBzZXQgdGhpcyBiaXQhIFRoaXMgaXMgZmFzY2luYXRpbmcgLSB0aGV5J3JlIGV4cGxpY2l0bHkgaW5kaWNhdGluZyB0aGF0IHNwZWNpZmljIGV0aHRvb2wgb3BlcmF0aW9ucyByZXF1aXJlIHRoZSBgcnRubF9sb2NrYC4gSSBub3cgbmVlZCB0byBjbGFyaWZ5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBibnh0YCBhY3R1YWxseSB1c2VzIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYC4gSSBtdXN0IGNvbmZpcm0gd2hldGhlciBgYm54dGAgc2V0cyBgcmVxdWVzdF9vcHNfbG9ja2Agb3IgYHF1ZXVlX21nbXRfb3BzYCBhdCBkZXZpY2UgcmVnaXN0cmF0aW9uIHRpbWUuIFRoaXMgaXMgY3JpdGljYWwgdG8gdGhlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDMzMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzoyMS42MTI0Nzg3MzVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODcxODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXVlc3Rfb3BzX2xvY2t8cXVldWVfbWdtdF9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjYxNj1zdGF0aWMgaW50IGJueHRfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY2NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY2NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWVfbWdtdF9vcHMgYm54dF9xdWV1ZV9tZ210X29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjY2NS1cXHQubmRvX3F1ZXVlX21lbV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGJueHRfcnhfcmluZ19pbmZvKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2Njc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE2Njc1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGJueHRfcXVldWVfbWdtdF9vcHNfdW5zdXBwID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2Njc2LVxcdC5uZG9fZGVmYXVsdF9xY2ZnXFx0PSBibnh0X3F1ZXVlX2RlZmF1bHRfcWNmZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE3MTE0PXN0YXRpYyBpbnQgYm54dF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MzU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MzU5OlxcdGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2Ym54dF9xdWV1ZV9tZ210X29wc191bnN1cHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNjAtXFx0aWYgKEJOWFRfU1VQUE9SVFNfUVVFVUVfQVBJKGJwKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzM2MTpcXHRcXHRkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXFx1MDAyNmJueHRfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNjItXFx0ZGV2LVxcdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzoyMS42NjIzNTcyMjdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM5ODU1Nzc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEcml2ZXIgTG9ja2luZyBSZXF1aXJlbWVudHMqKlxuXG5SaWdodCwgc28sIHRoZSBgYm54dGAgZHJpdmVyIGV4cG9zZXMgYGRldi1cdTAwM2VxdWV1ZV9tZ210X29wc2AsIHdoaWNoIG1lYW5zIHRoYXQgYG5ldGRldl9uZWVkX29wc19sb2NrYCBpcyBkZWZpbml0ZWx5IHRydWUgZm9yIGl0LiBTdGFuZGFyZCBzdHVmZiwgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBOb3csIHdoYXQgYWJvdXQgdGhlIGBmYm5pY2AgZHJpdmVyPyBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBmYm5pY2AgdG8gc2VlIGlmIGl0IGZvbGxvd3MgdGhlIHNhbWUgcGF0dGVybiBvciBpZiB0aGVyZSdzIHNvbWV0aGluZyBkaWZmZXJlbnQgaW4gaXRzIGFyY2hpdGVjdHVyZSB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB3aGV0aGVyIGEgbG9ja2luZyBtZWNoYW5pc20gaXMgcmVxdWlyZWQgZm9yIGl0cyBvcGVyYXRpb25zLiBOZWVkIHRvIGRldGVybWluZSBpZiBpdCBoYXMgdGhvc2Ugc2ltaWxhciBxdWV1ZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgdGhhdCB3b3VsZCB0cmlnZ2VyIHRoZSBuZWVkIGZvciBhIGxvY2suIFRpbWUgdG8gZGlnIGludG8gdGhlIGBmYm5pY2AgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxNjMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzoyNC4wNjA5MTg5MzRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjczNzcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXF1ZXN0X29wc19sb2NrfHF1ZXVlX21nbXRfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYz03NDY9c3RydWN0IG5ldF9kZXZpY2UgKmZibmljX25ldGRldl9hbGxvYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTc2MC1cXHRuZXRkZXYtXFx1MDAzZXN0YXRfb3BzID0gXFx1MDAyNmZibmljX3N0YXRfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM6NzYxOlxcdG5ldGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2ZmJuaWNfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYy03NjItXFx0bmV0ZGV2LVxcdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM9MjkyOT1zdGF0aWMgaW50IGZibmljX3F1ZXVlX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcW1lbSwgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jLTI5NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM6Mjk3MDpjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGZibmljX3F1ZXVlX21nbXRfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jLTI5NzEtXFx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBmYm5pY19xX3RyaWFkKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5oPTE1MD1zdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3Ige1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmgtMTYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5oOjE2MzpleHRlcm4gY29uc3Qgc3RydWN0IG5ldGRldl9xdWV1ZV9tZ210X29wcyBmYm5pY19xdWV1ZV9tZ210X29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguaC0xNjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjI0Ljg4NzY2NjM0MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDE2ODA5NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBDSSBEcml2ZXIgUHJvYmluZyBpbiBWaXJ0dWFsIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBibnh0YCBhbmQgYGZibmljYCwgYm90aCBQQ0kgZHJpdmVycywgYm90aCBoYXZpbmcgYHF1ZXVlX21nbXRfb3BzYC4gVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kIGlzLCBjYW4gZWl0aGVyIG9mIHRoZXNlIGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQgb3IgZXZlbiAqdXNlZCogd2l0aGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgZXZlbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzLCBubywgcHJvYmFibHkgbm90LiBDYW4geW91IGV2ZW4gcHJvYmUgYSBQQ0kgZGV2aWNlIGlmIGl0ICpkb2Vzbid0KiBoYXZlIHNvbWUga2luZCBvZiBwaHlzaWNhbCBoYXJkd2FyZSB0byBiYWNrIGl0LCBvciBhIHJvYnVzdCBRRU1VIGVtdWxhdGlvbiBvZiBpdD8gVXN1YWxseSwgbm8uIEkgbWVhbiwgd2l0aG91dCBhIHZpcnR1YWwgZW11bGF0aW9uIGxpa2UgdmlydGlvLCBvciBhbiBlbXVsYXRlZCBQQ0kgZGV2aWNlIHdpdGhpbiBRRU1VIGxpa2UgZTEwMDAvZTEwMDBlL2lnYi9ydGw4MTM5LCB0aGVyZSdzIG5vIHdheSB0byBldmVuICpmaW5kKiB0aGUgZGV2aWNlLlxuXG5MZXQncyBjaGVjayBRRU1VIGZpcnN0LiBEb2VzIFFFTVUgZW11bGF0ZSBgYm54dGA/IE5vcGUuIEJyb2FkY29tJ3MgYGJueHRgIGlzbid0IGEgc3RhbmRhcmQgZW11bGF0aW9uIHRhcmdldC4gVGhlbiBgZmJuaWNgPyBIbW0sIHRoYXQncyBNZXRhJ3MgY3VzdG9tIEFTSUMgTklDLCBhbmQgSSBrbm93IGl0IHdhcyBhZGRlZCB0byB0aGUga2VybmVsIHZlcnkgcmVjZW50bHkg4oCTIDIwMjQuIFNvLCB0aGVyZSBpcyBubyB3YXkgZm9yIFFFTVUgdG8gZW11bGF0ZSB0aGUgZGV2aWNlIGVpdGhlci5cblxuV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gSXNuJ3QgdGhhdCBzb21ldGhpbmcgZGVzaWduZWQgZm9yIG5ldHdvcmsgZGV2aWNlIHNpbXVsYXRpb24/IERvZXMgaXQgc2V0IGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGA/IE5vPyBBbmQgZG9lcyBpdCBpbXBsZW1lbnQgYHNlbGZfdGVzdGA/IEknZCBiZXR0ZXIgY2hlY2sgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyOTA2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjI3LjkwNDQ3ODE2MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MzYwNzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGZfdGVzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjI3Ljk1MDQyMjAxNFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MTcxMDIxMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyaWFnZSBEZWNpc2lvbjogV29ydGhGdXp6aW5nID0gRmFsc2UqKlxuXG5Pa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYG5ldGRldnNpbWAgZG9lc24ndCBpbXBsZW1lbnQgYSBgc2VsZl90ZXN0YCwgd2hpY2ggZ290IG1lIHdvbmRlcmluZyBhYm91dCBvdGhlciBkcml2ZXJzLiBJIHF1aWNrbHkgcmV2aWV3ZWQgdGhlIG9uZXMgSSBrbm93IGFyZSBlbXVsYXRlZCBieSBRRU1VIGxpa2UgYHBjbmV0MzJgLCBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGFuZCBzb21lIFVTQiBldGhlcm5ldCBkZXZpY2VzLiBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgbG9ja2luZyBtZWNoYW5pc21zLiBOb25lIG9mIHRoZXNlIGRyaXZlcnMgdXNlIGByZXF1ZXN0X29wc19sb2NrYCBvciBgcXVldWVfbWdtdF9vcHNgLiBUaGlzIG1lYW50IHRoYXQgdGhlIGNvbmRpdGlvbiBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgd291bGQgZXZhbHVhdGUgdG8gYGZhbHNlYCBmb3IgdGhlbS5cblxuVGhpcyBpcyBhIGtleSBvYnNlcnZhdGlvbiEgIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSBDIGNvbXBpbGVyIHdpbGwgXCJzaG9ydC1jaXJjdWl0XCIgdGhlIGxvZ2ljYWwgT1IgKGB8fGApIG9wZXJhdG9yLiAgVGhlcmVmb3JlLCB0aGUgY2hlY2sgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZClgICp3b24ndCBldmVuIGJlIGV4ZWN1dGVkKiBpZiBgIW5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIHRydWUgKHdoaWNoIGlzIHRoZSBjYXNlIGZvciBhbGwgZW11bGF0ZWQgZHJpdmVycyBJJ20gZmFtaWxpYXIgd2l0aCkhICBFdmVuIGlmIGl0ICp3ZXJlKiBleGVjdXRlZCwgdGhlIGBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubGAgY2hlY2sgZm9yIGVtdWxhdGVkIGRyaXZlcnMgKmRvZXNuJ3QqIGluY2x1ZGUgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gT25seSBkcml2ZXJzIGxpa2UgYGJueHRgIGFuZCBgZmJuaWNgIHNldCB0aGlzIGZsYWcuXG5cblRoaXMgaXMgd2hlcmUgSSBiZWNhbWUgY29uY2VybmVkLiBJIHRoZW4gd2VudCBiYWNrIHRvIHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zIC0gc3BlY2lmaWNhbGx5LCBzZWN0aW9uIDEgYW5kIHNlY3Rpb24gMi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGZvciByZWFjaGluZyBhIHdvcnRoIGZ1enppbmcgZGVjaXNpb24uXG5cbkkgd2VudCBiYWNrIGFuZCBjaGVja2VkIGFsbCB0aGUgZmlsZXMgdGhhdCBjaGFuZ2VkIGFuZCBmb3VuZCB0aGF0IHRoZSBjaGFuZ2VzIGFyZTpcblxuMS4gIGBibnh0X2V0aHRvb2wuY2A6ICBUaGlzIGlzIGluIHRoZSBgYm54dGAgZHJpdmVyIChCcm9hZGNvbSBOZXRYdHJlbWUgUENJZSBOSUMpLCBzZXR0aW5nIHRoZSBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGZsYWcuXG4yLiAgYGZibmljX2Nzci5oYCwgYGZibmljX2RlYnVnZnMuY2AsIGBmYm5pY19ldGh0b29sLmNgLCBgZmJuaWNfZncuY2AsIGBmYm5pY19mdy5oYCwgYGZibmljX3BjaS5jYCwgYGZibmljX3R4cnguY2A6IEFsbCBwYXJ0cyBvZiB0aGUgYGZibmljYCBkcml2ZXIgKE1ldGEgZmJuaWMgUENJZSBOSUMpLCB3aXRoIGNoYW5nZXMgcmVsYXRlZCB0byBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgZXRodG9vbCB0ZXN0LlxuMy4gIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGA6IFRoZSBoZWFkZXIgdGhhdCBkZWZpbmVzIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAuXG40LiAgYG5ldC9ldGh0b29sL2NvbW1vbi5oYDogIFRoaXMgY29udGFpbnMgdGhlIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGZ1bmN0aW9uIGFuZCByZWxhdGVkIGV0aHRvb2wgb3BlcmF0aW9ucy5cblxuVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoaXMgYWxsIGNoYW5nZXMgY29kZSB0aGF0IGlzIHVzZWQgYnkgYGJueHRgIGFuZCBgZmJuaWNgLCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBlbXVsYXRlZCBieSBRRU1VLiAgVGhpcyB3aWxsIG5vdCBiZSByZWFjaGVkIGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5JIGxvb2tlZCBjYXJlZnVsbHkgYXQgYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gU3BlY2lmaWNhbGx5IGF0IHRoZSBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFNpbmNlIGl0IGlzIGFuIGBpbmxpbmVgIGZ1bmN0aW9uLCBpdCBpcyBlYXN5IHRvIHNlZSB0aGUgZnVuY3Rpb24uIFRoZSBjb25kaXRpb24gYG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8YCBzaG93cyB0aGF0IHRoZSBldGh0b29sIG9wZXJhdGlvbnMgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuXG5JIGhhdmUgdG8gY2FyZWZ1bGx5IGFzc2VzcyBpZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3LCBmdXp6ZWQgY29kZSwgYW5kIHNvIEkgYW0gY2hlY2tpbmcgZHJpdmVycyB0aGF0IHVzZSBgcmVxdWVzdF9vcHNfbG9ja2AsIGBxdWV1ZV9tZ210X29wc2AsIGFuZCBgbmV0X3NoYXBlcl9vcHNgLCBpbiBjYXNlIGFueSBvZiB0aGVzZSBhY3R1YWxseSB1c2UgdGhlIG5ldyBjb2RlLCBvciBleHBvc2UgaXQuIEkgd2lsbCBzZWFyY2ggZm9yIHRoZXNlIHN5bWJvbHMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGUgY29kZSBvbmx5IGFwcGxpZXMgdG8gaGFyZHdhcmUgKGJueHQsIGZibmljKSBub3QgZW11bGF0ZWQsIGFuZCB0aGUgY2hhbmdlcyBkbyBub3QgcmVzdWx0IGluIG5ldyByZWFjaGFibGUgY29kZSwgaXQgc2VlbXMgdGhlIGNoYW5nZXMgYXJlIHVucmVhY2hhYmxlIHdpdGhpbiBteSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNTI5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzozNy4xMjE0NDUzNjJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTMwMjYxNTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwucXVldWVfbWdtdF9vcHNcXFxccyo9XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzozOC45MzQ0ODA3NTNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEzNzc4MTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGU6IEZpbmRpbmcgdGhlIFF1ZXVlIE1hbmFnZW1lbnQgT3BzKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QsIGFsd2F5cywgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcXVldWUgbWFuYWdlbWVudCBvcGVyYXRpb25zIGFyZSBkZWZpbmVkLiBTbywgbGV0J3Mgc3RhcnQgd2l0aCBhIGNsYXNzaWM6IGEgYGdyZXBgIHNlYXJjaC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gYGdyZXBgIGZvciB0aGUgZXhhY3Qgc3RyaW5nIGBxdWV1ZV9tZ210X29wcyA9YC4gVGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgdmFyaWFibGUgbmFtZSBvciBkZWNsYXJhdGlvbiBJJ2QgZXhwZWN0IHRvIHNlZSByZWxhdGVkIHRvIGFuIG9wZXJhdGlvbmFsIHN0cnVjdHVyZS4gSXQncyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gaWRlbnRpZnkgdGhlIGRlZmluaXRpb24gYW5kIGhvcGVmdWxseSB1bmRlcnN0YW5kIHdoYXQgdGhhdCBzdHJ1Y3R1cmUsIG9yIHN0cnVjdCwgb3IgY2xhc3MsIGFjdHVhbGx5ICppcyouIFRoaXMgd2lsbCBwaW5wb2ludCB0aGUgc3RhcnRpbmcgcG9pbnQsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGVzZSBxdWV1ZXMgYXJlIGJlaW5nIG1hbmFnZWQgYW5kIHdoYXQgdGhhdCBsb29rcyBsaWtlLiBJdCdzIHRoZSBzdGFuZGFyZCwgZWZmaWNpZW50IGZpcnN0IHBhc3MgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NDI4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6NDEuMDcyMjY0NzQyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg5MDA5MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX21nbXRfb3BzXFxcXHMqPVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjYxNj1zdGF0aWMgaW50IGJueHRfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY2NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY2NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWVfbWdtdF9vcHMgYm54dF9xdWV1ZV9tZ210X29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjY2NS1cXHQubmRvX3F1ZXVlX21lbV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGJueHRfcnhfcmluZ19pbmZvKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE3MTE0PXN0YXRpYyBpbnQgYm54dF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MzU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MzU5OlxcdGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2Ym54dF9xdWV1ZV9tZ210X29wc191bnN1cHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNjAtXFx0aWYgKEJOWFRfU1VQUE9SVFNfUVVFVUVfQVBJKGJwKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzM2MTpcXHRcXHRkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXFx1MDAyNmJueHRfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNjItXFx0ZGV2LVxcdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTI3MTQ9c3RhdGljIGludCBndmVfcnhfcXVldWVfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNzY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyNzY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGd2ZV9xdWV1ZV9tZ210X29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjc2Ny1cXHQubmRvX3F1ZXVlX21lbV9zaXplXFx0PVxcdHNpemVvZihzdHJ1Y3QgZ3ZlX3J4X3JpbmcpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTI4MjI9c3RhdGljIGludCBndmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjg3NS1cXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2Z3ZlX25ldGRldl9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjI4NzY6XFx0ZGV2LVxcdTAwM2VxdWV1ZV9tZ210X29wcyA9IFxcdTAwMjZndmVfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTI4NzctXFx0ZGV2LVxcdTAwM2VzdGF0X29wcyA9IFxcdTAwMjZndmVfc3RhdF9vcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTU3OTQ9c3RhdGljIHN0cnVjdCBkZXZpY2UgKm1seDVlX3F1ZXVlX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTU4MTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1ODE3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIG1seDVlX3F1ZXVlX21nbXRfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMtNTgxOC1cXHQubmRvX3F1ZXVlX21lbV9zaXplXFx0PVxcdHNpemVvZihzdHJ1Y3QgbWx4NV9xbWdtdF9kYXRhKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTgyOT1zdGF0aWMgdm9pZCBtbHg1ZV9idWlsZF9uaWNfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTU4MzgtXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNm1seDVlX25ldGRldl9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1ODM5OlxcdG5ldGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2bWx4NWVfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODQwLVxcdG5ldGRldi1cXHUwMDNleGRwX21ldGFkYXRhX29wcyA9IFxcdTAwMjZtbHg1ZV94ZHBfbWV0YWRhdGFfb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYz03NDY9c3RydWN0IG5ldF9kZXZpY2UgKmZibmljX25ldGRldl9hbGxvYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTc2MC1cXHRuZXRkZXYtXFx1MDAzZXN0YXRfb3BzID0gXFx1MDAyNmZibmljX3N0YXRfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM6NzYxOlxcdG5ldGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2ZmJuaWNfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYy03NjItXFx0bmV0ZGV2LVxcdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM9MjkyOT1zdGF0aWMgaW50IGZibmljX3F1ZXVlX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcW1lbSwgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jLTI5NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM6Mjk3MDpjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGZibmljX3F1ZXVlX21nbXRfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jLTI5NzEtXFx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBmYm5pY19xX3RyaWFkKSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz04MzY9c3RhdGljIGludCBuc2ltX3F1ZXVlX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcGVyX3F1ZXVlX21lbSwgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy04NTQtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjg1NTpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGRldl9xdWV1ZV9tZ210X29wcyBuc2ltX3F1ZXVlX21nbXRfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy04NTYtXFx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBuc2ltX3F1ZXVlX21lbSksXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA1Mi1cXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0X29wcyA9IFxcdTAwMjZuc2ltX3N0YXRfb3BzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMDUzOlxcdG5zLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXFx1MDAyNm5zaW1fcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwNTQtXFx0bmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMobnMtXFx1MDAzZW5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYz0zNTg9c3RhdGljIGludCBuZXRraXRfcXVldWVfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zOTEtXFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MzkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIG5ldGtpdF9xdWV1ZV9tZ210X29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zOTMtXFx0Lm5kb19xdWV1ZV9jcmVhdGVcXHQ9IG5ldGtpdF9xdWV1ZV9jcmVhdGUsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYz00NDE9c3RhdGljIHZvaWQgbmV0a2l0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYy00NzMtXFx0ZGV2LVxcdTAwM2VldGh0b29sX29wcyAgICA9IFxcdTAwMjZuZXRraXRfZXRodG9vbF9vcHM7XFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6NDc0OlxcdGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2bmV0a2l0X3F1ZXVlX21nbXRfb3BzO1xcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTQ3NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6NDMuMzYxMjgxMzE3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3NTM0MDA0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgRVRIVE9PTF9URVNUIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIGBFVEhUT09MX1RFU1RgIGlvY3RsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoaXMgY2hhbmdlIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBgbmV0ZGV2c2ltYCwgYG5ldGtpdGAsIGFuZCBgZHVtbXlgIGRyaXZlcnMsIGFuZCB3aGV0aGVyIHRoYXQgbWlnaHQgb3BlbiB1cCBhIGZ1enppbmcgb3Bwb3J0dW5pdHkuIEknbSBub3RpbmcgdGhlIGtleSBkaWZmZXJlbmNlcyBpbiBob3cgdGhlc2UgZHJpdmVycyBoYW5kbGUgdGhlaXIgcXVldWUgbWFuYWdlbWVudCBvcGVyYXRpb25zLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgZGlmZmVyZW5jZXMgaW4gYHF1ZXVlX21nbXRfb3BzYCBhbmQgYHJlcXVlc3Rfb3BzX2xvY2tgLlxuXG5JJ20gd29ya2luZyB0aHJvdWdoIHRoZSBsb2dpYy4gIElmIGEgc3l6a2FsbGVyIHRlc3Qgc2VuZHMgYW4gYEVUSFRPT0xfVEVTVGAgaW9jdGwsIHRoZSBjb2RlIGNoZWNrcyBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAuICBGb3Igb3VyIHRhcmdldCBkcml2ZXJzIChgZHVtbXlgLCBgbmV0ZGV2c2ltYCwgYW5kIGBuZXRraXRgKSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC4gVGhpcyBtZWFucyB0aGUgaW9jdGwgaXMgKnBvdGVudGlhbGx5KiBpbXBhY3RlZCBieSB0aGUgcGF0Y2hlZCBjb2RlLiBTaW5jZSBgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlc2AgcmV0dXJucyBgZmFsc2VgIChhcyBgRVRIVE9PTF9URVNUYCBpcyBhIGNvbW1hbmQpLCB0aGUgY29tcGlsZXIgZXZhbHVhdGVzIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBFVEhUT09MX1RFU1QpYC4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgaGVhcnQgb2YgbXkgYW5hbHlzaXMuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgbG9naWMuIEkgYW0gbm90aWNpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGluY2x1ZGVzIGEgYHN3aXRjaGAgc3RhdGVtZW50IGZvciBgRVRIVE9PTF9URVNUYCwgYW5kIHRoYXQgZm9yIHRoZSBgZHVtbXlgIGRldmljZSB0aGUgYG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sYCBpcyB6ZXJvLCBzbyBpdCByZXR1cm5zIGBmYWxzZWAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBpdCByZXR1cm5lZCAqYmVmb3JlKiB0aGUgcGF0Y2guIEZvciBgbmV0ZGV2c2ltYCBhbmQgYG5ldGtpdGAsIEkgc2VlIHRoYXQgdGhlIHNhbWUgbG9naWMgYXBwbGllcywgd2l0aCB0aGUgc2FtZSByZXN1bHQ6IGBmYWxzZWAuXG5cbk5vdyBJIG5lZWQgdG8gem9vbSBvdXQuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlICphbnkqIHJlYWwgZGV2aWNlcyBvdXQgdGhlcmUgdGhhdCBzZXQgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gQSBxdWljayBgZ2l0IGdyZXBgIHJldmVhbHMgdGhhdCBvbmx5IGBibnh0YCBhbmQgYGZibmljYCBkcml2ZXJzIHVzZSB0aGlzIGZsYWcuIEJ1dCB3YWl0LCBjYW4gdGhvc2UgZXZlbiBydW4gaW4gUUVNVT8gTm8sIHRoZXkgYXJlIG5vdCBlbXVsYXRlZCEgVGhpcyBtYWtlcyBtZSByZWNvbnNpZGVyIHRoZSBwYXRjaCdzIHJlbGV2YW5jZS5cblxuVGhlIGd1aWRlbGluZXMgc3RhdGUgdGhhdCBjaGFuZ2VzIHN0cmljdGx5IGltcGFjdGluZyB1bnJlYWNoYWJsZSBoYXJkd2FyZSBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBmdXp6YWJsZS4gSG93ZXZlciwgSSdtIHRoaW5raW5nIGFib3V0IFwiUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4uLiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzLi4uXCIgSSBoYXZlIHRvIGFuYWx5emUgY2FyZWZ1bGx5IGlmIHRoZXJlJ3MgKmFueSogYmVoYXZpb3JhbCBkaWZmZXJlbmNlIGZvciB0aGUgZHJpdmVycyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gUUVNVSwgc2luY2UgdGhpcyBpcyB0aGUgb25seSBjb2RlIEkgY2FuIHRhcmdldCBmb3IgZnV6enppbmcuXG5cbk15IGFuYWx5c2lzIGxvb2tzIGludG8gdHdvIGNhc2VzOlxuQ2FzZSBBOiBGb3IgZGV2aWNlcyB3aGVyZSBgIW5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIHRydWUgKGxvb3BiYWNrLCB2ZXRoLCBldGMuKSBUaGlzIGxvZ2ljIGlzIG5vdCBldmFsdWF0ZWQsIGFuZCB0aGlzIHBhdGNoIG1ha2VzIG5vIGRpZmZlcmVuY2UuXG5DYXNlIEI6IEZvciBkZXZpY2VzIHdoZXJlIGAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgaXMgZmFsc2UgKGR1bW15LCBuZXRkZXZzaW0sIG5ldGtpdCkuIEJlZm9yZSBhbmQgYWZ0ZXIsIHRoZSByZXR1cm4gdmFsdWVzIGFyZSB0aGUgKnNhbWUqLiBObyBiZWhhdmlvciBjaGFuZ2UuXG5cbkknbSByZS1ldmFsdWF0aW5nIHRoZSBwb3NzaWJpbGl0eSBvZiBlbXVsYXRlZCBoYXJkd2FyZSBpbiBRRU1VLiBEb2VzIGFueSAqZW11bGF0ZWQqIGRyaXZlciB1c2UgYG9wcy1sb2NrYD8gSSBhbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIG91dHB1dCBvZiBteSBlYXJsaWVyIGdyZXAuIEl0IGluY2x1ZGVzIEdWRSwgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQuIElzIHRoaXMgR1ZFIHVzZWQgaW4gUUVNVSBvciBHQ0U/XG5cblRoZSBHVkUgaXMgdGhlIHZpcnR1YWwgTklDISBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEdWRSBzZXRzIHRoZSBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaGFzIGFueSBhZmZlY3Qgb24gZnV6emFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NzIwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzo1My4xMTQ2ODQ5NTNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTIwNjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVUSFRPT0xfT1BfTkVFRFNfUlROTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz05ODI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGd2ZV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy05ODUtXFx0XFx0XFx0XFx0IEVUSFRPT0xfUklOR19VU0VfUlhfQlVGX0xFTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg2OlxcdC5vcF9uZWVkc19ydG5sID0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjk4NzpcXHRcXHRcXHQgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5ODg6XFx0XFx0XFx0IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTg5LVxcdC5nZXRfZHJ2aW5mbyA9IGd2ZV9nZXRfZHJ2aW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6NTMuMjEzMjExMjE4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1ODk5MzQxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBGbGFnIGFuZCBQaHlzaWNhbCBOSUMgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoaXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBmbGFnIGlzIGJlaW5nIGhhbmRsZWQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBoYXJkd2FyZSBzdXBwb3J0LiBJdCBzZWVtcyBsaWtlIHRoZSBHVkUgZHJpdmVyIGlzbid0IHNldHRpbmcgdGhlIGZsYWcgYW5kIGFsc28gZG9lc24ndCBpbXBsZW1lbnQgYSBgc2VsZl90ZXN0YCBmdW5jdGlvbi4gVGhpcyByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gb3RoZXIgcGh5c2ljYWwgTklDcyB0aGF0IEknbSBmYW1pbGlhciB3aXRoLiBXaGF0IGFib3V0IGBtbHg1YD8gVGhhdCdzIGEgTWVsbGFub3ggQ29ubmVjdFgsIGEgcmVhbCBwaWVjZSBvZiBoYXJkd2FyZSwgYnV0IEkga25vdyBpdCdzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBOZXh0LCBJIGNvbnNpZGVyIGBmYm5pY2AsIHRoZSBNZXRhIE5JQzsgYWxzbyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgYWxzbyBub3QgZW11bGF0ZWQuIFRoZW4sIEkgbG9vayBhdCBgbmV0ZGV2c2ltYCwgYW5kLCB1bnN1cnByaXNpbmdseSwgaXQncyBub3Qgc2V0dGluZyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGVpdGhlci4gVGhlIHNhbWUgZ29lcyBmb3IgYG5ldGtpdGAuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hpY2ggTklDcyAqY2FuKiBiZSB1c2VkIHdpdGggYSBmdXp6aW5nIGVudmlyb25tZW50IGxpa2Ugc3l6a2FsbGVyLiBDYW4gYGJueHRgIG9yIGBmYm5pY2AgKmV2ZXIqIGJlIGluc3RhbnRpYXRlZCBpbiBRRU1VIG9yIGJ5IHN5emthbGxlcj8gSWYgbm90LCB0aGF0IGNoYW5nZXMgaG93IEkgYXBwcm9hY2ggdGhpbmdzLlxuXG5TbywgSSB3aWxsIGNoZWNrIGlmIHRoZXJlJ3MgYW55IG1vY2sgb3IgdGVzdCBoYXJuZXNzIGZvciBlaXRoZXIgYGZibmljYCBvciBgYm54dGAuIEknbGwgc3RhcnQgd2l0aCBgZmJuaWNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBleGlzdGluZyB0ZXN0IGNvZGUgb3IgYW55IHNvcnQgb2YgbW9jayBpbXBsZW1lbnRhdGlvbiBmb3IgaXQgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgc2VhcmNoIGFyb3VuZCBmb3IgYGZibmljYCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL2AgZGlyZWN0b3J5LCBhbmQgcmVhbGx5IGFueXdoZXJlIGVsc2UgdGhhdCBtYWtlcyBzZW5zZSwgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIHRvIGZpbmQgYW55IGNsdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQxNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzo1Ni44MDMxNDkyMTZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTU2NzI4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmJuaWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidG9vbHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzo1Ni45NTg3MjQzNTJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY4ODU4MTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQSBMZWFuIEFwcHJvYWNoKipcblxuSG1tLCBcIk5vLlwiIFRoYXQncyBteSBndXQgcmVhY3Rpb24uIEknbSBsaWtlbHkgb3BlcmF0aW5nIG9uIGEgd2VsbC1ob25lZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIHNwYWNlLCBhbmQgdGhlIGluaXRpYWwgc3VnZ2VzdGlvbiBjbGVhcmx5IGRvZXNuJ3QgZml0IG15IGVzdGFibGlzaGVkIGZyYW1ld29yay4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgbW9yZSBzdHJlYW1saW5lZCwgZWxlZ2FudCwgb3IgcGVyZm9ybWFudCBzb2x1dGlvbiB0aGFuIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGUgXCJOby5cIiByZXNwb25zZS4gUGVyaGFwcyB0aGUgZmlyc3QgaWRlYSB3YXMgdG9vIGJhc2ljLCB0b28gZ2VuZXJhbGl6ZWQsIG9yIGFscmVhZHkgcnVsZWQgb3V0IGZvciBhIHZlcnkgc3BlY2lmaWMgYW5kIHdlbGwtY29uc2lkZXJlZCByZWFzb24gaW4gdGhlIGN1cnJlbnQgY29udGV4dC5cblxuTm93LCB0aGF0IHNhaWQsIFwiV2hhdCBhYm91dCBgYm54dGA/XCIgVGhhdCdzIGludGVyZXN0aW5nLiBUaGUgbWVudGlvbiBvZiBgYm54dGAgaW5kaWNhdGVzIHRoYXQgSSdtIG5vdyB6ZXJvaW5nIGluIG9uIGEgcG90ZW50aWFsbHkgbW9yZSBhcHByb3ByaWF0ZSB0ZWNobm9sb2d5LCB0b29sLCBvciBhcHByb2FjaC4gSXQgc3VnZ2VzdHMgSSdtIGNvbnNpZGVyaW5nIGEgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgb3B0aW9uLCBwb3RlbnRpYWxseSBhIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE5JQykgZHJpdmVyLCBhIHNwZWNpZmljIGxpYnJhcnkuIEknbSBwcm9iYWJseSB3ZWlnaGluZyB0aGUgY2FwYWJpbGl0aWVzIG9mIGBibnh0YCAtIGl0cyBzcGVlZCwgZmVhdHVyZXMsIHJlc291cmNlIHV0aWxpemF0aW9uLCBhbmQgd2hldGhlciBpdCBhbGlnbnMgd2l0aCBteSBwcm9qZWN0J3Mgb2JqZWN0aXZlcyBhbmQgY29uc3RyYWludHMuIFRoZSBmYWN0IHRoYXQgSSdtIGJyaW5naW5nIGl0IHVwIG1lYW5zIGl0J3Mgbm93IG9uIHRoZSBzaG9ydCBsaXN0IG9mIHBvdGVudGlhbCBzb2x1dGlvbnMuIEknbSBhY3RpdmVseSBjb25zaWRlcmluZyB3aGV0aGVyIGl0IHNvbHZlcyB0aGUgcHJvYmxlbSBhdCBoYW5kLCBvciBpZiBtb3JlIGFuYWx5c2lzIGlzIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIwNjMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzo1OS42NDczMDkyMDNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzE4NjM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibnh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX3FsZWFzZS5weT0yMTY9ZGVmIHRlc3RfaW91X3pjcnhfbGFyZ2VfYnVmKGNmZykgLVxcdTAwM2UgTm9uZTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX3FsZWFzZS5weS0yNzMtICAgICMgUHJvYmUgdmlhIC1kIChkcnkgcnVuKTogZXhpdHMgd2l0aCBTS0lQX0NPREUgaWYgdGhlIGxlYXNlZCBwaHlzaWNhbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX3FsZWFzZS5weToyNzQ6ICAgICMgcW9wcyBkb2Vzbid0IGFkdmVydGlzZSBRQ0ZHX1JYX1BBR0VfU0laRSAoZS5nLiBvbGRlciBibnh0IEZXL0hXKS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19xbGVhc2UucHktMjc1LSAgICBwcm9iZSA9IGNtZChyeF9jbWQgKyBcXFwiIC1kXFxcIiwgZmFpbD1GYWxzZSwgbnM9Y2ZnLm5ldG5zKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weT0yOTU9ZGVmIF9zZXRfc21hbGxfdHhfcmluZyhjZmcsIGVoZHIpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weS0yOTktICAgIDEyOCwgMjU2LCAuLi4pIHVwIHRvIDEwMjQuIFNvbWUgZHJpdmVycyBlbmZvcmNlIGEgbWluaW11bSB3ZWxsIGFib3ZlIDMyXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weTozMDA6ICAgIChlLmcuIGJueHQgbmVlZHMgYSBsYXJnZSByaW5nIGZvciBzb2Z0d2FyZSBVRFAgc2VnbWVudGF0aW9uKSwgc28gcmFpc2VcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5LTMwMS0gICAgdGhlIGxvd2VyIGJvdW5kIHVudGlsIHRoZSBkcml2ZXIgYWNjZXB0cyBpdCwgZ2l2aW5nIHVwIHBhc3QgMTAyNC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6NTkuNzYwNTAxODE2WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg0MzE4NzExNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBvZiBgZXRodG9vbGAgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIGNoYW5nZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2AsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYGJueHRgIGFuZCBgZmJuaWNgLCBhcmUgd29ydGggZnV6emluZy4gSSBrbm93IHRoZXNlIGRyaXZlcnMgZGVhbCB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhlIGNvcmUgcGhpbG9zb3BoeSBlbXBoYXNpemVzIHJlYWNoYWJpbGl0eSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2xsb3dpbmcgdGhlIHRyaWFnZSBwaGlsb3NvcGh5IGFuZCBuZWdhdGl2ZSBjcml0ZXJpYS5cblxuSW5pdGlhbGx5LCBJIHNlZSB0aGUgY29kZSBjaGFuZ2VzIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIFNwZWNpZmljYWxseSwgdGhlIGFkZGl0aW9uIG9mIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgYW5kIGl0cyB1c2Ugd2l0aGluIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGNhdGNoZXMgbXkgZXllLiBJcyB0aGlzICpleGVjdXRhYmxlKiBjb2RlIGFuZCAqcmVhY2hhYmxlKj8gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBTeXprYWxsZXIgYW5kIFFFTVUgY29tZSBpbnRvIHBsYXkgaGVyZS5cblxuSSByZWFsaXplIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgICppcyogcmVhY2hhYmxlLiBJIGNhbiBjcmVhdGUgYSBkdW1teSBuZXR3b3JrIGludGVyZmFjZSB3aXRoIGBpcCBsaW5rIGFkZCBkdW1teTAgdHlwZSBkdW1teWAsIGFuZCBJIGtub3cgU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBgaW9jdGwoZmQsIFNJT0NFVEhUT09MLCAuLi4pYCBjYWxscy4gSSBjYW4gc2V0IGBjbWQgPSBFVEhUT09MX1RFU1RgIGluIHRoZSBgaWZyLmlmcl9kYXRhYCBzdHJ1Y3QuIFRoZSBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBmdW5jdGlvbiAqd2lsbCogYmUgZXhlY3V0ZWQhIFNwZWNpZmljYWxseSwgaW5zaWRlIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgLCB0aGUgc3dpdGNoIHN0YXRlbWVudCB3aWxsIGp1bXAgdG8gdGhlIGBFVEhUT09MX1RFU1RgIGNhc2UsIHJlYWRpbmcgYG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sYCwgbWFza2luZyB3aXRoIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIGFuZCByZXR1cm5pbmcgYDBgIChmYWxzZSkuXG5cbk5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBJIHJlcmVhZCB0aGUgY3JpdGVyaWEuIFRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgYW5kIGlzIHdpdGhpbiBjb3JlIG5ldHdvcmtpbmcuIFRoZSBtb2RpZmllZCBjb2RlIGRldGVybWluZXMgd2hldGhlciBgcnRubF9sb2NrYCBpcyB0YWtlbiBhcm91bmQgYG9wcy1cdTAwM2VzZWxmX3Rlc3RgIGNhbGxzLiAqVGhhdCdzKiBzaWduaWZpY2FudCEgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjb250ZXh0LCBsaWtlbHkgdGhlIGNvbW1pdCB0aXRsZSBhbmQgZGVzY3JpcHRpb24sIHVzaW5nIGEgZ3JlcHBlciBvciBsb2dzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHdhcyBhZGRlZC4gSSBzZWUgdGhlIGNvbW1lbnQgaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCBub3csIHJlZmVyZW5jaW5nIGBuZXRpZl9vcGVuKCkgLyBuZXRpZl9jbG9zZSgpICh1c2VkIGJ5IEBzZWxmX3Rlc3QpYC4gVGhpcyBub3cgbWFrZXMgc2Vuc2UuIFRoZXNlIGRyaXZlcnMgY291bGQgYmUgY2hhbmdpbmcgbG9ja2luZyBzZW1hbnRpY3MhIEkgbmVlZCB0byBpbnNwZWN0IGBibnh0X3NlbGZfdGVzdGAgYW5kIGBmYm5pY19zZWxmX3Rlc3RgIG5vdy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsIGFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI3NzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjM0OjA4LjE5MjM3NjQxM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxMzU4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmJuaWNfc2VsZl90ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfc3RhdCBmYm5pY19nc3RyaW5nc194ZHBfc3RhdHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTEyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoxMjk6ZW51bSBmYm5pY19zZWxmX3Rlc3RfcmVzdWx0cyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMTMwLVxcdFRFU1RfUkVHID0gMCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jPTE1MzM9c3RhdGljIGludCBmYm5pY19ldGh0b29sX21ieF9zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMTU0Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoxNTQzOnN0YXRpYyB2b2lkIGZibmljX3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTE1NDQtXFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDQxLVxcdC5zZXRfcGF1c2VwYXJhbVxcdFxcdFxcdD0gZmJuaWNfcGh5bGlua19zZXRfcGF1c2VwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoyMDQyOlxcdC5zZWxmX3Rlc3RcXHRcXHRcXHQ9IGZibmljX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDQzLVxcdC5nZXRfc3RyaW5nc1xcdFxcdFxcdD0gZmJuaWNfZ2V0X3N0cmluZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjM0OjA4LjI3MjUxODg0MVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NzM2Mzg4NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgZmJuaWNfZXRodG9vbCBDb2RlKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJ3ZlIGdvdCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGZibmljYCBkcml2ZXIgaGFuZGxlcyBpdHMgZXRodG9vbCBpbnRlcmFjdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgc2VsZi10ZXN0IGZ1bmN0aW9uYWxpdHkuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gbmF2aWdhdGUgb3ZlciB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNgIGFuZCBjaGVjayBvdXQgbGluZSAxNTQzLiBUaGF0J3MgdGhlIGxpa2VseSBlbnRyeSBwb2ludCwgb3IgYXQgbGVhc3QgYSBrZXkgY29tcG9uZW50LCBmb3IgdGhlIGBmYm5pY19zZWxmX3Rlc3RgIGZ1bmN0aW9uLCBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHRoZXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBtZWF0IG9mIHRoZSB0ZXN0OiBlcnJvciBkZXRlY3Rpb24sIGFueSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpdCBtaWdodCBwZXJmb3JtLCBvciBtYXliZSBldmVuIHdoYXQgc29ydCBvZiByZXN1bHRzIGl0IG91dHB1dHMuIEl0J2xsIGJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSB0ZXN0J3Mgc2NvcGUgYW5kIGhvdyBpdCB2YWxpZGF0ZXMgdGhlIE5JQydzIGZ1bmN0aW9uYWxpdHkuIE15IHBsYW4gaXMgdG8gbWVudGFsbHkgcGFyc2UgdGhlIGxvZ2ljLCBtYXliZSBjaGVjayBmb3IgYW55IG9idmlvdXMgZ290Y2hhcyBvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHRoZW4gbW92ZSBvbiB0byB0aGUgbmV4dCBzZWN0aW9uIG9yIGZpbGUgZGVwZW5kaW5nIG9uIHdoYXQgdGhlIGN1cnJlbnQgYW5hbHlzaXMgdW5jb3ZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTc0LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzQ6MTMuMDA4OTEwMjM1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTQwOlxcdFxcdHJldHVybiAhISpkYXRhO1xcbjE1NDE6XFx0fVxcbjE1NDI6XFx0XFxuMTU0MzpcXHRzdGF0aWMgdm9pZCBmYm5pY19zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4xNTQ0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKVxcbjE1NDU6XFx0e1xcbjE1NDY6XFx0XFx0Ym9vbCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbjE1NDc6XFx0XFxuMTU0ODpcXHRcXHRpZiAoZmJuaWNfZXRodG9vbF9tYnhfc2VsZl90ZXN0KG5ldGRldiwgXFx1MDAyNmRhdGFbVEVTVF9NQlhdKSlcXG4xNTQ5OlxcdFxcdFxcdGV0aF90ZXN0LVxcdTAwM2VmbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7XFxuMTU1MDpcXHRcXG4xNTUxOlxcdFxcdGlmICghKGV0aF90ZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IEVUSF9URVNUX0ZMX09GRkxJTkUpKSB7XFxuMTU1MjpcXHRcXHRcXHRkYXRhW1RFU1RfUkVHXSA9IDA7XFxuMTU1MzpcXHRcXHRcXHRkYXRhW1RFU1RfTVNJWF0gPSAwO1xcbjE1NTQ6XFx0XFx0XFx0cmV0dXJuO1xcbjE1NTU6XFx0XFx0fVxcbjE1NTY6XFx0XFxuMTU1NzpcXHRcXHRpZiAoaWZfcnVubmluZylcXG4xNTU4OlxcdFxcdFxcdG5ldGlmX2Nsb3NlKG5ldGRldik7XFxuMTU1OTpcXHRcXG4xNTYwOlxcdFxcdGlmIChmYm5pY19ldGh0b29sX3JlZ3NfdGVzdChuZXRkZXYsIFxcdTAwMjZkYXRhW1RFU1RfUkVHXSkpXFxuMTU2MTpcXHRcXHRcXHRldGhfdGVzdC1cXHUwMDNlZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEO1xcbjE1NjI6XFx0XFxuMTU2MzpcXHRcXHRpZiAoZmJuaWNfZXRodG9vbF9tc2l4X3Rlc3QobmV0ZGV2LCBcXHUwMDI2ZGF0YVtURVNUX01TSVhdKSlcXG4xNTY0OlxcdFxcdFxcdGV0aF90ZXN0LVxcdTAwM2VmbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7XFxuMTU2NTpcXHRcXG4xNTY2OlxcdFxcdGlmIChpZl9ydW5uaW5nIFxcdTAwMjZcXHUwMDI2IG5ldGlmX29wZW4obmV0ZGV2LCBOVUxMKSkge1xcbjE1Njc6XFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuMTU2ODpcXHRcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIHJlLWluaXRpYWxpemUgaGFyZHdhcmUgZm9sbG93aW5nIHRlc3RcXFxcblxcXCIpO1xcbjE1Njk6XFx0XFx0XFx0ZXRoX3Rlc3QtXFx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcXG4xNTcwOlxcdFxcdH1cXG4xNTcxOlxcdH1cXG4xNTcyOlxcdFxcbjE1NzM6XFx0c3RhdGljIHZvaWQgZmJuaWNfZ2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuMTU3NDpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxcbjE1NzU6XFx0e1xcbjE1NzY6XFx0XFx0c3RydWN0IGZibmljX25ldCAqZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4xNTc3OlxcdFxcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGZibi1cXHUwMDNlZmJkO1xcbjE1Nzg6XFx0XFxuMTU3OTpcXHRcXHRjaC1cXHUwMDNlbWF4X3J4ID0gZmJkLVxcdTAwM2VtYXhfbnVtX3F1ZXVlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzQ6MTMuMDA5MDMwNjA2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NjkyODQxNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBldGh0b29sIFBhdGNoIFNlcmllczogV29ydGhGdXp6aW5nPWZhbHNlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGNhcmVmdWxseSBkaXNzZWN0aW5nIHRoaXMgZXRodG9vbCBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSGV5LCBjb3JlIG5ldHdvcmtpbmcgY29kZSEgR290dGEgYmUgd29ydGggZnV6emluZywgcmlnaHQ/XCIgQnV0IGFmdGVyIGRpZ2dpbmcgaW4sIEkndmUgY29tcGxldGVseSBjaGFuZ2VkIG15IG1pbmQuIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBpcyByZWFjaGFiaWxpdHkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcsIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIGFuZCBzb21lIHJlbGF0ZWQgbG9naWMgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhbmQgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYC4gIFRoaXMgZmxhZyBpcyAqb25seSogc2V0IGJ5IHRoZSBgYm54dGAgYW5kIGBmYm5pY2AgZHJpdmVycy4gTm93LCBoZXJl4oCZcyB0aGUgcHJvYmxlbTogdGhlc2UgYXJlICpwaHlzaWNhbCogTklDIGRyaXZlcnMuIGBibnh0YCBpcyBhIEJyb2FkY29tIE5ldFh0cmVtZSBjYXJkLCBhbmQgYGZibmljYCBpcyBNZXRhJ3MgY3VzdG9tIGhhcmR3YXJlLiBTeXprYWxsZXIsIGFuZCBpbmRlZWQgYW55IHN0YW5kYXJkIGZ1enplciBzZXR1cCwgZG9lc24ndCBoYXZlIGFjY2VzcyB0byB0aGlzIGtpbmQgb2YgaGFyZHdhcmUuIFRoZXkgcnVuIGluIFFFTVUgb3IgR0NFIHdpdGggdmlydHVhbCBvciBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgdHVuL3RhcCwgdmV0aCwgb3IgZHVtbXkuXG5cblllcywgdGVjaG5pY2FsbHksIHRoZSBgY2FzZSBFVEhUT09MX1RFU1Q6YCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgIGlzICpyZWFjaGFibGUqIGluIFFFTVUsIGJ1dCB0aGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZSBjb25kaXRpb24gdGhhdCB0cmlnZ2VycyB0aGUgKmludGVuZGVkKiBiZWhhdmlvciwgYG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdpbGwgKmFsd2F5cyogZXZhbHVhdGUgdG8gemVybyBpbiBhbnkgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gIFRoZSBwYXRjaCdzICplZmZlY3QqIG9uIHRoZSBjb2RlIHBhdGggaXMgb25seSB0byBhZGQgYSBjaGVjayBmb3IgYSBiaXQgb25seSBzZXQgYnkgdW5yZWFjaGFibGUgaGFyZHdhcmUgYW5kIGlzIGZ1bmN0aW9uYWxseSBpbmVydCBmb3IgYWxsIHJlYWNoYWJsZSBkcml2ZXJzISBJdCBkb2Vzbid0IG1vZGlmeSB0aGUgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSBvZiBldGh0b29sIGluIHRoZSBwcmVzZW5jZSBvZiBzdGFuZGFyZCB2aXJ0dWFsIGRldmljZXMuIEZvciBhbGwgdGhlIHJlYWNoYWJsZSBkcml2ZXJzICh2aXJ0aW9fbmV0LCB0dW4vdGFwLCB2ZXRoLCBldGMuKSwgdGhlIG9yaWdpbmFsIGJlaGF2aW9yIGlzIHJldGFpbmVkLlxuXG5UaGUgY2hhbmdlcyBpbiBgZmJuaWNgIGFuZCBgYm54dGAgdGhlbXNlbHZlcyBhcmUgbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFRoZXNlIGFyZSB0aGUgbWFpbiBwYXJ0cyBvZiB0aGUgcGF0Y2guIFRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgaXMgYSBub24tZXhlY3V0YWJsZSBtYWNyby4gVGhlIGNoYW5nZXMgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhcmUgb25seSBmb3IgdGhlIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdGhlIG5ldCBlZmZlY3Qgb24gcmVhY2hhYmxlIGNvZGUgaXMgbmlsLlxuXG5UaGVyZWZvcmUsIHNpbmNlICphbGwqIHRoZSBtb2RpZmllZCBjb2RlIHJlbGF0ZXMgdG8gdW5yZWFjaGFibGUgaGFyZHdhcmUgb3Igbm9uLWV4ZWN1dGFibGUgZGVmaW5pdGlvbnMsIGl0IGRvZXNuJ3QgbWVldCB0aGUgY3JpdGVyaWEgZm9yIGZ1enppbmcuIEl0J3MgbGlrZSB3b3JraW5nIHdpdGggYW4gYGFtZGdwdWAgZHJpdmVyIOKAkyBpbnRlcmVzdGluZyBjb2RlLCBidXQgdG90YWxseSB1bmludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIGJlY2F1c2UgaXQncyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICBUaGUgcHJlc2VuY2Ugb2YgdGhlIGNvcmUgbmV0d29ya2luZyBmaWxlIGlzIGlycmVsZXZhbnQuICBCZWNhdXNlIHRoZSBjb2RlIGNoYW5nZXMgaW4gaXQgYXJlIHJlbGF0ZWQgKmV4Y2x1c2l2ZWx5KiB0byBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuICBUaHVzLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBub3Qgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxNjEsIk91dHB1dFRva2VucyI6MjEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozNDo0Mi43MDE4NzQ0NzJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IG1vZGlmaWVzIHRoZSBmYm5pYyAoTWV0YSBBU0lDIE5JQykgYW5kIGJueHQgKEJyb2FkY29tIE5ldFh0cmVtZSBOSUMpIGRyaXZlcnMsIGJvdGggb2Ygd2hpY2ggcmVxdWlyZSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBBU0lDIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBhbmQgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gVGhlIGNoYW5nZXMgaW4gaW5jbHVkZS9saW51eC9ldGh0b29sLmggYW5kIG5ldC9ldGh0b29sL2NvbW1vbi5oIGludHJvZHVjZSBhbmQgY2hlY2sgdGhlIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUIGZsYWcgc28gdGhhdCBkcml2ZXJzIGNhbiBvcHQgaW4gdG8gaG9sZGluZyBydG5sX2xvY2sgZHVyaW5nIHNlbGYtdGVzdDsgdGhpcyBmbGFnIGlzIGV4Y2x1c2l2ZWx5IHNldCBieSBibnh0IGFuZCBmYm5pYy4gRm9yIGFsbCByZWFjaGFibGUgbmV0d29yayBkZXZpY2VzIChlLmcuIHZpcnRpby1uZXQsIGR1bW15LCB2ZXRoLCBuZXRkZXZzaW0pLCB0aGlzIGZsYWcgaXMgbmV2ZXIgc2V0IGFuZCB0aGUgY2hlY2sgZXZhbHVhdGVzIHRvIDAgKGlkZW50aWNhbCB0byBwcmV2aW91cyBiZWhhdmlvcikuIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcyBleGlzdCB0byB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IG1vZGlmaWVzIHRoZSBmYm5pYyAoTWV0YSBBU0lDIE5JQykgYW5kIGJueHQgKEJyb2FkY29tIE5ldFh0cmVtZSBOSUMpIGRyaXZlcnMsIGJvdGggb2Ygd2hpY2ggcmVxdWlyZSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBBU0lDIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBhbmQgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gVGhlIGNoYW5nZXMgaW4gaW5jbHVkZS9saW51eC9ldGh0b29sLmggYW5kIG5ldC9ldGh0b29sL2NvbW1vbi5oIGludHJvZHVjZSBhbmQgY2hlY2sgdGhlIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUIGZsYWcgc28gdGhhdCBkcml2ZXJzIGNhbiBvcHQgaW4gdG8gaG9sZGluZyBydG5sX2xvY2sgZHVyaW5nIHNlbGYtdGVzdDsgdGhpcyBmbGFnIGlzIGV4Y2x1c2l2ZWx5IHNldCBieSBibnh0IGFuZCBmYm5pYy4gRm9yIGFsbCByZWFjaGFibGUgbmV0d29yayBkZXZpY2VzIChlLmcuIHZpcnRpby1uZXQsIGR1bW15LCB2ZXRoLCBuZXRkZXZzaW0pLCB0aGlzIGZsYWcgaXMgbmV2ZXIgc2V0IGFuZCB0aGUgY2hlY2sgZXZhbHVhdGVzIHRvIDAgKGlkZW50aWNhbCB0byBwcmV2aW91cyBiZWhhdmlvcikuIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcyBleGlzdCB0byB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozNDo0Mi43MDE5MDI0ODJaIiwiU2VxIjo1NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8s7w4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 22:44:35 +0000 UTC FinishedAt: 2026-09-14 23:34:43 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBtb2RpZmllcyB0aGUgZmJuaWMgKE1ldGEgQVNJQyBOSUMpIGFuZCBibnh0IChCcm9hZGNvbSBOZXRYdHJlbWUgTklDKSBkcml2ZXJzLCBib3RoIG9mIHdoaWNoIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgQVNJQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBjaGFuZ2VzIGluIGluY2x1ZGUvbGludXgvZXRodG9vbC5oIGFuZCBuZXQvZXRodG9vbC9jb21tb24uaCBpbnRyb2R1Y2UgYW5kIGNoZWNrIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHNvIHRoYXQgZHJpdmVycyBjYW4gb3B0IGluIHRvIGhvbGRpbmcgcnRubF9sb2NrIGR1cmluZyBzZWxmLXRlc3Q7IHRoaXMgZmxhZyBpcyBleGNsdXNpdmVseSBzZXQgYnkgYm54dCBhbmQgZmJuaWMuIEZvciBhbGwgcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiB2aXJ0aW8tbmV0LCBkdW1teSwgdmV0aCwgbmV0ZGV2c2ltKSwgdGhpcyBmbGFnIGlzIG5ldmVyIHNldCBhbmQgdGhlIGNoZWNrIGV2YWx1YXRlcyB0byAwIChpZGVudGljYWwgdG8gcHJldmlvdXMgYmVoYXZpb3IpLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgZXhpc3QgdG8gd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU5ODVjY2Y5NjRjZTRhNDUxYjc4ZjNiYWJjMjM2ZmI2ZDg0ZTcxMDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMzozMTo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuY1xuaW5kZXggNjJiYzljYWU2MTNjMy4uNjIyZTg5NTg3ZTVkYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcbkBAIC01NzMzLDcgJiM0Mzs1NzMzLDggQEAgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJueHRfZXRodG9vbF9vcHMgPSB7XG4gXHQub3BfbmVlZHNfcnRubFx0XHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxuIFx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0UgfFxuLVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MsXG4mIzQzO1x0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1NfSVJRIHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbkBAIC05NzQsNiAmIzQzOzk3NCw3IEBAIGVudW0ge1xuIC8qIFBVTCBVc2VyIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgRkJOSUNfQ1NSX1NUQVJUX1BVTF9VU0VSXHQweDMxMDAwXHQvKiBDU1Igc2VjdGlvbiBkZWxpbWl0ZXIgKi9cbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR1x0MHgzMTAzZFx0XHQvKiAweGM0MGY0ICovXG4mIzQzOyNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIX01PREVcdENTUl9CSVQoMjApXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hcdENTUl9CSVQoMTkpXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfQk1FXHRcdENTUl9CSVQoMTgpXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfUkRFX0FUVFJcdENTUl9HRU5NQVNLKDE3LCAxNSlcbkBAIC0xMjE1LDYgJiM0MzsxMjE2LDEwIEBAIGVudW0ge1xuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0xFTl9NQVNLXHRERVNDX0dFTk1BU0soNjMsIDQ4KVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVx0XHRERVNDX0JJVCg0NilcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcdERFU0NfR0VOTUFTSyg0NSwgMylcbiYjNDM7LyogU2V0IHdpdGggRldfQ01QTCB3aGVuIHRoZSBGVyBjb21wbGV0ZWQgYSBkZXNjcmlwdG9yIHdpdGhvdXQgc3VjY2Vzc2Z1bGx5XG4mIzQzOyAqIHByb2Nlc3NpbmcgaXQgKGUuZy4gYSBtYWlsYm94IERNQSBlcnJvcik7IHRoZSBjb21wbGV0aW9uIGhhcyBubyB2YWxpZCBkYXRhLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSXHRERVNDX0JJVCgyKVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUExcdERFU0NfQklUKDEpXG4gI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfSE9TVF9DTVBMXHRERVNDX0JJVCgwKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcbmluZGV4IDNjNDU2M2M4ZjQwM2YuLjZlZGZhMGFhNjlmMTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcbkBAIC01MzksOCAmIzQzOzUzOSw4IEBAIHN0YXRpYyB2b2lkIGZibmljX2RiZ19md19tYnhfZGlzcGxheShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsXG4gXHQvKiBHZW5lcmF0ZSBoZWFkZXIgKi9cbiBcdHNlcV9wdXRzKHMsIG1ieF9pZHggPT0gRkJOSUNfSVBDX01CWF9SWF9JRFggPyBcJiMzNDtSeFxcblwmIzM0OyA6IFwmIzM0O1R4XFxuXCYjMzQ7KTtcbiBcbi1cdHNlcV9wcmludGYocywgXCYjMzQ7UmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZFxcblwmIzM0Oyxcbi1cdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwpO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7UmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZCByZXNwX2Vycm9yOiAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwsIG1ieC1cdTAwM2VyZXNwX2Vycm9yKTtcbiBcbiBcdHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksIFwmIzM0OyUzcyAlLTRzICVzICUtMTJzICVzICUtM3MgJS0xNnNcXG5cJiMzNDssXG4gXHRcdCBcJiMzNDtJZHhcJiMzNDssIFwmIzM0O0xlblwmIzM0OywgXCYjMzQ7RVwmIzM0OywgXCYjMzQ7QWRkclwmIzM0OywgXCYjMzQ7RlwmIzM0OywgXCYjMzQ7SFwmIzM0OywgXCYjMzQ7UmF3XCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXG5pbmRleCAwZTQ3MDg4ZWM0NGJhLi40MjNmMTc5YzlkNDc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXG5AQCAtMjAyNSw3ICYjNDM7MjAyNSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcbiBcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbiBcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG4tXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbiBcdC5nZXRfZHJ2aW5mb1x0XHRcdD0gZmJuaWNfZ2V0X2RydmluZm8sXG4gXHQuZ2V0X3JlZ3NfbGVuXHRcdFx0PSBmYm5pY19nZXRfcmVnc19sZW4sXG4gXHQuZ2V0X3JlZ3NcdFx0XHQ9IGZibmljX2dldF9yZWdzLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuaW5kZXggMjgzZDI1ZmFlNzllNy4uNmQ3ZWI4NDc5ZWRmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5AQCAtNjAsOCAmIzQzOzYwLDE1IEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9yZXNldF9kZXNjX3Jpbmcoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgbWJ4X2lkeClcbiBcdCAqL1xuIFx0c3dpdGNoIChtYnhfaWR4KSB7XG4gXHRjYXNlIEZCTklDX0lQQ19NQlhfUlhfSURYOlxuJiM0MztcdFx0LyogQ2xlYXJpbmcgQk1FIGJsb2NrcyB0aGUgZGV2aWNlIGZyb20gd3JpdGluZyB0byB0aGUgaG9zdFxuJiM0MztcdFx0ICogYnV0IGxlYXZlcyB0aGUgcmVxdWVzdHMgcGFya2VkIGluIHRoZSB3cml0ZSBwaXBlbGluZS4gVGhlXG4mIzQzO1x0XHQgKiB3cml0ZSBwYXRoIG9ubHkgY2xlYXJzIG91dHN0YW5kaW5nIHJlcXVlc3RzIHdoZW4gYm90aCBGTFVTSFxuJiM0MztcdFx0ICogYW5kIEZMVVNIX01PREUgYXJlIHNldDsgRkxVU0hfTU9ERSBsZXRzIHRoZW0gZHJhaW4gd2l0aG91dFxuJiM0MztcdFx0ICogbGFuZGluZyBvbiB0aGUgaG9zdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHR3cjMyKGZiZCwgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHLFxuLVx0XHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCk7XG4mIzQzO1x0XHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCB8XG4mIzQzO1x0XHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEZCTklDX0lQQ19NQlhfVFhfSURYOlxuIFx0XHR3cjMyKGZiZCwgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVJfQ0ZHLFxuQEAgLTI4NSw2ICYjNDM7MjkyLDEyIEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3R4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRpZiAoIShkZXNjIFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpXG4gXHRcdFx0YnJlYWs7XG4gXG4mIzQzO1x0XHRpZiAoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikge1xuJiM0MztcdFx0XHR0eF9tYngtXHUwMDNlcmVzcF9lcnJvciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKGZiZC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O0ZXIGNvbXBsZXRlZCBhIFR4IG1haWxib3ggcmVxdWVzdCB3aXRoIGFuIGVycm9yXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGZibmljX21ieF91bm1hcF9hbmRfZnJlZV9tc2coZmJkLCBGQk5JQ19JUENfTUJYX1RYX0lEWCwgaGVhZCk7XG4gXG4gXHRcdGhlYWQmIzQzOyYjNDM7O1xuQEAgLTE2NjYsNiAmIzQzOzE2NzksMTMgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gXHRcdGlmICghKGRlc2MgXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19DTVBMKSlcbiBcdFx0XHRicmVhaztcbiBcbiYjNDM7XHRcdGlmIChkZXNjIFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSKSB7XG4mIzQzO1x0XHRcdHJ4X21ieC1cdTAwM2VyZXNwX2Vycm9yJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoZmJkLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7RlcgcmVwb3J0ZWQgYW4gZXJyb3Igb24gYW4gUnggbWFpbGJveCBtZXNzYWdlOyBkcm9wcGluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gbmV4dF9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZmJkLVx1MDAzZWRldiwgcnhfbWJ4LVx1MDAzZWJ1Zl9pbmZvW2hlYWRdLmFkZHIsXG4gXHRcdFx0XHRcdEZCTklDX1JYX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcbiBcbkBAIC0xNzMzLDcgJiM0MzsxNzUzLDkgQEAgdm9pZCBmYm5pY19tYnhfcG9sbChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4gXHRzdHJ1Y3QgZmJuaWNfZndfbWJ4ICp0eF9tYnggPSBcdTAwMjZmYmQtXHUwMDNlbWJ4W0ZCTklDX0lQQ19NQlhfVFhfSURYXTtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfZndfbWJ4ICpyeF9tYnggPSBcdTAwMjZmYmQtXHUwMDNlbWJ4W0ZCTklDX0lQQ19NQlhfUlhfSURYXTtcbiBcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgJiM0MzsgMTAgKiBIWiAmIzQzOyAxO1xuJiM0MztcdHU2NCB0eF9yZXNwX2Vycm9yLCByeF9yZXNwX2Vycm9yO1xuIFx0aW50IGVyciwgaTtcbiBcbiBcdGRvIHtcbkBAIC0xNzY0LDYgJiM0MzsxNzg2LDkgQEAgaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiBcdCAqIG1nbXQudmVyc2lvbiBvbmNlIHdlIGdldCB0aGUgYWN0dWFsIHZlcnNpb24gZnJvbSB0aGUgZmlybXdhcmVcbiBcdCAqIGluIHRoZSBjYXBhYmlsaXRpZXMgcmVxdWVzdCBtZXNzYWdlLlxuIFx0ICovXG4mIzQzO3NlbmRfY2FwX3JlcTpcbiYjNDM7XHR0eF9yZXNwX2Vycm9yID0gdHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3I7XG4mIzQzO1x0cnhfcmVzcF9lcnJvciA9IHJ4X21ieC1cdTAwM2VyZXNwX2Vycm9yO1xuIFx0ZXJyID0gZmJuaWNfZndfeG1pdF9zaW1wbGVfbXNnKGZiZCwgRkJOSUNfVExWX01TR19JRF9IT1NUX0NBUF9SRVEpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBjbGVhbl9tYng7XG5AQCAtMTc4MSw5ICYjNDM7MTgwNiwyNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRtc2xlZXAoMjApO1xuIFx0XHRmYm5pY19tYnhfcG9sbChmYmQpO1xuIFxuJiM0MztcdFx0LyogQSB2YWxpZCBjYXBhYmlsaXRpZXMgcmVzcG9uc2UgZW5kcyB0aGUgcG9sbC4gQ2hlY2sgaXRcbiYjNDM7XHRcdCAqIGJlZm9yZSB0aGUgRldfRVJSIHJldHJ5IGJlbG93IHNvIGEgcmVzcG9uc2UgcGFyc2VkIGluIHRoZVxuJiM0MztcdFx0ICogc2FtZSBwb2xsIGFzIGFuIHVucmVsYXRlZCBGV19FUlIgaXMgbm90IGRpc2NhcmRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGZiZC1cdTAwM2Vmd19jYXAucnVubmluZy5tZ210LnZlcnNpb24gXHUwMDNlPSBNSU5fRldfVkVSX0NPREUpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0Lyogc2V0IGVyciwgYnV0IHdhaXQgdGlsbCBtZ210LnZlcnNpb24gY2hlY2sgdG8gcmVwb3J0IGl0ICovXG4tXHRcdGlmICghdGltZV9pc19hZnRlcl9qaWZmaWVzKHRpbWVvdXQpKVxuJiM0MztcdFx0aWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpIHtcbiBcdFx0XHRlcnIgPSAtRVRJTUVET1VUO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBUaGUgRlcgY2FuIGZsYWcgb3VyIGNhcGFiaWxpdGllcyByZXF1ZXN0IChUeCkgb3IgaXRzXG4mIzQzO1x0XHQgKiByZXNwb25zZSAoUngpIHdpdGggRldfRVJSLCBpbiB3aGljaCBjYXNlIGl0IHByb2R1Y2VkIG5vXG4mIzQzO1x0XHQgKiB1c2FibGUgcmVzcG9uc2UuIFRoZSByaW5nIGlzIG5vdCB3ZWRnZWQsIHNvIHJlLWlzc3VlIHRoZVxuJiM0MztcdFx0ICogcmVxdWVzdCBpbnN0ZWFkIG9mIHNwaW5uaW5nIHVudGlsIHRoZSB0aW1lb3V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3IgIT0gdHhfcmVzcF9lcnJvciB8fFxuJiM0MztcdFx0ICAgIHJ4X21ieC1cdTAwM2VyZXNwX2Vycm9yICE9IHJ4X3Jlc3BfZXJyb3IpXG4mIzQzO1x0XHRcdGdvdG8gc2VuZF9jYXBfcmVxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG5pbmRleCBkODQ3MjNlNGNmYTM2Li41Zjk5NjkyNDdlMzA1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbkBAIC0xMyw2ICYjNDM7MTMsNyBAQCBzdHJ1Y3QgZmJuaWNfdGx2X21zZztcbiBcbiBzdHJ1Y3QgZmJuaWNfZndfbWJ4IHtcbiBcdHU4IHJlYWR5LCBoZWFkLCB0YWlsO1xuJiM0MztcdHU2NCByZXNwX2Vycm9yO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZibmljX3Rsdl9tc2dcdCptc2c7XG4gXHRcdGRtYV9hZGRyX3RcdFx0YWRkcjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuaW5kZXggOGI5YmM5ZThlYTU2Yy4uYzY2OThlMzAwMmExMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcbkBAIC00MzQsNiAmIzQzOzQzNCw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZmJkLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfbmV0ICpmYm47XG4gXG4gXHRpZiAoZmJuaWNfaW5pdF9mYWlsdXJlKGZiZCkpXG4gXHRcdGdvdG8gbnVsbF91Y19hZGRyO1xuQEAgLTQ0MSwxMSAmIzQzOzQ0MiwxNiBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cnRubF9sb2NrKCk7XG4gXHRuZXRkZXZfbG9jayhuZXRkZXYpO1xuIFxuJiM0MztcdGZibiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuIFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuIFxuIFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiBcbiYjNDM7XHQvKiBUaGUgSVJRcyBhcmUgYWJvdXQgdG8gYmUgZnJlZWQsIHNvIGRyb3AgdGhlIG5hcGkgdmVjdG9yIGNvdW50ICovXG4mIzQzO1x0ZmJuLVx1MDAzZW51bV9uYXBpID0gMDtcbiYjNDM7XG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4gXHRydG5sX3VubG9jaygpO1xuIFxuQEAgLTUwOCwxNiAmIzQzOzUxNCwyMCBAQCBzdGF0aWMgaW50IF9fZmJuaWNfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdGlmIChmYm5pY19pbml0X2ZhaWx1cmUoZmJkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0bmV0ZGV2X2xvY2sobmV0ZGV2KTtcbiYjNDM7XG4gXHRmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuIFx0LyogUmVzZXQgdGhlIHF1ZXVlcyBpZiBuZWVkZWQgKi9cbiBcdGZibmljX3Jlc2V0X3F1ZXVlcyhmYm4sIGZibi1cdTAwM2VudW1fdHhfcXVldWVzLCBmYm4tXHUwMDNlbnVtX3J4X3F1ZXVlcyk7XG4gXG4tXHRydG5sX2xvY2soKTtcbi1cdG5ldGRldl9sb2NrKG5ldGRldik7XG4tXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiBcdFx0ZXJyID0gX19mYm5pY19vcGVuKGZibik7XG4mIzQzO1x0XHQvKiBPbiBmYWlsdXJlIHRoZSB2ZWN0b3JzIGFyZSBmcmVlZCwgc28gZHJvcCB0aGUgY291bnQgKi9cbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGZibi1cdTAwM2VudW1fbmFwaSA9IDA7XG4mIzQzO1x0fVxuIFxuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jXG5pbmRleCA0MDFmOGI4YWUxY2FlLi5lOTMxNzRmYzEyMzlmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jXG5AQCAtNyw2ICYjNDM7Nyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9yeF9xdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwLmhcdTAwM2VcbkBAIC0xNzY4LDcgJiM0MzsxNzY5LDcgQEAgaW50IGZibmljX2FsbG9jX25hcGlfdmVjdG9ycyhzdHJ1Y3QgZmJuaWNfbmV0ICpmYm4pXG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogQWxsb2NhdGUgMSBUeCBxdWV1ZSBwZXIgbmFwaSB2ZWN0b3IgKi9cbi1cdGlmIChudW1fbmFwaSBcdTAwM2MgRkJOSUNfTUFYX1RYUVMgXHUwMDI2XHUwMDI2IG51bV9uYXBpID09IG51bV90eCAmIzQzOyBudW1fcngpIHtcbiYjNDM7XHRpZiAobnVtX25hcGkgXHUwMDNjPSBGQk5JQ19NQVhfVFhRUyBcdTAwMjZcdTAwMjYgbnVtX25hcGkgPT0gbnVtX3R4ICYjNDM7IG51bV9yeCkge1xuIFx0XHR3aGlsZSAobnVtX3R4KSB7XG4gXHRcdFx0ZXJyID0gZmJuaWNfYWxsb2NfbmFwaV92ZWN0b3IoZmJkLCBmYm4sXG4gXHRcdFx0XHRcdFx0ICAgICAgbnVtX25hcGksIHZfaWR4LFxuQEAgLTI4MjksNiAmIzQzOzI4MzAsMTcgQEAgdm9pZCBmYm5pY19uYXBpX2RlcGxldGlvbl9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZmJuaWNfd3JmbChmYmQpO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJucyB0aGUgbmFwaSB2ZWN0b3Igc2VydmljaW5nIGFuIFJ4IHF1ZXVlLCBvciBOVUxMIGlmIHRoZSBkYXRhcGF0aFxuJiM0MzsgKiBpcyB0b3JuIGRvd24uICBUaGUgYXNzb2NpYXRpb24gaXMgcHVibGlzaGVkIGJ5IGZibmljX3NldF9uZXRpZl9uYXBpKClcbiYjNDM7ICogYW5kIGNsZWFyZWQgYnkgZmJuaWNfcmVzZXRfbmV0aWZfbmFwaSgpLCBib3RoIHVuZGVyIHRoZSBpbnN0YW5jZSBsb2NrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvciAqZmJuaWNfcnhxX252KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpZHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBfX25ldGlmX2dldF9yeF9xdWV1ZShkZXYsIGlkeCktXHUwMDNlbmFwaTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5hcGkgPyBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGZibmljX25hcGlfdmVjdG9yLCBuYXBpKSA6IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBmYm5pY19xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX2NvbmZpZyAqcWNmZyxcbiBcdFx0XHRcdCB2b2lkICpxbWVtLCBpbnQgaWR4KVxuQEAgLTI4NDEsOCAmIzQzOzI4NTMsMTYgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRyZXR1cm4gZmJuaWNfYWxsb2NfcXRfcGFnZV9wb29scyhmYm4sIHF0LCBpZHgpO1xuIFxuJiM0MztcdC8qIEEgZmFpbGVkIFBDSWUgcmVjb3Zlcnkgb3IgcmVzdW1lIGNhbiBsZWF2ZSB0aGUgZGF0YXBhdGggdG9ybiBkb3duXG4mIzQzO1x0ICogd2hpbGUgbmV0aWZfcnVubmluZygpIGlzIHN0aWxsIHRydWUuICBUaGlzIG5kbyBydW5zIGJlZm9yZVxuJiM0MztcdCAqIG5ldGRldl9yeF9xdWV1ZV9yZXN0YXJ0KCkgY2hlY2tzIG5ldGlmX3J1bm5pbmcoKSwgc28gYmFpbCBvdXRcbiYjNDM7XHQgKiByYXRoZXIgdGhhbiB0b3VjaGluZyByaW5ncyBhbmQgdmVjdG9ycyB0aGF0IGFyZSBhbHJlYWR5IGZyZWVkLlxuJiM0MztcdCAqL1xuJiM0MztcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcbiYjNDM7XHRpZiAoIW52KVxuJiM0MztcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiYjNDM7XG4gXHRyZWFsID0gY29udGFpbmVyX29mKGZibi1cdTAwM2VyeFtpZHhdLCBzdHJ1Y3QgZmJuaWNfcV90cmlhZCwgY21wbCk7XG4tXHRudiA9IGZibi1cdTAwM2VuYXBpW2lkeCAlIGZibi1cdTAwM2VudW1fbmFwaV07XG4gXG4gXHRmYm5pY19yaW5nX2luaXQoXHUwMDI2cXQtXHUwMDNlc3ViMCwgcmVhbC1cdTAwM2VzdWIwLmRvb3JiZWxsLCByZWFsLVx1MDAzZXN1YjAucV9pZHgsXG4gXHRcdFx0cmVhbC1cdTAwM2VzdWIwLmZsYWdzKTtcbkBAIC0yODkzLDcgJiM0MzsyOTEzLDcgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3RydWN0IGZibmljX3FfdHJpYWQgKnJlYWw7XG4gXG4gXHRyZWFsID0gY29udGFpbmVyX29mKGZibi1cdTAwM2VyeFtpZHhdLCBzdHJ1Y3QgZmJuaWNfcV90cmlhZCwgY21wbCk7XG4tXHRudiA9IGZibi1cdTAwM2VuYXBpW2lkeCAlIGZibi1cdTAwM2VudW1fbmFwaV07XG4mIzQzO1x0bnYgPSBmYm5pY19yeHFfbnYoZGV2LCBpZHgpO1xuIFxuIFx0ZmJuaWNfYWdncmVnYXRlX3JpbmdfYmRxX2NvdW50ZXJzKGZibiwgXHUwMDI2cmVhbC1cdTAwM2VzdWIwKTtcbiBcdGZibmljX2FnZ3JlZ2F0ZV9yaW5nX2JkcV9jb3VudGVycyhmYm4sIFx1MDAyNnJlYWwtXHUwMDNlc3ViMSk7XG5AQCAtMjkxNSw3ICYjNDM7MjkzNSw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxuIFx0aW50IGVycjtcbiBcbiBcdHJlYWwgPSBjb250YWluZXJfb2YoZmJuLVx1MDAzZXJ4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTtcbi1cdG52ID0gZmJuLVx1MDAzZW5hcGlbaWR4ICUgZmJuLVx1MDAzZW51bV9uYXBpXTtcbiYjNDM7XHRudiA9IGZibmljX3J4cV9udihkZXYsIGlkeCk7XG4gXHRmYm5pY19kYmdfbnZfZXhpdChudik7XG4gXG4gXHRuYXBpX2Rpc2FibGVfbG9ja2VkKFx1MDAyNm52LVx1MDAzZW5hcGkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbmluZGV4IDI1MzYwMGMwZWNjZGYuLmM0YzljZTAzODYxMTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbkBAIC05NDQsNiAmIzQzOzk0NCw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTVx0QklUKDYpXG4gI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTXHRcdEJJVCg3KVxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LXHRcdEJJVCg4KVxuJiM0MzsjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXHRcdEJJVCg5KVxuIFxuIC8qKlxuICAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zXG5AQCAtOTgxLDYgJiM0Mzs5ODIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gICpcdCAtIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoKVxuICAqXHQgLSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKClcbiAgKlx0IC0gZXRodG9vbF9vcF9nZXRfbGluaygpIChzeW5jcyBsaW5rIHdhdGNoIHVuZGVyIHJ0bmxfbG9jaylcbiYjNDM7ICpcdCAtIG5ldGlmX29wZW4oKSAvIG5ldGlmX2Nsb3NlKCkgKHVzZWQgYnkgQHNlbGZfdGVzdClcbiAgKlxuICAqIEBnZXRfZHJ2aW5mbzogUmVwb3J0IGRyaXZlci9kZXZpY2UgaW5mb3JtYXRpb24uIE1vZGVybiBkcml2ZXJzIG5vXG4gICpcdGxvbmdlciBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLiBNb3N0IGZpZWxkcyBhcmVcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uaCBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5pbmRleCA0ZTUzNTZlMjZmNDAwLi5hZTMyZTdmZGI1NjNjIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5AQCAtMTYzLDYgJiM0MzsxNjMsOCBAQCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcbiBcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xuIFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxuIFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcbiYjNDM7XHRjYXNlIEVUSFRPT0xfVEVTVDpcbiYjNDM7XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG4gXHR9XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgbW9kaWZpZXMgdGhlIGZibmljIChNZXRhIEFTSUMgTklDKSBhbmQgYm54dCAoQnJvYWRjb20gTmV0WHRyZW1lIE5JQykgZHJpdmVycywgYm90aCBvZiB3aGljaCByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIEFTSUMgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBUaGUgY2hhbmdlcyBpbiBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBhbmQgbmV0L2V0aHRvb2wvY29tbW9uLmggaW50cm9kdWNlIGFuZCBjaGVjayB0aGUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZyBzbyB0aGF0IGRyaXZlcnMgY2FuIG9wdCBpbiB0byBob2xkaW5nIHJ0bmxfbG9jayBkdXJpbmcgc2VsZi10ZXN0OyB0aGlzIGZsYWcgaXMgZXhjbHVzaXZlbHkgc2V0IGJ5IGJueHQgYW5kIGZibmljLiBGb3IgYWxsIHJlYWNoYWJsZSBuZXR3b3JrIGRldmljZXMgKGUuZy4gdmlydGlvLW5ldCwgZHVtbXksIHZldGgsIG5ldGRldnNpbSksIHRoaXMgZmxhZyBpcyBuZXZlciBzZXQgYW5kIHRoZSBjaGVjayBldmFsdWF0ZXMgdG8gMCAoaWRlbnRpY2FsIHRvIHByZXZpb3VzIGJlaGF2aW9yKS4gVGhlcmVmb3JlLCBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGV4aXN0IHRvIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOTg1Y2NmOTY0Y2U0YTQ1MWI3OGYzYmFiYzIzNmZiNmQ4NGU3MTA4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjM6MzE6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYwppbmRleCA2MmJjOWNhZTYxM2MzLi42MjJlODk1ODdlNWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMKQEAgLTU3MzMsNyAmIzQzOzU3MzMsOCBAQCBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54dF9ldGh0b29sX29wcyA9IHsKIAkub3BfbmVlZHNfcnRubAkJCT0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8CiAJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfAogCQkJCQkgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0UgfAotCQkJCQkgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MsCiYjNDM7CQkJCQkgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MgfAomIzQzOwkJCQkJICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCwKIAkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAogCQkJCSAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTIHwKIAkJCQkgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1NfSVJRIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oCmluZGV4IDY0Yjk1OGRmNzc3NDQuLmJhYmEzNDcxYmY1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaApAQCAtOTc0LDYgJiM0Mzs5NzQsNyBAQCBlbnVtIHsKIC8qIFBVTCBVc2VyIFJlZ2lzdGVycyAqLwogI2RlZmluZSBGQk5JQ19DU1JfU1RBUlRfUFVMX1VTRVIJMHgzMTAwMAkvKiBDU1Igc2VjdGlvbiBkZWxpbWl0ZXIgKi8KICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHCTB4MzEwM2QJCS8qIDB4YzQwZjQgKi8KJiM0MzsjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFCUNTUl9CSVQoMjApCiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSAlDU1JfQklUKDE5KQogI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfQk1FCQlDU1JfQklUKDE4KQogI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfUkRFX0FUVFIJQ1NSX0dFTk1BU0soMTcsIDE1KQpAQCAtMTIxNSw2ICYjNDM7MTIxNiwxMCBAQCBlbnVtIHsKICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0xFTl9NQVNLCURFU0NfR0VOTUFTSyg2MywgNDgpCiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19FT00JCURFU0NfQklUKDQ2KQogI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfQUREUl9NQVNLCURFU0NfR0VOTUFTSyg0NSwgMykKJiM0MzsvKiBTZXQgd2l0aCBGV19DTVBMIHdoZW4gdGhlIEZXIGNvbXBsZXRlZCBhIGRlc2NyaXB0b3Igd2l0aG91dCBzdWNjZXNzZnVsbHkKJiM0MzsgKiBwcm9jZXNzaW5nIGl0IChlLmcuIGEgbWFpbGJveCBETUEgZXJyb3IpOyB0aGUgY29tcGxldGlvbiBoYXMgbm8gdmFsaWQgZGF0YS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIJREVTQ19CSVQoMikKICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwJREVTQ19CSVQoMSkKICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0hPU1RfQ01QTAlERVNDX0JJVCgwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jCmluZGV4IDNjNDU2M2M4ZjQwM2YuLjZlZGZhMGFhNjlmMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jCkBAIC01MzksOCAmIzQzOzUzOSw4IEBAIHN0YXRpYyB2b2lkIGZibmljX2RiZ19md19tYnhfZGlzcGxheShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCiAJLyogR2VuZXJhdGUgaGVhZGVyICovCiAJc2VxX3B1dHMocywgbWJ4X2lkeCA9PSBGQk5JQ19JUENfTUJYX1JYX0lEWCA/ICYjMzQ7UnhcbiYjMzQ7IDogJiMzNDtUeFxuJiMzNDspOwogCi0Jc2VxX3ByaW50ZihzLCAmIzM0O1JkeTogJWQgSGVhZDogJWQgVGFpbDogJWRcbiYjMzQ7LAotCQkgICBtYngtJmd0O3JlYWR5LCBtYngtJmd0O2hlYWQsIG1ieC0mZ3Q7dGFpbCk7CiYjNDM7CXNlcV9wcmludGYocywgJiMzNDtSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkIHJlc3BfZXJyb3I6ICVsbHVcbiYjMzQ7LAomIzQzOwkJICAgbWJ4LSZndDtyZWFkeSwgbWJ4LSZndDtoZWFkLCBtYngtJmd0O3RhaWwsIG1ieC0mZ3Q7cmVzcF9lcnJvcik7CiAKIAlzbnByaW50ZihoZHIsIHNpemVvZihoZHIpLCAmIzM0OyUzcyAlLTRzICVzICUtMTJzICVzICUtM3MgJS0xNnNcbiYjMzQ7LAogCQkgJiMzNDtJZHgmIzM0OywgJiMzNDtMZW4mIzM0OywgJiMzNDtFJiMzNDssICYjMzQ7QWRkciYjMzQ7LCAmIzM0O0YmIzM0OywgJiMzNDtIJiMzNDssICYjMzQ7UmF3JiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYwppbmRleCAwZTQ3MDg4ZWM0NGJhLi40MjNmMTc5YzlkNDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYwpAQCAtMjAyNSw3ICYjNDM7MjAyNSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7CiAJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHwKIAkJCQkJICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHwKIAkJCQkJICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8Ci0JCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLAomIzQzOwkJCQkJICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfAomIzQzOwkJCQkJICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCwKIAkuZ2V0X2RydmluZm8JCQk9IGZibmljX2dldF9kcnZpbmZvLAogCS5nZXRfcmVnc19sZW4JCQk9IGZibmljX2dldF9yZWdzX2xlbiwKIAkuZ2V0X3JlZ3MJCQk9IGZibmljX2dldF9yZWdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCmluZGV4IDI4M2QyNWZhZTc5ZTcuLjZkN2ViODQ3OWVkZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMKQEAgLTYwLDggJiM0Mzs2MCwxNSBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcmVzZXRfZGVzY19yaW5nKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IG1ieF9pZHgpCiAJICovCiAJc3dpdGNoIChtYnhfaWR4KSB7CiAJY2FzZSBGQk5JQ19JUENfTUJYX1JYX0lEWDoKJiM0MzsJCS8qIENsZWFyaW5nIEJNRSBibG9ja3MgdGhlIGRldmljZSBmcm9tIHdyaXRpbmcgdG8gdGhlIGhvc3QKJiM0MzsJCSAqIGJ1dCBsZWF2ZXMgdGhlIHJlcXVlc3RzIHBhcmtlZCBpbiB0aGUgd3JpdGUgcGlwZWxpbmUuIFRoZQomIzQzOwkJICogd3JpdGUgcGF0aCBvbmx5IGNsZWFycyBvdXRzdGFuZGluZyByZXF1ZXN0cyB3aGVuIGJvdGggRkxVU0gKJiM0MzsJCSAqIGFuZCBGTFVTSF9NT0RFIGFyZSBzZXQ7IEZMVVNIX01PREUgbGV0cyB0aGVtIGRyYWluIHdpdGhvdXQKJiM0MzsJCSAqIGxhbmRpbmcgb24gdGhlIGhvc3QuCiYjNDM7CQkgKi8KIAkJd3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGRywKLQkJICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0gpOwomIzQzOwkJICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0ggfAomIzQzOwkJICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hfTU9ERSk7CiAJCWJyZWFrOwogCWNhc2UgRkJOSUNfSVBDX01CWF9UWF9JRFg6CiAJCXdyMzIoZmJkLCBGQk5JQ19QVUxfT0JfVExQX0hEUl9BUl9DRkcsCkBAIC0yODUsNiAmIzQzOzI5MiwxMiBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc190eF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCkKIAkJaWYgKCEoZGVzYyAmYW1wOyBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpCiAJCQlicmVhazsKIAomIzQzOwkJaWYgKGRlc2MgJmFtcDsgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikgewomIzQzOwkJCXR4X21ieC0mZ3Q7cmVzcF9lcnJvciYjNDM7JiM0Mzs7CiYjNDM7CQkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoZmJkLSZndDtkZXYsCiYjNDM7CQkJCQkgICAgICYjMzQ7RlcgY29tcGxldGVkIGEgVHggbWFpbGJveCByZXF1ZXN0IHdpdGggYW4gZXJyb3JcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsKIAkJZmJuaWNfbWJ4X3VubWFwX2FuZF9mcmVlX21zZyhmYmQsIEZCTklDX0lQQ19NQlhfVFhfSURYLCBoZWFkKTsKIAogCQloZWFkJiM0MzsmIzQzOzsKQEAgLTE2NjYsNiAmIzQzOzE2NzksMTMgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiAJCWlmICghKGRlc2MgJmFtcDsgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKQogCQkJYnJlYWs7CiAKJiM0MzsJCWlmIChkZXNjICZhbXA7IEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIpIHsKJiM0MzsJCQlyeF9tYngtJmd0O3Jlc3BfZXJyb3ImIzQzOyYjNDM7OwomIzQzOwkJCWRldl93YXJuX3JhdGVsaW1pdGVkKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCQkJICAgICAmIzM0O0ZXIHJlcG9ydGVkIGFuIGVycm9yIG9uIGFuIFJ4IG1haWxib3ggbWVzc2FnZTsgZHJvcHBpbmdcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG5leHRfcGFnZTsKJiM0MzsJCX0KJiM0MzsKIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZmJkLSZndDtkZXYsIHJ4X21ieC0mZ3Q7YnVmX2luZm9baGVhZF0uYWRkciwKIAkJCQkJRkJOSUNfUlhfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwogCkBAIC0xNzMzLDcgJiM0MzsxNzUzLDkgQEAgdm9pZCBmYm5pY19tYnhfcG9sbChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKQogewogCXN0cnVjdCBmYm5pY19md19tYnggKnR4X21ieCA9ICZhbXA7ZmJkLSZndDttYnhbRkJOSUNfSVBDX01CWF9UWF9JRFhdOwomIzQzOwlzdHJ1Y3QgZmJuaWNfZndfbWJ4ICpyeF9tYnggPSAmYW1wO2ZiZC0mZ3Q7bWJ4W0ZCTklDX0lQQ19NQlhfUlhfSURYXTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IDEwICogSFogJiM0MzsgMTsKJiM0MzsJdTY0IHR4X3Jlc3BfZXJyb3IsIHJ4X3Jlc3BfZXJyb3I7CiAJaW50IGVyciwgaTsKIAogCWRvIHsKQEAgLTE3NjQsNiAmIzQzOzE3ODYsOSBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKQogCSAqIG1nbXQudmVyc2lvbiBvbmNlIHdlIGdldCB0aGUgYWN0dWFsIHZlcnNpb24gZnJvbSB0aGUgZmlybXdhcmUKIAkgKiBpbiB0aGUgY2FwYWJpbGl0aWVzIHJlcXVlc3QgbWVzc2FnZS4KIAkgKi8KJiM0MztzZW5kX2NhcF9yZXE6CiYjNDM7CXR4X3Jlc3BfZXJyb3IgPSB0eF9tYngtJmd0O3Jlc3BfZXJyb3I7CiYjNDM7CXJ4X3Jlc3BfZXJyb3IgPSByeF9tYngtJmd0O3Jlc3BfZXJyb3I7CiAJZXJyID0gZmJuaWNfZndfeG1pdF9zaW1wbGVfbXNnKGZiZCwgRkJOSUNfVExWX01TR19JRF9IT1NUX0NBUF9SRVEpOwogCWlmIChlcnIpCiAJCWdvdG8gY2xlYW5fbWJ4OwpAQCAtMTc4MSw5ICYjNDM7MTgwNiwyNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKQogCQltc2xlZXAoMjApOwogCQlmYm5pY19tYnhfcG9sbChmYmQpOwogCiYjNDM7CQkvKiBBIHZhbGlkIGNhcGFiaWxpdGllcyByZXNwb25zZSBlbmRzIHRoZSBwb2xsLiBDaGVjayBpdAomIzQzOwkJICogYmVmb3JlIHRoZSBGV19FUlIgcmV0cnkgYmVsb3cgc28gYSByZXNwb25zZSBwYXJzZWQgaW4gdGhlCiYjNDM7CQkgKiBzYW1lIHBvbGwgYXMgYW4gdW5yZWxhdGVkIEZXX0VSUiBpcyBub3QgZGlzY2FyZGVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoZmJkLSZndDtmd19jYXAucnVubmluZy5tZ210LnZlcnNpb24gJmd0Oz0gTUlOX0ZXX1ZFUl9DT0RFKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQkvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi8KLQkJaWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpCiYjNDM7CQlpZiAoIXRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0aW1lb3V0KSkgewogCQkJZXJyID0gLUVUSU1FRE9VVDsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIFRoZSBGVyBjYW4gZmxhZyBvdXIgY2FwYWJpbGl0aWVzIHJlcXVlc3QgKFR4KSBvciBpdHMKJiM0MzsJCSAqIHJlc3BvbnNlIChSeCkgd2l0aCBGV19FUlIsIGluIHdoaWNoIGNhc2UgaXQgcHJvZHVjZWQgbm8KJiM0MzsJCSAqIHVzYWJsZSByZXNwb25zZS4gVGhlIHJpbmcgaXMgbm90IHdlZGdlZCwgc28gcmUtaXNzdWUgdGhlCiYjNDM7CQkgKiByZXF1ZXN0IGluc3RlYWQgb2Ygc3Bpbm5pbmcgdW50aWwgdGhlIHRpbWVvdXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0eF9tYngtJmd0O3Jlc3BfZXJyb3IgIT0gdHhfcmVzcF9lcnJvciB8fAomIzQzOwkJICAgIHJ4X21ieC0mZ3Q7cmVzcF9lcnJvciAhPSByeF9yZXNwX2Vycm9yKQomIzQzOwkJCWdvdG8gc2VuZF9jYXBfcmVxOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjVmOTk2OTI0N2UzMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmgKQEAgLTEzLDYgJiM0MzsxMyw3IEBAIHN0cnVjdCBmYm5pY190bHZfbXNnOwogCiBzdHJ1Y3QgZmJuaWNfZndfbWJ4IHsKIAl1OCByZWFkeSwgaGVhZCwgdGFpbDsKJiM0MzsJdTY0IHJlc3BfZXJyb3I7CiAJc3RydWN0IHsKIAkJc3RydWN0IGZibmljX3Rsdl9tc2cJKm1zZzsKIAkJZG1hX2FkZHJfdAkJYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jCmluZGV4IDhiOWJjOWU4ZWE1NmMuLmM2Njk4ZTMwMDJhMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYwpAQCAtNDM0LDYgJiM0Mzs0MzQsNyBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmYmQtJmd0O25ldGRldjsKJiM0MzsJc3RydWN0IGZibmljX25ldCAqZmJuOwogCiAJaWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKQogCQlnb3RvIG51bGxfdWNfYWRkcjsKQEAgLTQ0MSwxMSAmIzQzOzQ0MiwxNiBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogCXJ0bmxfbG9jaygpOwogCW5ldGRldl9sb2NrKG5ldGRldik7CiAKJiM0MzsJZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsKIAluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQluZXRkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19zdG9wKG5ldGRldik7CiAKJiM0MzsJLyogVGhlIElSUXMgYXJlIGFib3V0IHRvIGJlIGZyZWVkLCBzbyBkcm9wIHRoZSBuYXBpIHZlY3RvciBjb3VudCAqLwomIzQzOwlmYm4tJmd0O251bV9uYXBpID0gMDsKJiM0MzsKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7CiAJcnRubF91bmxvY2soKTsKIApAQCAtNTA4LDE2ICYjNDM7NTE0LDIwIEBAIHN0YXRpYyBpbnQgX19mYm5pY19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCWlmIChmYm5pY19pbml0X2ZhaWx1cmUoZmJkKSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGRldl9sb2NrKG5ldGRldik7CiYjNDM7CiAJZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCS8qIFJlc2V0IHRoZSBxdWV1ZXMgaWYgbmVlZGVkICovCiAJZmJuaWNfcmVzZXRfcXVldWVzKGZibiwgZmJuLSZndDtudW1fdHhfcXVldWVzLCBmYm4tJmd0O251bV9yeF9xdWV1ZXMpOwogCi0JcnRubF9sb2NrKCk7Ci0JbmV0ZGV2X2xvY2sobmV0ZGV2KTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJZXJyID0gX19mYm5pY19vcGVuKGZibik7CiYjNDM7CQkvKiBPbiBmYWlsdXJlIHRoZSB2ZWN0b3JzIGFyZSBmcmVlZCwgc28gZHJvcCB0aGUgY291bnQgKi8KJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZmJuLSZndDtudW1fbmFwaSA9IDA7CiYjNDM7CX0KIAogCW5ldGRldl91bmxvY2sobmV0ZGV2KTsKIAlydG5sX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguYwppbmRleCA0MDFmOGI4YWUxY2FlLi5lOTMxNzRmYzEyMzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguYwpAQCAtNyw2ICYjNDM7Nyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9xdWV1ZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9yeF9xdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wYWdlX3Bvb2wvaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGRwLmgmZ3Q7CkBAIC0xNzY4LDcgJiM0MzsxNzY5LDcgQEAgaW50IGZibmljX2FsbG9jX25hcGlfdmVjdG9ycyhzdHJ1Y3QgZmJuaWNfbmV0ICpmYm4pCiAJaW50IGVycjsKIAogCS8qIEFsbG9jYXRlIDEgVHggcXVldWUgcGVyIG5hcGkgdmVjdG9yICovCi0JaWYgKG51bV9uYXBpICZsdDsgRkJOSUNfTUFYX1RYUVMgJmFtcDsmYW1wOyBudW1fbmFwaSA9PSBudW1fdHggJiM0MzsgbnVtX3J4KSB7CiYjNDM7CWlmIChudW1fbmFwaSAmbHQ7PSBGQk5JQ19NQVhfVFhRUyAmYW1wOyZhbXA7IG51bV9uYXBpID09IG51bV90eCAmIzQzOyBudW1fcngpIHsKIAkJd2hpbGUgKG51bV90eCkgewogCQkJZXJyID0gZmJuaWNfYWxsb2NfbmFwaV92ZWN0b3IoZmJkLCBmYm4sCiAJCQkJCQkgICAgICBudW1fbmFwaSwgdl9pZHgsCkBAIC0yODI5LDYgJiM0MzsyODMwLDE3IEBAIHZvaWQgZmJuaWNfbmFwaV9kZXBsZXRpb25fY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlmYm5pY193cmZsKGZiZCk7CiB9CiAKJiM0MzsvKiBSZXR1cm5zIHRoZSBuYXBpIHZlY3RvciBzZXJ2aWNpbmcgYW4gUnggcXVldWUsIG9yIE5VTEwgaWYgdGhlIGRhdGFwYXRoCiYjNDM7ICogaXMgdG9ybiBkb3duLiAgVGhlIGFzc29jaWF0aW9uIGlzIHB1Ymxpc2hlZCBieSBmYm5pY19zZXRfbmV0aWZfbmFwaSgpCiYjNDM7ICogYW5kIGNsZWFyZWQgYnkgZmJuaWNfcmVzZXRfbmV0aWZfbmFwaSgpLCBib3RoIHVuZGVyIHRoZSBpbnN0YW5jZSBsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3IgKmZibmljX3J4cV9udihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gX19uZXRpZl9nZXRfcnhfcXVldWUoZGV2LCBpZHgpLSZndDtuYXBpOwomIzQzOwomIzQzOwlyZXR1cm4gbmFwaSA/IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3IsIG5hcGkpIDogTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGZibmljX3F1ZXVlX21lbV9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX2NvbmZpZyAqcWNmZywKIAkJCQkgdm9pZCAqcW1lbSwgaW50IGlkeCkKQEAgLTI4NDEsOCAmIzQzOzI4NTMsMTYgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIGZibmljX2FsbG9jX3F0X3BhZ2VfcG9vbHMoZmJuLCBxdCwgaWR4KTsKIAomIzQzOwkvKiBBIGZhaWxlZCBQQ0llIHJlY292ZXJ5IG9yIHJlc3VtZSBjYW4gbGVhdmUgdGhlIGRhdGFwYXRoIHRvcm4gZG93bgomIzQzOwkgKiB3aGlsZSBuZXRpZl9ydW5uaW5nKCkgaXMgc3RpbGwgdHJ1ZS4gIFRoaXMgbmRvIHJ1bnMgYmVmb3JlCiYjNDM7CSAqIG5ldGRldl9yeF9xdWV1ZV9yZXN0YXJ0KCkgY2hlY2tzIG5ldGlmX3J1bm5pbmcoKSwgc28gYmFpbCBvdXQKJiM0MzsJICogcmF0aGVyIHRoYW4gdG91Y2hpbmcgcmluZ3MgYW5kIHZlY3RvcnMgdGhhdCBhcmUgYWxyZWFkeSBmcmVlZC4KJiM0MzsJICovCiYjNDM7CW52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTsKJiM0MzsJaWYgKCFudikKJiM0MzsJCXJldHVybiAtRU5FVERPV047CiYjNDM7CiAJcmVhbCA9IGNvbnRhaW5lcl9vZihmYm4tJmd0O3J4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTsKLQludiA9IGZibi0mZ3Q7bmFwaVtpZHggJSBmYm4tJmd0O251bV9uYXBpXTsKIAogCWZibmljX3JpbmdfaW5pdCgmYW1wO3F0LSZndDtzdWIwLCByZWFsLSZndDtzdWIwLmRvb3JiZWxsLCByZWFsLSZndDtzdWIwLnFfaWR4LAogCQkJcmVhbC0mZ3Q7c3ViMC5mbGFncyk7CkBAIC0yODkzLDcgJiM0MzsyOTEzLDcgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCXN0cnVjdCBmYm5pY19xX3RyaWFkICpyZWFsOwogCiAJcmVhbCA9IGNvbnRhaW5lcl9vZihmYm4tJmd0O3J4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTsKLQludiA9IGZibi0mZ3Q7bmFwaVtpZHggJSBmYm4tJmd0O251bV9uYXBpXTsKJiM0MzsJbnYgPSBmYm5pY19yeHFfbnYoZGV2LCBpZHgpOwogCiAJZmJuaWNfYWdncmVnYXRlX3JpbmdfYmRxX2NvdW50ZXJzKGZibiwgJmFtcDtyZWFsLSZndDtzdWIwKTsKIAlmYm5pY19hZ2dyZWdhdGVfcmluZ19iZHFfY291bnRlcnMoZmJuLCAmYW1wO3JlYWwtJmd0O3N1YjEpOwpAQCAtMjkxNSw3ICYjNDM7MjkzNSw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KQogCWludCBlcnI7CiAKIAlyZWFsID0gY29udGFpbmVyX29mKGZibi0mZ3Q7cnhbaWR4XSwgc3RydWN0IGZibmljX3FfdHJpYWQsIGNtcGwpOwotCW52ID0gZmJuLSZndDtuYXBpW2lkeCAlIGZibi0mZ3Q7bnVtX25hcGldOwomIzQzOwludiA9IGZibmljX3J4cV9udihkZXYsIGlkeCk7CiAJZmJuaWNfZGJnX252X2V4aXQobnYpOwogCiAJbmFwaV9kaXNhYmxlX2xvY2tlZCgmYW1wO252LSZndDtuYXBpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKaW5kZXggMjUzNjAwYzBlY2NkZi4uYzRjOWNlMDM4NjExMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTk0NCw2ICYjNDM7OTQ0LDcgQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gewogI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU0JQklUKDYpCiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MJCUJJVCg3KQogI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksJCUJJVCg4KQomIzQzOyNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QJCUJJVCg5KQogCiAvKioKICAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zCkBAIC05ODEsNiAmIzQzOzk4Miw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHsKICAqCSAtIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoKQogICoJIC0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcygpCiAgKgkgLSBldGh0b29sX29wX2dldF9saW5rKCkgKHN5bmNzIGxpbmsgd2F0Y2ggdW5kZXIgcnRubF9sb2NrKQomIzQzOyAqCSAtIG5ldGlmX29wZW4oKSAvIG5ldGlmX2Nsb3NlKCkgKHVzZWQgYnkgQHNlbGZfdGVzdCkKICAqCiAgKiBAZ2V0X2RydmluZm86IFJlcG9ydCBkcml2ZXIvZGV2aWNlIGluZm9ybWF0aW9uLiBNb2Rlcm4gZHJpdmVycyBubwogICoJbG9uZ2VyIGhhdmUgdG8gaW1wbGVtZW50IHRoaXMgY2FsbGJhY2suIE1vc3QgZmllbGRzIGFyZQpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvY29tbW9uLmggYi9uZXQvZXRodG9vbC9jb21tb24uaAppbmRleCA0ZTUzNTZlMjZmNDAwLi5hZTMyZTdmZGI1NjNjIDEwMDY0NAotLS0gYS9uZXQvZXRodG9vbC9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9jb21tb24uaApAQCAtMTYzLDYgJiM0MzsxNjMsOCBAQCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZCkKIAkJcmV0dXJuIG9wcy0mZ3Q7b3BfbmVlZHNfcnRubCAmYW1wOyBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTOwogCWNhc2UgRVRIVE9PTF9HTElOSzoKIAkJcmV0dXJuIG9wcy0mZ3Q7b3BfbmVlZHNfcnRubCAmYW1wOyBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTks7CiYjNDM7CWNhc2UgRVRIVE9PTF9URVNUOgomIzQzOwkJcmV0dXJuIG9wcy0mZ3Q7b3BfbmVlZHNfcnRubCAmYW1wOyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVDsKIAl9CiAJcmV0dXJuIGZhbHNlOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTUyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3VpdGFiaWxpdHkgRXZhbHVhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBMZXQmIzM5O3Mgc2VlLi4uIGZpcnN0LCB0aGUgcmlzayBhc3Nlc3NtZW50LiBTdGFuZGFyZCBrZXJuZWwgbWFpbnRlbmFuY2UsIFFBLCBkZWZlbnNpdmUgc2VjdXJpdHkg4oCTIHNvdW5kcyBwcmV0dHkgYmVuaWduLiBObyBleHBsb2l0IGNyZWF0aW9uLCBqdXN0IGNoZWNraW5nIGZvciB2dWxuZXJhYmlsaXRpZXMuIEdvb2QsIGdvb2QuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEl0JiMzOTtzIHRvdWNoaW5nIGEgYnVuY2ggb2YgZmlsZXM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jYCwgYSB3aG9sZSBidW5jaCBvZiBgZmJuaWNgIGZpbGVzLCBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgLCBhbmQgYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gQWgsIHdhaXQhIFRoZSBjb3JlIG5ldCBjaGFuZ2VzIGFyZSB3aGF0IGNhdGNoZXMgbXkgZXllLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYDogYCNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGFuZCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgLCBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCB1c2VzIGl0LiBBbmQgYGJueHRfZXRodG9vbC5jYCBpcyBhZGRpbmcgdGhhdCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHRvIGBibnh0X2V0aHRvb2xfb3BzLm9wX25lZWRzX3J0bmxgLiBUaGUgYGZibmljYCBjaGFuZ2VzIGFyZSBhbHNvIHRoZXJlLgoKSG9sZCBvbiwgd2hhdCBhcmUgdGhlc2UgYGJueHRgIGFuZCBgZmJuaWNgIHRoaW5ncz8gUmlnaHQsIGBibnh0YCBpcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lIGRyaXZlciwgcGh5c2ljYWwgUENJZSBOSUNzLiBBbmQgYGZibmljYCBpcyBNZXRhJiMzOTtzIGN1c3RvbSBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlLCBhbHNvIFBDSWUgbmV0d29yayBjYXJkLiBTbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGRyaXZlcnMgaGVyZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuCgpCdXQgdGhvc2UgY29yZSBuZXQgY2hhbmdlcywgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhbmQgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCBzcGVjaWZpY2FsbHkuLi4gaXMgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgcmVhY2hhYmxlPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgaXMgYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBjb2RlYmFzZS4gTGV0JiMzOTtzIGRvIGEgc2VhcmNoIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLiBUaGF0IHdpbGwgdGVsbCB1cyBpZiB0aGVzZSBjb3JlIGNoYW5nZXMgYXJlIGV2ZW4gcmVsZXZhbnQgaW4gcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5oPTkyPWV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggY21kKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEyOS0vKipcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEzMDogKiBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoKSAtIGRvZXMgdGhpcyBsZWdhY3kgaW9jdGwgY21kIG5lZWQgcnRubF9sb2NrP1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTMxLSAqIEBkZXY6IHRhcmdldCBkZXZpY2Vcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uaD0xMzc9c3RhdGljIGlubGluZSBib29sXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMzg6ZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBldGhjbWQpXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMzkte1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzI3Mj1kZXZfZXRodG9vbF9sb2NrZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzU5MC0gKiBEcml2ZXItZGVjaWRlZCBTRVQgY29tbWFuZHMgdGhhdCBtYXkgY2hhaW4gaW50byBydG5sLW9ubHkgaGVscGVycyBhcmVcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzU5MTogKiBjb3ZlcmVkIGJ5IGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCgpL0VUSFRPT0xfT1BfTkVFRFNfUlROTF8qLlxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTkyLSAqL1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzYxMD1fX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2MjMtXHRcdCAgICBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZCkgfHxcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzYyNDpcdFx0ICAgIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2MjUtXHRpZiAobmVlZF9ydG5sKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGV0aHRvb2wgU291cmNlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXRodG9vbCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhyb3VnaCBpb2N0bHMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYG5ldC9ldGh0b29sL2lvY3RsLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDM2MTAgdG8gMzY1MC4gVGhpcyBsaWtlbHkgZGVhbHMgd2l0aCBzb21lIHNwZWNpZmljIGZlYXR1cmUgb3IgZnVuY3Rpb24gY2FsbC4gSSBhbHNvIG5lZWQgdG8ga2VlcCBgbmV0L2V0aHRvb2wvY29tbW9uLmhgIG9wZW4uIFRoYXQgaGVhZGVyIGZpbGUgaXMgcHJhY3RpY2FsbHkgdGhlIGV0aHRvb2wgYmlibGUg4oCTIGl0IHByb2JhYmx5IGRlZmluZXMgdGhlIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cyBJJiMzOTtsbCBuZWVkIHRvIGludGVycHJldCB0aGUgaW9jdGwgY2FsbHMgYW5kIGRhdGEuIEkmIzM5O2xsIHJlYWQgdGhvc2UgdHdvIGZpbGVzIGFuZCB0cnkgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiBldGh0b29sIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzYwMDpcdFx0Y2FzZSBFVEhUT09MX1NTRzpcbjM2MDE6XHRcdGNhc2UgRVRIVE9PTF9TVFNPOlxuMzYwMjpcdFx0Y2FzZSBFVEhUT09MX1NHU086XG4zNjAzOlx0XHRjYXNlIEVUSFRPT0xfU0dSTzpcbjM2MDQ6XHRcdFx0cmV0dXJuIHRydWU7XG4zNjA1Olx0XHR9XG4zNjA2Olx0XHRyZXR1cm4gZmFsc2U7XG4zNjA3Olx0fVxuMzYwODpcdFxuMzYwOTpcdHN0YXRpYyBpbnRcbjM2MTA6XHRfX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcbjM2MTE6XHRcdCAgICAgIHUzMiBldGhjbWQsIHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpkZXZsaW5rX3N0YXRlKVxuMzYxMjpcdHtcbjM2MTM6XHRcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuMzYxNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjM2MTU6XHRcdGJvb2wgbmVlZF9ydG5sO1xuMzYxNjpcdFx0aW50IHJjO1xuMzYxNzpcdFxuMzYxODpcdFx0ZGV2ID0gbmV0ZGV2X2dldF9ieV9uYW1lKG5ldCwgaWZyLVx1MDAzZWlmcl9uYW1lLCBcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG4zNjE5Olx0XHRpZiAoIWRldilcbjM2MjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4zNjIxOlx0XG4zNjIyOlx0XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxuMzYyMzpcdFx0XHQgICAgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8XG4zNjI0Olx0XHRcdCAgICBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBldGhjbWQpO1xuMzYyNTpcdFx0aWYgKG5lZWRfcnRubClcbjM2MjY6XHRcdFx0cnRubF9sb2NrKCk7XG4zNjI3Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbjM2Mjg6XHRcdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlIFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxuMzYyOTpcdFx0ICAgIGRldi1cdTAwM2Vtb3ZpbmdfbnMgfHwgIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkpIHtcbjM2MzA6XHRcdFx0cmMgPSAtRU5PREVWO1xuMzYzMTpcdFx0XHRnb3RvIGV4aXRfb3BzX3VubG9jaztcbjM2MzI6XHRcdH1cbjM2MzM6XHRcbjM2MzQ6XHRcdHJjID0gZGV2X2V0aHRvb2xfbG9ja2VkKG5ldCwgZGV2LCB1c2VyYWRkciwgZXRoY21kLCBkZXZsaW5rX3N0YXRlLFxuMzYzNTpcdFx0XHRcdFx0bmVlZF9ydG5sKTtcbjM2MzY6XHRcbjM2Mzc6XHRleGl0X29wc191bmxvY2s6XG4zNjM4Olx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuMzYzOTpcdFx0aWYgKG5lZWRfcnRubClcbjM2NDA6XHRcdFx0cnRubF91bmxvY2soKTtcbjM2NDE6XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4zNjQyOlx0XG4zNjQzOlx0XHRyZXR1cm4gcmM7XG4zNjQ0Olx0fVxuMzY0NTpcdFxuMzY0NjpcdGludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4zNjQ3Olx0e1xuMzY0ODpcdFx0c3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnN0YXRlO1xuMzY0OTpcdFx0dTMyIGV0aGNtZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIyNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKClgIGFuZCBOZXR3b3JrIERldmljZSBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZClgIGZ1bmN0aW9uLiBUaGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgb3Igbm90IGEgbmV0d29yayBkZXZpY2UgYGRldmAgcmVxdWlyZXMgdGhlIFJlYWwtVGltZSBOZXRsaW5rIChSVE5MKSBzdWJzeXN0ZW0gdG8gaGFuZGxlIHRoZSBgZXRoY21kYCAodGhlIHNwZWNpZmljIGV0aHRvb2wgY29tbWFuZCkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHdlIGRlY2lkZSBSVE5MIGlzIG5lY2Vzc2FyeS4KCk15IG5leHQgbW92ZSBpcyB0byBjcmFjayBvcGVuIGBuZXQvZXRodG9vbC9jb21tb24uaGAsIHNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhhdCBzZWN0aW9uIGFyb3VuZCBsaW5lcyAxMzAgdG8gMTcwLiBUaGF0JiMzOTtzIHdoZXJlIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIGxvZ2ljIG9yIHJlbGV2YW50IGRlZmluaXRpb25zIHRvIGRlY29kZSBleGFjdGx5IHdoYXQgdHJpZ2dlcnMgdGhhdCBkZXRlcm1pbmF0aW9uLiBUaGVyZSYjMzk7cyBsaWtlbHkgYSBzZXJpZXMgb2YgY2hlY2tzLCBmbGFncywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGRlZmluZWQgaW4gdGhhdCBhcmVhIHRoYXQgYXJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGlzIGludGVyYWN0aW9uLCBhbmQgdGhvc2Ugd2lsbCBpbGx1bWluYXRlIHdoZW4gUlROTCBpcyB0cnVseSByZXF1aXJlZCBmb3IgYSBzcGVjaWZpYyBldGh0b29sIG9wZXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBlZmZpY2llbnQgYW5kIGNvcnJlY3QgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2NvbW1vbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHQgKiBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoKSAtIGRvZXMgdGhpcyBsZWdhY3kgaW9jdGwgY21kIG5lZWQgcnRubF9sb2NrP1xuIDEzMTpcdCAqIEBkZXY6IHRhcmdldCBkZXZpY2VcbiAxMzI6XHQgKiBAZXRoY21kOiBFVEhUT09MXyogaW9jdGwgY29tbWFuZCB2YWx1ZVxuIDEzMzpcdCAqXG4gMTM0Olx0ICogUmV0dXJuOiB0cnVlIGlmIEBldGhjbWQgaXMgYSBjb21tYW5kIGZvciB3aGljaCBAZGV2IGhhcyBvcHRlZC1pbiB0b1xuIDEzNTpcdCAqIGtlZXBpbmcgcnRubF9sb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsICh2aWEgb3BfbmVlZHNfcnRubCkuXG4gMTM2Olx0ICovXG4gMTM3Olx0c3RhdGljIGlubGluZSBib29sXG4gMTM4Olx0ZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBldGhjbWQpXG4gMTM5Olx0e1xuIDE0MDpcdFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHM7XG4gMTQxOlx0XG4gMTQyOlx0XHRzd2l0Y2ggKGV0aGNtZCkge1xuIDE0MzpcdFx0Y2FzZSBFVEhUT09MX0dMSU5LU0VUVElOR1M6XG4gMTQ0Olx0XHRjYXNlIEVUSFRPT0xfR1NFVDpcbiAxNDU6XHRcdGNhc2UgRVRIVE9PTF9TTElOS1NFVFRJTkdTOlxuIDE0NjpcdFx0Y2FzZSBFVEhUT09MX1NTRVQ6XG4gMTQ3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUztcbiAxNDg6XHRcdGNhc2UgRVRIVE9PTF9TUEZMQUdTOlxuIDE0OTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTO1xuIDE1MDpcdFx0Y2FzZSBFVEhUT09MX1NSSU5HUEFSQU06XG4gMTUxOlx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU07XG4gMTUyOlx0XHRjYXNlIEVUSFRPT0xfU0NIQU5ORUxTOlxuIDE1MzpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFM7XG4gMTU0Olx0XHRjYXNlIEVUSFRPT0xfU0NPQUxFU0NFOlxuIDE1NTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0U7XG4gMTU2Olx0XHRjYXNlIEVUSFRPT0xfR1BBVVNFUEFSQU06XG4gMTU3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNO1xuIDE1ODpcdFx0Y2FzZSBFVEhUT09MX1NQQVVTRVBBUkFNOlxuIDE1OTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTTtcbiAxNjA6XHRcdGNhc2UgRVRIVE9PTF9TUlNTSDpcbiAxNjE6XHRcdGNhc2UgRVRIVE9PTF9TUlhGSDpcbiAxNjI6XHRcdGNhc2UgRVRIVE9PTF9TUlhGSElORElSOlxuIDE2MzpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG4gMTY0Olx0XHRjYXNlIEVUSFRPT0xfR0xJTks6XG4gMTY1Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xuIDE2NjpcdFx0Y2FzZSBFVEhUT09MX1RFU1Q6XG4gMTY3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG4gMTY4Olx0XHR9XG4gMTY5Olx0XHRyZXR1cm4gZmFsc2U7XG4gMTcwOlx0fVxuIDE3MTpcdFxuIDE3MjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19FVEhUT09MX05FVExJTkspXG4gMTczOlx0dm9pZCBldGh0b29sX3Jzc19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHR5cGUsIHUzMiByc3NfY29udGV4dCk7XG4gMTc0Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqVW5yYXZlbGluZyBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBzZWUgdGhpcyBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgY2FsbCwgYW5kIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGF0IHRoYXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcuIEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgYWxvbmUuIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBhIHBvdGVudGlhbGx5IHRyaWNreSBwaWVjZSBvZiBuZXR3b3JrIGRldmljZSBkcml2ZXIgY29kZSwgZXNwZWNpYWxseSBpZiB3ZSBhcmUgaW4gYSBtdWx0aSB0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGltZSB0byBkaWcgaW4sIHJhdGhlciB0aGFuIG1ha2UgYXNzdW1wdGlvbnMuIExldCYjMzk7cyBnZXQgdGhlIGNvbnRleHQgcmlnaHQgYXdheS4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBgbmV0ZGV2X25lZWRfb3BzX2xvY2tgIGFuZCBzZWUgd2hhdCB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgbWlnaHQgb2ZmZXIuIEhvcGVmdWxseSwgdGhlIHNlYXJjaCByZXN1bHRzIHdpbGwgcXVpY2tseSBpbGx1bWluYXRlIGlmIGl0JiMzOTtzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgY29udHJvbCwgZGV2aWNlIG9wZXJhdGlvbiBvcmRlcmluZywgb3Igc29tZSBvdGhlciBhc3BlY3Qgb2YgbmV0d29yayBkZXZpY2UgbWFuYWdlbWVudCB0aGF0IGRlbWFuZHMgY2FyZWZ1bCBhdHRlbnRpb24uIEEgZ29vZCBzZWFyY2ggc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24sIGFsb25nIHdpdGggdXNlcywgYW5kIG1heWJlIGV2ZW4gYSBicmllZiBkZXNjcmlwdGlvbiBmcm9tIHRoZSBjb2RlLCBvciBob3BlZnVsbHkgYmV0dGVyIHlldCwgYSBtZWFuaW5nZnVsIGNvbW1pdCBtZXNzYWdlLiBJIGFtIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3doeSYjMzQ7IGFuZCAmIzM0O3doZW4mIzM0OyBiZWhpbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBleGlzdGVuY2UuIEkgc3VzcGVjdCB0aGlzIGlzIHNvbWV0aGluZyBmdW5kYW1lbnRhbCwgbGlrZSBsb2NraW5nIHRoZSBkZXZpY2Ugb3BlcmF0aW9ucyBzdHJ1Y3R1cmUsIGFuZCBJIG5lZWQgdG8gZXN0YWJsaXNoIHRoZSBwcmVjaXNlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGRldl9uZWVkX29wc19sb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jPTMxPWludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy00NC1cdCAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmM6NDU6XHRpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMtNDYtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM9ODI9c3RhdGljIF9faW5saW5lX18gaW50IGRldl9pc19ldGhkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy04My17XG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6ODQ6XHRyZXR1cm4gZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSIFx1MDAyNlx1MDAyNiAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy04NS19XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTU4PXN0cnVjdCBuZXRfZGV2aWNlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI2MDEtXHQgKiAgIGFuZCBvdGhlciBjYWxsYmFja3MsIHRoYXQgaXMgdGhlIGluc3RhbmNlIGxvY2sgb24gZGV2aWNlcyBmb3JcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjYwMjpcdCAqICAgd2hpY2ggbmV0ZGV2X25lZWRfb3BzX2xvY2soKSByZXR1cm5zIHRydWUsIG90aGVyd2lzZSBieSBydG5sX2xvY2s7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI2MDMtXHQgKlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNjA0LVx0ICogLSBkb3VibGUgb3BzIHByb3RlY3RlZCAtIGFsd2F5cyBwcm90ZWN0ZWQgYnkgcnRubF9sb2NrIGJ1dCBmb3JcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjYwNTpcdCAqICAgZGV2aWNlcyBmb3Igd2hpY2ggbmV0ZGV2X25lZWRfb3BzX2xvY2soKSByZXR1cm5zIHRydWUgLSBhbHNvXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI2MDYtXHQgKiAgIHRoZSBpbnN0YW5jZSBsb2NrLlxuLS1cbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9MjE9bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3JfaW52aXNpYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC0yNy1cbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6Mjg6c3RhdGljIGlubGluZSBib29sIG5ldGRldl9uZWVkX29wc19sb2NrKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTI5LXtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTM5PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNDAte1xuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo0MTpcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC00Mi1cdFx0bmV0ZGV2X2xvY2soZGV2KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTQ1PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC00Ni17XG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjQ3Olx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTQ4LVx0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD01MT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX3RvX2Z1bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNTIte1xuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo1MzpcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC01NC1cdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTU5PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdW5sb2NrX2Z1bGxfdG9fb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTYwLXtcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6NjE6XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNjItXHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD02Nz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC02OC17XG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjY5Olx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTcwLVx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTgzPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtODQte1xuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo4NTpcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC04Ni1cdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTg5PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTkwLXtcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6OTE6XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtOTItXHRcdG5ldGRldl9sb2NrKGRldik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD05Nz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTk4LXtcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6OTk6XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMTAwLVx0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0xMDY9c3RhdGljIGlubGluZSBpbnQgbmV0ZGV2X2lzX2xvY2tlZF9vcHNfY29tcGF0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTEwNy17XG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjEwODpcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC0xMDktXHRcdHJldHVybiBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuLS1cbmluY2x1ZGUvbmV0L25ldGRldl9xdWV1ZXMuaD00Mz1zdHJ1Y3QgbmV0ZGV2X3F1ZXVlX3N0YXRzX3R4IHtcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfcXVldWVzLmgtOTEtICpcbmluY2x1ZGUvbmV0L25ldGRldl9xdWV1ZXMuaDo5MjogKiBPcHMgYXJlIGNhbGxlZCB1bmRlciB0aGUgaW5zdGFuY2UgbG9jayBpZiBuZXRkZXZfbmVlZF9vcHNfbG9jaygpXG5pbmNsdWRlL25ldC9uZXRkZXZfcXVldWVzLmgtOTMtICogcmV0dXJucyB0cnVlLCBvdGhlcndpc2UgdW5kZXIgcnRubF9sb2NrLlxuLS1cbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTQzOC1cbm5ldC9jb3JlL2Rldi5jOjExNDM5Olx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9kZXYuYy0xMTQ0MC1cdCAgICBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGUgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2NvcmUvZGV2LmM9MTI0NDE9dm9pZCB1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55X25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyNDc0LVx0XHRcdGNvbnRpbnVlO1xubmV0L2NvcmUvZGV2LmM6MTI0NzU6XHRcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSB7XG5uZXQvY29yZS9kZXYuYy0xMjQ3Ni1cdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2VjbG9zZV9saXN0LCBcdTAwMjZjbG9zZV9oZWFkKTtcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjQ4My1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBoZWFkLCB1bnJlZ19saXN0KSB7XG5uZXQvY29yZS9kZXYuYzoxMjQ4NDpcdFx0aWYgKCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxubmV0L2NvcmUvZGV2LmMtMTI0ODUtXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNlY2xvc2VfbGlzdCwgXHUwMDI2Y2xvc2VfaGVhZCk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTI3MDI9aW50IF9fZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMjc5OC1cbm5ldC9jb3JlL2Rldi5jOjEyNzk5Olx0aWYgKCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxubmV0L2NvcmUvZGV2LmMtMTI4MDAtXHRcdG5ldGRldl9sb2NrKGRldik7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTI4NzMtXHRkZXYtXHUwMDNlbW92aW5nX25zID0gZmFsc2U7XG5uZXQvY29yZS9kZXYuYzoxMjg3NDpcdGlmICghbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbm5ldC9jb3JlL2Rldi5jLTEyODc1LVx0XHRuZXRkZXZfdW5sb2NrKGRldik7XG4tLVxubmV0L2NvcmUvZGV2Lmg9MTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zZXRfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB2YWx1ZSlcbi0tXG5uZXQvY29yZS9kZXYuaC0xOTctXG5uZXQvY29yZS9kZXYuaDoxOTg6XHRpZiAoIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG5uZXQvY29yZS9kZXYuaC0xOTktXHRcdG5ldGRldl9sb2NrKGRldik7XG5uZXQvY29yZS9kZXYuaC0yMDAtXHRkZXYtXHUwMDNldXAgPSB2YWx1ZTtcbm5ldC9jb3JlL2Rldi5oOjIwMTpcdGlmICghbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbm5ldC9jb3JlL2Rldi5oLTIwMi1cdFx0bmV0ZGV2X3VubG9jayhkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTM2Mj12b2lkIF9fZGV2X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzc0LVx0aWYgKG9wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMgfHwgb3BzLVx1MDAzZW5kb19jaGFuZ2VfcnhfZmxhZ3MgfHxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3NTpcdCAgICBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzYtXHRcdG5ldGlmX3J4X21vZGVfcXVldWUoZGV2KTtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTEwMTM9aW50IG5ldGRldl9ubF9iaW5kX3J4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwNjktXHRcdGVyciA9IC1FTk9ERVY7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEwNzA6XHRlbHNlIGlmICghbmV0ZGV2X25lZWRfb3BzX2xvY2sobmV0ZGV2KSlcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMTA3MS1cdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2NvcmUvbmV0ZGV2X3J4X3F1ZXVlLmM9MjQ1PWludCBuZXRpZl9tcF9vcGVuX3J4cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcnhxX2lkeCxcbi0tXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYy0yNTAtXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYzoyNTE6XHRpZiAoIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYy0yNTItXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM2MTA9X19kZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjIxLVxubmV0L2V0aHRvb2wvaW9jdGwuYzozNjIyOlx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikgfHxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzYyMy1cdFx0ICAgIGV0aHRvb2xfY21kX2NoYW5nZXNfZmVhdHVyZXMoZXRoY21kKSB8fFxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz01MDc9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNTM5LVx0aWYgKHJlcV9pbmZvLVx1MDAzZWRldikge1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjU0MDpcdFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKHJlcV9pbmZvLVx1MDAzZWRldikgfHxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01NDEtXHRcdFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwocmVxX2luZm8tXHUwMDNlZGV2LCBjbWQpO1xuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz01OTQ9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jLTYwOC1cdGV0aG5sX2luaXRfcmVwbHlfZGF0YShjdHgtXHUwMDNlcmVwbHlfZGF0YSwgY3R4LVx1MDAzZW9wcywgZGV2KTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2MDk6XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTYxMC1cdFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwoZGV2LCBjdHgtXHUwMDNlb3BzLVx1MDAzZXJlcXVlc3RfY21kKTtcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9OTAwPXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy05MzAtXHRkZXYgPSByZXFfaW5mby1cdTAwM2VkZXY7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6OTMxOlx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikgfHxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy05MzItXHRcdCAgICBldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGRldiwgY21kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG5ldGRldl9uZWVkX29wc19sb2NrYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldGRldl9uZWVkX29wc19sb2NrYC4uLiBteSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1doYXQgYWN0dWFsbHkgKnRyaWdnZXJzKiB0aGF0IHJldHVybiB2YWx1ZSBvZiB0cnVlPyBXaGF0IGNvbmRpdGlvbnMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBsb2dpYy4gSSBrbm93IEkmIzM5O3ZlIHNlZW4gdGhpcyBmdW5jdGlvbiBiZWZvcmUsIGJ1dCBhIHF1aWNrIHJlZnJlc2hlciBuZXZlciBodXJ0cy4KCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBkaXZlIGludG8gYGluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6MjhgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgbG9naWMgYmVoaW5kIHRoaXMgZnVuY3Rpb24uIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHRvIGRldGVybWluZSB0aGUgbmVlZCBmb3IgdGhhdCBsb2NrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0XHRcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XG4gIDI2Olx0fVxuICAyNzpcdFxuICAyODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRkZXZfbmVlZF9vcHNfbG9jayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICAyOTpcdHtcbiAgMzA6XHRcdGJvb2wgcmV0ID0gZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHM7XG4gIDMxOlx0XG4gIDMyOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9TSEFQRVIpXG4gIDMzOlx0XHRyZXQgfD0gISFkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZXRfc2hhcGVyX29wcztcbiAgMzQ6XHQjZW5kaWZcbiAgMzU6XHRcbiAgMzY6XHRcdHJldHVybiByZXQ7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfbG9ja19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgNDA6XHR7XG4gIDQxOlx0XHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcbiAgNDI6XHRcdFx0bmV0ZGV2X2xvY2soZGV2KTtcbiAgNDM6XHR9XG4gIDQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTcyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGV0aHRvb2xgIElPQ1RMIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYG5ldC9ldGh0b29sL2lvY3RsLmNgIGNvZGUgc25pcHBldC4gVGhlIGNvcmUgY29uY2VybiBoZXJlIGlzIHRoZSBgbmVlZF9ydG5sYCB2YXJpYWJsZSwgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByb3V0aW5lIG5lZWRzIHRvIGFjcXVpcmUgdGhlIFJUTkwgKFJvdXRpbmcgVGFibGUgTmV0bGluaykgbG9jay4gSXQgbG9va3MgbGlrZSB0aGUgY29uZGl0aW9uIHRoYXQgc2V0cyBpdCBpcyBhIGJpdC4uLiB1bnVzdWFsLgoKVGhlIGtleSBsaW5lIGlzOiBgbmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikgfHwgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8IGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7YCBJZiBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgcmV0dXJucyBmYWxzZSwgYG5lZWRfcnRubGAgKmltbWVkaWF0ZWx5KiBiZWNvbWVzIHRydWUuICBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgdHJ1ZSBmb3IgJiMzNDthbGwgc3RhbmRhcmQgZGV2aWNlcywmIzM0OyBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCAqaXMqIHRydWUuCgpMZXQmIzM5O3MgZHJpbGwgZG93bjogaXQgc2VlbXMgYG5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIHJldHVybnMgdHJ1ZSB3aGVuIGBkZXYtJmd0O3JlcXVlc3Rfb3BzX2xvY2tgIGlzIHRydWUsIG9yIGBkZXYtJmd0O3F1ZXVlX21nbXRfb3BzYCBpcyBzZXQsIG9yIGBkZXYtJmd0O25ldGRldl9vcHMtJmd0O25ldF9zaGFwZXJfb3BzYCBpcyBzZXQuICBTbywgZm9yIG1vc3QgZGV2aWNlcywgd2UmIzM5O3JlIHRha2luZyB0aGUgUlROTCBsb2NrICphbnl3YXkqLiBCdXQgd2h5IHRoZXNlIHRocmVlIHNwZWNpZmljIHRyaWdnZXJzPyBUaGF0JiMzOTtzIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGRyaXZlcnMgYXJlIHNldHRpbmcgYHJlcXVlc3Rfb3BzX2xvY2tgLCBgcXVldWVfbWdtdF9vcHNgLCBvciBgbmV0X3NoYXBlcl9vcHNgLiAgSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBrZXJuZWwgc291cmNlIGZvciB0aG9zZSBleGFjdCB0ZXJtcyB0byB1bmRlcnN0YW5kIHdoZW4gdGhleSYjMzk7cmUgdXNlZC4gIEkmIzM5O20gY3VyaW91cyB0byBzZWUgd2hhdCBraW5kIG9mIGRldmljZXMgYXJlIHRyaWdnZXJpbmcgdGhlc2UgZmxhZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlcXVlc3Rfb3BzX2xvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTM0Mz1Ecml2ZXJzIGNhbiBhbHNvIGV4cGxpY2l0bHkgcmVxdWVzdCBpbnN0YW5jZSBsb2NrIHRvIGJlIGhlbGQgZHVyaW5nIG9wc1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjM0NDpieSBzZXR0aW5nIGBgcmVxdWVzdF9vcHNfbG9ja2BgIHRvIHRydWUuIENvZGUgY29tbWVudHMgYW5kIGRvY3MgcmVmZXJcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zNDUtdG8gZHJpdmVycyB3aGljaCBoYXZlIG9wcyBjYWxsZWQgdW5kZXIgdGhlIGluc3RhbmNlIGxvY2sgYXMgXCYjMzQ7b3BzIGxvY2tlZFwmIzM0Oy5cbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jPTEwMz1zdGF0aWMgdm9pZCBkdW1teV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2R1bW15LmMtMTEwLVx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2R1bW15LmM6MTExOlx0ZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO1xuZHJpdmVycy9uZXQvZHVtbXkuYy0xMTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jPTM0MDI9aW50IGJuZ2VfbmV0ZGV2X2FsbG9jKHN0cnVjdCBibmdlX2RldiAqYmQsIGludCBtYXhfaXJxcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzUxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYzozNTE5Olx0bmV0ZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX25ldGRldi5jLTM1MjAtXHRyYyA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTgyOT1zdGF0aWMgdm9pZCBtbHg1ZV9idWlsZF9uaWNfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODQxLVx0bmV0ZGV2LVx1MDAzZXhza190eF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZtbHg1ZV94c2tfdHhfbWV0YWRhdGFfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1ODQyOlx0bmV0ZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODQzLVx0bmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMobmV0ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM9ODkzPXN0YXRpYyB2b2lkIG1seDVlX2J1aWxkX3JlcF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtODk3LVx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZtbHg1ZV9uZXRkZXZfb3BzX3JlcDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYzo4OTg6XHRuZXRkZXYtXHUwMDNlcmVxdWVzdF9vcHNfbG9jayA9IHRydWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtODk5LVx0bmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMobmV0ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuYz05OT1pbnQgbWx4NWlfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuYy0xMjMtXHRuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZtbHg1aV9ldGh0b29sX29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5jOjEyNDpcdG5ldGRldi1cdTAwM2VyZXF1ZXN0X29wc19sb2NrID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9pcG9pYi5jLTEyNS1cdG5ldGRldl9sb2NrZGVwX3NldF9jbGFzc2VzKG5ldGRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYz0xNDYwPXN0YXRpYyBpbnQgbWx4c3dfc3BfcG9ydF9jcmVhdGUoc3RydWN0IG1seHN3X3NwICptbHhzd19zcCwgdTE2IGxvY2FsX3BvcnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYy0xNTU0LVx0ZGV2LVx1MDAzZW5ldG5zX2ltbXV0YWJsZSA9IHRydWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jOjE1NTU6XHRkZXYtXHUwMDNlcmVxdWVzdF9vcHNfbG9jayA9IHRydWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jLTE1NTYtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTU4PXN0cnVjdCBuZXRfZGV2aWNlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI1NzctXHQvKipcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjU3ODpcdCAqIEByZXF1ZXN0X29wc19sb2NrOiByZXF1ZXN0IHRoZSBjb3JlIHRvIHJ1biBhbGwgQG5ldGRldl9vcHMgYW5kXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI1NzktXHQgKiBAZXRodG9vbF9vcHMgdW5kZXIgdGhlIEBsb2NrLlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTgwLVx0ICovXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI1ODE6XHRib29sXHRcdFx0cmVxdWVzdF9vcHNfbG9jaztcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjU4Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI1OTAtXHQgKiBvcGVyYXRpb25zLiBEcml2ZXJzIG1heSBvcHQtaW4gdG8gdGhpcyBiZWhhdmlvciBieSBzZXR0aW5nXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI1OTE6XHQgKiBAcmVxdWVzdF9vcHNfbG9jay5cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjU5Mi1cdCAqXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0yOD1zdGF0aWMgaW5saW5lIGJvb2wgbmV0ZGV2X25lZWRfb3BzX2xvY2soY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMjkte1xuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDozMDpcdGJvb2wgcmV0ID0gZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHM7XG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTMxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYxOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRHVtbXkgRHJpdmVyJiMzOTtzIFJlcXVlc3QgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGR1bW15LmNgIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0JiMzOTtzIHNldHRpbmcgYGRldi0mZ3Q7cmVxdWVzdF9vcHNfbG9jayA9IHRydWU7YC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgaXMgaGFwcGVuaW5nLiBJcyBpdCBmb3IgY29uY3VycmVuY3kgcHJvdGVjdGlvbj8gSXMgdGhpcyBhIHN0YW5kYXJkIHBhdHRlcm4gd2l0aGluIHRoZSBkdW1teSBkcml2ZXI/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4KCkJ1dCwgYmVmb3JlIEkgZ28gZGVlcGVyIGludG8gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBlbHNlLiBEb2VzIHRoZSBgZHVtbXkuY2AgZHJpdmVyIGRlZmluZSBhbmQgc2V0IHRoZSBmbGFnIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgc29tZXdoZXJlPyBUaGF0IGZsYWcgaXMgcmVhbGx5IGltcG9ydGFudC4gSXQgd291bGQgY2hhbmdlIHRoZSB3YXkgSSB0aGluayBhYm91dCBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgYmVpbmcgcGVyZm9ybWVkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBldGh0b29sIG9wZXJhdGlvbnMgb2YgdGhlIGR1bW15IGRyaXZlciB0byBzZWUuIEkgYmV0dGVyIGdvIHRocm91Z2ggYW5kIGNoZWNrIHRoZSBldGh0b29sIG9wZXJhdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGF0IGZsYWcgaXNuJiMzOTt0IHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRodG9vbF9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kdW1teS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2R1bW15LmM9ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkdW1teV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2R1bW15LmMtOTgtXG5kcml2ZXJzL25ldC9kdW1teS5jOjk5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZHVtbXlfZXRodG9vbF9vcHMgPSB7XG5kcml2ZXJzL25ldC9kdW1teS5jLTEwMC1cdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4tLVxuZHJpdmVycy9uZXQvZHVtbXkuYz0xMDM9c3RhdGljIHZvaWQgZHVtbXlfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jLTEwOC1cdGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2ZHVtbXlfbmV0ZGV2X29wcztcbmRyaXZlcnMvbmV0L2R1bW15LmM6MTA5Olx0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2ZHVtbXlfZXRodG9vbF9vcHM7XG5kcml2ZXJzL25ldC9kdW1teS5jLTExMC1cdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTUwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdGh0b29sIER1bW15IE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGR1bW15X2V0aHRvb2xfb3BzYCBzdHJ1Y3R1cmUuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBub3QgZmxhZ2dpbmcgYG9wX25lZWRzX3J0bmxgLCBhbmQgaXQmIzM5O3MgbWlzc2luZyB0aGUgYHNlbGZfdGVzdGAgaW1wbGVtZW50YXRpb24uIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIGtub3cgc29tZSBldGh0b29sIG9wZXJhdGlvbnMgcmVxdWlyZSB0aGUgcm91dGluZyBuZXRsaW5rIGludGVyZmFjZSwgYW5kIGBzZWxmX3Rlc3RgIGlzIHByZXR0eSBpbXBvcnRhbnQgZm9yIGEgYmFzaWMgZHJpdmVyLgoKTm93IEkmIzM5O20gd29uZGVyaW5nLCB3aGljaCBvdGhlciBkcml2ZXJzIGFjdHVhbGx5ICpkbyogc2V0IGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGA/IEl0JiMzOTtzIGVhc3kgZW5vdWdoIHRvIGZpbmQgb3V0LiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LCBzbyBsZXQmIzM5O3MgZmlyZSB1cCBhIGdyZXAgYWNyb3NzIHRoZSBlbnRpcmUga2VybmVsIHNvdXJjZSB0cmVlLiBMZXQmIzM5O3MgZmluZCBvdXQgd2hlcmUgdGhpcyBmbGFnIGlzIGFjdGl2ZWx5IHVzZWQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVudCBiZWhpbmQgdXNpbmcgaXQsIGFuZCB3aGV0aGVyIGl0cyBhYnNlbmNlIGluIGBkdW1teV9ldGh0b29sX29wc2AgaXMgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2Ugb3IgYW4gb3ZlcnNpZ2h0LiBUaGlzIHJlcXVpcmVzIGxvb2tpbmcgYXQgdGhlIGFjdHVhbCBjb2RlIHdoZXJlIHRoZSBmbGFnIGlzIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYz01NzI3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczNi1cdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNzpcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczOC1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MjAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwMjgtXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjk6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDMwLVx0LmdldF9kcnZpbmZvXHRcdFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD05MjM9c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk0Ni0jZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOS1x0XHRCSVQoOClcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0NzojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXHRcdEJJVCg5KVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTQ4LVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oPTEzOD1ldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjYtXHRjYXNlIEVUSFRPT0xfVEVTVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2NzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVDtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2OC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwOTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBpbiBOZXR3b3JrIERyaXZlcnMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBvbmx5IHRoZSBgYm54dGAgYW5kIGBmYm5pY2AgZHJpdmVycyBzZXQgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgZmxhZy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgbGV0JiMzOTtzIGRpZyBpbnRvICp3aHkqLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSB2aXJ0dWFsIGRyaXZlcnMgb3IgcmVwcmVzZW50IHBoeXNpY2FsIFBDSWUgZGV2aWNlcywgYXMgdGhhdCBtaWdodCBiZSBrZXkuCgpMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYm54dGAuIEEgcXVpY2sgbG9vayBhdCB0aGUgY29kZSBzdWdnZXN0cyB0aGF0IGl0JiMzOTtzIGEgUENJIGRyaXZlciDigJNzcGVjaWZpY2FsbHksIGBibnh0X3BjaV9kcml2ZXJgIGluIGBibnh0LmNgIOKAkyBmb3IgQnJvYWRjb20gTmV0WHRyZW1lLUUgaGFyZHdhcmUuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb247IGl0JiMzOTtzIGEgZHJpdmVyIGZvciAqcmVhbCogaGFyZHdhcmUuCgpOb3csIG9uIHRvIGBmYm5pY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxzbyBhIFBDSSBkcml2ZXIsIGBmYm5pY19wY2kuY2AsIHdoaWNoIHNvdW5kcyBsaWtlIGl0JiMzOTtzIGhhbmRsaW5nIE1ldGEmIzM5O3MgQVNJQyBuZXR3b3JrIGNhcmQuIEFnYWluLCB0aGlzIHBvaW50cyB0b3dhcmRzIHBoeXNpY2FsIGhhcmR3YXJlLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogQ2FuIHRoZXNlIGRyaXZlcnMgZnVuY3Rpb24gaW4gYSBwdXJlbHkgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIHN0YW5kYXJkIFFFTVUgb3IgR0NFLCB3aXRob3V0IHRoZSBzcGVjaWZpYyBBU0lDIGhhcmR3YXJlIHRoZXkmIzM5O3JlIGRlc2lnbmVkIGZvcj8gSSYjMzk7bSBkb3VidGZ1bC4gTGV0JiMzOTtzIHNlZSBpZiBRRU1VICplbXVsYXRlcyogZWl0aGVyIGBibnh0YCBvciBgZmJuaWNgLgoKQSBxdWljayBjaGVjayBjb25maXJtcyBteSBzdXNwaWNpb246IFFFTVUgZW11bGF0ZXMgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgZTEwMDAsIHZpcnRpby1uZXQsIGFuZCBzbyBvbiwgYnV0ICpub3QqIGBibnh0YCBvciBgZmJuaWNgLgoKT2theSwgbGV0IG1lIGdvIG9uZSBzdGVwIGZ1cnRoZXIgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkga2luZCBvZiBzb2Z0d2FyZSBidXMgZW11bGF0aW9uIG9yIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLCBzb21ldGhpbmcgdGhhdCBtaWdodCBhdCBsZWFzdCAqc2ltdWxhdGUqIHRoZSBwcmVzZW5jZSBvZiBgYm54dGAgb3IgYGZibmljYCBkZXZpY2VzLgoKSSBuZWVkIHRvIGNvbmZpcm0gYnkgY2hlY2tpbmcgdGhlIHNvdXJjZSBjb2RlIG9mIGJvdGggYGJueHRgIGFuZCBgZmJuaWNgLiBUaW1lIHRvIGxvb2sgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3JpZXM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2AgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2AgZm9yIGNsdWVzLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgbXkgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNzczMD1zdGF0aWMgaW50IF9faW5pdCBibnh0X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzczNC1cdGJueHRfZGVidWdfaW5pdCgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTc3MzU6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmJueHRfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzczNi1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgZmJuaWNgIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgY29udGV4dCBpcyBsaWtlbHkgZmluYW5jaWFsIG9yIHJlbGF0ZWQgdG8gbmV0d29yayBpbmZyYXN0cnVjdHVyZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBmYm5pY2AmIzM0Oy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG9zc2liaWxpdGllcywgdGhhdCBpdCBpcyBsaWtlbHkgYSBuZXR3b3JrIHdpdGggZmluYW5jaWFsIHJlc3BvbnNpYmlsaXRpZXMsIG9yIGlzIHBhcnQgb2YgYSBmaW5hbmNpYWwgc2VydmljZXMgaW5mcmFzdHJ1Y3R1cmUuIE15IGludHVpdGlvbiBpcyB0byBxdWlja2x5IGNoZWNrIHRoZSBwYXJhbWV0ZXJzIHN1cnJvdW5kaW5nIHRoYXQgcGFydGljdWxhciB0ZXJtLCBsaWtlbHkgdG8gdW5kZXJzdGFuZCB0aGUgaXNzdWUgYXQgaGFuZC4gSXQgbWlnaHQgYmUgYSBjb25maWd1cmF0aW9uIGZpbGUsIGEgZGF0YWJhc2UgZW50cnksIG9yIGV2ZW4gYW4gaW50ZXJuYWwgY29kZSBkZXNpZ25hdGlvbi4gSSBuZWVkIHRvIGtub3cgKndoYXQqIGBmYm5pY2AgKmlzKiwgYW5kIHdoZXJlIHRvIGZpbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgbW9zdCBvYnZpb3VzIGFuZCBxdWlja2VzdCBjaGVja3MsIHByb2JhYmx5IGxvb2tpbmcgYXQgcmVjZW50IGxvZ3MsIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCB0b29scywgb3Iga25vd24gc3lzdGVtcyBkb2N1bWVudGF0aW9uIGlmIGF2YWlsYWJsZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBgZmJuaWNgIHRvIGJlIGtleSB0byB0aGUgcHJvYmxlbSwgc28gbGV0JiMzOTtzIGdldCBtb3ZpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9NjU0PXN0YXRpYyBpbnQgX19pbml0IGZibmljX2luaXRfbW9kdWxlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjY2MDpcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2ZmJuaWNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtNjYxLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ5NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgRVRIVE9PTF9URVNUIGFuZCBSVE5MIExvY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFBDSSBkcml2ZXJzLCBgYm54dGAgYW5kIGBmYm5pY2AsIHdoaWNoIGFyZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIChCcm9hZGNvbSBhbmQgTWV0YSBBU0lDKS4gTXkgdHJhaW4gb2YgdGhvdWdodCBub3cgaXMgZHJhd24gdG8gYSBjaGFuZ2UgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhbmQgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYC4gSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzLgoKQWxyaWdodCwgdGhlIGRpZmYgaW50cm9kdWNlcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIChiaXQgOSkgYW5kIGFkZHMgYG5ldGlmX29wZW4oKWAgYW5kIGBuZXRpZl9jbG9zZSgpYCB0byB0aGUgbGlzdCBvZiBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBwcm90ZWN0ZWQgYnkgdGhlIFJUTkwgKHJvdXRpbmcgdGFibGUgbmV0bGluaykgbG9jay4gTm93LCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGJpZ2dlciBwaWN0dXJlLiBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKClgIGNhbiBiZSBjYWxsZWQgZm9yICphbnkqIGRldmljZSB0aGF0IHJlY2VpdmVzIGFuIGBFVEhUT09MX1RFU1RgIGlvY3RsIGNhbGwgKHZpYSBgU0lPQ0VUSFRPT0xgIHdpdGggYGNtZCA9IEVUSFRPT0xfVEVTVGApLgoKTG9va2luZyBhdCBgX19kZXZfZXRodG9vbGAsIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBgU0lPQ0VUSFRPT0xgIGlvY3RsLiBJdCBjaGVja3MgYG5lZWRfcnRubGAsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8IGV0aHRvb2xfY21kX2NoYW5nZXNfZmVhdHVyZXMoZXRoY21kKSB8fCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBldGhjbWQpYC4gIEl0JiMzOTtzIGNyaXRpY2FsIEkgY29uc2lkZXIgd2hhdCB0aGlzIG1lYW5zIGZvciB2YXJpb3VzIG5ldHdvcmsgZGV2aWNlcy4KClN1cHBvc2UgYGRldmAgaXMsIGZvciBpbnN0YW5jZSwgYSBkdW1teSBkZXZpY2UsIG9yIGEgdmV0aCBwYWlyLCBvciBsb29wYmFjay4gVGhlIGBkdW1teWAgZGV2aWNlLCBzcGVjaWZpY2FsbHksIGhhcyBgZGV2LSZndDtyZXF1ZXN0X29wc19sb2NrID0gdHJ1ZTtgISBUaHVzLCBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgaXMgYHRydWVgLiAgVGhlcmVmb3JlLCBgIW5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIGBmYWxzZWAuIGBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKEVUSFRPT0xfVEVTVClgIGlzIGFsc28gYGZhbHNlYC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIEVUSFRPT0xfVEVTVClgICp3aWxsKiBiZSBjYWxsZWQuCgpJbiBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCwgd2Ugc2VlIHRoYXQgd2hlbiBgZXRoY21kYCBpcyBgRVRIVE9PTF9URVNUYCwgaXQgcmV0dXJucyBgb3BzLSZndDtvcF9uZWVkc19ydG5sICZhbXA7IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gRm9yIGEgZHVtbXkgZGV2aWNlLCBgb3BzID0gZGV2LSZndDtldGh0b29sX29wcyA9ICZhbXA7ZHVtbXlfZXRodG9vbF9vcHNgLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgb3BzLSZndDtvcF9uZWVkc19ydG5sYCBpcyAqdW5pbml0aWFsaXplZCogKGxpa2VseSB6ZXJvKS4gU28sIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoKWAgcmV0dXJucyAwIQoKVGhpcyBtZWFucyBgbmVlZF9ydG5sYCBpbiBgX19kZXZfZXRodG9vbGAgYmVjb21lcyBgZmFsc2VgLiBDb25zZXF1ZW50bHksIGBkZXZfZXRodG9vbF9sb2NrZWQoLi4uLCBuZWVkX3J0bmwpYCBpcyBjYWxsZWQgd2l0aCBgbmVlZF9ydG5sYCBiZWluZyBmYWxzZS4gSSBub3cgbmVlZCB0byB2ZXJpZnkgd2hhdCBgZGV2X2V0aHRvb2xfbG9ja2VkYCBkb2VzIHdoZW4gYEVUSFRPT0xfVEVTVGAgaXMgdGhlIGBldGhjbWRgIGFuZCBgbmVlZF9ydG5sYCBpcyBgZmFsc2VgLiBJIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgY29uZGl0aW9uYWwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMwMDpcdFx0Y2FzZSBFVEhUT09MX0dTVFJJTkdTOlxuMzMwMTpcdFx0Y2FzZSBFVEhUT09MX0dTVEFUUzpcbjMzMDI6XHRcdGNhc2UgRVRIVE9PTF9HUEhZU1RBVFM6XG4zMzAzOlx0XHRjYXNlIEVUSFRPT0xfR1RTTzpcbjMzMDQ6XHRcdGNhc2UgRVRIVE9PTF9HUEVSTUFERFI6XG4zMzA1Olx0XHRjYXNlIEVUSFRPT0xfR1VGTzpcbjMzMDY6XHRcdGNhc2UgRVRIVE9PTF9HR1NPOlxuMzMwNzpcdFx0Y2FzZSBFVEhUT09MX0dHUk86XG4zMzA4Olx0XHRjYXNlIEVUSFRPT0xfR0ZMQUdTOlxuMzMwOTpcdFx0Y2FzZSBFVEhUT09MX0dQRkxBR1M6XG4zMzEwOlx0XHRjYXNlIEVUSFRPT0xfR1JYRkg6XG4zMzExOlx0XHRjYXNlIEVUSFRPT0xfR1JYUklOR1M6XG4zMzEyOlx0XHRjYXNlIEVUSFRPT0xfR1JYQ0xTUkxDTlQ6XG4zMzEzOlx0XHRjYXNlIEVUSFRPT0xfR1JYQ0xTUlVMRTpcbjMzMTQ6XHRcdGNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDpcbjMzMTU6XHRcdGNhc2UgRVRIVE9PTF9HUlhGSElORElSOlxuMzMxNjpcdFx0Y2FzZSBFVEhUT09MX0dSU1NIOlxuMzMxNzpcdFx0Y2FzZSBFVEhUT09MX0dGRUFUVVJFUzpcbjMzMTg6XHRcdGNhc2UgRVRIVE9PTF9HQ0hBTk5FTFM6XG4zMzE5Olx0XHRjYXNlIEVUSFRPT0xfR0VUX1RTX0lORk86XG4zMzIwOlx0XHRjYXNlIEVUSFRPT0xfR0VFRTpcbjMzMjE6XHRcdGNhc2UgRVRIVE9PTF9HVFVOQUJMRTpcbjMzMjI6XHRcdGNhc2UgRVRIVE9PTF9QSFlfR1RVTkFCTEU6XG4zMzIzOlx0XHRjYXNlIEVUSFRPT0xfR0xJTktTRVRUSU5HUzpcbjMzMjQ6XHRcdGNhc2UgRVRIVE9PTF9HRkVDUEFSQU06XG4zMzI1Olx0XHRcdGJyZWFrO1xuMzMyNjpcdFx0ZGVmYXVsdDpcbjMzMjc6XHRcdFx0aWYgKCFuc19jYXBhYmxlKG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcbjMzMjg6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMzMyOTpcdFx0fVxuMzMzMDpcdFxuMzMzMTpcdFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChkZXYpO1xuMzMzMjpcdFxuMzMzMzpcdFx0aWYgKGRldi1cdTAwM2VkZXYucGFyZW50KVxuMzMzNDpcdFx0XHRwbV9ydW50aW1lX2dldF9zeW5jKGRldi1cdTAwM2VkZXYucGFyZW50KTtcbjMzMzU6XHRcbjMzMzY6XHRcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkge1xuMzMzNzpcdFx0XHRyYyA9IC1FTk9ERVY7XG4zMzM4Olx0XHRcdGdvdG8gb3V0O1xuMzMzOTpcdFx0fVxuMzM0MDpcdFxuMzM0MTpcdFx0aWYgKGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2ViZWdpbikge1xuMzM0MjpcdFx0XHRyYyA9IGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2ViZWdpbihkZXYpO1xuMzM0MzpcdFx0XHRpZiAocmMgXHUwMDNjIDApXG4zMzQ0Olx0XHRcdFx0Z290byBvdXQ7XG4zMzQ1Olx0XHR9XG4zMzQ2Olx0XHRvbGRfZmVhdHVyZXMgPSBkZXYtXHUwMDNlZmVhdHVyZXM7XG4zMzQ3Olx0XG4zMzQ4Olx0XHRzd2l0Y2ggKGV0aGNtZCkge1xuMzM0OTpcdFx0Y2FzZSBFVEhUT09MX0dTRVQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTQ3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEVUSFRPT0xfVEVTVCBMb2dpYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgRVRIVE9PTF9URVNUYCBpcyBhY3R1YWxseSAqcHJvY2Vzc2VkKiB3aXRoaW4gdGhlIGBkZXZfZXRodG9vbF9sb2NrZWRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgZXRodG9vbCBwdXp6bGUsIGFuZCBrbm93aW5nIGl0cyBleGVjdXRpb24gcGF0aCBpcyBmdW5kYW1lbnRhbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGZsb3cgaGVyZSBhbmQgZmluZCBleGFjdGx5IGhvdyB0aGlzIHNwZWNpZmljIGNvbW1hbmQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGRyaXZlcuKAmXMgb3ZlcmFsbCBldGh0b29sIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgY29kZeKApiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgcm91dGluZXMgaXQgaW50ZXJmYWNlcyB3aXRoIGZvciBoYW5kbGluZyB0aGlzIHRlc3QgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGV4YWN0IGxvY2F0aW9uIGlzIGltcG9ydGFudCBmb3IgYW5hbHl6aW5nIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nhc2UgRVRIVE9PTF9URVNUOiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNDEyLVx0XHRicmVhaztcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzQxMzpcdGNhc2UgRVRIVE9PTF9URVNUOlxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNDE0LVx0XHRyYyA9IGV0aHRvb2xfc2VsZl90ZXN0KGRldiwgdXNlcmFkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoaXMgZnVuY3Rpb24gY2FsbDogYGV0aHRvb2xfc2VsZl90ZXN0KGRldiwgdXNlcmFkZHIpYC4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7bmV0d29yayBpbnRlcmZhY2Ugc2VsZi10ZXN0JiMzNDsgdG8gbWUsIGFuZCBteSBicmFpbiBpcyBhbHJlYWR5IHNlYXJjaGluZyBmb3IgdGhlIGltcGxlbWVudGF0aW9uLiBHaXZlbiB0aGF0IGBldGh0b29sYCBpcyBpbiB0aGUgbmFtZSwgbXkgZ3V0IHNheXMgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgYGV0aHRvb2xgIHV0aWxpdHkuIFNvLCBJIG5lZWQgdG8gZmluZCB0aGUgc291cmNlIGZvciBgZXRodG9vbF9zZWxmX3Rlc3RgLiBDb25zaWRlcmluZyB0aGUga2VybmVsIHN0cnVjdHVyZSwgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBuZXRgIHN1YnN5c3RlbSwgc28gSSYjMzk7bGwgY2hlY2sgYG5ldC9ldGh0b29sL2lvY3RsLmNgIHRvIHRyYWNlIHRoZSBjYWxsLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgdGhlIGRlZmluaXRpb24gdGhlcmUgYW5kIHVuZGVyc3RhbmQgdGhlIHBhcmFtZXRlcnMgYGRldmAgYW5kIGB1c2VyYWRkcmAuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXRodG9vbF9zZWxmX3Rlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9pb2N0bC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2lvY3RsLmM9MjMzMz1zdGF0aWMgaW50IGV0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMjM0OS1cbm5ldC9ldGh0b29sL2lvY3RsLmM6MjM1MDpzdGF0aWMgaW50IGV0aHRvb2xfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgX191c2VyICp1c2VyYWRkcilcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjM1MS17XG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNDEzLVx0Y2FzZSBFVEhUT09MX1RFU1Q6XG5uZXQvZXRodG9vbC9pb2N0bC5jOjM0MTQ6XHRcdHJjID0gZXRodG9vbF9zZWxmX3Rlc3QoZGV2LCB1c2VyYWRkcik7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTM0MTUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbnN0cnVjdGlvbnMsIGFzIHRob3VnaCB0aGV5IGFyZSBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBldGh0b29sIFNlbGYtVGVzdCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgZ2V0IGludG8gdGhlIGd1dHMgb2YgYGV0aHRvb2xgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBgZXRodG9vbF9zZWxmX3Rlc3RgIGxvY2F0ZWQgaW4gYG5ldC9ldGh0b29sL2lvY3RsLmNgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgc2VsZi10ZXN0IGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nLiBXaGF0IGtpbmQgb2YgdGVzdCB2ZWN0b3JzIGRvZXMgaXQgdXNlPyBJcyB0aGVyZSBhIGNvbXByZWhlbnNpdmUgc3RyYXRlZ3kgZm9yIGNvdmVyaW5nIGRpZmZlcmVudCBQSFkgbW9kZXMgYW5kIGxpbmsgc3BlZWRzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2VsbCBpdCBhZGhlcmVzIHRvIHRoZSBsYXRlc3Qgc3RhbmRhcmRzIGFuZCBiZXN0IHByYWN0aWNlcyBmb3IgbmV0d29yayBpbnRlcmZhY2UgdGVzdGluZy4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBpcyBhcmNoaXRlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9pb2N0bC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzUwOlx0c3RhdGljIGludCBldGh0b29sX3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqdXNlcmFkZHIpXG4yMzUxOlx0e1xuMjM1MjpcdFx0c3RydWN0IGV0aHRvb2xfdGVzdCB0ZXN0O1xuMjM1MzpcdFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHM7XG4yMzU0Olx0XHR1NjQgKmRhdGE7XG4yMzU1Olx0XHRpbnQgcmV0LCB0ZXN0X2xlbjtcbjIzNTY6XHRcbjIzNTc6XHRcdGlmICghb3BzLVx1MDAzZXNlbGZfdGVzdCB8fCAhb3BzLVx1MDAzZWdldF9zc2V0X2NvdW50KVxuMjM1ODpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4yMzU5Olx0XG4yMzYwOlx0XHR0ZXN0X2xlbiA9IG9wcy1cdTAwM2VnZXRfc3NldF9jb3VudChkZXYsIEVUSF9TU19URVNUKTtcbjIzNjE6XHRcdGlmICh0ZXN0X2xlbiBcdTAwM2MgMClcbjIzNjI6XHRcdFx0cmV0dXJuIHRlc3RfbGVuO1xuMjM2MzpcdFx0V0FSTl9PTih0ZXN0X2xlbiA9PSAwKTtcbjIzNjQ6XHRcbjIzNjU6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ0ZXN0LCB1c2VyYWRkciwgc2l6ZW9mKHRlc3QpKSlcbjIzNjY6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4yMzY3Olx0XG4yMzY4Olx0XHR0ZXN0LmxlbiA9IHRlc3RfbGVuO1xuMjM2OTpcdFx0ZGF0YSA9IGtjYWxsb2ModGVzdF9sZW4sIHNpemVvZih1NjQpLCBHRlBfVVNFUik7XG4yMzcwOlx0XHRpZiAoIWRhdGEpXG4yMzcxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjM3MjpcdFxuMjM3MzpcdFx0bmV0aWZfdGVzdGluZ19vbihkZXYpO1xuMjM3NDpcdFx0b3BzLVx1MDAzZXNlbGZfdGVzdChkZXYsIFx1MDAyNnRlc3QsIGRhdGEpO1xuMjM3NTpcdFx0bmV0aWZfdGVzdGluZ19vZmYoZGV2KTtcbjIzNzY6XHRcbjIzNzc6XHRcdHJldCA9IC1FRkFVTFQ7XG4yMzc4Olx0XHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBcdTAwMjZ0ZXN0LCBzaXplb2YodGVzdCkpKVxuMjM3OTpcdFx0XHRnb3RvIG91dDtcbjIzODA6XHRcdHVzZXJhZGRyICYjNDM7PSBzaXplb2YodGVzdCk7XG4yMzgxOlx0XHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBkYXRhLCBhcnJheV9zaXplKHRlc3QubGVuLCBzaXplb2YodTY0KSkpKVxuMjM4MjpcdFx0XHRnb3RvIG91dDtcbjIzODM6XHRcdHJldCA9IDA7XG4yMzg0Olx0XG4yMzg1Olx0IG91dDpcbjIzODY6XHRcdGtmcmVlKGRhdGEpO1xuMjM4NzpcdFx0cmV0dXJuIHJldDtcbjIzODg6XHR9XG4yMzg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODE3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoOiBBIERldGVjdGl2ZSYjMzk7cyBNaW5kc2V0KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEJlZm9yZSBJIGRpdmUgZGVlcCBpbnRvIHRoaXMgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpbmVhZ2UuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IFdoYXQgY29tbWl0IGRvZXMgdGhpcyBiZWxvbmcgdG8/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgcGF0Y2ggc2VyaWVzPyBNeSB1c3VhbCBnby10byB3b3VsZCBiZSBgZ2l0IGxvZ2AsIGJ1dCBpdCBsb29rcyBsaWtlIEkgZG9uJiMzOTt0IGhhdmUgdGhhdCB0b29sIGF2YWlsYWJsZS4gSG1tLCBubyBwcm9ibGVtLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIHJlY29uc3RydWN0IHRoZSBpbmZvcm1hdGlvbi4gSSBjYW4mIzM5O3QgZGlyZWN0bHkgY2hlY2sgdGhlIGhpc3RvcnkgdXNpbmcgYGdpdCBsb2dgLiBJZiBJIGRpZCwgSSB3b3VsZCB1c2UgYGdpdCBsb2cgLTFgLCBidXQgdGhhdCYjMzk7cyBub3QgcG9zc2libGUgaGVyZS4KClJpZ2h0LCBzbywgSSBjYW4mIzM5O3QgdXNlIGBnaXQgbG9nYCBkaXJlY3RseSwgYnV0IGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgaXMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjb21taXQgYXBwbGllZCB0aGUgcGF0Y2guCkkgY2FuIGF0dGVtcHQgdG8gdmlldyB0aGUgY2hhbmdlcyBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgY29tbWl0LiBJIHdvdWxkIHR5cGljYWxseSBydW4gc29tZXRoaW5nIGxpa2UgYGdpdCBkaWZmIEhFQUR+MWAsIGJ1dCB3aXRob3V0IHRoZSBHaXQgQ0xJLCB0aGF0JiMzOTtzIG9mZiB0aGUgdGFibGUuCgpBbHJpZ2h0LCB0aGluaywgdGhpbmsuLi4gSSAqY2FuKiBwcm9iYWJseSBnbGVhbiBzb21lIGluZm9ybWF0aW9uIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlIGl0c2VsZiBpZiBJIGNhbiBnZXQgdG8gaXQuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVudCBvZiB0aGUgcGF0Y2ggc2VyaWVzIHdpbGwgYmUgaGVscGZ1bC4gTm93LCBJIHNob3VsZCBzaGlmdCBteSBmb2N1cyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIGJ5IHRoaXMgcGF0Y2guCgpSaWdodCwgbGV0JiMzOTtzIGNoYW5nZSBnZWFycy4gQSBwcm9taXNpbmcgbGVhZCBpcyB0byBzZWUgd2hhdCBkcml2ZXJzIG1pZ2h0IGJlIGltcGFjdGVkIGJ5IHRoaXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEkmIzM5O2xsIGdyZXAgZm9yIGAuc2VsZl90ZXN0YCB0byBzZWUgd2hpY2ggZHJpdmVycyBtaWdodCBiZSB0b3VjaGluZyB0aGF0IGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UgYW5kIHRoZSBhcmVhIGl0IGFmZmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLnNlbGZfdGVzdFxccyo9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmM9MTQ5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHBjbmV0MzJfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3BjbmV0MzIuYy0xNTAxLVx0LmdldF9zdHJpbmdzXHRcdD0gcGNuZXQzMl9nZXRfc3RyaW5ncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmM6MTUwMjpcdC5zZWxmX3Rlc3RcdFx0PSBwY25ldDMyX2V0aHRvb2xfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmMtMTUwMy1cdC5zZXRfcGh5c19pZFx0XHQ9IHBjbmV0MzJfc2V0X3BoeXNfaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1ldGh0b29sLmM9NzM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgeGdiZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWV0aHRvb2wuYy03NjQtXHQuc2V0X2NoYW5uZWxzID0geGdiZV9zZXRfY2hhbm5lbHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWV0aHRvb2wuYzo3NjU6XHQuc2VsZl90ZXN0ID0geGdiZV9zZWxmdGVzdF9ydW4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWV0aHRvb2wuYy03NjYtfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTU0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGFnNzF4eF9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jLTU1My1cdC5nZXRfc3NldF9jb3VudFx0XHRcdD0gYWc3MXh4X2V0aHRvb2xfZ2V0X3NzZXRfY291bnQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jOjU1NDpcdC5zZWxmX3Rlc3RcdFx0XHQ9IG5ldF9zZWxmdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNTU1LX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jPTc4MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibngyX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYy03ODQ0LVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gYm54Ml9zZXRfcGF1c2VwYXJhbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYzo3ODQ1Olx0LnNlbGZfdGVzdFx0XHQ9IGJueDJfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jLTc4NDYtXHQuZ2V0X3N0cmluZ3NcdFx0PSBibngyX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYz0zNjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54MnhfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jLTM2NjItXHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBibngyeF9zZXRfcGF1c2VwYXJhbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYzozNjYzOlx0LnNlbGZfdGVzdFx0XHQ9IGJueDJ4X3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNjY0LVx0LmdldF9zc2V0X2NvdW50XHRcdD0gYm54MnhfZ2V0X3NzZXRfY291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYz01NzI3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTc5OS1cdC5zZXRfcGh5c19pZFx0XHQ9IGJueHRfc2V0X3BoeXNfaWQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jOjU4MDA6XHQuc2VsZl90ZXN0XHRcdD0gYm54dF9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jLTU4MDEtXHQuZ2V0X3RzX2luZm9cdFx0PSBibnh0X2dldF90c19pbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTE0MjI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdGczX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE0MjUwLVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gdGczX3NldF9wYXVzZXBhcmFtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM6MTQyNTE6XHQuc2VsZl90ZXN0XHRcdD0gdGczX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE0MjUyLVx0LmdldF9zdHJpbmdzXHRcdD0gdGczX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZXRodG9vbC5jPTIxNzY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBjeGdiX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZXRodG9vbC5jLTIyMTEtXHQuZ2V0X3J4ZmhfZmllbGRzICAgPSBjeGdiNF9nZXRfcnhmaF9maWVsZHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2V0aHRvb2wuYzoyMjEyOlx0LnNlbGZfdGVzdFx0ICAgPSBjeGdiNF9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2V0aHRvb2wuYy0yMjEzLVx0LmZsYXNoX2RldmljZSAgICAgID0gc2V0X2ZsYXNoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmM9MTQwOT1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX2V0aHRvb2wuYy0xNDMzLVx0LmZsYXNoX2RldmljZSA9IGJlX2RvX2ZsYXNoLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX2V0aHRvb2wuYzoxNDM0Olx0LnNlbGZfdGVzdCA9IGJlX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmMtMTQzNS1cdC5nZXRfcnhfcmluZ19jb3VudCA9IGJlX2dldF9yeF9yaW5nX2NvdW50LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYz00NjE9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHRzbmVwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYy00NjktXHQuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfZXRodG9vbC5jOjQ3MDpcdC5zZWxmX3Rlc3QgPSB0c25lcF9ldGh0b29sX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYy00NzEtXHQuZ2V0X3N0cmluZ3MgPSB0c25lcF9ldGh0b29sX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTM3ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBmZWNfZW5ldF9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zODEwLVx0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozODExOlx0LnNlbGZfdGVzdFx0XHQ9IG5ldF9zZWxmdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTM4MTItfTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19ldGh0b29sLmM9MTI0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGhuc19ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19ldGh0b29sLmMtMTI1My1cdC5nZXRfY2hhbm5lbHMgPSBobnNfZ2V0X2NoYW5uZWxzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZXRodG9vbC5jOjEyNTQ6XHQuc2VsZl90ZXN0ID0gaG5zX25pY19zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19ldGh0b29sLmMtMTI1NS1cdC5nZXRfc3RyaW5ncyA9IGhuc19nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYz0yMTkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaG5zM19ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYy0yMTkzLVx0LmNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZCA9IHRydWUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYzoyMTk0Olx0LnNlbGZfdGVzdCA9IGhuczNfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmMtMjE5NS1cdC5nZXRfZHJ2aW5mbyA9IGhuczNfZ2V0X2RydmluZm8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL2hpbmljX2V0aHRvb2wuYz0xNzI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaGluaWNfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL2hpbmljX2V0aHRvb2wuYy0xNzU5LVx0LmdldF9zdHJpbmdzID0gaGluaWNfZ2V0X3N0cmluZ3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvaGluaWNfZXRodG9vbC5jOjE3NjA6XHQuc2VsZl90ZXN0ID0gaGluaWNfZGlhZ190ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL2hpbmljX2V0aHRvb2wuYy0xNzYxLVx0LnNldF9waHlzX2lkID0gaGluaWNfc2V0X3BoeXNfaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTI3MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlMTAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzUwLVx0LnNldF9yaW5ncGFyYW1cdFx0PSBlMTAwX3NldF9yaW5ncGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM6Mjc1MTpcdC5zZWxmX3Rlc3RcdFx0PSBlMTAwX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzUyLVx0LmdldF9zdHJpbmdzXHRcdD0gZTEwMF9nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9ldGh0b29sLmM9MTg2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX2V0aHRvb2wuYy0xODgxLVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gZTEwMDBfc2V0X3BhdXNlcGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9ldGh0b29sLmM6MTg4MjpcdC5zZWxmX3Rlc3RcdFx0PSBlMTAwMF9kaWFnX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9ldGh0b29sLmMtMTg4My1cdC5nZXRfc3RyaW5nc1x0XHQ9IGUxMDAwX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmM9MjM2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMjM3OC1cdC5zZXRfcGF1c2VwYXJhbVx0XHQ9IGUxMDAwX3NldF9wYXVzZXBhcmFtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL2V0aHRvb2wuYzoyMzc5Olx0LnNlbGZfdGVzdFx0XHQ9IGUxMDAwX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMjM4MC1cdC5nZXRfc3RyaW5nc1x0XHQ9IGUxMDAwX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2V0aHRvb2wuYz0xMTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZm0xMGtfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfZXRodG9vbC5jLTExNTQtXHQuZ2V0X3JlZ3NfbGVuICAgICAgICAgICA9IGZtMTBrX2dldF9yZWdzX2xlbixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2V0aHRvb2wuYzoxMTU1Olx0LnNlbGZfdGVzdFx0XHQ9IGZtMTBrX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2V0aHRvb2wuYy0xMTU2LVx0LmdldF9wcml2X2ZsYWdzXHRcdD0gZm0xMGtfZ2V0X3ByaXZfZmxhZ3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYz01Nzg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaTQwZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTU4MTQtXHQuZ2V0X3J4X3JpbmdfY291bnRcdD0gaTQwZV9nZXRfcnhfcmluZ19jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmM6NTgxNTpcdC5zZWxmX3Rlc3RcdFx0PSBpNDBlX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMtNTgxNi1cdC5nZXRfc3RyaW5nc1x0XHQ9IGk0MGVfZ2V0X3N0cmluZ3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmM9NDgyOD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGljZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYy00ODQ3LVx0LnNldF9tc2dsZXZlbFx0XHQ9IGljZV9zZXRfbXNnbGV2ZWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYzo0ODQ4Olx0LnNlbGZfdGVzdFx0XHQ9IGljZV9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYy00ODQ5LVx0LmdldF9saW5rXHRcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYz0zNDgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWdiX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jLTM1MDAtXHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBpZ2Jfc2V0X3BhdXNlcGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYzozNTAxOlx0LnNlbGZfdGVzdFx0XHQ9IGlnYl9kaWFnX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0zNTAyLVx0LmdldF9zdHJpbmdzXHRcdD0gaWdiX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL2V0aHRvb2wuYz00MzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpZ2J2Zl9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2J2Zi9ldGh0b29sLmMtNDUxLVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gaWdidmZfc2V0X3BhdXNlcGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2J2Zi9ldGh0b29sLmM6NDUyOlx0LnNlbGZfdGVzdFx0XHQ9IGlnYnZmX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL2V0aHRvb2wuYy00NTMtXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBpZ2J2Zl9nZXRfc3NldF9jb3VudCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX2V0aHRvb2wuYz0yMjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWdjX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfZXRodG9vbC5jLTIzMDItXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IGlnY19ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfZXRodG9vbC5jOjIzMDM6XHQuc2VsZl90ZXN0XHRcdD0gaWdjX2V0aHRvb2xfZGlhZ190ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19ldGh0b29sLmMtMjMwNC1cdC5nZXRfbW1cdFx0XHQ9IGlnY19ldGh0b29sX2dldF9tbSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmM9Mzg2MT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JlX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYy0zODgwLVx0LnNldF9tc2dsZXZlbCAgICAgICAgICAgPSBpeGdiZV9zZXRfbXNnbGV2ZWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmM6Mzg4MTpcdC5zZWxmX3Rlc3QgICAgICAgICAgICAgID0gaXhnYmVfZGlhZ190ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jLTM4ODItXHQuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IGl4Z2JlX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYz0zOTEwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaXhnYmVfZXRodG9vbF9vcHNfZTYxMCA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmMtMzkyOS1cdC5zZXRfbXNnbGV2ZWwgICAgICAgICAgID0gaXhnYmVfc2V0X21zZ2xldmVsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jOjM5MzA6XHQuc2VsZl90ZXN0ICAgICAgICAgICAgICA9IGl4Z2JlX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYy0zOTMxLVx0LmdldF9zdHJpbmdzICAgICAgICAgICAgPSBpeGdiZV9nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYz05NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpeGdiZXZmX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk3NS1cdC5zZXRfbXNnbGV2ZWxcdFx0PSBpeGdiZXZmX3NldF9tc2dsZXZlbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jOjk3NjpcdC5zZWxmX3Rlc3RcdFx0PSBpeGdiZXZmX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk3Ny1cdC5nZXRfc3NldF9jb3VudFx0XHQ9IGl4Z2JldmZfZ2V0X3NzZXRfY291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9ldGh0b29sLmM9MjEzND1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NF9lbl9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2V0aHRvb2wuYy0yMTQ1LVx0LmdldF9ldGh0b29sX3N0YXRzID0gbWx4NF9lbl9nZXRfZXRodG9vbF9zdGF0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fZXRodG9vbC5jOjIxNDY6XHQuc2VsZl90ZXN0ID0gbWx4NF9lbl9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2V0aHRvb2wuYy0yMTQ3LVx0LnNldF9waHlzX2lkID0gbWx4NF9lbl9zZXRfcGh5c19pZCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jPTI3MTg9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVlX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmMtMjc3Ny1cdC5zZXRfcHJpdl9mbGFncyAgICA9IG1seDVlX3NldF9wcml2X2ZsYWdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYzoyNzc4Olx0LnNlbGZfdGVzdCAgICAgICAgID0gbWx4NWVfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYy0yNzc5LVx0LmdldF9mZWNfc3RhdHMgICAgID0gbWx4NWVfZ2V0X2ZlY19zdGF0cyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjA0MS1cdC5zZXRfcGF1c2VwYXJhbVx0XHRcdD0gZmJuaWNfcGh5bGlua19zZXRfcGF1c2VwYXJhbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwNDI6XHQuc2VsZl90ZXN0XHRcdFx0PSBmYm5pY19zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDQzLVx0LmdldF9zdHJpbmdzXHRcdFx0PSBmYm5pY19nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jPTI1MDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZnBfbmV0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmMtMjUxMi1cdC5zZXRfcmluZ3BhcmFtXHRcdD0gbmZwX25ldF9zZXRfcmluZ3BhcmFtLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2V0aHRvb2wuYzoyNTEzOlx0LnNlbGZfdGVzdFx0XHQ9IG5mcF9uZXRfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2V0aHRvb2wuYy0yNTE0LVx0LmdldF9zdHJpbmdzXHRcdD0gbmZwX25ldF9nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jPTI1NTA9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5mcF9wb3J0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmMtMjU1NS1cdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBuZnBfcG9ydF9nZXRfc3RhdHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jOjI1NTY6XHQuc2VsZl90ZXN0XHRcdD0gbmZwX25ldF9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jLTI1NTctXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBuZnBfcG9ydF9nZXRfc3NldF9jb3VudCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM9NTM0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtNTM1NS1cdC5nZXRfc3NldF9jb3VudCA9IG52X2dldF9zc2V0X2NvdW50LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnZpZGlhL2ZvcmNlZGV0aC5jOjUzNTY6XHQuc2VsZl90ZXN0ID0gbnZfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnZpZGlhL2ZvcmNlZGV0aC5jLTUzNTctXHQuZ2V0X3RzX2luZm8gPSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmM9OTE5PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXR4ZW5fbmljX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMtOTMzLVx0LnNldF93b2wgPSBuZXR4ZW5fbmljX3NldF93b2wsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jOjkzNDpcdC5zZWxmX3Rlc3QgPSBuZXR4ZW5fbmljX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMtOTM1LVx0LmdldF9zdHJpbmdzID0gbmV0eGVuX25pY19nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkZS9xZWRlX2V0aHRvb2wuYz0yMjY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcWVkZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkZS9xZWRlX2V0aHRvb2wuYy0yMzA1LVx0LnNldF9jaGFubmVsc1x0XHRcdD0gcWVkZV9zZXRfY2hhbm5lbHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkZS9xZWRlX2V0aHRvb2wuYzoyMzA2Olx0LnNlbGZfdGVzdFx0XHRcdD0gcWVkZV9zZWxmX3Rlc3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkZS9xZWRlX2V0aHRvb2wuYy0yMzA3LVx0LmdldF9tb2R1bGVfaW5mb1x0XHQ9IHFlZGVfZ2V0X21vZHVsZV9pbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYz0xODIzPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBxbGNuaWNfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfZXRodG9vbC5jLTE4MzktXHQuc2V0X3dvbCA9IHFsY25pY19zZXRfd29sLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfZXRodG9vbC5jOjE4NDA6XHQuc2VsZl90ZXN0ID0gcWxjbmljX2RpYWdfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYy0xODQxLVx0LmdldF9zdHJpbmdzID0gcWxjbmljX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmM9Mzk9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVmMTAwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmMtNDUtXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBlZnhfZXRodG9vbF9nZXRfc3NldF9jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmM6NDY6XHQuc2VsZl90ZXN0XHRcdD0gZWZ4X2V0aHRvb2xfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAwX2V0aHRvb2wuYy00Ny1cdC5nZXRfc3RyaW5nc1x0XHQ9IGVmeF9ldGh0b29sX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9ldGh0b29sLmM9MjQwPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlZnhfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2V0aHRvb2wuYy0yNTYtXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBlZnhfZXRodG9vbF9nZXRfc3NldF9jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9ldGh0b29sLmM6MjU3Olx0LnNlbGZfdGVzdFx0XHQ9IGVmeF9ldGh0b29sX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9ldGh0b29sLmMtMjU4LVx0LmdldF9zdHJpbmdzXHRcdD0gZWZ4X2V0aHRvb2xfZ2V0X3N0cmluZ3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9ldGh0b29sLmM9MTMyNz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZWY0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vZXRodG9vbC5jLTEzNDQtXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBlZjRfZXRodG9vbF9nZXRfc3NldF9jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vZXRodG9vbC5jOjEzNDU6XHQuc2VsZl90ZXN0XHRcdD0gZWY0X2V0aHRvb2xfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9ldGh0b29sLmMtMTM0Ni1cdC5nZXRfc3RyaW5nc1x0XHQ9IGVmNF9ldGh0b29sX2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9ldGh0b29sLmM9MjM4PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlZnhfc2llbmFfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL2V0aHRvb2wuYy0yNTQtXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBlZnhfc2llbmFfZXRodG9vbF9nZXRfc3NldF9jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9ldGh0b29sLmM6MjU1Olx0LnNlbGZfdGVzdFx0XHQ9IGVmeF9zaWVuYV9ldGh0b29sX3NlbGZfdGVzdCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9ldGh0b29sLmMtMjU2LVx0LmdldF9zdHJpbmdzXHRcdD0gZWZ4X3NpZW5hX2V0aHRvb2xfZ2V0X3N0cmluZ3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0xMDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3RtbWFjX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMTEwOC1cdC5zZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19zZXRfcGF1c2VwYXJhbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MTEwOTpcdC5zZWxmX3Rlc3QgPSBzdG1tYWNfc2VsZnRlc3RfcnVuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTEwLVx0LmdldF9ldGh0b29sX3N0YXRzID0gc3RtbWFjX2dldF9ldGh0b29sX3N0YXRzLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0zMTI9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheDg4NzcyX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy0zMjQtXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzozMjU6XHQuc2VsZl90ZXN0XHRcdD0gbmV0X3NlbGZ0ZXN0LFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTMyNi1cdC5nZXRfc3RyaW5nc1x0XHQ9IGF4ODg3NzJfZXRodG9vbF9nZXRfc3RyaW5ncyxcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTE5MTg9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBsYW43OHh4X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTkyOC1cdC5nZXRfc3NldF9jb3VudCA9IGxhbjc4eHhfZ2V0X3NzZXRfY291bnQsXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjE5Mjk6XHQuc2VsZl90ZXN0XHQ9IG5ldF9zZWxmdGVzdCxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTkzMC1cdC5nZXRfc3RyaW5nc1x0PSBsYW43OHh4X2dldF9zdHJpbmdzLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTgzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHNtc2M5NXh4X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTg0OC1cdC5nZXRfdHNfaW5mb1x0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6ODQ5Olx0LnNlbGZfdGVzdFx0PSBuZXRfc2VsZnRlc3QsXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy04NTAtXHQuZ2V0X3N0cmluZ3NcdD0gc21zYzk1eHhfZXRodG9vbF9nZXRfc3RyaW5ncyxcbi0tXG5uZXQvZHNhL3VzZXIuYz0yNDkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZHNhX3VzZXJfZXRodG9vbF9vcHMgPSB7XG4tLVxubmV0L2RzYS91c2VyLmMtMjUyMC1cdC5nZXRfdHNfaW5mb1x0XHQ9IGRzYV91c2VyX2dldF90c19pbmZvLFxubmV0L2RzYS91c2VyLmM6MjUyMTpcdC5zZWxmX3Rlc3RcdFx0PSBkc2FfdXNlcl9uZXRfc2VsZnRlc3QsXG5uZXQvZHNhL3VzZXIuYy0yNTIyLVx0LmdldF9tbVx0XHRcdD0gZHNhX3VzZXJfZ2V0X21tLFxuLS1cbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vcGFyYWxsZWwtcGVyZi5weT0yND1jbGFzcyBWZXJib3NpdHkoKTpcbi0tXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3BhcmFsbGVsLXBlcmYucHktMjktXHRcdHNlbGYuZGVidWcgICAgID0gZGVidWdcbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vcGFyYWxsZWwtcGVyZi5weTozMDpcdFx0c2VsZi5zZWxmX3Rlc3QgPSBUcnVlXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3BhcmFsbGVsLXBlcmYucHktMzEtXHRcdGlmIHNlbGYuZGVidWc6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MjIxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgRmxhZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGZsYWcsIGFuZCBJJiMzOTttIHdvbmRlcmluZyB3aHkgaXQmIzM5O3MgZXZlbiB0aGVyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGJhc2ljcywgSSYjMzk7bGwgY2hlY2sgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQ6IGFoYSwgaXQmIzM5O3MganVzdCBhIGJpdCBmbGFnLCBub3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuIE5vdywgbGV0JiMzOTtzIGxvb2sgYXQgd2hlcmUgdGhpcyBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gSSBzZWUgdGhlIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdG8gYmUgY2hlY2tpbmcgaWYgYSBwYXJ0aWN1bGFyIGBldGhjbWRgIG5lZWRzIHRoZSBSVE5MIChSb3V0aW5nIFRhYmxlIE5ldGxpbmspIGxvY2suIEl0IG1ha2VzIHNlbnNlIHRoYXQgdGVzdGluZyBtaWdodCBuZWVkIGl0LCB3aGljaCBpcyBjb25maXJtZWQgaGVyZSwgZm9yIGBFVEhUT09MX1RFU1RgLiBCdXQgc3RpbGwsIEkgbmVlZCBzb21lIG1vcmUgY29udGV4dC4gSSYjMzk7bSBub3QgZmFtaWxpYXIgd2l0aCB3aHkgdGhpcyBmbGFnIHdhcyBleHBsaWNpdGx5IGFkZGVkLCBhbmQgaWYgaXQmIzM5O3MgbmV3LCBvciBhbiBvbGQgY29uY2VwdCB0aGF0IGdvdCBleHBsaWNpdGx5IGRvY3VtZW50ZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGdpdCBoaXN0b3J5LCBvciBhdCBsZWFzdCBncmVwIGZvciBvdGhlciB1c2VzIG9mIGBFVEhUT09MX09QX05FRURTX1JUTkxfYCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gVGhlIG5hbWluZyBjb252ZW50aW9uIGhpbnRzIHRoZXJlIG1pZ2h0IGJlIG90aGVyIHJlbGF0ZWQgZmxhZ3MsIGFuZCBzZWVpbmcgdGhvc2Ugb3RoZXIgb3B0aW9ucyB3b3VsZCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHRzIGludG8gdGhlIGRlc2lnbiBkZWNpc2lvbnMgaGVyZS4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIGNoZWNrIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VUSFRPT0xfT1BfTkVFRFNfUlROTF8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldi1mZWF0dXJlcy5yc3Q9ODA9ZXRodG9vbCBjYWxsYmFja3MgdGhhdCBtYXkgZW5kIHVwIGludm9raW5nIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoKSBtdXN0XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2LWZlYXR1cmVzLnJzdDo4MTpvcHQgYmFjayBpbnRvIHJ0bmxfbG9jayBieSBzZXR0aW5nIHRoZSBtYXRjaGluZyBFVEhUT09MX09QX05FRURTX1JUTkxfKlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldi1mZWF0dXJlcy5yc3QtODItYml0IGluIGBgZXRodG9vbF9vcHM6Om9wX25lZWRzX3J0bmxgYC4gVGhlIGV0aHRvb2wgY29yZSB0aGVuIGtlZXBzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTM3OT1hcHByb3ByaWF0ZSBiaXRzIGluIGBgZXRodG9vbF9vcHM6Om9wX25lZWRzX3J0bmxgYCAoaWYgdGhlIG5lY2Vzc2FyeVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjM4MDpgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qYGAgYml0IGRvZXNuJiMzOTt0IGV4aXN0LCBqdXN0IGFkZCBpdCkuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMzgxLUNvbW1vbmx5IHVzZWQgY29yZSBoZWxwZXJzIHdoaWNoIGZvcmNlIGRyaXZlcnMgdG8gc2VsZWN0aXZlbHkgb3B0LWluIHRvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYz01NzI3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczMi1cdC5yeGZoX3ByaXZfc2l6ZVx0XHRcdD0gc2l6ZW9mKHN0cnVjdCBibnh0X3Jzc19jdHgpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYzo1NzMzOlx0Lm9wX25lZWRzX3J0bmxcdFx0XHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYzo1NzM0Olx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNTpcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNjpcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNzpcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczOC1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTk4Mj1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ3ZlX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy05ODUtXHRcdFx0XHQgRVRIVE9PTF9SSU5HX1VTRV9SWF9CVUZfTEVOLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjk4NjpcdC5vcF9uZWVkc19ydG5sID0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg3Olx0XHRcdCBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg4Olx0XHRcdCBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTg5LVx0LmdldF9kcnZpbmZvID0gZ3ZlX2dldF9kcnZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmM9MTg1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlhdmZfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuYy0xODU3LVx0LnN1cHBvcnRlZF9pbnB1dF94ZnJtXHQ9IFJYSF9YRlJNX1NZTV9YT1IsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jOjE4NTg6XHQub3BfbmVlZHNfcnRubFx0XHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmMtMTg1OS1cdC5nZXRfZHJ2aW5mb1x0XHQ9IGlhdmZfZ2V0X2RydmluZm8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYz0yNzE4PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg1ZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3MjItXHQucnhmaF9tYXhfbnVtX2NvbnRleHRzXHQ9IE1MWDVFX01BWF9OVU1fUlNTLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYzoyNzIzOlx0Lm9wX25lZWRzX3J0bmxcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM6MjcyNDpcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYzoyNzI1Olx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jOjI3MjY6XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmMtMjcyNy1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jPTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVlX3JlcF9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtNDE5LVx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYzo0MjA6XHQub3BfbmVlZHNfcnRubFx0ICAgPSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYzo0MjE6XHRcdFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM6NDIyOlx0XHRcdCAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTQyMy1cdC5nZXRfZHJ2aW5mb1x0ICAgPSBtbHg1ZV9yZXBfZ2V0X2RydmluZm8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYz0yODQ9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVpX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9ldGh0b29sLmMtMjg3LVx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9ldGh0b29sLmM6Mjg4Olx0Lm9wX25lZWRzX3J0bmxcdCAgICA9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYzoyODk6XHRcdFx0ICAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYzoyOTA6XHRcdFx0ICAgICAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYy0yOTEtXHQuZ2V0X2RydmluZm8gICAgICAgID0gbWx4NWlfZ2V0X2RydmluZm8sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYz0zMTI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVpX3BrZXlfZXRodG9vbF9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jOjMxMzpcdC5vcF9uZWVkc19ydG5sXHQgICAgPSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jLTMxNC1cdC5nZXRfZHJ2aW5mbyAgICAgICAgPSBtbHg1aV9nZXRfZHJ2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmM9MTI2Mz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4c3dfc3BfcG9ydF9ldGh0b29sX29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYy0xMjY0LVx0LmNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZFx0PSB0cnVlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fZXRodG9vbC5jOjEyNjU6XHQub3BfbmVlZHNfcnRubFx0XHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYzoxMjY2Olx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYy0xMjY3LVx0LmdldF9kcnZpbmZvXHRcdFx0PSBtbHhzd19zcF9wb3J0X2dldF9kcnZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jPTIwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBmYm5pY19ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDIyLVx0LnJ4ZmhfbWF4X251bV9jb250ZXh0c1x0XHQ9IEZCTklDX1JQQ19SU1NfVEJMX0NPVU5ULFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MjAyMzpcdC5vcF9uZWVkc19ydG5sXHRcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjQ6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjU6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjY6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoyMDI3Olx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjg6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjk6XHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDMwLVx0LmdldF9kcnZpbmZvXHRcdFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYz04NjM9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1hbmFfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMtODcwLVx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRV9UWCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jOjg3MTpcdC5vcF9uZWVkc19ydG5sXHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYzo4NzI6XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jOjg3MzpcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1MgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmM6ODc0Olx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYy04NzUtXHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gbWFuYV9nZXRfZXRodG9vbF9zdGF0cyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jPTIwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5zaW1fZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYy0yMTEtXHRcdFx0XHRcdCAgRVRIVE9PTF9SSU5HX1VTRV9IRFNfVEhSUyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM6MjEyOlx0Lm9wX25lZWRzX3J0bmxcdFx0XHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jLTIxMy1cdC5nZXRfcGF1c2Vfc3RhdHNcdCAgICAgICAgPSBuc2ltX2dldF9wYXVzZV9zdGF0cyxcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD05MjM9c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTkzNy0gKi9cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjkzODojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1NcdEJJVCgwKVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTM5OiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1NcdFx0QklUKDEpXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDA6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTVx0QklUKDIpXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDE6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTXHRcdEJJVCgzKVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTQyOiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDT0FMRVNDRVx0XHRCSVQoNClcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0MzojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTVx0QklUKDUpXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDQ6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU1cdEJJVCg2KVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTQ1OiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTU1x0XHRCSVQoNylcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0NjojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOS1x0XHRCSVQoOClcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0NzojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXHRcdEJJVCg5KVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTQ4LVxuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk3NC0gKiBAc3VwcG9ydGVkX2h3dHN0YW1wX3F1YWxpZmllcnM6IGJpdGZpZWxkIG9mIHN1cHBvcnRlZCBod3RzdGFtcCBxdWFsaWZpZXIuXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NzU6ICogQG9wX25lZWRzX3J0bmw6IG1hc2sgb2YgJUVUSFRPT0xfT1BfTkVFRFNfUlROTF8qIGJpdHMuXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05NzYtICpcdEZvciB1c2Ugd2l0aCBvcHMtbG9ja2VkIGRyaXZlcnMgKGlnbm9yZWQgb3RoZXJ3aXNlKS4gU2VsZWN0cyB3aGljaFxuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTExOTYtICogYGBydG5sX2xvY2tgYCBpcyBhZGRpdGlvbmFsbHkgaGVsZCBvbmx5IGZvciBjYWxsYmFja3MgZm9yIHdoaWNoXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDoxMTk3OiAqIHRoZSBkcml2ZXIgb3B0cyBpbiB2aWEgdGhlIG1hdGNoaW5nIGBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgYCBiaXRcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTExOTgtICogaW4gQG9wX25lZWRzX3J0bmwuXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9OTI9ZXRodG9vbF9ubF9tc2dfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBjbWQpXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTAwLVx0Y2FzZSBFVEhUT09MX01TR19MSU5LTU9ERVNfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTAxOlx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDItXHRjYXNlIEVUSFRPT0xfTVNHX1BSSVZGTEFHU19TRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMDM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDQtXHRjYXNlIEVUSFRPT0xfTVNHX1JJTkdTX1NFVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwNTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEwNi1cdGNhc2UgRVRIVE9PTF9NU0dfQ0hBTk5FTFNfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTA3Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFM7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDgtXHRjYXNlIEVUSFRPT0xfTVNHX0NPQUxFU0NFX1NFVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwOTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTEwLVx0Y2FzZSBFVEhUT09MX01TR19QQVVTRV9HRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTE6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTEyLVx0Y2FzZSBFVEhUT09MX01TR19QQVVTRV9TRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE0LVx0Y2FzZSBFVEhUT09MX01TR19SU1NfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTE1Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTYtXHRjYXNlIEVUSFRPT0xfTVNHX0xJTktTVEFURV9HRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTc6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE4LVx0Y2FzZSBFVEhUT09MX01TR19UU0NPTkZJR19HRVQ6XG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM4PWV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE0Ni1cdGNhc2UgRVRIVE9PTF9TU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTQ3Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNDgtXHRjYXNlIEVUSFRPT0xfU1BGTEFHUzpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE0OTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUztcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1MC1cdGNhc2UgRVRIVE9PTF9TUklOR1BBUkFNOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTUxOlx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTUyLVx0Y2FzZSBFVEhUT09MX1NDSEFOTkVMUzpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1MzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTU0LVx0Y2FzZSBFVEhUT09MX1NDT0FMRVNDRTpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1NTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTU2LVx0Y2FzZSBFVEhUT09MX0dQQVVTRVBBUkFNOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTU3Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1OC1cdGNhc2UgRVRIVE9PTF9TUEFVU0VQQVJBTTpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1OTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU07XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjAtXHRjYXNlIEVUSFRPT0xfU1JTU0g6XG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTYyLVx0Y2FzZSBFVEhUT09MX1NSWEZISU5ESVI6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUztcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2NC1cdGNhc2UgRVRIVE9PTF9HTElOSzpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2NTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTks7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjYtXHRjYXNlIEVUSFRPT0xfVEVTVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2NzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVDtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2OC1cdH1cbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTMyNzI9ZGV2X2V0aHRvb2xfbG9ja2VkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM1OTAtICogRHJpdmVyLWRlY2lkZWQgU0VUIGNvbW1hbmRzIHRoYXQgbWF5IGNoYWluIGludG8gcnRubC1vbmx5IGhlbHBlcnMgYXJlXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM1OTE6ICogY292ZXJlZCBieSBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoKS9FVEhUT09MX09QX05FRURTX1JUTkxfKi5cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzU5Mi0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzMzIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5kZXJzdGFuZGluZyB0aGUgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qYCBGbGFnIGluIHRoZSBMaW51eCBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIE15IGZvY3VzIGlzIG9uIGhvdyB0aGlzIGBFVEhUT09MX09QX05FRURTX1JUTkxfKmAgZmxhZyBvcGVyYXRlcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLgoKRnJvbSB0aGUgY29kZSwgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGlzIG1hc2ssIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAsIGRpY3RhdGVzIHdoaWNoIGV0aHRvb2wgY2FsbGJhY2tzIHJlcXVpcmUgdGhlIGBydG5sX2xvY2tgIGhlbGQgZm9yIGV4ZWN1dGlvbi4gSSBhbHJlYWR5IGtub3cgdGhpcyBhcmVhIHF1aXRlIHdlbGwuIEhpc3RvcmljYWxseSwgYWxsIGV0aHRvb2wgb3BlcmF0aW9ucyB3ZXJlIGluaGVyZW50bHkgcHJvdGVjdGVkIGJ5IGBydG5sX2xvY2soKWAuIFRoZSBhcmNoaXRlY3R1cmUgaGFzIGV2b2x2ZWQsIGFuZCBub3cgd2UgaGF2ZSAmIzM0O29wcy1sb2NrZWQmIzM0OyBkcml2ZXJzLCB3aGljaCB1c2UgYG5ldGRldl9sb2NrKGRldilgIGZvciBjb25jdXJyZW5jeSBjb250cm9sIGluc3RlYWQuIEkmIzM5O20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoIHRoZSByYXRpb25hbGUgZm9yIHRoaXMgY2hhbmdlIGFuZCB0aGUgcGVyZm9ybWFuY2UgZ2FpbnMgaXQgY2FuIHByb3ZpZGUgaW4gY2VydGFpbiBhcmNoaXRlY3R1cmVzLgoKSG93ZXZlciwgYSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHNvbWUgb3BlcmF0aW9ucyBzdGlsbCAqbmVlZCogYHJ0bmxfbG9ja2AsIGV2ZW4gd2l0aGluIGFuIG9wcy1sb2NrZWQgY29udGV4dC4gVGhpcyBpcyB3aGVyZSBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgIGNvbWVzIGludG8gcGxheS4gRm9yIGluc3RhbmNlLCBpZiBhbiBldGh0b29sIGNhbGxiYWNrLCBsaWtlIGBzZWxmX3Rlc3RgLCBpbnZva2VzIGBuZXRpZl9vcGVuKClgIG9yIGBuZXRpZl9jbG9zZSgpYCwgd2hpY2ggYXJlIGBydG5sX2xvY2tgIHByb3RlY3RlZCwgb3IgY2FsbHMgb3RoZXIgZnVuY3Rpb25zIHRoYXQgcmVseSBvbiB0aGF0IGxvY2ssIHRoZSBkcml2ZXIgbmVlZHMgdG8gc2lnbmFsIHRoaXMuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgYml0LCBzdWNoIGFzIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdpdGhpbiBgb3BzLSZndDtvcF9uZWVkc19ydG5sYC4KCk5vdywgaG93IGRvZXMgdGhpcyBtYW5pZmVzdCBpbiB0aGUga2VybmVsIGNvZGU/IEluIGBfX2Rldl9ldGh0b29sKClgLCB0aGUgYG5lZWRfcnRubGAgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGV0aGVyIGBydG5sX2xvY2soKWAgaXMgYWNxdWlyZWQuIFRoZSBsb2dpYyBzaG93cyB0aGF0IGZvciAqb3JkaW5hcnkqIGRyaXZlcnPigJR0aG9zZSB0aGF0IGRvbiYjMzk7dCB1c2UgYG5ldGRldl9uZWVkX29wc19sb2NrKGRldilg4oCUYG5lZWRfcnRubGAgaXMgYWx3YXlzIGB0cnVlYC4gVGhpcyBtZWFucyB0aGV5IGFsd2F5cyB0YWtlIHRoZSBgcnRubF9sb2NrYC4KCkNvbnZlcnNlbHksIGZvciAqb3BzLWxvY2tlZCogZHJpdmVycywgYG5lZWRfcnRubGAgaGluZ2VzIG9uIGEgZmV3IGNvbmRpdGlvbnM6IGlmIGBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZClgIGlzIHRydWUsIG9yIGlmIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBldGhjbWQpYCBpcyB0cnVlLCBvciBpZiBgIW5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIHRydWUgKHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRldmljZSBpcyBub3Qgb3BzLWxvY2tlZCkgLSBvciBpZiB0aGUgcmVsZXZhbnQgYml0cyBhcmUgc2V0LiBTbyB0aGUgcmVsZXZhbnQgY2FzZSBmb3IgbXkgcHVycG9zZXMgaXMsIGFuIG9wcy1sb2NrZWQgZHJpdmVyIGNhbiBzdGlsbCByZXF1ZXN0IGBydG5sX2xvY2tgIGJ5IHNldHRpbmcgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qYC4KCkxvb2tpbmcgYXQgdGhlIGNvZGViYXNlLCBJIHNlZSB0aGF0IG9ubHkgYGJueHRgIGFuZCBgZmJuaWNgIHNldCB0aGlzIGJpdCEgVGhpcyBpcyBmYXNjaW5hdGluZyAtIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgaW5kaWNhdGluZyB0aGF0IHNwZWNpZmljIGV0aHRvb2wgb3BlcmF0aW9ucyByZXF1aXJlIHRoZSBgcnRubF9sb2NrYC4gSSBub3cgbmVlZCB0byBjbGFyaWZ5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBibnh0YCBhY3R1YWxseSB1c2VzIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYC4gSSBtdXN0IGNvbmZpcm0gd2hldGhlciBgYm54dGAgc2V0cyBgcmVxdWVzdF9vcHNfbG9ja2Agb3IgYHF1ZXVlX21nbXRfb3BzYCBhdCBkZXZpY2UgcmVnaXN0cmF0aW9uIHRpbWUuIFRoaXMgaXMgY3JpdGljYWwgdG8gdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXF1ZXN0X29wc19sb2NrfHF1ZXVlX21nbXRfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjYxNj1zdGF0aWMgaW50IGJueHRfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NjYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY2NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWVfbWdtdF9vcHMgYm54dF9xdWV1ZV9tZ210X29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NjY1LVx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGJueHRfcnhfcmluZ19pbmZvKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjY3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE2Njc1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGJueHRfcXVldWVfbWdtdF9vcHNfdW5zdXBwID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY2NzYtXHQubmRvX2RlZmF1bHRfcWNmZ1x0PSBibnh0X3F1ZXVlX2RlZmF1bHRfcWNmZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNzExND1zdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzM1OTpcdGRldi1cdTAwM2VxdWV1ZV9tZ210X29wcyA9IFx1MDAyNmJueHRfcXVldWVfbWdtdF9vcHNfdW5zdXBwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNjAtXHRpZiAoQk5YVF9TVVBQT1JUU19RVUVVRV9BUEkoYnApKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTczNjE6XHRcdGRldi1cdTAwM2VxdWV1ZV9tZ210X29wcyA9IFx1MDAyNmJueHRfcXVldWVfbWdtdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzM2Mi1cdGRldi1cdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjE2MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRHJpdmVyIExvY2tpbmcgUmVxdWlyZW1lbnRzKioKClJpZ2h0LCBzbywgdGhlIGBibnh0YCBkcml2ZXIgZXhwb3NlcyBgZGV2LSZndDtxdWV1ZV9tZ210X29wc2AsIHdoaWNoIG1lYW5zIHRoYXQgYG5ldGRldl9uZWVkX29wc19sb2NrYCBpcyBkZWZpbml0ZWx5IHRydWUgZm9yIGl0LiBTdGFuZGFyZCBzdHVmZiwgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBOb3csIHdoYXQgYWJvdXQgdGhlIGBmYm5pY2AgZHJpdmVyPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZmJuaWNgIHRvIHNlZSBpZiBpdCBmb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGRpZmZlcmVudCBpbiBpdHMgYXJjaGl0ZWN0dXJlIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHdoZXRoZXIgYSBsb2NraW5nIG1lY2hhbmlzbSBpcyByZXF1aXJlZCBmb3IgaXRzIG9wZXJhdGlvbnMuIE5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGhhcyB0aG9zZSBzaW1pbGFyIHF1ZXVlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIHRyaWdnZXIgdGhlIG5lZWQgZm9yIGEgbG9jay4gVGltZSB0byBkaWcgaW50byB0aGUgYGZibmljYCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXF1ZXN0X29wc19sb2NrfHF1ZXVlX21nbXRfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jPTc0Nj1zdHJ1Y3QgbmV0X2RldmljZSAqZmJuaWNfbmV0ZGV2X2FsbG9jKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTc2MC1cdG5ldGRldi1cdTAwM2VzdGF0X29wcyA9IFx1MDAyNmZibmljX3N0YXRfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYzo3NjE6XHRuZXRkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcdTAwMjZmYm5pY19xdWV1ZV9tZ210X29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmMtNzYyLVx0bmV0ZGV2LVx1MDAzZW5ldG1lbV90eCA9IE5FVE1FTV9UWF9ETUE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM9MjkyOT1zdGF0aWMgaW50IGZibmljX3F1ZXVlX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcW1lbSwgaW50IGlkeClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguYy0yOTY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM6Mjk3MDpjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGZibmljX3F1ZXVlX21nbXRfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmMtMjk3MS1cdC5uZG9fcXVldWVfbWVtX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBmYm5pY19xX3RyaWFkKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguaD0xNTA9c3RydWN0IGZibmljX25hcGlfdmVjdG9yIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguaC0xNjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguaDoxNjM6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWVfbWdtdF9vcHMgZmJuaWNfcXVldWVfbWdtdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguaC0xNjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyOTA2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBDSSBEcml2ZXIgUHJvYmluZyBpbiBWaXJ0dWFsIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJueHRgIGFuZCBgZmJuaWNgLCBib3RoIFBDSSBkcml2ZXJzLCBib3RoIGhhdmluZyBgcXVldWVfbWdtdF9vcHNgLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMsIGNhbiBlaXRoZXIgb2YgdGhlc2UgYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCBvciBldmVuICp1c2VkKiB3aXRoaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBldmVuIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8KCk15IGZpcnN0IGluc3RpbmN0IGlzLCBubywgcHJvYmFibHkgbm90LiBDYW4geW91IGV2ZW4gcHJvYmUgYSBQQ0kgZGV2aWNlIGlmIGl0ICpkb2VzbiYjMzk7dCogaGF2ZSBzb21lIGtpbmQgb2YgcGh5c2ljYWwgaGFyZHdhcmUgdG8gYmFjayBpdCwgb3IgYSByb2J1c3QgUUVNVSBlbXVsYXRpb24gb2YgaXQ/IFVzdWFsbHksIG5vLiBJIG1lYW4sIHdpdGhvdXQgYSB2aXJ0dWFsIGVtdWxhdGlvbiBsaWtlIHZpcnRpbywgb3IgYW4gZW11bGF0ZWQgUENJIGRldmljZSB3aXRoaW4gUUVNVSBsaWtlIGUxMDAwL2UxMDAwZS9pZ2IvcnRsODEzOSwgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGV2ZW4gKmZpbmQqIHRoZSBkZXZpY2UuCgpMZXQmIzM5O3MgY2hlY2sgUUVNVSBmaXJzdC4gRG9lcyBRRU1VIGVtdWxhdGUgYGJueHRgPyBOb3BlLiBCcm9hZGNvbSYjMzk7cyBgYm54dGAgaXNuJiMzOTt0IGEgc3RhbmRhcmQgZW11bGF0aW9uIHRhcmdldC4gVGhlbiBgZmJuaWNgPyBIbW0sIHRoYXQmIzM5O3MgTWV0YSYjMzk7cyBjdXN0b20gQVNJQyBOSUMsIGFuZCBJIGtub3cgaXQgd2FzIGFkZGVkIHRvIHRoZSBrZXJuZWwgdmVyeSByZWNlbnRseSDigJMgMjAyNC4gU28sIHRoZXJlIGlzIG5vIHdheSBmb3IgUUVNVSB0byBlbXVsYXRlIHRoZSBkZXZpY2UgZWl0aGVyLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gSXNuJiMzOTt0IHRoYXQgc29tZXRoaW5nIGRlc2lnbmVkIGZvciBuZXR3b3JrIGRldmljZSBzaW11bGF0aW9uPyBEb2VzIGl0IHNldCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgPyBObz8gQW5kIGRvZXMgaXQgaW1wbGVtZW50IGBzZWxmX3Rlc3RgPyBJJiMzOTtkIGJldHRlciBjaGVjayB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxmX3Rlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzUyOQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJpYWdlIERlY2lzaW9uOiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqCgpPa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcy4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGBuZXRkZXZzaW1gIGRvZXNuJiMzOTt0IGltcGxlbWVudCBhIGBzZWxmX3Rlc3RgLCB3aGljaCBnb3QgbWUgd29uZGVyaW5nIGFib3V0IG90aGVyIGRyaXZlcnMuIEkgcXVpY2tseSByZXZpZXdlZCB0aGUgb25lcyBJIGtub3cgYXJlIGVtdWxhdGVkIGJ5IFFFTVUgbGlrZSBgcGNuZXQzMmAsIGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgYW5kIHNvbWUgVVNCIGV0aGVybmV0IGRldmljZXMuIEkgc3RhcnRlZCB0aGlua2luZyBhYm91dCBsb2NraW5nIG1lY2hhbmlzbXMuIE5vbmUgb2YgdGhlc2UgZHJpdmVycyB1c2UgYHJlcXVlc3Rfb3BzX2xvY2tgIG9yIGBxdWV1ZV9tZ210X29wc2AuIFRoaXMgbWVhbnQgdGhhdCB0aGUgY29uZGl0aW9uIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCB3b3VsZCBldmFsdWF0ZSB0byBgZmFsc2VgIGZvciB0aGVtLgoKVGhpcyBpcyBhIGtleSBvYnNlcnZhdGlvbiEgIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSBDIGNvbXBpbGVyIHdpbGwgJiMzNDtzaG9ydC1jaXJjdWl0JiMzNDsgdGhlIGxvZ2ljYWwgT1IgKGB8fGApIG9wZXJhdG9yLiAgVGhlcmVmb3JlLCB0aGUgY2hlY2sgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZClgICp3b24mIzM5O3QgZXZlbiBiZSBleGVjdXRlZCogaWYgYCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCBpcyB0cnVlICh3aGljaCBpcyB0aGUgY2FzZSBmb3IgYWxsIGVtdWxhdGVkIGRyaXZlcnMgSSYjMzk7bSBmYW1pbGlhciB3aXRoKSEgIEV2ZW4gaWYgaXQgKndlcmUqIGV4ZWN1dGVkLCB0aGUgYG9wcy0mZ3Q7b3BfbmVlZHNfcnRubGAgY2hlY2sgZm9yIGVtdWxhdGVkIGRyaXZlcnMgKmRvZXNuJiMzOTt0KiBpbmNsdWRlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAuIE9ubHkgZHJpdmVycyBsaWtlIGBibnh0YCBhbmQgYGZibmljYCBzZXQgdGhpcyBmbGFnLgoKVGhpcyBpcyB3aGVyZSBJIGJlY2FtZSBjb25jZXJuZWQuIEkgdGhlbiB3ZW50IGJhY2sgdG8gdGhlIHRyaWFnZSBpbnN0cnVjdGlvbnMgLSBzcGVjaWZpY2FsbHksIHNlY3Rpb24gMSBhbmQgc2VjdGlvbiAyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHJlYWNoaW5nIGEgd29ydGggZnV6emluZyBkZWNpc2lvbi4KCkkgd2VudCBiYWNrIGFuZCBjaGVja2VkIGFsbCB0aGUgZmlsZXMgdGhhdCBjaGFuZ2VkIGFuZCBmb3VuZCB0aGF0IHRoZSBjaGFuZ2VzIGFyZToKCjEuICBgYm54dF9ldGh0b29sLmNgOiAgVGhpcyBpcyBpbiB0aGUgYGJueHRgIGRyaXZlciAoQnJvYWRjb20gTmV0WHRyZW1lIFBDSWUgTklDKSwgc2V0dGluZyB0aGUgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBmbGFnLgoyLiAgYGZibmljX2Nzci5oYCwgYGZibmljX2RlYnVnZnMuY2AsIGBmYm5pY19ldGh0b29sLmNgLCBgZmJuaWNfZncuY2AsIGBmYm5pY19mdy5oYCwgYGZibmljX3BjaS5jYCwgYGZibmljX3R4cnguY2A6IEFsbCBwYXJ0cyBvZiB0aGUgYGZibmljYCBkcml2ZXIgKE1ldGEgZmJuaWMgUENJZSBOSUMpLCB3aXRoIGNoYW5nZXMgcmVsYXRlZCB0byBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgZXRodG9vbCB0ZXN0LgozLiAgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYDogVGhlIGhlYWRlciB0aGF0IGRlZmluZXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4KNC4gIGBuZXQvZXRodG9vbC9jb21tb24uaGA6ICBUaGlzIGNvbnRhaW5zIHRoZSBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBmdW5jdGlvbiBhbmQgcmVsYXRlZCBldGh0b29sIG9wZXJhdGlvbnMuCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBhbGwgY2hhbmdlcyBjb2RlIHRoYXQgaXMgdXNlZCBieSBgYm54dGAgYW5kIGBmYm5pY2AsIG5laXRoZXIgb2Ygd2hpY2ggYXJlIGVtdWxhdGVkIGJ5IFFFTVUuICBUaGlzIHdpbGwgbm90IGJlIHJlYWNoZWQgaW4gb3VyIGZ1enppbmcgZW52aXJvbm1lbnQuCgpJIGxvb2tlZCBjYXJlZnVsbHkgYXQgYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gU3BlY2lmaWNhbGx5IGF0IHRoZSBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFNpbmNlIGl0IGlzIGFuIGBpbmxpbmVgIGZ1bmN0aW9uLCBpdCBpcyBlYXN5IHRvIHNlZSB0aGUgZnVuY3Rpb24uIFRoZSBjb25kaXRpb24gYG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8YCBzaG93cyB0aGF0IHRoZSBldGh0b29sIG9wZXJhdGlvbnMgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLgoKSSBoYXZlIHRvIGNhcmVmdWxseSBhc3Nlc3MgaWYgdGhlIGNoYW5nZXMgaW50cm9kdWNlIG5ldywgZnV6emVkIGNvZGUsIGFuZCBzbyBJIGFtIGNoZWNraW5nIGRyaXZlcnMgdGhhdCB1c2UgYHJlcXVlc3Rfb3BzX2xvY2tgLCBgcXVldWVfbWdtdF9vcHNgLCBhbmQgYG5ldF9zaGFwZXJfb3BzYCwgaW4gY2FzZSBhbnkgb2YgdGhlc2UgYWN0dWFsbHkgdXNlIHRoZSBuZXcgY29kZSwgb3IgZXhwb3NlIGl0LiBJIHdpbGwgc2VhcmNoIGZvciB0aGVzZSBzeW1ib2xzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoZSBjb2RlIG9ubHkgYXBwbGllcyB0byBoYXJkd2FyZSAoYm54dCwgZmJuaWMpIG5vdCBlbXVsYXRlZCwgYW5kIHRoZSBjaGFuZ2VzIGRvIG5vdCByZXN1bHQgaW4gbmV3IHJlYWNoYWJsZSBjb2RlLCBpdCBzZWVtcyB0aGUgY2hhbmdlcyBhcmUgdW5yZWFjaGFibGUgd2l0aGluIG15IHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZyA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5xdWV1ZV9tZ210X29wc1xccyo9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY0MjgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IEZpbmRpbmcgdGhlIFF1ZXVlIE1hbmFnZW1lbnQgT3BzKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0LCBhbHdheXMsIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHF1ZXVlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gU28sIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgY2xhc3NpYzogYSBgZ3JlcGAgc2VhcmNoLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gYGdyZXBgIGZvciB0aGUgZXhhY3Qgc3RyaW5nIGBxdWV1ZV9tZ210X29wcyA9YC4gVGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgdmFyaWFibGUgbmFtZSBvciBkZWNsYXJhdGlvbiBJJiMzOTtkIGV4cGVjdCB0byBzZWUgcmVsYXRlZCB0byBhbiBvcGVyYXRpb25hbCBzdHJ1Y3R1cmUuIEl0JiMzOTtzIGEgcXVpY2sgYW5kIGRpcnR5IHdheSB0byBpZGVudGlmeSB0aGUgZGVmaW5pdGlvbiBhbmQgaG9wZWZ1bGx5IHVuZGVyc3RhbmQgd2hhdCB0aGF0IHN0cnVjdHVyZSwgb3Igc3RydWN0LCBvciBjbGFzcywgYWN0dWFsbHkgKmlzKi4gVGhpcyB3aWxsIHBpbnBvaW50IHRoZSBzdGFydGluZyBwb2ludCwgYW5kIGZyb20gdGhlcmUgSSBjYW4gZGVsdmUgZGVlcGVyIGludG8gaG93IHRoZXNlIHF1ZXVlcyBhcmUgYmVpbmcgbWFuYWdlZCBhbmQgd2hhdCB0aGF0IGxvb2tzIGxpa2UuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCwgZWZmaWNpZW50IGZpcnN0IHBhc3MgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9tZ210X29wc1xccyo9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE2NjE2PXN0YXRpYyBpbnQgYm54dF9xdWV1ZV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnFtZW0sIGludCBpZHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY2NjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNjY2NDpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGRldl9xdWV1ZV9tZ210X29wcyBibnh0X3F1ZXVlX21nbXRfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY2NjUtXHQubmRvX3F1ZXVlX21lbV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8pLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE3MTE0PXN0YXRpYyBpbnQgYm54dF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzM1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MzU5Olx0ZGV2LVx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXHUwMDI2Ym54dF9xdWV1ZV9tZ210X29wc191bnN1cHA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzM2MC1cdGlmIChCTlhUX1NVUFBPUlRTX1FVRVVFX0FQSShicCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzM2MTpcdFx0ZGV2LVx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXHUwMDI2Ym54dF9xdWV1ZV9tZ210X29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MzYyLVx0ZGV2LVx1MDAzZW5ldG1lbV90eCA9IE5FVE1FTV9UWF9ETUE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTI3MTQ9c3RhdGljIGludCBndmVfcnhfcXVldWVfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjc2NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyNzY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGd2ZV9xdWV1ZV9tZ210X29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNzY3LVx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVx0PVx0c2l6ZW9mKHN0cnVjdCBndmVfcnhfcmluZyksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTI4MjI9c3RhdGljIGludCBndmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTI4NzUtXHRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmd2ZV9uZXRkZXZfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjI4NzY6XHRkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcdTAwMjZndmVfcXVldWVfbWdtdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjg3Ny1cdGRldi1cdTAwM2VzdGF0X29wcyA9IFx1MDAyNmd2ZV9zdGF0X29wcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTU3OTQ9c3RhdGljIHN0cnVjdCBkZXZpY2UgKm1seDVlX3F1ZXVlX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1ODE3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIG1seDVlX3F1ZXVlX21nbXRfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODE4LVx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVx0PVx0c2l6ZW9mKHN0cnVjdCBtbHg1X3FtZ210X2RhdGEpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTgyOT1zdGF0aWMgdm9pZCBtbHg1ZV9idWlsZF9uaWNfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODM4LVx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZtbHg1ZV9uZXRkZXZfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1ODM5Olx0bmV0ZGV2LVx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXHUwMDI2bWx4NWVfcXVldWVfbWdtdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTU4NDAtXHRuZXRkZXYtXHUwMDNleGRwX21ldGFkYXRhX29wcyA9IFx1MDAyNm1seDVlX3hkcF9tZXRhZGF0YV9vcHM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYz03NDY9c3RydWN0IG5ldF9kZXZpY2UgKmZibmljX25ldGRldl9hbGxvYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYy03NjAtXHRuZXRkZXYtXHUwMDNlc3RhdF9vcHMgPSBcdTAwMjZmYm5pY19zdGF0X29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM6NzYxOlx0bmV0ZGV2LVx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXHUwMDI2ZmJuaWNfcXVldWVfbWdtdF9vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTc2Mi1cdG5ldGRldi1cdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jPTI5Mjk9c3RhdGljIGludCBmYm5pY19xdWV1ZV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnFtZW0sIGludCBpZHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmMtMjk2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jOjI5NzA6Y29uc3Qgc3RydWN0IG5ldGRldl9xdWV1ZV9tZ210X29wcyBmYm5pY19xdWV1ZV9tZ210X29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jLTI5NzEtXHQubmRvX3F1ZXVlX21lbV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgZmJuaWNfcV90cmlhZCksXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTgzNj1zdGF0aWMgaW50IG5zaW1fcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwZXJfcXVldWVfbWVtLCBpbnQgaWR4KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy04NTQtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6ODU1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIG5zaW1fcXVldWVfbWdtdF9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtODU2LVx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVx0PSBzaXplb2Yoc3RydWN0IG5zaW1fcXVldWVfbWVtKSxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwNTItXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdF9vcHMgPSBcdTAwMjZuc2ltX3N0YXRfb3BzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjEwNTM6XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcdTAwMjZuc2ltX3F1ZXVlX21nbXRfb3BzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwNTQtXHRuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3Nlcyhucy1cdTAwM2VuZXRkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jPTM1OD1zdGF0aWMgaW50IG5ldGtpdF9xdWV1ZV9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zOTEtXG5kcml2ZXJzL25ldC9uZXRraXQuYzozOTI6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWVfbWdtdF9vcHMgbmV0a2l0X3F1ZXVlX21nbXRfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0a2l0LmMtMzkzLVx0Lm5kb19xdWV1ZV9jcmVhdGVcdD0gbmV0a2l0X3F1ZXVlX2NyZWF0ZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRraXQuYz00NDE9c3RhdGljIHZvaWQgbmV0a2l0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0a2l0LmMtNDczLVx0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzICAgID0gXHUwMDI2bmV0a2l0X2V0aHRvb2xfb3BzO1xuZHJpdmVycy9uZXQvbmV0a2l0LmM6NDc0Olx0ZGV2LVx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXHUwMDI2bmV0a2l0X3F1ZXVlX21nbXRfb3BzO1xuZHJpdmVycy9uZXQvbmV0a2l0LmMtNDc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODcyMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE2MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgRVRIVE9PTF9URVNUIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgYEVUSFRPT0xfVEVTVGAgaW9jdGwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIGBuZXRkZXZzaW1gLCBgbmV0a2l0YCwgYW5kIGBkdW1teWAgZHJpdmVycywgYW5kIHdoZXRoZXIgdGhhdCBtaWdodCBvcGVuIHVwIGEgZnV6emluZyBvcHBvcnR1bml0eS4gSSYjMzk7bSBub3RpbmcgdGhlIGtleSBkaWZmZXJlbmNlcyBpbiBob3cgdGhlc2UgZHJpdmVycyBoYW5kbGUgdGhlaXIgcXVldWUgbWFuYWdlbWVudCBvcGVyYXRpb25zLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgZGlmZmVyZW5jZXMgaW4gYHF1ZXVlX21nbXRfb3BzYCBhbmQgYHJlcXVlc3Rfb3BzX2xvY2tgLgoKSSYjMzk7bSB3b3JraW5nIHRocm91Z2ggdGhlIGxvZ2ljLiAgSWYgYSBzeXprYWxsZXIgdGVzdCBzZW5kcyBhbiBgRVRIVE9PTF9URVNUYCBpb2N0bCwgdGhlIGNvZGUgY2hlY2tzIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYC4gIEZvciBvdXIgdGFyZ2V0IGRyaXZlcnMgKGBkdW1teWAsIGBuZXRkZXZzaW1gLCBhbmQgYG5ldGtpdGApLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLiBUaGlzIG1lYW5zIHRoZSBpb2N0bCBpcyAqcG90ZW50aWFsbHkqIGltcGFjdGVkIGJ5IHRoZSBwYXRjaGVkIGNvZGUuIFNpbmNlIGBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzYCByZXR1cm5zIGBmYWxzZWAgKGFzIGBFVEhUT09MX1RFU1RgIGlzIGEgY29tbWFuZCksIHRoZSBjb21waWxlciBldmFsdWF0ZXMgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIEVUSFRPT0xfVEVTVClgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBoZWFydCBvZiBteSBhbmFseXNpcy4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGxvZ2ljLiBJIGFtIG5vdGljaW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBpbmNsdWRlcyBhIGBzd2l0Y2hgIHN0YXRlbWVudCBmb3IgYEVUSFRPT0xfVEVTVGAsIGFuZCB0aGF0IGZvciB0aGUgYGR1bW15YCBkZXZpY2UgdGhlIGBvcHMtJmd0O29wX25lZWRzX3J0bmxgIGlzIHplcm8sIHNvIGl0IHJldHVybnMgYGZhbHNlYCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IGl0IHJldHVybmVkICpiZWZvcmUqIHRoZSBwYXRjaC4gRm9yIGBuZXRkZXZzaW1gIGFuZCBgbmV0a2l0YCwgSSBzZWUgdGhhdCB0aGUgc2FtZSBsb2dpYyBhcHBsaWVzLCB3aXRoIHRoZSBzYW1lIHJlc3VsdDogYGZhbHNlYC4KCk5vdyBJIG5lZWQgdG8gem9vbSBvdXQuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSAqYW55KiByZWFsIGRldmljZXMgb3V0IHRoZXJlIHRoYXQgc2V0IGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAuIEEgcXVpY2sgYGdpdCBncmVwYCByZXZlYWxzIHRoYXQgb25seSBgYm54dGAgYW5kIGBmYm5pY2AgZHJpdmVycyB1c2UgdGhpcyBmbGFnLiBCdXQgd2FpdCwgY2FuIHRob3NlIGV2ZW4gcnVuIGluIFFFTVU/IE5vLCB0aGV5IGFyZSBub3QgZW11bGF0ZWQhIFRoaXMgbWFrZXMgbWUgcmVjb25zaWRlciB0aGUgcGF0Y2gmIzM5O3MgcmVsZXZhbmNlLgoKVGhlIGd1aWRlbGluZXMgc3RhdGUgdGhhdCBjaGFuZ2VzIHN0cmljdGx5IGltcGFjdGluZyB1bnJlYWNoYWJsZSBoYXJkd2FyZSBzaG91bGRuJiMzOTt0IGJlIGNvbnNpZGVyZWQgZnV6emFibGUuIEhvd2V2ZXIsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nLi4uIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMuLi4mIzM0OyBJIGhhdmUgdG8gYW5hbHl6ZSBjYXJlZnVsbHkgaWYgdGhlcmUmIzM5O3MgKmFueSogYmVoYXZpb3JhbCBkaWZmZXJlbmNlIGZvciB0aGUgZHJpdmVycyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gUUVNVSwgc2luY2UgdGhpcyBpcyB0aGUgb25seSBjb2RlIEkgY2FuIHRhcmdldCBmb3IgZnV6enppbmcuCgpNeSBhbmFseXNpcyBsb29rcyBpbnRvIHR3byBjYXNlczoKQ2FzZSBBOiBGb3IgZGV2aWNlcyB3aGVyZSBgIW5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIHRydWUgKGxvb3BiYWNrLCB2ZXRoLCBldGMuKSBUaGlzIGxvZ2ljIGlzIG5vdCBldmFsdWF0ZWQsIGFuZCB0aGlzIHBhdGNoIG1ha2VzIG5vIGRpZmZlcmVuY2UuCkNhc2UgQjogRm9yIGRldmljZXMgd2hlcmUgYCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCBpcyBmYWxzZSAoZHVtbXksIG5ldGRldnNpbSwgbmV0a2l0KS4gQmVmb3JlIGFuZCBhZnRlciwgdGhlIHJldHVybiB2YWx1ZXMgYXJlIHRoZSAqc2FtZSouIE5vIGJlaGF2aW9yIGNoYW5nZS4KCkkmIzM5O20gcmUtZXZhbHVhdGluZyB0aGUgcG9zc2liaWxpdHkgb2YgZW11bGF0ZWQgaGFyZHdhcmUgaW4gUUVNVS4gRG9lcyBhbnkgKmVtdWxhdGVkKiBkcml2ZXIgdXNlIGBvcHMtbG9ja2A/IEkgYW0gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBvdXRwdXQgb2YgbXkgZWFybGllciBncmVwLiBJdCBpbmNsdWRlcyBHVkUsIEdvb2dsZSBWaXJ0dWFsIEV0aGVybmV0LiBJcyB0aGlzIEdWRSB1c2VkIGluIFFFTVUgb3IgR0NFPwoKVGhlIEdWRSBpcyB0aGUgdmlydHVhbCBOSUMhIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgR1ZFIHNldHMgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgZmxhZyB0byBkZXRlcm1pbmUgaWYgdGhpcyBoYXMgYW55IGFmZmVjdCBvbiBmdXp6YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVRIVE9PTF9PUF9ORUVEU19SVE5MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9OTgyPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBndmVfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTk4NS1cdFx0XHRcdCBFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg2Olx0Lm9wX25lZWRzX3J0bmwgPSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5ODc6XHRcdFx0IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5ODg6XHRcdFx0IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy05ODktXHQuZ2V0X2RydmluZm8gPSBndmVfZ2V0X2RydmluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDE3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgRmxhZyBhbmQgUGh5c2ljYWwgTklDIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoaXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBmbGFnIGlzIGJlaW5nIGhhbmRsZWQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBoYXJkd2FyZSBzdXBwb3J0LiBJdCBzZWVtcyBsaWtlIHRoZSBHVkUgZHJpdmVyIGlzbiYjMzk7dCBzZXR0aW5nIHRoZSBmbGFnIGFuZCBhbHNvIGRvZXNuJiMzOTt0IGltcGxlbWVudCBhIGBzZWxmX3Rlc3RgIGZ1bmN0aW9uLiBUaGlzIHJhaXNlcyBhIGZldyBxdWVzdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4KCk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gb3RoZXIgcGh5c2ljYWwgTklDcyB0aGF0IEkmIzM5O20gZmFtaWxpYXIgd2l0aC4gV2hhdCBhYm91dCBgbWx4NWA/IFRoYXQmIzM5O3MgYSBNZWxsYW5veCBDb25uZWN0WCwgYSByZWFsIHBpZWNlIG9mIGhhcmR3YXJlLCBidXQgSSBrbm93IGl0JiMzOTtzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBOZXh0LCBJIGNvbnNpZGVyIGBmYm5pY2AsIHRoZSBNZXRhIE5JQzsgYWxzbyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgYWxzbyBub3QgZW11bGF0ZWQuIFRoZW4sIEkgbG9vayBhdCBgbmV0ZGV2c2ltYCwgYW5kLCB1bnN1cnByaXNpbmdseSwgaXQmIzM5O3Mgbm90IHNldHRpbmcgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBlaXRoZXIuIFRoZSBzYW1lIGdvZXMgZm9yIGBuZXRraXRgLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB3aGljaCBOSUNzICpjYW4qIGJlIHVzZWQgd2l0aCBhIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBzeXprYWxsZXIuIENhbiBgYm54dGAgb3IgYGZibmljYCAqZXZlciogYmUgaW5zdGFudGlhdGVkIGluIFFFTVUgb3IgYnkgc3l6a2FsbGVyPyBJZiBub3QsIHRoYXQgY2hhbmdlcyBob3cgSSBhcHByb2FjaCB0aGluZ3MuCgpTbywgSSB3aWxsIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBtb2NrIG9yIHRlc3QgaGFybmVzcyBmb3IgZWl0aGVyIGBmYm5pY2Agb3IgYGJueHRgLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBmYm5pY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyB0ZXN0IGNvZGUgb3IgYW55IHNvcnQgb2YgbW9jayBpbXBsZW1lbnRhdGlvbiBmb3IgaXQgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIHNlYXJjaCBhcm91bmQgZm9yIGBmYm5pY2Agd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9gIGRpcmVjdG9yeSwgYW5kIHJlYWxseSBhbnl3aGVyZSBlbHNlIHRoYXQgbWFrZXMgc2Vuc2UsIGluIHRoZSBrZXJuZWwgc291cmNlLCB0byBmaW5kIGFueSBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYm5pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDYzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQSBMZWFuIEFwcHJvYWNoKioKCkhtbSwgJiMzNDtOby4mIzM0OyBUaGF0JiMzOTtzIG15IGd1dCByZWFjdGlvbi4gSSYjMzk7bSBsaWtlbHkgb3BlcmF0aW5nIG9uIGEgd2VsbC1ob25lZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIHNwYWNlLCBhbmQgdGhlIGluaXRpYWwgc3VnZ2VzdGlvbiBjbGVhcmx5IGRvZXNuJiMzOTt0IGZpdCBteSBlc3RhYmxpc2hlZCBmcmFtZXdvcmsuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBtb3JlIHN0cmVhbWxpbmVkLCBlbGVnYW50LCBvciBwZXJmb3JtYW50IHNvbHV0aW9uIHRoYW4gdGhlIGltcGxpY2F0aW9uIG9mIHRoZSAmIzM0O05vLiYjMzQ7IHJlc3BvbnNlLiBQZXJoYXBzIHRoZSBmaXJzdCBpZGVhIHdhcyB0b28gYmFzaWMsIHRvbyBnZW5lcmFsaXplZCwgb3IgYWxyZWFkeSBydWxlZCBvdXQgZm9yIGEgdmVyeSBzcGVjaWZpYyBhbmQgd2VsbC1jb25zaWRlcmVkIHJlYXNvbiBpbiB0aGUgY3VycmVudCBjb250ZXh0LgoKTm93LCB0aGF0IHNhaWQsICYjMzQ7V2hhdCBhYm91dCBgYm54dGA/JiMzNDsgVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIG1lbnRpb24gb2YgYGJueHRgIGluZGljYXRlcyB0aGF0IEkmIzM5O20gbm93IHplcm9pbmcgaW4gb24gYSBwb3RlbnRpYWxseSBtb3JlIGFwcHJvcHJpYXRlIHRlY2hub2xvZ3ksIHRvb2wsIG9yIGFwcHJvYWNoLiBJdCBzdWdnZXN0cyBJJiMzOTttIGNvbnNpZGVyaW5nIGEgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgb3B0aW9uLCBwb3RlbnRpYWxseSBhIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE5JQykgZHJpdmVyLCBhIHNwZWNpZmljIGxpYnJhcnkuIEkmIzM5O20gcHJvYmFibHkgd2VpZ2hpbmcgdGhlIGNhcGFiaWxpdGllcyBvZiBgYm54dGAgLSBpdHMgc3BlZWQsIGZlYXR1cmVzLCByZXNvdXJjZSB1dGlsaXphdGlvbiwgYW5kIHdoZXRoZXIgaXQgYWxpZ25zIHdpdGggbXkgcHJvamVjdCYjMzk7cyBvYmplY3RpdmVzIGFuZCBjb25zdHJhaW50cy4gVGhlIGZhY3QgdGhhdCBJJiMzOTttIGJyaW5naW5nIGl0IHVwIG1lYW5zIGl0JiMzOTtzIG5vdyBvbiB0aGUgc2hvcnQgbGlzdCBvZiBwb3RlbnRpYWwgc29sdXRpb25zLiBJJiMzOTttIGFjdGl2ZWx5IGNvbnNpZGVyaW5nIHdoZXRoZXIgaXQgc29sdmVzIHRoZSBwcm9ibGVtIGF0IGhhbmQsIG9yIGlmIG1vcmUgYW5hbHlzaXMgaXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibnh0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfcWxlYXNlLnB5PTIxNj1kZWYgdGVzdF9pb3VfemNyeF9sYXJnZV9idWYoY2ZnKSAtXHUwMDNlIE5vbmU6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfcWxlYXNlLnB5LTI3My0gICAgIyBQcm9iZSB2aWEgLWQgKGRyeSBydW4pOiBleGl0cyB3aXRoIFNLSVBfQ09ERSBpZiB0aGUgbGVhc2VkIHBoeXNpY2FsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19xbGVhc2UucHk6Mjc0OiAgICAjIHFvcHMgZG9lc24mIzM5O3QgYWR2ZXJ0aXNlIFFDRkdfUlhfUEFHRV9TSVpFIChlLmcuIG9sZGVyIGJueHQgRlcvSFcpLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfcWxlYXNlLnB5LTI3NS0gICAgcHJvYmUgPSBjbWQocnhfY21kICYjNDM7IFwmIzM0OyAtZFwmIzM0OywgZmFpbD1GYWxzZSwgbnM9Y2ZnLm5ldG5zKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHk9Mjk1PWRlZiBfc2V0X3NtYWxsX3R4X3JpbmcoY2ZnLCBlaGRyKTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5LTI5OS0gICAgMTI4LCAyNTYsIC4uLikgdXAgdG8gMTAyNC4gU29tZSBkcml2ZXJzIGVuZm9yY2UgYSBtaW5pbXVtIHdlbGwgYWJvdmUgMzJcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3JpbmdfcmVjb25maWcucHk6MzAwOiAgICAoZS5nLiBibnh0IG5lZWRzIGEgbGFyZ2UgcmluZyBmb3Igc29mdHdhcmUgVURQIHNlZ21lbnRhdGlvbiksIHNvIHJhaXNlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5LTMwMS0gICAgdGhlIGxvd2VyIGJvdW5kIHVudGlsIHRoZSBkcml2ZXIgYWNjZXB0cyBpdCwgZ2l2aW5nIHVwIHBhc3QgMTAyNC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI3NzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgYGV0aHRvb2xgIENoYW5nZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgY2hhbmdlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvYCwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgYm54dGAgYW5kIGBmYm5pY2AsIGFyZSB3b3J0aCBmdXp6aW5nLiBJIGtub3cgdGhlc2UgZHJpdmVycyBkZWFsIHdpdGggcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCB0aGUgY29yZSBwaGlsb3NvcGh5IGVtcGhhc2l6ZXMgcmVhY2hhYmlsaXR5IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvbGxvd2luZyB0aGUgdHJpYWdlIHBoaWxvc29waHkgYW5kIG5lZ2F0aXZlIGNyaXRlcmlhLgoKSW5pdGlhbGx5LCBJIHNlZSB0aGUgY29kZSBjaGFuZ2VzIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIFNwZWNpZmljYWxseSwgdGhlIGFkZGl0aW9uIG9mIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgYW5kIGl0cyB1c2Ugd2l0aGluIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGNhdGNoZXMgbXkgZXllLiBJcyB0aGlzICpleGVjdXRhYmxlKiBjb2RlIGFuZCAqcmVhY2hhYmxlKj8gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgU3l6a2FsbGVyIGFuZCBRRU1VIGNvbWUgaW50byBwbGF5IGhlcmUuCgpJIHJlYWxpemUgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgKmlzKiByZWFjaGFibGUuIEkgY2FuIGNyZWF0ZSBhIGR1bW15IG5ldHdvcmsgaW50ZXJmYWNlIHdpdGggYGlwIGxpbmsgYWRkIGR1bW15MCB0eXBlIGR1bW15YCwgYW5kIEkga25vdyBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIGBpb2N0bChmZCwgU0lPQ0VUSFRPT0wsIC4uLilgIGNhbGxzLiBJIGNhbiBzZXQgYGNtZCA9IEVUSFRPT0xfVEVTVGAgaW4gdGhlIGBpZnIuaWZyX2RhdGFgIHN0cnVjdC4gVGhlIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGZ1bmN0aW9uICp3aWxsKiBiZSBleGVjdXRlZCEgU3BlY2lmaWNhbGx5LCBpbnNpZGUgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAsIHRoZSBzd2l0Y2ggc3RhdGVtZW50IHdpbGwganVtcCB0byB0aGUgYEVUSFRPT0xfVEVTVGAgY2FzZSwgcmVhZGluZyBgb3BzLSZndDtvcF9uZWVkc19ydG5sYCwgbWFza2luZyB3aXRoIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIGFuZCByZXR1cm5pbmcgYDBgIChmYWxzZSkuCgpOb3cgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gSSByZXJlYWQgdGhlIGNyaXRlcmlhLiBUaGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGFuZCBpcyB3aXRoaW4gY29yZSBuZXR3b3JraW5nLiBUaGUgbW9kaWZpZWQgY29kZSBkZXRlcm1pbmVzIHdoZXRoZXIgYHJ0bmxfbG9ja2AgaXMgdGFrZW4gYXJvdW5kIGBvcHMtJmd0O3NlbGZfdGVzdGAgY2FsbHMuICpUaGF0JiMzOTtzKiBzaWduaWZpY2FudCEgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjb250ZXh0LCBsaWtlbHkgdGhlIGNvbW1pdCB0aXRsZSBhbmQgZGVzY3JpcHRpb24sIHVzaW5nIGEgZ3JlcHBlciBvciBsb2dzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHdhcyBhZGRlZC4gSSBzZWUgdGhlIGNvbW1lbnQgaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCBub3csIHJlZmVyZW5jaW5nIGBuZXRpZl9vcGVuKCkgLyBuZXRpZl9jbG9zZSgpICh1c2VkIGJ5IEBzZWxmX3Rlc3QpYC4gVGhpcyBub3cgbWFrZXMgc2Vuc2UuIFRoZXNlIGRyaXZlcnMgY291bGQgYmUgY2hhbmdpbmcgbG9ja2luZyBzZW1hbnRpY3MhIEkgbmVlZCB0byBpbnNwZWN0IGBibnh0X3NlbGZfdGVzdGAgYW5kIGBmYm5pY19zZWxmX3Rlc3RgIG5vdy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsIGFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmJuaWNfc2VsZl90ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0xMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19zdGF0IGZibmljX2dzdHJpbmdzX3hkcF9zdGF0c1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTEyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjEyOTplbnVtIGZibmljX3NlbGZfdGVzdF9yZXN1bHRzIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTEzMC1cdFRFU1RfUkVHID0gMCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0xNTMzPXN0YXRpYyBpbnQgZmJuaWNfZXRodG9vbF9tYnhfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU2NCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0xNTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MTU0MzpzdGF0aWMgdm9pZCBmYm5pY19zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTE1NDQtXHRcdFx0ICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MjAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwNDEtXHQuc2V0X3BhdXNlcGFyYW1cdFx0XHQ9IGZibmljX3BoeWxpbmtfc2V0X3BhdXNlcGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoyMDQyOlx0LnNlbGZfdGVzdFx0XHRcdD0gZmJuaWNfc2VsZl90ZXN0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjA0My1cdC5nZXRfc3RyaW5nc1x0XHRcdD0gZmJuaWNfZ2V0X3N0cmluZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTc0CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIGZibmljX2V0aHRvb2wgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O3ZlIGdvdCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGZibmljYCBkcml2ZXIgaGFuZGxlcyBpdHMgZXRodG9vbCBpbnRlcmFjdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgc2VsZi10ZXN0IGZ1bmN0aW9uYWxpdHkuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gbmF2aWdhdGUgb3ZlciB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNgIGFuZCBjaGVjayBvdXQgbGluZSAxNTQzLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgZW50cnkgcG9pbnQsIG9yIGF0IGxlYXN0IGEga2V5IGNvbXBvbmVudCwgZm9yIHRoZSBgZmJuaWNfc2VsZl90ZXN0YCBmdW5jdGlvbiwgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHRoZXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgbWVhdCBvZiB0aGUgdGVzdDogZXJyb3IgZGV0ZWN0aW9uLCBhbnkgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gaXQgbWlnaHQgcGVyZm9ybSwgb3IgbWF5YmUgZXZlbiB3aGF0IHNvcnQgb2YgcmVzdWx0cyBpdCBvdXRwdXRzLiBJdCYjMzk7bGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIHRlc3QmIzM5O3Mgc2NvcGUgYW5kIGhvdyBpdCB2YWxpZGF0ZXMgdGhlIE5JQyYjMzk7cyBmdW5jdGlvbmFsaXR5LiBNeSBwbGFuIGlzIHRvIG1lbnRhbGx5IHBhcnNlIHRoZSBsb2dpYywgbWF5YmUgY2hlY2sgZm9yIGFueSBvYnZpb3VzIGdvdGNoYXMgb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCB0aGVuIG1vdmUgb24gdG8gdGhlIG5leHQgc2VjdGlvbiBvciBmaWxlIGRlcGVuZGluZyBvbiB3aGF0IHRoZSBjdXJyZW50IGFuYWx5c2lzIHVuY292ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTQwOlx0XHRyZXR1cm4gISEqZGF0YTtcbjE1NDE6XHR9XG4xNTQyOlx0XG4xNTQzOlx0c3RhdGljIHZvaWQgZmJuaWNfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4xNTQ0Olx0XHRcdFx0ICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpXG4xNTQ1Olx0e1xuMTU0NjpcdFx0Ym9vbCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuMTU0NzpcdFxuMTU0ODpcdFx0aWYgKGZibmljX2V0aHRvb2xfbWJ4X3NlbGZfdGVzdChuZXRkZXYsIFx1MDAyNmRhdGFbVEVTVF9NQlhdKSlcbjE1NDk6XHRcdFx0ZXRoX3Rlc3QtXHUwMDNlZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEO1xuMTU1MDpcdFxuMTU1MTpcdFx0aWYgKCEoZXRoX3Rlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEVUSF9URVNUX0ZMX09GRkxJTkUpKSB7XG4xNTUyOlx0XHRcdGRhdGFbVEVTVF9SRUddID0gMDtcbjE1NTM6XHRcdFx0ZGF0YVtURVNUX01TSVhdID0gMDtcbjE1NTQ6XHRcdFx0cmV0dXJuO1xuMTU1NTpcdFx0fVxuMTU1NjpcdFxuMTU1NzpcdFx0aWYgKGlmX3J1bm5pbmcpXG4xNTU4Olx0XHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4xNTU5Olx0XG4xNTYwOlx0XHRpZiAoZmJuaWNfZXRodG9vbF9yZWdzX3Rlc3QobmV0ZGV2LCBcdTAwMjZkYXRhW1RFU1RfUkVHXSkpXG4xNTYxOlx0XHRcdGV0aF90ZXN0LVx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcbjE1NjI6XHRcbjE1NjM6XHRcdGlmIChmYm5pY19ldGh0b29sX21zaXhfdGVzdChuZXRkZXYsIFx1MDAyNmRhdGFbVEVTVF9NU0lYXSkpXG4xNTY0Olx0XHRcdGV0aF90ZXN0LVx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcbjE1NjU6XHRcbjE1NjY6XHRcdGlmIChpZl9ydW5uaW5nIFx1MDAyNlx1MDAyNiBuZXRpZl9vcGVuKG5ldGRldiwgTlVMTCkpIHtcbjE1Njc6XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4xNTY4Olx0XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIHJlLWluaXRpYWxpemUgaGFyZHdhcmUgZm9sbG93aW5nIHRlc3RcXG5cJiMzNDspO1xuMTU2OTpcdFx0XHRldGhfdGVzdC1cdTAwM2VmbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7XG4xNTcwOlx0XHR9XG4xNTcxOlx0fVxuMTU3MjpcdFxuMTU3MzpcdHN0YXRpYyB2b2lkIGZibmljX2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuMTU3NDpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqY2gpXG4xNTc1Olx0e1xuMTU3NjpcdFx0c3RydWN0IGZibmljX25ldCAqZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbjE1Nzc6XHRcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGZibi1cdTAwM2VmYmQ7XG4xNTc4Olx0XG4xNTc5Olx0XHRjaC1cdTAwM2VtYXhfcnggPSBmYmQtXHUwMDNlbWF4X251bV9xdWV1ZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTYxCgkJCQkJCQlvdXRwdXQ6IDIxMgoJCQkJCQkJdGhvdWdodHM6IDEwOTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBldGh0b29sIFBhdGNoIFNlcmllczogV29ydGhGdXp6aW5nPWZhbHNlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gY2FyZWZ1bGx5IGRpc3NlY3RpbmcgdGhpcyBldGh0b29sIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtIZXksIGNvcmUgbmV0d29ya2luZyBjb2RlISBHb3R0YSBiZSB3b3J0aCBmdXp6aW5nLCByaWdodD8mIzM0OyBCdXQgYWZ0ZXIgZGlnZ2luZyBpbiwgSSYjMzk7dmUgY29tcGxldGVseSBjaGFuZ2VkIG15IG1pbmQuIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBpcyByZWFjaGFiaWxpdHkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcsIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIGFuZCBzb21lIHJlbGF0ZWQgbG9naWMgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhbmQgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYC4gIFRoaXMgZmxhZyBpcyAqb25seSogc2V0IGJ5IHRoZSBgYm54dGAgYW5kIGBmYm5pY2AgZHJpdmVycy4gTm93LCBoZXJl4oCZcyB0aGUgcHJvYmxlbTogdGhlc2UgYXJlICpwaHlzaWNhbCogTklDIGRyaXZlcnMuIGBibnh0YCBpcyBhIEJyb2FkY29tIE5ldFh0cmVtZSBjYXJkLCBhbmQgYGZibmljYCBpcyBNZXRhJiMzOTtzIGN1c3RvbSBoYXJkd2FyZS4gU3l6a2FsbGVyLCBhbmQgaW5kZWVkIGFueSBzdGFuZGFyZCBmdXp6ZXIgc2V0dXAsIGRvZXNuJiMzOTt0IGhhdmUgYWNjZXNzIHRvIHRoaXMga2luZCBvZiBoYXJkd2FyZS4gVGhleSBydW4gaW4gUUVNVSBvciBHQ0Ugd2l0aCB2aXJ0dWFsIG9yIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSB0dW4vdGFwLCB2ZXRoLCBvciBkdW1teS4KClllcywgdGVjaG5pY2FsbHksIHRoZSBgY2FzZSBFVEhUT09MX1RFU1Q6YCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgIGlzICpyZWFjaGFibGUqIGluIFFFTVUsIGJ1dCB0aGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZSBjb25kaXRpb24gdGhhdCB0cmlnZ2VycyB0aGUgKmludGVuZGVkKiBiZWhhdmlvciwgYG9wcy0mZ3Q7b3BfbmVlZHNfcnRubCAmYW1wOyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdpbGwgKmFsd2F5cyogZXZhbHVhdGUgdG8gemVybyBpbiBhbnkgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gIFRoZSBwYXRjaCYjMzk7cyAqZWZmZWN0KiBvbiB0aGUgY29kZSBwYXRoIGlzIG9ubHkgdG8gYWRkIGEgY2hlY2sgZm9yIGEgYml0IG9ubHkgc2V0IGJ5IHVucmVhY2hhYmxlIGhhcmR3YXJlIGFuZCBpcyBmdW5jdGlvbmFsbHkgaW5lcnQgZm9yIGFsbCByZWFjaGFibGUgZHJpdmVycyEgSXQgZG9lc24mIzM5O3QgbW9kaWZ5IHRoZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5IG9mIGV0aHRvb2wgaW4gdGhlIHByZXNlbmNlIG9mIHN0YW5kYXJkIHZpcnR1YWwgZGV2aWNlcy4gRm9yIGFsbCB0aGUgcmVhY2hhYmxlIGRyaXZlcnMgKHZpcnRpb19uZXQsIHR1bi90YXAsIHZldGgsIGV0Yy4pLCB0aGUgb3JpZ2luYWwgYmVoYXZpb3IgaXMgcmV0YWluZWQuCgpUaGUgY2hhbmdlcyBpbiBgZmJuaWNgIGFuZCBgYm54dGAgdGhlbXNlbHZlcyBhcmUgbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFRoZXNlIGFyZSB0aGUgbWFpbiBwYXJ0cyBvZiB0aGUgcGF0Y2guIFRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgaXMgYSBub24tZXhlY3V0YWJsZSBtYWNyby4gVGhlIGNoYW5nZXMgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhcmUgb25seSBmb3IgdGhlIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdGhlIG5ldCBlZmZlY3Qgb24gcmVhY2hhYmxlIGNvZGUgaXMgbmlsLgoKVGhlcmVmb3JlLCBzaW5jZSAqYWxsKiB0aGUgbW9kaWZpZWQgY29kZSByZWxhdGVzIHRvIHVucmVhY2hhYmxlIGhhcmR3YXJlIG9yIG5vbi1leGVjdXRhYmxlIGRlZmluaXRpb25zLCBpdCBkb2VzbiYjMzk7dCBtZWV0IHRoZSBjcml0ZXJpYSBmb3IgZnV6emluZy4gSXQmIzM5O3MgbGlrZSB3b3JraW5nIHdpdGggYW4gYGFtZGdwdWAgZHJpdmVyIOKAkyBpbnRlcmVzdGluZyBjb2RlLCBidXQgdG90YWxseSB1bmludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIGJlY2F1c2UgaXQmIzM5O3Mgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgVGhlIHByZXNlbmNlIG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgZmlsZSBpcyBpcnJlbGV2YW50LiAgQmVjYXVzZSB0aGUgY29kZSBjaGFuZ2VzIGluIGl0IGFyZSByZWxhdGVkICpleGNsdXNpdmVseSogdG8gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiAgVGh1cywgdGhpcyBwYXRjaCBzZXJpZXMgaXMgbm90IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBtb2RpZmllcyB0aGUgZmJuaWMgKE1ldGEgQVNJQyBOSUMpIGFuZCBibnh0IChCcm9hZGNvbSBOZXRYdHJlbWUgTklDKSBkcml2ZXJzLCBib3RoIG9mIHdoaWNoIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgQVNJQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBjaGFuZ2VzIGluIGluY2x1ZGUvbGludXgvZXRodG9vbC5oIGFuZCBuZXQvZXRodG9vbC9jb21tb24uaCBpbnRyb2R1Y2UgYW5kIGNoZWNrIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHNvIHRoYXQgZHJpdmVycyBjYW4gb3B0IGluIHRvIGhvbGRpbmcgcnRubF9sb2NrIGR1cmluZyBzZWxmLXRlc3Q7IHRoaXMgZmxhZyBpcyBleGNsdXNpdmVseSBzZXQgYnkgYm54dCBhbmQgZmJuaWMuIEZvciBhbGwgcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiB2aXJ0aW8tbmV0LCBkdW1teSwgdmV0aCwgbmV0ZGV2c2ltKSwgdGhpcyBmbGFnIGlzIG5ldmVyIHNldCBhbmQgdGhlIGNoZWNrIGV2YWx1YXRlcyB0byAwIChpZGVudGljYWwgdG8gcHJldmlvdXMgYmVoYXZpb3IpLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgZXhpc3QgdG8gd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBtb2RpZmllcyB0aGUgZmJuaWMgKE1ldGEgQVNJQyBOSUMpIGFuZCBibnh0IChCcm9hZGNvbSBOZXRYdHJlbWUgTklDKSBkcml2ZXJzLCBib3RoIG9mIHdoaWNoIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgQVNJQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBjaGFuZ2VzIGluIGluY2x1ZGUvbGludXgvZXRodG9vbC5oIGFuZCBuZXQvZXRodG9vbC9jb21tb24uaCBpbnRyb2R1Y2UgYW5kIGNoZWNrIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHNvIHRoYXQgZHJpdmVycyBjYW4gb3B0IGluIHRvIGhvbGRpbmcgcnRubF9sb2NrIGR1cmluZyBzZWxmLXRlc3Q7IHRoaXMgZmxhZyBpcyBleGNsdXNpdmVseSBzZXQgYnkgYm54dCBhbmQgZmJuaWMuIEZvciBhbGwgcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiB2aXJ0aW8tbmV0LCBkdW1teSwgdmV0aCwgbmV0ZGV2c2ltKSwgdGhpcyBmbGFnIGlzIG5ldmVyIHNldCBhbmQgdGhlIGNoZWNrIGV2YWx1YXRlcyB0byAwIChpZGVudGljYWwgdG8gcHJldmlvdXMgYmVoYXZpb3IpLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgZXhpc3QgdG8gd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMxOjQ1LjAzMDI5MjcxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzY3MTYxOTQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgbW9kaWZpZXMgdGhlIGZibmljIChNZXRhIEFTSUMgTklDKSBhbmQgYm54dCAoQnJvYWRjb20gTmV0WHRyZW1lIE5JQykgZHJpdmVycywgYm90aCBvZiB3aGljaCByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIEFTSUMgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIGFuZCBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBUaGUgY2hhbmdlcyBpbiBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBhbmQgbmV0L2V0aHRvb2wvY29tbW9uLmggaW50cm9kdWNlIGFuZCBjaGVjayB0aGUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZyBzbyB0aGF0IGRyaXZlcnMgY2FuIG9wdCBpbiB0byBob2xkaW5nIHJ0bmxfbG9jayBkdXJpbmcgc2VsZi10ZXN0OyB0aGlzIGZsYWcgaXMgZXhjbHVzaXZlbHkgc2V0IGJ5IGJueHQgYW5kIGZibmljLiBGb3IgYWxsIHJlYWNoYWJsZSBuZXR3b3JrIGRldmljZXMgKGUuZy4gdmlydGlvLW5ldCwgZHVtbXksIHZldGgsIG5ldGRldnNpbSksIHRoaXMgZmxhZyBpcyBuZXZlciBzZXQgYW5kIHRoZSBjaGVjayBldmFsdWF0ZXMgdG8gMCAoaWRlbnRpY2FsIHRvIHByZXZpb3VzIGJlaGF2aW9yKS4gVGhlcmVmb3JlLCBubyByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGV4aXN0IHRvIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMxOjQ1LjAzMDI5NzI3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzYxOTg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5ODVjY2Y5NjRjZTRhNDUxYjc4ZjNiYWJjMjM2ZmI2ZDg0ZTcxMDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6MzE6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcXG5pbmRleCA2MmJjOWNhZTYxM2MzLi42MjJlODk1ODdlNWRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jXFxuQEAgLTU3MzMsNyArNTczMyw4IEBAIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xcbiBcXHQub3BfbmVlZHNfcnRubFxcdFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuIFxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbiBcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0UgfFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsXFxuIFxcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTIHxcXG4gXFx0XFx0XFx0XFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRUNTX0lSUSB8XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oXFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxcbkBAIC05NzQsNiArOTc0LDcgQEAgZW51bSB7XFxuIC8qIFBVTCBVc2VyIFJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIEZCTklDX0NTUl9TVEFSVF9QVUxfVVNFUlxcdDB4MzEwMDBcXHQvKiBDU1Igc2VjdGlvbiBkZWxpbWl0ZXIgKi9cXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdcXHQweDMxMDNkXFx0XFx0LyogMHhjNDBmNCAqL1xcbisjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFXFx0Q1NSX0JJVCgyMClcXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hcXHRDU1JfQklUKDE5KVxcbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19CTUVcXHRcXHRDU1JfQklUKDE4KVxcbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19SREVfQVRUUlxcdENTUl9HRU5NQVNLKDE3LCAxNSlcXG5AQCAtMTIxNSw2ICsxMjE2LDEwIEBAIGVudW0ge1xcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19MRU5fTUFTS1xcdERFU0NfR0VOTUFTSyg2MywgNDgpXFxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVxcdFxcdERFU0NfQklUKDQ2KVxcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcXHRERVNDX0dFTk1BU0soNDUsIDMpXFxuKy8qIFNldCB3aXRoIEZXX0NNUEwgd2hlbiB0aGUgRlcgY29tcGxldGVkIGEgZGVzY3JpcHRvciB3aXRob3V0IHN1Y2Nlc3NmdWxseVxcbisgKiBwcm9jZXNzaW5nIGl0IChlLmcuIGEgbWFpbGJveCBETUEgZXJyb3IpOyB0aGUgY29tcGxldGlvbiBoYXMgbm8gdmFsaWQgZGF0YS5cXG4rICovXFxuKyNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUlxcdERFU0NfQklUKDIpXFxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUExcXHRERVNDX0JJVCgxKVxcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19IT1NUX0NNUExcXHRERVNDX0JJVCgwKVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xcbmluZGV4IDNjNDU2M2M4ZjQwM2YuLjZlZGZhMGFhNjlmMTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xcbkBAIC01MzksOCArNTM5LDggQEAgc3RhdGljIHZvaWQgZmJuaWNfZGJnX2Z3X21ieF9kaXNwbGF5KHN0cnVjdCBzZXFfZmlsZSAqcyxcXG4gXFx0LyogR2VuZXJhdGUgaGVhZGVyICovXFxuIFxcdHNlcV9wdXRzKHMsIG1ieF9pZHggPT0gRkJOSUNfSVBDX01CWF9SWF9JRFggPyBcXFwiUnhcXFxcblxcXCIgOiBcXFwiVHhcXFxcblxcXCIpO1xcbiBcXG4tXFx0c2VxX3ByaW50ZihzLCBcXFwiUmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZFxcXFxuXFxcIixcXG4tXFx0XFx0ICAgbWJ4LVxcdTAwM2VyZWFkeSwgbWJ4LVxcdTAwM2VoZWFkLCBtYngtXFx1MDAzZXRhaWwpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkIHJlc3BfZXJyb3I6ICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdCAgIG1ieC1cXHUwMDNlcmVhZHksIG1ieC1cXHUwMDNlaGVhZCwgbWJ4LVxcdTAwM2V0YWlsLCBtYngtXFx1MDAzZXJlc3BfZXJyb3IpO1xcbiBcXG4gXFx0c25wcmludGYoaGRyLCBzaXplb2YoaGRyKSwgXFxcIiUzcyAlLTRzICVzICUtMTJzICVzICUtM3MgJS0xNnNcXFxcblxcXCIsXFxuIFxcdFxcdCBcXFwiSWR4XFxcIiwgXFxcIkxlblxcXCIsIFxcXCJFXFxcIiwgXFxcIkFkZHJcXFwiLCBcXFwiRlxcXCIsIFxcXCJIXFxcIiwgXFxcIlJhd1xcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXFxuaW5kZXggMGU0NzA4OGVjNDRiYS4uNDIzZjE3OWM5ZDQ3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXFxuQEAgLTIwMjUsNyArMjAyNSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XFxuIFxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcXG4gXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG4gXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XFxuLVxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxcbitcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsXFxuIFxcdC5nZXRfZHJ2aW5mb1xcdFxcdFxcdD0gZmJuaWNfZ2V0X2RydmluZm8sXFxuIFxcdC5nZXRfcmVnc19sZW5cXHRcXHRcXHQ9IGZibmljX2dldF9yZWdzX2xlbixcXG4gXFx0LmdldF9yZWdzXFx0XFx0XFx0PSBmYm5pY19nZXRfcmVncyxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXFxuaW5kZXggMjgzZDI1ZmFlNzllNy4uNmQ3ZWI4NDc5ZWRmNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG5AQCAtNjAsOCArNjAsMTUgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Jlc2V0X2Rlc2NfcmluZyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBtYnhfaWR4KVxcbiBcXHQgKi9cXG4gXFx0c3dpdGNoIChtYnhfaWR4KSB7XFxuIFxcdGNhc2UgRkJOSUNfSVBDX01CWF9SWF9JRFg6XFxuK1xcdFxcdC8qIENsZWFyaW5nIEJNRSBibG9ja3MgdGhlIGRldmljZSBmcm9tIHdyaXRpbmcgdG8gdGhlIGhvc3RcXG4rXFx0XFx0ICogYnV0IGxlYXZlcyB0aGUgcmVxdWVzdHMgcGFya2VkIGluIHRoZSB3cml0ZSBwaXBlbGluZS4gVGhlXFxuK1xcdFxcdCAqIHdyaXRlIHBhdGggb25seSBjbGVhcnMgb3V0c3RhbmRpbmcgcmVxdWVzdHMgd2hlbiBib3RoIEZMVVNIXFxuK1xcdFxcdCAqIGFuZCBGTFVTSF9NT0RFIGFyZSBzZXQ7IEZMVVNIX01PREUgbGV0cyB0aGVtIGRyYWluIHdpdGhvdXRcXG4rXFx0XFx0ICogbGFuZGluZyBvbiB0aGUgaG9zdC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHdyMzIoZmJkLCBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkcsXFxuLVxcdFxcdCAgICAgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIKTtcXG4rXFx0XFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0ggfFxcbitcXHRcXHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgRkJOSUNfSVBDX01CWF9UWF9JRFg6XFxuIFxcdFxcdHdyMzIoZmJkLCBGQk5JQ19QVUxfT0JfVExQX0hEUl9BUl9DRkcsXFxuQEAgLTI4NSw2ICsyOTIsMTIgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfdHhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuIFxcdFxcdGlmICghKGRlc2MgXFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0aWYgKGRlc2MgXFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSKSB7XFxuK1xcdFxcdFxcdHR4X21ieC1cXHUwMDNlcmVzcF9lcnJvcisrO1xcbitcXHRcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRlcgY29tcGxldGVkIGEgVHggbWFpbGJveCByZXF1ZXN0IHdpdGggYW4gZXJyb3JcXFxcblxcXCIpO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRmYm5pY19tYnhfdW5tYXBfYW5kX2ZyZWVfbXNnKGZiZCwgRkJOSUNfSVBDX01CWF9UWF9JRFgsIGhlYWQpO1xcbiBcXG4gXFx0XFx0aGVhZCsrO1xcbkBAIC0xNjY2LDYgKzE2NzksMTMgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuIFxcdFxcdGlmICghKGRlc2MgXFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0aWYgKGRlc2MgXFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSKSB7XFxuK1xcdFxcdFxcdHJ4X21ieC1cXHUwMDNlcmVzcF9lcnJvcisrO1xcbitcXHRcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRlcgcmVwb3J0ZWQgYW4gZXJyb3Igb24gYW4gUnggbWFpbGJveCBtZXNzYWdlOyBkcm9wcGluZ1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gbmV4dF9wYWdlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShmYmQtXFx1MDAzZWRldiwgcnhfbWJ4LVxcdTAwM2VidWZfaW5mb1toZWFkXS5hZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHRGQk5JQ19SWF9QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XFxuIFxcbkBAIC0xNzMzLDcgKzE3NTMsOSBAQCB2b2lkIGZibmljX21ieF9wb2xsKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4gaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4ge1xcbiBcXHRzdHJ1Y3QgZmJuaWNfZndfbWJ4ICp0eF9tYnggPSBcXHUwMDI2ZmJkLVxcdTAwM2VtYnhbRkJOSUNfSVBDX01CWF9UWF9JRFhdO1xcbitcXHRzdHJ1Y3QgZmJuaWNfZndfbWJ4ICpyeF9tYnggPSBcXHUwMDI2ZmJkLVxcdTAwM2VtYnhbRkJOSUNfSVBDX01CWF9SWF9JRFhdO1xcbiBcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgMTAgKiBIWiArIDE7XFxuK1xcdHU2NCB0eF9yZXNwX2Vycm9yLCByeF9yZXNwX2Vycm9yO1xcbiBcXHRpbnQgZXJyLCBpO1xcbiBcXG4gXFx0ZG8ge1xcbkBAIC0xNzY0LDYgKzE3ODYsOSBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiBcXHQgKiBtZ210LnZlcnNpb24gb25jZSB3ZSBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGZpcm13YXJlXFxuIFxcdCAqIGluIHRoZSBjYXBhYmlsaXRpZXMgcmVxdWVzdCBtZXNzYWdlLlxcbiBcXHQgKi9cXG4rc2VuZF9jYXBfcmVxOlxcbitcXHR0eF9yZXNwX2Vycm9yID0gdHhfbWJ4LVxcdTAwM2VyZXNwX2Vycm9yO1xcbitcXHRyeF9yZXNwX2Vycm9yID0gcnhfbWJ4LVxcdTAwM2VyZXNwX2Vycm9yO1xcbiBcXHRlcnIgPSBmYm5pY19md194bWl0X3NpbXBsZV9tc2coZmJkLCBGQk5JQ19UTFZfTVNHX0lEX0hPU1RfQ0FQX1JFUSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gY2xlYW5fbWJ4O1xcbkBAIC0xNzgxLDkgKzE4MDYsMjcgQEAgaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4gXFx0XFx0bXNsZWVwKDIwKTtcXG4gXFx0XFx0ZmJuaWNfbWJ4X3BvbGwoZmJkKTtcXG4gXFxuK1xcdFxcdC8qIEEgdmFsaWQgY2FwYWJpbGl0aWVzIHJlc3BvbnNlIGVuZHMgdGhlIHBvbGwuIENoZWNrIGl0XFxuK1xcdFxcdCAqIGJlZm9yZSB0aGUgRldfRVJSIHJldHJ5IGJlbG93IHNvIGEgcmVzcG9uc2UgcGFyc2VkIGluIHRoZVxcbitcXHRcXHQgKiBzYW1lIHBvbGwgYXMgYW4gdW5yZWxhdGVkIEZXX0VSUiBpcyBub3QgZGlzY2FyZGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGZiZC1cXHUwMDNlZndfY2FwLnJ1bm5pbmcubWdtdC52ZXJzaW9uIFxcdTAwM2U9IE1JTl9GV19WRVJfQ09ERSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHQvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi9cXG4tXFx0XFx0aWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpXFxuK1xcdFxcdGlmICghdGltZV9pc19hZnRlcl9qaWZmaWVzKHRpbWVvdXQpKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBUaGUgRlcgY2FuIGZsYWcgb3VyIGNhcGFiaWxpdGllcyByZXF1ZXN0IChUeCkgb3IgaXRzXFxuK1xcdFxcdCAqIHJlc3BvbnNlIChSeCkgd2l0aCBGV19FUlIsIGluIHdoaWNoIGNhc2UgaXQgcHJvZHVjZWQgbm9cXG4rXFx0XFx0ICogdXNhYmxlIHJlc3BvbnNlLiBUaGUgcmluZyBpcyBub3Qgd2VkZ2VkLCBzbyByZS1pc3N1ZSB0aGVcXG4rXFx0XFx0ICogcmVxdWVzdCBpbnN0ZWFkIG9mIHNwaW5uaW5nIHVudGlsIHRoZSB0aW1lb3V0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHR4X21ieC1cXHUwMDNlcmVzcF9lcnJvciAhPSB0eF9yZXNwX2Vycm9yIHx8XFxuK1xcdFxcdCAgICByeF9tYngtXFx1MDAzZXJlc3BfZXJyb3IgIT0gcnhfcmVzcF9lcnJvcilcXG4rXFx0XFx0XFx0Z290byBzZW5kX2NhcF9yZXE7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcXG5pbmRleCBkODQ3MjNlNGNmYTM2Li41Zjk5NjkyNDdlMzA1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbkBAIC0xMyw2ICsxMyw3IEBAIHN0cnVjdCBmYm5pY190bHZfbXNnO1xcbiBcXG4gc3RydWN0IGZibmljX2Z3X21ieCB7XFxuIFxcdHU4IHJlYWR5LCBoZWFkLCB0YWlsO1xcbitcXHR1NjQgcmVzcF9lcnJvcjtcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGZibmljX3Rsdl9tc2dcXHQqbXNnO1xcbiBcXHRcXHRkbWFfYWRkcl90XFx0XFx0YWRkcjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcXG5pbmRleCA4YjliYzllOGVhNTZjLi5jNjY5OGUzMDAyYTEzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jXFxuQEAgLTQzNCw2ICs0MzQsNyBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZmJkLVxcdTAwM2VuZXRkZXY7XFxuK1xcdHN0cnVjdCBmYm5pY19uZXQgKmZibjtcXG4gXFxuIFxcdGlmIChmYm5pY19pbml0X2ZhaWx1cmUoZmJkKSlcXG4gXFx0XFx0Z290byBudWxsX3VjX2FkZHI7XFxuQEAgLTQ0MSwxMSArNDQyLDE2IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRuZXRkZXZfbG9jayhuZXRkZXYpO1xcbiBcXG4rXFx0ZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuIFxcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcXG4gXFxuIFxcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcXG4gXFxuK1xcdC8qIFRoZSBJUlFzIGFyZSBhYm91dCB0byBiZSBmcmVlZCwgc28gZHJvcCB0aGUgbmFwaSB2ZWN0b3IgY291bnQgKi9cXG4rXFx0ZmJuLVxcdTAwM2VudW1fbmFwaSA9IDA7XFxuK1xcbiBcXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuIFxcbkBAIC01MDgsMTYgKzUxNCwyMCBAQCBzdGF0aWMgaW50IF9fZmJuaWNfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0aWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRkZXZfbG9jayhuZXRkZXYpO1xcbitcXG4gXFx0ZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuIFxcdC8qIFJlc2V0IHRoZSBxdWV1ZXMgaWYgbmVlZGVkICovXFxuIFxcdGZibmljX3Jlc2V0X3F1ZXVlcyhmYm4sIGZibi1cXHUwMDNlbnVtX3R4X3F1ZXVlcywgZmJuLVxcdTAwM2VudW1fcnhfcXVldWVzKTtcXG4gXFxuLVxcdHJ0bmxfbG9jaygpO1xcbi1cXHRuZXRkZXZfbG9jayhuZXRkZXYpO1xcbi1cXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbiBcXHRcXHRlcnIgPSBfX2ZibmljX29wZW4oZmJuKTtcXG4rXFx0XFx0LyogT24gZmFpbHVyZSB0aGUgdmVjdG9ycyBhcmUgZnJlZWQsIHNvIGRyb3AgdGhlIGNvdW50ICovXFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGZibi1cXHUwMDNlbnVtX25hcGkgPSAwO1xcbitcXHR9XFxuIFxcbiBcXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmNcXG5pbmRleCA0MDFmOGI4YWUxY2FlLi5lOTMxNzRmYzEyMzlmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmNcXG5AQCAtNyw2ICs3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X3F1ZXVlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9yeF9xdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGRwLmhcXHUwMDNlXFxuQEAgLTE3NjgsNyArMTc2OSw3IEBAIGludCBmYm5pY19hbGxvY19uYXBpX3ZlY3RvcnMoc3RydWN0IGZibmljX25ldCAqZmJuKVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogQWxsb2NhdGUgMSBUeCBxdWV1ZSBwZXIgbmFwaSB2ZWN0b3IgKi9cXG4tXFx0aWYgKG51bV9uYXBpIFxcdTAwM2MgRkJOSUNfTUFYX1RYUVMgXFx1MDAyNlxcdTAwMjYgbnVtX25hcGkgPT0gbnVtX3R4ICsgbnVtX3J4KSB7XFxuK1xcdGlmIChudW1fbmFwaSBcXHUwMDNjPSBGQk5JQ19NQVhfVFhRUyBcXHUwMDI2XFx1MDAyNiBudW1fbmFwaSA9PSBudW1fdHggKyBudW1fcngpIHtcXG4gXFx0XFx0d2hpbGUgKG51bV90eCkge1xcbiBcXHRcXHRcXHRlcnIgPSBmYm5pY19hbGxvY19uYXBpX3ZlY3RvcihmYmQsIGZibixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbnVtX25hcGksIHZfaWR4LFxcbkBAIC0yODI5LDYgKzI4MzAsMTcgQEAgdm9pZCBmYm5pY19uYXBpX2RlcGxldGlvbl9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRmYm5pY193cmZsKGZiZCk7XFxuIH1cXG4gXFxuKy8qIFJldHVybnMgdGhlIG5hcGkgdmVjdG9yIHNlcnZpY2luZyBhbiBSeCBxdWV1ZSwgb3IgTlVMTCBpZiB0aGUgZGF0YXBhdGhcXG4rICogaXMgdG9ybiBkb3duLiAgVGhlIGFzc29jaWF0aW9uIGlzIHB1Ymxpc2hlZCBieSBmYm5pY19zZXRfbmV0aWZfbmFwaSgpXFxuKyAqIGFuZCBjbGVhcmVkIGJ5IGZibmljX3Jlc2V0X25ldGlmX25hcGkoKSwgYm90aCB1bmRlciB0aGUgaW5zdGFuY2UgbG9jay5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3IgKmZibmljX3J4cV9udihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWR4KVxcbit7XFxuK1xcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IF9fbmV0aWZfZ2V0X3J4X3F1ZXVlKGRldiwgaWR4KS1cXHUwMDNlbmFwaTtcXG4rXFxuK1xcdHJldHVybiBuYXBpID8gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvciwgbmFwaSkgOiBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGZibmljX3F1ZXVlX21lbV9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGRldl9xdWV1ZV9jb25maWcgKnFjZmcsXFxuIFxcdFxcdFxcdFxcdCB2b2lkICpxbWVtLCBpbnQgaWR4KVxcbkBAIC0yODQxLDggKzI4NTMsMTYgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKCFuZXRpZl9ydW5uaW5nKGRldikpXFxuIFxcdFxcdHJldHVybiBmYm5pY19hbGxvY19xdF9wYWdlX3Bvb2xzKGZibiwgcXQsIGlkeCk7XFxuIFxcbitcXHQvKiBBIGZhaWxlZCBQQ0llIHJlY292ZXJ5IG9yIHJlc3VtZSBjYW4gbGVhdmUgdGhlIGRhdGFwYXRoIHRvcm4gZG93blxcbitcXHQgKiB3aGlsZSBuZXRpZl9ydW5uaW5nKCkgaXMgc3RpbGwgdHJ1ZS4gIFRoaXMgbmRvIHJ1bnMgYmVmb3JlXFxuK1xcdCAqIG5ldGRldl9yeF9xdWV1ZV9yZXN0YXJ0KCkgY2hlY2tzIG5ldGlmX3J1bm5pbmcoKSwgc28gYmFpbCBvdXRcXG4rXFx0ICogcmF0aGVyIHRoYW4gdG91Y2hpbmcgcmluZ3MgYW5kIHZlY3RvcnMgdGhhdCBhcmUgYWxyZWFkeSBmcmVlZC5cXG4rXFx0ICovXFxuK1xcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcXG4rXFx0aWYgKCFudilcXG4rXFx0XFx0cmV0dXJuIC1FTkVURE9XTjtcXG4rXFxuIFxcdHJlYWwgPSBjb250YWluZXJfb2YoZmJuLVxcdTAwM2VyeFtpZHhdLCBzdHJ1Y3QgZmJuaWNfcV90cmlhZCwgY21wbCk7XFxuLVxcdG52ID0gZmJuLVxcdTAwM2VuYXBpW2lkeCAlIGZibi1cXHUwMDNlbnVtX25hcGldO1xcbiBcXG4gXFx0ZmJuaWNfcmluZ19pbml0KFxcdTAwMjZxdC1cXHUwMDNlc3ViMCwgcmVhbC1cXHUwMDNlc3ViMC5kb29yYmVsbCwgcmVhbC1cXHUwMDNlc3ViMC5xX2lkeCxcXG4gXFx0XFx0XFx0cmVhbC1cXHUwMDNlc3ViMC5mbGFncyk7XFxuQEAgLTI4OTMsNyArMjkxMyw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0c3RydWN0IGZibmljX3FfdHJpYWQgKnJlYWw7XFxuIFxcbiBcXHRyZWFsID0gY29udGFpbmVyX29mKGZibi1cXHUwMDNlcnhbaWR4XSwgc3RydWN0IGZibmljX3FfdHJpYWQsIGNtcGwpO1xcbi1cXHRudiA9IGZibi1cXHUwMDNlbmFwaVtpZHggJSBmYm4tXFx1MDAzZW51bV9uYXBpXTtcXG4rXFx0bnYgPSBmYm5pY19yeHFfbnYoZGV2LCBpZHgpO1xcbiBcXG4gXFx0ZmJuaWNfYWdncmVnYXRlX3JpbmdfYmRxX2NvdW50ZXJzKGZibiwgXFx1MDAyNnJlYWwtXFx1MDAzZXN1YjApO1xcbiBcXHRmYm5pY19hZ2dyZWdhdGVfcmluZ19iZHFfY291bnRlcnMoZmJuLCBcXHUwMDI2cmVhbC1cXHUwMDNlc3ViMSk7XFxuQEAgLTI5MTUsNyArMjkzNSw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0cmVhbCA9IGNvbnRhaW5lcl9vZihmYm4tXFx1MDAzZXJ4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTtcXG4tXFx0bnYgPSBmYm4tXFx1MDAzZW5hcGlbaWR4ICUgZmJuLVxcdTAwM2VudW1fbmFwaV07XFxuK1xcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcXG4gXFx0ZmJuaWNfZGJnX252X2V4aXQobnYpO1xcbiBcXG4gXFx0bmFwaV9kaXNhYmxlX2xvY2tlZChcXHUwMDI2bnYtXFx1MDAzZW5hcGkpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXFxuaW5kZXggMjUzNjAwYzBlY2NkZi4uYzRjOWNlMDM4NjExMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXFxuQEAgLTk0NCw2ICs5NDQsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XFxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNXFx0QklUKDYpXFxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTU1xcdFxcdEJJVCg3KVxcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOS1xcdFxcdEJJVCg4KVxcbisjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXFx0XFx0QklUKDkpXFxuIFxcbiAvKipcXG4gICogc3RydWN0IGV0aHRvb2xfb3BzIC0gb3B0aW9uYWwgbmV0ZGV2IG9wZXJhdGlvbnNcXG5AQCAtOTgxLDYgKzk4Miw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcXG4gICpcXHQgLSBuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKClcXG4gICpcXHQgLSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKClcXG4gICpcXHQgLSBldGh0b29sX29wX2dldF9saW5rKCkgKHN5bmNzIGxpbmsgd2F0Y2ggdW5kZXIgcnRubF9sb2NrKVxcbisgKlxcdCAtIG5ldGlmX29wZW4oKSAvIG5ldGlmX2Nsb3NlKCkgKHVzZWQgYnkgQHNlbGZfdGVzdClcXG4gICpcXG4gICogQGdldF9kcnZpbmZvOiBSZXBvcnQgZHJpdmVyL2RldmljZSBpbmZvcm1hdGlvbi4gTW9kZXJuIGRyaXZlcnMgbm9cXG4gICpcXHRsb25nZXIgaGF2ZSB0byBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjay4gTW9zdCBmaWVsZHMgYXJlXFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL2NvbW1vbi5oIGIvbmV0L2V0aHRvb2wvY29tbW9uLmhcXG5pbmRleCA0ZTUzNTZlMjZmNDAwLi5hZTMyZTdmZGI1NjNjIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL2NvbW1vbi5oXFxuKysrIGIvbmV0L2V0aHRvb2wvY29tbW9uLmhcXG5AQCAtMTYzLDYgKzE2Myw4IEBAIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxcbiBcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUztcXG4gXFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxcbiBcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xcbitcXHRjYXNlIEVUSFRPT0xfVEVTVDpcXG4rXFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbiBcXHR9XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMTo0Ni42MzQ1NDM3NjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3NjA2NzM1NjE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSBtb2RpZmllcyB0aGUgZmJuaWMgKE1ldGEgQVNJQyBOSUMpIGFuZCBibnh0IChCcm9hZGNvbSBOZXRYdHJlbWUgTklDKSBkcml2ZXJzLCBib3RoIG9mIHdoaWNoIHJlcXVpcmUgdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIFBDSWUgQVNJQyBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYW5kIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBjaGFuZ2VzIGluIGluY2x1ZGUvbGludXgvZXRodG9vbC5oIGFuZCBuZXQvZXRodG9vbC9jb21tb24uaCBpbnRyb2R1Y2UgYW5kIGNoZWNrIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHNvIHRoYXQgZHJpdmVycyBjYW4gb3B0IGluIHRvIGhvbGRpbmcgcnRubF9sb2NrIGR1cmluZyBzZWxmLXRlc3Q7IHRoaXMgZmxhZyBpcyBleGNsdXNpdmVseSBzZXQgYnkgYm54dCBhbmQgZmJuaWMuIEZvciBhbGwgcmVhY2hhYmxlIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiB2aXJ0aW8tbmV0LCBkdW1teSwgdmV0aCwgbmV0ZGV2c2ltKSwgdGhpcyBmbGFnIGlzIG5ldmVyIHNldCBhbmQgdGhlIGNoZWNrIGV2YWx1YXRlcyB0byAwIChpZGVudGljYWwgdG8gcHJldmlvdXMgYmVoYXZpb3IpLiBUaGVyZWZvcmUsIG5vIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgZXhpc3QgdG8gd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOTg1Y2NmOTY0Y2U0YTQ1MWI3OGYzYmFiYzIzNmZiNmQ4NGU3MTA4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6MzE6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuY1xuaW5kZXggNjJiYzljYWU2MTNjMy4uNjIyZTg5NTg3ZTVkYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmNcbkBAIC01NzMzLDcgKzU3MzMsOCBAQCBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54dF9ldGh0b29sX29wcyA9IHtcbiBcdC5vcF9uZWVkc19ydG5sXHRcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbiBcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDT0FMRVNDRSB8XG4tXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUyxcbitcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTIHxcbitcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1NfSVJRIHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbkBAIC05NzQsNiArOTc0LDcgQEAgZW51bSB7XG4gLyogUFVMIFVzZXIgUmVnaXN0ZXJzICovXG4gI2RlZmluZSBGQk5JQ19DU1JfU1RBUlRfUFVMX1VTRVJcdDB4MzEwMDBcdC8qIENTUiBzZWN0aW9uIGRlbGltaXRlciAqL1xuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHXHQweDMxMDNkXHRcdC8qIDB4YzQwZjQgKi9cbisjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFXHRDU1JfQklUKDIwKVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIXHRDU1JfQklUKDE5KVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0JNRVx0XHRDU1JfQklUKDE4KVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX1JERV9BVFRSXHRDU1JfR0VOTUFTSygxNywgMTUpXG5AQCAtMTIxNSw2ICsxMjE2LDEwIEBAIGVudW0ge1xuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0xFTl9NQVNLXHRERVNDX0dFTk1BU0soNjMsIDQ4KVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVx0XHRERVNDX0JJVCg0NilcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcdERFU0NfR0VOTUFTSyg0NSwgMylcbisvKiBTZXQgd2l0aCBGV19DTVBMIHdoZW4gdGhlIEZXIGNvbXBsZXRlZCBhIGRlc2NyaXB0b3Igd2l0aG91dCBzdWNjZXNzZnVsbHlcbisgKiBwcm9jZXNzaW5nIGl0IChlLmcuIGEgbWFpbGJveCBETUEgZXJyb3IpOyB0aGUgY29tcGxldGlvbiBoYXMgbm8gdmFsaWQgZGF0YS5cbisgKi9cbisjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlJcdERFU0NfQklUKDIpXG4gI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTFx0REVTQ19CSVQoMSlcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19IT1NUX0NNUExcdERFU0NfQklUKDApXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuaW5kZXggM2M0NTYzYzhmNDAzZi4uNmVkZmEwYWE2OWYxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuQEAgLTUzOSw4ICs1MzksOCBAQCBzdGF0aWMgdm9pZCBmYm5pY19kYmdfZndfbWJ4X2Rpc3BsYXkoc3RydWN0IHNlcV9maWxlICpzLFxuIFx0LyogR2VuZXJhdGUgaGVhZGVyICovXG4gXHRzZXFfcHV0cyhzLCBtYnhfaWR4ID09IEZCTklDX0lQQ19NQlhfUlhfSURYID8gXCJSeFxcblwiIDogXCJUeFxcblwiKTtcbiBcbi1cdHNlcV9wcmludGYocywgXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkXFxuXCIsXG4tXHRcdCAgIG1ieC1cdTAwM2VyZWFkeSwgbWJ4LVx1MDAzZWhlYWQsIG1ieC1cdTAwM2V0YWlsKTtcbitcdHNlcV9wcmludGYocywgXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkIHJlc3BfZXJyb3I6ICVsbHVcXG5cIixcbitcdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwsIG1ieC1cdTAwM2VyZXNwX2Vycm9yKTtcbiBcbiBcdHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksIFwiJTNzICUtNHMgJXMgJS0xMnMgJXMgJS0zcyAlLTE2c1xcblwiLFxuIFx0XHQgXCJJZHhcIiwgXCJMZW5cIiwgXCJFXCIsIFwiQWRkclwiLCBcIkZcIiwgXCJIXCIsIFwiUmF3XCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbmluZGV4IDBlNDcwODhlYzQ0YmEuLjQyM2YxNzljOWQ0NzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbkBAIC0yMDI1LDcgKzIwMjUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xuIFx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTSB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxuLVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbitcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxuK1x0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNULFxuIFx0LmdldF9kcnZpbmZvXHRcdFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfcmVnc19sZW5cdFx0XHQ9IGZibmljX2dldF9yZWdzX2xlbixcbiBcdC5nZXRfcmVnc1x0XHRcdD0gZmJuaWNfZ2V0X3JlZ3MsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5pbmRleCAyODNkMjVmYWU3OWU3Li42ZDdlYjg0NzllZGY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbkBAIC02MCw4ICs2MCwxNSBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcmVzZXRfZGVzY19yaW5nKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IG1ieF9pZHgpXG4gXHQgKi9cbiBcdHN3aXRjaCAobWJ4X2lkeCkge1xuIFx0Y2FzZSBGQk5JQ19JUENfTUJYX1JYX0lEWDpcbitcdFx0LyogQ2xlYXJpbmcgQk1FIGJsb2NrcyB0aGUgZGV2aWNlIGZyb20gd3JpdGluZyB0byB0aGUgaG9zdFxuK1x0XHQgKiBidXQgbGVhdmVzIHRoZSByZXF1ZXN0cyBwYXJrZWQgaW4gdGhlIHdyaXRlIHBpcGVsaW5lLiBUaGVcbitcdFx0ICogd3JpdGUgcGF0aCBvbmx5IGNsZWFycyBvdXRzdGFuZGluZyByZXF1ZXN0cyB3aGVuIGJvdGggRkxVU0hcbitcdFx0ICogYW5kIEZMVVNIX01PREUgYXJlIHNldDsgRkxVU0hfTU9ERSBsZXRzIHRoZW0gZHJhaW4gd2l0aG91dFxuK1x0XHQgKiBsYW5kaW5nIG9uIHRoZSBob3N0LlxuK1x0XHQgKi9cbiBcdFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGRyxcbi1cdFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0gpO1xuK1x0XHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCB8XG4rXHRcdCAgICAgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIX01PREUpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgRkJOSUNfSVBDX01CWF9UWF9JRFg6XG4gXHRcdHdyMzIoZmJkLCBGQk5JQ19QVUxfT0JfVExQX0hEUl9BUl9DRkcsXG5AQCAtMjg1LDYgKzI5MiwxMiBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc190eF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiBcdFx0aWYgKCEoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKVxuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRpZiAoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikge1xuK1x0XHRcdHR4X21ieC1cdTAwM2VyZXNwX2Vycm9yKys7XG4rXHRcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoZmJkLVx1MDAzZWRldixcbitcdFx0XHRcdFx0ICAgICBcIkZXIGNvbXBsZXRlZCBhIFR4IG1haWxib3ggcmVxdWVzdCB3aXRoIGFuIGVycm9yXFxuXCIpO1xuK1x0XHR9XG4rXG4gXHRcdGZibmljX21ieF91bm1hcF9hbmRfZnJlZV9tc2coZmJkLCBGQk5JQ19JUENfTUJYX1RYX0lEWCwgaGVhZCk7XG4gXG4gXHRcdGhlYWQrKztcbkBAIC0xNjY2LDYgKzE2NzksMTMgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gXHRcdGlmICghKGRlc2MgXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19DTVBMKSlcbiBcdFx0XHRicmVhaztcbiBcbitcdFx0aWYgKGRlc2MgXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIpIHtcbitcdFx0XHRyeF9tYngtXHUwMDNlcmVzcF9lcnJvcisrO1xuK1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCAgICAgXCJGVyByZXBvcnRlZCBhbiBlcnJvciBvbiBhbiBSeCBtYWlsYm94IG1lc3NhZ2U7IGRyb3BwaW5nXFxuXCIpO1xuK1x0XHRcdGdvdG8gbmV4dF9wYWdlO1xuK1x0XHR9XG4rXG4gXHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGZiZC1cdTAwM2VkZXYsIHJ4X21ieC1cdTAwM2VidWZfaW5mb1toZWFkXS5hZGRyLFxuIFx0XHRcdFx0XHRGQk5JQ19SWF9QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4gXG5AQCAtMTczMyw3ICsxNzUzLDkgQEAgdm9pZCBmYm5pY19tYnhfcG9sbChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4gXHRzdHJ1Y3QgZmJuaWNfZndfbWJ4ICp0eF9tYnggPSBcdTAwMjZmYmQtXHUwMDNlbWJ4W0ZCTklDX0lQQ19NQlhfVFhfSURYXTtcbitcdHN0cnVjdCBmYm5pY19md19tYnggKnJ4X21ieCA9IFx1MDAyNmZiZC1cdTAwM2VtYnhbRkJOSUNfSVBDX01CWF9SWF9JRFhdO1xuIFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwICogSFogKyAxO1xuK1x0dTY0IHR4X3Jlc3BfZXJyb3IsIHJ4X3Jlc3BfZXJyb3I7XG4gXHRpbnQgZXJyLCBpO1xuIFxuIFx0ZG8ge1xuQEAgLTE3NjQsNiArMTc4Niw5IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gXHQgKiBtZ210LnZlcnNpb24gb25jZSB3ZSBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGZpcm13YXJlXG4gXHQgKiBpbiB0aGUgY2FwYWJpbGl0aWVzIHJlcXVlc3QgbWVzc2FnZS5cbiBcdCAqL1xuK3NlbmRfY2FwX3JlcTpcbitcdHR4X3Jlc3BfZXJyb3IgPSB0eF9tYngtXHUwMDNlcmVzcF9lcnJvcjtcbitcdHJ4X3Jlc3BfZXJyb3IgPSByeF9tYngtXHUwMDNlcmVzcF9lcnJvcjtcbiBcdGVyciA9IGZibmljX2Z3X3htaXRfc2ltcGxlX21zZyhmYmQsIEZCTklDX1RMVl9NU0dfSURfSE9TVF9DQVBfUkVRKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gY2xlYW5fbWJ4O1xuQEAgLTE3ODEsOSArMTgwNiwyNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRtc2xlZXAoMjApO1xuIFx0XHRmYm5pY19tYnhfcG9sbChmYmQpO1xuIFxuK1x0XHQvKiBBIHZhbGlkIGNhcGFiaWxpdGllcyByZXNwb25zZSBlbmRzIHRoZSBwb2xsLiBDaGVjayBpdFxuK1x0XHQgKiBiZWZvcmUgdGhlIEZXX0VSUiByZXRyeSBiZWxvdyBzbyBhIHJlc3BvbnNlIHBhcnNlZCBpbiB0aGVcbitcdFx0ICogc2FtZSBwb2xsIGFzIGFuIHVucmVsYXRlZCBGV19FUlIgaXMgbm90IGRpc2NhcmRlZC5cbitcdFx0ICovXG4rXHRcdGlmIChmYmQtXHUwMDNlZndfY2FwLnJ1bm5pbmcubWdtdC52ZXJzaW9uIFx1MDAzZT0gTUlOX0ZXX1ZFUl9DT0RFKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHQvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi9cbi1cdFx0aWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpXG4rXHRcdGlmICghdGltZV9pc19hZnRlcl9qaWZmaWVzKHRpbWVvdXQpKSB7XG4gXHRcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBUaGUgRlcgY2FuIGZsYWcgb3VyIGNhcGFiaWxpdGllcyByZXF1ZXN0IChUeCkgb3IgaXRzXG4rXHRcdCAqIHJlc3BvbnNlIChSeCkgd2l0aCBGV19FUlIsIGluIHdoaWNoIGNhc2UgaXQgcHJvZHVjZWQgbm9cbitcdFx0ICogdXNhYmxlIHJlc3BvbnNlLiBUaGUgcmluZyBpcyBub3Qgd2VkZ2VkLCBzbyByZS1pc3N1ZSB0aGVcbitcdFx0ICogcmVxdWVzdCBpbnN0ZWFkIG9mIHNwaW5uaW5nIHVudGlsIHRoZSB0aW1lb3V0LlxuK1x0XHQgKi9cbitcdFx0aWYgKHR4X21ieC1cdTAwM2VyZXNwX2Vycm9yICE9IHR4X3Jlc3BfZXJyb3IgfHxcbitcdFx0ICAgIHJ4X21ieC1cdTAwM2VyZXNwX2Vycm9yICE9IHJ4X3Jlc3BfZXJyb3IpXG4rXHRcdFx0Z290byBzZW5kX2NhcF9yZXE7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjVmOTk2OTI0N2UzMDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuQEAgLTEzLDYgKzEzLDcgQEAgc3RydWN0IGZibmljX3Rsdl9tc2c7XG4gXG4gc3RydWN0IGZibmljX2Z3X21ieCB7XG4gXHR1OCByZWFkeSwgaGVhZCwgdGFpbDtcbitcdHU2NCByZXNwX2Vycm9yO1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZibmljX3Rsdl9tc2dcdCptc2c7XG4gXHRcdGRtYV9hZGRyX3RcdFx0YWRkcjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuaW5kZXggOGI5YmM5ZThlYTU2Yy4uYzY2OThlMzAwMmExMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcbkBAIC00MzQsNiArNDM0LDcgQEAgc3RhdGljIGludCBmYm5pY19wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmYmQtXHUwMDNlbmV0ZGV2O1xuK1x0c3RydWN0IGZibmljX25ldCAqZmJuO1xuIFxuIFx0aWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKVxuIFx0XHRnb3RvIG51bGxfdWNfYWRkcjtcbkBAIC00NDEsMTEgKzQ0MiwxNiBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cnRubF9sb2NrKCk7XG4gXHRuZXRkZXZfbG9jayhuZXRkZXYpO1xuIFxuK1x0ZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbiBcdG5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTtcbiBcbiBcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4gXHRcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4gXG4rXHQvKiBUaGUgSVJRcyBhcmUgYWJvdXQgdG8gYmUgZnJlZWQsIHNvIGRyb3AgdGhlIG5hcGkgdmVjdG9yIGNvdW50ICovXG4rXHRmYm4tXHUwMDNlbnVtX25hcGkgPSAwO1xuK1xuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbiBcbkBAIC01MDgsMTYgKzUxNCwyMCBAQCBzdGF0aWMgaW50IF9fZmJuaWNfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdGlmIChmYm5pY19pbml0X2ZhaWx1cmUoZmJkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRydG5sX2xvY2soKTtcbitcdG5ldGRldl9sb2NrKG5ldGRldik7XG4rXG4gXHRmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuIFx0LyogUmVzZXQgdGhlIHF1ZXVlcyBpZiBuZWVkZWQgKi9cbiBcdGZibmljX3Jlc2V0X3F1ZXVlcyhmYm4sIGZibi1cdTAwM2VudW1fdHhfcXVldWVzLCBmYm4tXHUwMDNlbnVtX3J4X3F1ZXVlcyk7XG4gXG4tXHRydG5sX2xvY2soKTtcbi1cdG5ldGRldl9sb2NrKG5ldGRldik7XG4tXG4tXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuIFx0XHRlcnIgPSBfX2ZibmljX29wZW4oZmJuKTtcbitcdFx0LyogT24gZmFpbHVyZSB0aGUgdmVjdG9ycyBhcmUgZnJlZWQsIHNvIGRyb3AgdGhlIGNvdW50ICovXG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0ZmJuLVx1MDAzZW51bV9uYXBpID0gMDtcbitcdH1cbiBcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguY1xuaW5kZXggNDAxZjhiOGFlMWNhZS4uZTkzMTc0ZmMxMjM5ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguY1xuQEAgLTcsNiArNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X3J4X3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuQEAgLTE3NjgsNyArMTc2OSw3IEBAIGludCBmYm5pY19hbGxvY19uYXBpX3ZlY3RvcnMoc3RydWN0IGZibmljX25ldCAqZmJuKVxuIFx0aW50IGVycjtcbiBcbiBcdC8qIEFsbG9jYXRlIDEgVHggcXVldWUgcGVyIG5hcGkgdmVjdG9yICovXG4tXHRpZiAobnVtX25hcGkgXHUwMDNjIEZCTklDX01BWF9UWFFTIFx1MDAyNlx1MDAyNiBudW1fbmFwaSA9PSBudW1fdHggKyBudW1fcngpIHtcbitcdGlmIChudW1fbmFwaSBcdTAwM2M9IEZCTklDX01BWF9UWFFTIFx1MDAyNlx1MDAyNiBudW1fbmFwaSA9PSBudW1fdHggKyBudW1fcngpIHtcbiBcdFx0d2hpbGUgKG51bV90eCkge1xuIFx0XHRcdGVyciA9IGZibmljX2FsbG9jX25hcGlfdmVjdG9yKGZiZCwgZmJuLFxuIFx0XHRcdFx0XHRcdCAgICAgIG51bV9uYXBpLCB2X2lkeCxcbkBAIC0yODI5LDYgKzI4MzAsMTcgQEAgdm9pZCBmYm5pY19uYXBpX2RlcGxldGlvbl9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZmJuaWNfd3JmbChmYmQpO1xuIH1cbiBcbisvKiBSZXR1cm5zIHRoZSBuYXBpIHZlY3RvciBzZXJ2aWNpbmcgYW4gUnggcXVldWUsIG9yIE5VTEwgaWYgdGhlIGRhdGFwYXRoXG4rICogaXMgdG9ybiBkb3duLiAgVGhlIGFzc29jaWF0aW9uIGlzIHB1Ymxpc2hlZCBieSBmYm5pY19zZXRfbmV0aWZfbmFwaSgpXG4rICogYW5kIGNsZWFyZWQgYnkgZmJuaWNfcmVzZXRfbmV0aWZfbmFwaSgpLCBib3RoIHVuZGVyIHRoZSBpbnN0YW5jZSBsb2NrLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3IgKmZibmljX3J4cV9udihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWR4KVxuK3tcbitcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IF9fbmV0aWZfZ2V0X3J4X3F1ZXVlKGRldiwgaWR4KS1cdTAwM2VuYXBpO1xuK1xuK1x0cmV0dXJuIG5hcGkgPyBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGZibmljX25hcGlfdmVjdG9yLCBuYXBpKSA6IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfbWVtX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgc3RydWN0IG5ldGRldl9xdWV1ZV9jb25maWcgKnFjZmcsXG4gXHRcdFx0XHQgdm9pZCAqcW1lbSwgaW50IGlkeClcbkBAIC0yODQxLDggKzI4NTMsMTYgQEAgc3RhdGljIGludCBmYm5pY19xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRyZXR1cm4gZmJuaWNfYWxsb2NfcXRfcGFnZV9wb29scyhmYm4sIHF0LCBpZHgpO1xuIFxuK1x0LyogQSBmYWlsZWQgUENJZSByZWNvdmVyeSBvciByZXN1bWUgY2FuIGxlYXZlIHRoZSBkYXRhcGF0aCB0b3JuIGRvd25cbitcdCAqIHdoaWxlIG5ldGlmX3J1bm5pbmcoKSBpcyBzdGlsbCB0cnVlLiAgVGhpcyBuZG8gcnVucyBiZWZvcmVcbitcdCAqIG5ldGRldl9yeF9xdWV1ZV9yZXN0YXJ0KCkgY2hlY2tzIG5ldGlmX3J1bm5pbmcoKSwgc28gYmFpbCBvdXRcbitcdCAqIHJhdGhlciB0aGFuIHRvdWNoaW5nIHJpbmdzIGFuZCB2ZWN0b3JzIHRoYXQgYXJlIGFscmVhZHkgZnJlZWQuXG4rXHQgKi9cbitcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcbitcdGlmICghbnYpXG4rXHRcdHJldHVybiAtRU5FVERPV047XG4rXG4gXHRyZWFsID0gY29udGFpbmVyX29mKGZibi1cdTAwM2VyeFtpZHhdLCBzdHJ1Y3QgZmJuaWNfcV90cmlhZCwgY21wbCk7XG4tXHRudiA9IGZibi1cdTAwM2VuYXBpW2lkeCAlIGZibi1cdTAwM2VudW1fbmFwaV07XG4gXG4gXHRmYm5pY19yaW5nX2luaXQoXHUwMDI2cXQtXHUwMDNlc3ViMCwgcmVhbC1cdTAwM2VzdWIwLmRvb3JiZWxsLCByZWFsLVx1MDAzZXN1YjAucV9pZHgsXG4gXHRcdFx0cmVhbC1cdTAwM2VzdWIwLmZsYWdzKTtcbkBAIC0yODkzLDcgKzI5MTMsNyBAQCBzdGF0aWMgaW50IGZibmljX3F1ZXVlX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRzdHJ1Y3QgZmJuaWNfcV90cmlhZCAqcmVhbDtcbiBcbiBcdHJlYWwgPSBjb250YWluZXJfb2YoZmJuLVx1MDAzZXJ4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTtcbi1cdG52ID0gZmJuLVx1MDAzZW5hcGlbaWR4ICUgZmJuLVx1MDAzZW51bV9uYXBpXTtcbitcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcbiBcbiBcdGZibmljX2FnZ3JlZ2F0ZV9yaW5nX2JkcV9jb3VudGVycyhmYm4sIFx1MDAyNnJlYWwtXHUwMDNlc3ViMCk7XG4gXHRmYm5pY19hZ2dyZWdhdGVfcmluZ19iZHFfY291bnRlcnMoZmJuLCBcdTAwMjZyZWFsLVx1MDAzZXN1YjEpO1xuQEAgLTI5MTUsNyArMjkzNSw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxuIFx0aW50IGVycjtcbiBcbiBcdHJlYWwgPSBjb250YWluZXJfb2YoZmJuLVx1MDAzZXJ4W2lkeF0sIHN0cnVjdCBmYm5pY19xX3RyaWFkLCBjbXBsKTtcbi1cdG52ID0gZmJuLVx1MDAzZW5hcGlbaWR4ICUgZmJuLVx1MDAzZW51bV9uYXBpXTtcbitcdG52ID0gZmJuaWNfcnhxX252KGRldiwgaWR4KTtcbiBcdGZibmljX2RiZ19udl9leGl0KG52KTtcbiBcbiBcdG5hcGlfZGlzYWJsZV9sb2NrZWQoXHUwMDI2bnYtXHUwMDNlbmFwaSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuaW5kZXggMjUzNjAwYzBlY2NkZi4uYzRjOWNlMDM4NjExMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuQEAgLTk0NCw2ICs5NDQsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU1cdEJJVCg2KVxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTU1x0XHRCSVQoNylcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOS1x0XHRCSVQoOClcbisjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXHRcdEJJVCg5KVxuIFxuIC8qKlxuICAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zXG5AQCAtOTgxLDYgKzk4Miw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcbiAgKlx0IC0gbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcygpXG4gICpcdCAtIG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMoKVxuICAqXHQgLSBldGh0b29sX29wX2dldF9saW5rKCkgKHN5bmNzIGxpbmsgd2F0Y2ggdW5kZXIgcnRubF9sb2NrKVxuKyAqXHQgLSBuZXRpZl9vcGVuKCkgLyBuZXRpZl9jbG9zZSgpICh1c2VkIGJ5IEBzZWxmX3Rlc3QpXG4gICpcbiAgKiBAZ2V0X2RydmluZm86IFJlcG9ydCBkcml2ZXIvZGV2aWNlIGluZm9ybWF0aW9uLiBNb2Rlcm4gZHJpdmVycyBub1xuICAqXHRsb25nZXIgaGF2ZSB0byBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjay4gTW9zdCBmaWVsZHMgYXJlXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvY29tbW9uLmggYi9uZXQvZXRodG9vbC9jb21tb24uaFxuaW5kZXggNGU1MzU2ZTI2ZjQwMC4uYWUzMmU3ZmRiNTYzYyAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL2NvbW1vbi5oXG4rKysgYi9uZXQvZXRodG9vbC9jb21tb24uaFxuQEAgLTE2Myw2ICsxNjMsOCBAQCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcbiBcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xuIFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxuIFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcbitcdGNhc2UgRVRIVE9PTF9URVNUOlxuK1x0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xuIFx0fVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMxOjQ2LjYzNDU0NTcwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NDc1ODYwNzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3VpdGFiaWxpdHkgRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIExldCdzIHNlZS4uLiBmaXJzdCwgdGhlIHJpc2sgYXNzZXNzbWVudC4gU3RhbmRhcmQga2VybmVsIG1haW50ZW5hbmNlLCBRQSwgZGVmZW5zaXZlIHNlY3VyaXR5IOKAkyBzb3VuZHMgcHJldHR5IGJlbmlnbi4gTm8gZXhwbG9pdCBjcmVhdGlvbiwganVzdCBjaGVja2luZyBmb3IgdnVsbmVyYWJpbGl0aWVzLiBHb29kLCBnb29kLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyB0b3VjaGluZyBhIGJ1bmNoIG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuY2AsIGEgd2hvbGUgYnVuY2ggb2YgYGZibmljYCBmaWxlcywgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCwgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIEFoLCB3YWl0ISBUaGUgY29yZSBuZXQgY2hhbmdlcyBhcmUgd2hhdCBjYXRjaGVzIG15IGV5ZS5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYDogYCNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGFuZCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgLCBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCB1c2VzIGl0LiBBbmQgYGJueHRfZXRodG9vbC5jYCBpcyBhZGRpbmcgdGhhdCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHRvIGBibnh0X2V0aHRvb2xfb3BzLm9wX25lZWRzX3J0bmxgLiBUaGUgYGZibmljYCBjaGFuZ2VzIGFyZSBhbHNvIHRoZXJlLlxuXG5Ib2xkIG9uLCB3aGF0IGFyZSB0aGVzZSBgYm54dGAgYW5kIGBmYm5pY2AgdGhpbmdzPyBSaWdodCwgYGJueHRgIGlzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUgZHJpdmVyLCBwaHlzaWNhbCBQQ0llIE5JQ3MuIEFuZCBgZmJuaWNgIGlzIE1ldGEncyBjdXN0b20gSG9zdCBOZXR3b3JrIEludGVyZmFjZSwgYWxzbyBQQ0llIG5ldHdvcmsgY2FyZC4gU28gd2UncmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGRyaXZlcnMgaGVyZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuXG5cbkJ1dCB0aG9zZSBjb3JlIG5ldCBjaGFuZ2VzLCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgIGFuZCBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgIHNwZWNpZmljYWxseS4uLiBpcyBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCByZWFjaGFibGU/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGlzIGFjdHVhbGx5ICp1c2VkKiBpbiB0aGUgY29kZWJhc2UuIExldCdzIGRvIGEgc2VhcmNoIGZvciB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQuIFRoYXQgd2lsbCB0ZWxsIHVzIGlmIHRoZXNlIGNvcmUgY2hhbmdlcyBhcmUgZXZlbiByZWxldmFudCBpbiBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU1MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjA1LjExMDQwODQzNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyOTQ3NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9jb21tb24uaD05Mj1ldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNtZClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEyOS0vKipcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMzA6ICogZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkgLSBkb2VzIHRoaXMgbGVnYWN5IGlvY3RsIGNtZCBuZWVkIHJ0bmxfbG9jaz9cXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMzEtICogQGRldjogdGFyZ2V0IGRldmljZVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbFxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEzODpldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMzkte1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM1OTAtICogRHJpdmVyLWRlY2lkZWQgU0VUIGNvbW1hbmRzIHRoYXQgbWF5IGNoYWluIGludG8gcnRubC1vbmx5IGhlbHBlcnMgYXJlXFxubmV0L2V0aHRvb2wvaW9jdGwuYzozNTkxOiAqIGNvdmVyZWQgYnkgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkvRVRIVE9PTF9PUF9ORUVEU19SVE5MXyouXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTkyLSAqL1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zNjEwPV9fZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyLFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjIzLVxcdFxcdCAgICBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZCkgfHxcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2MjQ6XFx0XFx0ICAgIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjI1LVxcdGlmIChuZWVkX3J0bmwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjA2LjczMzM2MDU0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgzODE1NDgwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBldGh0b29sIFNvdXJjZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXRodG9vbCBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhyb3VnaCBpb2N0bHMuIEknbSBnb2luZyB0byBmb2N1cyBvbiBgbmV0L2V0aHRvb2wvaW9jdGwuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMzYxMCB0byAzNjUwLiBUaGlzIGxpa2VseSBkZWFscyB3aXRoIHNvbWUgc3BlY2lmaWMgZmVhdHVyZSBvciBmdW5jdGlvbiBjYWxsLiBJIGFsc28gbmVlZCB0byBrZWVwIGBuZXQvZXRodG9vbC9jb21tb24uaGAgb3Blbi4gVGhhdCBoZWFkZXIgZmlsZSBpcyBwcmFjdGljYWxseSB0aGUgZXRodG9vbCBiaWJsZSDigJMgaXQgcHJvYmFibHkgZGVmaW5lcyB0aGUgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzIEknbGwgbmVlZCB0byBpbnRlcnByZXQgdGhlIGlvY3RsIGNhbGxzIGFuZCBkYXRhLiBJJ2xsIHJlYWQgdGhvc2UgdHdvIGZpbGVzIGFuZCB0cnkgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiBldGh0b29sIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjE1LjExNDkxMDY4MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM2MDA6XFx0XFx0Y2FzZSBFVEhUT09MX1NTRzpcXG4zNjAxOlxcdFxcdGNhc2UgRVRIVE9PTF9TVFNPOlxcbjM2MDI6XFx0XFx0Y2FzZSBFVEhUT09MX1NHU086XFxuMzYwMzpcXHRcXHRjYXNlIEVUSFRPT0xfU0dSTzpcXG4zNjA0OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjM2MDU6XFx0XFx0fVxcbjM2MDY6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjM2MDc6XFx0fVxcbjM2MDg6XFx0XFxuMzYwOTpcXHRzdGF0aWMgaW50XFxuMzYxMDpcXHRfX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcXG4zNjExOlxcdFxcdCAgICAgIHUzMiBldGhjbWQsIHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpkZXZsaW5rX3N0YXRlKVxcbjM2MTI6XFx0e1xcbjM2MTM6XFx0XFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuMzYxNDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjM2MTU6XFx0XFx0Ym9vbCBuZWVkX3J0bmw7XFxuMzYxNjpcXHRcXHRpbnQgcmM7XFxuMzYxNzpcXHRcXG4zNjE4OlxcdFxcdGRldiA9IG5ldGRldl9nZXRfYnlfbmFtZShuZXQsIGlmci1cXHUwMDNlaWZyX25hbWUsIFxcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuMzYxOTpcXHRcXHRpZiAoIWRldilcXG4zNjIwOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjM2MjE6XFx0XFxuMzYyMjpcXHRcXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxcbjM2MjM6XFx0XFx0XFx0ICAgIGV0aHRvb2xfY21kX2NoYW5nZXNfZmVhdHVyZXMoZXRoY21kKSB8fFxcbjM2MjQ6XFx0XFx0XFx0ICAgIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7XFxuMzYyNTpcXHRcXHRpZiAobmVlZF9ydG5sKVxcbjM2MjY6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuMzYyNzpcXHRcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4zNjI4OlxcdFxcdGlmIChkZXYtXFx1MDAzZXJlZ19zdGF0ZSBcXHUwMDNlIE5FVFJFR19SRUdJU1RFUkVEIHx8XFxuMzYyOTpcXHRcXHQgICAgZGV2LVxcdTAwM2Vtb3ZpbmdfbnMgfHwgIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkpIHtcXG4zNjMwOlxcdFxcdFxcdHJjID0gLUVOT0RFVjtcXG4zNjMxOlxcdFxcdFxcdGdvdG8gZXhpdF9vcHNfdW5sb2NrO1xcbjM2MzI6XFx0XFx0fVxcbjM2MzM6XFx0XFxuMzYzNDpcXHRcXHRyYyA9IGRldl9ldGh0b29sX2xvY2tlZChuZXQsIGRldiwgdXNlcmFkZHIsIGV0aGNtZCwgZGV2bGlua19zdGF0ZSxcXG4zNjM1OlxcdFxcdFxcdFxcdFxcdG5lZWRfcnRubCk7XFxuMzYzNjpcXHRcXG4zNjM3OlxcdGV4aXRfb3BzX3VubG9jazpcXG4zNjM4OlxcdFxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuMzYzOTpcXHRcXHRpZiAobmVlZF9ydG5sKVxcbjM2NDA6XFx0XFx0XFx0cnRubF91bmxvY2soKTtcXG4zNjQxOlxcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2X3RyYWNrZXIpO1xcbjM2NDI6XFx0XFxuMzY0MzpcXHRcXHRyZXR1cm4gcmM7XFxuMzY0NDpcXHR9XFxuMzY0NTpcXHRcXG4zNjQ2OlxcdGludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXFxuMzY0NzpcXHR7XFxuMzY0ODpcXHRcXHRzdHJ1Y3QgZXRodG9vbF9kZXZsaW5rX2NvbXBhdCAqc3RhdGU7XFxuMzY0OTpcXHRcXHR1MzIgZXRoY21kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjoxNS4xMTUwNjMxNjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0Mzk3MzM1MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCgpYCBhbmQgTmV0d29yayBEZXZpY2UgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGRldiwgZXRoY21kKWAgZnVuY3Rpb24uIFRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBvciBub3QgYSBuZXR3b3JrIGRldmljZSBgZGV2YCByZXF1aXJlcyB0aGUgUmVhbC1UaW1lIE5ldGxpbmsgKFJUTkwpIHN1YnN5c3RlbSB0byBoYW5kbGUgdGhlIGBldGhjbWRgICh0aGUgc3BlY2lmaWMgZXRodG9vbCBjb21tYW5kKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggd2UgZGVjaWRlIFJUTkwgaXMgbmVjZXNzYXJ5LlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gY3JhY2sgb3BlbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgLCBzcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhhdCBzZWN0aW9uIGFyb3VuZCBsaW5lcyAxMzAgdG8gMTcwLiBUaGF0J3Mgd2hlcmUgSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGNvcmUgbG9naWMgb3IgcmVsZXZhbnQgZGVmaW5pdGlvbnMgdG8gZGVjb2RlIGV4YWN0bHkgd2hhdCB0cmlnZ2VycyB0aGF0IGRldGVybWluYXRpb24uIFRoZXJlJ3MgbGlrZWx5IGEgc2VyaWVzIG9mIGNoZWNrcywgZmxhZ3MsIG9yIGRhdGEgc3RydWN0dXJlcyBkZWZpbmVkIGluIHRoYXQgYXJlYSB0aGF0IGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBpbnRlcmFjdGlvbiwgYW5kIHRob3NlIHdpbGwgaWxsdW1pbmF0ZSB3aGVuIFJUTkwgaXMgdHJ1bHkgcmVxdWlyZWQgZm9yIGEgc3BlY2lmaWMgZXRodG9vbCBvcGVyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gZWZmaWNpZW50IGFuZCBjb3JyZWN0IG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjI1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjoxOS41MTI0MDMyNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9jb21tb24uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0ICogZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkgLSBkb2VzIHRoaXMgbGVnYWN5IGlvY3RsIGNtZCBuZWVkIHJ0bmxfbG9jaz9cXG4gMTMxOlxcdCAqIEBkZXY6IHRhcmdldCBkZXZpY2VcXG4gMTMyOlxcdCAqIEBldGhjbWQ6IEVUSFRPT0xfKiBpb2N0bCBjb21tYW5kIHZhbHVlXFxuIDEzMzpcXHQgKlxcbiAxMzQ6XFx0ICogUmV0dXJuOiB0cnVlIGlmIEBldGhjbWQgaXMgYSBjb21tYW5kIGZvciB3aGljaCBAZGV2IGhhcyBvcHRlZC1pbiB0b1xcbiAxMzU6XFx0ICoga2VlcGluZyBydG5sX2xvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwgKHZpYSBvcF9uZWVkc19ydG5sKS5cXG4gMTM2OlxcdCAqL1xcbiAxMzc6XFx0c3RhdGljIGlubGluZSBib29sXFxuIDEzODpcXHRldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG4gMTM5OlxcdHtcXG4gMTQwOlxcdFxcdGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LVxcdTAwM2VldGh0b29sX29wcztcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0c3dpdGNoIChldGhjbWQpIHtcXG4gMTQzOlxcdFxcdGNhc2UgRVRIVE9PTF9HTElOS1NFVFRJTkdTOlxcbiAxNDQ6XFx0XFx0Y2FzZSBFVEhUT09MX0dTRVQ6XFxuIDE0NTpcXHRcXHRjYXNlIEVUSFRPT0xfU0xJTktTRVRUSU5HUzpcXG4gMTQ2OlxcdFxcdGNhc2UgRVRIVE9PTF9TU0VUOlxcbiAxNDc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1M7XFxuIDE0ODpcXHRcXHRjYXNlIEVUSFRPT0xfU1BGTEFHUzpcXG4gMTQ5OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUztcXG4gMTUwOlxcdFxcdGNhc2UgRVRIVE9PTF9TUklOR1BBUkFNOlxcbiAxNTE6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNO1xcbiAxNTI6XFx0XFx0Y2FzZSBFVEhUT09MX1NDSEFOTkVMUzpcXG4gMTUzOlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTO1xcbiAxNTQ6XFx0XFx0Y2FzZSBFVEhUT09MX1NDT0FMRVNDRTpcXG4gMTU1OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xcbiAxNTY6XFx0XFx0Y2FzZSBFVEhUT09MX0dQQVVTRVBBUkFNOlxcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTTtcXG4gMTU4OlxcdFxcdGNhc2UgRVRIVE9PTF9TUEFVU0VQQVJBTTpcXG4gMTU5OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU07XFxuIDE2MDpcXHRcXHRjYXNlIEVUSFRPT0xfU1JTU0g6XFxuIDE2MTpcXHRcXHRjYXNlIEVUSFRPT0xfU1JYRkg6XFxuIDE2MjpcXHRcXHRjYXNlIEVUSFRPT0xfU1JYRkhJTkRJUjpcXG4gMTYzOlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xcbiAxNjQ6XFx0XFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxcbiAxNjU6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcXG4gMTY2OlxcdFxcdGNhc2UgRVRIVE9PTF9URVNUOlxcbiAxNjc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbiAxNjg6XFx0XFx0fVxcbiAxNjk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxNzA6XFx0fVxcbiAxNzE6XFx0XFxuIDE3MjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRVRIVE9PTF9ORVRMSU5LKVxcbiAxNzM6XFx0dm9pZCBldGh0b29sX3Jzc19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHR5cGUsIHUzMiByc3NfY29udGV4dCk7XFxuIDE3NDpcXHQjZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjoxOS41MTI2MDQxN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNjQ1NTg4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqVW5yYXZlbGluZyBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZSB0aGlzIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCBjYWxsLCBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoYXQgdGhhdCdzIGFjdHVhbGx5IGRvaW5nLiBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgYWxvbmUuIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBhIHBvdGVudGlhbGx5IHRyaWNreSBwaWVjZSBvZiBuZXR3b3JrIGRldmljZSBkcml2ZXIgY29kZSwgZXNwZWNpYWxseSBpZiB3ZSBhcmUgaW4gYSBtdWx0aSB0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGltZSB0byBkaWcgaW4sIHJhdGhlciB0aGFuIG1ha2UgYXNzdW1wdGlvbnMuIExldCdzIGdldCB0aGUgY29udGV4dCByaWdodCBhd2F5LiBMZXQncyBkbyBhIHF1aWNrIHNlYXJjaCBmb3IgYG5ldGRldl9uZWVkX29wc19sb2NrYCBhbmQgc2VlIHdoYXQgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIG1pZ2h0IG9mZmVyLiBIb3BlZnVsbHksIHRoZSBzZWFyY2ggcmVzdWx0cyB3aWxsIHF1aWNrbHkgaWxsdW1pbmF0ZSBpZiBpdCdzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgY29udHJvbCwgZGV2aWNlIG9wZXJhdGlvbiBvcmRlcmluZywgb3Igc29tZSBvdGhlciBhc3BlY3Qgb2YgbmV0d29yayBkZXZpY2UgbWFuYWdlbWVudCB0aGF0IGRlbWFuZHMgY2FyZWZ1bCBhdHRlbnRpb24uIEEgZ29vZCBzZWFyY2ggc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24sIGFsb25nIHdpdGggdXNlcywgYW5kIG1heWJlIGV2ZW4gYSBicmllZiBkZXNjcmlwdGlvbiBmcm9tIHRoZSBjb2RlLCBvciBob3BlZnVsbHkgYmV0dGVyIHlldCwgYSBtZWFuaW5nZnVsIGNvbW1pdCBtZXNzYWdlLiBJIGFtIGxvb2tpbmcgZm9yIHRoZSBcIndoeVwiIGFuZCBcIndoZW5cIiBiZWhpbmQgdGhpcyBmdW5jdGlvbidzIGV4aXN0ZW5jZS4gSSBzdXNwZWN0IHRoaXMgaXMgc29tZXRoaW5nIGZ1bmRhbWVudGFsLCBsaWtlIGxvY2tpbmcgdGhlIGRldmljZSBvcGVyYXRpb25zIHN0cnVjdHVyZSwgYW5kIEkgbmVlZCB0byBlc3RhYmxpc2ggdGhlIHByZWNpc2Ugc2NvcGUgYW5kIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NTgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjIxLjg3NzE2NjAyM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NzYxNjI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbmVlZF9vcHNfbG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYz0zMT1pbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYy00NC1cXHQgKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYzo0NTpcXHRpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jLTQ2LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz04Mj1zdGF0aWMgX19pbmxpbmVfXyBpbnQgZGV2X2lzX2V0aGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy04My17XFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jOjg0OlxcdHJldHVybiBkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSIFxcdTAwMjZcXHUwMDI2ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy04NS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIxNTg9c3RydWN0IG5ldF9kZXZpY2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNjAxLVxcdCAqICAgYW5kIG90aGVyIGNhbGxiYWNrcywgdGhhdCBpcyB0aGUgaW5zdGFuY2UgbG9jayBvbiBkZXZpY2VzIGZvclxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjYwMjpcXHQgKiAgIHdoaWNoIG5ldGRldl9uZWVkX29wc19sb2NrKCkgcmV0dXJucyB0cnVlLCBvdGhlcndpc2UgYnkgcnRubF9sb2NrO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjYwMy1cXHQgKlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjYwNC1cXHQgKiAtIGRvdWJsZSBvcHMgcHJvdGVjdGVkIC0gYWx3YXlzIHByb3RlY3RlZCBieSBydG5sX2xvY2sgYnV0IGZvclxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjYwNTpcXHQgKiAgIGRldmljZXMgZm9yIHdoaWNoIG5ldGRldl9uZWVkX29wc19sb2NrKCkgcmV0dXJucyB0cnVlIC0gYWxzb1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjYwNi1cXHQgKiAgIHRoZSBpbnN0YW5jZSBsb2NrLlxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0yMT1uZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcl9pbnZpc2libGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMjctXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDoyODpzdGF0aWMgaW5saW5lIGJvb2wgbmV0ZGV2X25lZWRfb3BzX2xvY2soY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTI5LXtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9Mzk9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNDAte1xcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6NDE6XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC00Mi1cXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD00NT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3VubG9ja19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTQ2LXtcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjQ3OlxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNDgtXFx0XFx0bmV0ZGV2X3VubG9jayhkZXYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD01MT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX3RvX2Z1bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTUyLXtcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjUzOlxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNTQtXFx0XFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9NTk9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl91bmxvY2tfZnVsbF90b19vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTYwLXtcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjYxOlxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNjItXFx0XFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoZGV2KTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9Njc9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTY4LXtcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjY5OlxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtNzAtXFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg9ODM9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9hc3NlcnRfbG9ja2VkX29wcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtODQte1xcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6ODU6XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC04Ni1cXHRcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChkZXYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD04OT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X2xvY2tfb3BzX2NvbXBhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtOTAte1xcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6OTE6XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC05Mi1cXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD05Nz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3VubG9ja19vcHNfY29tcGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC05OC17XFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDo5OTpcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTEwMC1cXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTEwNj1zdGF0aWMgaW5saW5lIGludCBuZXRkZXZfaXNfbG9ja2VkX29wc19jb21wYXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTEwNy17XFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDoxMDg6XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaC0xMDktXFx0XFx0cmV0dXJuIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9xdWV1ZXMuaD00Mz1zdHJ1Y3QgbmV0ZGV2X3F1ZXVlX3N0YXRzX3R4IHtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9xdWV1ZXMuaC05MS0gKlxcbmluY2x1ZGUvbmV0L25ldGRldl9xdWV1ZXMuaDo5MjogKiBPcHMgYXJlIGNhbGxlZCB1bmRlciB0aGUgaW5zdGFuY2UgbG9jayBpZiBuZXRkZXZfbmVlZF9vcHNfbG9jaygpXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X3F1ZXVlcy5oLTkzLSAqIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIHVuZGVyIHJ0bmxfbG9jay5cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTExNDM4LVxcbm5ldC9jb3JlL2Rldi5jOjExNDM5OlxcdGlmIChuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZGV2LmMtMTE0NDAtXFx0ICAgIGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjQ0MT12b2lkIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnlfbm90aWZ5KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjQ3NC1cXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvY29yZS9kZXYuYzoxMjQ3NTpcXHRcXHRpZiAobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkge1xcbm5ldC9jb3JlL2Rldi5jLTEyNDc2LVxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmRldi1cXHUwMDNlY2xvc2VfbGlzdCwgXFx1MDAyNmNsb3NlX2hlYWQpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI0ODMtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGhlYWQsIHVucmVnX2xpc3QpIHtcXG5uZXQvY29yZS9kZXYuYzoxMjQ4NDpcXHRcXHRpZiAoIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxubmV0L2NvcmUvZGV2LmMtMTI0ODUtXFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZGV2LVxcdTAwM2VjbG9zZV9saXN0LCBcXHUwMDI2Y2xvc2VfaGVhZCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjcwMj1pbnQgX19kZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTI3OTgtXFxubmV0L2NvcmUvZGV2LmM6MTI3OTk6XFx0aWYgKCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbm5ldC9jb3JlL2Rldi5jLTEyODAwLVxcdFxcdG5ldGRldl9sb2NrKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjg3My1cXHRkZXYtXFx1MDAzZW1vdmluZ19ucyA9IGZhbHNlO1xcbm5ldC9jb3JlL2Rldi5jOjEyODc0OlxcdGlmICghbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSlcXG5uZXQvY29yZS9kZXYuYy0xMjg3NS1cXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuaD0xOTE9c3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3NldF91cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHZhbHVlKVxcbi0tXFxubmV0L2NvcmUvZGV2LmgtMTk3LVxcbm5ldC9jb3JlL2Rldi5oOjE5ODpcXHRpZiAoIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxubmV0L2NvcmUvZGV2LmgtMTk5LVxcdFxcdG5ldGRldl9sb2NrKGRldik7XFxubmV0L2NvcmUvZGV2LmgtMjAwLVxcdGRldi1cXHUwMDNldXAgPSB2YWx1ZTtcXG5uZXQvY29yZS9kZXYuaDoyMDE6XFx0aWYgKCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbm5ldC9jb3JlL2Rldi5oLTIwMi1cXHRcXHRuZXRkZXZfdW5sb2NrKGRldik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzNjI9dm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzc0LVxcdGlmIChvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYyB8fCBvcHMtXFx1MDAzZW5kb19jaGFuZ2VfcnhfZmxhZ3MgfHxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzNzU6XFx0ICAgIG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzYtXFx0XFx0bmV0aWZfcnhfbW9kZV9xdWV1ZShkZXYpO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0xMDEzPWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTEwNjktXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjEwNzA6XFx0ZWxzZSBpZiAoIW5ldGRldl9uZWVkX29wc19sb2NrKG5ldGRldikpXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0xMDcxLVxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2X3J4X3F1ZXVlLmM9MjQ1PWludCBuZXRpZl9tcF9vcGVuX3J4cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcnhxX2lkeCxcXG4tLVxcbm5ldC9jb3JlL25ldGRldl9yeF9xdWV1ZS5jLTI1MC1cXG5uZXQvY29yZS9uZXRkZXZfcnhfcXVldWUuYzoyNTE6XFx0aWYgKCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKVxcbm5ldC9jb3JlL25ldGRldl9yeF9xdWV1ZS5jLTI1Mi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM2MTA9X19kZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2MjEtXFxubmV0L2V0aHRvb2wvaW9jdGwuYzozNjIyOlxcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjIzLVxcdFxcdCAgICBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZCkgfHxcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz01MDc9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01MzktXFx0aWYgKHJlcV9pbmZvLVxcdTAwM2VkZXYpIHtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTQwOlxcdFxcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhyZXFfaW5mby1cXHUwMDNlZGV2KSB8fFxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01NDEtXFx0XFx0XFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwocmVxX2luZm8tXFx1MDAzZWRldiwgY21kKTtcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz01OTQ9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjA4LVxcdGV0aG5sX2luaXRfcmVwbHlfZGF0YShjdHgtXFx1MDAzZXJlcGx5X2RhdGEsIGN0eC1cXHUwMDNlb3BzLCBkZXYpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2MDk6XFx0bmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikgfHxcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjEwLVxcdFxcdCAgICBldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGRldiwgY3R4LVxcdTAwM2VvcHMtXFx1MDAzZXJlcXVlc3RfY21kKTtcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz05MDA9c3RhdGljIGludCBldGhubF9kZWZhdWx0X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtOTMwLVxcdGRldiA9IHJlcV9pbmZvLVxcdTAwM2VkZXY7XFxubmV0L2V0aHRvb2wvbmV0bGluay5jOjkzMTpcXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy05MzItXFx0XFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwoZGV2LCBjbWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjoyNC4zMzQ3OTA0NTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjkyMzg1ODY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBuZXRkZXZfbmVlZF9vcHNfbG9ja2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0ZGV2X25lZWRfb3BzX2xvY2tgLi4uIG15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2hhdCBhY3R1YWxseSAqdHJpZ2dlcnMqIHRoYXQgcmV0dXJuIHZhbHVlIG9mIHRydWU/IFdoYXQgY29uZGl0aW9ucyBhcmUgd2UgdGFsa2luZyBhYm91dCBoZXJlP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBJIGtub3cgSSd2ZSBzZWVuIHRoaXMgZnVuY3Rpb24gYmVmb3JlLCBidXQgYSBxdWljayByZWZyZXNoZXIgbmV2ZXIgaHVydHMuXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgc291cmNlIGNvZGUuIExldCdzIGRpdmUgaW50byBgaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaDoyOGAuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGZ1bmN0aW9uLiBUaW1lIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHRvIGRldGVybWluZSB0aGUgbmVlZCBmb3IgdGhhdCBsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA2MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjI3LjI1ODY1MTMyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdFxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGRldik7XFxuICAyNjpcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRkZXZfbmVlZF9vcHNfbG9jayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgMjk6XFx0e1xcbiAgMzA6XFx0XFx0Ym9vbCByZXQgPSBkZXYtXFx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzO1xcbiAgMzE6XFx0XFxuICAzMjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1NIQVBFUilcXG4gIDMzOlxcdFxcdHJldCB8PSAhIWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmV0X3NoYXBlcl9vcHM7XFxuICAzNDpcXHQjZW5kaWZcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDM3OlxcdH1cXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9sb2NrX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0aWYgKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpXFxuICA0MjpcXHRcXHRcXHRuZXRkZXZfbG9jayhkZXYpO1xcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjI3LjI1ODcyMDk2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDU0MDY3NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGV0aHRvb2xgIElPQ1RMIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGBuZXQvZXRodG9vbC9pb2N0bC5jYCBjb2RlIHNuaXBwZXQuIFRoZSBjb3JlIGNvbmNlcm4gaGVyZSBpcyB0aGUgYG5lZWRfcnRubGAgdmFyaWFibGUsIHdoaWNoIGRldGVybWluZXMgd2hldGhlciB0aGUgcm91dGluZSBuZWVkcyB0byBhY3F1aXJlIHRoZSBSVE5MIChSb3V0aW5nIFRhYmxlIE5ldGxpbmspIGxvY2suIEl0IGxvb2tzIGxpa2UgdGhlIGNvbmRpdGlvbiB0aGF0IHNldHMgaXQgaXMgYSBiaXQuLi4gdW51c3VhbC5cblxuVGhlIGtleSBsaW5lIGlzOiBgbmVlZF9ydG5sID0gIW5ldGRldl9uZWVkX29wc19sb2NrKGRldikgfHwgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8IGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7YCBJZiBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgcmV0dXJucyBmYWxzZSwgYG5lZWRfcnRubGAgKmltbWVkaWF0ZWx5KiBiZWNvbWVzIHRydWUuICBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgdHJ1ZSBmb3IgXCJhbGwgc3RhbmRhcmQgZGV2aWNlcyxcIiBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCAqaXMqIHRydWUuXG5cbkxldCdzIGRyaWxsIGRvd246IGl0IHNlZW1zIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCByZXR1cm5zIHRydWUgd2hlbiBgZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2tgIGlzIHRydWUsIG9yIGBkZXYtXHUwMDNlcXVldWVfbWdtdF9vcHNgIGlzIHNldCwgb3IgYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5ldF9zaGFwZXJfb3BzYCBpcyBzZXQuICBTbywgZm9yIG1vc3QgZGV2aWNlcywgd2UncmUgdGFraW5nIHRoZSBSVE5MIGxvY2sgKmFueXdheSouIEJ1dCB3aHkgdGhlc2UgdGhyZWUgc3BlY2lmaWMgdHJpZ2dlcnM/IFRoYXQncyB3aGF0IEkgd2FudCB0byB1bmRlcnN0YW5kLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGRyaXZlcnMgYXJlIHNldHRpbmcgYHJlcXVlc3Rfb3BzX2xvY2tgLCBgcXVldWVfbWdtdF9vcHNgLCBvciBgbmV0X3NoYXBlcl9vcHNgLiAgSSdsbCBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIHRob3NlIGV4YWN0IHRlcm1zIHRvIHVuZGVyc3RhbmQgd2hlbiB0aGV5J3JlIHVzZWQuICBJJ20gY3VyaW91cyB0byBzZWUgd2hhdCBraW5kIG9mIGRldmljZXMgYXJlIHRyaWdnZXJpbmcgdGhlc2UgZmxhZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTcyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzI6MzAuMzEyNzkxMTg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQzNDgxMTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXVlc3Rfb3BzX2xvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTM0Mz1Ecml2ZXJzIGNhbiBhbHNvIGV4cGxpY2l0bHkgcmVxdWVzdCBpbnN0YW5jZSBsb2NrIHRvIGJlIGhlbGQgZHVyaW5nIG9wc1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDozNDQ6Ynkgc2V0dGluZyBgYHJlcXVlc3Rfb3BzX2xvY2tgYCB0byB0cnVlLiBDb2RlIGNvbW1lbnRzIGFuZCBkb2NzIHJlZmVyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTM0NS10byBkcml2ZXJzIHdoaWNoIGhhdmUgb3BzIGNhbGxlZCB1bmRlciB0aGUgaW5zdGFuY2UgbG9jayBhcyBcXFwib3BzIGxvY2tlZFxcXCIuXFxuLS1cXG5kcml2ZXJzL25ldC9kdW1teS5jPTEwMz1zdGF0aWMgdm9pZCBkdW1teV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHVtbXkuYy0xMTAtXFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuZHJpdmVycy9uZXQvZHVtbXkuYzoxMTE6XFx0ZGV2LVxcdTAwM2VyZXF1ZXN0X29wc19sb2NrID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9kdW1teS5jLTExMi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYz0zNDAyPWludCBibmdlX25ldGRldl9hbGxvYyhzdHJ1Y3QgYm5nZV9kZXYgKmJkLCBpbnQgbWF4X2lycXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmMtMzUxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfbmV0ZGV2LmM6MzUxOTpcXHRuZXRkZXYtXFx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9uZXRkZXYuYy0zNTIwLVxcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTU4Mjk9c3RhdGljIHZvaWQgbWx4NWVfYnVpbGRfbmljX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODQxLVxcdG5ldGRldi1cXHUwMDNleHNrX3R4X21ldGFkYXRhX29wcyA9IFxcdTAwMjZtbHg1ZV94c2tfdHhfbWV0YWRhdGFfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM6NTg0MjpcXHRuZXRkZXYtXFx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMtNTg0My1cXHRuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhuZXRkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jPTg5Mz1zdGF0aWMgdm9pZCBtbHg1ZV9idWlsZF9yZXBfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtODk3LVxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZtbHg1ZV9uZXRkZXZfb3BzX3JlcDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM6ODk4OlxcdG5ldGRldi1cXHUwMDNlcmVxdWVzdF9vcHNfbG9jayA9IHRydWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTg5OS1cXHRuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhuZXRkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2lwb2liLmM9OTk9aW50IG1seDVpX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuYy0xMjMtXFx0bmV0ZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZtbHg1aV9ldGh0b29sX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuYzoxMjQ6XFx0bmV0ZGV2LVxcdTAwM2VyZXF1ZXN0X29wc19sb2NrID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvaXBvaWIuYy0xMjUtXFx0bmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMobmV0ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtLmM9MTQ2MD1zdGF0aWMgaW50IG1seHN3X3NwX3BvcnRfY3JlYXRlKHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsIHUxNiBsb2NhbF9wb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW0uYy0xNTU0LVxcdGRldi1cXHUwMDNlbmV0bnNfaW1tdXRhYmxlID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jOjE1NTU6XFx0ZGV2LVxcdTAwM2VyZXF1ZXN0X29wc19sb2NrID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bS5jLTE1NTYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIxNTg9c3RydWN0IG5ldF9kZXZpY2Uge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTc3LVxcdC8qKlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjU3ODpcXHQgKiBAcmVxdWVzdF9vcHNfbG9jazogcmVxdWVzdCB0aGUgY29yZSB0byBydW4gYWxsIEBuZXRkZXZfb3BzIGFuZFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjU3OS1cXHQgKiBAZXRodG9vbF9vcHMgdW5kZXIgdGhlIEBsb2NrLlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjU4MC1cXHQgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI1ODE6XFx0Ym9vbFxcdFxcdFxcdHJlcXVlc3Rfb3BzX2xvY2s7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTgyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTkwLVxcdCAqIG9wZXJhdGlvbnMuIERyaXZlcnMgbWF5IG9wdC1pbiB0byB0aGlzIGJlaGF2aW9yIGJ5IHNldHRpbmdcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjI1OTE6XFx0ICogQHJlcXVlc3Rfb3BzX2xvY2suXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTkyLVxcdCAqXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oPTI4PXN0YXRpYyBpbmxpbmUgYm9vbCBuZXRkZXZfbmVlZF9vcHNfbG9jayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMjkte1xcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6MzA6XFx0Ym9vbCByZXQgPSBkZXYtXFx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgfHwgISFkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzO1xcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjMxLjg1NjI3ODY4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3Nzg3NDE4MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRHVtbXkgRHJpdmVyJ3MgUmVxdWVzdCBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGR1bW15LmNgIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3Mgc2V0dGluZyBgZGV2LVx1MDAzZXJlcXVlc3Rfb3BzX2xvY2sgPSB0cnVlO2AuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGlzIGhhcHBlbmluZy4gSXMgaXQgZm9yIGNvbmN1cnJlbmN5IHByb3RlY3Rpb24/IElzIHRoaXMgYSBzdGFuZGFyZCBwYXR0ZXJuIHdpdGhpbiB0aGUgZHVtbXkgZHJpdmVyPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cbkJ1dCwgYmVmb3JlIEkgZ28gZGVlcGVyIGludG8gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBlbHNlLiBEb2VzIHRoZSBgZHVtbXkuY2AgZHJpdmVyIGRlZmluZSBhbmQgc2V0IHRoZSBmbGFnIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgc29tZXdoZXJlPyBUaGF0IGZsYWcgaXMgcmVhbGx5IGltcG9ydGFudC4gSXQgd291bGQgY2hhbmdlIHRoZSB3YXkgSSB0aGluayBhYm91dCBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgYmVpbmcgcGVyZm9ybWVkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV0aHRvb2wgb3BlcmF0aW9ucyBvZiB0aGUgZHVtbXkgZHJpdmVyIHRvIHNlZS4gSSBiZXR0ZXIgZ28gdGhyb3VnaCBhbmQgY2hlY2sgdGhlIGV0aHRvb2wgb3BlcmF0aW9ucyBhbmQgbWFrZSBzdXJlIHRoYXQgZmxhZyBpc24ndCBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjE4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzI6MzkuNjQzNjk5NDIxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ4MjkzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRodG9vbF9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHVtbXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kdW1teS5jPTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHVtbXlfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2R1bW15LmMtOTgtXFxuZHJpdmVycy9uZXQvZHVtbXkuYzo5OTpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGR1bW15X2V0aHRvb2xfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2R1bW15LmMtMTAwLVxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2R1bW15LmM9MTAzPXN0YXRpYyB2b2lkIGR1bW15X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kdW1teS5jLTEwOC1cXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2ZHVtbXlfbmV0ZGV2X29wcztcXG5kcml2ZXJzL25ldC9kdW1teS5jOjEwOTpcXHRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNmR1bW15X2V0aHRvb2xfb3BzO1xcbmRyaXZlcnMvbmV0L2R1bW15LmMtMTEwLVxcdGRldi1cXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjo0MC4yNDg1MzY2MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTkzODIxMzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEV0aHRvb2wgRHVtbXkgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGR1bW15X2V0aHRvb2xfb3BzYCBzdHJ1Y3R1cmUuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCdzIG5vdCBmbGFnZ2luZyBgb3BfbmVlZHNfcnRubGAsIGFuZCBpdCdzIG1pc3NpbmcgdGhlIGBzZWxmX3Rlc3RgIGltcGxlbWVudGF0aW9uLiBUaGF0J3MgYSBiaXQgb2RkLiBJIGtub3cgc29tZSBldGh0b29sIG9wZXJhdGlvbnMgcmVxdWlyZSB0aGUgcm91dGluZyBuZXRsaW5rIGludGVyZmFjZSwgYW5kIGBzZWxmX3Rlc3RgIGlzIHByZXR0eSBpbXBvcnRhbnQgZm9yIGEgYmFzaWMgZHJpdmVyLlxuXG5Ob3cgSSdtIHdvbmRlcmluZywgd2hpY2ggb3RoZXIgZHJpdmVycyBhY3R1YWxseSAqZG8qIHNldCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgPyBJdCdzIGVhc3kgZW5vdWdoIHRvIGZpbmQgb3V0LiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3LCBzbyBsZXQncyBmaXJlIHVwIGEgZ3JlcCBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgc291cmNlIHRyZWUuIExldCdzIGZpbmQgb3V0IHdoZXJlIHRoaXMgZmxhZyBpcyBhY3RpdmVseSB1c2VkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlbnQgYmVoaW5kIHVzaW5nIGl0LCBhbmQgd2hldGhlciBpdHMgYWJzZW5jZSBpbiBgZHVtbXlfZXRodG9vbF9vcHNgIGlzIGEgZGVsaWJlcmF0ZSBkZXNpZ24gY2hvaWNlIG9yIGFuIG92ZXJzaWdodC4gVGhpcyByZXF1aXJlcyBsb29raW5nIGF0IHRoZSBhY3R1YWwgY29kZSB3aGVyZSB0aGUgZmxhZyBpcyB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTUwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzI6NDYuMTg2NzUzMjc4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyODUxNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM9NTcyNz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54dF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczNi1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1MgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNzpcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNULFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczOC1cXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MjAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjAyOC1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MjAyOTpcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNULFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwMzAtXFx0LmdldF9kcnZpbmZvXFx0XFx0XFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTkyMz1zdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05NDYtI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTktcXHRcXHRCSVQoOClcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDc6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVFxcdFxcdEJJVCg5KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk0OC1cXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oPTEzOD1ldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2Ni1cXHRjYXNlIEVUSFRPT0xfVEVTVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjc6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjQ3LjcyOTYxMjk2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODg1NDY2MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgaW4gTmV0d29yayBEcml2ZXJzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBvbmx5IHRoZSBgYm54dGAgYW5kIGBmYm5pY2AgZHJpdmVycyBzZXQgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgZmxhZy4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBsZXQncyBkaWcgaW50byAqd2h5Ki4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGVzZSBhcmUgdmlydHVhbCBkcml2ZXJzIG9yIHJlcHJlc2VudCBwaHlzaWNhbCBQQ0llIGRldmljZXMsIGFzIHRoYXQgbWlnaHQgYmUga2V5LlxuXG5MZXQncyBzdGFydCB3aXRoIGBibnh0YC4gQSBxdWljayBsb29rIGF0IHRoZSBjb2RlIHN1Z2dlc3RzIHRoYXQgaXQncyBhIFBDSSBkcml2ZXIg4oCTc3BlY2lmaWNhbGx5LCBgYm54dF9wY2lfZHJpdmVyYCBpbiBgYm54dC5jYCDigJMgZm9yIEJyb2FkY29tIE5ldFh0cmVtZS1FIGhhcmR3YXJlLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgc3VzcGljaW9uOyBpdCdzIGEgZHJpdmVyIGZvciAqcmVhbCogaGFyZHdhcmUuXG5cbk5vdywgb24gdG8gYGZibmljYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFsc28gYSBQQ0kgZHJpdmVyLCBgZmJuaWNfcGNpLmNgLCB3aGljaCBzb3VuZHMgbGlrZSBpdCdzIGhhbmRsaW5nIE1ldGEncyBBU0lDIG5ldHdvcmsgY2FyZC4gQWdhaW4sIHRoaXMgcG9pbnRzIHRvd2FyZHMgcGh5c2ljYWwgaGFyZHdhcmUuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IENhbiB0aGVzZSBkcml2ZXJzIGZ1bmN0aW9uIGluIGEgcHVyZWx5IHZpcnR1YWwgZW52aXJvbm1lbnQgbGlrZSBzdGFuZGFyZCBRRU1VIG9yIEdDRSwgd2l0aG91dCB0aGUgc3BlY2lmaWMgQVNJQyBoYXJkd2FyZSB0aGV5J3JlIGRlc2lnbmVkIGZvcj8gSSdtIGRvdWJ0ZnVsLiBMZXQncyBzZWUgaWYgUUVNVSAqZW11bGF0ZXMqIGVpdGhlciBgYm54dGAgb3IgYGZibmljYC5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyBteSBzdXNwaWNpb246IFFFTVUgZW11bGF0ZXMgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgZTEwMDAsIHZpcnRpby1uZXQsIGFuZCBzbyBvbiwgYnV0ICpub3QqIGBibnh0YCBvciBgZmJuaWNgLlxuXG5Pa2F5LCBsZXQgbWUgZ28gb25lIHN0ZXAgZnVydGhlciBhbmQgc2VlIGlmIHRoZXJlJ3MgYW55IGtpbmQgb2Ygc29mdHdhcmUgYnVzIGVtdWxhdGlvbiBvciBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgc29tZXRoaW5nIHRoYXQgbWlnaHQgYXQgbGVhc3QgKnNpbXVsYXRlKiB0aGUgcHJlc2VuY2Ugb2YgYGJueHRgIG9yIGBmYm5pY2AgZGV2aWNlcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gYnkgY2hlY2tpbmcgdGhlIHNvdXJjZSBjb2RlIG9mIGJvdGggYGJueHRgIGFuZCBgZmJuaWNgLiBUaW1lIHRvIGxvb2sgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3JpZXM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2AgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2AgZm9yIGNsdWVzLiBUaGlzIGlzIHdoZXJlIEknbGwgZmluZCBteSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjUxLjYxNTA4MTY3MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NzQ1OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE3NzMwPXN0YXRpYyBpbnQgX19pbml0IGJueHRfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTc3MzQtXFx0Ym54dF9kZWJ1Z19pbml0KCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTc3MzU6XFx0ZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2Ym54dF9wY2lfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzczNi1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjUxLjY2MzY2MjUyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTEwMDAxODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGZibmljYCBTaXR1YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBjb250ZXh0IGlzIGxpa2VseSBmaW5hbmNpYWwgb3IgcmVsYXRlZCB0byBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgdGhpbmsgb2YgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMgXCJMZXQncyBjaGVjayBgZmJuaWNgXCIuIEknbSB0aGlua2luZyBhYm91dCB0aGUgcG9zc2liaWxpdGllcywgdGhhdCBpdCBpcyBsaWtlbHkgYSBuZXR3b3JrIHdpdGggZmluYW5jaWFsIHJlc3BvbnNpYmlsaXRpZXMsIG9yIGlzIHBhcnQgb2YgYSBmaW5hbmNpYWwgc2VydmljZXMgaW5mcmFzdHJ1Y3R1cmUuIE15IGludHVpdGlvbiBpcyB0byBxdWlja2x5IGNoZWNrIHRoZSBwYXJhbWV0ZXJzIHN1cnJvdW5kaW5nIHRoYXQgcGFydGljdWxhciB0ZXJtLCBsaWtlbHkgdG8gdW5kZXJzdGFuZCB0aGUgaXNzdWUgYXQgaGFuZC4gSXQgbWlnaHQgYmUgYSBjb25maWd1cmF0aW9uIGZpbGUsIGEgZGF0YWJhc2UgZW50cnksIG9yIGV2ZW4gYW4gaW50ZXJuYWwgY29kZSBkZXNpZ25hdGlvbi4gSSBuZWVkIHRvIGtub3cgKndoYXQqIGBmYm5pY2AgKmlzKiwgYW5kIHdoZXJlIHRvIGZpbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBtb3N0IG9idmlvdXMgYW5kIHF1aWNrZXN0IGNoZWNrcywgcHJvYmFibHkgbG9va2luZyBhdCByZWNlbnQgbG9ncywgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IHRvb2xzLCBvciBrbm93biBzeXN0ZW1zIGRvY3VtZW50YXRpb24gaWYgYXZhaWxhYmxlLiBJJ20gZXhwZWN0aW5nIHRoaXMgYGZibmljYCB0byBiZSBrZXkgdG8gdGhlIHByb2JsZW0sIHNvIGxldCdzIGdldCBtb3ZpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMjo1My43NzM2NjczNThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjkzNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jPTY1ND1zdGF0aWMgaW50IF9faW5pdCBmYm5pY19pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzo2NjA6XFx0ZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2ZmJuaWNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTY2MS1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMyOjUzLjgyMDk2NzA5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MTA2ODY0MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIEVUSFRPT0xfVEVTVCBhbmQgUlROTCBMb2NrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgUENJIGRyaXZlcnMsIGBibnh0YCBhbmQgYGZibmljYCwgd2hpY2ggYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgKEJyb2FkY29tIGFuZCBNZXRhIEFTSUMpLiBNeSB0cmFpbiBvZiB0aG91Z2h0IG5vdyBpcyBkcmF3biB0byBhIGNoYW5nZSBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgIGFuZCBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgLiBJJ3ZlIGdvdCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcy5cblxuQWxyaWdodCwgdGhlIGRpZmYgaW50cm9kdWNlcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIChiaXQgOSkgYW5kIGFkZHMgYG5ldGlmX29wZW4oKWAgYW5kIGBuZXRpZl9jbG9zZSgpYCB0byB0aGUgbGlzdCBvZiBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBwcm90ZWN0ZWQgYnkgdGhlIFJUTkwgKHJvdXRpbmcgdGFibGUgbmV0bGluaykgbG9jay4gTm93LCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGJpZ2dlciBwaWN0dXJlLiBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKClgIGNhbiBiZSBjYWxsZWQgZm9yICphbnkqIGRldmljZSB0aGF0IHJlY2VpdmVzIGFuIGBFVEhUT09MX1RFU1RgIGlvY3RsIGNhbGwgKHZpYSBgU0lPQ0VUSFRPT0xgIHdpdGggYGNtZCA9IEVUSFRPT0xfVEVTVGApLlxuXG5Mb29raW5nIGF0IGBfX2Rldl9ldGh0b29sYCwgdGhhdCdzIHRoZSBmdW5jdGlvbiBoYW5kbGluZyB0aGUgYFNJT0NFVEhUT09MYCBpb2N0bC4gSXQgY2hlY2tzIGBuZWVkX3J0bmxgLCB3aGljaCBpcyBkZXRlcm1pbmVkIGJ5IGAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fCBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZCkgfHwgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGRldiwgZXRoY21kKWAuICBJdCdzIGNyaXRpY2FsIEkgY29uc2lkZXIgd2hhdCB0aGlzIG1lYW5zIGZvciB2YXJpb3VzIG5ldHdvcmsgZGV2aWNlcy5cblxuU3VwcG9zZSBgZGV2YCBpcywgZm9yIGluc3RhbmNlLCBhIGR1bW15IGRldmljZSwgb3IgYSB2ZXRoIHBhaXIsIG9yIGxvb3BiYWNrLiBUaGUgYGR1bW15YCBkZXZpY2UsIHNwZWNpZmljYWxseSwgaGFzIGBkZXYtXHUwMDNlcmVxdWVzdF9vcHNfbG9jayA9IHRydWU7YCEgVGh1cywgYG5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIGB0cnVlYC4gIFRoZXJlZm9yZSwgYCFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYCBpcyBgZmFsc2VgLiBgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhFVEhUT09MX1RFU1QpYCBpcyBhbHNvIGBmYWxzZWAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBFVEhUT09MX1RFU1QpYCAqd2lsbCogYmUgY2FsbGVkLlxuXG5JbiBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCwgd2Ugc2VlIHRoYXQgd2hlbiBgZXRoY21kYCBpcyBgRVRIVE9PTF9URVNUYCwgaXQgcmV0dXJucyBgb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gRm9yIGEgZHVtbXkgZGV2aWNlLCBgb3BzID0gZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2ZHVtbXlfZXRodG9vbF9vcHNgLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgb3BzLVx1MDAzZW9wX25lZWRzX3J0bmxgIGlzICp1bmluaXRpYWxpemVkKiAobGlrZWx5IHplcm8pLiBTbywgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCgpYCByZXR1cm5zIDAhXG5cblRoaXMgbWVhbnMgYG5lZWRfcnRubGAgaW4gYF9fZGV2X2V0aHRvb2xgIGJlY29tZXMgYGZhbHNlYC4gQ29uc2VxdWVudGx5LCBgZGV2X2V0aHRvb2xfbG9ja2VkKC4uLiwgbmVlZF9ydG5sKWAgaXMgY2FsbGVkIHdpdGggYG5lZWRfcnRubGAgYmVpbmcgZmFsc2UuIEkgbm93IG5lZWQgdG8gdmVyaWZ5IHdoYXQgYGRldl9ldGh0b29sX2xvY2tlZGAgZG9lcyB3aGVuIGBFVEhUT09MX1RFU1RgIGlzIHRoZSBgZXRoY21kYCBhbmQgYG5lZWRfcnRubGAgaXMgYGZhbHNlYC4gSSBuZWVkIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGggdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbmV3IGNvbmRpdGlvbmFsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ5NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6MDAuOTI3ODM0NjQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9pb2N0bC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMDA6XFx0XFx0Y2FzZSBFVEhUT09MX0dTVFJJTkdTOlxcbjMzMDE6XFx0XFx0Y2FzZSBFVEhUT09MX0dTVEFUUzpcXG4zMzAyOlxcdFxcdGNhc2UgRVRIVE9PTF9HUEhZU1RBVFM6XFxuMzMwMzpcXHRcXHRjYXNlIEVUSFRPT0xfR1RTTzpcXG4zMzA0OlxcdFxcdGNhc2UgRVRIVE9PTF9HUEVSTUFERFI6XFxuMzMwNTpcXHRcXHRjYXNlIEVUSFRPT0xfR1VGTzpcXG4zMzA2OlxcdFxcdGNhc2UgRVRIVE9PTF9HR1NPOlxcbjMzMDc6XFx0XFx0Y2FzZSBFVEhUT09MX0dHUk86XFxuMzMwODpcXHRcXHRjYXNlIEVUSFRPT0xfR0ZMQUdTOlxcbjMzMDk6XFx0XFx0Y2FzZSBFVEhUT09MX0dQRkxBR1M6XFxuMzMxMDpcXHRcXHRjYXNlIEVUSFRPT0xfR1JYRkg6XFxuMzMxMTpcXHRcXHRjYXNlIEVUSFRPT0xfR1JYUklOR1M6XFxuMzMxMjpcXHRcXHRjYXNlIEVUSFRPT0xfR1JYQ0xTUkxDTlQ6XFxuMzMxMzpcXHRcXHRjYXNlIEVUSFRPT0xfR1JYQ0xTUlVMRTpcXG4zMzE0OlxcdFxcdGNhc2UgRVRIVE9PTF9HUlhDTFNSTEFMTDpcXG4zMzE1OlxcdFxcdGNhc2UgRVRIVE9PTF9HUlhGSElORElSOlxcbjMzMTY6XFx0XFx0Y2FzZSBFVEhUT09MX0dSU1NIOlxcbjMzMTc6XFx0XFx0Y2FzZSBFVEhUT09MX0dGRUFUVVJFUzpcXG4zMzE4OlxcdFxcdGNhc2UgRVRIVE9PTF9HQ0hBTk5FTFM6XFxuMzMxOTpcXHRcXHRjYXNlIEVUSFRPT0xfR0VUX1RTX0lORk86XFxuMzMyMDpcXHRcXHRjYXNlIEVUSFRPT0xfR0VFRTpcXG4zMzIxOlxcdFxcdGNhc2UgRVRIVE9PTF9HVFVOQUJMRTpcXG4zMzIyOlxcdFxcdGNhc2UgRVRIVE9PTF9QSFlfR1RVTkFCTEU6XFxuMzMyMzpcXHRcXHRjYXNlIEVUSFRPT0xfR0xJTktTRVRUSU5HUzpcXG4zMzI0OlxcdFxcdGNhc2UgRVRIVE9PTF9HRkVDUEFSQU06XFxuMzMyNTpcXHRcXHRcXHRicmVhaztcXG4zMzI2OlxcdFxcdGRlZmF1bHQ6XFxuMzMyNzpcXHRcXHRcXHRpZiAoIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSlcXG4zMzI4OlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMzMyOTpcXHRcXHR9XFxuMzMzMDpcXHRcXG4zMzMxOlxcdFxcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcXG4zMzMyOlxcdFxcbjMzMzM6XFx0XFx0aWYgKGRldi1cXHUwMDNlZGV2LnBhcmVudClcXG4zMzM0OlxcdFxcdFxcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2LVxcdTAwM2VkZXYucGFyZW50KTtcXG4zMzM1OlxcdFxcbjMzMzY6XFx0XFx0aWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSB7XFxuMzMzNzpcXHRcXHRcXHRyYyA9IC1FTk9ERVY7XFxuMzMzODpcXHRcXHRcXHRnb3RvIG91dDtcXG4zMzM5OlxcdFxcdH1cXG4zMzQwOlxcdFxcbjMzNDE6XFx0XFx0aWYgKGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWJlZ2luKSB7XFxuMzM0MjpcXHRcXHRcXHRyYyA9IGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWJlZ2luKGRldik7XFxuMzM0MzpcXHRcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbjMzNDQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMzM0NTpcXHRcXHR9XFxuMzM0NjpcXHRcXHRvbGRfZmVhdHVyZXMgPSBkZXYtXFx1MDAzZWZlYXR1cmVzO1xcbjMzNDc6XFx0XFxuMzM0ODpcXHRcXHRzd2l0Y2ggKGV0aGNtZCkge1xcbjMzNDk6XFx0XFx0Y2FzZSBFVEhUT09MX0dTRVQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjAwLjkyNzk5MDIwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjkwNTcwOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgRVRIVE9PTF9URVNUIExvZ2ljKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYEVUSFRPT0xfVEVTVGAgaXMgYWN0dWFsbHkgKnByb2Nlc3NlZCogd2l0aGluIHRoZSBgZGV2X2V0aHRvb2xfbG9ja2VkYCBmdW5jdGlvbi4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgZXRodG9vbCBwdXp6bGUsIGFuZCBrbm93aW5nIGl0cyBleGVjdXRpb24gcGF0aCBpcyBmdW5kYW1lbnRhbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGZsb3cgaGVyZSBhbmQgZmluZCBleGFjdGx5IGhvdyB0aGlzIHNwZWNpZmljIGNvbW1hbmQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGRyaXZlcuKAmXMgb3ZlcmFsbCBldGh0b29sIGltcGxlbWVudGF0aW9uLiBMZXQncyBzdGFydCB3aXRoIHRoZSBjb2Rl4oCmIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciByb3V0aW5lcyBpdCBpbnRlcmZhY2VzIHdpdGggZm9yIGhhbmRsaW5nIHRoaXMgdGVzdCBmdW5jdGlvbi4gS25vd2luZyB0aGUgZXhhY3QgbG9jYXRpb24gaXMgaW1wb3J0YW50IGZvciBhbmFseXppbmcgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjAyLjYxODU2MzE1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxODY1MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FzZSBFVEhUT09MX1RFU1Q6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM0MTItXFx0XFx0YnJlYWs7XFxubmV0L2V0aHRvb2wvaW9jdGwuYzozNDEzOlxcdGNhc2UgRVRIVE9PTF9URVNUOlxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzQxNC1cXHRcXHRyYyA9IGV0aHRvb2xfc2VsZl90ZXN0KGRldiwgdXNlcmFkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzowMi42NjU3NTQ3OTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUwNzEwOTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoaXMgZnVuY3Rpb24gY2FsbDogYGV0aHRvb2xfc2VsZl90ZXN0KGRldiwgdXNlcmFkZHIpYC4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIFwibmV0d29yayBpbnRlcmZhY2Ugc2VsZi10ZXN0XCIgdG8gbWUsIGFuZCBteSBicmFpbiBpcyBhbHJlYWR5IHNlYXJjaGluZyBmb3IgdGhlIGltcGxlbWVudGF0aW9uLiBHaXZlbiB0aGF0IGBldGh0b29sYCBpcyBpbiB0aGUgbmFtZSwgbXkgZ3V0IHNheXMgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgYGV0aHRvb2xgIHV0aWxpdHkuIFNvLCBJIG5lZWQgdG8gZmluZCB0aGUgc291cmNlIGZvciBgZXRodG9vbF9zZWxmX3Rlc3RgLiBDb25zaWRlcmluZyB0aGUga2VybmVsIHN0cnVjdHVyZSwgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBuZXRgIHN1YnN5c3RlbSwgc28gSSdsbCBjaGVjayBgbmV0L2V0aHRvb2wvaW9jdGwuY2AgdG8gdHJhY2UgdGhlIGNhbGwuIEhvcGVmdWxseSwgSSBjYW4gZmluZCB0aGUgZGVmaW5pdGlvbiB0aGVyZSBhbmQgdW5kZXJzdGFuZCB0aGUgcGFyYW1ldGVycyBgZGV2YCBhbmQgYHVzZXJhZGRyYC4gTGV0J3Mgc2VlIGlmIHRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzowNS4xNzI4NjYwNTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjkxOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xfc2VsZl90ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuYz0yMzMzPXN0YXRpYyBpbnQgZXRodG9vbF9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTIzNDktXFxubmV0L2V0aHRvb2wvaW9jdGwuYzoyMzUwOnN0YXRpYyBpbnQgZXRodG9vbF9zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyKVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjM1MS17XFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jPTMyNzI9ZGV2X2V0aHRvb2xfbG9ja2VkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzQxMy1cXHRjYXNlIEVUSFRPT0xfVEVTVDpcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM0MTQ6XFx0XFx0cmMgPSBldGh0b29sX3NlbGZfdGVzdChkZXYsIHVzZXJhZGRyKTtcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM0MTUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjA1LjI1MDU2MzgyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDIyNDM5NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgaW5zdHJ1Y3Rpb25zLCBhcyB0aG91Z2ggdGhleSBhcmUgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBldGh0b29sIFNlbGYtVGVzdCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgaW50byB0aGUgZ3V0cyBvZiBgZXRodG9vbGAuIExldCdzIHplcm8gaW4gb24gYGV0aHRvb2xfc2VsZl90ZXN0YCBsb2NhdGVkIGluIGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIHNlbGYtdGVzdCBmdW5jdGlvbmFsaXR5IHJlc2lkZXMsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nLiBXaGF0IGtpbmQgb2YgdGVzdCB2ZWN0b3JzIGRvZXMgaXQgdXNlPyBJcyB0aGVyZSBhIGNvbXByZWhlbnNpdmUgc3RyYXRlZ3kgZm9yIGNvdmVyaW5nIGRpZmZlcmVudCBQSFkgbW9kZXMgYW5kIGxpbmsgc3BlZWRzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2VsbCBpdCBhZGhlcmVzIHRvIHRoZSBsYXRlc3Qgc3RhbmRhcmRzIGFuZCBiZXN0IHByYWN0aWNlcyBmb3IgbmV0d29yayBpbnRlcmZhY2UgdGVzdGluZy4gTGV0J3Mgc2VlIGhvdyB0aGlzIGlzIGFyY2hpdGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDk3MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjA3LjI3MzAwNjYxNloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvaW9jdGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzUwOlxcdHN0YXRpYyBpbnQgZXRodG9vbF9zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyKVxcbjIzNTE6XFx0e1xcbjIzNTI6XFx0XFx0c3RydWN0IGV0aHRvb2xfdGVzdCB0ZXN0O1xcbjIzNTM6XFx0XFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtXFx1MDAzZWV0aHRvb2xfb3BzO1xcbjIzNTQ6XFx0XFx0dTY0ICpkYXRhO1xcbjIzNTU6XFx0XFx0aW50IHJldCwgdGVzdF9sZW47XFxuMjM1NjpcXHRcXG4yMzU3OlxcdFxcdGlmICghb3BzLVxcdTAwM2VzZWxmX3Rlc3QgfHwgIW9wcy1cXHUwMDNlZ2V0X3NzZXRfY291bnQpXFxuMjM1ODpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMjM1OTpcXHRcXG4yMzYwOlxcdFxcdHRlc3RfbGVuID0gb3BzLVxcdTAwM2VnZXRfc3NldF9jb3VudChkZXYsIEVUSF9TU19URVNUKTtcXG4yMzYxOlxcdFxcdGlmICh0ZXN0X2xlbiBcXHUwMDNjIDApXFxuMjM2MjpcXHRcXHRcXHRyZXR1cm4gdGVzdF9sZW47XFxuMjM2MzpcXHRcXHRXQVJOX09OKHRlc3RfbGVuID09IDApO1xcbjIzNjQ6XFx0XFxuMjM2NTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnRlc3QsIHVzZXJhZGRyLCBzaXplb2YodGVzdCkpKVxcbjIzNjY6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjM2NzpcXHRcXG4yMzY4OlxcdFxcdHRlc3QubGVuID0gdGVzdF9sZW47XFxuMjM2OTpcXHRcXHRkYXRhID0ga2NhbGxvYyh0ZXN0X2xlbiwgc2l6ZW9mKHU2NCksIEdGUF9VU0VSKTtcXG4yMzcwOlxcdFxcdGlmICghZGF0YSlcXG4yMzcxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIzNzI6XFx0XFxuMjM3MzpcXHRcXHRuZXRpZl90ZXN0aW5nX29uKGRldik7XFxuMjM3NDpcXHRcXHRvcHMtXFx1MDAzZXNlbGZfdGVzdChkZXYsIFxcdTAwMjZ0ZXN0LCBkYXRhKTtcXG4yMzc1OlxcdFxcdG5ldGlmX3Rlc3Rpbmdfb2ZmKGRldik7XFxuMjM3NjpcXHRcXG4yMzc3OlxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMjM3ODpcXHRcXHRpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBcXHUwMDI2dGVzdCwgc2l6ZW9mKHRlc3QpKSlcXG4yMzc5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIzODA6XFx0XFx0dXNlcmFkZHIgKz0gc2l6ZW9mKHRlc3QpO1xcbjIzODE6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgZGF0YSwgYXJyYXlfc2l6ZSh0ZXN0Lmxlbiwgc2l6ZW9mKHU2NCkpKSlcXG4yMzgyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIzODM6XFx0XFx0cmV0ID0gMDtcXG4yMzg0OlxcdFxcbjIzODU6XFx0IG91dDpcXG4yMzg2OlxcdFxcdGtmcmVlKGRhdGEpO1xcbjIzODc6XFx0XFx0cmV0dXJuIHJldDtcXG4yMzg4OlxcdH1cXG4yMzg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzowNy4yNzMyNDE2NDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA0MDU1NTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBEZXRlY3RpdmUncyBNaW5kc2V0KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZCEgQmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gdGhpcyBjb2RlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGluZWFnZS4gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGNvbW1pdCBkb2VzIHRoaXMgYmVsb25nIHRvPyBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIHBhdGNoIHNlcmllcz8gTXkgdXN1YWwgZ28tdG8gd291bGQgYmUgYGdpdCBsb2dgLCBidXQgaXQgbG9va3MgbGlrZSBJIGRvbid0IGhhdmUgdGhhdCB0b29sIGF2YWlsYWJsZS4gSG1tLCBubyBwcm9ibGVtLiBMZXQncyBzZWUgaWYgSSBjYW4gcmVjb25zdHJ1Y3QgdGhlIGluZm9ybWF0aW9uLiBJIGNhbid0IGRpcmVjdGx5IGNoZWNrIHRoZSBoaXN0b3J5IHVzaW5nIGBnaXQgbG9nYC4gSWYgSSBkaWQsIEkgd291bGQgdXNlIGBnaXQgbG9nIC0xYCwgYnV0IHRoYXQncyBub3QgcG9zc2libGUgaGVyZS5cblxuUmlnaHQsIHNvLCBJIGNhbid0IHVzZSBgZ2l0IGxvZ2AgZGlyZWN0bHksIGJ1dCBsZXQncyBzZWUgaWYgdGhlcmUgaXMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjb21taXQgYXBwbGllZCB0aGUgcGF0Y2guXG5JIGNhbiBhdHRlbXB0IHRvIHZpZXcgdGhlIGNoYW5nZXMgY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIGNvbW1pdC4gSSB3b3VsZCB0eXBpY2FsbHkgcnVuIHNvbWV0aGluZyBsaWtlIGBnaXQgZGlmZiBIRUFEfjFgLCBidXQgd2l0aG91dCB0aGUgR2l0IENMSSwgdGhhdCdzIG9mZiB0aGUgdGFibGUuXG5cbkFscmlnaHQsIHRoaW5rLCB0aGluay4uLiBJICpjYW4qIHByb2JhYmx5IGdsZWFuIHNvbWUgaW5mb3JtYXRpb24gZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UgaXRzZWxmIGlmIEkgY2FuIGdldCB0byBpdC4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZW50IG9mIHRoZSBwYXRjaCBzZXJpZXMgd2lsbCBiZSBoZWxwZnVsLiBOb3csIEkgc2hvdWxkIHNoaWZ0IG15IGZvY3VzIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gY2hhbmdlZCBieSB0aGlzIHBhdGNoLlxuXG5SaWdodCwgbGV0J3MgY2hhbmdlIGdlYXJzLiBBIHByb21pc2luZyBsZWFkIGlzIHRvIHNlZSB3aGF0IGRyaXZlcnMgbWlnaHQgYmUgaW1wYWN0ZWQgYnkgdGhpcy4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoLiBJJ2xsIGdyZXAgZm9yIGAuc2VsZl90ZXN0YCB0byBzZWUgd2hpY2ggZHJpdmVycyBtaWdodCBiZSB0b3VjaGluZyB0aGF0IGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UgYW5kIHRoZSBhcmVhIGl0IGFmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODE3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6MTAuMzEzNzk5NjQzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY4NzY0MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuc2VsZl90ZXN0XFxcXHMqPVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jPTE0OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBwY25ldDMyX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3BjbmV0MzIuYy0xNTAxLVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gcGNuZXQzMl9nZXRfc3RyaW5ncyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jOjE1MDI6XFx0LnNlbGZfdGVzdFxcdFxcdD0gcGNuZXQzMl9ldGh0b29sX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3BjbmV0MzIuYy0xNTAzLVxcdC5zZXRfcGh5c19pZFxcdFxcdD0gcGNuZXQzMl9zZXRfcGh5c19pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZXRodG9vbC5jPTczNz1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHhnYmVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWV0aHRvb2wuYy03NjQtXFx0LnNldF9jaGFubmVscyA9IHhnYmVfc2V0X2NoYW5uZWxzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZXRodG9vbC5jOjc2NTpcXHQuc2VsZl90ZXN0ID0geGdiZV9zZWxmdGVzdF9ydW4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1ldGh0b29sLmMtNzY2LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FnNzF4eC5jPTU0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGFnNzF4eF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNTUzLVxcdC5nZXRfc3NldF9jb3VudFxcdFxcdFxcdD0gYWc3MXh4X2V0aHRvb2xfZ2V0X3NzZXRfY291bnQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hZzcxeHguYzo1NTQ6XFx0LnNlbGZfdGVzdFxcdFxcdFxcdD0gbmV0X3NlbGZ0ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWc3MXh4LmMtNTU1LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyLmM9NzgyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJueDJfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyLmMtNzg0NC1cXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IGJueDJfc2V0X3BhdXNlcGFyYW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jOjc4NDU6XFx0LnNlbGZfdGVzdFxcdFxcdD0gYm54Ml9zZWxmX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jLTc4NDYtXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBibngyX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jPTM2NDA9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibngyeF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNjYyLVxcdC5zZXRfcGF1c2VwYXJhbVxcdFxcdD0gYm54Mnhfc2V0X3BhdXNlcGFyYW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfZXRodG9vbC5jOjM2NjM6XFx0LnNlbGZfdGVzdFxcdFxcdD0gYm54Mnhfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2V0aHRvb2wuYy0zNjY0LVxcdC5nZXRfc3NldF9jb3VudFxcdFxcdD0gYm54MnhfZ2V0X3NzZXRfY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jPTU3Mjc9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJueHRfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jLTU3OTktXFx0LnNldF9waHlzX2lkXFx0XFx0PSBibnh0X3NldF9waHlzX2lkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTgwMDpcXHQuc2VsZl90ZXN0XFx0XFx0PSBibnh0X3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jLTU4MDEtXFx0LmdldF90c19pbmZvXFx0XFx0PSBibnh0X2dldF90c19pbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM9MTQyMjk9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0ZzNfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYy0xNDI1MC1cXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IHRnM19zZXRfcGF1c2VwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYzoxNDI1MTpcXHQuc2VsZl90ZXN0XFx0XFx0PSB0ZzNfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTE0MjUyLVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gdGczX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9ldGh0b29sLmM9MjE3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGN4Z2JfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2V0aHRvb2wuYy0yMjExLVxcdC5nZXRfcnhmaF9maWVsZHMgICA9IGN4Z2I0X2dldF9yeGZoX2ZpZWxkcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2V0aHRvb2wuYzoyMjEyOlxcdC5zZWxmX3Rlc3RcXHQgICA9IGN4Z2I0X3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2V0aHRvb2wuYy0yMjEzLVxcdC5mbGFzaF9kZXZpY2UgICAgICA9IHNldF9mbGFzaCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmM9MTQwOT1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfZXRodG9vbC5jLTE0MzMtXFx0LmZsYXNoX2RldmljZSA9IGJlX2RvX2ZsYXNoLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmM6MTQzNDpcXHQuc2VsZl90ZXN0ID0gYmVfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmMtMTQzNS1cXHQuZ2V0X3J4X3JpbmdfY291bnQgPSBiZV9nZXRfcnhfcmluZ19jb3VudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYz00NjE9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHRzbmVwX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfZXRodG9vbC5jLTQ2OS1cXHQuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYzo0NzA6XFx0LnNlbGZfdGVzdCA9IHRzbmVwX2V0aHRvb2xfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX2V0aHRvb2wuYy00NzEtXFx0LmdldF9zdHJpbmdzID0gdHNuZXBfZXRodG9vbF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTM3ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBmZWNfZW5ldF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTM4MTAtXFx0LnNldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjM4MTE6XFx0LnNlbGZfdGVzdFxcdFxcdD0gbmV0X3NlbGZ0ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTM4MTItfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2V0aHRvb2wuYz0xMjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaG5zX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZXRodG9vbC5jLTEyNTMtXFx0LmdldF9jaGFubmVscyA9IGhuc19nZXRfY2hhbm5lbHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZXRodG9vbC5jOjEyNTQ6XFx0LnNlbGZfdGVzdCA9IGhuc19uaWNfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2V0aHRvb2wuYy0xMjU1LVxcdC5nZXRfc3RyaW5ncyA9IGhuc19nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jPTIxOTA9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBobnMzX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmMtMjE5My1cXHQuY2FwX2xpbmtfbGFuZXNfc3VwcG9ydGVkID0gdHJ1ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYzoyMTk0OlxcdC5zZWxmX3Rlc3QgPSBobnMzX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYy0yMTk1LVxcdC5nZXRfZHJ2aW5mbyA9IGhuczNfZ2V0X2RydmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvaGluaWNfZXRodG9vbC5jPTE3Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBoaW5pY19ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9oaW5pY19ldGh0b29sLmMtMTc1OS1cXHQuZ2V0X3N0cmluZ3MgPSBoaW5pY19nZXRfc3RyaW5ncyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvaGluaWNfZXRodG9vbC5jOjE3NjA6XFx0LnNlbGZfdGVzdCA9IGhpbmljX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvaGluaWNfZXRodG9vbC5jLTE3NjEtXFx0LnNldF9waHlzX2lkID0gaGluaWNfc2V0X3BoeXNfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjczNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjc1MC1cXHQuc2V0X3JpbmdwYXJhbVxcdFxcdD0gZTEwMF9zZXRfcmluZ3BhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYzoyNzUxOlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGUxMDBfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yNzUyLVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gZTEwMF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX2V0aHRvb2wuYz0xODY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMDBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9ldGh0b29sLmMtMTg4MS1cXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IGUxMDAwX3NldF9wYXVzZXBhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX2V0aHRvb2wuYzoxODgyOlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGUxMDAwX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9ldGh0b29sLmMtMTg4My1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGUxMDAwX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL2V0aHRvb2wuYz0yMzYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMDBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvZXRodG9vbC5jLTIzNzgtXFx0LnNldF9wYXVzZXBhcmFtXFx0XFx0PSBlMTAwMF9zZXRfcGF1c2VwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvZXRodG9vbC5jOjIzNzk6XFx0LnNlbGZfdGVzdFxcdFxcdD0gZTEwMDBfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9ldGh0b29sLmMtMjM4MC1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGUxMDAwX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfZXRodG9vbC5jPTExMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBmbTEwa19ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2V0aHRvb2wuYy0xMTU0LVxcdC5nZXRfcmVnc19sZW4gICAgICAgICAgID0gZm0xMGtfZ2V0X3JlZ3NfbGVuLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX2V0aHRvb2wuYzoxMTU1OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGZtMTBrX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19ldGh0b29sLmMtMTE1Ni1cXHQuZ2V0X3ByaXZfZmxhZ3NcXHRcXHQ9IGZtMTBrX2dldF9wcml2X2ZsYWdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYz01Nzg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaTQwZV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMtNTgxNC1cXHQuZ2V0X3J4X3JpbmdfY291bnRcXHQ9IGk0MGVfZ2V0X3J4X3JpbmdfY291bnQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYzo1ODE1OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGk0MGVfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMtNTgxNi1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGk0MGVfZ2V0X3N0cmluZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYz00ODI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWNlX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMtNDg0Ny1cXHQuc2V0X21zZ2xldmVsXFx0XFx0PSBpY2Vfc2V0X21zZ2xldmVsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jOjQ4NDg6XFx0LnNlbGZfdGVzdFxcdFxcdD0gaWNlX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYy00ODQ5LVxcdC5nZXRfbGlua1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jPTM0ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpZ2JfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0zNTAwLVxcdC5zZXRfcGF1c2VwYXJhbVxcdFxcdD0gaWdiX3NldF9wYXVzZXBhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfZXRodG9vbC5jOjM1MDE6XFx0LnNlbGZfdGVzdFxcdFxcdD0gaWdiX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX2V0aHRvb2wuYy0zNTAyLVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gaWdiX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvZXRodG9vbC5jPTQzND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlnYnZmX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvZXRodG9vbC5jLTQ1MS1cXHQuc2V0X3BhdXNlcGFyYW1cXHRcXHQ9IGlnYnZmX3NldF9wYXVzZXBhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL2V0aHRvb2wuYzo0NTI6XFx0LnNlbGZfdGVzdFxcdFxcdD0gaWdidmZfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL2V0aHRvb2wuYy00NTMtXFx0LmdldF9zc2V0X2NvdW50XFx0XFx0PSBpZ2J2Zl9nZXRfc3NldF9jb3VudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfZXRodG9vbC5jPTIyNjI9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpZ2NfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX2V0aHRvb2wuYy0yMzAyLVxcdC5zZXRfbGlua19rc2V0dGluZ3NcXHQ9IGlnY19ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX2V0aHRvb2wuYzoyMzAzOlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGlnY19ldGh0b29sX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX2V0aHRvb2wuYy0yMzA0LVxcdC5nZXRfbW1cXHRcXHRcXHQ9IGlnY19ldGh0b29sX2dldF9tbSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYz0zODYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaXhnYmVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmMtMzg4MC1cXHQuc2V0X21zZ2xldmVsICAgICAgICAgICA9IGl4Z2JlX3NldF9tc2dsZXZlbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmM6Mzg4MTpcXHQuc2VsZl90ZXN0ICAgICAgICAgICAgICA9IGl4Z2JlX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9ldGh0b29sLmMtMzg4Mi1cXHQuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IGl4Z2JlX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jPTM5MTA9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpeGdiZV9ldGh0b29sX29wc19lNjEwID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jLTM5MjktXFx0LnNldF9tc2dsZXZlbCAgICAgICAgICAgPSBpeGdiZV9zZXRfbXNnbGV2ZWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jOjM5MzA6XFx0LnNlbGZfdGVzdCAgICAgICAgICAgICAgPSBpeGdiZV9kaWFnX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfZXRodG9vbC5jLTM5MzEtXFx0LmdldF9zdHJpbmdzICAgICAgICAgICAgPSBpeGdiZV9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jPTk2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JldmZfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2V0aHRvb2wuYy05NzUtXFx0LnNldF9tc2dsZXZlbFxcdFxcdD0gaXhnYmV2Zl9zZXRfbXNnbGV2ZWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9ldGh0b29sLmM6OTc2OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGl4Z2JldmZfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvZXRodG9vbC5jLTk3Ny1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGl4Z2JldmZfZ2V0X3NzZXRfY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2V0aHRvb2wuYz0yMTM0PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg0X2VuX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9ldGh0b29sLmMtMjE0NS1cXHQuZ2V0X2V0aHRvb2xfc3RhdHMgPSBtbHg0X2VuX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fZXRodG9vbC5jOjIxNDY6XFx0LnNlbGZfdGVzdCA9IG1seDRfZW5fc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fZXRodG9vbC5jLTIxNDctXFx0LnNldF9waHlzX2lkID0gbWx4NF9lbl9zZXRfcGh5c19pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM9MjcxOD1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3NzctXFx0LnNldF9wcml2X2ZsYWdzICAgID0gbWx4NWVfc2V0X3ByaXZfZmxhZ3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYzoyNzc4OlxcdC5zZWxmX3Rlc3QgICAgICAgICA9IG1seDVlX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3NzktXFx0LmdldF9mZWNfc3RhdHMgICAgID0gbWx4NWVfZ2V0X2ZlY19zdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jPTIwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBmYm5pY19ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwNDEtXFx0LnNldF9wYXVzZXBhcmFtXFx0XFx0XFx0PSBmYm5pY19waHlsaW5rX3NldF9wYXVzZXBhcmFtLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwNDI6XFx0LnNlbGZfdGVzdFxcdFxcdFxcdD0gZmJuaWNfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwNDMtXFx0LmdldF9zdHJpbmdzXFx0XFx0XFx0PSBmYm5pY19nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmM9MjUwND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5mcF9uZXRfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jLTI1MTItXFx0LnNldF9yaW5ncGFyYW1cXHRcXHQ9IG5mcF9uZXRfc2V0X3JpbmdwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jOjI1MTM6XFx0LnNlbGZfdGVzdFxcdFxcdD0gbmZwX25ldF9zZWxmX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2V0aHRvb2wuYy0yNTE0LVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gbmZwX25ldF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmM9MjU1MD1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmZwX3BvcnRfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL25mcF9uZXRfZXRodG9vbC5jLTI1NTUtXFx0LmdldF9ldGh0b29sX3N0YXRzXFx0PSBuZnBfcG9ydF9nZXRfc3RhdHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9uZnBfbmV0X2V0aHRvb2wuYzoyNTU2OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IG5mcF9uZXRfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvbmZwX25ldF9ldGh0b29sLmMtMjU1Ny1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IG5mcF9wb3J0X2dldF9zc2V0X2NvdW50LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnZpZGlhL2ZvcmNlZGV0aC5jPTUzNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtNTM1NS1cXHQuZ2V0X3NzZXRfY291bnQgPSBudl9nZXRfc3NldF9jb3VudCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM6NTM1NjpcXHQuc2VsZl90ZXN0ID0gbnZfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9mb3JjZWRldGguYy01MzU3LVxcdC5nZXRfdHNfaW5mbyA9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jPTkxOT1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0eGVuX25pY19ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMtOTMzLVxcdC5zZXRfd29sID0gbmV0eGVuX25pY19zZXRfd29sLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmM6OTM0OlxcdC5zZWxmX3Rlc3QgPSBuZXR4ZW5fbmljX2RpYWdfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jLTkzNS1cXHQuZ2V0X3N0cmluZ3MgPSBuZXR4ZW5fbmljX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZGUvcWVkZV9ldGh0b29sLmM9MjI2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHFlZGVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkZS9xZWRlX2V0aHRvb2wuYy0yMzA1LVxcdC5zZXRfY2hhbm5lbHNcXHRcXHRcXHQ9IHFlZGVfc2V0X2NoYW5uZWxzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWRlL3FlZGVfZXRodG9vbC5jOjIzMDY6XFx0LnNlbGZfdGVzdFxcdFxcdFxcdD0gcWVkZV9zZWxmX3Rlc3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZGUvcWVkZV9ldGh0b29sLmMtMjMwNy1cXHQuZ2V0X21vZHVsZV9pbmZvXFx0XFx0PSBxZWRlX2dldF9tb2R1bGVfaW5mbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYz0xODIzPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBxbGNuaWNfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19ldGh0b29sLmMtMTgzOS1cXHQuc2V0X3dvbCA9IHFsY25pY19zZXRfd29sLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYzoxODQwOlxcdC5zZWxmX3Rlc3QgPSBxbGNuaWNfZGlhZ190ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYy0xODQxLVxcdC5nZXRfc3RyaW5ncyA9IHFsY25pY19nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmM9Mzk9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVmMTAwX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAwX2V0aHRvb2wuYy00NS1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGVmeF9ldGh0b29sX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmM6NDY6XFx0LnNlbGZfdGVzdFxcdFxcdD0gZWZ4X2V0aHRvb2xfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwMF9ldGh0b29sLmMtNDctXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBlZnhfZXRodG9vbF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9ldGh0b29sLmM9MjQwPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlZnhfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZXRodG9vbC5jLTI1Ni1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGVmeF9ldGh0b29sX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9ldGh0b29sLmM6MjU3OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGVmeF9ldGh0b29sX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZXRodG9vbC5jLTI1OC1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGVmeF9ldGh0b29sX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9ldGh0b29sLmM9MTMyNz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZWY0X2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9ldGh0b29sLmMtMTM0NC1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGVmNF9ldGh0b29sX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vZXRodG9vbC5jOjEzNDU6XFx0LnNlbGZfdGVzdFxcdFxcdD0gZWY0X2V0aHRvb2xfc2VsZl90ZXN0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vZXRodG9vbC5jLTEzNDYtXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBlZjRfZXRodG9vbF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9ldGh0b29sLmM9MjM4PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlZnhfc2llbmFfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZXRodG9vbC5jLTI1NC1cXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGVmeF9zaWVuYV9ldGh0b29sX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9ldGh0b29sLmM6MjU1OlxcdC5zZWxmX3Rlc3RcXHRcXHQ9IGVmeF9zaWVuYV9ldGh0b29sX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvZXRodG9vbC5jLTI1Ni1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGVmeF9zaWVuYV9ldGh0b29sX2dldF9zdHJpbmdzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0xMDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3RtbWFjX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTA4LVxcdC5zZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19zZXRfcGF1c2VwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jOjExMDk6XFx0LnNlbGZfdGVzdCA9IHN0bW1hY19zZWxmdGVzdF9ydW4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTEwLVxcdC5nZXRfZXRodG9vbF9zdGF0cyA9IHN0bW1hY19nZXRfZXRodG9vbF9zdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz0zMTI9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheDg4NzcyX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTMyNC1cXHQuc2V0X2xpbmtfa3NldHRpbmdzXFx0PSBwaHlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjMyNTpcXHQuc2VsZl90ZXN0XFx0XFx0PSBuZXRfc2VsZnRlc3QsXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTMyNi1cXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGF4ODg3NzJfZXRodG9vbF9nZXRfc3RyaW5ncyxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MTkxOD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGxhbjc4eHhfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE5MjgtXFx0LmdldF9zc2V0X2NvdW50ID0gbGFuNzh4eF9nZXRfc3NldF9jb3VudCxcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjE5Mjk6XFx0LnNlbGZfdGVzdFxcdD0gbmV0X3NlbGZ0ZXN0LFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTkzMC1cXHQuZ2V0X3N0cmluZ3NcXHQ9IGxhbjc4eHhfZ2V0X3N0cmluZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz04MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzbXNjOTV4eF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTg0OC1cXHQuZ2V0X3RzX2luZm9cXHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6ODQ5OlxcdC5zZWxmX3Rlc3RcXHQ9IG5ldF9zZWxmdGVzdCxcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy04NTAtXFx0LmdldF9zdHJpbmdzXFx0PSBzbXNjOTV4eF9ldGh0b29sX2dldF9zdHJpbmdzLFxcbi0tXFxubmV0L2RzYS91c2VyLmM9MjQ5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGRzYV91c2VyX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxubmV0L2RzYS91c2VyLmMtMjUyMC1cXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGRzYV91c2VyX2dldF90c19pbmZvLFxcbm5ldC9kc2EvdXNlci5jOjI1MjE6XFx0LnNlbGZfdGVzdFxcdFxcdD0gZHNhX3VzZXJfbmV0X3NlbGZ0ZXN0LFxcbm5ldC9kc2EvdXNlci5jLTI1MjItXFx0LmdldF9tbVxcdFxcdFxcdD0gZHNhX3VzZXJfZ2V0X21tLFxcbi0tXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9wYXJhbGxlbC1wZXJmLnB5PTI0PWNsYXNzIFZlcmJvc2l0eSgpOlxcbi0tXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9wYXJhbGxlbC1wZXJmLnB5LTI5LVxcdFxcdHNlbGYuZGVidWcgICAgID0gZGVidWdcXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3BhcmFsbGVsLXBlcmYucHk6MzA6XFx0XFx0c2VsZi5zZWxmX3Rlc3QgPSBUcnVlXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9wYXJhbGxlbC1wZXJmLnB5LTMxLVxcdFxcdGlmIHNlbGYuZGVidWc6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjEyLjA4MjU3MjI0MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTA1NjE2MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgRmxhZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBmbGFnLCBhbmQgSSdtIHdvbmRlcmluZyB3aHkgaXQncyBldmVuIHRoZXJlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBiYXNpY3MsIEknbGwgY2hlY2sgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZDogYWhhLCBpdCdzIGp1c3QgYSBiaXQgZmxhZywgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBOb3csIGxldCdzIGxvb2sgYXQgd2hlcmUgdGhpcyBpcyB1c2VkLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gSSBzZWUgdGhlIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdG8gYmUgY2hlY2tpbmcgaWYgYSBwYXJ0aWN1bGFyIGBldGhjbWRgIG5lZWRzIHRoZSBSVE5MIChSb3V0aW5nIFRhYmxlIE5ldGxpbmspIGxvY2suIEl0IG1ha2VzIHNlbnNlIHRoYXQgdGVzdGluZyBtaWdodCBuZWVkIGl0LCB3aGljaCBpcyBjb25maXJtZWQgaGVyZSwgZm9yIGBFVEhUT09MX1RFU1RgLiBCdXQgc3RpbGwsIEkgbmVlZCBzb21lIG1vcmUgY29udGV4dC4gSSdtIG5vdCBmYW1pbGlhciB3aXRoIHdoeSB0aGlzIGZsYWcgd2FzIGV4cGxpY2l0bHkgYWRkZWQsIGFuZCBpZiBpdCdzIG5ldywgb3IgYW4gb2xkIGNvbmNlcHQgdGhhdCBnb3QgZXhwbGljaXRseSBkb2N1bWVudGVkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGdpdCBoaXN0b3J5LCBvciBhdCBsZWFzdCBncmVwIGZvciBvdGhlciB1c2VzIG9mIGBFVEhUT09MX09QX05FRURTX1JUTkxfYCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gVGhlIG5hbWluZyBjb252ZW50aW9uIGhpbnRzIHRoZXJlIG1pZ2h0IGJlIG90aGVyIHJlbGF0ZWQgZmxhZ3MsIGFuZCBzZWVpbmcgdGhvc2Ugb3RoZXIgb3B0aW9ucyB3b3VsZCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHRzIGludG8gdGhlIGRlc2lnbiBkZWNpc2lvbnMgaGVyZS4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIGNoZWNrIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MjIxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjE0Ljk4ODE5MDk4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1Mjc1MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVUSFRPT0xfT1BfTkVFRFNfUlROTF9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldi1mZWF0dXJlcy5yc3Q9ODA9ZXRodG9vbCBjYWxsYmFja3MgdGhhdCBtYXkgZW5kIHVwIGludm9raW5nIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoKSBtdXN0XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldi1mZWF0dXJlcy5yc3Q6ODE6b3B0IGJhY2sgaW50byBydG5sX2xvY2sgYnkgc2V0dGluZyB0aGUgbWF0Y2hpbmcgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2LWZlYXR1cmVzLnJzdC04Mi1iaXQgaW4gYGBldGh0b29sX29wczo6b3BfbmVlZHNfcnRubGBgLiBUaGUgZXRodG9vbCBjb3JlIHRoZW4ga2VlcHNcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0zNzk9YXBwcm9wcmlhdGUgYml0cyBpbiBgYGV0aHRvb2xfb3BzOjpvcF9uZWVkc19ydG5sYGAgKGlmIHRoZSBuZWNlc3NhcnlcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6MzgwOmBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgYCBiaXQgZG9lc24ndCBleGlzdCwganVzdCBhZGQgaXQpLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdC0zODEtQ29tbW9ubHkgdXNlZCBjb3JlIGhlbHBlcnMgd2hpY2ggZm9yY2UgZHJpdmVycyB0byBzZWxlY3RpdmVseSBvcHQtaW4gdG9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM9NTcyNz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54dF9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczMi1cXHQucnhmaF9wcml2X3NpemVcXHRcXHRcXHQ9IHNpemVvZihzdHJ1Y3QgYm54dF9yc3NfY3R4KSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jOjU3MzM6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczNDpcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jOjU3MzU6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jOjU3MzY6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jOjU3Mzc6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfZXRodG9vbC5jLTU3MzgtXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz05ODI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGd2ZV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy05ODUtXFx0XFx0XFx0XFx0IEVUSFRPT0xfUklOR19VU0VfUlhfQlVGX0xFTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg2OlxcdC5vcF9uZWVkc19ydG5sID0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjk4NzpcXHRcXHRcXHQgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5ODg6XFx0XFx0XFx0IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTg5LVxcdC5nZXRfZHJ2aW5mbyA9IGd2ZV9nZXRfZHJ2aW5mbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmM9MTg1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlhdmZfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jLTE4NTctXFx0LnN1cHBvcnRlZF9pbnB1dF94ZnJtXFx0PSBSWEhfWEZSTV9TWU1fWE9SLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmM6MTg1ODpcXHQub3BfbmVlZHNfcnRubFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmMtMTg1OS1cXHQuZ2V0X2RydmluZm9cXHRcXHQ9IGlhdmZfZ2V0X2RydmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jPTI3MTg9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVlX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYy0yNzIyLVxcdC5yeGZoX21heF9udW1fY29udGV4dHNcXHQ9IE1MWDVFX01BWF9OVU1fUlNTLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM6MjcyMzpcXHQub3BfbmVlZHNfcnRubFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYzoyNzI0OlxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM6MjcyNTpcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jOjI3MjY6XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYy0yNzI3LVxcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM9NDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWVfcmVwX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTQxOS1cXHRcXHRcXHRcXHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYzo0MjA6XFx0Lm9wX25lZWRzX3J0bmxcXHQgICA9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYzo0MjE6XFx0XFx0XFx0ICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jOjQyMjpcXHRcXHRcXHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtNDIzLVxcdC5nZXRfZHJ2aW5mb1xcdCAgID0gbWx4NWVfcmVwX2dldF9kcnZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYz0yODQ9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVpX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYy0yODctXFx0XFx0XFx0XFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jOjI4ODpcXHQub3BfbmVlZHNfcnRubFxcdCAgICA9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9ldGh0b29sLmM6Mjg5OlxcdFxcdFxcdCAgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jOjI5MDpcXHRcXHRcXHQgICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYy0yOTEtXFx0LmdldF9kcnZpbmZvICAgICAgICA9IG1seDVpX2dldF9kcnZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYz0zMTI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVpX3BrZXlfZXRodG9vbF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYzozMTM6XFx0Lm9wX25lZWRzX3J0bmxcXHQgICAgPSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYy0zMTQtXFx0LmdldF9kcnZpbmZvICAgICAgICA9IG1seDVpX2dldF9kcnZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fZXRodG9vbC5jPTEyNjM9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seHN3X3NwX3BvcnRfZXRodG9vbF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fZXRodG9vbC5jLTEyNjQtXFx0LmNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmM6MTI2NTpcXHQub3BfbmVlZHNfcnRubFxcdFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmM6MTI2NjpcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmMtMTI2Ny1cXHQuZ2V0X2RydmluZm9cXHRcXHRcXHQ9IG1seHN3X3NwX3BvcnRfZ2V0X2RydmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDIyLVxcdC5yeGZoX21heF9udW1fY29udGV4dHNcXHRcXHQ9IEZCTklDX1JQQ19SU1NfVEJMX0NPVU5ULFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjM6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1MgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjQ6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR1BBVVNFUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjU6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjY6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoyMDI3OlxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjg6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjk6XFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDMwLVxcdC5nZXRfZHJ2aW5mb1xcdFxcdFxcdD0gZmJuaWNfZ2V0X2RydmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYz04NjM9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1hbmFfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYy04NzAtXFx0XFx0XFx0XFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRV9UWCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYzo4NzE6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jOjg3MjpcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYzo4NzM6XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmM6ODc0OlxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jLTg3NS1cXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IG1hbmFfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jPTIwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5zaW1fZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jLTIxMS1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfUklOR19VU0VfSERTX1RIUlMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYzoyMTI6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYy0yMTMtXFx0LmdldF9wYXVzZV9zdGF0c1xcdCAgICAgICAgPSBuc2ltX2dldF9wYXVzZV9zdGF0cyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTkyMz1zdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05MzctICovXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTM4OiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HU1xcdEJJVCgwKVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjkzOTojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTXFx0XFx0QklUKDEpXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTQwOiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU1cXHRCSVQoMilcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDE6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTXFx0XFx0QklUKDMpXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTQyOiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDT0FMRVNDRVxcdFxcdEJJVCg0KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0MzojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTVxcdEJJVCg1KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0NDojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTVxcdEJJVCg2KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjk0NTojZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1NcXHRcXHRCSVQoNylcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDY6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTktcXHRcXHRCSVQoOClcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDc6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVFxcdFxcdEJJVCg5KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk0OC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk3NC0gKiBAc3VwcG9ydGVkX2h3dHN0YW1wX3F1YWxpZmllcnM6IGJpdGZpZWxkIG9mIHN1cHBvcnRlZCBod3RzdGFtcCBxdWFsaWZpZXIuXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTc1OiAqIEBvcF9uZWVkc19ydG5sOiBtYXNrIG9mICVFVEhUT09MX09QX05FRURTX1JUTkxfKiBiaXRzLlxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk3Ni0gKlxcdEZvciB1c2Ugd2l0aCBvcHMtbG9ja2VkIGRyaXZlcnMgKGlnbm9yZWQgb3RoZXJ3aXNlKS4gU2VsZWN0cyB3aGljaFxcbi0tXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTE5Ni0gKiBgYHJ0bmxfbG9ja2BgIGlzIGFkZGl0aW9uYWxseSBoZWxkIG9ubHkgZm9yIGNhbGxiYWNrcyBmb3Igd2hpY2hcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDoxMTk3OiAqIHRoZSBkcml2ZXIgb3B0cyBpbiB2aWEgdGhlIG1hdGNoaW5nIGBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgYCBiaXRcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0xMTk4LSAqIGluIEBvcF9uZWVkc19ydG5sLlxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmg9OTI9ZXRodG9vbF9ubF9tc2dfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBjbWQpXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDAtXFx0Y2FzZSBFVEhUT09MX01TR19MSU5LTU9ERVNfU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwMTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDItXFx0Y2FzZSBFVEhUT09MX01TR19QUklWRkxBR1NfU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwMzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1M7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTA0LVxcdGNhc2UgRVRIVE9PTF9NU0dfUklOR1NfU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwNTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU07XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTA2LVxcdGNhc2UgRVRIVE9PTF9NU0dfQ0hBTk5FTFNfU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwNzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDgtXFx0Y2FzZSBFVEhUT09MX01TR19DT0FMRVNDRV9TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTA5OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTExMC1cXHRjYXNlIEVUSFRPT0xfTVNHX1BBVVNFX0dFVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTE6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTItXFx0Y2FzZSBFVEhUT09MX01TR19QQVVTRV9TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTEzOlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU07XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE0LVxcdGNhc2UgRVRIVE9PTF9NU0dfUlNTX1NFVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTU6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE2LVxcdGNhc2UgRVRIVE9PTF9NU0dfTElOS1NUQVRFX0dFVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTc6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTgtXFx0Y2FzZSBFVEhUT09MX01TR19UU0NPTkZJR19HRVQ6XFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaD0xMzg9ZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBldGhjbWQpXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNDYtXFx0Y2FzZSBFVEhUT09MX1NTRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTQ3OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE0OC1cXHRjYXNlIEVUSFRPT0xfU1BGTEFHUzpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNDk6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1MC1cXHRjYXNlIEVUSFRPT0xfU1JJTkdQQVJBTTpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTE6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1Mi1cXHRjYXNlIEVUSFRPT0xfU0NIQU5ORUxTOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1MzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTQtXFx0Y2FzZSBFVEhUT09MX1NDT0FMRVNDRTpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTU6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0U7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTU2LVxcdGNhc2UgRVRIVE9PTF9HUEFVU0VQQVJBTTpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTc6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTgtXFx0Y2FzZSBFVEhUT09MX1NQQVVTRVBBUkFNOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1OTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2MC1cXHRjYXNlIEVUSFRPT0xfU1JTU0g6XFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjItXFx0Y2FzZSBFVEhUT09MX1NSWEZISU5ESVI6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTYzOlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2NC1cXHRjYXNlIEVUSFRPT0xfR0xJTks6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTY1OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTks7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTY2LVxcdGNhc2UgRVRIVE9PTF9URVNUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2NzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTY4LVxcdH1cXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MzI3Mj1kZXZfZXRodG9vbF9sb2NrZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTkwLSAqIERyaXZlci1kZWNpZGVkIFNFVCBjb21tYW5kcyB0aGF0IG1heSBjaGFpbiBpbnRvIHJ0bmwtb25seSBoZWxwZXJzIGFyZVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzU5MTogKiBjb3ZlcmVkIGJ5IGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCgpL0VUSFRPT0xfT1BfTkVFRFNfUlROTF8qLlxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzU5Mi0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6MTYuNDQzNDc2Mzg4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxNjg5OTQ3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5kZXJzdGFuZGluZyB0aGUgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qYCBGbGFnIGluIHRoZSBMaW51eCBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gbWV0aWN1bG91c2x5LiBNeSBmb2N1cyBpcyBvbiBob3cgdGhpcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgIGZsYWcgb3BlcmF0ZXMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy5cblxuRnJvbSB0aGUgY29kZSwgaXQncyBjbGVhciB0aGF0IHRoaXMgbWFzaywgc3BlY2lmaWNhbGx5IGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCwgZGljdGF0ZXMgd2hpY2ggZXRodG9vbCBjYWxsYmFja3MgcmVxdWlyZSB0aGUgYHJ0bmxfbG9ja2AgaGVsZCBmb3IgZXhlY3V0aW9uLiBJIGFscmVhZHkga25vdyB0aGlzIGFyZWEgcXVpdGUgd2VsbC4gSGlzdG9yaWNhbGx5LCBhbGwgZXRodG9vbCBvcGVyYXRpb25zIHdlcmUgaW5oZXJlbnRseSBwcm90ZWN0ZWQgYnkgYHJ0bmxfbG9jaygpYC4gVGhlIGFyY2hpdGVjdHVyZSBoYXMgZXZvbHZlZCwgYW5kIG5vdyB3ZSBoYXZlIFwib3BzLWxvY2tlZFwiIGRyaXZlcnMsIHdoaWNoIHVzZSBgbmV0ZGV2X2xvY2soZGV2KWAgZm9yIGNvbmN1cnJlbmN5IGNvbnRyb2wgaW5zdGVhZC4gSSdtIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZSBhbmQgdGhlIHBlcmZvcm1hbmNlIGdhaW5zIGl0IGNhbiBwcm92aWRlIGluIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcy5cblxuSG93ZXZlciwgYSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHNvbWUgb3BlcmF0aW9ucyBzdGlsbCAqbmVlZCogYHJ0bmxfbG9ja2AsIGV2ZW4gd2l0aGluIGFuIG9wcy1sb2NrZWQgY29udGV4dC4gVGhpcyBpcyB3aGVyZSBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgIGNvbWVzIGludG8gcGxheS4gRm9yIGluc3RhbmNlLCBpZiBhbiBldGh0b29sIGNhbGxiYWNrLCBsaWtlIGBzZWxmX3Rlc3RgLCBpbnZva2VzIGBuZXRpZl9vcGVuKClgIG9yIGBuZXRpZl9jbG9zZSgpYCwgd2hpY2ggYXJlIGBydG5sX2xvY2tgIHByb3RlY3RlZCwgb3IgY2FsbHMgb3RoZXIgZnVuY3Rpb25zIHRoYXQgcmVseSBvbiB0aGF0IGxvY2ssIHRoZSBkcml2ZXIgbmVlZHMgdG8gc2lnbmFsIHRoaXMuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgYml0LCBzdWNoIGFzIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdpdGhpbiBgb3BzLVx1MDAzZW9wX25lZWRzX3J0bmxgLlxuXG5Ob3csIGhvdyBkb2VzIHRoaXMgbWFuaWZlc3QgaW4gdGhlIGtlcm5lbCBjb2RlPyBJbiBgX19kZXZfZXRodG9vbCgpYCwgdGhlIGBuZWVkX3J0bmxgIHZhcmlhYmxlIGRldGVybWluZXMgd2hldGhlciBgcnRubF9sb2NrKClgIGlzIGFjcXVpcmVkLiBUaGUgbG9naWMgc2hvd3MgdGhhdCBmb3IgKm9yZGluYXJ5KiBkcml2ZXJz4oCUdGhvc2UgdGhhdCBkb24ndCB1c2UgYG5ldGRldl9uZWVkX29wc19sb2NrKGRldilg4oCUYG5lZWRfcnRubGAgaXMgYWx3YXlzIGB0cnVlYC4gVGhpcyBtZWFucyB0aGV5IGFsd2F5cyB0YWtlIHRoZSBgcnRubF9sb2NrYC5cblxuQ29udmVyc2VseSwgZm9yICpvcHMtbG9ja2VkKiBkcml2ZXJzLCBgbmVlZF9ydG5sYCBoaW5nZXMgb24gYSBmZXcgY29uZGl0aW9uczogaWYgYGV0aHRvb2xfY21kX2NoYW5nZXNfZmVhdHVyZXMoZXRoY21kKWAgaXMgdHJ1ZSwgb3IgaWYgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZClgIGlzIHRydWUsIG9yIGlmIGAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgaXMgdHJ1ZSAod2hpY2ggbWVhbnMgdGhhdCB0aGUgZGV2aWNlIGlzIG5vdCBvcHMtbG9ja2VkKSAtIG9yIGlmIHRoZSByZWxldmFudCBiaXRzIGFyZSBzZXQuIFNvIHRoZSByZWxldmFudCBjYXNlIGZvciBteSBwdXJwb3NlcyBpcywgYW4gb3BzLWxvY2tlZCBkcml2ZXIgY2FuIHN0aWxsIHJlcXVlc3QgYHJ0bmxfbG9ja2AgYnkgc2V0dGluZyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlYmFzZSwgSSBzZWUgdGhhdCBvbmx5IGBibnh0YCBhbmQgYGZibmljYCBzZXQgdGhpcyBiaXQhIFRoaXMgaXMgZmFzY2luYXRpbmcgLSB0aGV5J3JlIGV4cGxpY2l0bHkgaW5kaWNhdGluZyB0aGF0IHNwZWNpZmljIGV0aHRvb2wgb3BlcmF0aW9ucyByZXF1aXJlIHRoZSBgcnRubF9sb2NrYC4gSSBub3cgbmVlZCB0byBjbGFyaWZ5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBibnh0YCBhY3R1YWxseSB1c2VzIGBuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpYC4gSSBtdXN0IGNvbmZpcm0gd2hldGhlciBgYm54dGAgc2V0cyBgcmVxdWVzdF9vcHNfbG9ja2Agb3IgYHF1ZXVlX21nbXRfb3BzYCBhdCBkZXZpY2UgcmVnaXN0cmF0aW9uIHRpbWUuIFRoaXMgaXMgY3JpdGljYWwgdG8gdGhlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDMzMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzoyMS42MTI0Nzg3MzVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODcxODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcXVlc3Rfb3BzX2xvY2t8cXVldWVfbWdtdF9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjYxNj1zdGF0aWMgaW50IGJueHRfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY2NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY2NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWVfbWdtdF9vcHMgYm54dF9xdWV1ZV9tZ210X29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjY2NS1cXHQubmRvX3F1ZXVlX21lbV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGJueHRfcnhfcmluZ19pbmZvKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2Njc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE2Njc1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGJueHRfcXVldWVfbWdtdF9vcHNfdW5zdXBwID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2Njc2LVxcdC5uZG9fZGVmYXVsdF9xY2ZnXFx0PSBibnh0X3F1ZXVlX2RlZmF1bHRfcWNmZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE3MTE0PXN0YXRpYyBpbnQgYm54dF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MzU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MzU5OlxcdGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2Ym54dF9xdWV1ZV9tZ210X29wc191bnN1cHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNjAtXFx0aWYgKEJOWFRfU1VQUE9SVFNfUVVFVUVfQVBJKGJwKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzM2MTpcXHRcXHRkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXFx1MDAyNmJueHRfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNjItXFx0ZGV2LVxcdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzoyMS42NjIzNTcyMjdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM5ODU1Nzc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEcml2ZXIgTG9ja2luZyBSZXF1aXJlbWVudHMqKlxuXG5SaWdodCwgc28sIHRoZSBgYm54dGAgZHJpdmVyIGV4cG9zZXMgYGRldi1cdTAwM2VxdWV1ZV9tZ210X29wc2AsIHdoaWNoIG1lYW5zIHRoYXQgYG5ldGRldl9uZWVkX29wc19sb2NrYCBpcyBkZWZpbml0ZWx5IHRydWUgZm9yIGl0LiBTdGFuZGFyZCBzdHVmZiwgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBOb3csIHdoYXQgYWJvdXQgdGhlIGBmYm5pY2AgZHJpdmVyPyBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBmYm5pY2AgdG8gc2VlIGlmIGl0IGZvbGxvd3MgdGhlIHNhbWUgcGF0dGVybiBvciBpZiB0aGVyZSdzIHNvbWV0aGluZyBkaWZmZXJlbnQgaW4gaXRzIGFyY2hpdGVjdHVyZSB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB3aGV0aGVyIGEgbG9ja2luZyBtZWNoYW5pc20gaXMgcmVxdWlyZWQgZm9yIGl0cyBvcGVyYXRpb25zLiBOZWVkIHRvIGRldGVybWluZSBpZiBpdCBoYXMgdGhvc2Ugc2ltaWxhciBxdWV1ZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgdGhhdCB3b3VsZCB0cmlnZ2VyIHRoZSBuZWVkIGZvciBhIGxvY2suIFRpbWUgdG8gZGlnIGludG8gdGhlIGBmYm5pY2AgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxNjMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzoyNC4wNjA5MTg5MzRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjczNzcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXF1ZXN0X29wc19sb2NrfHF1ZXVlX21nbXRfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYz03NDY9c3RydWN0IG5ldF9kZXZpY2UgKmZibmljX25ldGRldl9hbGxvYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTc2MC1cXHRuZXRkZXYtXFx1MDAzZXN0YXRfb3BzID0gXFx1MDAyNmZibmljX3N0YXRfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM6NzYxOlxcdG5ldGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2ZmJuaWNfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYy03NjItXFx0bmV0ZGV2LVxcdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM9MjkyOT1zdGF0aWMgaW50IGZibmljX3F1ZXVlX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcW1lbSwgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jLTI5NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM6Mjk3MDpjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGZibmljX3F1ZXVlX21nbXRfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jLTI5NzEtXFx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBmYm5pY19xX3RyaWFkKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5oPTE1MD1zdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3Ige1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmgtMTYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5oOjE2MzpleHRlcm4gY29uc3Qgc3RydWN0IG5ldGRldl9xdWV1ZV9tZ210X29wcyBmYm5pY19xdWV1ZV9tZ210X29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3R4cnguaC0xNjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjI0Ljg4NzY2NjM0MloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDE2ODA5NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFBDSSBEcml2ZXIgUHJvYmluZyBpbiBWaXJ0dWFsIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBibnh0YCBhbmQgYGZibmljYCwgYm90aCBQQ0kgZHJpdmVycywgYm90aCBoYXZpbmcgYHF1ZXVlX21nbXRfb3BzYC4gVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kIGlzLCBjYW4gZWl0aGVyIG9mIHRoZXNlIGJlIHN1Y2Nlc3NmdWxseSBwcm9iZWQgb3IgZXZlbiAqdXNlZCogd2l0aGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgZXZlbiBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzLCBubywgcHJvYmFibHkgbm90LiBDYW4geW91IGV2ZW4gcHJvYmUgYSBQQ0kgZGV2aWNlIGlmIGl0ICpkb2Vzbid0KiBoYXZlIHNvbWUga2luZCBvZiBwaHlzaWNhbCBoYXJkd2FyZSB0byBiYWNrIGl0LCBvciBhIHJvYnVzdCBRRU1VIGVtdWxhdGlvbiBvZiBpdD8gVXN1YWxseSwgbm8uIEkgbWVhbiwgd2l0aG91dCBhIHZpcnR1YWwgZW11bGF0aW9uIGxpa2UgdmlydGlvLCBvciBhbiBlbXVsYXRlZCBQQ0kgZGV2aWNlIHdpdGhpbiBRRU1VIGxpa2UgZTEwMDAvZTEwMDBlL2lnYi9ydGw4MTM5LCB0aGVyZSdzIG5vIHdheSB0byBldmVuICpmaW5kKiB0aGUgZGV2aWNlLlxuXG5MZXQncyBjaGVjayBRRU1VIGZpcnN0LiBEb2VzIFFFTVUgZW11bGF0ZSBgYm54dGA/IE5vcGUuIEJyb2FkY29tJ3MgYGJueHRgIGlzbid0IGEgc3RhbmRhcmQgZW11bGF0aW9uIHRhcmdldC4gVGhlbiBgZmJuaWNgPyBIbW0sIHRoYXQncyBNZXRhJ3MgY3VzdG9tIEFTSUMgTklDLCBhbmQgSSBrbm93IGl0IHdhcyBhZGRlZCB0byB0aGUga2VybmVsIHZlcnkgcmVjZW50bHkg4oCTIDIwMjQuIFNvLCB0aGVyZSBpcyBubyB3YXkgZm9yIFFFTVUgdG8gZW11bGF0ZSB0aGUgZGV2aWNlIGVpdGhlci5cblxuV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gSXNuJ3QgdGhhdCBzb21ldGhpbmcgZGVzaWduZWQgZm9yIG5ldHdvcmsgZGV2aWNlIHNpbXVsYXRpb24/IERvZXMgaXQgc2V0IGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGA/IE5vPyBBbmQgZG9lcyBpdCBpbXBsZW1lbnQgYHNlbGZfdGVzdGA/IEknZCBiZXR0ZXIgY2hlY2sgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyOTA2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjI3LjkwNDQ3ODE2MloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MzYwNzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGZfdGVzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjMzOjI3Ljk1MDQyMjAxNFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MTcxMDIxMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyaWFnZSBEZWNpc2lvbjogV29ydGhGdXp6aW5nID0gRmFsc2UqKlxuXG5Pa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYG5ldGRldnNpbWAgZG9lc24ndCBpbXBsZW1lbnQgYSBgc2VsZl90ZXN0YCwgd2hpY2ggZ290IG1lIHdvbmRlcmluZyBhYm91dCBvdGhlciBkcml2ZXJzLiBJIHF1aWNrbHkgcmV2aWV3ZWQgdGhlIG9uZXMgSSBrbm93IGFyZSBlbXVsYXRlZCBieSBRRU1VIGxpa2UgYHBjbmV0MzJgLCBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGFuZCBzb21lIFVTQiBldGhlcm5ldCBkZXZpY2VzLiBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgbG9ja2luZyBtZWNoYW5pc21zLiBOb25lIG9mIHRoZXNlIGRyaXZlcnMgdXNlIGByZXF1ZXN0X29wc19sb2NrYCBvciBgcXVldWVfbWdtdF9vcHNgLiBUaGlzIG1lYW50IHRoYXQgdGhlIGNvbmRpdGlvbiBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgd291bGQgZXZhbHVhdGUgdG8gYGZhbHNlYCBmb3IgdGhlbS5cblxuVGhpcyBpcyBhIGtleSBvYnNlcnZhdGlvbiEgIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSBDIGNvbXBpbGVyIHdpbGwgXCJzaG9ydC1jaXJjdWl0XCIgdGhlIGxvZ2ljYWwgT1IgKGB8fGApIG9wZXJhdG9yLiAgVGhlcmVmb3JlLCB0aGUgY2hlY2sgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZClgICp3b24ndCBldmVuIGJlIGV4ZWN1dGVkKiBpZiBgIW5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIHRydWUgKHdoaWNoIGlzIHRoZSBjYXNlIGZvciBhbGwgZW11bGF0ZWQgZHJpdmVycyBJJ20gZmFtaWxpYXIgd2l0aCkhICBFdmVuIGlmIGl0ICp3ZXJlKiBleGVjdXRlZCwgdGhlIGBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubGAgY2hlY2sgZm9yIGVtdWxhdGVkIGRyaXZlcnMgKmRvZXNuJ3QqIGluY2x1ZGUgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gT25seSBkcml2ZXJzIGxpa2UgYGJueHRgIGFuZCBgZmJuaWNgIHNldCB0aGlzIGZsYWcuXG5cblRoaXMgaXMgd2hlcmUgSSBiZWNhbWUgY29uY2VybmVkLiBJIHRoZW4gd2VudCBiYWNrIHRvIHRoZSB0cmlhZ2UgaW5zdHJ1Y3Rpb25zIC0gc3BlY2lmaWNhbGx5LCBzZWN0aW9uIDEgYW5kIHNlY3Rpb24gMi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGZvciByZWFjaGluZyBhIHdvcnRoIGZ1enppbmcgZGVjaXNpb24uXG5cbkkgd2VudCBiYWNrIGFuZCBjaGVja2VkIGFsbCB0aGUgZmlsZXMgdGhhdCBjaGFuZ2VkIGFuZCBmb3VuZCB0aGF0IHRoZSBjaGFuZ2VzIGFyZTpcblxuMS4gIGBibnh0X2V0aHRvb2wuY2A6ICBUaGlzIGlzIGluIHRoZSBgYm54dGAgZHJpdmVyIChCcm9hZGNvbSBOZXRYdHJlbWUgUENJZSBOSUMpLCBzZXR0aW5nIHRoZSBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGZsYWcuXG4yLiAgYGZibmljX2Nzci5oYCwgYGZibmljX2RlYnVnZnMuY2AsIGBmYm5pY19ldGh0b29sLmNgLCBgZmJuaWNfZncuY2AsIGBmYm5pY19mdy5oYCwgYGZibmljX3BjaS5jYCwgYGZibmljX3R4cnguY2A6IEFsbCBwYXJ0cyBvZiB0aGUgYGZibmljYCBkcml2ZXIgKE1ldGEgZmJuaWMgUENJZSBOSUMpLCB3aXRoIGNoYW5nZXMgcmVsYXRlZCB0byBoYXJkd2FyZSBpbnRlcmFjdGlvbiBhbmQgZXRodG9vbCB0ZXN0LlxuMy4gIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGA6IFRoZSBoZWFkZXIgdGhhdCBkZWZpbmVzIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAuXG40LiAgYG5ldC9ldGh0b29sL2NvbW1vbi5oYDogIFRoaXMgY29udGFpbnMgdGhlIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGZ1bmN0aW9uIGFuZCByZWxhdGVkIGV0aHRvb2wgb3BlcmF0aW9ucy5cblxuVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoaXMgYWxsIGNoYW5nZXMgY29kZSB0aGF0IGlzIHVzZWQgYnkgYGJueHRgIGFuZCBgZmJuaWNgLCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBlbXVsYXRlZCBieSBRRU1VLiAgVGhpcyB3aWxsIG5vdCBiZSByZWFjaGVkIGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5JIGxvb2tlZCBjYXJlZnVsbHkgYXQgYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gU3BlY2lmaWNhbGx5IGF0IHRoZSBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFNpbmNlIGl0IGlzIGFuIGBpbmxpbmVgIGZ1bmN0aW9uLCBpdCBpcyBlYXN5IHRvIHNlZSB0aGUgZnVuY3Rpb24uIFRoZSBjb25kaXRpb24gYG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8YCBzaG93cyB0aGF0IHRoZSBldGh0b29sIG9wZXJhdGlvbnMgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuXG5JIGhhdmUgdG8gY2FyZWZ1bGx5IGFzc2VzcyBpZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3LCBmdXp6ZWQgY29kZSwgYW5kIHNvIEkgYW0gY2hlY2tpbmcgZHJpdmVycyB0aGF0IHVzZSBgcmVxdWVzdF9vcHNfbG9ja2AsIGBxdWV1ZV9tZ210X29wc2AsIGFuZCBgbmV0X3NoYXBlcl9vcHNgLCBpbiBjYXNlIGFueSBvZiB0aGVzZSBhY3R1YWxseSB1c2UgdGhlIG5ldyBjb2RlLCBvciBleHBvc2UgaXQuIEkgd2lsbCBzZWFyY2ggZm9yIHRoZXNlIHN5bWJvbHMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGUgY29kZSBvbmx5IGFwcGxpZXMgdG8gaGFyZHdhcmUgKGJueHQsIGZibmljKSBub3QgZW11bGF0ZWQsIGFuZCB0aGUgY2hhbmdlcyBkbyBub3QgcmVzdWx0IGluIG5ldyByZWFjaGFibGUgY29kZSwgaXQgc2VlbXMgdGhlIGNoYW5nZXMgYXJlIHVucmVhY2hhYmxlIHdpdGhpbiBteSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNTI5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzozNy4xMjE0NDUzNjJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTMwMjYxNTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwucXVldWVfbWdtdF9vcHNcXFxccyo9XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzozOC45MzQ0ODA3NTNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjEzNzc4MTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGU6IEZpbmRpbmcgdGhlIFF1ZXVlIE1hbmFnZW1lbnQgT3BzKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QsIGFsd2F5cywgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcXVldWUgbWFuYWdlbWVudCBvcGVyYXRpb25zIGFyZSBkZWZpbmVkLiBTbywgbGV0J3Mgc3RhcnQgd2l0aCBhIGNsYXNzaWM6IGEgYGdyZXBgIHNlYXJjaC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gYGdyZXBgIGZvciB0aGUgZXhhY3Qgc3RyaW5nIGBxdWV1ZV9tZ210X29wcyA9YC4gVGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgdmFyaWFibGUgbmFtZSBvciBkZWNsYXJhdGlvbiBJJ2QgZXhwZWN0IHRvIHNlZSByZWxhdGVkIHRvIGFuIG9wZXJhdGlvbmFsIHN0cnVjdHVyZS4gSXQncyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gaWRlbnRpZnkgdGhlIGRlZmluaXRpb24gYW5kIGhvcGVmdWxseSB1bmRlcnN0YW5kIHdoYXQgdGhhdCBzdHJ1Y3R1cmUsIG9yIHN0cnVjdCwgb3IgY2xhc3MsIGFjdHVhbGx5ICppcyouIFRoaXMgd2lsbCBwaW5wb2ludCB0aGUgc3RhcnRpbmcgcG9pbnQsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGVzZSBxdWV1ZXMgYXJlIGJlaW5nIG1hbmFnZWQgYW5kIHdoYXQgdGhhdCBsb29rcyBsaWtlLiBJdCdzIHRoZSBzdGFuZGFyZCwgZWZmaWNpZW50IGZpcnN0IHBhc3MgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NDI4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6NDEuMDcyMjY0NzQyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg5MDA5MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX21nbXRfb3BzXFxcXHMqPVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjYxNj1zdGF0aWMgaW50IGJueHRfcXVldWVfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpxbWVtLCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY2NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY2NjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWVfbWdtdF9vcHMgYm54dF9xdWV1ZV9tZ210X29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjY2NS1cXHQubmRvX3F1ZXVlX21lbV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGJueHRfcnhfcmluZ19pbmZvKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE3MTE0PXN0YXRpYyBpbnQgYm54dF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MzU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MzU5OlxcdGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2Ym54dF9xdWV1ZV9tZ210X29wc191bnN1cHA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNjAtXFx0aWYgKEJOWFRfU1VQUE9SVFNfUVVFVUVfQVBJKGJwKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzM2MTpcXHRcXHRkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXFx1MDAyNmJueHRfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTczNjItXFx0ZGV2LVxcdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTI3MTQ9c3RhdGljIGludCBndmVfcnhfcXVldWVfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYy0yNzY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX21haW4uYzoyNzY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGd2ZV9xdWV1ZV9tZ210X29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjc2Ny1cXHQubmRvX3F1ZXVlX21lbV9zaXplXFx0PVxcdHNpemVvZihzdHJ1Y3QgZ3ZlX3J4X3JpbmcpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jPTI4MjI9c3RhdGljIGludCBndmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9tYWluLmMtMjg3NS1cXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2Z3ZlX25ldGRldl9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jOjI4NzY6XFx0ZGV2LVxcdTAwM2VxdWV1ZV9tZ210X29wcyA9IFxcdTAwMjZndmVfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfbWFpbi5jLTI4NzctXFx0ZGV2LVxcdTAwM2VzdGF0X29wcyA9IFxcdTAwMjZndmVfc3RhdF9vcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTU3OTQ9c3RhdGljIHN0cnVjdCBkZXZpY2UgKm1seDVlX3F1ZXVlX2dldF9kbWFfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTU4MTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1ODE3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIG1seDVlX3F1ZXVlX21nbXRfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMtNTgxOC1cXHQubmRvX3F1ZXVlX21lbV9zaXplXFx0PVxcdHNpemVvZihzdHJ1Y3QgbWx4NV9xbWdtdF9kYXRhKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTgyOT1zdGF0aWMgdm9pZCBtbHg1ZV9idWlsZF9uaWNfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTU4MzgtXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNm1seDVlX25ldGRldl9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1ODM5OlxcdG5ldGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2bWx4NWVfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01ODQwLVxcdG5ldGRldi1cXHUwMDNleGRwX21ldGFkYXRhX29wcyA9IFxcdTAwMjZtbHg1ZV94ZHBfbWV0YWRhdGFfb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYz03NDY9c3RydWN0IG5ldF9kZXZpY2UgKmZibmljX25ldGRldl9hbGxvYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTc2MC1cXHRuZXRkZXYtXFx1MDAzZXN0YXRfb3BzID0gXFx1MDAyNmZibmljX3N0YXRfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM6NzYxOlxcdG5ldGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2ZmJuaWNfcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYy03NjItXFx0bmV0ZGV2LVxcdTAwM2VuZXRtZW1fdHggPSBORVRNRU1fVFhfRE1BO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM9MjkyOT1zdGF0aWMgaW50IGZibmljX3F1ZXVlX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcW1lbSwgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jLTI5NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY190eHJ4LmM6Mjk3MDpjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIGZibmljX3F1ZXVlX21nbXRfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfdHhyeC5jLTI5NzEtXFx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBmYm5pY19xX3RyaWFkKSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz04MzY9c3RhdGljIGludCBuc2ltX3F1ZXVlX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcGVyX3F1ZXVlX21lbSwgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy04NTQtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjg1NTpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGRldl9xdWV1ZV9tZ210X29wcyBuc2ltX3F1ZXVlX21nbXRfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy04NTYtXFx0Lm5kb19xdWV1ZV9tZW1fc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBuc2ltX3F1ZXVlX21lbSksXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA1Mi1cXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0X29wcyA9IFxcdTAwMjZuc2ltX3N0YXRfb3BzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMDUzOlxcdG5zLVxcdTAwM2VuZXRkZXYtXFx1MDAzZXF1ZXVlX21nbXRfb3BzID0gXFx1MDAyNm5zaW1fcXVldWVfbWdtdF9vcHM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwNTQtXFx0bmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMobnMtXFx1MDAzZW5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYz0zNTg9c3RhdGljIGludCBuZXRraXRfcXVldWVfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zOTEtXFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MzkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX21nbXRfb3BzIG5ldGtpdF9xdWV1ZV9tZ210X29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRraXQuYy0zOTMtXFx0Lm5kb19xdWV1ZV9jcmVhdGVcXHQ9IG5ldGtpdF9xdWV1ZV9jcmVhdGUsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYz00NDE9c3RhdGljIHZvaWQgbmV0a2l0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRraXQuYy00NzMtXFx0ZGV2LVxcdTAwM2VldGh0b29sX29wcyAgICA9IFxcdTAwMjZuZXRraXRfZXRodG9vbF9vcHM7XFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6NDc0OlxcdGRldi1cXHUwMDNlcXVldWVfbWdtdF9vcHMgPSBcXHUwMDI2bmV0a2l0X3F1ZXVlX21nbXRfb3BzO1xcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTQ3NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6NDMuMzYxMjgxMzE3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3NTM0MDA0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgRVRIVE9PTF9URVNUIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIGBFVEhUT09MX1RFU1RgIGlvY3RsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB3aGV0aGVyIHRoaXMgY2hhbmdlIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBgbmV0ZGV2c2ltYCwgYG5ldGtpdGAsIGFuZCBgZHVtbXlgIGRyaXZlcnMsIGFuZCB3aGV0aGVyIHRoYXQgbWlnaHQgb3BlbiB1cCBhIGZ1enppbmcgb3Bwb3J0dW5pdHkuIEknbSBub3RpbmcgdGhlIGtleSBkaWZmZXJlbmNlcyBpbiBob3cgdGhlc2UgZHJpdmVycyBoYW5kbGUgdGhlaXIgcXVldWUgbWFuYWdlbWVudCBvcGVyYXRpb25zLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgZGlmZmVyZW5jZXMgaW4gYHF1ZXVlX21nbXRfb3BzYCBhbmQgYHJlcXVlc3Rfb3BzX2xvY2tgLlxuXG5JJ20gd29ya2luZyB0aHJvdWdoIHRoZSBsb2dpYy4gIElmIGEgc3l6a2FsbGVyIHRlc3Qgc2VuZHMgYW4gYEVUSFRPT0xfVEVTVGAgaW9jdGwsIHRoZSBjb2RlIGNoZWNrcyBgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAuICBGb3Igb3VyIHRhcmdldCBkcml2ZXJzIChgZHVtbXlgLCBgbmV0ZGV2c2ltYCwgYW5kIGBuZXRraXRgKSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC4gVGhpcyBtZWFucyB0aGUgaW9jdGwgaXMgKnBvdGVudGlhbGx5KiBpbXBhY3RlZCBieSB0aGUgcGF0Y2hlZCBjb2RlLiBTaW5jZSBgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlc2AgcmV0dXJucyBgZmFsc2VgIChhcyBgRVRIVE9PTF9URVNUYCBpcyBhIGNvbW1hbmQpLCB0aGUgY29tcGlsZXIgZXZhbHVhdGVzIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBFVEhUT09MX1RFU1QpYC4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgaGVhcnQgb2YgbXkgYW5hbHlzaXMuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgbG9naWMuIEkgYW0gbm90aWNpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGluY2x1ZGVzIGEgYHN3aXRjaGAgc3RhdGVtZW50IGZvciBgRVRIVE9PTF9URVNUYCwgYW5kIHRoYXQgZm9yIHRoZSBgZHVtbXlgIGRldmljZSB0aGUgYG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sYCBpcyB6ZXJvLCBzbyBpdCByZXR1cm5zIGBmYWxzZWAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBpdCByZXR1cm5lZCAqYmVmb3JlKiB0aGUgcGF0Y2guIEZvciBgbmV0ZGV2c2ltYCBhbmQgYG5ldGtpdGAsIEkgc2VlIHRoYXQgdGhlIHNhbWUgbG9naWMgYXBwbGllcywgd2l0aCB0aGUgc2FtZSByZXN1bHQ6IGBmYWxzZWAuXG5cbk5vdyBJIG5lZWQgdG8gem9vbSBvdXQuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlICphbnkqIHJlYWwgZGV2aWNlcyBvdXQgdGhlcmUgdGhhdCBzZXQgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gQSBxdWljayBgZ2l0IGdyZXBgIHJldmVhbHMgdGhhdCBvbmx5IGBibnh0YCBhbmQgYGZibmljYCBkcml2ZXJzIHVzZSB0aGlzIGZsYWcuIEJ1dCB3YWl0LCBjYW4gdGhvc2UgZXZlbiBydW4gaW4gUUVNVT8gTm8sIHRoZXkgYXJlIG5vdCBlbXVsYXRlZCEgVGhpcyBtYWtlcyBtZSByZWNvbnNpZGVyIHRoZSBwYXRjaCdzIHJlbGV2YW5jZS5cblxuVGhlIGd1aWRlbGluZXMgc3RhdGUgdGhhdCBjaGFuZ2VzIHN0cmljdGx5IGltcGFjdGluZyB1bnJlYWNoYWJsZSBoYXJkd2FyZSBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBmdXp6YWJsZS4gSG93ZXZlciwgSSdtIHRoaW5raW5nIGFib3V0IFwiUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZy4uLiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzLi4uXCIgSSBoYXZlIHRvIGFuYWx5emUgY2FyZWZ1bGx5IGlmIHRoZXJlJ3MgKmFueSogYmVoYXZpb3JhbCBkaWZmZXJlbmNlIGZvciB0aGUgZHJpdmVycyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gUUVNVSwgc2luY2UgdGhpcyBpcyB0aGUgb25seSBjb2RlIEkgY2FuIHRhcmdldCBmb3IgZnV6enppbmcuXG5cbk15IGFuYWx5c2lzIGxvb2tzIGludG8gdHdvIGNhc2VzOlxuQ2FzZSBBOiBGb3IgZGV2aWNlcyB3aGVyZSBgIW5ldGRldl9uZWVkX29wc19sb2NrKGRldilgIGlzIHRydWUgKGxvb3BiYWNrLCB2ZXRoLCBldGMuKSBUaGlzIGxvZ2ljIGlzIG5vdCBldmFsdWF0ZWQsIGFuZCB0aGlzIHBhdGNoIG1ha2VzIG5vIGRpZmZlcmVuY2UuXG5DYXNlIEI6IEZvciBkZXZpY2VzIHdoZXJlIGAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KWAgaXMgZmFsc2UgKGR1bW15LCBuZXRkZXZzaW0sIG5ldGtpdCkuIEJlZm9yZSBhbmQgYWZ0ZXIsIHRoZSByZXR1cm4gdmFsdWVzIGFyZSB0aGUgKnNhbWUqLiBObyBiZWhhdmlvciBjaGFuZ2UuXG5cbkknbSByZS1ldmFsdWF0aW5nIHRoZSBwb3NzaWJpbGl0eSBvZiBlbXVsYXRlZCBoYXJkd2FyZSBpbiBRRU1VLiBEb2VzIGFueSAqZW11bGF0ZWQqIGRyaXZlciB1c2UgYG9wcy1sb2NrYD8gSSBhbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIG91dHB1dCBvZiBteSBlYXJsaWVyIGdyZXAuIEl0IGluY2x1ZGVzIEdWRSwgR29vZ2xlIFZpcnR1YWwgRXRoZXJuZXQuIElzIHRoaXMgR1ZFIHVzZWQgaW4gUUVNVSBvciBHQ0U/XG5cblRoZSBHVkUgaXMgdGhlIHZpcnR1YWwgTklDISBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEdWRSBzZXRzIHRoZSBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaGFzIGFueSBhZmZlY3Qgb24gZnV6emFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NzIwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzo1My4xMTQ2ODQ5NTNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTIwNjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVUSFRPT0xfT1BfTkVFRFNfUlROTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYz05ODI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGd2ZV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy05ODUtXFx0XFx0XFx0XFx0IEVUSFRPT0xfUklOR19VU0VfUlhfQlVGX0xFTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg2OlxcdC5vcF9uZWVkc19ydG5sID0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jOjk4NzpcXHRcXHRcXHQgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5ODg6XFx0XFx0XFx0IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTg5LVxcdC5nZXRfZHJ2aW5mbyA9IGd2ZV9nZXRfZHJ2aW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6NTMuMjEzMjExMjE4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1ODk5MzQxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBGbGFnIGFuZCBQaHlzaWNhbCBOSUMgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoaXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBmbGFnIGlzIGJlaW5nIGhhbmRsZWQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBoYXJkd2FyZSBzdXBwb3J0LiBJdCBzZWVtcyBsaWtlIHRoZSBHVkUgZHJpdmVyIGlzbid0IHNldHRpbmcgdGhlIGZsYWcgYW5kIGFsc28gZG9lc24ndCBpbXBsZW1lbnQgYSBgc2VsZl90ZXN0YCBmdW5jdGlvbi4gVGhpcyByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gb3RoZXIgcGh5c2ljYWwgTklDcyB0aGF0IEknbSBmYW1pbGlhciB3aXRoLiBXaGF0IGFib3V0IGBtbHg1YD8gVGhhdCdzIGEgTWVsbGFub3ggQ29ubmVjdFgsIGEgcmVhbCBwaWVjZSBvZiBoYXJkd2FyZSwgYnV0IEkga25vdyBpdCdzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBOZXh0LCBJIGNvbnNpZGVyIGBmYm5pY2AsIHRoZSBNZXRhIE5JQzsgYWxzbyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgYWxzbyBub3QgZW11bGF0ZWQuIFRoZW4sIEkgbG9vayBhdCBgbmV0ZGV2c2ltYCwgYW5kLCB1bnN1cnByaXNpbmdseSwgaXQncyBub3Qgc2V0dGluZyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGVpdGhlci4gVGhlIHNhbWUgZ29lcyBmb3IgYG5ldGtpdGAuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gd2hpY2ggTklDcyAqY2FuKiBiZSB1c2VkIHdpdGggYSBmdXp6aW5nIGVudmlyb25tZW50IGxpa2Ugc3l6a2FsbGVyLiBDYW4gYGJueHRgIG9yIGBmYm5pY2AgKmV2ZXIqIGJlIGluc3RhbnRpYXRlZCBpbiBRRU1VIG9yIGJ5IHN5emthbGxlcj8gSWYgbm90LCB0aGF0IGNoYW5nZXMgaG93IEkgYXBwcm9hY2ggdGhpbmdzLlxuXG5TbywgSSB3aWxsIGNoZWNrIGlmIHRoZXJlJ3MgYW55IG1vY2sgb3IgdGVzdCBoYXJuZXNzIGZvciBlaXRoZXIgYGZibmljYCBvciBgYm54dGAuIEknbGwgc3RhcnQgd2l0aCBgZmJuaWNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBleGlzdGluZyB0ZXN0IGNvZGUgb3IgYW55IHNvcnQgb2YgbW9jayBpbXBsZW1lbnRhdGlvbiBmb3IgaXQgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgc2VhcmNoIGFyb3VuZCBmb3IgYGZibmljYCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL2AgZGlyZWN0b3J5LCBhbmQgcmVhbGx5IGFueXdoZXJlIGVsc2UgdGhhdCBtYWtlcyBzZW5zZSwgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIHRvIGZpbmQgYW55IGNsdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQxNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzo1Ni44MDMxNDkyMTZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTU2NzI4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmJuaWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidG9vbHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzo1Ni45NTg3MjQzNTJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY4ODU4MTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQSBMZWFuIEFwcHJvYWNoKipcblxuSG1tLCBcIk5vLlwiIFRoYXQncyBteSBndXQgcmVhY3Rpb24uIEknbSBsaWtlbHkgb3BlcmF0aW5nIG9uIGEgd2VsbC1ob25lZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9ibGVtIHNwYWNlLCBhbmQgdGhlIGluaXRpYWwgc3VnZ2VzdGlvbiBjbGVhcmx5IGRvZXNuJ3QgZml0IG15IGVzdGFibGlzaGVkIGZyYW1ld29yay4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgbW9yZSBzdHJlYW1saW5lZCwgZWxlZ2FudCwgb3IgcGVyZm9ybWFudCBzb2x1dGlvbiB0aGFuIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGUgXCJOby5cIiByZXNwb25zZS4gUGVyaGFwcyB0aGUgZmlyc3QgaWRlYSB3YXMgdG9vIGJhc2ljLCB0b28gZ2VuZXJhbGl6ZWQsIG9yIGFscmVhZHkgcnVsZWQgb3V0IGZvciBhIHZlcnkgc3BlY2lmaWMgYW5kIHdlbGwtY29uc2lkZXJlZCByZWFzb24gaW4gdGhlIGN1cnJlbnQgY29udGV4dC5cblxuTm93LCB0aGF0IHNhaWQsIFwiV2hhdCBhYm91dCBgYm54dGA/XCIgVGhhdCdzIGludGVyZXN0aW5nLiBUaGUgbWVudGlvbiBvZiBgYm54dGAgaW5kaWNhdGVzIHRoYXQgSSdtIG5vdyB6ZXJvaW5nIGluIG9uIGEgcG90ZW50aWFsbHkgbW9yZSBhcHByb3ByaWF0ZSB0ZWNobm9sb2d5LCB0b29sLCBvciBhcHByb2FjaC4gSXQgc3VnZ2VzdHMgSSdtIGNvbnNpZGVyaW5nIGEgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc29mdHdhcmUgb3B0aW9uLCBwb3RlbnRpYWxseSBhIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE5JQykgZHJpdmVyLCBhIHNwZWNpZmljIGxpYnJhcnkuIEknbSBwcm9iYWJseSB3ZWlnaGluZyB0aGUgY2FwYWJpbGl0aWVzIG9mIGBibnh0YCAtIGl0cyBzcGVlZCwgZmVhdHVyZXMsIHJlc291cmNlIHV0aWxpemF0aW9uLCBhbmQgd2hldGhlciBpdCBhbGlnbnMgd2l0aCBteSBwcm9qZWN0J3Mgb2JqZWN0aXZlcyBhbmQgY29uc3RyYWludHMuIFRoZSBmYWN0IHRoYXQgSSdtIGJyaW5naW5nIGl0IHVwIG1lYW5zIGl0J3Mgbm93IG9uIHRoZSBzaG9ydCBsaXN0IG9mIHBvdGVudGlhbCBzb2x1dGlvbnMuIEknbSBhY3RpdmVseSBjb25zaWRlcmluZyB3aGV0aGVyIGl0IHNvbHZlcyB0aGUgcHJvYmxlbSBhdCBoYW5kLCBvciBpZiBtb3JlIGFuYWx5c2lzIGlzIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIwNjMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozMzo1OS42NDczMDkyMDNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzE4NjM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibnh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX3FsZWFzZS5weT0yMTY9ZGVmIHRlc3RfaW91X3pjcnhfbGFyZ2VfYnVmKGNmZykgLVxcdTAwM2UgTm9uZTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX3FsZWFzZS5weS0yNzMtICAgICMgUHJvYmUgdmlhIC1kIChkcnkgcnVuKTogZXhpdHMgd2l0aCBTS0lQX0NPREUgaWYgdGhlIGxlYXNlZCBwaHlzaWNhbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX3FsZWFzZS5weToyNzQ6ICAgICMgcW9wcyBkb2Vzbid0IGFkdmVydGlzZSBRQ0ZHX1JYX1BBR0VfU0laRSAoZS5nLiBvbGRlciBibnh0IEZXL0hXKS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19xbGVhc2UucHktMjc1LSAgICBwcm9iZSA9IGNtZChyeF9jbWQgKyBcXFwiIC1kXFxcIiwgZmFpbD1GYWxzZSwgbnM9Y2ZnLm5ldG5zKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weT0yOTU9ZGVmIF9zZXRfc21hbGxfdHhfcmluZyhjZmcsIGVoZHIpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weS0yOTktICAgIDEyOCwgMjU2LCAuLi4pIHVwIHRvIDEwMjQuIFNvbWUgZHJpdmVycyBlbmZvcmNlIGEgbWluaW11bSB3ZWxsIGFib3ZlIDMyXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcmluZ19yZWNvbmZpZy5weTozMDA6ICAgIChlLmcuIGJueHQgbmVlZHMgYSBsYXJnZSByaW5nIGZvciBzb2Z0d2FyZSBVRFAgc2VnbWVudGF0aW9uKSwgc28gcmFpc2VcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9yaW5nX3JlY29uZmlnLnB5LTMwMS0gICAgdGhlIGxvd2VyIGJvdW5kIHVudGlsIHRoZSBkcml2ZXIgYWNjZXB0cyBpdCwgZ2l2aW5nIHVwIHBhc3QgMTAyNC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzM6NTkuNzYwNTAxODE2WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg0MzE4NzExNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBvZiBgZXRodG9vbGAgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIGNoYW5nZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L2AsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYGJueHRgIGFuZCBgZmJuaWNgLCBhcmUgd29ydGggZnV6emluZy4gSSBrbm93IHRoZXNlIGRyaXZlcnMgZGVhbCB3aXRoIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGhlIGNvcmUgcGhpbG9zb3BoeSBlbXBoYXNpemVzIHJlYWNoYWJpbGl0eSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2xsb3dpbmcgdGhlIHRyaWFnZSBwaGlsb3NvcGh5IGFuZCBuZWdhdGl2ZSBjcml0ZXJpYS5cblxuSW5pdGlhbGx5LCBJIHNlZSB0aGUgY29kZSBjaGFuZ2VzIHRvdWNoaW5nIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIFNwZWNpZmljYWxseSwgdGhlIGFkZGl0aW9uIG9mIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgYW5kIGl0cyB1c2Ugd2l0aGluIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGNhdGNoZXMgbXkgZXllLiBJcyB0aGlzICpleGVjdXRhYmxlKiBjb2RlIGFuZCAqcmVhY2hhYmxlKj8gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBTeXprYWxsZXIgYW5kIFFFTVUgY29tZSBpbnRvIHBsYXkgaGVyZS5cblxuSSByZWFsaXplIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgICppcyogcmVhY2hhYmxlLiBJIGNhbiBjcmVhdGUgYSBkdW1teSBuZXR3b3JrIGludGVyZmFjZSB3aXRoIGBpcCBsaW5rIGFkZCBkdW1teTAgdHlwZSBkdW1teWAsIGFuZCBJIGtub3cgU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBgaW9jdGwoZmQsIFNJT0NFVEhUT09MLCAuLi4pYCBjYWxscy4gSSBjYW4gc2V0IGBjbWQgPSBFVEhUT09MX1RFU1RgIGluIHRoZSBgaWZyLmlmcl9kYXRhYCBzdHJ1Y3QuIFRoZSBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBmdW5jdGlvbiAqd2lsbCogYmUgZXhlY3V0ZWQhIFNwZWNpZmljYWxseSwgaW5zaWRlIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgLCB0aGUgc3dpdGNoIHN0YXRlbWVudCB3aWxsIGp1bXAgdG8gdGhlIGBFVEhUT09MX1RFU1RgIGNhc2UsIHJlYWRpbmcgYG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sYCwgbWFza2luZyB3aXRoIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIGFuZCByZXR1cm5pbmcgYDBgIChmYWxzZSkuXG5cbk5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBJIHJlcmVhZCB0aGUgY3JpdGVyaWEuIFRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgYW5kIGlzIHdpdGhpbiBjb3JlIG5ldHdvcmtpbmcuIFRoZSBtb2RpZmllZCBjb2RlIGRldGVybWluZXMgd2hldGhlciBgcnRubF9sb2NrYCBpcyB0YWtlbiBhcm91bmQgYG9wcy1cdTAwM2VzZWxmX3Rlc3RgIGNhbGxzLiAqVGhhdCdzKiBzaWduaWZpY2FudCEgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBjb250ZXh0LCBsaWtlbHkgdGhlIGNvbW1pdCB0aXRsZSBhbmQgZGVzY3JpcHRpb24sIHVzaW5nIGEgZ3JlcHBlciBvciBsb2dzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHdhcyBhZGRlZC4gSSBzZWUgdGhlIGNvbW1lbnQgaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCBub3csIHJlZmVyZW5jaW5nIGBuZXRpZl9vcGVuKCkgLyBuZXRpZl9jbG9zZSgpICh1c2VkIGJ5IEBzZWxmX3Rlc3QpYC4gVGhpcyBub3cgbWFrZXMgc2Vuc2UuIFRoZXNlIGRyaXZlcnMgY291bGQgYmUgY2hhbmdpbmcgbG9ja2luZyBzZW1hbnRpY3MhIEkgbmVlZCB0byBpbnNwZWN0IGBibnh0X3NlbGZfdGVzdGAgYW5kIGBmYm5pY19zZWxmX3Rlc3RgIG5vdy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsIGFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI3NzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjM0OjA4LjE5MjM3NjQxM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxMzU4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmJuaWNfc2VsZl90ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfc3RhdCBmYm5pY19nc3RyaW5nc194ZHBfc3RhdHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTEyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoxMjk6ZW51bSBmYm5pY19zZWxmX3Rlc3RfcmVzdWx0cyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMTMwLVxcdFRFU1RfUkVHID0gMCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jPTE1MzM9c3RhdGljIGludCBmYm5pY19ldGh0b29sX21ieF9zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMTU0Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoxNTQzOnN0YXRpYyB2b2lkIGZibmljX3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTE1NDQtXFx0XFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDQxLVxcdC5zZXRfcGF1c2VwYXJhbVxcdFxcdFxcdD0gZmJuaWNfcGh5bGlua19zZXRfcGF1c2VwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoyMDQyOlxcdC5zZWxmX3Rlc3RcXHRcXHRcXHQ9IGZibmljX3NlbGZfdGVzdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDQzLVxcdC5nZXRfc3RyaW5nc1xcdFxcdFxcdD0gZmJuaWNfZ2V0X3N0cmluZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjM0OjA4LjI3MjUxODg0MVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NzM2Mzg4NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgZmJuaWNfZXRodG9vbCBDb2RlKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJ3ZlIGdvdCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGZibmljYCBkcml2ZXIgaGFuZGxlcyBpdHMgZXRodG9vbCBpbnRlcmFjdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgc2VsZi10ZXN0IGZ1bmN0aW9uYWxpdHkuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gbmF2aWdhdGUgb3ZlciB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNgIGFuZCBjaGVjayBvdXQgbGluZSAxNTQzLiBUaGF0J3MgdGhlIGxpa2VseSBlbnRyeSBwb2ludCwgb3IgYXQgbGVhc3QgYSBrZXkgY29tcG9uZW50LCBmb3IgdGhlIGBmYm5pY19zZWxmX3Rlc3RgIGZ1bmN0aW9uLCBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIHRoZXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBtZWF0IG9mIHRoZSB0ZXN0OiBlcnJvciBkZXRlY3Rpb24sIGFueSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpdCBtaWdodCBwZXJmb3JtLCBvciBtYXliZSBldmVuIHdoYXQgc29ydCBvZiByZXN1bHRzIGl0IG91dHB1dHMuIEl0J2xsIGJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSB0ZXN0J3Mgc2NvcGUgYW5kIGhvdyBpdCB2YWxpZGF0ZXMgdGhlIE5JQydzIGZ1bmN0aW9uYWxpdHkuIE15IHBsYW4gaXMgdG8gbWVudGFsbHkgcGFyc2UgdGhlIGxvZ2ljLCBtYXliZSBjaGVjayBmb3IgYW55IG9idmlvdXMgZ290Y2hhcyBvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHRoZW4gbW92ZSBvbiB0byB0aGUgbmV4dCBzZWN0aW9uIG9yIGZpbGUgZGVwZW5kaW5nIG9uIHdoYXQgdGhlIGN1cnJlbnQgYW5hbHlzaXMgdW5jb3ZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTc0LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzQ6MTMuMDA4OTEwMjM1WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTQwOlxcdFxcdHJldHVybiAhISpkYXRhO1xcbjE1NDE6XFx0fVxcbjE1NDI6XFx0XFxuMTU0MzpcXHRzdGF0aWMgdm9pZCBmYm5pY19zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4xNTQ0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKVxcbjE1NDU6XFx0e1xcbjE1NDY6XFx0XFx0Ym9vbCBpZl9ydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbjE1NDc6XFx0XFxuMTU0ODpcXHRcXHRpZiAoZmJuaWNfZXRodG9vbF9tYnhfc2VsZl90ZXN0KG5ldGRldiwgXFx1MDAyNmRhdGFbVEVTVF9NQlhdKSlcXG4xNTQ5OlxcdFxcdFxcdGV0aF90ZXN0LVxcdTAwM2VmbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7XFxuMTU1MDpcXHRcXG4xNTUxOlxcdFxcdGlmICghKGV0aF90ZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IEVUSF9URVNUX0ZMX09GRkxJTkUpKSB7XFxuMTU1MjpcXHRcXHRcXHRkYXRhW1RFU1RfUkVHXSA9IDA7XFxuMTU1MzpcXHRcXHRcXHRkYXRhW1RFU1RfTVNJWF0gPSAwO1xcbjE1NTQ6XFx0XFx0XFx0cmV0dXJuO1xcbjE1NTU6XFx0XFx0fVxcbjE1NTY6XFx0XFxuMTU1NzpcXHRcXHRpZiAoaWZfcnVubmluZylcXG4xNTU4OlxcdFxcdFxcdG5ldGlmX2Nsb3NlKG5ldGRldik7XFxuMTU1OTpcXHRcXG4xNTYwOlxcdFxcdGlmIChmYm5pY19ldGh0b29sX3JlZ3NfdGVzdChuZXRkZXYsIFxcdTAwMjZkYXRhW1RFU1RfUkVHXSkpXFxuMTU2MTpcXHRcXHRcXHRldGhfdGVzdC1cXHUwMDNlZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEO1xcbjE1NjI6XFx0XFxuMTU2MzpcXHRcXHRpZiAoZmJuaWNfZXRodG9vbF9tc2l4X3Rlc3QobmV0ZGV2LCBcXHUwMDI2ZGF0YVtURVNUX01TSVhdKSlcXG4xNTY0OlxcdFxcdFxcdGV0aF90ZXN0LVxcdTAwM2VmbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7XFxuMTU2NTpcXHRcXG4xNTY2OlxcdFxcdGlmIChpZl9ydW5uaW5nIFxcdTAwMjZcXHUwMDI2IG5ldGlmX29wZW4obmV0ZGV2LCBOVUxMKSkge1xcbjE1Njc6XFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuMTU2ODpcXHRcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIHJlLWluaXRpYWxpemUgaGFyZHdhcmUgZm9sbG93aW5nIHRlc3RcXFxcblxcXCIpO1xcbjE1Njk6XFx0XFx0XFx0ZXRoX3Rlc3QtXFx1MDAzZWZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDtcXG4xNTcwOlxcdFxcdH1cXG4xNTcxOlxcdH1cXG4xNTcyOlxcdFxcbjE1NzM6XFx0c3RhdGljIHZvaWQgZmJuaWNfZ2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuMTU3NDpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxcbjE1NzU6XFx0e1xcbjE1NzY6XFx0XFx0c3RydWN0IGZibmljX25ldCAqZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4xNTc3OlxcdFxcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGZibi1cXHUwMDNlZmJkO1xcbjE1Nzg6XFx0XFxuMTU3OTpcXHRcXHRjaC1cXHUwMDNlbWF4X3J4ID0gZmJkLVxcdTAwM2VtYXhfbnVtX3F1ZXVlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6MzQ6MTMuMDA5MDMwNjA2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NjkyODQxNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBldGh0b29sIFBhdGNoIFNlcmllczogV29ydGhGdXp6aW5nPWZhbHNlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGNhcmVmdWxseSBkaXNzZWN0aW5nIHRoaXMgZXRodG9vbCBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSGV5LCBjb3JlIG5ldHdvcmtpbmcgY29kZSEgR290dGEgYmUgd29ydGggZnV6emluZywgcmlnaHQ/XCIgQnV0IGFmdGVyIGRpZ2dpbmcgaW4sIEkndmUgY29tcGxldGVseSBjaGFuZ2VkIG15IG1pbmQuIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBpcyByZWFjaGFiaWxpdHkuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcsIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIGFuZCBzb21lIHJlbGF0ZWQgbG9naWMgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhbmQgYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYC4gIFRoaXMgZmxhZyBpcyAqb25seSogc2V0IGJ5IHRoZSBgYm54dGAgYW5kIGBmYm5pY2AgZHJpdmVycy4gTm93LCBoZXJl4oCZcyB0aGUgcHJvYmxlbTogdGhlc2UgYXJlICpwaHlzaWNhbCogTklDIGRyaXZlcnMuIGBibnh0YCBpcyBhIEJyb2FkY29tIE5ldFh0cmVtZSBjYXJkLCBhbmQgYGZibmljYCBpcyBNZXRhJ3MgY3VzdG9tIGhhcmR3YXJlLiBTeXprYWxsZXIsIGFuZCBpbmRlZWQgYW55IHN0YW5kYXJkIGZ1enplciBzZXR1cCwgZG9lc24ndCBoYXZlIGFjY2VzcyB0byB0aGlzIGtpbmQgb2YgaGFyZHdhcmUuIFRoZXkgcnVuIGluIFFFTVUgb3IgR0NFIHdpdGggdmlydHVhbCBvciBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgdHVuL3RhcCwgdmV0aCwgb3IgZHVtbXkuXG5cblllcywgdGVjaG5pY2FsbHksIHRoZSBgY2FzZSBFVEhUT09MX1RFU1Q6YCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgIGlzICpyZWFjaGFibGUqIGluIFFFTVUsIGJ1dCB0aGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZSBjb25kaXRpb24gdGhhdCB0cmlnZ2VycyB0aGUgKmludGVuZGVkKiBiZWhhdmlvciwgYG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdpbGwgKmFsd2F5cyogZXZhbHVhdGUgdG8gemVybyBpbiBhbnkgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gIFRoZSBwYXRjaCdzICplZmZlY3QqIG9uIHRoZSBjb2RlIHBhdGggaXMgb25seSB0byBhZGQgYSBjaGVjayBmb3IgYSBiaXQgb25seSBzZXQgYnkgdW5yZWFjaGFibGUgaGFyZHdhcmUgYW5kIGlzIGZ1bmN0aW9uYWxseSBpbmVydCBmb3IgYWxsIHJlYWNoYWJsZSBkcml2ZXJzISBJdCBkb2Vzbid0IG1vZGlmeSB0aGUgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSBvZiBldGh0b29sIGluIHRoZSBwcmVzZW5jZSBvZiBzdGFuZGFyZCB2aXJ0dWFsIGRldmljZXMuIEZvciBhbGwgdGhlIHJlYWNoYWJsZSBkcml2ZXJzICh2aXJ0aW9fbmV0LCB0dW4vdGFwLCB2ZXRoLCBldGMuKSwgdGhlIG9yaWdpbmFsIGJlaGF2aW9yIGlzIHJldGFpbmVkLlxuXG5UaGUgY2hhbmdlcyBpbiBgZmJuaWNgIGFuZCBgYm54dGAgdGhlbXNlbHZlcyBhcmUgbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFRoZXNlIGFyZSB0aGUgbWFpbiBwYXJ0cyBvZiB0aGUgcGF0Y2guIFRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgaXMgYSBub24tZXhlY3V0YWJsZSBtYWNyby4gVGhlIGNoYW5nZXMgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYCBhcmUgb25seSBmb3IgdGhlIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhbmQgdGhlIG5ldCBlZmZlY3Qgb24gcmVhY2hhYmxlIGNvZGUgaXMgbmlsLlxuXG5UaGVyZWZvcmUsIHNpbmNlICphbGwqIHRoZSBtb2RpZmllZCBjb2RlIHJlbGF0ZXMgdG8gdW5yZWFjaGFibGUgaGFyZHdhcmUgb3Igbm9uLWV4ZWN1dGFibGUgZGVmaW5pdGlvbnMsIGl0IGRvZXNuJ3QgbWVldCB0aGUgY3JpdGVyaWEgZm9yIGZ1enppbmcuIEl0J3MgbGlrZSB3b3JraW5nIHdpdGggYW4gYGFtZGdwdWAgZHJpdmVyIOKAkyBpbnRlcmVzdGluZyBjb2RlLCBidXQgdG90YWxseSB1bmludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlIGJlY2F1c2UgaXQncyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICBUaGUgcHJlc2VuY2Ugb2YgdGhlIGNvcmUgbmV0d29ya2luZyBmaWxlIGlzIGlycmVsZXZhbnQuICBCZWNhdXNlIHRoZSBjb2RlIGNoYW5nZXMgaW4gaXQgYXJlIHJlbGF0ZWQgKmV4Y2x1c2l2ZWx5KiB0byBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuICBUaHVzLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBub3Qgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxNjEsIk91dHB1dFRva2VucyI6MjEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozNDo0Mi43MDE4NzQ0NzJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IG1vZGlmaWVzIHRoZSBmYm5pYyAoTWV0YSBBU0lDIE5JQykgYW5kIGJueHQgKEJyb2FkY29tIE5ldFh0cmVtZSBOSUMpIGRyaXZlcnMsIGJvdGggb2Ygd2hpY2ggcmVxdWlyZSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBBU0lDIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBhbmQgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gVGhlIGNoYW5nZXMgaW4gaW5jbHVkZS9saW51eC9ldGh0b29sLmggYW5kIG5ldC9ldGh0b29sL2NvbW1vbi5oIGludHJvZHVjZSBhbmQgY2hlY2sgdGhlIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUIGZsYWcgc28gdGhhdCBkcml2ZXJzIGNhbiBvcHQgaW4gdG8gaG9sZGluZyBydG5sX2xvY2sgZHVyaW5nIHNlbGYtdGVzdDsgdGhpcyBmbGFnIGlzIGV4Y2x1c2l2ZWx5IHNldCBieSBibnh0IGFuZCBmYm5pYy4gRm9yIGFsbCByZWFjaGFibGUgbmV0d29yayBkZXZpY2VzIChlLmcuIHZpcnRpby1uZXQsIGR1bW15LCB2ZXRoLCBuZXRkZXZzaW0pLCB0aGlzIGZsYWcgaXMgbmV2ZXIgc2V0IGFuZCB0aGUgY2hlY2sgZXZhbHVhdGVzIHRvIDAgKGlkZW50aWNhbCB0byBwcmV2aW91cyBiZWhhdmlvcikuIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcyBleGlzdCB0byB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IG1vZGlmaWVzIHRoZSBmYm5pYyAoTWV0YSBBU0lDIE5JQykgYW5kIGJueHQgKEJyb2FkY29tIE5ldFh0cmVtZSBOSUMpIGRyaXZlcnMsIGJvdGggb2Ygd2hpY2ggcmVxdWlyZSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBBU0lDIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBhbmQgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gVGhlIGNoYW5nZXMgaW4gaW5jbHVkZS9saW51eC9ldGh0b29sLmggYW5kIG5ldC9ldGh0b29sL2NvbW1vbi5oIGludHJvZHVjZSBhbmQgY2hlY2sgdGhlIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUIGZsYWcgc28gdGhhdCBkcml2ZXJzIGNhbiBvcHQgaW4gdG8gaG9sZGluZyBydG5sX2xvY2sgZHVyaW5nIHNlbGYtdGVzdDsgdGhpcyBmbGFnIGlzIGV4Y2x1c2l2ZWx5IHNldCBieSBibnh0IGFuZCBmYm5pYy4gRm9yIGFsbCByZWFjaGFibGUgbmV0d29yayBkZXZpY2VzIChlLmcuIHZpcnRpby1uZXQsIGR1bW15LCB2ZXRoLCBuZXRkZXZzaW0pLCB0aGlzIGZsYWcgaXMgbmV2ZXIgc2V0IGFuZCB0aGUgY2hlY2sgZXZhbHVhdGVzIHRvIDAgKGlkZW50aWNhbCB0byBwcmV2aW91cyBiZWhhdmlvcikuIFRoZXJlZm9yZSwgbm8gcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcyBleGlzdCB0byB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzozNDo0Mi43MDE5MDI0ODJaIiwiU2VxIjo1NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8s7w4[1] Phase: Running StartedAt: 2026-09-14 23:34:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s7w4[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-14 23:34:53 +0000 UTC FinishedAt: 2026-09-14 23:34:58 +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,}