Name: series-workflow7txp6 Phase: Failed StartedAt: 2026-08-01 02:51:30 +0000 UTC FinishedAt: 2026-08-01 02:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txp6[0] Phase: Succeeded StartedAt: 2026-08-01 02:51:30 +0000 UTC FinishedAt: 2026-08-01 02:53:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txp6[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 02:51:30 +0000 UTC FinishedAt: 2026-08-01 02:53:52 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIEkyQy9TUEkgY29ubmVjdGVkIERQTEwgZGV2aWNlcy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjQyM2U1MGVjZDAwMWNkZTI4MzE4NDFjYzljYzE5MjQ3NjhjOTFhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDI6NTI6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5AQCAtMiw3ICYjNDM7Miw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tXHRkZXBlbmRzIG9uIE5FVFxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4mIzQzO1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxuIFx0dHJpc3RhdGUgXCYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX1NQSVxuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbmluZGV4IDRlYzJjZjUzZGFkNDYuLjUzMDMyZTc4MmZkNGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMjAyLDYgJiM0MzsyMDMsMTEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdFx0emwzMDczeF9jaGFuX3JlZnNlbF9zdGF0ZV9nZXQoY2hhbiksXG4gXHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XG4gXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuJiM0MztcdFx0XHQgICAgICBcdTAwMjZjaGFuLVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuIFxuIFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXG5AQCAtMjM0LDYgJiM0MzsyNDAsMzA3IEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKlxuJiM0MzsgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCxcbiYjNDM7ICogaW5kaWNhdGluZyB0aGUgZGV2aWNlIGhhcyBjb21wbGV0ZWQgdGhlIHByZXZpb3VzIFRvRCBvcGVyYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuJiM0MztcdHU4IHRvZF9jdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcbiYjNDM7ICpcbiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXG4mIzQzOyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxuJiM0MzsgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjay5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRvbyBjbG9zZSB0byAob3IgcGFzdCkgdGhlIG5leHQgcm9sbG92ZXIsIHdhaXQgaXQgb3V0ICovXG4mIzQzO1x0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4mIzQzO1x0aWYgKGRpZmYudHZfc2VjIFx1MDAzYyAwIHx8ICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2MgdGhyZXNob2xkX25zKSkge1xuJiM0MztcdFx0aWYgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjKVxuJiM0MztcdFx0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTtcbiYjNDM7XHRcdHRzX25leHQudHZfc2VjJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuJiM0MztcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XG4mIzQzO1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIGFkanVzdGVkIFRvRCBiYWNrIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbiYjNDM7XHRpZiAoIXJjKVxuJiM0MztcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKVxuJiM0MzsgKlxuJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbiYjNDM7e1xuJiM0MztcdHM2NCB0aWVfZGF0YTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuJiM0MztcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xuJiM0MztcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuJiM0MztcdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuJiM0MzsgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbiYjNDM7ICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4mIzQzO1x0XHRcdCAgICBib29sIHRvZF9zdGVwKVxuJiM0Mzt7XG4mIzQzO1x0dTggY3RybDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxuJiM0MztcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4mIzQzO1x0aWYgKHRvZF9zdGVwKVxuJiM0MztcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45ZGM1YTNmMTk5MWYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbkBAIC01LDEwICYjNDM7NSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtyZWdzLmhcJiMzNDtcbiBcbiYjNDM7c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuIHN0cnVjdCB6bDMwNzN4X2RldjtcbiBcbiAvKipcbkBAIC0xNiw2ICYjNDM7MTgsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxuICAqIEBtb2RlX3JlZnNlbDogbW9kZSBhbmQgcmVmZXJlbmNlIHNlbGVjdGlvbiByZWdpc3RlciB2YWx1ZVxuICAqIEByZWZfcHJpbzogcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyAoNCBiaXRzIHBlciByZWYsIFAvTiBwYWNrZWQpXG4mIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFza1xuICAqIEBtb25fc3RhdHVzOiBtb25pdG9yIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEByZWZzZWxfc3RhdHVzOiByZWZlcmVuY2Ugc2VsZWN0aW9uIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHNcbkBAIC0yNiw2ICYjNDM7MjksOSBAQCBzdHJ1Y3QgemwzMDczeF9jaGFuIHtcbiBcdFx0dThcdG1vZGVfcmVmc2VsO1xuIFx0XHR1OFx0cmVmX3ByaW9bWkwzMDczWF9OVU1fUkVGUyAvIDJdO1xuIFx0KTtcbiYjNDM7XHRzdHJ1Y3RfZ3JvdXAoaW52LCAvKiBJbnZhcmlhbnRzICovXG4mIzQzO1x0XHR1MTZcdG91dF9zdGVwX3RpbWVfbWFzaztcbiYjNDM7XHQpO1xuIFx0c3RydWN0X2dyb3VwKHN0YXQsXG4gXHRcdHU4XHRtb25fc3RhdHVzO1xuIFx0XHR1OFx0cmVmc2VsX3N0YXR1cztcbkBAIC00Miw2ICYjNDM7NDgsMjAgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuJiM0MztcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICYjNDM7MjIwLDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuJiM0MzsgKlxuJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuJiM0MztcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMzMsNCAmIzQzOzI2OCwxNyBAQCBzdGF0aWMgaW5saW5lIHU4IHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIEZJRUxEX0dFVChaTF9EUExMX1JFRlNFTF9TVEFUVVNfUkVGU0VMLCBjaGFuLVx1MDAzZXJlZnNlbF9zdGF0dXMpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xuJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4mIzQzOyAqIEBvdXQ6IG91dHB1dCBpbmRleFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7emwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG91dClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhIShjaGFuLVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcdTAwMjYgQklUKG91dCkpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZiAvKiBfWkwzMDczWF9DSEFOX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbmluZGV4IDdmNWFmYWFhZTYzNDIuLmIyZjlmYzk3ZmQxYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTEwMzMsNiAmIzQzOzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbmluZGV4IDc4ZGMyMDhmM2VlYTIuLjJkYzgzNmQwYzhmNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4mIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4mIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50c1xuQEAgLTcxLDYgJiM0Mzs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5pbmRleCAwNDg4YWU2YWM0ODZjLi4zMjA4NTJkZmM1OGNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yLDYgJiM0MzsyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiBcbkBAIC00MSw2ICYjNDM7NDMsNyBAQFxuICAqIEBwaGFzZV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgcGluIHBoYXNlIG9mZnNldFxuICAqIEBmcmVxX29mZnNldDogbGFzdCBzYXZlZCBmcmFjdGlvbmFsIGZyZXF1ZW5jeSBvZmZzZXRcbiAgKiBAbWVhc3VyZWRfZnJlcTogbGFzdCBzYXZlZCBtZWFzdXJlZCBmcmVxdWVuY3lcbiYjNDM7ICogQHBlcm91dF9pZHg6IFBUUCBwZXJvdXQgY2hhbm5lbCBpbmRleCwgb3IgLTEgaWYgbm90IHBlcm91dC1lbGlnaWJsZVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5AQCAtNTgsNiAmIzQzOzYxLDcgQEAgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xuIFx0czY0XHRcdFx0cGhhc2Vfb2Zmc2V0O1xuIFx0czY0XHRcdFx0ZnJlcV9vZmZzZXQ7XG4gXHR1MzJcdFx0XHRtZWFzdXJlZF9mcmVxO1xuJiM0MztcdHM4XHRcdFx0cGVyb3V0X2lkeDtcbiB9O1xuIFxuIC8qXG5AQCAtOTM1LDIxICYjNDM7OTM5LDE3IEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiB9XG4gXG4gc3RhdGljIGludFxuLXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi1cdFx0XHRcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLVx0XHRcdFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0MztfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcbiYjNDM7XHRcdFx0XHRcdHU2NCBmcmVxdWVuY3kpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuIFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4gXHR1MzIgbmV3X2Rpdiwgc3ludGhfZnJlcTtcbiBcdHN0cnVjdCB6bDMwNzN4X291dCBvdXQ7XG4gXHR1OCBvdXRfaWQ7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuIFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiBcdG91dCA9ICp6bDMwNzN4X291dF9zdGF0ZV9nZXQoemxkZXYsIG91dF9pZCk7XG5AQCAtMTAxMCw2ICYjNDM7MTAxMCwyMSBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXHRyZXR1cm4gemwzMDczeF9vdXRfc3RhdGVfc2V0KHpsZGV2LCBvdXRfaWQsIFx1MDAyNm91dCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiYjNDM7XHRcdFx0XHQgICAgICB2b2lkICpwaW5fcHJpdixcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4mIzQzO1x0XHRcdFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbl9wcml2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgZnJlcXVlbmN5KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4gemwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIFx0XHRcdFx0XHQgdm9pZCAqcGluX3ByaXYsXG5AQCAtMTYwNyw2ICYjNDM7MTYyMiw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsXG4gXHRwaW4tXHUwMDNlZHBsbCA9IHpsZHBsbDtcbiBcdHBpbi1cdTAwM2VkaXIgPSBkaXI7XG4gXHRwaW4tXHUwMDNlaWQgPSBpZDtcbiYjNDM7XHRwaW4tXHUwMDNlcGVyb3V0X2lkeCA9IC0xO1xuIFxuIFx0cmV0dXJuIHBpbjtcbiB9XG5AQCAtMTYyNSw2ICYjNDM7MTY0MSw0NCBAQCB6bDMwNzN4X2RwbGxfcGluX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbilcbiBcdGtmcmVlKHBpbik7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQgLSBjaGVjayBpZiBvdXRwdXQgcGluIGlzIHBlcm91dC1lbGlnaWJsZVxuJiM0MzsgKiBAcGluOiBEUExMIHBpbiB0byBjaGVja1xuJiM0MzsgKiBAcHJvcHM6IHBpbiBwcm9wZXJ0aWVzIChhbHJlYWR5IGZldGNoZWQgYnkgY2FsbGVyKVxuJiM0MzsgKlxuJiM0MzsgKiBBbiBvdXRwdXQgcGluIGlzIGVsaWdpYmxlIGZvciBQVFAgcGVyaW9kaWMgb3V0cHV0IGlmIGl0IGlzIHNpbmdsZS1lbmRlZFxuJiM0MzsgKiAobm90IGRpZmZlcmVudGlhbCkgYW5kIHN1cHBvcnRzIDEgSHogaW4gaXRzIGZyZXF1ZW5jeSBsaXN0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgZWxpZ2libGUsIGZhbHNlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2xcbiYjNDM7emwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfcGluX3Byb3BzICpwcm9wcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IHBpbi1cdTAwM2VkcGxsO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0dTggb3V0X2lkO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuJiM0MztcdGlmICh6bDMwNzN4X2Rldl9vdXRfaXNfZGlmZih6bGRwbGwtXHUwMDNlZGV2LCBvdXRfaWQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRbaV0ubWluID09IDEpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIHBpblxuICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW5cbkBAIC0xNjY2LDYgJiM0MzsxNzIwLDggQEAgemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLCB1MzIgaW5kZXgpXG4gXHRcdGlmIChwaW4tXHUwMDNlcHJpbyA9PSBaTF9EUExMX1JFRl9QUklPX05PTkUpXG4gXHRcdFx0LyogQ2xhbXAgcHJpbyB0byBtYXggdmFsdWUgKi9cbiBcdFx0XHRwaW4tXHUwMDNlcHJpbyA9IFpMX0RQTExfUkVGX1BSSU9fTUFYO1xuJiM0MztcdH0gZWxzZSBpZiAoemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQocGluLCBwcm9wcykpIHtcbiYjNDM7XHRcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHQvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovXG5AQCAtMTg5Niw2ICYjNDM7MTk1Miw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdHU4IGlkLCBpbmRleDtcbiBcdGludCByYztcbiBcbiYjNDM7XHR6bGRwbGwtXHUwMDNlcHRwX2luZm8ubl9wZXJfb3V0ID0gMDtcbiYjNDM7XG4gXHQvKiBQcm9jZXNzIGlucHV0IHBpbnMgKi9cbiBcdGZvciAoaW5kZXggPSAwOyBpbmRleCBcdTAwM2MgWkwzMDczWF9OVU1fUElOUzsgaW5kZXgmIzQzOyYjNDM7KSB7XG4gXHRcdC8qIEZpcnN0IGlucHV0IHBpbnMgYW5kIHRoZW4gb3V0cHV0IHBpbnMgKi9cbkBAIC0yMjc1LDQ1ICYjNDM7MjMzMyw0NDcgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuJiM0MzsvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiAmIzQzOy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbiYjNDM7XG4gLyoqXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lXG4mIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiBcbi1cdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuLVx0aWYgKCF6bGRwbGwpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIHpsZHBsbDtcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4mIzQzOyAqXG4mIzQzOyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4mIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxuJiM0MzsgKlxuJiM0MzsgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4mIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXG4mIzQzOyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbiYjNDM7ICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4mIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlXG4mIzQzOyAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuJiM0MztcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbiYjNDM7XHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4mIzQzO1x0czMyIHN0ZXBfY3ljbGVzO1xuJiM0MztcdHUzMiBzeW50aF9mcmVxO1xuJiM0MztcdGludCByYztcbiYjNDM7XHR1OCBpO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbiYjNDM7XHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4mIzQzO1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgb3V0X2lkKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuJiM0MztcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4mIzQzO1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXG4mIzQzO1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4mIzQzO1x0XHRcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3ludGhfbWFza1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4mIzQzO1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICF0b2Rfc3RlcHBlZCk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0aWYgKHRvZF9zdGVwcGVkKSB7XG4mIzQzO1x0XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O1BhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR0b2Rfc3RlcHBlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxuJiM0MztcdCAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXRvZF9zdGVwcGVkKSB7XG4mIzQzO1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuJiM0MztcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4gICpcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4mIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcbiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxuJiM0MzsgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXZvaWRcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbiYjNDM7XHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4mIzQzO1xuJiM0MztcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbiYjNDM7XHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxuJiM0MztcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGFicyhkZWx0YSkgXHUwMDNlPSBOU0VDX1BFUl9TRUMpIHtcbiYjNDM7XHRcdHMzMiByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbiYjNDM7XHRcdHRzLnR2X25zZWMgPSAwO1xuJiM0MztcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4mIzQzO1x0XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xuJiM0MztcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuJiM0MztcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4mIzQzO1x0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcbiYjNDM7XHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmMgXHUwMDI2XHUwMDI2IHNlY19hZGp1c3RlZCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCwgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0czY0IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuJiM0MztcdCAqXG4mIzQzO1x0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcbiYjNDM7XHQgKi9cbiYjNDM7XHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbiYjNDM7XHRpZiAob2Zmc2V0ID09IGNoYW4tXHUwMDNlZGZfb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIG9mZnNldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuJiM0MzsgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24mIzM5O3Qgc3VwcG9ydCBUSUUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHMzMlxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4mIzQzO1x0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3BpbiAtIGZpbmQgcGluIGJ5IHBlcm91dCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgcGluLCBvciBOVUxMIGlmIG5vdCBmb3VuZFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBpbnQgaWR4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAocGluLVx1MDAzZXBlcm91dF9pZHggPT0gaWR4KVxuJiM0MztcdFx0XHRyZXR1cm4gcGluO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBycTogdGhlIHJlcXVlc3RlZCBjbG9jayBmdW5jdGlvbiBhbmQgcGFyYW1ldGVyc1xuJiM0MzsgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXG4mIzQzOyAqXG4mIzQzOyAqIEhhbmRsZXMgUFRQX0NMS19SRVFfUEVST1VUIHJlcXVlc3RzLiBPbmx5IDFQUFMgKHBlcmlvZCA9IDFzKSBpcyBzdXBwb3J0ZWQuXG4mIzQzOyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xuJiM0MzsgKiBhcyB0aGUgc2lnbmFsIGlzIG5vdCBkaXNhYmxlZC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaWR4O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKHJxLVx1MDAzZXR5cGUgIT0gUFRQX0NMS19SRVFfUEVST1VUKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZHggPSBycS1cdTAwM2VwZXJvdXQuaW5kZXg7XG4mIzQzO1x0aWYgKGlkeCBcdTAwM2U9IGluZm8tXHUwMDNlbl9wZXJfb3V0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXG4mIzQzO1x0ICogaXMgYSBuby1vcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW9uKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXG4mIzQzO1x0aWYgKHJxLVx1MDAzZXBlcm91dC5wZXJpb2Quc2VjICE9IDEgfHwgcnEtXHUwMDNlcGVyb3V0LnBlcmlvZC5uc2VjICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcbiYjNDM7XHRpZiAoIXBpbikge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfZGV2X291dHB1dF9waW5fZnJlcV9nZXQoemxkcGxsLVx1MDAzZWRldiwgcGluLVx1MDAzZWlkKSA9PSAxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHRkcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbi1cdTAwM2VkcGxsX3Bpbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4mIzQzO1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzQzO1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuJiM0MztcdC5nZXR0aW1leDY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcbiYjNDM7XHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuJiM0MztcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbiYjNDM7XHQuYWRqZmluZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXG4mIzQzO1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4mIzQzO1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4mIzQzO1x0LmVuYWJsZVx0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xuJiM0MztcbiYjNDM7XHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbiYjNDM7XHRcdCBcJiMzNDt6bDMwNzN4LWRwbGwldVwmIzM0OywgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNnpsZHBsbC1cdTAwM2VwdHBfaW5mbywgemxkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVx1MDAzZXB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4mIzQzO1x0fVxuIH1cbiBcbiAvKipcbkBAIC0yMzk4LDYgJiM0MzsyODU4LDQ4IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1xuJiM0MztcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuJiM0MztcdGlmICghemxkcGxsKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbiYjNDM7XHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbiYjNDM7XHR6bGRwbGwtXHUwMDNlcHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemxkcGxsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4mIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKi9cbiYjNDM7dm9pZFxuJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdGtmcmVlKHpsZHBsbCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuQEAgLTI0MjgsNiAmIzQzOzI5MzAsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuJiM0MztcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgJiM0MzsyOTUwLDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB2b2lkXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHtcbi1cdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cbiYjNDM7XHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiAmIzQzOzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbiBcbkBAIC0yMiw2ICYjNDM7MjMsOCBAQFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXG4mIzQzOyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRlbnVtIGRwbGxfdHlwZVx0XHRcdHR5cGU7XG4gXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcdFx0bG9ja19zdGF0dXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHBpbnM7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja19pbmZvXHRcdHB0cF9pbmZvO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi40NDc3NTdlOTk4NDVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFx0XHRcdEdFTk1BU0soMiwgMClcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcdFx0NFxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXHRcdFx0NFxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSlcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXHQxXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0OFxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4mIzQzO1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgJiM0MzsyMDcsOSBAQFxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcbiYjNDM7ICpcbiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuJiM0MzsgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5AQCAtMjAyLDYgJiM0MzsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxuJiM0MztcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgJiM0MzsyNTYsOCBAQFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFx0XHRHRU5NQVNLKDYsIDQpXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTMxNiw2ICYjNDM7MzUzLDI1IEBAXG4gI2RlZmluZSBaTF9SRUdfT1VUUFVUX0VTWU5DX1dJRFRIXHRcdFpMX1JFRygxNCwgMHgxOCwgNClcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfQ09NUFx0XHRaTF9SRUcoMTQsIDB4MjAsIDQpXG4gXG4mIzQzOy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuJiM0MzsgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwXG4mIzQzOyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXHRCSVQoMylcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXHQxXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1x0XHRaTF9SRUcoOSwgMHgzYSwgMilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4mIzQzO1xuIC8qXG4gICogUmVnaXN0ZXIgUGFnZSAyNTUgLSBIVyByZWdpc3RlcnMgYWNjZXNzXG4gICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIEkyQy9TUEkgY29ubmVjdGVkIERQTEwgZGV2aWNlcy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjQyM2U1MGVjZDAwMWNkZTI4MzE4NDFjYzljYzE5MjQ3NjhjOTFhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDI6NTI6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwppbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKQEAgLTIsNyAmIzQzOzIsNyBAQAogCiBjb25maWcgWkwzMDczWAogCXRyaXN0YXRlICYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyYjMzQ7IGlmIENPTVBJTEVfVEVTVAotCWRlcGVuZHMgb24gTkVUCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgRFBMTAogCXNlbGVjdCBORVRfREVWTElOSwogCXNlbGVjdCBSRUdNQVAKQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYCiAKIGNvbmZpZyBaTDMwNzNYX0kyQwogCXRyaXN0YXRlICYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQKJiM0MzsJZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBSRUdNQVBfSTJDCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkMKIAogY29uZmlnIFpMMzA3M1hfU1BJCiAJdHJpc3RhdGUgJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSQomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSSAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9TUEkKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwppbmRleCA0ZWMyY2Y1M2RhZDQ2Li41MzAzMmU3ODJmZDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCkBAIC0yMDIsNiAmIzQzOzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQogCQl6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSwKIAkJemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTsKIAomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssCiYjNDM7CQkJICAgICAgJmFtcDtjaGFuLSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O211bHRpb3BfbG9jayk7CiAKIAkvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi8KQEAgLTIzNCw2ICYjNDM7MjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsCiAJcmV0dXJuICZhbXA7emxkZXYtJmd0O2NoYW5baW5kZXhdOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhcgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICoKJiM0MzsgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCwKJiM0MzsgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiYjNDM7CXU4IHRvZF9jdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksICZhbXA7dG9kX2N0cmwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHsKJiM0MzsJY2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjoKJiM0MzsJCXRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmQKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5CiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lCiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLgomIzQzOyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZQomIzQzOyAqIG5leHQtSHogc2Vjb25kcyBieSBvbmUuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgJmFtcDt0c19uZXh0LCBOVUxMKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBJZiB0b28gY2xvc2UgdG8gKG9yIHBhc3QpIHRoZSBuZXh0IHJvbGxvdmVyLCB3YWl0IGl0IG91dCAqLwomIzQzOwlkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTsKJiM0MzsJaWYgKGRpZmYudHZfc2VjICZsdDsgMCB8fCAoIWRpZmYudHZfc2VjICZhbXA7JmFtcDsgZGlmZi50dl9uc2VjICZsdDsgdGhyZXNob2xkX25zKSkgewomIzQzOwkJaWYgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYykKJiM0MzsJCQlmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTsKJiM0MzsJCXRzX25leHQudHZfc2VjJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi8KJiM0MzsJdHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTsKJiM0MzsJaWYgKCF0aW1lc3BlYzY0X3ZhbGlkKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogV3JpdGUgYWRqdXN0ZWQgVG9EIGJhY2sgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHMKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTsKJiM0MzsJaWYgKCFyYykKJiM0MzsJCXpsZGV2LSZndDtjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAmIzQzOy0xcykKJiM0MzsgKgomIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YQomIzQzOyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpCiYjNDM7ewomIzQzOwlzNjQgdGllX2RhdGE7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCSAgWkxfRFBMTF9USUVfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqLwomIzQzOwl0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQlaTF9EUExMX1RJRV9DVFJMX09QX1dSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb24KJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXAKJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzCiYjNDM7ICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZQomIzQzOyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsCiYjNDM7CQkJICAgIGJvb2wgdG9kX3N0ZXApCiYjNDM7ewomIzQzOwl1OCBjdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsCiYjNDM7CQkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsCiYjNDM7CQkJICAgICAgIHN0ZXBfY3ljbGVzKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJY3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfAomIzQzOwkgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7CiYjNDM7CWlmICh0b2Rfc3RlcCkKJiM0MzsJCWN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmUKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAppbmRleCBkYzljNmQ5NWJkZWU3Li45ZGM1YTNmMTk5MWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCkBAIC01LDEwICYjNDM7NSwxMiBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdGRkZWYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtyZWdzLmgmIzM0OwogCiYjNDM7c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wOwogc3RydWN0IHpsMzA3M3hfZGV2OwogCiAvKioKQEAgLTE2LDYgJiM0MzsxOCw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldjsKICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWUKICAqIEBtb2RlX3JlZnNlbDogbW9kZSBhbmQgcmVmZXJlbmNlIHNlbGVjdGlvbiByZWdpc3RlciB2YWx1ZQogICogQHJlZl9wcmlvOiByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzICg0IGJpdHMgcGVyIHJlZiwgUC9OIHBhY2tlZCkKJiM0MzsgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sKICAqIEBtb25fc3RhdHVzOiBtb25pdG9yIHN0YXR1cyByZWdpc3RlciB2YWx1ZQogICogQHJlZnNlbF9zdGF0dXM6IHJlZmVyZW5jZSBzZWxlY3Rpb24gc3RhdHVzIHJlZ2lzdGVyIHZhbHVlCiAgKiBAZGZfb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlIGluIDJeLTQ4IHN0ZXBzCkBAIC0yNiw2ICYjNDM7MjksOSBAQCBzdHJ1Y3QgemwzMDczeF9jaGFuIHsKIAkJdTgJbW9kZV9yZWZzZWw7CiAJCXU4CXJlZl9wcmlvW1pMMzA3M1hfTlVNX1JFRlMgLyAyXTsKIAkpOwomIzQzOwlzdHJ1Y3RfZ3JvdXAoaW52LCAvKiBJbnZhcmlhbnRzICovCiYjNDM7CQl1MTYJb3V0X3N0ZXBfdGltZV9tYXNrOwomIzQzOwkpOwogCXN0cnVjdF9ncm91cChzdGF0LAogCQl1OAltb25fc3RhdHVzOwogCQl1OAlyZWZzZWxfc3RhdHVzOwpAQCAtNDIsNiAmIzQzOzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LAogaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpOwogaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpOwogCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCSAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTsKJiM0MzsKJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpOwomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlCiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCkBAIC0yMDAsNiAmIzQzOzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQogCXJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlCiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQomIzQzOyAqCiYjNDM7ICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8CiYjNDM7CQl6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHkKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIzMyw0ICYjNDM7MjY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIEZJRUxEX0dFVChaTF9EUExMX1JFRlNFTF9TVEFUVVNfUkVGU0VMLCBjaGFuLSZndDtyZWZzZWxfc3RhdHVzKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFzawomIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKJiM0MzsgKiBAb3V0OiBvdXRwdXQgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggb3V0KQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKGNoYW4tJmd0O291dF9zdGVwX3RpbWVfbWFzayAmYW1wOyBCSVQob3V0KSk7CiYjNDM7fQomIzQzOwogI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCmluZGV4IDdmNWFmYWFhZTYzNDIuLmIyZjlmYzk3ZmQxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTEwMzMsNiAmIzQzOzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTIuLjJkYzgzNmQwYzhmNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC03MSw2ICYjNDM7NzcsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwppbmRleCAwNDg4YWU2YWM0ODZjLi4zMjA4NTJkZmM1OGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29udGFpbmVyX29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwpAQCAtMTMsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcHJpbnRmLmgmZ3Q7CiAKQEAgLTQxLDYgJiM0Mzs0Myw3IEBACiAgKiBAcGhhc2Vfb2Zmc2V0OiBsYXN0IHNhdmVkIHBpbiBwaGFzZSBvZmZzZXQKICAqIEBmcmVxX29mZnNldDogbGFzdCBzYXZlZCBmcmFjdGlvbmFsIGZyZXF1ZW5jeSBvZmZzZXQKICAqIEBtZWFzdXJlZF9mcmVxOiBsYXN0IHNhdmVkIG1lYXN1cmVkIGZyZXF1ZW5jeQomIzQzOyAqIEBwZXJvdXRfaWR4OiBQVFAgcGVyb3V0IGNoYW5uZWwgaW5kZXgsIG9yIC0xIGlmIG5vdCBwZXJvdXQtZWxpZ2libGUKICAqLwogc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKQEAgLTU4LDYgJiM0Mzs2MSw3IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHsKIAlzNjQJCQlwaGFzZV9vZmZzZXQ7CiAJczY0CQkJZnJlcV9vZmZzZXQ7CiAJdTMyCQkJbWVhc3VyZWRfZnJlcTsKJiM0MzsJczgJCQlwZXJvdXRfaWR4OwogfTsKIAogLyoKQEAgLTkzNSwyMSAmIzQzOzkzOSwxNyBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCiB9CiAKIHN0YXRpYyBpbnQKLXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKLQkJCQkgICAgICB2b2lkICpwaW5fcHJpdiwKLQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsCi0JCQkJICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LAotCQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0MztfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwKJiM0MzsJCQkJCXU2NCBmcmVxdWVuY3kpCiB7Ci0Jc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2OwogCXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7CiAJY29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoOwogCXUzMiBuZXdfZGl2LCBzeW50aF9mcmVxOwogCXN0cnVjdCB6bDMwNzN4X291dCBvdXQ7CiAJdTggb3V0X2lkOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiAKIAlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKIAlvdXQgPSAqemwzMDczeF9vdXRfc3RhdGVfZ2V0KHpsZGV2LCBvdXRfaWQpOwpAQCAtMTAxMCw2ICYjNDM7MTAxMCwyMSBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCiAJcmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCAmYW1wO291dCk7CiB9CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7emwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAomIzQzOwkJCQkgICAgICB2b2lkICpwaW5fcHJpdiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLAomIzQzOwkJCQkgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbl9wcml2LAomIzQzOwkJCQkJCSAgICAgICBmcmVxdWVuY3kpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQKIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKIAkJCQkJIHZvaWQgKnBpbl9wcml2LApAQCAtMTYwNyw2ICYjNDM7MTYyMiw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsCiAJcGluLSZndDtkcGxsID0gemxkcGxsOwogCXBpbi0mZ3Q7ZGlyID0gZGlyOwogCXBpbi0mZ3Q7aWQgPSBpZDsKJiM0MzsJcGluLSZndDtwZXJvdXRfaWR4ID0gLTE7CiAKIAlyZXR1cm4gcGluOwogfQpAQCAtMTYyNSw2ICYjNDM7MTY0MSw0NCBAQCB6bDMwNzN4X2RwbGxfcGluX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbikKIAlrZnJlZShwaW4pOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQgLSBjaGVjayBpZiBvdXRwdXQgcGluIGlzIHBlcm91dC1lbGlnaWJsZQomIzQzOyAqIEBwaW46IERQTEwgcGluIHRvIGNoZWNrCiYjNDM7ICogQHByb3BzOiBwaW4gcHJvcGVydGllcyAoYWxyZWFkeSBmZXRjaGVkIGJ5IGNhbGxlcikKJiM0MzsgKgomIzQzOyAqIEFuIG91dHB1dCBwaW4gaXMgZWxpZ2libGUgZm9yIFBUUCBwZXJpb2RpYyBvdXRwdXQgaWYgaXQgaXMgc2luZ2xlLWVuZGVkCiYjNDM7ICogKG5vdCBkaWZmZXJlbnRpYWwpIGFuZCBzdXBwb3J0cyAxIEh6IGluIGl0cyBmcmVxdWVuY3kgbGlzdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBlbGlnaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wKJiM0Mzt6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X3Bpbl9wcm9wcyAqcHJvcHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBwaW4tJmd0O2RwbGw7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CXU4IG91dF9pZDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi0mZ3Q7aWQpOwomIzQzOwlpZiAoemwzMDczeF9kZXZfb3V0X2lzX2RpZmYoemxkcGxsLSZndDtkZXYsIG91dF9pZCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY2hhbiwgb3V0X2lkKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHByb3BzLSZndDtkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChwcm9wcy0mZ3Q7ZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZFtpXS5taW4gPT0gMSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBwaW4KICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW4KQEAgLTE2NjYsNiAmIzQzOzE3MjAsOCBAQCB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sIHUzMiBpbmRleCkKIAkJaWYgKHBpbi0mZ3Q7cHJpbyA9PSBaTF9EUExMX1JFRl9QUklPX05PTkUpCiAJCQkvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqLwogCQkJcGluLSZndDtwcmlvID0gWkxfRFBMTF9SRUZfUFJJT19NQVg7CiYjNDM7CX0gZWxzZSBpZiAoemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQocGluLCBwcm9wcykpIHsKJiM0MzsJCXBpbi0mZ3Q7cGVyb3V0X2lkeCA9IHpsZHBsbC0mZ3Q7cHRwX2luZm8ubl9wZXJfb3V0JiM0MzsmIzQzOzsKIAl9CiAKIAkvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovCkBAIC0xODk2LDYgJiM0MzsxOTUyLDggQEAgemwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCXU4IGlkLCBpbmRleDsKIAlpbnQgcmM7CiAKJiM0MzsJemxkcGxsLSZndDtwdHBfaW5mby5uX3Blcl9vdXQgPSAwOwomIzQzOwogCS8qIFByb2Nlc3MgaW5wdXQgcGlucyAqLwogCWZvciAoaW5kZXggPSAwOyBpbmRleCAmbHQ7IFpMMzA3M1hfTlVNX1BJTlM7IGluZGV4JiM0MzsmIzQzOykgewogCQkvKiBGaXJzdCBpbnB1dCBwaW5zIGFuZCB0aGVuIG91dHB1dCBwaW5zICovCkBAIC0yMjc1LDQ1ICYjNDM7MjMzMyw0NDcgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldikKIAlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX1NZTlRIX1BIQVNFX1NISUZUX0NUUkwsIDB4MDEpOwogfQogCiYjNDM7LyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogJiM0MzstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi8KJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESgkxMDAwMDAwMAomIzQzOwogLyoqCi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQotICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXIKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVycwomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lCiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmcKICAqCi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsIGZhbHNlLCB0cywgc3RzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXQKICAqCi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCi1zdHJ1Y3QgemwzMDczeF9kcGxsICoKLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKQogewotCXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwogCi0JemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7Ci0JaWYgKCF6bGRwbGwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwogCi0JemxkcGxsLSZndDtkZXYgPSB6bGRldjsKLQl6bGRwbGwtJmd0O2lkID0gY2g7Ci0JbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDt6bGRwbGwtJmd0O3BpbnMpOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgKnRzKTsKJiM0Mzt9CiAKLQlyZXR1cm4gemxkcGxsOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbAomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQywKJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpCiYjNDM7ICoKJiM0MzsgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoCiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzCiYjNDM7ICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uCiYjNDM7ICoKJiM0MzsgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluCiYjNDM7ICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHMKJiM0MzsgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nCiYjNDM7ICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9ECiYjNDM7ICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGUKJiM0MzsgKiBsb3dlc3QtSUQgc3ludGgmIzM5O3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwKJiM0MzsJCQkJCSAgICAgICBzNjQgZGVsdGEpCiYjNDM7ewomIzQzOwl1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoOwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluOwomIzQzOwl1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7CiYjNDM7CWJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTsKJiM0MzsJczMyIHN0ZXBfY3ljbGVzOwomIzQzOwl1MzIgc3ludGhfZnJlcTsKJiM0MzsJaW50IHJjOwomIzQzOwl1OCBpOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi8KJiM0MzsJCWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCQlmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTsKJiM0MzsKJiM0MzsJCWlmICghc3ludGhfbWFza1tpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqLwomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLAomIzQzOwkJCQkJICAgICAhdG9kX3N0ZXBwZWQpOwomIzQzOwkJaWYgKHJjKSB7CiYjNDM7CQkJaWYgKHRvZF9zdGVwcGVkKSB7CiYjNDM7CQkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkgJiMzNDtQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwkJdG9kX3N0ZXBwZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlCiYjNDM7CSAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS4KJiM0MzsJICovCiYjNDM7CWlmICghdG9kX3N0ZXBwZWQpIHsKJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIDAsCiYjNDM7CQkJCQkgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQotICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKICAqCi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoJmd0Oz0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9ECiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvcgomIzQzOyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksCiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLgomIzQzOyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kCiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KLXZvaWQKLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSkKIHsKLQlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJYm9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgdHM7CiYjNDM7CWludCByYzsKIAotCW11dGV4X2Rlc3Ryb3koJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCWtmcmVlKHpsZHBsbCk7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJLyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqLwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pICZhbXA7JmFtcDsKJiM0MzsJICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpOwomIzQzOwomIzQzOwkvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kCiYjNDM7CSAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtCiYjNDM7CSAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuCiYjNDM7CSAqLwomIzQzOwlpZiAoYWJzKGRlbHRhKSAmZ3Q7PSBOU0VDX1BFUl9TRUMpIHsKJiM0MzsJCXMzMiByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQl0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCAmYW1wO3JlbWFpbmRlcik7CiYjNDM7CQl0cy50dl9uc2VjID0gMDsKJiM0MzsJCWRlbHRhID0gcmVtYWluZGVyOwomIzQzOwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwgdHMpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXNlY19hZGp1c3RlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQkvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqLwomIzQzOwkJaWYgKCFkZWx0YSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqLwomIzQzOwlpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLSZndDtpZCwgZGVsdGEpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCSAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpOwomIzQzOwomIzQzOwkvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFjawomIzQzOwkgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm4KJiM0MzsJICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmQKJiM0MzsJICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3QKJiM0MzsJICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuCiYjNDM7CSAqLwomIzQzOwlpZiAocmMgJmFtcDsmYW1wOyBzZWNfYWRqdXN0ZWQpIHsKJiM0MzsJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3kKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNikKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24mIzM5O3Qgc3VwcG9ydCBUSUUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHMzMgomIzQzO3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZCkKJiM0Mzt7CiYjNDM7CS8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gJiM0MzstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFcKJiM0MzsJICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4gLSBmaW5kIHBpbiBieSBwZXJvdXQgY2hhbm5lbCBpbmRleAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbAomIzQzOyAqIEBpZHg6IHBlcm91dCBjaGFubmVsIGluZGV4IHRvIGZpbmQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgcGluLCBvciBOVUxMIGlmIG5vdCBmb3VuZAomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqCiYjNDM7emwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBpbnQgaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sICZhbXA7emxkcGxsLSZndDtwaW5zLCBsaXN0KSB7CiYjNDM7CQlpZiAocGluLSZndDtwZXJvdXRfaWR4ID09IGlkeCkKJiM0MzsJCQlyZXR1cm4gcGluOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnMKJiM0MzsgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlCiYjNDM7ICoKJiM0MzsgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLgomIzQzOyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZwomIzQzOyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsJdW5zaWduZWQgaW50IGlkeDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAocnEtJmd0O3R5cGUgIT0gUFRQX0NMS19SRVFfUEVST1VUKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZHggPSBycS0mZ3Q7cGVyb3V0LmluZGV4OwomIzQzOwlpZiAoaWR4ICZndDs9IGluZm8tJmd0O25fcGVyX291dCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBUb2dnbGluZyBvdXRwdXQgcGlucyBjYW4gcHJvZHVjZSBydW50IHB1bHNlcywgc28gZGlzYWJsZQomIzQzOwkgKiBpcyBhIG5vLW9wLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFvbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBPbmx5IGFjY2VwdCBleGFjdGx5IDFQUFMgKHBlcmlvZC5zZWMgPT0gMSwgbnNlYyA9PSAwKSAqLwomIzQzOwlpZiAocnEtJmd0O3Blcm91dC5wZXJpb2Quc2VjICE9IDEgfHwgcnEtJmd0O3Blcm91dC5wZXJpb2QubnNlYyAhPSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlwaW4gPSB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3Bpbih6bGRwbGwsIGlkeCk7CiYjNDM7CWlmICghcGluKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovCiYjNDM7CWlmICh6bDMwNzN4X2Rldl9vdXRwdXRfcGluX2ZyZXFfZ2V0KHpsZHBsbC0mZ3Q7ZGV2LCBwaW4tJmd0O2lkKSA9PSAxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW4sIDEpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJZHBsbF9waW5fY2hhbmdlX250ZihwaW4tJmd0O2RwbGxfcGluKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHsKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzOwkubWF4X2Fkagk9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESiwKJiM0MzsJLmdldHRpbWV4NjQJPSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsCiYjNDM7CS5zZXR0aW1lNjQJPSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCwKJiM0MzsJLmFkanRpbWUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsCiYjNDM7CS5hZGpmaW5lCT0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLAomIzQzOwkuYWRqcGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLAomIzQzOwkuZ2V0bWF4cGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLAomIzQzOwkuZW5hYmxlCQk9IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvcgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJc3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrOwomIzQzOwomIzQzOwlzbnByaW50Zih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUpLAomIzQzOwkJICYjMzQ7emwzMDczeC1kcGxsJXUmIzM0OywgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO3psZHBsbC0mZ3Q7cHRwX2luZm8sIHpsZGV2LSZndDtkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHsKJiM0MzsJCWRldl9lcnIoemxkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcbiYjMzQ7LAomIzQzOwkJCXpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTsKJiM0MzsJfQomIzQzOwomIzQzOwl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IHB0cF9jbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtJmd0O3B0cF9jbG9jaykpIHsKJiM0MzsJCXB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsJCXpsZHBsbC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJfQogfQogCiAvKioKQEAgLTIzOTgsNiAmIzQzOzI4NTgsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICoKJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKgomIzQzO3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsKJiM0MzsJemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7CiYjNDM7CWlmICghemxkcGxsKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7CiYjNDM7CXpsZHBsbC0mZ3Q7aWQgPSBjaDsKJiM0MzsJemxkcGxsLSZndDtwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsZHBsbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqLwomIzQzO3ZvaWQKJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJa2ZyZWUoemxkcGxsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnMKICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQpAQCAtMjQyOCw2ICYjNDM7MjkzMCwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NDEsNyAmIzQzOzI5NTAsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogdm9pZAogemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogewotCS8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi8KJiM0MzsJemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7CiAJemwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NvcmUuaCYjMzQ7CiAKQEAgLTIyLDYgJiM0MzsyMyw4IEBACiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKQogICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXMKICAqIEBwaW5zOiBsaXN0IG9mIHBpbnMKJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpCiAgKi8KIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CkBAIC0zNiw2ICYjNDM7MzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAllbnVtIGRwbGxfdHlwZQkJCXR5cGU7CiAJZW51bSBkcGxsX2xvY2tfc3RhdHVzCQlsb2NrX3N0YXR1czsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlwaW5zOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8JCXB0cF9pbmZvOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrCQkqcHRwX2Nsb2NrOwogfTsKIAogc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAppbmRleCBiNzBlYWQ3ZDQ0OTViLi40NDc3NTdlOTk4NDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQAogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01ECQkJR0VOTUFTSygyLCAwKQogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JCQk0CiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMCQkJWkxfUkVHKDUsIDB4MzAsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QCQkJR0VOTUFTSygyLCAwKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUgkJCTQKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0sJCVpMX1JFRyg1LCAweDMxLCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCA4LCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU0JCQlCSVQoNCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01ECQkJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFoJMQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVAk4CiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWgk5CiYjNDM7CiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTAkJCVpMX1JFRyg1LCAweDUwLCAxKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SCQlHRU5NQVNLKDcsIDQpCkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YQomIzQzOyAqCiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LAomIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkJCQkJCVwKQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBACiAJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNCkKICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTglTNjRfTUlOCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzQJCQlaTF9SRUcoNywgMHgwQywgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzQJCQlaTF9SRUcoNywgMHgxMiwgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180CQkJWkxfUkVHKDcsIDB4MTgsIDQpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjEsNiAmIzQzOzI1Niw4IEBACiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTAkJR0VOTUFTSyg2LCA0KQogCiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLCQlaTF9SRUcoOSwgMHgzNiwgMikKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMTYsNiAmIzQzOzM1MywyNSBAQAogI2RlZmluZSBaTF9SRUdfT1VUUFVUX0VTWU5DX1dJRFRICQlaTF9SRUcoMTQsIDB4MTgsIDQpCiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfQ09NUAkJWkxfUkVHKDE0LCAweDIwLCA0KQogCiYjNDM7LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiYjNDM7ICogUmVnaXN0ZXIgUGFnZSA5LCBPdXRwdXQgUGhhc2UgU3RlcAomIzQzOyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMCQlaTF9SRUcoOSwgMHgzOCwgMSkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTAkJR0VOTUFTSyg2LCA0KQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUAlCSVQoMykKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORQkwCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUCTEKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRAkyCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFCTMKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIJCVpMX1JFRyg5LCAweDM5LCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0sJCVpMX1JFRyg5LCAweDNhLCAyKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEJCVpMX1JFRyg5LCAweDNjLCA0KQomIzQzOwogLyoKICAqIFJlZ2lzdGVyIFBhZ2UgMjU1IC0gSFcgcmVnaXN0ZXJzIGFjY2VzcwogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzYxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBQVFAgQ2xvY2sgUGF0Y2ggaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgUFRQIGNsb2NrIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoYGRyaXZlcnMvZHBsbC96bDMwNzN4L2ApLiBJdCBsb29rcyBzb2xpZDogYWRkcyB0aGUgYFBUUF8xNTg4X0NMT0NLYCBkZXBlbmRlbmN5IGluIGBLY29uZmlnYCwgdGhlIG5lY2Vzc2FyeSBUb0QgZnVuY3Rpb25zLCBwaGFzZS9mcmVxdWVuY3kgYWRqdXN0bWVudCwgYW5kIGhhbmRsZXMgdGhlIDFQUFMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZSBQVFAgY2xvY2sgdmlhIGBwdHBfY2xvY2tfcmVnaXN0ZXJgIHNvIG5vdyB0aGUgcXVlc3Rpb24gaXMgY2FuIEkgcmVhY2ggaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQuIFRoZSBkcml2ZXIgdGFyZ2V0cyBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNvbm5lY3RlZCB2aWEgSTJDIG9yIFNQSS4gTG9va2luZyBhdCB0aGUgYEtjb25maWdgIGZvciB0aGUgZHJpdmVyLCBpdCBjb25maXJtcyBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGFzIG9wdGlvbnMuIE5vdywgSSBrbm93IEkyQyBhbmQgU1BJIGRldmljZXMgYXJlIGEgZnJlcXVlbnQgdGFyZ2V0IGZvciBzeXprYWxsZXIuCgpJIHJlbWVtYmVyIHN5emthbGxlciBjYW4gb2Z0ZW4gaGFuZGxlIHRoZXNlIHZpYSBwc2V1ZG8tc3lzY2FsbHMgb3IgYnkgaW5qZWN0aW5nIEkyQy9TUEkgdHJhZmZpYy4gSG93ZXZlciwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZ2VuZXJpYyBkZXZpY2UgaW5zdGFudGlhdGlvbi4gU3l6a2FsbGVyIHVzdWFsbHkgaXNuJiMzOTt0IGdyZWF0IGF0IGluc3RhbnRpYXRpbmcgKmFyYml0cmFyeSogSTJDL1NQSSBkZXZpY2VzIHVubGVzcyB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IGRlc2NyaWJlZCBpbiBhIHN5eiBkZXNjcmlwdGlvbiwgb3IgaWYgdGhleSYjMzk7cmUgaGFuZGxlZCB2aWEgZGV2aWNlIHRyZWUgb3Igc3lzZnMuIFdhaXQsIGRpZG4mIzM5O3QgSSBjb21lIGFjcm9zcyBhIHdheSB0byBkbyB0aGF0IGluIHRoZSBwYXN0Li4uIEFoIHllcywgSSBjYW4gaW5zdGFudGlhdGUgSTJDIGRldmljZXMgdmlhIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYCBvciBzaW1pbGFyLCBvciBwb3RlbnRpYWxseSB2aWEgbmV0bGluayBpZiBpdCYjMzk7cyBhIG5ldCBkZXZpY2UuIFRoaXMgaXMgYSBEUExMIGRldmljZSB0aG91Z2guIFNvIGl0IHdpbGwgbmVlZCB0byBiZSBwcm9iZWQgdmlhIEkyQy4KClRoaW5raW5nIG1vcmUgYWJvdXQgdGhpcywgSSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgRFBMTCBzdWJzeXN0ZW0gdmlhIG5ldGxpbmsgKEdlbmVyaWMgTmV0bGluayBgZHBsbGApLiBUaGUgdHJpY2t5IHBhcnQgaXMgdGhlIGRldmljZSBpdHNlbGYg4oCTIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgcHJvYmUgdGhpcyBJMkMvU1BJIGRldmljZT8gRG9lcyBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X2kyY19zZXR1cGA/IE5vLCB0aGF0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdXNlZCBmb3Igc2V0dXAgcHVycG9zZXMsIEkgaGF2ZSB0byBmaW5kIGEgd2F5IHRvIG1ha2UgdGhlIGRyaXZlciBwcm9iZSB0aGUgZGV2aWNlLiBJdCBoYXMgYGkyYy1kZXZgLCB3aGljaCBwcm92aWRlcyBhIHVzZXItc3BhY2UgaW50ZXJmYWNlIHRvIGFuIEkyQyBidXMsIGJ1dCBpdCBkb2VzbiYjMzk7dCBwcm9iZSB0aGUga2VybmVsIGRyaXZlci4KCk9rYXksIHdhaXQgYSBzZWNvbmQuIEkgcmVtZW1iZXIgbm93OiBzeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIGJ5IHdyaXRpbmcgdG8gYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0lZC9uZXdfZGV2aWNlYC4gVGhhdCBjb3VsZCBiZSB0aGUga2V5ISBJIHNob3VsZCBjaGVjayB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgYWxyZWFkeSBhdmFpbGFibGUgZm9yIERQTEwgb3IgSTJDIGluc3RhbnRpYXRpb24uIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ2MDEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdD03Nz1wYXJhbWV0ZXJzLCBpbmZvIHZlcnNpb25zLCBhbmQgb3RoZXIgZmVhdHVyZXMgaXQgc3VwcG9ydHMuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0LTEwNC0gICB0aS1jcHN3LXN3aXRjaFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0OjEwNTogICB6bDMwNzN4XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3QtMy09PT09PT09PT09PT09PT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q6NDp6bDMwNzN4IGRldmxpbmsgc3VwcG9ydFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3QtNS09PT09PT09PT09PT09PT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3QtNi1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0Ojc6VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRldmxpbmsgZmVhdHVyZXMgaW1wbGVtZW50ZWQgYnkgdGhlIGBgemwzMDczeGBgXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdC04LWRldmljZSBkcml2ZXIuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q9MjQ9SW5mbyB2ZXJzaW9uc1xuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTI2LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q6Mjc6VGhlIGBgemwzMDczeGBgIGRyaXZlciByZXBvcnRzIHRoZSBmb2xsb3dpbmcgdmVyc2lvbnNcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTI4LVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0PTUzPUZsYXNoIFVwZGF0ZVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTU1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q6NTY6VGhlIGBgemwzMDczeGBgIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGZsYXNoIHVwZGF0ZSB1c2luZyB0aGVcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTU3LWBgZGV2bGluay1mbGFzaGBgIGludGVyZmFjZS4gSXQgc3VwcG9ydHMgdXBkYXRpbmcgdGhlIGRldmljZSBmbGFzaCB1c2luZyBhXG4tLVxuTUFJTlRBSU5FUlM9MTc4NjA9RjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kcGxsL21pY3JvY2hpcCx6bDMwNzMxLnlhbWxcbk1BSU5UQUlORVJTOjE3ODYxOkY6XHRkcml2ZXJzL2RwbGwvemwzMDczeC9cbk1BSU5UQUlORVJTLTE3ODYyLVxuLS1cbmRyaXZlcnMvZHBsbC9LY29uZmlnPTExPWNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXG4tLVxuZHJpdmVycy9kcGxsL0tjb25maWctMjUtXG5kcml2ZXJzL2RwbGwvS2NvbmZpZzoyNjpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9kcGxsL0tjb25maWctMjctXG4tLVxuZHJpdmVycy9kcGxsL01ha2VmaWxlPTk9ZHBsbC15ICAgICAgICAgICAgICAgICAgJiM0Mzs9IGRwbGxfbmwub1xuZHJpdmVycy9kcGxsL01ha2VmaWxlLTEwLVxuZHJpdmVycy9kcGxsL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19aTDMwNzNYKVx0JiM0Mzs9IHpsMzA3M3gvXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0zPWNvbmZpZyBaTDMwNzNYXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoxNTpcdCAgd2lsbCBiZSBjYWxsZWQgemwzMDczeC5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTE3PWNvbmZpZyBaTDMwNzNYX0kyQ1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjYtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoyNzpcdCAgYmUgY2FsbGVkIHpsMzA3M3hfaTJjLlxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yOC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mjk9Y29uZmlnIFpMMzA3M1hfU1BJXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zOC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM5Olx0ICBiZSBjYWxsZWQgemwzMDczeF9zcGkuXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtMi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1pMMzA3M1gpXHRcdCYjNDM7PSB6bDMwNzN4Lm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjQ6emwzMDczeC1vYmpzXHRcdFx0Oj0gY2hhbi5vIGNvcmUubyBkZXZsaW5rLm8gZHBsbC5vXHRcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNS1cdFx0XHRcdCAgIGZsYXNoLm8gZncubyBvdXQubyBwcm9wLm8gcmVmLm8gc3ludGgub1xuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1pMMzA3M1hfSTJDKVx0JiM0Mzs9IHpsMzA3M3hfaTJjLm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjg6emwzMDczeF9pMmMtb2Jqc1x0XHQ6PSBpMmMub1xuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtOS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19aTDMwNzNYX1NQSSlcdCYjNDM7PSB6bDMwNzN4X3NwaS5vXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZToxMTp6bDMwNzN4X3NwaS1vYmpzXHRcdDo9IHNwaS5vXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE0OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUgLSB1cGRhdGUgRFBMTCBjaGFubmVsIHN0YXR1cyBmcm9tIEhXXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwOmludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxLXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMjpcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMy1cdHU2NCB2YWw7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX01PTl9TVEFUVVMoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3LVx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2Vtb25fc3RhdHVzKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzE6XHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfUkVGU0VMX1NUQVRVUyhpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzItXHRcdFx0ICAgICBcdTAwMjZjaGFuLVx1MDAzZXJlZnNlbF9zdGF0dXMpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zOC1cdCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5Olx0aWYgKCF6bDMwNzN4X2NoYW5faXNfbG9ja2VkKGNoYW4pKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDA6XHRcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxLVx0XHRcdGNoYW4tXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDU6XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00Ni1cdFx0XHRcdCAgWkxfRFBMTF9ERl9SRUFEX1NFTSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTE6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyLVx0XHRcdCAgICAgIFpMX0RQTExfREZfUkVBRF9TRU0gfCBaTF9EUExMX0RGX1JFQURfUkVGX09GU1QpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NjpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU3LVx0XHRcdFx0ICBaTF9EUExMX0RGX1JFQURfU0VNLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MjpcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGluZGV4KSwgXHUwMDI2dmFsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02My1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzEtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NzI6ICogemwzMDczeF9jaGFuX25jb19tb2RlX3NldCAtIHN3aXRjaCBEUExMIGNoYW5uZWwgdG8gTkNPIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo3MzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzQtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODItICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6ODM6aW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODQte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjg1Olx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg2LVx0dTggcHJldl9tb2RlLCBkZl9yZWFkO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04OS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5MDpcdHByZXZfbW9kZSA9IHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05MS1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTYtXHRpZiAocHJldl9tb2RlID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9GUkVFUlVOKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTc6XHRcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBaTF9EUExMX01PREVfUkVGU0VMX01PREVfTkNPKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05OC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5OTpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAwLVx0XHRcdFx0ICAgICAgY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAxLVx0XHRpZiAocmMpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMDI6XHRcdFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIHByZXZfbW9kZSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAzLVx0XHRcdHJldHVybiByYztcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIwLVx0XHQgIEZJRUxEX1BSRVAoWkxfRFBMTF9ERl9SRUFEX0NNRCwgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTIxOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSwgZGZfcmVhZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTMxOlx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9OQ08pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzMjpcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzMy1cdFx0XHQgICAgICBjaGFuLVx1MDAzZW1vZGVfcmVmc2VsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzQtXHRpZiAocmMpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzU6XHRcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBwcmV2X21vZGUpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzNi1cdFx0cmV0dXJuIHJjO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNDctXHQgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNDg6XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChpbmRleCksIFx1MDAyNnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTQ5LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2MS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjI6ICogemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoIC0gZmV0Y2ggRFBMTCBjaGFubmVsIHN0YXRlIGZyb20gaGFyZHdhcmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2NC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3Jcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTcwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3MTppbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Mi17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTczOlx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3NC1cdGludCByYywgaTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTc2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX0NUUkwoaW5kZXgpLCBcdTAwMjZjaGFuLVx1MDAzZWN0cmwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Ny1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc5LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4MDpcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTgxLVx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4NS1cdGRldl9kYmcoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtEUExMJXUgbW9kZTogJXUsIHJlZjogJXVcXG5cJiMzNDssIGluZGV4LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4NjpcdFx0emwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pLCB6bDMwNzN4X2NoYW5fcmVmX2dldChjaGFuKSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTg3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4ODpcdHJjID0gemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZSh6bGRldiwgaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4OS1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTk1LVx0ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTk2Olx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOTctXHRcdGNoYW4tXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjAwLVx0XHRcJiMzNDtEUExMJXUgbG9ja19zdGF0ZTogJXUsIGhvOiAldSwgc2VsX3N0YXRlOiAldSwgc2VsX3JlZjogJXVcXG5cJiMzNDssXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAxOlx0XHRpbmRleCwgemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0KGNoYW4pLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMjpcdFx0emwzMDczeF9jaGFuX2lzX2hvX3JlYWR5KGNoYW4pID8gMSA6IDAsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAzOlx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDQ6XHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwNjpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMDctXHRcdFx0ICAgICAgXHUwMDI2Y2hhbi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTMtXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMTQ6XHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjE1LVx0XHRcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMjAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNoYW4tXHUwMDNlcmVmX3ByaW8pOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIyMTpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1JFRl9QUklPKGkpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIyMi1cdFx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2VyZWZfcHJpb1tpXSk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzMC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMzE6ICogemwzMDczeF9jaGFuX3N0YXRlX2dldCAtIGdldCBjdXJyZW50IERQTEwgY2hhbm5lbCBzdGF0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzMjogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMzLSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGdldCBzdGF0ZSBmb3Jcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjM2LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzNzpjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjM4LVx0XHRcdFx0XHRcdCAgdTggaW5kZXgpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI0My0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNDQ6ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjUyLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI1MzpzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTQte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjU5Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI2MC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjcxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI3MjpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzMtXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjc4LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI3OTogKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI4MDogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yODEtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjg5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5MDpzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5MS17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjkyOlx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTMtXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5Ni0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyOTc6ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjk4OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5OS0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDMtICpcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDQ6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDUtICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDYtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzA3OmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzA4LVx0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyMS1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzIyOlx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjMtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyNi1cdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMyNzpcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjgtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMzE6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMzNjpcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFx1MDAyNnNlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM3LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDAtXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzQxOlx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1MS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTI6ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU0LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1Ni0gKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM1NzogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1OC0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1OS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjA6aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzYxLVx0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjUtXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM2NjpcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzY3LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjktXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzcwOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzcxLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzMtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc0Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc1LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc4Olx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc5LVx0XHRcdFx0ICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgyLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM4MzogKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM4NDogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODUtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzkyLSAqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzkzOiAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk0LSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk1LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5NjppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk3LVx0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDAzLVx0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDA0Olx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MDUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwOC1cdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDk6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxMC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI2LVx0LyogV3JpdGUgYWRqdXN0ZWQgVG9EIGJhY2sgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0Mjc6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MjgtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzMC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MzE6XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDMyLX1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDM0LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQzNTogKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MzY6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDM3LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0MS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NDI6aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0My17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0NS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NDY6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0Ny1cdGlmICghcmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ1My0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTQ6ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDYzLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ2NDppbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ2NS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ3MS1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDcyOlx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDczLVx0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDgxOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDgyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDg1Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODYtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4OC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0ODk6XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDkwLVx0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ5My0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0OTQ6ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0OTU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDk2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MDY6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNy1cdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNS1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUxNjpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNy1cdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTIxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUyMjpcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyMy1cdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTI3Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjgtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MzE6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0MTpcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQyLX1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQ0LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0NTogKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQ2OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDctICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gc2V0IHN0YXRlIGZvclxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NTYtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTU3OmludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1ODpcdFx0XHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1OS17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTYwOlx0c3RydWN0IHpsMzA3M3hfY2hhbiAqZGNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NjEtXHRpbnQgcmMsIGk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU2OC1cdGlmIChkY2hhbi1cdTAwM2VjdHJsICE9IGNoYW4tXHUwMDNlY3RybCkge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2OTpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzAtXHRcdFx0XHQgICAgICBjaGFuLVx1MDAzZWN0cmwpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzYtXHRpZiAoZGNoYW4tXHUwMDNlbW9kZV9yZWZzZWwgIT0gY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCkge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU3NzpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTc4LVx0XHRcdFx0ICAgICAgY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU5Mi1cdC8qIFJlYWQgRFBMTCBjb25maWd1cmF0aW9uIGludG8gbWFpbGJveCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU5MzpcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9SRCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01OTQtXHRcdFx0ICAgWkxfUkVHX0RQTExfTUJfTUFTSywgQklUKGluZGV4KSk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwMC1cdFx0aWYgKGRjaGFuLVx1MDAzZXJlZl9wcmlvW2ldICE9IGNoYW4tXHUwMDNlcmVmX3ByaW9baV0pIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MDE6XHRcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwMi1cdFx0XHRcdFx0ICAgICAgWkxfUkVHX0RQTExfUkVGX1BSSU8oaSksXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwOS1cdC8qIENvbW1pdCBEUExMIGNvbmZpZ3VyYXRpb24gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MTA6XHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fV1IsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjExLVx0XHRcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xMz1zdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTQ6c3RydWN0IHpsMzA3M3hfZGV2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3OiAqIHN0cnVjdCB6bDMwNzN4X2NoYW4gLSBEUExMIGNoYW5uZWwgc3RhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOC0gKiBAY3RybDogRFBMTCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI1LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjI2OnN0cnVjdCB6bDMwNzN4X2NoYW4ge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI3LVx0c3RydWN0X2dyb3VwKGNmZyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDEtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDI6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDM6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ0LVx0XHRcdFx0XHRcdCB1OCBpbmRleCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDU6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDY6XHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDg6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ5OmludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01MC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1MTppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUyLVx0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTMtXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTQ6aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTUtXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjU2OmludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ny1cdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjU4OmludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01OS1cdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTYwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYxOmludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NjM6aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjUtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NjY6ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTY3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9NzE9c3RhdGljIGlubGluZSBzNjRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo3Mjp6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTczLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzctLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Nzg6ICogemwzMDczeF9jaGFuX21vZGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTc5LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtODItICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6ODM6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04NC17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTg4LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjg5OiAqIHpsMzA3M3hfY2hhbl9yZWZfZ2V0IC0gZ2V0IG1hbnVhbGx5IHNlbGVjdGVkIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTkwLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTMtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6OTQ6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTk1LXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTktLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTAwOiAqIHpsMzA3M3hfY2hhbl9tb2RlX3NldCAtIHNldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDEtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDMtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTA0OnN0YXRpYyBpbmxpbmUgdm9pZCB6bDMwNzN4X2NoYW5fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggbW9kZSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDUte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDktLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTEwOiAqIHpsMzA3M3hfY2hhbl9yZWZfc2V0IC0gc2V0IG1hbnVhbGx5IHNlbGVjdGVkIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExMS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExMy0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMTQ6c3RhdGljIGlubGluZSB2b2lkIHpsMzA3M3hfY2hhbl9yZWZfc2V0KHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IHJlZilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTUte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTktLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTIwOiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQgLSBnZXQgcmVmZXJlbmNlIHByaW9yaXR5XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTIxLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTI2PXN0YXRpYyBpbmxpbmUgdThcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMjc6emwzMDczeF9jaGFuX3JlZl9wcmlvX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCByZWYpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTI4LXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTM3LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEzODogKiB6bDMwNzN4X2NoYW5fcmVmX3ByaW9fc2V0IC0gc2V0IHJlZmVyZW5jZSBwcmlvcml0eVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzOS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1OTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGVzZSB0aGluZ3MgYXJlIHR5cGljYWxseSBpbnN0YW50aWF0ZWQgdXNpbmcgSTJDIG9yIFNQSSBjb21tdW5pY2F0aW9uIHByb3RvY29scy4gU3RhbmRhcmQgZmFyZS4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYHN5emthbGxlcmAgYmVpbmcgYWJsZSB0byBpbnN0YW50aWF0ZSBJMkMgZGV2aWNlcyBkaXJlY3RseSB1c2luZyB0aGUgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0lZC9uZXdfZGV2aWNlYCBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSByZWxldmFudCBmb3IgZnV6emluZyBhbmQgdGVzdGluZyB0aGlzIGRyaXZlci4KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwbHksIGlzIHRvIHF1aWNrbHkgY2hlY2sgd2hldGhlciB0aGlzIGRyaXZlciB1dGlsaXplcyB0aGUgc3RhbmRhcmQgYGkyY19kcml2ZXJgIGFuZCBgc3BpX2RyaXZlcmAgaW5mcmFzdHJ1Y3R1cmUuIElmIGl0IGRvZXMsIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBpcyBjb3JyZWN0IGFuZCB0aGVzZSBpbnRlcmZhY2VzIGNhbiBsaWtlbHkgYmUgbGV2ZXJhZ2VkLCBwb3RlbnRpYWxseSBieSBzeXprYWxsZXIuIElmIG5vdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBoYXJkd2FyZSBhY2Nlc3MgbW9yZSBjbG9zZWx5LiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIHRoZSBjYXNlLCBhbmQgaXMgdGhlIG1vcmUgbGlrZWx5IGFuc3dlciwgYnV0IEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIHNpbXBsZXIgcGF0aCwgYmVjYXVzZSBpdCBwcm92aWRlcyBhIGdvb2Qgb3ZlcnZpZXcgZm9yIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pMmNfZHJpdmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MjI3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZW51bWVyYXRpb24ucnN0PTMxMD1pbnB1dCBkcml2ZXI6OlxuLS1cbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9lbnVtZXJhdGlvbi5yc3QtMzI4LVx0fTtcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9lbnVtZXJhdGlvbi5yc3Q6MzI5Olx0bW9kdWxlX2kyY19kcml2ZXIobXB1MzA1MF9pMmNfZHJpdmVyKTtcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9lbnVtZXJhdGlvbi5yc3QtMzMwLVxuLS1cbkRvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cy5yc3Q9MjI5PWRyaXZlciBtb2R1bGUgaXMgdXN1YWxseSBlbm91Z2guXG4tLVxuRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzLnJzdC0yNDQtXG5Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMucnN0OjI0NTogIFRoZSBtb2R1bGVfaTJjX2RyaXZlcigpIG1hY3JvIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSBhYm92ZSBjb2RlLlxuRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzLnJzdC0yNDYtXG5Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMucnN0OjI0NzogIG1vZHVsZV9pMmNfZHJpdmVyKGZvb19kcml2ZXIpO1xuRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzLnJzdC0yNDgtXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21jdV9tcGM4MzQ5ZW1pdHguYz0yMTQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1jdV9kcml2ZXIgPSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21jdV9tcGM4MzQ5ZW1pdHguYy0yMjMtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWN1X21wYzgzNDllbWl0eC5jOjIyNDptb2R1bGVfaTJjX2RyaXZlcihtY3VfZHJpdmVyKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tY3VfbXBjODM0OWVtaXR4LmMtMjI1LVxuLS1cbmRyaXZlcnMvYXV4ZGlzcGxheS9odDE2azMzLmM9NzcwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBodDE2azMzX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2F1eGRpc3BsYXkvaHQxNmszMy5jLTc3OC19O1xuZHJpdmVycy9hdXhkaXNwbGF5L2h0MTZrMzMuYzo3Nzk6bW9kdWxlX2kyY19kcml2ZXIoaHQxNmszM19kcml2ZXIpO1xuZHJpdmVycy9hdXhkaXNwbGF5L2h0MTZrMzMuYy03ODAtXG4tLVxuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmM9MzY4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsY2Qyc19pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYXV4ZGlzcGxheS9sY2Qycy5jLTM3Ni19O1xuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmM6Mzc3Om1vZHVsZV9pMmNfZHJpdmVyKGxjZDJzX2kyY19kcml2ZXIpO1xuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmMtMzc4LVxuLS1cbmRyaXZlcnMvYXV4ZGlzcGxheS9tYXg2OTU5LmM9MTc1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg2OTU5X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9hdXhkaXNwbGF5L21heDY5NTkuYy0xODQtfTtcbmRyaXZlcnMvYXV4ZGlzcGxheS9tYXg2OTU5LmM6MTg1Om1vZHVsZV9pMmNfZHJpdmVyKG1heDY5NTlfaTJjX2RyaXZlcik7XG5kcml2ZXJzL2F1eGRpc3BsYXkvbWF4Njk1OS5jLTE4Ni1cbi0tXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1iX2Rldl9pbnQuYz0zNjk9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlwbWJfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2hhci9pcG1pL2lwbWJfZGV2X2ludC5jLTM3Ny19O1xuZHJpdmVycy9jaGFyL2lwbWkvaXBtYl9kZXZfaW50LmM6Mzc4Om1vZHVsZV9pMmNfZHJpdmVyKGlwbWJfZHJpdmVyKTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWJfZGV2X2ludC5jLTM3OS1cbi0tXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYz01NzQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlwbWlfaXBtYl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9pcG1iLmMtNTgzLX07XG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYzo1ODQ6bW9kdWxlX2kyY19kcml2ZXIoaXBtaV9pcG1iX2RyaXZlcik7XG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYy01ODUtXG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYz0xMjU2PWt1bml0X3Rlc3Rfc3VpdGUoc3NpZl9ibWNfdGVzdF9zdWl0ZSk7XG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYy0xMjU4LVxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYzoxMjU5Om1vZHVsZV9pMmNfZHJpdmVyKHNzaWZfYm1jX2RyaXZlcik7XG5kcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2JtYy5jLTEyNjAtXG4tLVxuZHJpdmVycy9jaGFyL3RwbS9zdDMzenAyNC9pMmMuYz0xNTY9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHN0MzN6cDI0X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9jaGFyL3RwbS9zdDMzenAyNC9pMmMuYy0xNjctXG5kcml2ZXJzL2NoYXIvdHBtL3N0MzN6cDI0L2kyYy5jOjE2ODptb2R1bGVfaTJjX2RyaXZlcihzdDMzenAyNF9pMmNfZHJpdmVyKTtcbmRyaXZlcnMvY2hhci90cG0vc3QzM3pwMjQvaTJjLmMtMTY5LVxuLS1cbmRyaXZlcnMvY2hhci90cG0vdHBtX2kyY19hdG1lbC5jPTIxNz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2F0bWVsX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfYXRtZWwuYy0yMjctXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfYXRtZWwuYzoyMjg6bW9kdWxlX2kyY19kcml2ZXIoaTJjX2F0bWVsX2RyaXZlcik7XG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfYXRtZWwuYy0yMjktXG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmM9NzIwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0cG1fdGlzX2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmMtNzMwLVxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmM6NzMxOm1vZHVsZV9pMmNfZHJpdmVyKHRwbV90aXNfaTJjX2RyaXZlcik7XG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfaW5maW5lb24uYy03MzItTU9EVUxFX0FVVEhPUihcJiMzNDtQZXRlciBIdWV3ZSBcdTAwM2NwZXRlci5odWV3ZUBpbmZpbmVvbi5jb21cdTAwM2VcJiMzNDspO1xuLS1cbmRyaXZlcnMvY2hhci90cG0vdHBtX2kyY19udXZvdG9uLmM9NjQ1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfbnV2b3Rvbl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX251dm90b24uYy02NTUtXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfbnV2b3Rvbi5jOjY1Njptb2R1bGVfaTJjX2RyaXZlcihpMmNfbnV2b3Rvbl9kcml2ZXIpO1xuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX251dm90b24uYy02NTctXG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyYy5jPTM5Mz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBtX3Rpc19pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmMuYy00MDItfTtcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmMuYzo0MDM6bW9kdWxlX2kyY19kcml2ZXIodHBtX3Rpc19pMmNfZHJpdmVyKTtcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmMuYy00MDQtXG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyY19jcjUwLmM9ODIzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjcjUwX2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyY19jcjUwLmMtODMzLVxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyY19jcjUwLmM6ODM0Om1vZHVsZV9pMmNfZHJpdmVyKGNyNTBfaTJjX2RyaXZlcik7XG5kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXNfaTJjX2NyNTAuYy04MzUtXG4tLVxuZHJpdmVycy9jbGsvY2xrLWNkY2U3MDYuYz02ODc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNkY2U3MDZfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstY2RjZTcwNi5jLTY5NC19O1xuZHJpdmVycy9jbGsvY2xrLWNkY2U3MDYuYzo2OTU6bW9kdWxlX2kyY19kcml2ZXIoY2RjZTcwNl9pMmNfZHJpdmVyKTtcbmRyaXZlcnMvY2xrL2Nsay1jZGNlNzA2LmMtNjk2LVxuLS1cbmRyaXZlcnMvY2xrL2Nsay1jZGNlOTI1LmM9ODQ2PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjZGNlOTI1X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstY2RjZTkyNS5jLTg1My19O1xuZHJpdmVycy9jbGsvY2xrLWNkY2U5MjUuYzo4NTQ6bW9kdWxlX2kyY19kcml2ZXIoY2RjZTkyNV9kcml2ZXIpO1xuZHJpdmVycy9jbGsvY2xrLWNkY2U5MjUuYy04NTUtXG4tLVxuZHJpdmVycy9jbGsvY2xrLWNzMjAwMC1jcC5jPTYyMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY3MyMDAwX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstY3MyMDAwLWNwLmMtNjMzLVxuZHJpdmVycy9jbGsvY2xrLWNzMjAwMC1jcC5jOjYzNDptb2R1bGVfaTJjX2RyaXZlcihjczIwMDBfZHJpdmVyKTtcbmRyaXZlcnMvY2xrL2Nsay1jczIwMDAtY3AuYy02MzUtXG4tLVxuZHJpdmVycy9jbGsvY2xrLW1heDk0ODUuYz0zODA9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDk0ODVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay1tYXg5NDg1LmMtMzg4LX07XG5kcml2ZXJzL2Nsay9jbGstbWF4OTQ4NS5jOjM4OTptb2R1bGVfaTJjX2RyaXZlcihtYXg5NDg1X2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstbWF4OTQ4NS5jLTM5MC1cbi0tXG5kcml2ZXJzL2Nsay9jbGstcmVuZXNhcy1wY2llLmM9NDE0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciByczlfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay1yZW5lc2FzLXBjaWUuYy00MjItfTtcbmRyaXZlcnMvY2xrL2Nsay1yZW5lc2FzLXBjaWUuYzo0MjM6bW9kdWxlX2kyY19kcml2ZXIocnM5X2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstcmVuZXNhcy1wY2llLmMtNDI0LVxuLS1cbmRyaXZlcnMvY2xrL2Nsay1zaTUxNC5jPTM5Mz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2k1MTRfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay1zaTUxNC5jLTQwMC19O1xuZHJpdmVycy9jbGsvY2xrLXNpNTE0LmM6NDAxOm1vZHVsZV9pMmNfZHJpdmVyKHNpNTE0X2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstc2k1MTQuYy00MDItXG4tLVxuZHJpdmVycy9jbGsvY2xrLXNpNTIxeHguYz0zODQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTIxeHhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay1zaTUyMXh4LmMtMzkyLX07XG5kcml2ZXJzL2Nsay9jbGstc2k1MjF4eC5jOjM5Mzptb2R1bGVfaTJjX2RyaXZlcihzaTUyMXh4X2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstc2k1MjF4eC5jLTM5NC1cbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1MzQxLmM9MTg0Nz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2k1MzQxX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1MzQxLmMtMTg1NS19O1xuZHJpdmVycy9jbGsvY2xrLXNpNTM0MS5jOjE4NTY6bW9kdWxlX2kyY19kcml2ZXIoc2k1MzQxX2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstc2k1MzQxLmMtMTg1Ny1cbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1MzUxLmM9MTcxMT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2k1MzUxX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1MzUxLmMtMTcxOC19O1xuZHJpdmVycy9jbGsvY2xrLXNpNTM1MS5jOjE3MTk6bW9kdWxlX2kyY19kcml2ZXIoc2k1MzUxX2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstc2k1MzUxLmMtMTcyMC1cbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1NDQuYz00OTc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTQ0X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1NDQuYy01MDQtfTtcbmRyaXZlcnMvY2xrL2Nsay1zaTU0NC5jOjUwNTptb2R1bGVfaTJjX2RyaXZlcihzaTU0NF9kcml2ZXIpO1xuZHJpdmVycy9jbGsvY2xrLXNpNTQ0LmMtNTA2LVxuLS1cbmRyaXZlcnMvY2xrL2Nsay1zaTU3MC5jPTUyMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2k1NzBfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay1zaTU3MC5jLTUzMC19O1xuZHJpdmVycy9jbGsvY2xrLXNpNTcwLmM6NTMxOm1vZHVsZV9pMmNfZHJpdmVyKHNpNTcwX2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstc2k1NzAuYy01MzItXG4tLVxuZHJpdmVycy9jbGsvY2xrLXZlcnNhY2xvY2szLmM9MTE1Nz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdmMzX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazMuYy0xMTYzLX07XG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazMuYzoxMTY0Om1vZHVsZV9pMmNfZHJpdmVyKHZjM19kcml2ZXIpO1xuZHJpdmVycy9jbGsvY2xrLXZlcnNhY2xvY2szLmMtMTE2NS1cbi0tXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazUuYz0xMzQwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB2YzVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNS5jLTEzNDktfTtcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNS5jOjEzNTA6bW9kdWxlX2kyY19kcml2ZXIodmM1X2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazUuYy0xMzUxLVxuLS1cbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNy5jPTEzMDI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHZjN19pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNy5jLTEzMTAtfTtcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNy5jOjEzMTE6bW9kdWxlX2kyY19kcml2ZXIodmM3X2kyY19kcml2ZXIpO1xuZHJpdmVycy9jbGsvY2xrLXZlcnNhY2xvY2s3LmMtMTMxMi1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz00OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU1LX07XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1Njptb2R1bGVfaTJjX2RyaXZlcih6bDMwNzN4X2kyY19kcml2ZXIpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTctXG4tLVxuZHJpdmVycy9leHRjb24vZXh0Y29uLWxjODI0MjA2eGEuYz00ODM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxjODI0MjA2eGFfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1sYzgyNDIwNnhhLmMtNDkwLVxuZHJpdmVycy9leHRjb24vZXh0Y29uLWxjODI0MjA2eGEuYzo0OTE6bW9kdWxlX2kyY19kcml2ZXIobGM4MjQyMDZ4YV9kcml2ZXIpO1xuZHJpdmVycy9leHRjb24vZXh0Y29uLWxjODI0MjA2eGEuYy00OTItXG4tLVxuZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDE0NTI2LmM9Mjg4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXgxNDUyNl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDE0NTI2LmMtMjk2LX07XG5kcml2ZXJzL2V4dGNvbi9leHRjb24tbWF4MTQ1MjYuYzoyOTc6bW9kdWxlX2kyY19kcml2ZXIobWF4MTQ1MjZfZHJpdmVyKTtcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1tYXgxNDUyNi5jLTI5OC1cbi0tXG5kcml2ZXJzL2V4dGNvbi9leHRjb24tcHRuNTE1MC5jPTQwMT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcHRuNTE1MF9pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1wdG41MTUwLmMtNDA5LX07XG5kcml2ZXJzL2V4dGNvbi9leHRjb24tcHRuNTE1MC5jOjQxMDptb2R1bGVfaTJjX2RyaXZlcihwdG41MTUwX2kyY19kcml2ZXIpO1xuZHJpdmVycy9leHRjb24vZXh0Y29uLXB0bjUxNTAuYy00MTEtXG4tLVxuZHJpdmVycy9mc2kvZnNpLW1hc3Rlci1pMmNyLmM9MzAyPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNyX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2ZzaS9mc2ktbWFzdGVyLWkyY3IuYy0zMTAtXG5kcml2ZXJzL2ZzaS9mc2ktbWFzdGVyLWkyY3IuYzozMTE6bW9kdWxlX2kyY19kcml2ZXIoaTJjcl9kcml2ZXIpXG5kcml2ZXJzL2ZzaS9mc2ktbWFzdGVyLWkyY3IuYy0zMTItXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tYWRucC5jPTUxND1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRucF9pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWFkbnAuYy01MjEtfTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWFkbnAuYzo1MjI6bW9kdWxlX2kyY19kcml2ZXIoYWRucF9pMmNfZHJpdmVyKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWFkbnAuYy01MjMtXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tZHM0NTIwLmM9NjI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRzNDUyMF9ncGlvX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1kczQ1MjAuYy02OS19O1xuZHJpdmVycy9ncGlvL2dwaW8tZHM0NTIwLmM6NzA6bW9kdWxlX2kyY19kcml2ZXIoZHM0NTIwX2dwaW9fZHJpdmVyKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWRzNDUyMC5jLTcxLVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWZ4bDY0MDguYz0xNTg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGZ4bDY0MDhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWZ4bDY0MDguYy0xNjYtfTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWZ4bDY0MDguYzoxNjc6bW9kdWxlX2kyY19kcml2ZXIoZnhsNjQwOF9kcml2ZXIpO1xuZHJpdmVycy9ncGlvL2dwaW8tZnhsNjQwOC5jLTE2OC1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1ndy1wbGQuYz0xMjM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGd3X3BsZF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tZ3ctcGxkLmMtMTMwLX07XG5kcml2ZXJzL2dwaW8vZ3Bpby1ndy1wbGQuYzoxMzE6bW9kdWxlX2kyY19kcml2ZXIoZ3dfcGxkX2RyaXZlcik7XG5kcml2ZXJzL2dwaW8vZ3Bpby1ndy1wbGQuYy0xMzItXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTU3MC5jPTE4MT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcGNhOTU3MF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTU3MC5jLTE4OC19O1xuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTU3MC5jOjE4OTptb2R1bGVfaTJjX2RyaXZlcihwY2E5NTcwX2RyaXZlcik7XG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTcwLmMtMTkwLVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXRwaWMyODEwLmM9MTIwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0cGljMjgxMF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tdHBpYzI4MTAuYy0xMjctfTtcbmRyaXZlcnMvZ3Bpby9ncGlvLXRwaWMyODEwLmM6MTI4Om1vZHVsZV9pMmNfZHJpdmVyKHRwaWMyODEwX2RyaXZlcik7XG5kcml2ZXJzL2dwaW8vZ3Bpby10cGljMjgxMC5jLTEyOS1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby10czQ5MDAuYz0xODM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRzNDkwMF9ncGlvX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby10czQ5MDAuYy0xOTAtfTtcbmRyaXZlcnMvZ3Bpby9ncGlvLXRzNDkwMC5jOjE5MTptb2R1bGVfaTJjX2RyaXZlcih0czQ5MDBfZ3Bpb19kcml2ZXIpO1xuZHJpdmVycy9ncGlvL2dwaW8tdHM0OTAwLmMtMTkyLVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXdhdmVzaGFyZS1kc2kuYz0xOTc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdhdmVzaGFyZV9ncGlvX3JlZ3VsYXRvcl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8td2F2ZXNoYXJlLWRzaS5jLTIwNC1cbmRyaXZlcnMvZ3Bpby9ncGlvLXdhdmVzaGFyZS1kc2kuYzoyMDU6bW9kdWxlX2kyY19kcml2ZXIod2F2ZXNoYXJlX2dwaW9fcmVndWxhdG9yX2RyaXZlcik7XG5kcml2ZXJzL2dwaW8vZ3Bpby13YXZlc2hhcmUtZHNpLmMtMjA2LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54NjM0NS5jPTc4MD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYW54NjM0NV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng2MzQ1LmMtNzg4LX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDYzNDUuYzo3ODk6bW9kdWxlX2kyY19kcml2ZXIoYW54NjM0NV9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng2MzQ1LmMtNzkwLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54Nzh4eC5jPTEzNDc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFueDc4eHhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54Nzh4eC5jLTEzNTQtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54Nzh4eC5jOjEzNTU6bW9kdWxlX2kyY19kcml2ZXIoYW54Nzh4eF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng3OHh4LmMtMTM1Ni1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FueDc2MjUuYz0zMDA4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhbng3NjI1X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FueDc2MjUuYy0zMDE5LVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbng3NjI1LmM6MzAyMDptb2R1bGVfaTJjX2RyaXZlcihhbng3NjI1X2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FueDc2MjUuYy0zMDIxLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2hyb250ZWwtY2g3MDMzLmM9NjA0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjaDcwMzNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2hyb250ZWwtY2g3MDMzLmMtNjEzLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jaHJvbnRlbC1jaDcwMzMuYzo2MTQ6bW9kdWxlX2kyY19kcml2ZXIoY2g3MDMzX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Nocm9udGVsLWNoNzAzMy5jLTYxNS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Nyb3MtZWMtYW54NzY4OC5jPTE3NT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY3Jvc19lY19hbng3Njg4X2JyaWRnZV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jcm9zLWVjLWFueDc2ODguYy0xODMtXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Nyb3MtZWMtYW54NzY4OC5jOjE4NDptb2R1bGVfaTJjX2RyaXZlcihjcm9zX2VjX2FueDc2ODhfYnJpZGdlX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Nyb3MtZWMtYW54NzY4OC5jLTE4NS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDYyNjMuYz05MTg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGl0NjI2M19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2MjYzLmMtOTI1LX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDYyNjMuYzo5MjY6bW9kdWxlX2kyY19kcml2ZXIoaXQ2MjYzX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDYyNjMuYy05MjctXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmM9MzY2Nz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXQ2NTA1X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMtMzY3OC1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jOjM2Nzk6bW9kdWxlX2kyY19kcml2ZXIoaXQ2NTA1X2kyY19kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMtMzY4MC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY2MTIxLmM9MTcyNz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXQ2NjEyMV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NjEyMS5jLTE3MzYtXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY2MTIxLmM6MTczNzptb2R1bGVfaTJjX2RyaXZlcihpdDY2MTIxX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY2MTIxLmMtMTczOC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ4NzEzc3guYz01ODE9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGx0ODcxM3N4X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ4NzEzc3guYy01OTEtXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ4NzEzc3guYzo1OTI6bW9kdWxlX2kyY19kcml2ZXIobHQ4NzEzc3hfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDg3MTNzeC5jLTU5My1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDg5MTJiLmM9ODI0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdDg5MTJfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ4OTEyYi5jLTgzMy19O1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODkxMmIuYzo4MzQ6bW9kdWxlX2kyY19kcml2ZXIobHQ4OTEyX2kyY19kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODkxMmIuYy04MzUtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTIxMS5jPTc4Nj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHQ5MjExX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5MjExLmMtNzk0LX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5MjExLmM6Nzk1Om1vZHVsZV9pMmNfZHJpdmVyKGx0OTIxMV9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTIxMS5jLTc5Ni1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmM9MTI0Mz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHQ5NjExX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmMtMTI1MS19O1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jOjEyNTI6bW9kdWxlX2kyY19kcml2ZXIobHQ5NjExX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmMtMTI1My1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM9OTA5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdDk2MTF1eGNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYy05MTgtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYzo5MTk6bW9kdWxlX2kyY19kcml2ZXIobHQ5NjExdXhjX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtOTIwLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYz0zMzI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHB0bjM0NjBfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYy0zNDAtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYzozNDE6bW9kdWxlX2kyY19kcml2ZXIocHRuMzQ2MF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ueHAtcHRuMzQ2MC5jLTM0Mi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYz01Mzg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBzODYyMl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjIyLmMtNTQ2LX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYzo1NDc6bW9kdWxlX2kyY19kcml2ZXIocHM4NjIyX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYy01NDgtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmM9NzM5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwczg2NDBfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFyYWRlLXBzODY0MC5jLTc0Ni19O1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmM6NzQ3Om1vZHVsZV9pMmNfZHJpdmVyKHBzODY0MF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmMtNzQ4LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jPTEyNDU9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpaTkwMnhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jLTEyNTMtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jOjEyNTQ6bW9kdWxlX2kyY19kcml2ZXIoc2lpOTAyeF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zaWk5MDJ4LmMtMTI1NS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpaTkyMzQuYz05NTM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpaTkyMzRfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTIzNC5jLTk2Mi1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTIzNC5jOjk2Mzptb2R1bGVfaTJjX2RyaXZlcihzaWk5MjM0X2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpaTkyMzQuYy05NjQtTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1NpbGljb24gSW1hZ2UgU0lJOTIzNCBIRE1JL01ITCBicmlkZ2UgZHJpdmVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpbC1zaWk4NjIwLmM9MjM3OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2lpODYyMF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zaWwtc2lpODYyMC5jLTIzODctXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpbC1zaWk4NjIwLmM6MjM4ODptb2R1bGVfaTJjX2RyaXZlcihzaWk4NjIwX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpbC1zaWk4NjIwLmMtMjM4OS1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7U2lsaWNvbiBJbWFnZSBTaUk4NjIwIEhETUkvTUhMIGJyaWRnZSBkcml2ZXJcJiMzNDspO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjcuYz0yNjI1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0YzM1ODc2N19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2Ny5jLTI2MzMtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjcuYzoyNjM0Om1vZHVsZV9pMmNfZHJpdmVyKHRjMzU4NzY3X2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY3LmMtMjYzNS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY4LmM9MTQ1Mj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGMzNTg3NjhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjguYy0xNDYwLX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY4LmM6MTQ2MTptb2R1bGVfaTJjX2RyaXZlcih0YzM1ODc2OF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2OC5jLTE0NjItXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc3NS5jPTc0Mz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGMzNTg3NzVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NzUuYy03NTEtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NzUuYzo3NTI6bW9kdWxlX2kyY19kcml2ZXIodGMzNTg3NzVfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NzUuYy03NTMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90ZGE5OTh4X2Rydi5jPTIwNjc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRkYTk5OHhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGRhOTk4eF9kcnYuYy0yMDc2LVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90ZGE5OTh4X2Rydi5jOjIwNzc6bW9kdWxlX2kyY19kcml2ZXIodGRhOTk4eF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90ZGE5OTh4X2Rydi5jLTIwNzgtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1kbHBjMzQzMy5jPTQwMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZGxwYzM0MzNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktZGxwYzM0MzMuYy00MTEtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktZGxwYzM0MzMuYzo0MTI6bW9kdWxlX2kyY19kcml2ZXIoZGxwYzM0MzNfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktZGxwYzM0MzMuYy00MTMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODMuYz0xMDg5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzbjY1ZHNpODNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTgzLmMtMTA5Ny19O1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODMuYzoxMDk4Om1vZHVsZV9pMmNfZHJpdmVyKHNuNjVkc2k4M19kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODMuYy0xMDk5LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktdGRwMTU4LmM9MTA1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0ZHAxNThfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktdGRwMTU4LmMtMTExLX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXRkcDE1OC5jOjExMjptb2R1bGVfaTJjX2RyaXZlcih0ZHAxNThfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktdGRwMTU4LmMtMTEzLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvd2F2ZXNoYXJlLWRzaS5jPTE5NT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd3NfYnJpZGdlX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3dhdmVzaGFyZS1kc2kuYy0yMDEtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvd2F2ZXNoYXJlLWRzaS5jOjIwMjptb2R1bGVfaTJjX2RyaXZlcih3c19icmlkZ2VfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvd2F2ZXNoYXJlLWRzaS5jLTIwMy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtb2xpbWV4LWxjZC1vbGludXhpbm8uYz0yNjE9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxjZF9vbGludXhpbm9fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vbGltZXgtbGNkLW9saW51eGluby5jLTI2OS1cbmRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vbGltZXgtbGNkLW9saW51eGluby5jOjI3MDptb2R1bGVfaTJjX2RyaXZlcihsY2Rfb2xpbnV4aW5vX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtb2xpbWV4LWxjZC1vbGludXhpbm8uYy0yNzEtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3NpdHJvbml4L3N0NzU3MS1pMmMuYz0xNDM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHN0NzU3MV9pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9zaXRyb25peC9zdDc1NzEtaTJjLmMtMTUyLVxuZHJpdmVycy9ncHUvZHJtL3NpdHJvbml4L3N0NzU3MS1pMmMuYzoxNTM6bW9kdWxlX2kyY19kcml2ZXIoc3Q3NTcxX2kyY19kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL3NpdHJvbml4L3N0NzU3MS1pMmMuYy0xNTQtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3NvbG9tb24vc3NkMTMweC1pMmMuYz0xMTI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNzZDEzMHhfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vc29sb21vbi9zc2QxMzB4LWkyYy5jLTEyMC19O1xuZHJpdmVycy9ncHUvZHJtL3NvbG9tb24vc3NkMTMweC1pMmMuYzoxMjE6bW9kdWxlX2kyY19kcml2ZXIoc3NkMTMweF9pMmNfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9zb2xvbW9uL3NzZDEzMHgtaTJjLmMtMTIyLVxuLS1cbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1hY3BpLmM9MTI2PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfaGlkX2FjcGlfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1hY3BpLmMtMTM4LVxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLWFjcGkuYzoxMzk6bW9kdWxlX2kyY19kcml2ZXIoaTJjX2hpZF9hY3BpX2RyaXZlcik7XG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtYWNwaS5jLTE0MC1cbi0tXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZWxhbi5jPTIxNj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZWxhbl9pMmNfaGlkX3RzX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZWxhbi5jLTIyNi19O1xuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWVsYW4uYzoyMjc6bW9kdWxlX2kyY19kcml2ZXIoZWxhbl9pMmNfaGlkX3RzX2RyaXZlcik7XG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZWxhbi5jLTIyOC1cbi0tXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZ29vZGl4LmM9MTI0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBnb29kaXhfaTJjX2hpZF90c19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWdvb2RpeC5jLTEzNC19O1xuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWdvb2RpeC5jOjEzNTptb2R1bGVfaTJjX2RyaXZlcihnb29kaXhfaTJjX2hpZF90c19kcml2ZXIpO1xuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWdvb2RpeC5jLTEzNi1cbi0tXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YuYz0xNTM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19oaWRfb2ZfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi5jLTE2Ni1cbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi5jOjE2Nzptb2R1bGVfaTJjX2RyaXZlcihpMmNfaGlkX29mX2RyaXZlcik7XG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YuYy0xNjgtXG4tLVxuZHJpdmVycy9od21vbi9hZDc0MTQuYz0yMTk9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkNzQxNF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9od21vbi9hZDc0MTQuYy0yMjctXG5kcml2ZXJzL2h3bW9uL2FkNzQxNC5jOjIyODptb2R1bGVfaTJjX2RyaXZlcihhZDc0MTRfZHJpdmVyKTtcbmRyaXZlcnMvaHdtb24vYWQ3NDE0LmMtMjI5LVxuLS1cbmRyaXZlcnMvaHdtb24vYWQ3NDE4LmM9Mjk5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZDc0MThfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvaHdtb24vYWQ3NDE4LmMtMzA3LVxuZHJpdmVycy9od21vbi9hZDc0MTguYzozMDg6bW9kdWxlX2kyY19kcml2ZXIoYWQ3NDE4X2RyaXZlcik7XG5kcml2ZXJzL2h3bW9uL2FkNzQxOC5jLTMwOS1cbi0tXG5kcml2ZXJzL2h3bW9uL2FkYzEyOGQ4MTguYz00OTQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkYzEyOF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9od21vbi9hZGMxMjhkODE4LmMtNTA1LVxuZHJpdmVycy9od21vbi9hZGMxMjhkODE4LmM6NTA2Om1vZHVsZV9pMmNfZHJpdmVyKGFkYzEyOF9kcml2ZXIpO1xuZHJpdmVycy9od21vbi9hZGMxMjhkODE4LmMtNTA3LVxuLS1cbmRyaXZlcnMvaHdtb24vYWRtMTAyNS5jPTU1Nz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRtMTAyNV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9od21vbi9hZG0xMDI1LmMtNTY3LVxuZHJpdmVycy9od21vbi9hZG0xMDI1LmM6NTY4Om1vZHVsZV9pMmNfZHJpdmVyKGFkbTEwMjVfZHJpdmVyKTtcbmRyaXZlcnMvaHdtb24vYWRtMTAyNS5jLTU2OS1cbi0tXG5kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYz0xODY1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZG0xMDI2X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYy0xODc1LVxuZHJpdmVycy9od21vbi9hZG0xMDI2LmM6MTg3Njptb2R1bGVfaTJjX2RyaXZlcihhZG0xMDI2X2RyaXZlcik7XG5kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYy0xODc3LVxuLS1cbmRyaXZlcnMvaHdtb24vYWRtMTAyOS5jPTM5MD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRtMTAyOV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9od21vbi9hZG0xMDI5LmMtNDAwLVxuZHJpdmVycy9od21vbi9hZG0xMDI5LmM6NDAxOm1vZHVsZV9pMmNfZHJpdmVyKGFkbTEwMjlfZHJpdmVyKTtcbmRyaXZlcnMvaHdtb24vYWRtMTAyOS5jLTQwMi1cbi0tXG5kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYz0xMDY0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZG0xMDMxX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYy0xMDc0LVxuZHJpdmVycy9od21vbi9hZG0xMDMxLmM6MTA3NTptb2R1bGVfaTJjX2RyaXZlcihhZG0xMDMxX2RyaXZlcik7XG5kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYy0xMDc2LVxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjIxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSB6bDMwNzN4IERyaXZlcioqCgpPa2F5LCBzbyB0aGUgemwzMDczeCBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSBrZXJuZWwgdGhyb3VnaCBgbW9kdWxlX2kyY19kcml2ZXJgIGFuZCBgbW9kdWxlX3NwaV9kcml2ZXJgLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiBlZmZlY3RpdmVseSBmdXp6IHRoZXNlIEkyQyBhbmQgU1BJIGRyaXZlcnMuIEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfaTJjX3NldHVwYCBhbmQgYHN5el9zcGlfc2V0dXBgIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBhbmQgdGhlIHN5c3RlbSBidXMgb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGluc3RhbnRpYXRlIHZpYSBzeXNmcyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAuIFdhaXQsIG5vLCBJIGp1c3QgY2hlY2tlZCB0aGUga2VybmVsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYHN5el9pMmNfc2V0dXBgIGRlZmluZWQuIEJ1dCBzeXprYWxsZXIgKmNhbiogd3JpdGUgdGhlIGRldmljZSBuYW1lIHRvIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYCwgd2hpY2ggY291bGQgd29yayBhcyB3ZWxsLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiB0aGUgZHJpdmVyIGlzIGV2ZW4gKnJlYWNoYWJsZSouIFRoZSBwYXRjaCBtb2RpZmllcyBmaWxlcyBsaWtlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNgLCBgY29yZS5jYCwgYW5kIGBkcGxsLmNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgRFBMTCBkcml2ZXIsIHdoaWNoIHN1Z2dlc3RzIGNvcmUgZnVuY3Rpb25hbCBsb2dpYyBpcyBiZWluZyBtb2RpZmllZC4gTm93LCBhIGtleSBxdWVzdGlvbjogY2FuIHRoaXMgZHJpdmVyIGV2ZW4gYmUgcmVhY2hlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIHRoZSBvbmUgc3l6a2FsbGVyIHVzZXM/IFRoZSBkcml2ZXIgaXMgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBhIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZGV2aWNlLgoKSWYgc3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSB0aGUgZHJpdmVyIHRocm91Z2ggSTJDL1NQSSwgaXQgc2hvdWxkIGJlIGFibGUgdG8gcmVhY2ggdGhlIHByb2JlIGZ1bmN0aW9uLiBUaGVuLCBJIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBkcml2ZXIgdGhyb3VnaCBEUExMIG5ldGxpbmsgYW5kIFBUUCBpb2N0bHMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBoYXJkd2FyZSBkZXBlbmRlbmN5IHRoYXQgd291bGQgcHJldmVudCB0aGUgZHJpdmVyIGZyb20gcHJvYmluZyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIHNwZWNpZmljIHJlZ2lzdGVyIGFjY2Vzc2VzIG9yIG90aGVyIGRldmljZS1zcGVjaWZpYyByZXF1aXJlbWVudHMgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bDMwNzN4X2Rldl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9OTI1PXpsMzA3M3hfZGV2bV9kcGxsX2luaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTcyLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk3MzogKiB6bDMwNzN4X2Rldl9wcm9iZSAtIGluaXRpYWxpemUgemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzQtICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3OS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODA6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTgxLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTA2MC19XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTA2MTpFWFBPUlRfU1lNQk9MX05TX0dQTCh6bDMwNzN4X2Rldl9wcm9iZSwgXCYjMzQ7WkwzMDczWFwmIzM0Oyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTA2Mi1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9MTA0PXN0cnVjdCB6bDMwNzN4X2RldiAqemwzMDczeF9kZXZtX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg6MTA1OmludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaC0xMDYtXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6MjU6XHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjYtfVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3NwaS5jPTExPXN0YXRpYyBpbnQgemwzMDczeF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zcGkuYy0yNC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3NwaS5jOjI1Olx0cmV0dXJuIHpsMzA3M3hfZGV2X3Byb2JlKHpsZGV2KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3NwaS5jLTI2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODEyMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHpsMzA3M3hfZGV2X3Byb2JlYCYjMzk7cyBSZWdpc3RlciBSZWFkaW5nKioKCkFscmlnaHQsIG15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGB6bDMwNzN4X2Rldl9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgaGFyZHdhcmUgaW50ZXJhY3Rpb24gc3RyYXRlZ3kuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQgZXhwbGljaXRseSByZWFkcyBoYXJkd2FyZSByZWdpc3RlcnMgZHVyaW5nIGl0cyBpbml0aWFsaXphdGlvbiBvciBwcm9iaW5nIHNlcXVlbmNlLiBNeSBodW5jaCBpcywgc2luY2UgdGhpcyBpcyBhIHByb2JlIGZ1bmN0aW9uLCBpdCBwcm9iYWJseSBkb2VzLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyBpdCAqdmFsaWRhdGUqIHRob3NlIHJlZ2lzdGVyIHZhbHVlcz8gRG9lcyBpdCBoYXZlIGVycm9yIGhhbmRsaW5nIGluIHBsYWNlIHRoYXQgd291bGQgcmVzdWx0IGluIGEgcHJvYmUgZmFpbHVyZSBpZiB0aGUgZXhwZWN0ZWQgcmVnaXN0ZXIgdmFsdWVzIGRvbiYjMzk7dCBtYXRjaCB3aGF0IGl0IHJlYWRzPyBUaGlzIGlzIGtleS4gVGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyB2YWxpZGF0aW9uIGxvZ2ljIHRlbGxzIG1lIGEgbG90IGFib3V0IHRoZSByb2J1c3RuZXNzIG9mIHRoZSBkcml2ZXImIzM5O3MgaGFyZHdhcmUgZGV0ZWN0aW9uIGFuZCBjb25maWd1cmF0aW9uIGFwcHJvYWNoLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb21wYXJpc29ucyBhZ2FpbnN0IGV4cGVjdGVkIHZhbHVlcywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHJlZ2lzdGVyIGNvbnRlbnRzLCBhbmQgdWx0aW1hdGVseSwgYW55IGByZXR1cm5gIHN0YXRlbWVudHMgdGhhdCBpbmRpY2F0ZSBhIHByb2JpbmcgZmFpbHVyZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBub3QgYSBibGluZCByZWFkIGFuZCBwcm9jZWVkIHNldHVwLCBzaW5jZSBhIGJsaW5kIHJlYWQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBzZXJpb3VzIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NzA6XHR9XG4gOTcxOlx0XG4gOTcyOlx0LyoqXG4gOTczOlx0ICogemwzMDczeF9kZXZfcHJvYmUgLSBpbml0aWFsaXplIHpsMzA3M3ggZGV2aWNlXG4gOTc0Olx0ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4gOTc1Olx0ICpcbiA5NzY6XHQgKiBDb21tb24gaW5pdGlhbGl6YXRpb24gb2YgemwzMDczeCBkZXZpY2Ugc3RydWN0dXJlLlxuIDk3NzpcdCAqXG4gOTc4Olx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gOTc5Olx0ICovXG4gOTgwOlx0aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gOTgxOlx0e1xuIDk4MjpcdFx0dTE2IGlkLCByZXZpc2lvbiwgZndfdmVyO1xuIDk4MzpcdFx0dW5zaWduZWQgaW50IGk7XG4gOTg0Olx0XHR1MzIgY2ZnX3ZlcjtcbiA5ODU6XHRcdGludCByYztcbiA5ODY6XHRcbiA5ODc6XHRcdC8qIFJlYWQgY2hpcCBJRCAqL1xuIDk4ODpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFx1MDAyNmlkKTtcbiA5ODk6XHRcdGlmIChyYylcbiA5OTA6XHRcdFx0cmV0dXJuIHJjO1xuIDk5MTpcdFxuIDk5MjpcdFx0LyogRGV0ZWN0IGNoaXAgdmFyaWFudCAqL1xuIDk5MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKTsgaSYjNDM7JiM0MzspIHtcbiA5OTQ6XHRcdFx0aWYgKHpsMzA3M3hfY2hpcF9pZHNbaV0uaWQgPT0gaWQpXG4gOTk1Olx0XHRcdFx0YnJlYWs7XG4gOTk2Olx0XHR9XG4gOTk3Olx0XG4gOTk4Olx0XHRpZiAoaSA9PSBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpKVxuIDk5OTpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIC1FTk9ERVYsXG4xMDAwOlx0XHRcdFx0XHQgICAgIFwmIzM0O1Vua25vd24gY2hpcCBJRDogMHglMDR4XFxuXCYjMzQ7LCBpZCk7XG4xMDAxOlx0XG4xMDAyOlx0XHR6bGRldi1cdTAwM2VpbmZvID0gXHUwMDI2emwzMDczeF9jaGlwX2lkc1tpXTtcbjEwMDM6XHRcbjEwMDQ6XHRcdC8qIFJlYWQgcmV2aXNpb24sIGZpcm13YXJlIHZlcnNpb24gYW5kIGN1c3RvbSBjb25maWcgdmVyc2lvbiAqL1xuMTAwNTpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFx1MDAyNnJldmlzaW9uKTtcbjEwMDY6XHRcdGlmIChyYylcbjEwMDc6XHRcdFx0cmV0dXJuIHJjO1xuMTAwODpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRldfVkVSLCBcdTAwMjZmd192ZXIpO1xuMTAwOTpcdFx0aWYgKHJjKVxuMTAxMDpcdFx0XHRyZXR1cm4gcmM7XG4xMDExOlx0XHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19DVVNUT01fQ09ORklHX1ZFUiwgXHUwMDI2Y2ZnX3Zlcik7XG4xMDEyOlx0XHRpZiAocmMpXG4xMDEzOlx0XHRcdHJldHVybiByYztcbjEwMTQ6XHRcbjEwMTU6XHRcdGRldl9kYmcoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtDaGlwSUQoJVgpLCBDaGlwUmV2KCVYKSwgRndWZXIoJXUpXFxuXCYjMzQ7LCBpZCxcbjEwMTY6XHRcdFx0cmV2aXNpb24sIGZ3X3Zlcik7XG4xMDE3Olx0XHRkZXZfZGJnKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q3VzdG9tIGNvbmZpZyB2ZXJzaW9uOiAlbHUuJWx1LiVsdS4lbHVcXG5cJiMzNDssXG4xMDE4Olx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDMxLCAyNCksIGNmZ192ZXIpLFxuMTAxOTpcdFx0XHRGSUVMRF9HRVQoR0VOTUFTSygyMywgMTYpLCBjZmdfdmVyKSxcbjEwMjA6XHRcdFx0RklFTERfR0VUKEdFTk1BU0soMTUsIDgpLCBjZmdfdmVyKSxcbjEwMjE6XHRcdFx0RklFTERfR0VUKEdFTk1BU0soNywgMCksIGNmZ192ZXIpKTtcbjEwMjI6XHRcbjEwMjM6XHRcdC8qIEdlbmVyYXRlIHJhbmRvbSBjbG9jayBJRCBhcyB0aGUgZGV2aWNlIGhhcyBub3Qgc3VjaCBwcm9wZXJ0eSB0aGF0XG4xMDI0Olx0XHQgKiBjb3VsZCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIEEgdXNlciBjYW4gbGF0ZXIgY2hhbmdlIHRoaXMgdmFsdWVcbjEwMjU6XHRcdCAqIHVzaW5nIGRldmxpbmsuXG4xMDI2Olx0XHQgKi9cbjEwMjc6XHRcdHpsZGV2LVx1MDAzZWNsb2NrX2lkID0gZ2V0X3JhbmRvbV91NjQoKTtcbjEwMjg6XHRcbjEwMjk6XHRcdC8qIERlZmF1bHQgcGhhc2Ugb2Zmc2V0IGF2ZXJhZ2luZyBmYWN0b3IgKi9cbjEwMzA6XHRcdHpsZGV2LVx1MDAzZXBoYXNlX2F2Z19mYWN0b3IgPSAyO1xuMTAzMTpcdFxuMTAzMjpcdFx0LyogSW5pdGlhbGl6ZSBtdXRleCBmb3Igb3BlcmF0aW9ucyB3aGVyZSBtdWx0aXBsZSByZWFkcywgd3JpdGVzXG4xMDMzOlx0XHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbjEwMzQ6XHRcdCAqL1xuMTAzNTpcdFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuMTAzNjpcdFx0aWYgKHJjKVxuMTAzNzpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuMTAzODpcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4xMDM5Olx0XHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4xMDQwOlx0XHRpZiAocmMpXG4xMDQxOlx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4xMDQyOlx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbjEwNDM6XHRcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuMTA0NDpcdFx0aWYgKHJjKVxuMTA0NTpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuMTA0NjpcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4xMDQ3Olx0XG4xMDQ4Olx0XHQvKiBSZWdpc3RlciBEUExMIGNoYW5uZWxzICovXG4xMDQ5Olx0XHRyYyA9IHpsMzA3M3hfZGV2bV9kcGxsX2luaXQoemxkZXYpO1xuMTA1MDpcdFx0aWYgKHJjKVxuMTA1MTpcdFx0XHRyZXR1cm4gcmM7XG4xMDUyOlx0XG4xMDUzOlx0XHQvKiBSZWdpc3RlciB0aGUgZGV2bGluayBpbnN0YW5jZSBhbmQgcGFyYW1ldGVycyAqL1xuMTA1NDpcdFx0cmMgPSB6bDMwNzN4X2RldmxpbmtfcmVnaXN0ZXIoemxkZXYpO1xuMTA1NTpcdFx0aWYgKHJjKVxuMTA1NjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuMTA1NzpcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bGluayBpbnN0YW5jZVxcblwmIzM0Oyk7XG4xMDU4Olx0XG4xMDU5Olx0XHRyZXR1cm4gMDtcbjEwNjA6XHR9XG4xMDYxOlx0RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFwmIzM0O1pMMzA3M1hcJiMzNDspO1xuMTA2MjpcdFxuMTA2MzpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7SXZhbiBWZWNlcmEgXHUwMDNjaXZlY2VyYUByZWRoYXQuY29tXHUwMDNlXCYjMzQ7KTtcbjEwNjQ6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWljcm9jaGlwIFpMMzA3M3ggY29yZSBkcml2ZXJcJiMzNDspO1xuMTA2NTpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTAwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvYmUgRnVuY3Rpb24mIzM5O3MgQmVoYXZpb3Igd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHByb2JlYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBzeXprYWxsZXJgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyByZWFkaW5nIGBaTF9SRUdfSURgIGFuZCBjb21wYXJpbmcgaXQgdG8gYHpsMzA3M3hfY2hpcF9pZHNgLiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGlmIGBzeXprYWxsZXJgIHRyaWVzIHRvIGluc3RhbnRpYXRlIHRoZSBJMkMgZGV2aWNlLCBpdCYjMzk7cyBnb2luZyB0byBhdHRlbXB0IGFuIEkyQyByZWFkLiBXaXRob3V0IHJlYWwgaGFyZHdhcmUsIHRoYXQgcmVhZCBpcyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGZhaWwgb3IgcmV0dXJuIGdhcmJhZ2Ug4oCTIHByb2JhYmx5IHplcm8uIEFuZCB0aGF0IG1lYW5zIHRoZSBwcm9iZSBpcyBnb2luZyB0byBmYWlsLCB3aGljaCBpc24mIzM5O3Qgd2hhdCB3ZSB3YW50LgoKSG9sZCBvbiBhIHNlY29uZC4uLiBkb2VzbiYjMzk7dCBgc3l6a2FsbGVyYCBoYXZlIHNvbWV0aGluZyBmb3Igc2V0dGluZyB1cCBJMkM/IEkgc2VlbSB0byByZWNhbGwgYSBmdW5jdGlvbiBjYWxsZWQgYHN5el9pMmNfc2V0dXBgLiBMZXQgbWUgZG91YmxlLWNoZWNrLiAqTG9va3MgaXQgdXAqLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHdoYXQgSSB3YXMgaG9waW5nIGZvci4gYHN5emthbGxlcmAgZG9lc24mIzM5O3QgaGF2ZSBhIGdlbmVyaWMgSTJDIGRldmljZSAqZW11bGF0b3IqLiBJdCBjYW4gaW5qZWN0IHRyYWZmaWMgaWYgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBwc2V1ZG8tc3lzY2FsbCwgb3IgaWYgaXQgdXNlcyBgaTJjLWRldmAgdG8gYWN0IGFzIGEgbWFzdGVyLCBidXQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBhYmxlIHRvIGVhc2lseSBlbXVsYXRlIGEgc2xhdmUgZGV2aWNlIGFuZCByZXNwb25kIHRvLCBzYXksIGEgYHpsMzA3M3hfcmVhZF91MTZgIGNhbGwuIFNvLCB3ZSYjMzk7cmUgc3RpbGwgc3R1Y2sgd2l0aCB0aGUgcG90ZW50aWFsIHByb2JlIGZhaWx1cmUuIFdlIG5lZWQgdG8gZmluZCBhIHdvcmthcm91bmQuIEJhY2sgdG8gdGhlIGRyYXdpbmcgYm9hcmQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfaTJjX3NldHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA2NzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYHN5el9zcGlfc2V0dXBgKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgc3l6X3NwaV9zZXR1cGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IElzIGl0IGEga2V5IGZ1bmN0aW9uIGluIGEgZnV6emluZyBzZXR1cD8gSXMgaXQgcmVsYXRlZCB0byBkcml2ZXIgaW5pdGlhbGl6YXRpb24/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcywgaXRzIHBhcmFtZXRlcnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFNQSSBzdWJzeXN0ZW0uIE1vcmUgc3BlY2lmaWNhbGx5LCB3aGF0IGlzIGBzeXpfYCBwcmVmaXggYW5kIHdoYXQgaXMgaXRzIHJlbGF0aW9uIHdpdGggdGhlIFNQSS4gSXMgaXQgcmVsYXRlZCB0byB0aGUga2VybmVsIG1vZHVsZT8gSXMgaXQgcmVsYXRlZCB0byB0aGUgaW50ZXJmYWNlPyBGcm9tIHRoZXJlIEkgd2FudCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gZmlndXJlcyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmFyb3VuZCogaXQuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZnVuY3Rpb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgc3RhcnQuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBwcm9ibGVtcyBjYW4gb2NjdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6X3NwaV9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTMxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVtdWxhdGluZyBJMkMgRGV2aWNlcyBmb3IgU3lzdGVtIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gdGVzdCB0aGlzIGB6bDMwNzN4YCBkZXZpY2Ugd2l0aCBzeXprYWxsZXIuIENhbiBzeXprYWxsZXIgYWN0dWFsbHkgKmVtdWxhdGUqIEkyQyBkZXZpY2VzIGVmZmVjdGl2ZWx5PyBJIGtub3cgdGhlcmUmIzM5O3MgdGhpcyBgaTJjLXN0dWJgIHRoaW5nLCBidXQgZnJvbSB3aGF0IEkgcmVjYWxsLCBpdCYjMzk7cyBwcmV0dHkgcnVkaW1lbnRhcnkuIEl0JiMzOTtzIG5vdCBnb2luZyB0byBjdXQgaXQgZm9yIGFueSBzZXJpb3VzIHByb2JpbmcsIGVzcGVjaWFsbHkgaWYgeW91IG5lZWQgc3BlY2lmaWMgcmVnaXN0ZXIgcmVhZHMgZm9yIHRoZSBwcm9iZSB0byBzdWNjZWVkLgoKUmlnaHQsIHNvLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN5emthbGxlciBkb2VzbiYjMzk7dCBwcm92aWRlIGEgZ2VuZXJhbCBtZWNoYW5pc20gdG8gZW11bGF0ZSBhcmJpdHJhcnkgSTJDIG9yIFNQSSBkZXZpY2VzIHRoYXQgcmVseSBvbiBwYXJ0aWN1bGFyIHJlZ2lzdGVyIHJlYWRzIGZvciBzdWNjZXNzZnVsIHByb2JpbmcuIFVubGVzcyB0aGVyZSYjMzk7cyBhIGN1c3RvbSBtb2NrIGRyaXZlciwgb3IgaXQmIzM5O3MgYSBVU0IgZGV2aWNlICh3aGljaCBjYW4gdXNlIHRoZSBkdW1teV9oY2QvcmF3LWdhZGdldCBhcHByb2FjaCksIGEgUENJIGRldmljZSAod2hpY2ggaXMgcHJvYmxlbWF0aWMgdW5sZXNzIGl0JiMzOTtzIGEgdmVyeSBnZW5lcmljIHR5cGUgb3IgaGFzIGEgY3VzdG9tIGVtdWxhdG9yKSwgb3IgYSBuZXR3b3JrIGRldmljZSAodHVuL3RhcCB3b3JrcyB0aGVyZSkuCgpTaW5jZSBgemwzMDczeGAgaXMgYW4gSTJDL1NQSSBkZXZpY2UsIGl0cyBwcm9iZSBmdW5jdGlvbiwgYHpsMzA3M3hfZGV2X3Byb2JlYCwgd2lsbCwgYnkgZGVmaW5pdGlvbiwgYmUgcmVhZGluZyBgWkxfUkVHX0lEYCB2aWEgSTJDIG9yIFNQSS4gSWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBhY3R1YWxseSBwcmVzZW50LCB0aGF0IHJlYWQgaXMgZWl0aGVyIGdvaW5nIHRvIGZhaWwgb3IsIGF0IGJlc3QsIHJldHVybiBzb21ldGhpbmcgbGlrZSAweGZmIG9yIDB4MDAuIEhtbSwgbmVlZCB0byBzZWUgdGhlIGV4cGVjdGVkIHZhbHVlcy4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHdoYXQgdmFsdWVzIGFyZSBleHBlY3RlZCBpbiBgemwzMDczeF9jaGlwX2lkc2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3hfY2hpcF9pZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTI1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjI2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gemwzMDczeF9jaGlwX2lkc1tdID0ge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTI3LVx0WkxfQ0hJUF9JTkZPKDB4MEUzMCwgMiwgWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyKSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9OTgwPWludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTItXHQvKiBEZXRlY3QgY2hpcCB2YXJpYW50ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTkzOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTQ6XHRcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk5NS1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk5ODpcdGlmIChpID09IEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcykpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk5LVx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIC1FTk9ERVYsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDEtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwMjpcdHpsZGV2LVx1MDAzZWluZm8gPSBcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDQwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgemwzMDczeCBEcml2ZXIgUHJvYmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgemwzMDczeGAgZHJpdmVyIGFuZCBob3cgaXQmIzM5O3MgcHJvYmVkLiBJdCBsb29rcyBsaWtlIHRoZSBjaGlwIGlkZW50aWZpY2F0aW9uIGhhcHBlbnMgdmlhIHRoZXNlIGhleCBJRHMsIHNvbWV0aGluZyBsaWtlIGAweDBFMzBgLCBhcyBJJiMzOTtkIGV4cGVjdC4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5OyBpZiB0aGUgcGh5c2ljYWwgY2hpcCBpc24mIzM5O3QgdGhlcmUsIHRoZSBgemwzMDczeF9yZWFkX3UxNmAgZnVuY3Rpb24gaXMgZ29pbmcgdG8gY3JhcCBvdXQuIEl0JiMzOTtsbCBlaXRoZXIgZmFpbCBvdXRyaWdodCwgb3IsIGV2ZW4gd29yc2UsIHJldHVybiBhIHVzZWxlc3MgdmFsdWUgbGlrZSBgMHgwMDAwYCBvciBgMHhGRkZGYCwgd2hpY2ggaXMgcHJldHR5IGNvbW1vbiBiZWhhdmlvci4gVGhpcyBsZWFkcyB0byB0aGUgcHJvYmUgZmFpbGluZyB3aXRoIGFuIGAtRU5PREVWYCBlcnJvci4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBlcnJvciBjb2RlLCBzbyBJJiMzOTttIG5vdCBzdXJwcmlzZWQgdGhlcmUuCgpUaGlzIGltbWVkaWF0ZWx5IG1lYW5zIEkgY2FuJiMzOTt0IGp1c3Qgc3BpbiB1cCBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGFuZCBleHBlY3QgdGhpcyBkcml2ZXIgdG8gbG9hZCBjbGVhbmx5LiBJIG5lZWQgdGhlIGFjdHVhbCBoYXJkd2FyZSwgb3IgYSBkZWNlbnQgZW11bGF0b3IgdG8gdHJpY2sgdGhlIGRyaXZlciBpbnRvIHRoaW5raW5nIGl0JiMzOTtzIHRoZXJlLiBIb2xkIG9uLCB0aG91Z2guLi4gaXMgdGhlcmUgYW4gSTJDIGVtdWxhdG9yIGluIHRoZSBrZXJuZWwgdGhhdCBzeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byB1c2UgdG8gZmFrZSB0aGUgZGV2aWNlIGFuZCBhbGxvdyB0aGUgZHJpdmVyIHRvIHByb2JlPyBJIGtub3cgdGhlcmUmIzM5O3MgYGkyYy1zdHViYCwgd2hpY2ggaXMga2luZCBvZiBhbiBpbnRlcmVzdGluZyBvcHRpb24sIGJ1dCBpdCBvbmx5IHN1cHBvcnRzIHJlYWxseSBiYXNpYyBTTUJ1cyBjb21tYW5kcywgYW5kIHRoZSBkZXZpY2UgYWRkcmVzc2VzIGhhdmUgdG8gYmUgY29uZmlndXJlZCBpbiBhZHZhbmNlLgoKRXZlbiBpZiBzeXprYWxsZXIgKmNvdWxkKiBsb2FkIGBpMmMtc3R1YmAsIGl0IHdvdWxkIHN0aWxsIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoaWNoIHJlZ2lzdGVyIG9mZnNldHMgdG8gd3JpdGUgdGhlIGNvcnJlY3QgY2hpcCBJRCB0byBiZWZvcmUgZXZlbiBhdHRlbXB0aW5nIHRvIHByb2JlIHRoZSBkcml2ZXIuIFRoYXQgc2VlbXMgbGlrZSBhIGJpdCBvZiBhIGNoYWxsZW5nZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGUgZHJpdmVyIGFjdHVhbGx5IHVzZXMgU01CdXMgb3IgcmF3IEkyQyB0cmFuc2ZlcnMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjaGVjay4gSSB0aGluayBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBkcml2ZXIgY29kZSBhbmQgc2VlIGlmIEkgY2FuIGZpZ3VyZSB0aGlzIG91dC4uLiBpdCYjMzk7cyBwcm9iYWJseSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoaXMgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9yZWFkX3UxNiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM9MTcxPWludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwNS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDY6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA3LVx0XHRcdCAgICAgIFx1MDAyNmNoYW4tXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9MTc4PWludCB6bDMwNzN4X3dyaXRlX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4IHZhbClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTgzLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjE4NDogKiB6bDMwNzN4X3JlYWRfdTE2IC0gcmVhZCB2YWx1ZSBmcm9tIDE2Yml0IHJlZ2lzdGVyXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTg1LSAqIEB6bGRldjogemwzMDczeCBkZXZpY2UgcG9pbnRlclxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xOTItICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTkzOmludCB6bDMwNzN4X3JlYWRfdTE2KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUxNiAqdmFsKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTE5NC17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTk4MD1pbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg3LVx0LyogUmVhZCBjaGlwIElEICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTg4Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFx1MDAyNmlkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODktXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDQtXHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDA1Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFx1MDAyNnJldmlzaW9uKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDA2LVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDctXHRcdHJldHVybiByYztcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDA4Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRldfVkVSLCBcdTAwMjZmd192ZXIpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDktXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oPTE0Nz1pbnQgemwzMDczeF9yZWFkX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4ICp2YWwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjE0ODppbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgtMTQ5LWludCB6bDMwNzN4X3JlYWRfdTMyKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUzMiAqdmFsKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM9MjU9emwzMDczeF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy0zMy1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYzozNDpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcdTAwMjZpZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtMzUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTQ0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjQ1Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFx1MDAyNnJldmlzaW9uKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy00Ni1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6NTY6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFx1MDAyNmZ3X3Zlcik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTEyMzI9emwzMDczeF9kcGxsX3RlbXBfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMjQxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEyNDI6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19ESUVfVEVNUF9TVEFUVVMsIFx1MDAyNnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTI0My1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYz03OT1pbnQgemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE1LVx0LyogUmVhZCBmcmVxdWVuY3kgcmVsYXRlZCByZWdpc3RlcnMgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jOjExNjpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFRl9GUkVRX0JBU0UsIFx1MDAyNnJlZi1cdTAwM2VmcmVxX2Jhc2UpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE3LVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE4LVx0XHRyZXR1cm4gcmM7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMTk6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfRlJFUV9NVUxULCBcdTAwMjZyZWYtXHUwMDNlZnJlcV9tdWx0KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyMC1cdGlmIChyYylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyMS1cdFx0cmV0dXJuIHJjO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM6MTIyOlx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVGX1JBVElPX00sIFx1MDAyNnJlZi1cdTAwM2VmcmVxX3JhdGlvX20pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTIzLVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTI0LVx0XHRyZXR1cm4gcmM7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMjU6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfUkFUSU9fTiwgXHUwMDI2cmVmLVx1MDAzZWZyZXFfcmF0aW9fbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjYtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYz0yMz1pbnQgemwzMDczeF9zeW50aF9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTQ1LVx0ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jOjQ2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfU1lOVEhfRlJFUV9CQVNFLCBcdTAwMjZzeW50aC1cdTAwM2VmcmVxX2Jhc2UpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy00Ny1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTUzLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYzo1NDpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1NZTlRIX0ZSRVFfTSwgXHUwMDI2c3ludGgtXHUwMDNlZnJlcV9tKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy01Ny1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmM6NTg6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19TWU5USF9GUkVRX04sIFx1MDAyNnN5bnRoLVx1MDAzZWZyZXFfbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTU5LVx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTE0MwoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiA3MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBVbnJlYWNoYWJsZSBDb2RlIGluIGEgSGFyZHdhcmUtRGVwZW5kZW50IERyaXZlcioqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgYHpsMzA3M3hgIGRyaXZlciB1c2VzIGByZWdtYXBgIGludGVybmFsbHksIHdoaWNoIG1lYW5zIHRoYXQgYHpsMzA3M3hfcmVhZF91MTZgIHdpbGwsIGluIHR1cm4sIGNhbGwgYHJlZ21hcF9yZWFkYC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGZ1enogYHJlZ21hcGAgZGV2aWNlcz8gVGhlIGFuc3dlciwgYXMgSSBzZWUgaXQsIGlzIGdlbmVyYWxseSBubywgdW5sZXNzIGEgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgZXhpc3RzIG9yIGlmIHRoZSBkZXZpY2UgaXRzZWxmIGdldHMgaW5zdGFudGlhdGVkLgoKSSByZWFsaXplIHRoYXQgYHpsMzA3M3hfZGV2X3Byb2JlYCB3aWxsIGZhaWwgZWFybHkgb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O2xsIGZhaWwgYXQgdGhlIGB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsICZhbXA7aWQpYCBjYWxsIGJlY2F1c2UgYW55IEkyQyBvciBTUEkgcmVhZCBpbiBhIHN5emthbGxlciBjb250ZXh0IHdpbGwgcmVzdWx0IGluIGEgZmFpbHVyZSBvciBqdW5rIGRhdGEgbGlrZSBgMHgwMDAwYCBvciBgMHhGRkZGYC4KCk5vdywgSSBjb25zaWRlcmVkIGBpMmMtc3R1YmAgYW5kIHdoZXRoZXIgdGhhdCBtaWdodCB3b3JrLiBJIGtub3cgdGhhdCBgaTJjLXN0dWJgIGNhbiBiZSBsb2FkZWQgd2l0aCBhIHNwZWNpZmljIGBjaGlwX2FkZHJgLCB3aGljaCB3b3VsZCBsZXQgaXQgcmVzcG9uZCB0byBJMkMgcmVhZHMuIEhvd2V2ZXIsIHN5emthbGxlciBkb2VzbiYjMzk7dCBrbm93IHRoZSBzcGVjaWZpYyBjaGlwIElELCBgWkxfUkVHX0lEYCBpcyBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgMHgwRTMwYCwgYW5kIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHJlZ2lzdGVycyB0byB3cml0ZSB0aGlzIGNoaXAgSUQgdG8sIHNvIHRoZSBjb3JyZWN0IHZhbHVlcyB3b3VsZCBub3QgYmUgd3JpdHRlbi4gVGhlIGxpa2VsaWhvb2Qgb2Ygc3l6a2FsbGVyIHJhbmRvbWx5IHdyaXRpbmcgdGhlIGNvcnJlY3QgdmFsdWVzIHRvIHJlZ2lzdGVyIGAweDAwYCBhbmQgYDB4MDFgIChvciB3aGF0ZXZlciB0aGUgZW5kaWFubmVzcyBpcyksIHRvIHNldCB0aGUgY29ycmVjdCBJRCBiZWZvcmUgYXR0ZW1wdGluZyB0byBwcm9iZSB0aGUgZHJpdmVyLCBpcyBpbmZpbml0ZXNpbWFsbHkgc21hbGwuIFBsdXMsIGBpMmMtc3R1YmAgaXNuJiMzOTt0IHN5emthbGxlciYjMzk7cyB0eXBpY2FsIGFwcHJvYWNoIGZvciBmYWtpbmcgYXJiaXRyYXJ5IGRldmljZXMsIGFuZCByZXF1aXJlcyBtb2R1bGUgcGFyYW1ldGVycyB0byBzZXQgdXAgdGhlIGFkZHJlc3Nlcy4KCkkgYWxzbyByZW1lbWJlciBgc3l6X3VzYl9jb25uZWN0YCB3aGljaCBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcywgYnV0IGhlcmUgd2UgYXJlIHRhbGtpbmcgYWJvdXQgSTJDL1NQSS4gSXQmIzM5O3MgYSBkaWZmZXJlbnQgYmVhc3QuCgpTbywgdGhlIG5leHQgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgd2F5cyB0aGlzIGNvZGUgY2FuIGJlIHJlYWNoZWQ/IE5vLiBJJiMzOTt2ZSByZWNvbmZpcm1lZCB0aGF0IHRoaXMgY29kZSByZXNpZGVzIHNvbGVseSB3aXRoaW4gdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9gIGRpcmVjdG9yeSwgYW5kIGl0JiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMuIENydWNpYWxseSwgdGhlc2UgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZXkgYXJlIHBoeXNpY2FsIGRldmljZXMuCgpOb3csIGxldCYjMzk7cyBzZWUuIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiB0aGUgZGV2aWNlLCBqdXN0IHRvIGJlIHN1cmUuIE5vcGUuIEl0JiMzOTtzIGEgcGh5c2ljYWwgRFBMTCBjaGlwLgoKTm93LCBsZXQgbWUgZ28gYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zIEkgd2FzIGdpdmVuLiBUaGV5IGV4cGxpY2l0bHkgc3RhdGUgdG8gc2V0ICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgYSBwYXRjaCBjb250YWluczoKKiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuCiogQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gUUVNVS4KClRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgSTJDL1NQSSBEUExMIGRyaXZlci4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoaXMgbWVldHMgdGhlIGNyaXRlcmlhIHBlcmZlY3RseS4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhZ2Fpbi4gSXQgbW9kaWZpZXMgZmlsZXMgbGlrZSBgY2hhbi5jYCwgYGNvcmUuY2AsIGFuZCBgZHBsbC5jYCB3aXRoaW4gdGhlIGB6bDMwNzN4YCBkcml2ZXIsIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydC4gQnV0IGJlY2F1c2UgdGhlIGRyaXZlciBpdHNlbGYgY2FuJiMzOTt0IGJlIHByb2JlZCB3aXRob3V0IHRoZSBwaHlzaWNhbCBNaWNyb2NoaXAgQXp1cml0ZSBjaGlwLCBub25lIG9mIHRoaXMgY29kZSBjYW4gYmUgZXhlY3V0ZWQgYnkgc3l6a2FsbGVyLgoKVGhlcmVmb3JlLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgY29kZSBpcyBzb2xlbHkgd2l0aGluIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCB3aGljaCBpcyBmb3IgYSBzcGVjaWZpYyBEUExMIGNoaXAgd2hpY2ggY2Fubm90IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIEkyQy9TUEkgY29ubmVjdGVkIERQTEwgZGV2aWNlcy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBJMkMvU1BJIGNvbm5lY3RlZCBEUExMIGRldmljZXMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uIHdpbGwgZmFpbCB0byByZWFkIHRoZSBleHBlY3RlZCBoYXJkd2FyZSBjaGlwIElEcywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUyOjM0Ljk0NTEzMzkyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1Mzk3NTIwMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBJMkMvU1BJIGNvbm5lY3RlZCBEUExMIGRldmljZXMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjozNC45NDUxMzg1ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzE1NzMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY0MjNlNTBlY2QwMDFjZGUyODMxODQxY2M5Y2MxOTI0NzY4YzkxYTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwMjo1MjozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcXG5AQCAtMiw3ICsyLDcgQEBcXG4gXFxuIGNvbmZpZyBaTDMwNzNYXFxuIFxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXFxcIiBpZiBDT01QSUxFX1RFU1RcXG4tXFx0ZGVwZW5kcyBvbiBORVRcXG4rXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gXFx0c2VsZWN0IERQTExcXG4gXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIFxcdHNlbGVjdCBSRUdNQVBcXG5AQCAtMTYsNyArMTYsNyBAQCBjb25maWcgWkwzMDczWFxcbiBcXG4gY29uZmlnIFpMMzA3M1hfSTJDXFxuIFxcdHRyaXN0YXRlIFxcXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVRcXG4rXFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuIFxcdHNlbGVjdCBSRUdNQVBfSTJDXFxuIFxcdHNlbGVjdCBaTDMwNzNYXFxuIFxcdGhlbHBcXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcXG4gXFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxcbiBcXHR0cmlzdGF0ZSBcXFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJXFxuK1xcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSSBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiBcXHRzZWxlY3QgUkVHTUFQX1NQSVxcbiBcXHRzZWxlY3QgWkwzMDczWFxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbmluZGV4IDRlYzJjZjUzZGFkNDYuLjUzMDMyZTc4MmZkNGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG5AQCAtMjAyLDYgKzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiBcXHRcXHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcXG4gXFx0XFx0emwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTtcXG4gXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4gXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4gXFxuIFxcdC8qIFJlYWQgRFBMTCBjb25maWd1cmF0aW9uIGZyb20gbWFpbGJveCAqL1xcbkBAIC0yMzQsNiArMjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXFxuIFxcdHJldHVybiBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICpcXG4rICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXFxuKyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xcbitcXHR1OCB0b2RfY3RybDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXFx1MDAyNnRvZF9jdHJsKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XFxuK1xcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xcbitcXG4rXFx0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXFxuKyAqXFxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcXG4rICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxcbit7XFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSB0aGUgcmVzdWx0XFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4re1xcbitcXHR1MzIgbnNlYztcXG4rXFx0dTY0IHNlYztcXG4rXFx0dTggY21kO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAobmV4dF9oeilcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXFx1MDAyNnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFxcdTAwMjZuc2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHR0cy1cXHUwMDNldHZfc2VjID0gc2VjO1xcbitcXHR0cy1cXHUwMDNldHZfbnNlYyA9IG5zZWM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAdHM6IHRpbWUgdG8gc2V0XFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxcbit7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXFxuK1xcdFxcdFxcdFxcdCAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcXG4rICpcXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXFxuKyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxcbisgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjay5cXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXFx1MDAyNnRzX25leHQsIE5VTEwpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXFx1MDAyNnRzX2N1ciwgTlVMTCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogSWYgdG9vIGNsb3NlIHRvIChvciBwYXN0KSB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQgKi9cXG4rXFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XFxuK1xcdGlmIChkaWZmLnR2X3NlYyBcXHUwMDNjIDAgfHwgKCFkaWZmLnR2X3NlYyBcXHUwMDI2XFx1MDAyNiBkaWZmLnR2X25zZWMgXFx1MDAzYyB0aHJlc2hvbGRfbnMpKSB7XFxuK1xcdFxcdGlmICghZGlmZi50dl9zZWMgXFx1MDAyNlxcdTAwMjYgZGlmZi50dl9uc2VjKVxcbitcXHRcXHRcXHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyArIDEpO1xcbitcXHRcXHR0c19uZXh0LnR2X3NlYysrO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi9cXG4rXFx0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcXG4rXFx0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFxcdTAwMjZ0c19uZXh0KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBXcml0ZSBhZGp1c3RlZCBUb0QgYmFjayBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0emxkZXYtXFx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKy0xcylcXG4rICpcXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXFxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxcbit7XFxuK1xcdHM2NCB0aWVfZGF0YTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xcbitcXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXFxuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxcbisgKlxcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdCAgICBib29sIHRvZF9zdGVwKVxcbit7XFxuK1xcdHU4IGN0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXFxuK1xcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcXG4rXFx0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcXG4rXFx0aWYgKHRvZF9zdGVwKVxcbitcXHRcXHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjlkYzVhM2YxOTkxZjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuQEAgLTUsMTAgKzUsMTIgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RkZGVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicmVncy5oXFxcIlxcbiBcXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuIFxcbiAvKipcXG5AQCAtMTYsNiArMTgsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVcXG4gICogQG1vZGVfcmVmc2VsOiBtb2RlIGFuZCByZWZlcmVuY2Ugc2VsZWN0aW9uIHJlZ2lzdGVyIHZhbHVlXFxuICAqIEByZWZfcHJpbzogcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyAoNCBiaXRzIHBlciByZWYsIFAvTiBwYWNrZWQpXFxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFza1xcbiAgKiBAbW9uX3N0YXR1czogbW9uaXRvciBzdGF0dXMgcmVnaXN0ZXIgdmFsdWVcXG4gICogQHJlZnNlbF9zdGF0dXM6IHJlZmVyZW5jZSBzZWxlY3Rpb24gc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXFxuICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHNcXG5AQCAtMjYsNiArMjksOSBAQCBzdHJ1Y3QgemwzMDczeF9jaGFuIHtcXG4gXFx0XFx0dThcXHRtb2RlX3JlZnNlbDtcXG4gXFx0XFx0dThcXHRyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07XFxuIFxcdCk7XFxuK1xcdHN0cnVjdF9ncm91cChpbnYsIC8qIEludmFyaWFudHMgKi9cXG4rXFx0XFx0dTE2XFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xcbitcXHQpO1xcbiBcXHRzdHJ1Y3RfZ3JvdXAoc3RhdCxcXG4gXFx0XFx0dThcXHRtb25fc3RhdHVzO1xcbiBcXHRcXHR1OFxcdHJlZnNlbF9zdGF0dXM7XFxuQEAgLTQyLDYgKzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XFxuK1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXFxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG5AQCAtMjAwLDYgKzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbiBcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuKyAqXFxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxcbitcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbkBAIC0yMzMsNCArMjY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuIFxcdHJldHVybiBGSUVMRF9HRVQoWkxfRFBMTF9SRUZTRUxfU1RBVFVTX1JFRlNFTCwgY2hhbi1cXHUwMDNlcmVmc2VsX3N0YXR1cyk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbisgKiBAb3V0OiBvdXRwdXQgaW5kZXhcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCBvdXQpXFxuK3tcXG4rXFx0cmV0dXJuICEhKGNoYW4tXFx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcXHUwMDI2IEJJVChvdXQpKTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5pbmRleCA3ZjVhZmFhYWU2MzQyLi5iMmY5ZmM5N2ZkMWI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbkBAIC0xMDMzLDYgKzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIFxcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxcbiBcXHQgKi9cXG4gXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2VtdWx0aW9wX2xvY2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuK1xcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXRpZV9sb2NrKTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi4yZGM4MzZkMGM4ZjZiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXFx0XFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXFx0KDUwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1xcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXFxuIFxcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xcbiBcXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XFxuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXFxuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXFxuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXFxuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXFxuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xcbkBAIC03MSw2ICs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHRcXHQqcmVnbWFwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cXHQqaW5mbztcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0bXVsdGlvcF9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHR0aWVfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGhhc2Vfc3RlcF9sb2NrO1xcbiBcXG4gXFx0LyogSW52YXJpYW50cyAqL1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWZcXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLjMyMDg1MmRmYzU4Y2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcXHUwMDNlXFxuQEAgLTEzLDYgKzE0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwcmludGYuaFxcdTAwM2VcXG4gXFxuQEAgLTQxLDYgKzQzLDcgQEBcXG4gICogQHBoYXNlX29mZnNldDogbGFzdCBzYXZlZCBwaW4gcGhhc2Ugb2Zmc2V0XFxuICAqIEBmcmVxX29mZnNldDogbGFzdCBzYXZlZCBmcmFjdGlvbmFsIGZyZXF1ZW5jeSBvZmZzZXRcXG4gICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5XFxuKyAqIEBwZXJvdXRfaWR4OiBQVFAgcGVyb3V0IGNoYW5uZWwgaW5kZXgsIG9yIC0xIGlmIG5vdCBwZXJvdXQtZWxpZ2libGVcXG4gICovXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuQEAgLTU4LDYgKzYxLDcgQEAgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xcbiBcXHRzNjRcXHRcXHRcXHRwaGFzZV9vZmZzZXQ7XFxuIFxcdHM2NFxcdFxcdFxcdGZyZXFfb2Zmc2V0O1xcbiBcXHR1MzJcXHRcXHRcXHRtZWFzdXJlZF9mcmVxO1xcbitcXHRzOFxcdFxcdFxcdHBlcm91dF9pZHg7XFxuIH07XFxuIFxcbiAvKlxcbkBAIC05MzUsMjEgKzkzOSwxNyBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG4temwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpwaW5fcHJpdixcXG4tXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4rX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IGZyZXF1ZW5jeSlcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuIFxcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4tXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiA9IHBpbl9wcml2O1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XFxuIFxcdHUzMiBuZXdfZGl2LCBzeW50aF9mcmVxO1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9vdXQgb3V0O1xcbiBcXHR1OCBvdXRfaWQ7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXFx1MDAzZWlkKTtcXG4gXFx0b3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTtcXG5AQCAtMTAxMCw2ICsxMDEwLDIxIEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4gXFx0cmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCBcXHUwMDI2b3V0KTtcXG4gfVxcbiBcXG4rc3RhdGljIGludFxcbit6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGZyZXF1ZW5jeSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnRcXG4gemwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbiBcXHRcXHRcXHRcXHRcXHQgdm9pZCAqcGluX3ByaXYsXFxuQEAgLTE2MDcsNiArMTYyMiw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsXFxuIFxcdHBpbi1cXHUwMDNlZHBsbCA9IHpsZHBsbDtcXG4gXFx0cGluLVxcdTAwM2VkaXIgPSBkaXI7XFxuIFxcdHBpbi1cXHUwMDNlaWQgPSBpZDtcXG4rXFx0cGluLVxcdTAwM2VwZXJvdXRfaWR4ID0gLTE7XFxuIFxcbiBcXHRyZXR1cm4gcGluO1xcbiB9XFxuQEAgLTE2MjUsNiArMTY0MSw0NCBAQCB6bDMwNzN4X2RwbGxfcGluX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbilcXG4gXFx0a2ZyZWUocGluKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0IC0gY2hlY2sgaWYgb3V0cHV0IHBpbiBpcyBwZXJvdXQtZWxpZ2libGVcXG4rICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2tcXG4rICogQHByb3BzOiBwaW4gcHJvcGVydGllcyAoYWxyZWFkeSBmZXRjaGVkIGJ5IGNhbGxlcilcXG4rICpcXG4rICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWRcXG4rICogKG5vdCBkaWZmZXJlbnRpYWwpIGFuZCBzdXBwb3J0cyAxIEh6IGluIGl0cyBmcmVxdWVuY3kgbGlzdC5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBib29sXFxuK3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X3Bpbl9wcm9wcyAqcHJvcHMpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gcGluLVxcdTAwM2VkcGxsO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHR1OCBvdXRfaWQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcdGlmICh6bDMwNzN4X2Rldl9vdXRfaXNfZGlmZih6bGRwbGwtXFx1MDAzZWRldiwgb3V0X2lkKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJvcHMtXFx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpKyspIHtcXG4rXFx0XFx0aWYgKHByb3BzLVxcdTAwM2VkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkW2ldLm1pbiA9PSAxKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgcGluXFxuICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW5cXG5AQCAtMTY2Niw2ICsxNzIwLDggQEAgemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLCB1MzIgaW5kZXgpXFxuIFxcdFxcdGlmIChwaW4tXFx1MDAzZXByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKVxcbiBcXHRcXHRcXHQvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqL1xcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXByaW8gPSBaTF9EUExMX1JFRl9QUklPX01BWDtcXG4rXFx0fSBlbHNlIGlmICh6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChwaW4sIHByb3BzKSkge1xcbitcXHRcXHRwaW4tXFx1MDAzZXBlcm91dF9pZHggPSB6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCsrO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovXFxuQEAgLTE4OTYsNiArMTk1Miw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0dTggaWQsIGluZGV4O1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCA9IDA7XFxuK1xcbiBcXHQvKiBQcm9jZXNzIGlucHV0IHBpbnMgKi9cXG4gXFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFxcdTAwM2MgWkwzMDczWF9OVU1fUElOUzsgaW5kZXgrKykge1xcbiBcXHRcXHQvKiBGaXJzdCBpbnB1dCBwaW5zIGFuZCB0aGVuIG91dHB1dCBwaW5zICovXFxuQEAgLTIyNzUsNDUgKzIzMzMsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIFxcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XFxuIH1cXG4gXFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cXG4rI2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREpcXHQxMDAwMDAwMFxcbitcXG4gLyoqXFxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXFxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcXG4rICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lXFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXFxuICAqXFxuLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxcbiAgKlxcbi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gICovXFxuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXFxuIHtcXG4tXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbiBcXG4tXFx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XFxuLVxcdGlmICghemxkcGxsKVxcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0emxkcGxsLVxcdTAwM2VkZXYgPSB6bGRldjtcXG4tXFx0emxkcGxsLVxcdTAwM2VpZCA9IGNoO1xcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zKTtcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQsICp0cyk7XFxuK31cXG4gXFxuLVxcdHJldHVybiB6bGRwbGw7XFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXBcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsXFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcXG4rICogICAgICAgICBOU0VDX1BFUl9TRUMpKVxcbisgKlxcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXFxuKyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwc1xcbisgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy5cXG4rICpcXG4rICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpblxcbisgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXFxuKyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRFxcbisgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzIHRoZVxcbisgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4re1xcbitcXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XFxuK1xcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcXG4rXFx0czMyIHN0ZXBfY3ljbGVzO1xcbitcXHR1MzIgc3ludGhfZnJlcTtcXG4rXFx0aW50IHJjO1xcbitcXHR1OCBpO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMsIGxpc3QpIHtcXG4rXFx0XFx0dTggb3V0X2lkLCBzeW50aF9pZDtcXG4rXFxuK1xcdFxcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRcXHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcXG4rXFx0XFx0aWYgKHN5bnRoX2lkIFxcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xcbitcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LCBcXFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBvdXRfaWQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xcbitcXHRcXHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XFxuK1xcdFxcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXFx1MDAzZWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcXG4rXFxuK1xcdFxcdC8qIFJlbWVtYmVyIGxvd2VzdC1JRCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xcbitcXHRcXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXFxuK1xcdFxcdFxcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xcbitcXG4rXFx0XFx0aWYgKCFzeW50aF9tYXNrW2ldKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xcbitcXHRcXHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xcbitcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xcbitcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0aWYgKHRvZF9zdGVwcGVkKSB7XFxuK1xcdFxcdFxcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxcbitcXHQgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cXG4rXFx0ICovXFxuK1xcdGlmICghdG9kX3N0ZXBwZWQpIHtcXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxcbi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xcbiAgKlxcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxcbisgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFxcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yXFxuKyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksXFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS5cXG4rICogSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9EXFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuICAqL1xcbi12b2lkXFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXFxuIHtcXG4tXFx0V0FSTih6bGRwbGwtXFx1MDAzZWRwbGxfZGV2LCBcXFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcXFxuXFxcIik7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFx0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XFxuK1xcdGludCByYztcXG4gXFxuLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdGtmcmVlKHpsZHBsbCk7XFxuK1xcdGlmICghZGVsdGEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XFxuK1xcbitcXHQvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kXFxuK1xcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXFxuK1xcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXFxuK1xcdCAqL1xcbitcXHRpZiAoYWJzKGRlbHRhKSBcXHUwMDNlPSBOU0VDX1BFUl9TRUMpIHtcXG4rXFx0XFx0czMyIHJlbWFpbmRlcjtcXG4rXFxuK1xcdFxcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFxcdTAwMjZyZW1haW5kZXIpO1xcbitcXHRcXHR0cy50dl9uc2VjID0gMDtcXG4rXFx0XFx0ZGVsdGEgPSByZW1haW5kZXI7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCB0cyk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0XFx0c2VjX2FkanVzdGVkID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXFxuK1xcdFxcdGlmICghZGVsdGEpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xcbitcXHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7XFxuK1xcdFxcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGRlbHRhKTtcXG4rXFx0XFx0aWYgKCFyYylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XFxuK1xcbitcXHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xcbitcXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cXG4rXFx0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcXG4rXFx0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcXG4rXFx0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXFxuK1xcdCAqL1xcbitcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgc2VjX2FkanVzdGVkKSB7XFxuK1xcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiU3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxcbisgKlxcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRzNjQgb2Zmc2V0O1xcbitcXG4rXFx0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcXG4rXFx0ICpcXG4rXFx0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxcbitcXHQgKi9cXG4rXFx0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XFxuK1xcdGlmIChvZmZzZXQgPT0gY2hhbi1cXHUwMDNlZGZfb2Zmc2V0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgb2Zmc2V0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXFxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbW9kZSBkb2Vzbid0IHN1cHBvcnQgVElFLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFxuK1xcdGlmICghZGVsdGEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzMzJcXG4remwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxcbit7XFxuK1xcdC8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gKy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xcbitcXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4gLSBmaW5kIHBpbiBieSBwZXJvdXQgY2hhbm5lbCBpbmRleFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcXG4rICogQGlkeDogcGVyb3V0IGNoYW5uZWwgaW5kZXggdG8gZmluZFxcbisgKlxcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmRcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqXFxuK3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKHBpbi1cXHUwMDNlcGVyb3V0X2lkeCA9PSBpZHgpXFxuK1xcdFxcdFxcdHJldHVybiBwaW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9lbmFibGUgLSBlbmFibGUvZGlzYWJsZSBQVFAgY2xvY2sgZnVuY3Rpb25zXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnNcXG4rICogQG9uOiB0cnVlIHRvIGVuYWJsZSwgZmFsc2UgdG8gZGlzYWJsZVxcbisgKlxcbisgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLlxcbisgKiBPbiBlbmFibGUsIGNvbmZpZ3VyZXMgdGhlIG91dHB1dCBkaXZpZGVyIGZvciAxIEh6LiBPbiBkaXNhYmxlLCBkb2VzIG5vdGhpbmdcXG4rICogYXMgdGhlIHNpZ25hbCBpcyBub3QgZGlzYWJsZWQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXHR1bnNpZ25lZCBpbnQgaWR4O1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAocnEtXFx1MDAzZXR5cGUgIT0gUFRQX0NMS19SRVFfUEVST1VUKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRpZHggPSBycS1cXHUwMDNlcGVyb3V0LmluZGV4O1xcbitcXHRpZiAoaWR4IFxcdTAwM2U9IGluZm8tXFx1MDAzZW5fcGVyX291dClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBUb2dnbGluZyBvdXRwdXQgcGlucyBjYW4gcHJvZHVjZSBydW50IHB1bHNlcywgc28gZGlzYWJsZVxcbitcXHQgKiBpcyBhIG5vLW9wLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFvbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBPbmx5IGFjY2VwdCBleGFjdGx5IDFQUFMgKHBlcmlvZC5zZWMgPT0gMSwgbnNlYyA9PSAwKSAqL1xcbitcXHRpZiAocnEtXFx1MDAzZXBlcm91dC5wZXJpb2Quc2VjICE9IDEgfHwgcnEtXFx1MDAzZXBlcm91dC5wZXJpb2QubnNlYyAhPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRwaW4gPSB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3Bpbih6bGRwbGwsIGlkeCk7XFxuK1xcdGlmICghcGluKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFscmVhZHkgYXQgMSBIeiwgbm90aGluZyB0byBkbyAqL1xcbitcXHRpZiAoemwzMDczeF9kZXZfb3V0cHV0X3Bpbl9mcmVxX2dldCh6bGRwbGwtXFx1MDAzZWRldiwgcGluLVxcdTAwM2VpZCkgPT0gMSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAoIXJjKVxcbitcXHRcXHRkcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbi1cXHUwMDNlZHBsbF9waW4pO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcXG4rXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4rXFx0Lm1heF9hZGpcXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcXG4rXFx0LmdldHRpbWV4NjRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcXG4rXFx0LnNldHRpbWU2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXFxuK1xcdC5hZGp0aW1lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXFxuK1xcdC5hZGpmaW5lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXFxuK1xcdC5hZGpwaGFzZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcXG4rXFx0LmdldG1heHBoYXNlXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxcbitcXHQuZW5hYmxlXFx0XFx0PSB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XFxuK1xcbitcXHRzbnByaW50Zih6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5hbWUpLFxcbitcXHRcXHQgXFxcInpsMzA3M3gtZHBsbCV1XFxcIiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcHRwX2luZm8sIHpsZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcXG4rXFx0XFx0ZGV2X2Vycih6bGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHR6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcXG4rXFx0fVxcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVxcdTAwM2VwdHBfY2xvY2spKSB7XFxuK1xcdFxcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4rXFx0XFx0emxkcGxsLVxcdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xcbitcXHR9XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMzk4LDYgKzI4NTgsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXFxuKyAqXFxuKyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcXG4rICovXFxuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxcbit6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xcbitcXG4rXFx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XFxuK1xcdGlmICghemxkcGxsKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHpsZHBsbC1cXHUwMDNlZGV2ID0gemxkZXY7XFxuK1xcdHpsZHBsbC1cXHUwMDNlaWQgPSBjaDtcXG4rXFx0emxkcGxsLVxcdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucyk7XFxuK1xcbitcXHRyZXR1cm4gemxkcGxsO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXFxuKyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbisgKlxcbisgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxcbisgKi9cXG4rdm9pZFxcbit6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0V0FSTih6bGRwbGwtXFx1MDAzZWRwbGxfZGV2LCBcXFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRrZnJlZSh6bGRwbGwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG5AQCAtMjQyOCw2ICsyOTMwLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFx0fVxcbiBcXG4rXFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdFxcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yNDQxLDcgKzI5NTAsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiB2b2lkXFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4ge1xcbi1cXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXFxuK1xcdHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiBcXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIFxcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuQEAgLTUsNiArNSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZHBsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gXFxuQEAgLTIyLDYgKzIzLDggQEBcXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxcbiAgKi9cXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRsaXN0O1xcbkBAIC0zNiw2ICszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xcbiBcXHRlbnVtIGRwbGxfdHlwZVxcdFxcdFxcdHR5cGU7XFxuIFxcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1xcdFxcdGxvY2tfc3RhdHVzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0cGlucztcXG4rXFx0c3RydWN0IHB0cF9jbG9ja19pbmZvXFx0XFx0cHRwX2luZm87XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tcXHRcXHQqcHRwX2Nsb2NrO1xcbiB9O1xcbiBcXG4gc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uNDQ3NzU3ZTk5ODQ1ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5AQCAtMTc5LDYgKzE3OSwyMCBAQFxcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcXHRcXHRcXHRHRU5NQVNLKDIsIDApXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVxcdFxcdDRcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcXHRcXHRcXHRaTF9SRUcoNSwgMHgzMCwgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXFx0XFx0XFx0R0VOTUFTSygyLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcXHRcXHRcXHQ0XFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcXHRcXHRaTF9SRUcoNSwgMHgzMSwgMSlcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXFx0XFx0XFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXFx0MVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcXHQ4XFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcXHQ5XFxuK1xcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDUwLCAxKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlxcdFxcdEdFTk1BU0soNywgNClcXG5AQCAtMTkzLDYgKzIwNyw5IEBAXFxuIFxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxcbisgKlxcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcXG4gXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXFx0UzY0X01JTlxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgwQywgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgxMiwgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTgsIDQpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuQEAgLTIyMSw2ICsyNTYsOCBAQFxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXFx0XFx0R0VOTUFTSyg2LCA0KVxcbiBcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXFx0XFx0WkxfUkVHKDksIDB4MzYsIDIpXFxuK1xcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5AQCAtMzE2LDYgKzM1MywyNSBAQFxcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfRVNZTkNfV0lEVEhcXHRcXHRaTF9SRUcoMTQsIDB4MTgsIDQpXFxuICNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9DT01QXFx0XFx0WkxfUkVHKDE0LCAweDIwLCA0KVxcbiBcXG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuKyAqIFJlZ2lzdGVyIFBhZ2UgOSwgT3V0cHV0IFBoYXNlIFN0ZXBcXG4rICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFxcdFxcdFpMX1JFRyg5LCAweDM4LCAxKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFxcdFxcdEdFTk1BU0soNiwgNClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXFx0QklUKDMpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcXHQwXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFxcdDFcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcXHQyXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVxcdDNcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlxcdFxcdFpMX1JFRyg5LCAweDM5LCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDNhLCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVxcdFxcdFpMX1JFRyg5LCAweDNjLCA0KVxcbitcXG4gLypcXG4gICogUmVnaXN0ZXIgUGFnZSAyNTUgLSBIVyByZWdpc3RlcnMgYWNjZXNzXFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjozNS4zNTkxNjI0MjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NDk4MzQ1ODQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgSTJDL1NQSSBjb25uZWN0ZWQgRFBMTCBkZXZpY2VzLiBTaW5jZSB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIHdpbGwgZmFpbCB0byByZWFkIHRoZSBleHBlY3RlZCBoYXJkd2FyZSBjaGlwIElEcywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjQyM2U1MGVjZDAwMWNkZTI4MzE4NDFjYzljYzE5MjQ3NjhjOTFhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDI6NTI6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgKzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcIiBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuK1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uNTMwMzJlNzgyZmQ0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5AQCAtMyw2ICszLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMjAyLDYgKzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcbiBcdFx0emwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTtcbiBcbitcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcbitcdFx0XHQgICAgICBcdTAwMjZjaGFuLVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuIFxuIFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXG5AQCAtMjM0LDYgKzI0MCwzMDcgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuIFx0cmV0dXJuIFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKlxuKyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLFxuKyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbitcdHU4IHRvZF9jdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4rXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaOlxuK1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbitcbitcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXG4rICpcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcbisgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHUzMiBuc2VjO1xuK1x0dTY0IHNlYztcbitcdHU4IGNtZDtcbitcdGludCByYztcbitcbitcdGlmIChuZXh0X2h6KVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcbitcdGVsc2VcbitcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXHUwMDI2c2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0dHMtXHUwMDNldHZfc2VjID0gc2VjO1xuK1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEB0czogdGltZSB0byBzZXRcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcbitcdFx0XHRcdCAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxuKyAqXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cbisgKiBJZiBsZXNzIHRoYW4gMjAgbXMgcmVtYWlucywgd2FpdHMgZm9yIHRoZSByb2xsb3ZlciBhbmQgaW5jcmVtZW50cyB0aGVcbisgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjay5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuK3tcbitcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbitcdGludCByYztcbitcbitcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogUmVhZCBjdXJyZW50IFRvRCB0byBkZXRlcm1pbmUgcmVtYWluaW5nIG1hcmdpbiAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSWYgdG9vIGNsb3NlIHRvIChvciBwYXN0KSB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQgKi9cbitcdGRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpO1xuK1x0aWYgKGRpZmYudHZfc2VjIFx1MDAzYyAwIHx8ICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2MgdGhyZXNob2xkX25zKSkge1xuK1x0XHRpZiAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMpXG4rXHRcdFx0ZnNsZWVwKCh1bnNpZ25lZCBsb25nKWRpZmYudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUMgKyAxKTtcbitcdFx0dHNfbmV4dC50dl9zZWMrKztcbitcdH1cbitcbitcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuK1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbitcdGlmICghdGltZXNwZWM2NF92YWxpZChcdTAwMjZ0c19uZXh0KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBXcml0ZSBhZGp1c3RlZCBUb0QgYmFjayBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuK1x0aWYgKCFyYylcbitcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICstMXMpXG4rICpcbisgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbisgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXG4re1xuK1x0czY0IHRpZV9kYXRhO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbitcdFx0XHRcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4rXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwXG4rICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuKyAqXG4rICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4rXHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4re1xuK1x0dTggY3RybDtcbitcdGludCByYztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbitcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbitcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4rXHQgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4rXHRpZiAodG9kX3N0ZXApXG4rXHRcdGN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDtcbitcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45ZGM1YTNmMTk5MWYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbkBAIC01LDEwICs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyZWdzLmhcIlxuIFxuK3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gXG4gLyoqXG5AQCAtMTYsNiArMTgsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxuICAqIEBtb2RlX3JlZnNlbDogbW9kZSBhbmQgcmVmZXJlbmNlIHNlbGVjdGlvbiByZWdpc3RlciB2YWx1ZVxuICAqIEByZWZfcHJpbzogcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyAoNCBiaXRzIHBlciByZWYsIFAvTiBwYWNrZWQpXG4rICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrXG4gICogQG1vbl9zdGF0dXM6IG1vbml0b3Igc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXG4gICogQHJlZnNlbF9zdGF0dXM6IHJlZmVyZW5jZSBzZWxlY3Rpb24gc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXG4gICogQGRmX29mZnNldDogZnJlcXVlbmN5IG9mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZSBpbiAyXi00OCBzdGVwc1xuQEAgLTI2LDYgKzI5LDkgQEAgc3RydWN0IHpsMzA3M3hfY2hhbiB7XG4gXHRcdHU4XHRtb2RlX3JlZnNlbDtcbiBcdFx0dThcdHJlZl9wcmlvW1pMMzA3M1hfTlVNX1JFRlMgLyAyXTtcbiBcdCk7XG4rXHRzdHJ1Y3RfZ3JvdXAoaW52LCAvKiBJbnZhcmlhbnRzICovXG4rXHRcdHUxNlx0b3V0X3N0ZXBfdGltZV9tYXNrO1xuK1x0KTtcbiBcdHN0cnVjdF9ncm91cChzdGF0LFxuIFx0XHR1OFx0bW9uX3N0YXR1cztcbiBcdFx0dThcdHJlZnNlbF9zdGF0dXM7XG5AQCAtNDIsNiArNDgsMjAgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4rXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMDAsNiArMjIwLDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuKyAqXG4rICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbit7XG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuK1x0XHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMzMsNCArMjY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gRklFTERfR0VUKFpMX0RQTExfUkVGU0VMX1NUQVRVU19SRUZTRUwsIGNoYW4tXHUwMDNlcmVmc2VsX3N0YXR1cyk7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbisgKiBAb3V0OiBvdXRwdXQgaW5kZXhcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggb3V0KVxuK3tcbitcdHJldHVybiAhIShjaGFuLVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcdTAwMjYgQklUKG91dCkpO1xuK31cbitcbiAjZW5kaWYgLyogX1pMMzA3M1hfQ0hBTl9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5pbmRleCA3ZjVhZmFhYWU2MzQyLi5iMmY5ZmM5N2ZkMWI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0xMDMzLDYgKzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi4yZGM4MzZkMGM4ZjZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xuICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm9cbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4rICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJyBpbnZhcmlhbnRzXG5AQCAtNzEsNiArNzcsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFx0c3RydWN0IHJlZ21hcFx0XHRcdCpyZWdtYXA7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cdCppbmZvO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0bXVsdGlvcF9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLjMyMDg1MmRmYzU4Y2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiArMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtNDEsNiArNDMsNyBAQFxuICAqIEBwaGFzZV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgcGluIHBoYXNlIG9mZnNldFxuICAqIEBmcmVxX29mZnNldDogbGFzdCBzYXZlZCBmcmFjdGlvbmFsIGZyZXF1ZW5jeSBvZmZzZXRcbiAgKiBAbWVhc3VyZWRfZnJlcTogbGFzdCBzYXZlZCBtZWFzdXJlZCBmcmVxdWVuY3lcbisgKiBAcGVyb3V0X2lkeDogUFRQIHBlcm91dCBjaGFubmVsIGluZGV4LCBvciAtMSBpZiBub3QgcGVyb3V0LWVsaWdpYmxlXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbkBAIC01OCw2ICs2MSw3IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcbiBcdHM2NFx0XHRcdHBoYXNlX29mZnNldDtcbiBcdHM2NFx0XHRcdGZyZXFfb2Zmc2V0O1xuIFx0dTMyXHRcdFx0bWVhc3VyZWRfZnJlcTtcbitcdHM4XHRcdFx0cGVyb3V0X2lkeDtcbiB9O1xuIFxuIC8qXG5AQCAtOTM1LDIxICs5MzksMTcgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIH1cbiBcbiBzdGF0aWMgaW50XG4temwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLVx0XHRcdFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXG4tXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tXHRcdFx0XHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4rX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcbitcdFx0XHRcdFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcbitcdFx0XHRcdFx0dTY0IGZyZXF1ZW5jeSlcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG4gXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbiBcdHUzMiBuZXdfZGl2LCBzeW50aF9mcmVxO1xuIFx0c3RydWN0IHpsMzA3M3hfb3V0IG91dDtcbiBcdHU4IG91dF9pZDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbiBcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4gXHRvdXQgPSAqemwzMDczeF9vdXRfc3RhdGVfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuQEAgLTEwMTAsNiArMTAxMCwyMSBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXHRyZXR1cm4gemwzMDczeF9vdXRfc3RhdGVfc2V0KHpsZGV2LCBvdXRfaWQsIFx1MDAyNm91dCk7XG4gfVxuIFxuK3N0YXRpYyBpbnRcbit6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4rXHRcdFx0XHQgICAgICB2b2lkICpwaW5fcHJpdixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbitcdFx0XHRcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbl9wcml2LFxuK1x0XHRcdFx0XHRcdCAgICAgICBmcmVxdWVuY3kpO1xuK31cbitcbiBzdGF0aWMgaW50XG4gemwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIFx0XHRcdFx0XHQgdm9pZCAqcGluX3ByaXYsXG5AQCAtMTYwNyw2ICsxNjIyLDcgQEAgemwzMDczeF9kcGxsX3Bpbl9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcixcbiBcdHBpbi1cdTAwM2VkcGxsID0gemxkcGxsO1xuIFx0cGluLVx1MDAzZWRpciA9IGRpcjtcbiBcdHBpbi1cdTAwM2VpZCA9IGlkO1xuK1x0cGluLVx1MDAzZXBlcm91dF9pZHggPSAtMTtcbiBcbiBcdHJldHVybiBwaW47XG4gfVxuQEAgLTE2MjUsNiArMTY0MSw0NCBAQCB6bDMwNzN4X2RwbGxfcGluX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbilcbiBcdGtmcmVlKHBpbik7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0IC0gY2hlY2sgaWYgb3V0cHV0IHBpbiBpcyBwZXJvdXQtZWxpZ2libGVcbisgKiBAcGluOiBEUExMIHBpbiB0byBjaGVja1xuKyAqIEBwcm9wczogcGluIHByb3BlcnRpZXMgKGFscmVhZHkgZmV0Y2hlZCBieSBjYWxsZXIpXG4rICpcbisgKiBBbiBvdXRwdXQgcGluIGlzIGVsaWdpYmxlIGZvciBQVFAgcGVyaW9kaWMgb3V0cHV0IGlmIGl0IGlzIHNpbmdsZS1lbmRlZFxuKyAqIChub3QgZGlmZmVyZW50aWFsKSBhbmQgc3VwcG9ydHMgMSBIeiBpbiBpdHMgZnJlcXVlbmN5IGxpc3QuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgZWxpZ2libGUsIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBib29sXG4remwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcbitcdFx0XHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9waW5fcHJvcHMgKnByb3BzKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IHBpbi1cdTAwM2VkcGxsO1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcdHU4IG91dF9pZDtcbitcdGludCBpO1xuK1xuK1x0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcdGlmICh6bDMwNzN4X2Rldl9vdXRfaXNfZGlmZih6bGRwbGwtXHUwMDNlZGV2LCBvdXRfaWQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY2hhbiwgb3V0X2lkKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvcHMtXHUwMDNlZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZF9udW07IGkrKykge1xuK1x0XHRpZiAocHJvcHMtXHUwMDNlZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZFtpXS5taW4gPT0gMSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgcGluXG4gICogQHBpbjogcG9pbnRlciB0byBEUExMIHBpblxuQEAgLTE2NjYsNiArMTcyMCw4IEBAIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwgdTMyIGluZGV4KVxuIFx0XHRpZiAocGluLVx1MDAzZXByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKVxuIFx0XHRcdC8qIENsYW1wIHByaW8gdG8gbWF4IHZhbHVlICovXG4gXHRcdFx0cGluLVx1MDAzZXByaW8gPSBaTF9EUExMX1JFRl9QUklPX01BWDtcbitcdH0gZWxzZSBpZiAoemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQocGluLCBwcm9wcykpIHtcbitcdFx0cGluLVx1MDAzZXBlcm91dF9pZHggPSB6bGRwbGwtXHUwMDNlcHRwX2luZm8ubl9wZXJfb3V0Kys7XG4gXHR9XG4gXG4gXHQvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovXG5AQCAtMTg5Niw2ICsxOTUyLDggQEAgemwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0dTggaWQsIGluZGV4O1xuIFx0aW50IHJjO1xuIFxuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCA9IDA7XG4rXG4gXHQvKiBQcm9jZXNzIGlucHV0IHBpbnMgKi9cbiBcdGZvciAoaW5kZXggPSAwOyBpbmRleCBcdTAwM2MgWkwzMDczWF9OVU1fUElOUzsgaW5kZXgrKykge1xuIFx0XHQvKiBGaXJzdCBpbnB1dCBwaW5zIGFuZCB0aGVuIG91dHB1dCBwaW5zICovXG5AQCAtMjI3NSw0NSArMjMzMyw0NDcgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4rICpcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGVcbisgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBubyBzeW50aHMgYXZhaWxhYmxlLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4rXHRcdFx0XHRcdCAgICAgICBzNjQgZGVsdGEpXG4re1xuK1x0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1xuK1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuK1x0XHR1OCBvdXRfaWQsIHN5bnRoX2lkO1xuK1xuK1x0XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuK1xuK1x0XHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4rXHRcdGlmIChzeW50aF9pZCBcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xuK1x0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldiwgXCJVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwiLFxuK1x0XHRcdFx0IG91dF9pZCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XG4rXHR9XG4rXG4rXHQvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSsrKSB7XG4rXHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuK1x0XHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcbitcdFx0ICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC1cdTAwM2VpZClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpO1xuK1xuK1x0XHQvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbitcdFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuK1x0XHRcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xuK1xuK1x0XHRpZiAoIXN5bnRoX21hc2tbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xuK1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHRcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXG4rXHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0aWYgKHRvZF9zdGVwcGVkKSB7XG4rXHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCBcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0fVxuK1x0XHRcdHJldHVybiByYztcbitcdFx0fVxuK1x0XHR0b2Rfc3RlcHBlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxuK1x0ICogbG93ZXN0LUlEIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS5cbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoYWJzKGRlbHRhKSBcdTAwM2U9IE5TRUNfUEVSX1NFQykge1xuK1x0XHRzMzIgcmVtYWluZGVyO1xuK1xuK1x0XHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcdTAwMjZyZW1haW5kZXIpO1xuK1x0XHR0cy50dl9uc2VjID0gMDtcbitcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgdHMpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1xuK1x0XHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xuK1x0XHRpZiAoIWRlbHRhKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24ndCBzdXBwb3J0IFRJRSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluIC0gZmluZCBwaW4gYnkgcGVyb3V0IGNoYW5uZWwgaW5kZXhcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbisgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmRcbisgKi9cbitzdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKlxuK3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4rXHRcdGlmIChwaW4tXHUwMDNlcGVyb3V0X2lkeCA9PSBpZHgpXG4rXHRcdFx0cmV0dXJuIHBpbjtcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnNcbisgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXG4rICpcbisgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLlxuKyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xuKyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1x0dW5zaWduZWQgaW50IGlkeDtcbitcdGludCByYztcbitcbitcdGlmIChycS1cdTAwM2V0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWR4ID0gcnEtXHUwMDNlcGVyb3V0LmluZGV4O1xuK1x0aWYgKGlkeCBcdTAwM2U9IGluZm8tXHUwMDNlbl9wZXJfb3V0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXG4rXHQgKiBpcyBhIG5vLW9wLlxuK1x0ICovXG4rXHRpZiAoIW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXG4rXHRpZiAocnEtXHUwMDNlcGVyb3V0LnBlcmlvZC5zZWMgIT0gMSB8fCBycS1cdTAwM2VwZXJvdXQucGVyaW9kLm5zZWMgIT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcbitcdGlmICghcGluKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXG4rXHRpZiAoemwzMDczeF9kZXZfb3V0cHV0X3Bpbl9mcmVxX2dldCh6bGRwbGwtXHUwMDNlZGV2LCBwaW4tXHUwMDNlaWQpID09IDEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKCFyYylcbitcdFx0ZHBsbF9waW5fY2hhbmdlX250ZihwaW4tXHUwMDNlZHBsbF9waW4pO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuK1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuK1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbitcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbitcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbitcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuK1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4rXHQuZW5hYmxlXHRcdD0gemwzMDczeF9kcGxsX3B0cF9lbmFibGUsXG4rfTtcbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XG4rXG4rXHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbitcdFx0IFwiemwzMDczeC1kcGxsJXVcIiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTIzOTgsNiArMjg1OCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQyOCw2ICsyOTMwLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgKzI5NTAsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgKzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi40NDc3NTdlOTk4NDVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiArMTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSlcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNXHRcdFx0QklUKDQpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFx0XHRcdEdFTk1BU0soMywgMClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXHQxXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXHQ4XG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuK1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgKzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuKyAqXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICsyNTYsOCBAQFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFx0XHRHRU5NQVNLKDYsIDQpXG4gXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXHRcdFpMX1JFRyg5LCAweDM2LCAyKVxuK1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0zMTYsNiArMzUzLDI1IEBAXG4gI2RlZmluZSBaTF9SRUdfT1VUUFVUX0VTWU5DX1dJRFRIXHRcdFpMX1JFRygxNCwgMHgxOCwgNClcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfQ09NUFx0XHRaTF9SRUcoMTQsIDB4MjAsIDQpXG4gXG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4rICogUmVnaXN0ZXIgUGFnZSA5LCBPdXRwdXQgUGhhc2UgU3RlcFxuKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4rXG4gLypcbiAgKiBSZWdpc3RlciBQYWdlIDI1NSAtIEhXIHJlZ2lzdGVycyBhY2Nlc3NcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUyOjM1LjM1OTE2MzYxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2Njk3MDg1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFBUUCBDbG9jayBQYXRjaCBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgUFRQIGNsb2NrIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoYGRyaXZlcnMvZHBsbC96bDMwNzN4L2ApLiBJdCBsb29rcyBzb2xpZDogYWRkcyB0aGUgYFBUUF8xNTg4X0NMT0NLYCBkZXBlbmRlbmN5IGluIGBLY29uZmlnYCwgdGhlIG5lY2Vzc2FyeSBUb0QgZnVuY3Rpb25zLCBwaGFzZS9mcmVxdWVuY3kgYWRqdXN0bWVudCwgYW5kIGhhbmRsZXMgdGhlIDFQUFMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZSBQVFAgY2xvY2sgdmlhIGBwdHBfY2xvY2tfcmVnaXN0ZXJgIHNvIG5vdyB0aGUgcXVlc3Rpb24gaXMgY2FuIEkgcmVhY2ggaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgc3l6a2FsbGVyIGNhbiByZWFjaCBpdC4gVGhlIGRyaXZlciB0YXJnZXRzIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY29ubmVjdGVkIHZpYSBJMkMgb3IgU1BJLiBMb29raW5nIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBkcml2ZXIsIGl0IGNvbmZpcm1zIGBaTDMwNzNYX0kyQ2AgYW5kIGBaTDMwNzNYX1NQSWAgYXMgb3B0aW9ucy4gTm93LCBJIGtub3cgSTJDIGFuZCBTUEkgZGV2aWNlcyBhcmUgYSBmcmVxdWVudCB0YXJnZXQgZm9yIHN5emthbGxlci5cblxuSSByZW1lbWJlciBzeXprYWxsZXIgY2FuIG9mdGVuIGhhbmRsZSB0aGVzZSB2aWEgcHNldWRvLXN5c2NhbGxzIG9yIGJ5IGluamVjdGluZyBJMkMvU1BJIHRyYWZmaWMuIEhvd2V2ZXIsIEknbSB0aGlua2luZyBhYm91dCB0aGUgZ2VuZXJpYyBkZXZpY2UgaW5zdGFudGlhdGlvbi4gU3l6a2FsbGVyIHVzdWFsbHkgaXNuJ3QgZ3JlYXQgYXQgaW5zdGFudGlhdGluZyAqYXJiaXRyYXJ5KiBJMkMvU1BJIGRldmljZXMgdW5sZXNzIHRoZXkncmUgZXhwbGljaXRseSBkZXNjcmliZWQgaW4gYSBzeXogZGVzY3JpcHRpb24sIG9yIGlmIHRoZXkncmUgaGFuZGxlZCB2aWEgZGV2aWNlIHRyZWUgb3Igc3lzZnMuIFdhaXQsIGRpZG4ndCBJIGNvbWUgYWNyb3NzIGEgd2F5IHRvIGRvIHRoYXQgaW4gdGhlIHBhc3QuLi4gQWggeWVzLCBJIGNhbiBpbnN0YW50aWF0ZSBJMkMgZGV2aWNlcyB2aWEgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2VgIG9yIHNpbWlsYXIsIG9yIHBvdGVudGlhbGx5IHZpYSBuZXRsaW5rIGlmIGl0J3MgYSBuZXQgZGV2aWNlLiBUaGlzIGlzIGEgRFBMTCBkZXZpY2UgdGhvdWdoLiBTbyBpdCB3aWxsIG5lZWQgdG8gYmUgcHJvYmVkIHZpYSBJMkMuXG5cblRoaW5raW5nIG1vcmUgYWJvdXQgdGhpcywgSSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgRFBMTCBzdWJzeXN0ZW0gdmlhIG5ldGxpbmsgKEdlbmVyaWMgTmV0bGluayBgZHBsbGApLiBUaGUgdHJpY2t5IHBhcnQgaXMgdGhlIGRldmljZSBpdHNlbGYg4oCTIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgcHJvYmUgdGhpcyBJMkMvU1BJIGRldmljZT8gRG9lcyBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X2kyY19zZXR1cGA/IE5vLCB0aGF0IGxvb2tzIGxpa2UgaXQncyB1c2VkIGZvciBzZXR1cCBwdXJwb3NlcywgSSBoYXZlIHRvIGZpbmQgYSB3YXkgdG8gbWFrZSB0aGUgZHJpdmVyIHByb2JlIHRoZSBkZXZpY2UuIEl0IGhhcyBgaTJjLWRldmAsIHdoaWNoIHByb3ZpZGVzIGEgdXNlci1zcGFjZSBpbnRlcmZhY2UgdG8gYW4gSTJDIGJ1cywgYnV0IGl0IGRvZXNuJ3QgcHJvYmUgdGhlIGtlcm5lbCBkcml2ZXIuXG5cbk9rYXksIHdhaXQgYSBzZWNvbmQuIEkgcmVtZW1iZXIgbm93OiBzeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIGJ5IHdyaXRpbmcgdG8gYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0lZC9uZXdfZGV2aWNlYC4gVGhhdCBjb3VsZCBiZSB0aGUga2V5ISBJIHNob3VsZCBjaGVjayB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBhbHJlYWR5IGF2YWlsYWJsZSBmb3IgRFBMTCBvciBJMkMgaW5zdGFudGlhdGlvbi4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNjEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1Mjo0My4wMjg4NzQ5NjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MjI5Mzc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bDMwNzN4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDYwMSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0PTc3PXBhcmFtZXRlcnMsIGluZm8gdmVyc2lvbnMsIGFuZCBvdGhlciBmZWF0dXJlcyBpdCBzdXBwb3J0cy5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdC0xMDQtICAgdGktY3Bzdy1zd2l0Y2hcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3Q6MTA1OiAgIHpsMzA3M3hcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTMtPT09PT09PT09PT09PT09PT09PT09PT1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdDo0OnpsMzA3M3ggZGV2bGluayBzdXBwb3J0XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3QtNS09PT09PT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTYtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q6NzpUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGV2bGluayBmZWF0dXJlcyBpbXBsZW1lbnRlZCBieSB0aGUgYGB6bDMwNzN4YGBcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdC04LWRldmljZSBkcml2ZXIuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdD0yND1JbmZvIHZlcnNpb25zXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdC0yNi1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdDoyNzpUaGUgYGB6bDMwNzN4YGAgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyB2ZXJzaW9uc1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTI4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q9NTM9Rmxhc2ggVXBkYXRlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdC01NS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdDo1NjpUaGUgYGB6bDMwNzN4YGAgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgZmxhc2ggdXBkYXRlIHVzaW5nIHRoZVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTU3LWBgZGV2bGluay1mbGFzaGBgIGludGVyZmFjZS4gSXQgc3VwcG9ydHMgdXBkYXRpbmcgdGhlIGRldmljZSBmbGFzaCB1c2luZyBhXFxuLS1cXG5NQUlOVEFJTkVSUz0xNzg2MD1GOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kcGxsL21pY3JvY2hpcCx6bDMwNzMxLnlhbWxcXG5NQUlOVEFJTkVSUzoxNzg2MTpGOlxcdGRyaXZlcnMvZHBsbC96bDMwNzN4L1xcbk1BSU5UQUlORVJTLTE3ODYyLVxcbi0tXFxuZHJpdmVycy9kcGxsL0tjb25maWc9MTE9Y29uZmlnIERQTExfUkVGQ05UX1RSQUNLRVJcXG4tLVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTI1LVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnOjI2OnNvdXJjZSBcXFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2RwbGwvS2NvbmZpZy0yNy1cXG4tLVxcbmRyaXZlcnMvZHBsbC9NYWtlZmlsZT05PWRwbGwteSAgICAgICAgICAgICAgICAgICs9IGRwbGxfbmwub1xcbmRyaXZlcnMvZHBsbC9NYWtlZmlsZS0xMC1cXG5kcml2ZXJzL2RwbGwvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1pMMzA3M1gpXFx0Kz0gemwzMDczeC9cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mz1jb25maWcgWkwzMDczWFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNC1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjE1OlxcdCAgd2lsbCBiZSBjYWxsZWQgemwzMDczeC5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9MTc9Y29uZmlnIFpMMzA3M1hfSTJDXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTI2LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoyNzpcXHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTI4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mjk9Y29uZmlnIFpMMzA3M1hfU1BJXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTM4LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzozOTpcXHQgIGJlIGNhbGxlZCB6bDMwNzN4X3NwaS5cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTItXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfWkwzMDczWClcXHRcXHQrPSB6bDMwNzN4Lm9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo0OnpsMzA3M3gtb2Jqc1xcdFxcdFxcdDo9IGNoYW4ubyBjb3JlLm8gZGV2bGluay5vIGRwbGwub1xcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZS01LVxcdFxcdFxcdFxcdCAgIGZsYXNoLm8gZncubyBvdXQubyBwcm9wLm8gcmVmLm8gc3ludGgub1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTYtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfWkwzMDczWF9JMkMpXFx0Kz0gemwzMDczeF9pMmMub1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjg6emwzMDczeF9pMmMtb2Jqc1xcdFxcdDo9IGkyYy5vXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtOS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfWkwzMDczWF9TUEkpXFx0Kz0gemwzMDczeF9zcGkub1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjExOnpsMzA3M3hfc3BpLW9ianNcXHRcXHQ6PSBzcGkub1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNDogKiB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlIC0gdXBkYXRlIERQTEwgY2hhbm5lbCBzdGF0dXMgZnJvbSBIV1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTktICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwOmludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIyOlxcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMy1cXHR1NjQgdmFsO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9OX1NUQVRVUyhpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3LVxcdFxcdFxcdCAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZW1vbl9zdGF0dXMpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMTpcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfUkVGU0VMX1NUQVRVUyhpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyLVxcdFxcdFxcdCAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZXJlZnNlbF9zdGF0dXMpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4LVxcdCAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozOTpcXHRpZiAoIXpsMzA3M3hfY2hhbl9pc19sb2NrZWQoY2hhbikpIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDA6XFx0XFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxLVxcdFxcdFxcdGNoYW4tXFx1MDAzZWRmX29mZnNldCA9IFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV047XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1OlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00Ni1cXHRcXHRcXHRcXHQgIFpMX0RQTExfREZfUkVBRF9TRU0sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUxOlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyLVxcdFxcdFxcdCAgICAgIFpMX0RQTExfREZfUkVBRF9TRU0gfCBaTF9EUExMX0RGX1JFQURfUkVGX09GU1QpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NjpcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTctXFx0XFx0XFx0XFx0ICBaTF9EUExMX0RGX1JFQURfU0VNLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChpbmRleCksIFxcdTAwMjZ2YWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02My1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzEtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjcyOiAqIHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQgLSBzd2l0Y2ggRFBMTCBjaGFubmVsIHRvIE5DTyBtb2RlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjczOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzQtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04Mi0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6ODM6aW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg0LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6ODU6XFx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg2LVxcdHU4IHByZXZfbW9kZSwgZGZfcmVhZDtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04OS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTA6XFx0cHJldl9tb2RlID0gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05MS1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05Ni1cXHRpZiAocHJldl9tb2RlID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9GUkVFUlVOKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjk3OlxcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBaTF9EUExMX01PREVfUkVGU0VMX01PREVfTkNPKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTgtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjk5OlxcdFxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMDAtXFx0XFx0XFx0XFx0ICAgICAgY2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMDEtXFx0XFx0aWYgKHJjKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEwMjpcXHRcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgcHJldl9tb2RlKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAzLVxcdFxcdFxcdHJldHVybiByYztcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMjAtXFx0XFx0ICBGSUVMRF9QUkVQKFpMX0RQTExfREZfUkVBRF9DTUQsIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0kpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMjE6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSwgZGZfcmVhZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEyMi1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTMwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzE6XFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9OQ08pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzI6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzMy1cXHRcXHRcXHQgICAgICBjaGFuLVxcdTAwM2Vtb2RlX3JlZnNlbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzNC1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTM1OlxcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBwcmV2X21vZGUpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzYtXFx0XFx0cmV0dXJuIHJjO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE0Ny1cXHQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTQ4OlxcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGluZGV4KSwgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE0OS1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNjEtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE2MjogKiB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2ggLSBmZXRjaCBEUExMIGNoYW5uZWwgc3RhdGUgZnJvbSBoYXJkd2FyZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNjQtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTcwLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNzE6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTcyLXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTczOlxcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzQtXFx0aW50IHJjLCBpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3NjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfQ1RSTChpbmRleCksIFxcdTAwMjZjaGFuLVxcdTAwM2VjdHJsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4MDpcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODEtXFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4NS1cXHRkZXZfZGJnKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJEUExMJXUgbW9kZTogJXUsIHJlZjogJXVcXFxcblxcXCIsIGluZGV4LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODY6XFx0XFx0emwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pLCB6bDMwNzN4X2NoYW5fcmVmX2dldChjaGFuKSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTg4OlxcdHJjID0gemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZSh6bGRldiwgaW5kZXgpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODktXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5NS1cXHQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTk2OlxcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5Ny1cXHRcXHRjaGFuLVxcdTAwM2VkZl9vZmZzZXQgPSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwMC1cXHRcXHRcXFwiRFBMTCV1IGxvY2tfc3RhdGU6ICV1LCBobzogJXUsIHNlbF9zdGF0ZTogJXUsIHNlbF9yZWY6ICV1XFxcXG5cXFwiLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDE6XFx0XFx0aW5kZXgsIHpsMzA3M3hfY2hhbl9sb2NrX3N0YXRlX2dldChjaGFuKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAyOlxcdFxcdHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeShjaGFuKSA/IDEgOiAwLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDM6XFx0XFx0emwzMDczeF9jaGFuX3JlZnNlbF9zdGF0ZV9nZXQoY2hhbiksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwNDpcXHRcXHR6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY2hhbikpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMDUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwNjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwNy1cXHRcXHRcXHQgICAgICBcXHUwMDI2Y2hhbi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTMtXFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIxNDpcXHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxNS1cXHRcXHRcXHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMjAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoY2hhbi1cXHUwMDNlcmVmX3ByaW8pOyBpKyspIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjIxOlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9SRUZfUFJJTyhpKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjIyLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZXJlZl9wcmlvW2ldKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzAtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzMTogKiB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0IC0gZ2V0IGN1cnJlbnQgRFBMTCBjaGFubmVsIHN0YXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzMjogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzMy0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBnZXQgc3RhdGUgZm9yXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjM2LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMzc6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzgtXFx0XFx0XFx0XFx0XFx0XFx0ICB1OCBpbmRleClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDMtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0NDogKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjQ2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjUyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNTM6c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1NC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjU4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNTk6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXFx1MDAyNnRvZF9jdHJsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjYwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzEtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI3MjpcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3My1cXHRcXHRcXHRcXHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzgtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI3OTogKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyODA6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI4MS0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI4OS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjkwOnN0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5MS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5MjpcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTMtXFx0XFx0XFx0XFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5Ni0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjk3OiAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyOTg6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5OS0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwMy0gKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDQ6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzA1LSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDYtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMwNzppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDgtXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjEtXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzIyOlxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyMy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzI2LVxcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMjc6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjgtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzMxOlxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMi1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMzY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXFx1MDAyNnNlYyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzQwLVxcdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzQxOlxcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXFx1MDAyNm5zZWMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1MS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzUyOiAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM1MzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU0LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU2LSAqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM1NzogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNTgtICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1OS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzYwOmludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjEtXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzY1LVxcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM2NjpcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2OS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzcwOlxcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzEtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc0OlxcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzUtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc4OlxcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzktXFx0XFx0XFx0XFx0ICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODItLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM4MzogKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODQ6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4NS0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5Mi0gKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozOTM6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk0LSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zOTUtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5NjppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5Ny1cXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDAzLVxcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDQ6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcXHUwMDI2dHNfbmV4dCwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwNS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDA4LVxcdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDA5OlxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFxcdTAwMjZ0c19jdXIsIE5VTEwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MTAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQyNi1cXHQvKiBXcml0ZSBhZGp1c3RlZCBUb0QgYmFjayBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0Mjc6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQyOC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDMwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MzE6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MzItfVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzNC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDM1OiAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MzY6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzNy0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0MS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDQyOmludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQzLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NDUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ0NjpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NDctXFx0aWYgKCFyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTMtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1NDogKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDU2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDYzLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NjQ6aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDY1LXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NzEtXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDcyOlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NzMtXFx0XFx0XFx0XFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4MC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDgxOlxcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4NC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDg1OlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDg4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0ODk6XFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTAtXFx0XFx0XFx0XFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDkzLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0OTQ6ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDk1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MDUtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUwNjppbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNy1cXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTE1LVxcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MTY6XFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNy1cXHRcXHRcXHRcXHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTIxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MjI6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyMy1cXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyNi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTI3OlxcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyOC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTMwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MzE6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTMyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0MTpcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDItfVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU0NC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQ1OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQ2OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQ3LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIHNldCBzdGF0ZSBmb3JcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NTYtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NzppbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTU4OlxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1OS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2MDpcXHRzdHJ1Y3QgemwzMDczeF9jaGFuICpkY2hhbiA9IFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU2MS1cXHRpbnQgcmMsIGk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTY4LVxcdGlmIChkY2hhbi1cXHUwMDNlY3RybCAhPSBjaGFuLVxcdTAwM2VjdHJsKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2OTpcXHRcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX0NUUkwoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzAtXFx0XFx0XFx0XFx0ICAgICAgY2hhbi1cXHUwMDNlY3RybCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTc2LVxcdGlmIChkY2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwgIT0gY2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwpIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTc3OlxcdFxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzgtXFx0XFx0XFx0XFx0ICAgICAgY2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU5Mi1cXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBpbnRvIG1haWxib3ggKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTkzOlxcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9SRCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTk0LVxcdFxcdFxcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwMC1cXHRcXHRpZiAoZGNoYW4tXFx1MDAzZXJlZl9wcmlvW2ldICE9IGNoYW4tXFx1MDAzZXJlZl9wcmlvW2ldKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjYwMTpcXHRcXHRcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwMi1cXHRcXHRcXHRcXHRcXHQgICAgICBaTF9SRUdfRFBMTF9SRUZfUFJJTyhpKSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MDktXFx0LyogQ29tbWl0IERQTEwgY29uZmlndXJhdGlvbiAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MTA6XFx0cmMgPSB6bDMwNzN4X21iX29wKHpsZGV2LCBaTF9SRUdfRFBMTF9NQl9TRU0sIFpMX0RQTExfTUJfU0VNX1dSLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTEtXFx0XFx0XFx0ICAgWkxfUkVHX0RQTExfTUJfTUFTSywgQklUKGluZGV4KSk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTM9c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNDpzdHJ1Y3QgemwzMDczeF9kZXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNi0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTc6ICogc3RydWN0IHpsMzA3M3hfY2hhbiAtIERQTEwgY2hhbm5lbCBzdGF0ZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOC0gKiBAY3RybDogRFBMTCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMjUtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjI2OnN0cnVjdCB6bDMwNzN4X2NoYW4ge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0yNy1cXHRzdHJ1Y3RfZ3JvdXAoY2ZnLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0MjppbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDM6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00NC1cXHRcXHRcXHRcXHRcXHRcXHQgdTggaW5kZXgpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NTppbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDY6XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ3LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0ODppbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ5OmludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUxOmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUyLVxcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUzLVxcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1NDppbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTUtXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1NjppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTU3LVxcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjU4OmludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTktXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYxOmludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTYyLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo2MzppbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTY1LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo2NjogKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTY3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD03MT1zdGF0aWMgaW5saW5lIHM2NFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo3Mjp6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03My17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzctLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjc4OiAqIHpsMzA3M3hfY2hhbl9tb2RlX2dldCAtIGdldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzktICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTgyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo4MzpzdGF0aWMgaW5saW5lIHU4IHpsMzA3M3hfY2hhbl9tb2RlX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04NC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtODgtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjg5OiAqIHpsMzA3M3hfY2hhbl9yZWZfZ2V0IC0gZ2V0IG1hbnVhbGx5IHNlbGVjdGVkIHJlZmVyZW5jZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05MC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTMtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjk0OnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZl9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTUte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTk5LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMDA6ICogemwzMDczeF9jaGFuX21vZGVfc2V0IC0gc2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDEtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwMy0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTA0OnN0YXRpYyBpbmxpbmUgdm9pZCB6bDMwNzN4X2NoYW5fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggbW9kZSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTA1LXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDktLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExMDogKiB6bDMwNzN4X2NoYW5fcmVmX3NldCAtIHNldCBtYW51YWxseSBzZWxlY3RlZCByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTExLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTMtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExNDpzdGF0aWMgaW5saW5lIHZvaWQgemwzMDczeF9jaGFuX3JlZl9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTUte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExOS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTIwOiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQgLSBnZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEyMS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTI2PXN0YXRpYyBpbmxpbmUgdThcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTI3OnpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMjgte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNy0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTM4OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQgLSBzZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzOS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTI6NDQuODAxMTgxMTY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyOTcxMjA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhlc2UgdGhpbmdzIGFyZSB0eXBpY2FsbHkgaW5zdGFudGlhdGVkIHVzaW5nIEkyQyBvciBTUEkgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMuIFN0YW5kYXJkIGZhcmUuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgc29tZXRoaW5nIGFib3V0IGBzeXprYWxsZXJgIGJlaW5nIGFibGUgdG8gaW5zdGFudGlhdGUgSTJDIGRldmljZXMgZGlyZWN0bHkgdXNpbmcgdGhlIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtJWQvbmV3X2RldmljZWAgaW50ZXJmYWNlLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSByZWxldmFudCBmb3IgZnV6emluZyBhbmQgdGVzdGluZyB0aGlzIGRyaXZlci5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgdG9vIGRlZXBseSwgaXMgdG8gcXVpY2tseSBjaGVjayB3aGV0aGVyIHRoaXMgZHJpdmVyIHV0aWxpemVzIHRoZSBzdGFuZGFyZCBgaTJjX2RyaXZlcmAgYW5kIGBzcGlfZHJpdmVyYCBpbmZyYXN0cnVjdHVyZS4gSWYgaXQgZG9lcywgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGlzIGNvcnJlY3QgYW5kIHRoZXNlIGludGVyZmFjZXMgY2FuIGxpa2VseSBiZSBsZXZlcmFnZWQsIHBvdGVudGlhbGx5IGJ5IHN5emthbGxlci4gSWYgbm90LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGhhcmR3YXJlIGFjY2VzcyBtb3JlIGNsb3NlbHkuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgdGhlIGNhc2UsIGFuZCBpcyB0aGUgbW9yZSBsaWtlbHkgYW5zd2VyLCBidXQgSSdsbCBzdGFydCB3aXRoIHRoZSBzaW1wbGVyIHBhdGgsIGJlY2F1c2UgaXQgcHJvdmlkZXMgYSBnb29kIG92ZXJ2aWV3IGZvciBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU1OTEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1Mjo0OS4zMzA4OTY1ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NjA2NjAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaTJjX2RyaXZlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDgyMjcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9lbnVtZXJhdGlvbi5yc3Q9MzEwPWlucHV0IGRyaXZlcjo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZW51bWVyYXRpb24ucnN0LTMyOC1cXHR9O1xcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9lbnVtZXJhdGlvbi5yc3Q6MzI5OlxcdG1vZHVsZV9pMmNfZHJpdmVyKG1wdTMwNTBfaTJjX2RyaXZlcik7XFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2VudW1lcmF0aW9uLnJzdC0zMzAtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMucnN0PTIyOT1kcml2ZXIgbW9kdWxlIGlzIHVzdWFsbHkgZW5vdWdoLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzLnJzdC0yNDQtXFxuRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzLnJzdDoyNDU6ICBUaGUgbW9kdWxlX2kyY19kcml2ZXIoKSBtYWNybyBjYW4gYmUgdXNlZCB0byByZWR1Y2UgYWJvdmUgY29kZS5cXG5Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMucnN0LTI0Ni1cXG5Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMucnN0OjI0NzogIG1vZHVsZV9pMmNfZHJpdmVyKGZvb19kcml2ZXIpO1xcbkRvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cy5yc3QtMjQ4LVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21jdV9tcGM4MzQ5ZW1pdHguYz0yMTQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1jdV9kcml2ZXIgPSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWN1X21wYzgzNDllbWl0eC5jLTIyMy1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWN1X21wYzgzNDllbWl0eC5jOjIyNDptb2R1bGVfaTJjX2RyaXZlcihtY3VfZHJpdmVyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWN1X21wYzgzNDllbWl0eC5jLTIyNS1cXG4tLVxcbmRyaXZlcnMvYXV4ZGlzcGxheS9odDE2azMzLmM9NzcwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBodDE2azMzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvYXV4ZGlzcGxheS9odDE2azMzLmMtNzc4LX07XFxuZHJpdmVycy9hdXhkaXNwbGF5L2h0MTZrMzMuYzo3Nzk6bW9kdWxlX2kyY19kcml2ZXIoaHQxNmszM19kcml2ZXIpO1xcbmRyaXZlcnMvYXV4ZGlzcGxheS9odDE2azMzLmMtNzgwLVxcbi0tXFxuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmM9MzY4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsY2Qyc19pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmMtMzc2LX07XFxuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmM6Mzc3Om1vZHVsZV9pMmNfZHJpdmVyKGxjZDJzX2kyY19kcml2ZXIpO1xcbmRyaXZlcnMvYXV4ZGlzcGxheS9sY2Qycy5jLTM3OC1cXG4tLVxcbmRyaXZlcnMvYXV4ZGlzcGxheS9tYXg2OTU5LmM9MTc1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg2OTU5X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2F1eGRpc3BsYXkvbWF4Njk1OS5jLTE4NC19O1xcbmRyaXZlcnMvYXV4ZGlzcGxheS9tYXg2OTU5LmM6MTg1Om1vZHVsZV9pMmNfZHJpdmVyKG1heDY5NTlfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9hdXhkaXNwbGF5L21heDY5NTkuYy0xODYtXFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1iX2Rldl9pbnQuYz0zNjk9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlwbWJfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtYl9kZXZfaW50LmMtMzc3LX07XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtYl9kZXZfaW50LmM6Mzc4Om1vZHVsZV9pMmNfZHJpdmVyKGlwbWJfZHJpdmVyKTtcXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1iX2Rldl9pbnQuYy0zNzktXFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYz01NzQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlwbWlfaXBtYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYy01ODMtfTtcXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYzo1ODQ6bW9kdWxlX2kyY19kcml2ZXIoaXBtaV9pcG1iX2RyaXZlcik7XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9pcG1iLmMtNTg1LVxcbi0tXFxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYz0xMjU2PWt1bml0X3Rlc3Rfc3VpdGUoc3NpZl9ibWNfdGVzdF9zdWl0ZSk7XFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2JtYy5jLTEyNTgtXFxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYzoxMjU5Om1vZHVsZV9pMmNfZHJpdmVyKHNzaWZfYm1jX2RyaXZlcik7XFxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYy0xMjYwLVxcbi0tXFxuZHJpdmVycy9jaGFyL3RwbS9zdDMzenAyNC9pMmMuYz0xNTY9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHN0MzN6cDI0X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvdHBtL3N0MzN6cDI0L2kyYy5jLTE2Ny1cXG5kcml2ZXJzL2NoYXIvdHBtL3N0MzN6cDI0L2kyYy5jOjE2ODptb2R1bGVfaTJjX2RyaXZlcihzdDMzenAyNF9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2NoYXIvdHBtL3N0MzN6cDI0L2kyYy5jLTE2OS1cXG4tLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX2kyY19hdG1lbC5jPTIxNz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2F0bWVsX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX2kyY19hdG1lbC5jLTIyNy1cXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfYXRtZWwuYzoyMjg6bW9kdWxlX2kyY19kcml2ZXIoaTJjX2F0bWVsX2RyaXZlcik7XFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2F0bWVsLmMtMjI5LVxcbi0tXFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmM9NzIwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0cG1fdGlzX2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfaW5maW5lb24uYy03MzAtXFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmM6NzMxOm1vZHVsZV9pMmNfZHJpdmVyKHRwbV90aXNfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmMtNzMyLU1PRFVMRV9BVVRIT1IoXFxcIlBldGVyIEh1ZXdlIFxcdTAwM2NwZXRlci5odWV3ZUBpbmZpbmVvbi5jb21cXHUwMDNlXFxcIik7XFxuLS1cXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfbnV2b3Rvbi5jPTY0NT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX251dm90b25fZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX251dm90b24uYy02NTUtXFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX251dm90b24uYzo2NTY6bW9kdWxlX2kyY19kcml2ZXIoaTJjX251dm90b25fZHJpdmVyKTtcXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfbnV2b3Rvbi5jLTY1Ny1cXG4tLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmMuYz0zOTM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRwbV90aXNfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmMuYy00MDItfTtcXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXNfaTJjLmM6NDAzOm1vZHVsZV9pMmNfZHJpdmVyKHRwbV90aXNfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyYy5jLTQwNC1cXG4tLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmNfY3I1MC5jPTgyMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY3I1MF9pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyY19jcjUwLmMtODMzLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmNfY3I1MC5jOjgzNDptb2R1bGVfaTJjX2RyaXZlcihjcjUwX2kyY19kcml2ZXIpO1xcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmNfY3I1MC5jLTgzNS1cXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1jZGNlNzA2LmM9Njg3PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjZGNlNzA2X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstY2RjZTcwNi5jLTY5NC19O1xcbmRyaXZlcnMvY2xrL2Nsay1jZGNlNzA2LmM6Njk1Om1vZHVsZV9pMmNfZHJpdmVyKGNkY2U3MDZfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9jbGsvY2xrLWNkY2U3MDYuYy02OTYtXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstY2RjZTkyNS5jPTg0Nj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY2RjZTkyNV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstY2RjZTkyNS5jLTg1My19O1xcbmRyaXZlcnMvY2xrL2Nsay1jZGNlOTI1LmM6ODU0Om1vZHVsZV9pMmNfZHJpdmVyKGNkY2U5MjVfZHJpdmVyKTtcXG5kcml2ZXJzL2Nsay9jbGstY2RjZTkyNS5jLTg1NS1cXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1jczIwMDAtY3AuYz02MjM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNzMjAwMF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstY3MyMDAwLWNwLmMtNjMzLVxcbmRyaXZlcnMvY2xrL2Nsay1jczIwMDAtY3AuYzo2MzQ6bW9kdWxlX2kyY19kcml2ZXIoY3MyMDAwX2RyaXZlcik7XFxuZHJpdmVycy9jbGsvY2xrLWNzMjAwMC1jcC5jLTYzNS1cXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1tYXg5NDg1LmM9MzgwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg5NDg1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1tYXg5NDg1LmMtMzg4LX07XFxuZHJpdmVycy9jbGsvY2xrLW1heDk0ODUuYzozODk6bW9kdWxlX2kyY19kcml2ZXIobWF4OTQ4NV9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1tYXg5NDg1LmMtMzkwLVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXJlbmVzYXMtcGNpZS5jPTQxND1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnM5X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1yZW5lc2FzLXBjaWUuYy00MjItfTtcXG5kcml2ZXJzL2Nsay9jbGstcmVuZXNhcy1wY2llLmM6NDIzOm1vZHVsZV9pMmNfZHJpdmVyKHJzOV9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1yZW5lc2FzLXBjaWUuYy00MjQtXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc2k1MTQuYz0zOTM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTE0X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1zaTUxNC5jLTQwMC19O1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUxNC5jOjQwMTptb2R1bGVfaTJjX2RyaXZlcihzaTUxNF9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUxNC5jLTQwMi1cXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1zaTUyMXh4LmM9Mzg0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzaTUyMXh4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1zaTUyMXh4LmMtMzkyLX07XFxuZHJpdmVycy9jbGsvY2xrLXNpNTIxeHguYzozOTM6bW9kdWxlX2kyY19kcml2ZXIoc2k1MjF4eF9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUyMXh4LmMtMzk0LVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXNpNTM0MS5jPTE4NDc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTM0MV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc2k1MzQxLmMtMTg1NS19O1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUzNDEuYzoxODU2Om1vZHVsZV9pMmNfZHJpdmVyKHNpNTM0MV9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUzNDEuYy0xODU3LVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXNpNTM1MS5jPTE3MTE9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTM1MV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc2k1MzUxLmMtMTcxOC19O1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUzNTEuYzoxNzE5Om1vZHVsZV9pMmNfZHJpdmVyKHNpNTM1MV9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUzNTEuYy0xNzIwLVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXNpNTQ0LmM9NDk3PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzaTU0NF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc2k1NDQuYy01MDQtfTtcXG5kcml2ZXJzL2Nsay9jbGstc2k1NDQuYzo1MDU6bW9kdWxlX2kyY19kcml2ZXIoc2k1NDRfZHJpdmVyKTtcXG5kcml2ZXJzL2Nsay9jbGstc2k1NDQuYy01MDYtXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc2k1NzAuYz01MjM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTcwX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1zaTU3MC5jLTUzMC19O1xcbmRyaXZlcnMvY2xrL2Nsay1zaTU3MC5jOjUzMTptb2R1bGVfaTJjX2RyaXZlcihzaTU3MF9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1zaTU3MC5jLTUzMi1cXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrMy5jPTExNTc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHZjM19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazMuYy0xMTYzLX07XFxuZHJpdmVycy9jbGsvY2xrLXZlcnNhY2xvY2szLmM6MTE2NDptb2R1bGVfaTJjX2RyaXZlcih2YzNfZHJpdmVyKTtcXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazMuYy0xMTY1LVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXZlcnNhY2xvY2s1LmM9MTM0MD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdmM1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNS5jLTEzNDktfTtcXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazUuYzoxMzUwOm1vZHVsZV9pMmNfZHJpdmVyKHZjNV9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNS5jLTEzNTEtXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazcuYz0xMzAyPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB2YzdfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNy5jLTEzMTAtfTtcXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazcuYzoxMzExOm1vZHVsZV9pMmNfZHJpdmVyKHZjN19pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazcuYy0xMzEyLVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU1LX07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTY6bW9kdWxlX2kyY19kcml2ZXIoemwzMDczeF9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01Ny1cXG4tLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1sYzgyNDIwNnhhLmM9NDgzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsYzgyNDIwNnhhX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1sYzgyNDIwNnhhLmMtNDkwLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1sYzgyNDIwNnhhLmM6NDkxOm1vZHVsZV9pMmNfZHJpdmVyKGxjODI0MjA2eGFfZHJpdmVyKTtcXG5kcml2ZXJzL2V4dGNvbi9leHRjb24tbGM4MjQyMDZ4YS5jLTQ5Mi1cXG4tLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1tYXgxNDUyNi5jPTI4OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWF4MTQ1MjZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDE0NTI2LmMtMjk2LX07XFxuZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDE0NTI2LmM6Mjk3Om1vZHVsZV9pMmNfZHJpdmVyKG1heDE0NTI2X2RyaXZlcik7XFxuZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDE0NTI2LmMtMjk4LVxcbi0tXFxuZHJpdmVycy9leHRjb24vZXh0Y29uLXB0bjUxNTAuYz00MDE9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHB0bjUxNTBfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1wdG41MTUwLmMtNDA5LX07XFxuZHJpdmVycy9leHRjb24vZXh0Y29uLXB0bjUxNTAuYzo0MTA6bW9kdWxlX2kyY19kcml2ZXIocHRuNTE1MF9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2V4dGNvbi9leHRjb24tcHRuNTE1MC5jLTQxMS1cXG4tLVxcbmRyaXZlcnMvZnNpL2ZzaS1tYXN0ZXItaTJjci5jPTMwMj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjcl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2ZzaS9mc2ktbWFzdGVyLWkyY3IuYy0zMTAtXFxuZHJpdmVycy9mc2kvZnNpLW1hc3Rlci1pMmNyLmM6MzExOm1vZHVsZV9pMmNfZHJpdmVyKGkyY3JfZHJpdmVyKVxcbmRyaXZlcnMvZnNpL2ZzaS1tYXN0ZXItaTJjci5jLTMxMi1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWFkbnAuYz01MTQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkbnBfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWFkbnAuYy01MjEtfTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1hZG5wLmM6NTIyOm1vZHVsZV9pMmNfZHJpdmVyKGFkbnBfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9ncGlvL2dwaW8tYWRucC5jLTUyMy1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWRzNDUyMC5jPTYyPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkczQ1MjBfZ3Bpb19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1kczQ1MjAuYy02OS19O1xcbmRyaXZlcnMvZ3Bpby9ncGlvLWRzNDUyMC5jOjcwOm1vZHVsZV9pMmNfZHJpdmVyKGRzNDUyMF9ncGlvX2RyaXZlcik7XFxuZHJpdmVycy9ncGlvL2dwaW8tZHM0NTIwLmMtNzEtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1meGw2NDA4LmM9MTU4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBmeGw2NDA4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWZ4bDY0MDguYy0xNjYtfTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1meGw2NDA4LmM6MTY3Om1vZHVsZV9pMmNfZHJpdmVyKGZ4bDY0MDhfZHJpdmVyKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1meGw2NDA4LmMtMTY4LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tZ3ctcGxkLmM9MTIzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBnd19wbGRfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tZ3ctcGxkLmMtMTMwLX07XFxuZHJpdmVycy9ncGlvL2dwaW8tZ3ctcGxkLmM6MTMxOm1vZHVsZV9pMmNfZHJpdmVyKGd3X3BsZF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLWd3LXBsZC5jLTEzMi1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLXBjYTk1NzAuYz0xODE9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBjYTk1NzBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTU3MC5jLTE4OC19O1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXBjYTk1NzAuYzoxODk6bW9kdWxlX2kyY19kcml2ZXIocGNhOTU3MF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXBjYTk1NzAuYy0xOTAtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby10cGljMjgxMC5jPTEyMD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBpYzI4MTBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tdHBpYzI4MTAuYy0xMjctfTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby10cGljMjgxMC5jOjEyODptb2R1bGVfaTJjX2RyaXZlcih0cGljMjgxMF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXRwaWMyODEwLmMtMTI5LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tdHM0OTAwLmM9MTgzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0czQ5MDBfZ3Bpb19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby10czQ5MDAuYy0xOTAtfTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby10czQ5MDAuYzoxOTE6bW9kdWxlX2kyY19kcml2ZXIodHM0OTAwX2dwaW9fZHJpdmVyKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby10czQ5MDAuYy0xOTItXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby13YXZlc2hhcmUtZHNpLmM9MTk3PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3YXZlc2hhcmVfZ3Bpb19yZWd1bGF0b3JfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8td2F2ZXNoYXJlLWRzaS5jLTIwNC1cXG5kcml2ZXJzL2dwaW8vZ3Bpby13YXZlc2hhcmUtZHNpLmM6MjA1Om1vZHVsZV9pMmNfZHJpdmVyKHdhdmVzaGFyZV9ncGlvX3JlZ3VsYXRvcl9kcml2ZXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXdhdmVzaGFyZS1kc2kuYy0yMDYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDYzNDUuYz03ODA9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFueDYzNDVfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng2MzQ1LmMtNzg4LX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng2MzQ1LmM6Nzg5Om1vZHVsZV9pMmNfZHJpdmVyKGFueDYzNDVfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDYzNDUuYy03OTAtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDc4eHguYz0xMzQ3PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhbng3OHh4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54Nzh4eC5jLTEzNTQtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDc4eHguYzoxMzU1Om1vZHVsZV9pMmNfZHJpdmVyKGFueDc4eHhfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDc4eHguYy0xMzU2LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbng3NjI1LmM9MzAwOD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYW54NzYyNV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FueDc2MjUuYy0zMDE5LVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW54NzYyNS5jOjMwMjA6bW9kdWxlX2kyY19kcml2ZXIoYW54NzYyNV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW54NzYyNS5jLTMwMjEtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Nocm9udGVsLWNoNzAzMy5jPTYwND1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY2g3MDMzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2hyb250ZWwtY2g3MDMzLmMtNjEzLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2hyb250ZWwtY2g3MDMzLmM6NjE0Om1vZHVsZV9pMmNfZHJpdmVyKGNoNzAzM19kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2hyb250ZWwtY2g3MDMzLmMtNjE1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jcm9zLWVjLWFueDc2ODguYz0xNzU9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNyb3NfZWNfYW54NzY4OF9icmlkZ2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jcm9zLWVjLWFueDc2ODguYy0xODMtXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jcm9zLWVjLWFueDc2ODguYzoxODQ6bW9kdWxlX2kyY19kcml2ZXIoY3Jvc19lY19hbng3Njg4X2JyaWRnZV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY3Jvcy1lYy1hbng3Njg4LmMtMTg1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2MjYzLmM9OTE4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpdDYyNjNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2MjYzLmMtOTI1LX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2MjYzLmM6OTI2Om1vZHVsZV9pMmNfZHJpdmVyKGl0NjI2M19kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjI2My5jLTkyNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jPTM2Njc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGl0NjUwNV9pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMtMzY3OC1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYzozNjc5Om1vZHVsZV9pMmNfZHJpdmVyKGl0NjUwNV9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYy0zNjgwLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NjEyMS5jPTE3Mjc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGl0NjYxMjFfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NjEyMS5jLTE3MzYtXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NjEyMS5jOjE3Mzc6bW9kdWxlX2kyY19kcml2ZXIoaXQ2NjEyMV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjYxMjEuYy0xNzM4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODcxM3N4LmM9NTgxPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdDg3MTNzeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ4NzEzc3guYy01OTEtXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODcxM3N4LmM6NTkyOm1vZHVsZV9pMmNfZHJpdmVyKGx0ODcxM3N4X2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODcxM3N4LmMtNTkzLU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDg5MTJiLmM9ODI0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdDg5MTJfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDg5MTJiLmMtODMzLX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODkxMmIuYzo4MzQ6bW9kdWxlX2kyY19kcml2ZXIobHQ4OTEyX2kyY19kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDg5MTJiLmMtODM1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTIxMS5jPTc4Nj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHQ5MjExX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDkyMTEuYy03OTQtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5MjExLmM6Nzk1Om1vZHVsZV9pMmNfZHJpdmVyKGx0OTIxMV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDkyMTEuYy03OTYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmM9MTI0Mz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHQ5NjExX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTEuYy0xMjUxLX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jOjEyNTI6bW9kdWxlX2kyY19kcml2ZXIobHQ5NjExX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jLTEyNTMtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM9OTA5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdDk2MTF1eGNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMXV4Yy5jLTkxOC19O1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYzo5MTk6bW9kdWxlX2kyY19kcml2ZXIobHQ5NjExdXhjX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMXV4Yy5jLTkyMC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYz0zMzI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHB0bjM0NjBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ueHAtcHRuMzQ2MC5jLTM0MC19O1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYzozNDE6bW9kdWxlX2kyY19kcml2ZXIocHRuMzQ2MF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYy0zNDItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYz01Mzg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBzODYyMl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYy01NDYtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYzo1NDc6bW9kdWxlX2kyY19kcml2ZXIocHM4NjIyX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjIyLmMtNTQ4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmM9NzM5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwczg2NDBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmMtNzQ2LX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmM6NzQ3Om1vZHVsZV9pMmNfZHJpdmVyKHBzODY0MF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFyYWRlLXBzODY0MC5jLTc0OC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jPTEyNDU9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpaTkwMnhfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zaWk5MDJ4LmMtMTI1My19O1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jOjEyNTQ6bW9kdWxlX2kyY19kcml2ZXIoc2lpOTAyeF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jLTEyNTUtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpaTkyMzQuYz05NTM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpaTkyMzRfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zaWk5MjM0LmMtOTYyLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTIzNC5jOjk2Mzptb2R1bGVfaTJjX2RyaXZlcihzaWk5MjM0X2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zaWk5MjM0LmMtOTY0LU1PRFVMRV9ERVNDUklQVElPTihcXFwiU2lsaWNvbiBJbWFnZSBTSUk5MjM0IEhETUkvTUhMIGJyaWRnZSBkcml2ZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lsLXNpaTg2MjAuYz0yMzc4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzaWk4NjIwX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lsLXNpaTg2MjAuYy0yMzg3LVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lsLXNpaTg2MjAuYzoyMzg4Om1vZHVsZV9pMmNfZHJpdmVyKHNpaTg2MjBfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpbC1zaWk4NjIwLmMtMjM4OS1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIlNpbGljb24gSW1hZ2UgU2lJODYyMCBIRE1JL01ITCBicmlkZ2UgZHJpdmVyXFxcIik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY3LmM9MjYyNT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGMzNTg3NjdfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2Ny5jLTI2MzMtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY3LmM6MjYzNDptb2R1bGVfaTJjX2RyaXZlcih0YzM1ODc2N19kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjcuYy0yNjM1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2OC5jPTE0NTI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRjMzU4NzY4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjguYy0xNDYwLX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2OC5jOjE0NjE6bW9kdWxlX2kyY19kcml2ZXIodGMzNTg3NjhfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY4LmMtMTQ2Mi1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NzUuYz03NDM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRjMzU4Nzc1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NzUuYy03NTEtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4Nzc1LmM6NzUyOm1vZHVsZV9pMmNfZHJpdmVyKHRjMzU4Nzc1X2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc3NS5jLTc1My1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGRhOTk4eF9kcnYuYz0yMDY3PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0ZGE5OTh4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGRhOTk4eF9kcnYuYy0yMDc2LVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGRhOTk4eF9kcnYuYzoyMDc3Om1vZHVsZV9pMmNfZHJpdmVyKHRkYTk5OHhfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RkYTk5OHhfZHJ2LmMtMjA3OC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktZGxwYzM0MzMuYz00MDM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRscGMzNDMzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktZGxwYzM0MzMuYy00MTEtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLWRscGMzNDMzLmM6NDEyOm1vZHVsZV9pMmNfZHJpdmVyKGRscGMzNDMzX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1kbHBjMzQzMy5jLTQxMy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTgzLmM9MTA4OT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc242NWRzaTgzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTgzLmMtMTA5Ny19O1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTgzLmM6MTA5ODptb2R1bGVfaTJjX2RyaXZlcihzbjY1ZHNpODNfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4My5jLTEwOTktXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXRkcDE1OC5jPTEwNT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGRwMTU4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktdGRwMTU4LmMtMTExLX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS10ZHAxNTguYzoxMTI6bW9kdWxlX2kyY19kcml2ZXIodGRwMTU4X2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS10ZHAxNTguYy0xMTMtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3dhdmVzaGFyZS1kc2kuYz0xOTU9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdzX2JyaWRnZV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3dhdmVzaGFyZS1kc2kuYy0yMDEtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3dhdmVzaGFyZS1kc2kuYzoyMDI6bW9kdWxlX2kyY19kcml2ZXIod3NfYnJpZGdlX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS93YXZlc2hhcmUtZHNpLmMtMjAzLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLW9saW1leC1sY2Qtb2xpbnV4aW5vLmM9MjYxPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsY2Rfb2xpbnV4aW5vX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vbGltZXgtbGNkLW9saW51eGluby5jLTI2OS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtb2xpbWV4LWxjZC1vbGludXhpbm8uYzoyNzA6bW9kdWxlX2kyY19kcml2ZXIobGNkX29saW51eGlub19kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vbGltZXgtbGNkLW9saW51eGluby5jLTI3MS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zaXRyb25peC9zdDc1NzEtaTJjLmM9MTQzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzdDc1NzFfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zaXRyb25peC9zdDc1NzEtaTJjLmMtMTUyLVxcbmRyaXZlcnMvZ3B1L2RybS9zaXRyb25peC9zdDc1NzEtaTJjLmM6MTUzOm1vZHVsZV9pMmNfZHJpdmVyKHN0NzU3MV9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vc2l0cm9uaXgvc3Q3NTcxLWkyYy5jLTE1NC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zb2xvbW9uL3NzZDEzMHgtaTJjLmM9MTEyPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzc2QxMzB4X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vc29sb21vbi9zc2QxMzB4LWkyYy5jLTEyMC19O1xcbmRyaXZlcnMvZ3B1L2RybS9zb2xvbW9uL3NzZDEzMHgtaTJjLmM6MTIxOm1vZHVsZV9pMmNfZHJpdmVyKHNzZDEzMHhfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3NvbG9tb24vc3NkMTMweC1pMmMuYy0xMjItXFxuLS1cXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtYWNwaS5jPTEyNj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2hpZF9hY3BpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1hY3BpLmMtMTM4LVxcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1hY3BpLmM6MTM5Om1vZHVsZV9pMmNfZHJpdmVyKGkyY19oaWRfYWNwaV9kcml2ZXIpO1xcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1hY3BpLmMtMTQwLVxcbi0tXFxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWVsYW4uYz0yMTY9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGVsYW5faTJjX2hpZF90c19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZWxhbi5jLTIyNi19O1xcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi1lbGFuLmM6MjI3Om1vZHVsZV9pMmNfZHJpdmVyKGVsYW5faTJjX2hpZF90c19kcml2ZXIpO1xcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi1lbGFuLmMtMjI4LVxcbi0tXFxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWdvb2RpeC5jPTEyND1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZ29vZGl4X2kyY19oaWRfdHNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWdvb2RpeC5jLTEzNC19O1xcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi1nb29kaXguYzoxMzU6bW9kdWxlX2kyY19kcml2ZXIoZ29vZGl4X2kyY19oaWRfdHNfZHJpdmVyKTtcXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZ29vZGl4LmMtMTM2LVxcbi0tXFxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLmM9MTUzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfaGlkX29mX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi5jLTE2Ni1cXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YuYzoxNjc6bW9kdWxlX2kyY19kcml2ZXIoaTJjX2hpZF9vZl9kcml2ZXIpO1xcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi5jLTE2OC1cXG4tLVxcbmRyaXZlcnMvaHdtb24vYWQ3NDE0LmM9MjE5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZDc0MTRfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9od21vbi9hZDc0MTQuYy0yMjctXFxuZHJpdmVycy9od21vbi9hZDc0MTQuYzoyMjg6bW9kdWxlX2kyY19kcml2ZXIoYWQ3NDE0X2RyaXZlcik7XFxuZHJpdmVycy9od21vbi9hZDc0MTQuYy0yMjktXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FkNzQxOC5jPTI5OT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWQ3NDE4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvaHdtb24vYWQ3NDE4LmMtMzA3LVxcbmRyaXZlcnMvaHdtb24vYWQ3NDE4LmM6MzA4Om1vZHVsZV9pMmNfZHJpdmVyKGFkNzQxOF9kcml2ZXIpO1xcbmRyaXZlcnMvaHdtb24vYWQ3NDE4LmMtMzA5LVxcbi0tXFxuZHJpdmVycy9od21vbi9hZGMxMjhkODE4LmM9NDk0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZGMxMjhfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9od21vbi9hZGMxMjhkODE4LmMtNTA1LVxcbmRyaXZlcnMvaHdtb24vYWRjMTI4ZDgxOC5jOjUwNjptb2R1bGVfaTJjX2RyaXZlcihhZGMxMjhfZHJpdmVyKTtcXG5kcml2ZXJzL2h3bW9uL2FkYzEyOGQ4MTguYy01MDctXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FkbTEwMjUuYz01NTc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkbTEwMjVfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9od21vbi9hZG0xMDI1LmMtNTY3LVxcbmRyaXZlcnMvaHdtb24vYWRtMTAyNS5jOjU2ODptb2R1bGVfaTJjX2RyaXZlcihhZG0xMDI1X2RyaXZlcik7XFxuZHJpdmVycy9od21vbi9hZG0xMDI1LmMtNTY5LVxcbi0tXFxuZHJpdmVycy9od21vbi9hZG0xMDI2LmM9MTg2NT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRtMTAyNl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYy0xODc1LVxcbmRyaXZlcnMvaHdtb24vYWRtMTAyNi5jOjE4NzY6bW9kdWxlX2kyY19kcml2ZXIoYWRtMTAyNl9kcml2ZXIpO1xcbmRyaXZlcnMvaHdtb24vYWRtMTAyNi5jLTE4NzctXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYz0zOTA9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkbTEwMjlfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9od21vbi9hZG0xMDI5LmMtNDAwLVxcbmRyaXZlcnMvaHdtb24vYWRtMTAyOS5jOjQwMTptb2R1bGVfaTJjX2RyaXZlcihhZG0xMDI5X2RyaXZlcik7XFxuZHJpdmVycy9od21vbi9hZG0xMDI5LmMtNDAyLVxcbi0tXFxuZHJpdmVycy9od21vbi9hZG0xMDMxLmM9MTA2ND1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRtMTAzMV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYy0xMDc0LVxcbmRyaXZlcnMvaHdtb24vYWRtMTAzMS5jOjEwNzU6bW9kdWxlX2kyY19kcml2ZXIoYWRtMTAzMV9kcml2ZXIpO1xcbmRyaXZlcnMvaHdtb24vYWRtMTAzMS5jLTEwNzYtXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTI6NTEuMjE2OTczNjY3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMzNjU4NjM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgemwzMDczeCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB0aGUgemwzMDczeCBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSBrZXJuZWwgdGhyb3VnaCBgbW9kdWxlX2kyY19kcml2ZXJgIGFuZCBgbW9kdWxlX3NwaV9kcml2ZXJgLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiBlZmZlY3RpdmVseSBmdXp6IHRoZXNlIEkyQyBhbmQgU1BJIGRyaXZlcnMuIEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfaTJjX3NldHVwYCBhbmQgYHN5el9zcGlfc2V0dXBgIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBhbmQgdGhlIHN5c3RlbSBidXMgb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGluc3RhbnRpYXRlIHZpYSBzeXNmcyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAuIFdhaXQsIG5vLCBJIGp1c3QgY2hlY2tlZCB0aGUga2VybmVsIGFuZCBJIGRvbid0IHNlZSBgc3l6X2kyY19zZXR1cGAgZGVmaW5lZC4gQnV0IHN5emthbGxlciAqY2FuKiB3cml0ZSB0aGUgZGV2aWNlIG5hbWUgdG8gYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2VgLCB3aGljaCBjb3VsZCB3b3JrIGFzIHdlbGwuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGRyaXZlciBpcyBldmVuICpyZWFjaGFibGUqLiBUaGUgcGF0Y2ggbW9kaWZpZXMgZmlsZXMgbGlrZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jYCwgYGNvcmUuY2AsIGFuZCBgZHBsbC5jYC4gVGhlc2UgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBhZGRpbmcgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIERQTEwgZHJpdmVyLCB3aGljaCBzdWdnZXN0cyBjb3JlIGZ1bmN0aW9uYWwgbG9naWMgaXMgYmVpbmcgbW9kaWZpZWQuIE5vdywgYSBrZXkgcXVlc3Rpb246IGNhbiB0aGlzIGRyaXZlciBldmVuIGJlIHJlYWNoZWQgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSB0aGUgb25lIHN5emthbGxlciB1c2VzPyBUaGUgZHJpdmVyIGlzIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgYSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRldmljZS5cblxuSWYgc3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSB0aGUgZHJpdmVyIHRocm91Z2ggSTJDL1NQSSwgaXQgc2hvdWxkIGJlIGFibGUgdG8gcmVhY2ggdGhlIHByb2JlIGZ1bmN0aW9uLiBUaGVuLCBJIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBkcml2ZXIgdGhyb3VnaCBEUExMIG5ldGxpbmsgYW5kIFBUUCBpb2N0bHMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlJ3MgYW55IGhhcmR3YXJlIGRlcGVuZGVuY3kgdGhhdCB3b3VsZCBwcmV2ZW50IHRoZSBkcml2ZXIgZnJvbSBwcm9iaW5nIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyByZWdpc3RlciBhY2Nlc3NlcyBvciBvdGhlciBkZXZpY2Utc3BlY2lmaWMgcmVxdWlyZW1lbnRzIHRoYXQgY291bGQgY2F1c2UgcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NjIxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUyOjU3LjU1MzU2MjU0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYzMTA5OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfZGV2X3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05MjU9emwzMDczeF9kZXZtX2RwbGxfaW5pdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3Mi0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTczOiAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzQtICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTc5LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODA6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk4MS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTA2MC19XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjEwNjE6RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFxcXCJaTDMwNzNYXFxcIik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwNjItXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9MTA0PXN0cnVjdCB6bDMwNzN4X2RldiAqemwzMDczeF9kZXZtX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjEwNTppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTEwNi1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTExPXN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjI1OlxcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjYtfVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmMtMjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM6MjU6XFx0cmV0dXJuIHpsMzA3M3hfZGV2X3Byb2JlKHpsZGV2KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zcGkuYy0yNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUyOjU5LjExNjY3Nzk2NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzE5MDkzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGB6bDMwNzN4X2Rldl9wcm9iZWAncyBSZWdpc3RlciBSZWFkaW5nKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBoYXJkd2FyZSBpbnRlcmFjdGlvbiBzdHJhdGVneS4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0IGV4cGxpY2l0bHkgcmVhZHMgaGFyZHdhcmUgcmVnaXN0ZXJzIGR1cmluZyBpdHMgaW5pdGlhbGl6YXRpb24gb3IgcHJvYmluZyBzZXF1ZW5jZS4gTXkgaHVuY2ggaXMsIHNpbmNlIHRoaXMgaXMgYSBwcm9iZSBmdW5jdGlvbiwgaXQgcHJvYmFibHkgZG9lcy4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGRvZXMgaXQgKnZhbGlkYXRlKiB0aG9zZSByZWdpc3RlciB2YWx1ZXM/IERvZXMgaXQgaGF2ZSBlcnJvciBoYW5kbGluZyBpbiBwbGFjZSB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIHByb2JlIGZhaWx1cmUgaWYgdGhlIGV4cGVjdGVkIHJlZ2lzdGVyIHZhbHVlcyBkb24ndCBtYXRjaCB3aGF0IGl0IHJlYWRzPyBUaGlzIGlzIGtleS4gVGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyB2YWxpZGF0aW9uIGxvZ2ljIHRlbGxzIG1lIGEgbG90IGFib3V0IHRoZSByb2J1c3RuZXNzIG9mIHRoZSBkcml2ZXIncyBoYXJkd2FyZSBkZXRlY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb24gYXBwcm9hY2guIEknbGwgYmUgbG9va2luZyBmb3IgY29tcGFyaXNvbnMgYWdhaW5zdCBleHBlY3RlZCB2YWx1ZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiByZWdpc3RlciBjb250ZW50cywgYW5kIHVsdGltYXRlbHksIGFueSBgcmV0dXJuYCBzdGF0ZW1lbnRzIHRoYXQgaW5kaWNhdGUgYSBwcm9iaW5nIGZhaWx1cmUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBub3QgYSBibGluZCByZWFkIGFuZCBwcm9jZWVkIHNldHVwLCBzaW5jZSBhIGJsaW5kIHJlYWQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBzZXJpb3VzIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgxMjMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MzowMy40NDg1ODk4OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTcwOlxcdH1cXG4gOTcxOlxcdFxcbiA5NzI6XFx0LyoqXFxuIDk3MzpcXHQgKiB6bDMwNzN4X2Rldl9wcm9iZSAtIGluaXRpYWxpemUgemwzMDczeCBkZXZpY2VcXG4gOTc0OlxcdCAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbiA5NzU6XFx0ICpcXG4gOTc2OlxcdCAqIENvbW1vbiBpbml0aWFsaXphdGlvbiBvZiB6bDMwNzN4IGRldmljZSBzdHJ1Y3R1cmUuXFxuIDk3NzpcXHQgKlxcbiA5Nzg6XFx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiA5Nzk6XFx0ICovXFxuIDk4MDpcXHRpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gOTgxOlxcdHtcXG4gOTgyOlxcdFxcdHUxNiBpZCwgcmV2aXNpb24sIGZ3X3ZlcjtcXG4gOTgzOlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbiA5ODQ6XFx0XFx0dTMyIGNmZ192ZXI7XFxuIDk4NTpcXHRcXHRpbnQgcmM7XFxuIDk4NjpcXHRcXG4gOTg3OlxcdFxcdC8qIFJlYWQgY2hpcCBJRCAqL1xcbiA5ODg6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFxcdTAwMjZpZCk7XFxuIDk4OTpcXHRcXHRpZiAocmMpXFxuIDk5MDpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIDk5MTpcXHRcXG4gOTkyOlxcdFxcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cXG4gOTkzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpKyspIHtcXG4gOTk0OlxcdFxcdFxcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxcbiA5OTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDk5NjpcXHRcXHR9XFxuIDk5NzpcXHRcXG4gOTk4OlxcdFxcdGlmIChpID09IEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcykpXFxuIDk5OTpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCAtRU5PREVWLFxcbjEwMDA6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiVW5rbm93biBjaGlwIElEOiAweCUwNHhcXFxcblxcXCIsIGlkKTtcXG4xMDAxOlxcdFxcbjEwMDI6XFx0XFx0emxkZXYtXFx1MDAzZWluZm8gPSBcXHUwMDI2emwzMDczeF9jaGlwX2lkc1tpXTtcXG4xMDAzOlxcdFxcbjEwMDQ6XFx0XFx0LyogUmVhZCByZXZpc2lvbiwgZmlybXdhcmUgdmVyc2lvbiBhbmQgY3VzdG9tIGNvbmZpZyB2ZXJzaW9uICovXFxuMTAwNTpcXHRcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRVZJU0lPTiwgXFx1MDAyNnJldmlzaW9uKTtcXG4xMDA2OlxcdFxcdGlmIChyYylcXG4xMDA3OlxcdFxcdFxcdHJldHVybiByYztcXG4xMDA4OlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0ZXX1ZFUiwgXFx1MDAyNmZ3X3Zlcik7XFxuMTAwOTpcXHRcXHRpZiAocmMpXFxuMTAxMDpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTAxMTpcXHRcXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19DVVNUT01fQ09ORklHX1ZFUiwgXFx1MDAyNmNmZ192ZXIpO1xcbjEwMTI6XFx0XFx0aWYgKHJjKVxcbjEwMTM6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHRkZXZfZGJnKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJDaGlwSUQoJVgpLCBDaGlwUmV2KCVYKSwgRndWZXIoJXUpXFxcXG5cXFwiLCBpZCxcXG4xMDE2OlxcdFxcdFxcdHJldmlzaW9uLCBmd192ZXIpO1xcbjEwMTc6XFx0XFx0ZGV2X2RiZyh6bGRldi1cXHUwMDNlZGV2LCBcXFwiQ3VzdG9tIGNvbmZpZyB2ZXJzaW9uOiAlbHUuJWx1LiVsdS4lbHVcXFxcblxcXCIsXFxuMTAxODpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSygzMSwgMjQpLCBjZmdfdmVyKSxcXG4xMDE5OlxcdFxcdFxcdEZJRUxEX0dFVChHRU5NQVNLKDIzLCAxNiksIGNmZ192ZXIpLFxcbjEwMjA6XFx0XFx0XFx0RklFTERfR0VUKEdFTk1BU0soMTUsIDgpLCBjZmdfdmVyKSxcXG4xMDIxOlxcdFxcdFxcdEZJRUxEX0dFVChHRU5NQVNLKDcsIDApLCBjZmdfdmVyKSk7XFxuMTAyMjpcXHRcXG4xMDIzOlxcdFxcdC8qIEdlbmVyYXRlIHJhbmRvbSBjbG9jayBJRCBhcyB0aGUgZGV2aWNlIGhhcyBub3Qgc3VjaCBwcm9wZXJ0eSB0aGF0XFxuMTAyNDpcXHRcXHQgKiBjb3VsZCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIEEgdXNlciBjYW4gbGF0ZXIgY2hhbmdlIHRoaXMgdmFsdWVcXG4xMDI1OlxcdFxcdCAqIHVzaW5nIGRldmxpbmsuXFxuMTAyNjpcXHRcXHQgKi9cXG4xMDI3OlxcdFxcdHpsZGV2LVxcdTAwM2VjbG9ja19pZCA9IGdldF9yYW5kb21fdTY0KCk7XFxuMTAyODpcXHRcXG4xMDI5OlxcdFxcdC8qIERlZmF1bHQgcGhhc2Ugb2Zmc2V0IGF2ZXJhZ2luZyBmYWN0b3IgKi9cXG4xMDMwOlxcdFxcdHpsZGV2LVxcdTAwM2VwaGFzZV9hdmdfZmFjdG9yID0gMjtcXG4xMDMxOlxcdFxcbjEwMzI6XFx0XFx0LyogSW5pdGlhbGl6ZSBtdXRleCBmb3Igb3BlcmF0aW9ucyB3aGVyZSBtdWx0aXBsZSByZWFkcywgd3JpdGVzXFxuMTAzMzpcXHRcXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cXG4xMDM0OlxcdFxcdCAqL1xcbjEwMzU6XFx0XFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2VtdWx0aW9wX2xvY2spO1xcbjEwMzY6XFx0XFx0aWYgKHJjKVxcbjEwMzc6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuMTAzODpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuMTAzOTpcXHRcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuMTA0MDpcXHRcXHRpZiAocmMpXFxuMTA0MTpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4xMDQyOlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4xMDQzOlxcdFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbjEwNDQ6XFx0XFx0aWYgKHJjKVxcbjEwNDU6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuMTA0NjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuMTA0NzpcXHRcXG4xMDQ4OlxcdFxcdC8qIFJlZ2lzdGVyIERQTEwgY2hhbm5lbHMgKi9cXG4xMDQ5OlxcdFxcdHJjID0gemwzMDczeF9kZXZtX2RwbGxfaW5pdCh6bGRldik7XFxuMTA1MDpcXHRcXHRpZiAocmMpXFxuMTA1MTpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTA1MjpcXHRcXG4xMDUzOlxcdFxcdC8qIFJlZ2lzdGVyIHRoZSBkZXZsaW5rIGluc3RhbmNlIGFuZCBwYXJhbWV0ZXJzICovXFxuMTA1NDpcXHRcXHRyYyA9IHpsMzA3M3hfZGV2bGlua19yZWdpc3Rlcih6bGRldik7XFxuMTA1NTpcXHRcXHRpZiAocmMpXFxuMTA1NjpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4xMDU3OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byByZWdpc3RlciBkZXZsaW5rIGluc3RhbmNlXFxcXG5cXFwiKTtcXG4xMDU4OlxcdFxcbjEwNTk6XFx0XFx0cmV0dXJuIDA7XFxuMTA2MDpcXHR9XFxuMTA2MTpcXHRFWFBPUlRfU1lNQk9MX05TX0dQTCh6bDMwNzN4X2Rldl9wcm9iZSwgXFxcIlpMMzA3M1hcXFwiKTtcXG4xMDYyOlxcdFxcbjEwNjM6XFx0TU9EVUxFX0FVVEhPUihcXFwiSXZhbiBWZWNlcmEgXFx1MDAzY2l2ZWNlcmFAcmVkaGF0LmNvbVxcdTAwM2VcXFwiKTtcXG4xMDY0OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiTWljcm9jaGlwIFpMMzA3M3ggY29yZSBkcml2ZXJcXFwiKTtcXG4xMDY1OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MDMuNDQ4NzE4Nzc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTMwNDQ5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9iZSBGdW5jdGlvbidzIEJlaGF2aW9yIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcHJvYmVgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYHN5emthbGxlcmAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgcmVhZGluZyBgWkxfUkVHX0lEYCBhbmQgY29tcGFyaW5nIGl0IHRvIGB6bDMwNzN4X2NoaXBfaWRzYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBpZiBgc3l6a2FsbGVyYCB0cmllcyB0byBpbnN0YW50aWF0ZSB0aGUgSTJDIGRldmljZSwgaXQncyBnb2luZyB0byBhdHRlbXB0IGFuIEkyQyByZWFkLiBXaXRob3V0IHJlYWwgaGFyZHdhcmUsIHRoYXQgcmVhZCBpcyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGZhaWwgb3IgcmV0dXJuIGdhcmJhZ2Ug4oCTIHByb2JhYmx5IHplcm8uIEFuZCB0aGF0IG1lYW5zIHRoZSBwcm9iZSBpcyBnb2luZyB0byBmYWlsLCB3aGljaCBpc24ndCB3aGF0IHdlIHdhbnQuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gZG9lc24ndCBgc3l6a2FsbGVyYCBoYXZlIHNvbWV0aGluZyBmb3Igc2V0dGluZyB1cCBJMkM/IEkgc2VlbSB0byByZWNhbGwgYSBmdW5jdGlvbiBjYWxsZWQgYHN5el9pMmNfc2V0dXBgLiBMZXQgbWUgZG91YmxlLWNoZWNrLiAqTG9va3MgaXQgdXAqLiBBaCwgcmlnaHQsIHRoYXQncyBub3QgcXVpdGUgd2hhdCBJIHdhcyBob3BpbmcgZm9yLiBgc3l6a2FsbGVyYCBkb2Vzbid0IGhhdmUgYSBnZW5lcmljIEkyQyBkZXZpY2UgKmVtdWxhdG9yKi4gSXQgY2FuIGluamVjdCB0cmFmZmljIGlmIHRoZXJlJ3MgYSBzcGVjaWZpYyBwc2V1ZG8tc3lzY2FsbCwgb3IgaWYgaXQgdXNlcyBgaTJjLWRldmAgdG8gYWN0IGFzIGEgbWFzdGVyLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGJlIGFibGUgdG8gZWFzaWx5IGVtdWxhdGUgYSBzbGF2ZSBkZXZpY2UgYW5kIHJlc3BvbmQgdG8sIHNheSwgYSBgemwzMDczeF9yZWFkX3UxNmAgY2FsbC4gU28sIHdlJ3JlIHN0aWxsIHN0dWNrIHdpdGggdGhlIHBvdGVudGlhbCBwcm9iZSBmYWlsdXJlLiBXZSBuZWVkIHRvIGZpbmQgYSB3b3JrYXJvdW5kLiBCYWNrIHRvIHRoZSBkcmF3aW5nIGJvYXJkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMTAwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MDguNzAxNzY2MDQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg2MTQ1MjUyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfaTJjX3NldHVwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MzoxMC4yODc5MTg5NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5ODQ2NjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHN5el9zcGlfc2V0dXBgKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHN5el9zcGlfc2V0dXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIGl0IGEga2V5IGZ1bmN0aW9uIGluIGEgZnV6emluZyBzZXR1cD8gSXMgaXQgcmVsYXRlZCB0byBkcml2ZXIgaW5pdGlhbGl6YXRpb24/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcywgaXRzIHBhcmFtZXRlcnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFNQSSBzdWJzeXN0ZW0uIE1vcmUgc3BlY2lmaWNhbGx5LCB3aGF0IGlzIGBzeXpfYCBwcmVmaXggYW5kIHdoYXQgaXMgaXRzIHJlbGF0aW9uIHdpdGggdGhlIFNQSS4gSXMgaXQgcmVsYXRlZCB0byB0aGUga2VybmVsIG1vZHVsZT8gSXMgaXQgcmVsYXRlZCB0byB0aGUgaW50ZXJmYWNlPyBGcm9tIHRoZXJlIEkgd2FudCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gZmlndXJlcyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyAqYXJvdW5kKiBpdC4gQXJlIHRoZXJlIGFueSBwYXJ0aWN1bGFyIGVudHJ5IHBvaW50cyBmb3IgdGhpcyBmdW5jdGlvbiB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhhdCdzIHdoZXJlIEkgc2hvdWxkIHN0YXJ0LiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBpZiBhbnkgcHJvYmxlbXMgY2FuIG9jY3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDY3MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUzOjEzLjg4NjM4ODgyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNTE1NTE3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3l6X3NwaV9zZXR1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MTUuNDIxNTUyMDA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzcxNDQyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW11bGF0aW5nIEkyQyBEZXZpY2VzIGZvciBTeXN0ZW0gVGVzdGluZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gdGVzdCB0aGlzIGB6bDMwNzN4YCBkZXZpY2Ugd2l0aCBzeXprYWxsZXIuIENhbiBzeXprYWxsZXIgYWN0dWFsbHkgKmVtdWxhdGUqIEkyQyBkZXZpY2VzIGVmZmVjdGl2ZWx5PyBJIGtub3cgdGhlcmUncyB0aGlzIGBpMmMtc3R1YmAgdGhpbmcsIGJ1dCBmcm9tIHdoYXQgSSByZWNhbGwsIGl0J3MgcHJldHR5IHJ1ZGltZW50YXJ5LiBJdCdzIG5vdCBnb2luZyB0byBjdXQgaXQgZm9yIGFueSBzZXJpb3VzIHByb2JpbmcsIGVzcGVjaWFsbHkgaWYgeW91IG5lZWQgc3BlY2lmaWMgcmVnaXN0ZXIgcmVhZHMgZm9yIHRoZSBwcm9iZSB0byBzdWNjZWVkLlxuXG5SaWdodCwgc28sIGFzIEkgdW5kZXJzdGFuZCBpdCwgc3l6a2FsbGVyIGRvZXNuJ3QgcHJvdmlkZSBhIGdlbmVyYWwgbWVjaGFuaXNtIHRvIGVtdWxhdGUgYXJiaXRyYXJ5IEkyQyBvciBTUEkgZGV2aWNlcyB0aGF0IHJlbHkgb24gcGFydGljdWxhciByZWdpc3RlciByZWFkcyBmb3Igc3VjY2Vzc2Z1bCBwcm9iaW5nLiBVbmxlc3MgdGhlcmUncyBhIGN1c3RvbSBtb2NrIGRyaXZlciwgb3IgaXQncyBhIFVTQiBkZXZpY2UgKHdoaWNoIGNhbiB1c2UgdGhlIGR1bW15X2hjZC9yYXctZ2FkZ2V0IGFwcHJvYWNoKSwgYSBQQ0kgZGV2aWNlICh3aGljaCBpcyBwcm9ibGVtYXRpYyB1bmxlc3MgaXQncyBhIHZlcnkgZ2VuZXJpYyB0eXBlIG9yIGhhcyBhIGN1c3RvbSBlbXVsYXRvciksIG9yIGEgbmV0d29yayBkZXZpY2UgKHR1bi90YXAgd29ya3MgdGhlcmUpLlxuXG5TaW5jZSBgemwzMDczeGAgaXMgYW4gSTJDL1NQSSBkZXZpY2UsIGl0cyBwcm9iZSBmdW5jdGlvbiwgYHpsMzA3M3hfZGV2X3Byb2JlYCwgd2lsbCwgYnkgZGVmaW5pdGlvbiwgYmUgcmVhZGluZyBgWkxfUkVHX0lEYCB2aWEgSTJDIG9yIFNQSS4gSWYgdGhlIGhhcmR3YXJlIGlzbid0IGFjdHVhbGx5IHByZXNlbnQsIHRoYXQgcmVhZCBpcyBlaXRoZXIgZ29pbmcgdG8gZmFpbCBvciwgYXQgYmVzdCwgcmV0dXJuIHNvbWV0aGluZyBsaWtlIDB4ZmYgb3IgMHgwMC4gSG1tLCBuZWVkIHRvIHNlZSB0aGUgZXhwZWN0ZWQgdmFsdWVzLiBJIHNob3VsZCByZWFsbHkgY2hlY2sgd2hhdCB2YWx1ZXMgYXJlIGV4cGVjdGVkIGluIGB6bDMwNzN4X2NoaXBfaWRzYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA5MzEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MjAuNzU4Njk4NjA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY1MjYzMjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfY2hpcF9pZHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTI1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHpsMzA3M3hfY2hpcF9pZHNbXSA9IHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjctXFx0WkxfQ0hJUF9JTkZPKDB4MEUzMCwgMiwgWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyKSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODA9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTkyLVxcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTkzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpKyspIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk0OlxcdFxcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTUtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk3LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTg6XFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk5LVxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIC1FTk9ERVYsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwMS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwMjpcXHR6bGRldi1cXHUwMDNlaW5mbyA9IFxcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MzoyMi4zMjM5NjYzMzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1NzM1OTQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHpsMzA3M3ggRHJpdmVyIFByb2JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB6bDMwNzN4YCBkcml2ZXIgYW5kIGhvdyBpdCdzIHByb2JlZC4gSXQgbG9va3MgbGlrZSB0aGUgY2hpcCBpZGVudGlmaWNhdGlvbiBoYXBwZW5zIHZpYSB0aGVzZSBoZXggSURzLCBzb21ldGhpbmcgbGlrZSBgMHgwRTMwYCwgYXMgSSdkIGV4cGVjdC4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5OyBpZiB0aGUgcGh5c2ljYWwgY2hpcCBpc24ndCB0aGVyZSwgdGhlIGB6bDMwNzN4X3JlYWRfdTE2YCBmdW5jdGlvbiBpcyBnb2luZyB0byBjcmFwIG91dC4gSXQnbGwgZWl0aGVyIGZhaWwgb3V0cmlnaHQsIG9yLCBldmVuIHdvcnNlLCByZXR1cm4gYSB1c2VsZXNzIHZhbHVlIGxpa2UgYDB4MDAwMGAgb3IgYDB4RkZGRmAsIHdoaWNoIGlzIHByZXR0eSBjb21tb24gYmVoYXZpb3IuIFRoaXMgbGVhZHMgdG8gdGhlIHByb2JlIGZhaWxpbmcgd2l0aCBhbiBgLUVOT0RFVmAgZXJyb3IuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBlcnJvciBjb2RlLCBzbyBJJ20gbm90IHN1cnByaXNlZCB0aGVyZS5cblxuVGhpcyBpbW1lZGlhdGVseSBtZWFucyBJIGNhbid0IGp1c3Qgc3BpbiB1cCBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGFuZCBleHBlY3QgdGhpcyBkcml2ZXIgdG8gbG9hZCBjbGVhbmx5LiBJIG5lZWQgdGhlIGFjdHVhbCBoYXJkd2FyZSwgb3IgYSBkZWNlbnQgZW11bGF0b3IgdG8gdHJpY2sgdGhlIGRyaXZlciBpbnRvIHRoaW5raW5nIGl0J3MgdGhlcmUuIEhvbGQgb24sIHRob3VnaC4uLiBpcyB0aGVyZSBhbiBJMkMgZW11bGF0b3IgaW4gdGhlIGtlcm5lbCB0aGF0IHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIHVzZSB0byBmYWtlIHRoZSBkZXZpY2UgYW5kIGFsbG93IHRoZSBkcml2ZXIgdG8gcHJvYmU/IEkga25vdyB0aGVyZSdzIGBpMmMtc3R1YmAsIHdoaWNoIGlzIGtpbmQgb2YgYW4gaW50ZXJlc3Rpbmcgb3B0aW9uLCBidXQgaXQgb25seSBzdXBwb3J0cyByZWFsbHkgYmFzaWMgU01CdXMgY29tbWFuZHMsIGFuZCB0aGUgZGV2aWNlIGFkZHJlc3NlcyBoYXZlIHRvIGJlIGNvbmZpZ3VyZWQgaW4gYWR2YW5jZS5cblxuRXZlbiBpZiBzeXprYWxsZXIgKmNvdWxkKiBsb2FkIGBpMmMtc3R1YmAsIGl0IHdvdWxkIHN0aWxsIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoaWNoIHJlZ2lzdGVyIG9mZnNldHMgdG8gd3JpdGUgdGhlIGNvcnJlY3QgY2hpcCBJRCB0byBiZWZvcmUgZXZlbiBhdHRlbXB0aW5nIHRvIHByb2JlIHRoZSBkcml2ZXIuIFRoYXQgc2VlbXMgbGlrZSBhIGJpdCBvZiBhIGNoYWxsZW5nZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGUgZHJpdmVyIGFjdHVhbGx5IHVzZXMgU01CdXMgb3IgcmF3IEkyQyB0cmFuc2ZlcnMuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNoZWNrLiBJIHRoaW5rIEknbGwgZ28gdGhyb3VnaCB0aGUgZHJpdmVyIGNvZGUgYW5kIHNlZSBpZiBJIGNhbiBmaWd1cmUgdGhpcyBvdXQuLi4gaXQncyBwcm9iYWJseSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoaXMgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIwNDAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MjcuODgxMzI4MjMxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwNjM5NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfcmVhZF91MTZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jPTE3MT1pbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwNS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA2OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA3LVxcdFxcdFxcdCAgICAgIFxcdTAwMjZjaGFuLVxcdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTE3OD1pbnQgemwzMDczeF93cml0ZV91OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1OCB2YWwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTgzLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxODQ6ICogemwzMDczeF9yZWFkX3UxNiAtIHJlYWQgdmFsdWUgZnJvbSAxNmJpdCByZWdpc3RlclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xODUtICogQHpsZGV2OiB6bDMwNzN4IGRldmljZSBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTkyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxOTM6aW50IHpsMzA3M3hfcmVhZF91MTYoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTE2ICp2YWwpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTE5NC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9OTgwPWludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk4Ny1cXHQvKiBSZWFkIGNoaXAgSUQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTg4OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcXHUwMDI2aWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODktXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDQtXFx0LyogUmVhZCByZXZpc2lvbiwgZmlybXdhcmUgdmVyc2lvbiBhbmQgY3VzdG9tIGNvbmZpZyB2ZXJzaW9uICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjEwMDU6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFxcdTAwMjZyZXZpc2lvbik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDYtXFx0aWYgKHJjKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDA3LVxcdFxcdHJldHVybiByYztcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwODpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFxcdTAwMjZmd192ZXIpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDA5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaD0xNDc9aW50IHpsMzA3M3hfcmVhZF91OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1OCAqdmFsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg6MTQ4OmludCB6bDMwNzN4X3JlYWRfdTE2KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUxNiAqdmFsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgtMTQ5LWludCB6bDMwNzN4X3JlYWRfdTMyKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUzMiAqdmFsKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYz0yNT16bDMwNzN4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtMzMtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjM0OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcXHUwMDI2aWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy0zNS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNDQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjQ1OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFVklTSU9OLCBcXHUwMDI2cmV2aXNpb24pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy00Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjU2OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0ZXX1ZFUiwgXFx1MDAyNmZ3X3Zlcik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTU3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xMjMyPXpsMzA3M3hfZHBsbF90ZW1wX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMjQxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMjQyOlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0RJRV9URU1QX1NUQVRVUywgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyNDMtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM9Nzk9aW50IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE1LVxcdC8qIFJlYWQgZnJlcXVlbmN5IHJlbGF0ZWQgcmVnaXN0ZXJzICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM6MTE2OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFRl9GUkVRX0JBU0UsIFxcdTAwMjZyZWYtXFx1MDAzZWZyZXFfYmFzZSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE3LVxcdGlmIChyYylcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMTgtXFx0XFx0cmV0dXJuIHJjO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jOjExOTpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfRlJFUV9NVUxULCBcXHUwMDI2cmVmLVxcdTAwM2VmcmVxX211bHQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyMC1cXHRpZiAocmMpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTIxLVxcdFxcdHJldHVybiByYztcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMjI6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVGX1JBVElPX00sIFxcdTAwMjZyZWYtXFx1MDAzZWZyZXFfcmF0aW9fbSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTIzLVxcdGlmIChyYylcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjQtXFx0XFx0cmV0dXJuIHJjO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jOjEyNTpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfUkFUSU9fTiwgXFx1MDAyNnJlZi1cXHUwMDNlZnJlcV9yYXRpb19uKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjYtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYz0yMz1pbnQgemwzMDczeF9zeW50aF9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNDUtXFx0ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYzo0NjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19TWU5USF9GUkVRX0JBU0UsIFxcdTAwMjZzeW50aC1cXHUwMDNlZnJlcV9iYXNlKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTQ3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTMtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYzo1NDpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19TWU5USF9GUkVRX00sIFxcdTAwMjZzeW50aC1cXHUwMDNlZnJlcV9tKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTU1LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTctXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYzo1ODpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19TWU5USF9GUkVRX04sIFxcdTAwMjZzeW50aC1cXHUwMDNlZnJlcV9uKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTU5LVxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MjkuNTQxOTg4NTY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODAwNTgxOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogVW5yZWFjaGFibGUgQ29kZSBpbiBhIEhhcmR3YXJlLURlcGVuZGVudCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgYHpsMzA3M3hgIGRyaXZlciB1c2VzIGByZWdtYXBgIGludGVybmFsbHksIHdoaWNoIG1lYW5zIHRoYXQgYHpsMzA3M3hfcmVhZF91MTZgIHdpbGwsIGluIHR1cm4sIGNhbGwgYHJlZ21hcF9yZWFkYC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGZ1enogYHJlZ21hcGAgZGV2aWNlcz8gVGhlIGFuc3dlciwgYXMgSSBzZWUgaXQsIGlzIGdlbmVyYWxseSBubywgdW5sZXNzIGEgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgZXhpc3RzIG9yIGlmIHRoZSBkZXZpY2UgaXRzZWxmIGdldHMgaW5zdGFudGlhdGVkLlxuXG5JIHJlYWxpemUgdGhhdCBgemwzMDczeF9kZXZfcHJvYmVgIHdpbGwgZmFpbCBlYXJseSBvbi4gU3BlY2lmaWNhbGx5LCBpdCdsbCBmYWlsIGF0IHRoZSBgemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcdTAwMjZpZClgIGNhbGwgYmVjYXVzZSBhbnkgSTJDIG9yIFNQSSByZWFkIGluIGEgc3l6a2FsbGVyIGNvbnRleHQgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIG9yIGp1bmsgZGF0YSBsaWtlIGAweDAwMDBgIG9yIGAweEZGRkZgLlxuXG5Ob3csIEkgY29uc2lkZXJlZCBgaTJjLXN0dWJgIGFuZCB3aGV0aGVyIHRoYXQgbWlnaHQgd29yay4gSSBrbm93IHRoYXQgYGkyYy1zdHViYCBjYW4gYmUgbG9hZGVkIHdpdGggYSBzcGVjaWZpYyBgY2hpcF9hZGRyYCwgd2hpY2ggd291bGQgbGV0IGl0IHJlc3BvbmQgdG8gSTJDIHJlYWRzLiBIb3dldmVyLCBzeXprYWxsZXIgZG9lc24ndCBrbm93IHRoZSBzcGVjaWZpYyBjaGlwIElELCBgWkxfUkVHX0lEYCBpcyBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgMHgwRTMwYCwgYW5kIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHJlZ2lzdGVycyB0byB3cml0ZSB0aGlzIGNoaXAgSUQgdG8sIHNvIHRoZSBjb3JyZWN0IHZhbHVlcyB3b3VsZCBub3QgYmUgd3JpdHRlbi4gVGhlIGxpa2VsaWhvb2Qgb2Ygc3l6a2FsbGVyIHJhbmRvbWx5IHdyaXRpbmcgdGhlIGNvcnJlY3QgdmFsdWVzIHRvIHJlZ2lzdGVyIGAweDAwYCBhbmQgYDB4MDFgIChvciB3aGF0ZXZlciB0aGUgZW5kaWFubmVzcyBpcyksIHRvIHNldCB0aGUgY29ycmVjdCBJRCBiZWZvcmUgYXR0ZW1wdGluZyB0byBwcm9iZSB0aGUgZHJpdmVyLCBpcyBpbmZpbml0ZXNpbWFsbHkgc21hbGwuIFBsdXMsIGBpMmMtc3R1YmAgaXNuJ3Qgc3l6a2FsbGVyJ3MgdHlwaWNhbCBhcHByb2FjaCBmb3IgZmFraW5nIGFyYml0cmFyeSBkZXZpY2VzLCBhbmQgcmVxdWlyZXMgbW9kdWxlIHBhcmFtZXRlcnMgdG8gc2V0IHVwIHRoZSBhZGRyZXNzZXMuXG5cbkkgYWxzbyByZW1lbWJlciBgc3l6X3VzYl9jb25uZWN0YCB3aGljaCBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcywgYnV0IGhlcmUgd2UgYXJlIHRhbGtpbmcgYWJvdXQgSTJDL1NQSS4gSXQncyBhIGRpZmZlcmVudCBiZWFzdC5cblxuU28sIHRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIHdheXMgdGhpcyBjb2RlIGNhbiBiZSByZWFjaGVkPyBOby4gSSd2ZSByZWNvbmZpcm1lZCB0aGF0IHRoaXMgY29kZSByZXNpZGVzIHNvbGVseSB3aXRoaW4gdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9gIGRpcmVjdG9yeSwgYW5kIGl0J3MgYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcy4gQ3J1Y2lhbGx5LCB0aGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhleSBhcmUgcGh5c2ljYWwgZGV2aWNlcy5cblxuTm93LCBsZXQncyBzZWUuIEknbGwgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9mIHRoZSBkZXZpY2UsIGp1c3QgdG8gYmUgc3VyZS4gTm9wZS4gSXQncyBhIHBoeXNpY2FsIERQTEwgY2hpcC5cblxuTm93LCBsZXQgbWUgZ28gYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zIEkgd2FzIGdpdmVuLiBUaGV5IGV4cGxpY2l0bHkgc3RhdGUgdG8gc2V0IFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgYSBwYXRjaCBjb250YWluczpcbiogQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuKiBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLlxuXG5UaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIEkyQy9TUEkgRFBMTCBkcml2ZXIuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGlzIG1lZXRzIHRoZSBjcml0ZXJpYSBwZXJmZWN0bHkuXG5cbkkndmUgcmV2aWV3ZWQgdGhlIHBhdGNoIGFnYWluLiBJdCBtb2RpZmllcyBmaWxlcyBsaWtlIGBjaGFuLmNgLCBgY29yZS5jYCwgYW5kIGBkcGxsLmNgIHdpdGhpbiB0aGUgYHpsMzA3M3hgIGRyaXZlciwgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0LiBCdXQgYmVjYXVzZSB0aGUgZHJpdmVyIGl0c2VsZiBjYW4ndCBiZSBwcm9iZWQgd2l0aG91dCB0aGUgcGh5c2ljYWwgTWljcm9jaGlwIEF6dXJpdGUgY2hpcCwgbm9uZSBvZiB0aGlzIGNvZGUgY2FuIGJlIGV4ZWN1dGVkIGJ5IHN5emthbGxlci5cblxuVGhlcmVmb3JlLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBjb2RlIGlzIHNvbGVseSB3aXRoaW4gYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIHdoaWNoIGlzIGZvciBhIHNwZWNpZmljIERQTEwgY2hpcCB3aGljaCBjYW5ub3QgYmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MTQzLCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1Mzo0MC4zNDI1NzY2NDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBJMkMvU1BJIGNvbm5lY3RlZCBEUExMIGRldmljZXMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBJMkMvU1BJIGNvbm5lY3RlZCBEUExMIGRldmljZXMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow7txp6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 02:51:30 +0000 UTC FinishedAt: 2026-08-01 02:53:42 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIEkyQy9TUEkgY29ubmVjdGVkIERQTEwgZGV2aWNlcy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjQyM2U1MGVjZDAwMWNkZTI4MzE4NDFjYzljYzE5MjQ3NjhjOTFhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDI6NTI6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5AQCAtMiw3ICYjNDM7Miw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tXHRkZXBlbmRzIG9uIE5FVFxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS1xuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4mIzQzO1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxuIFx0dHJpc3RhdGUgXCYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLXG4gXHRzZWxlY3QgUkVHTUFQX1NQSVxuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbmluZGV4IDRlYzJjZjUzZGFkNDYuLjUzMDMyZTc4MmZkNGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMjAyLDYgJiM0MzsyMDMsMTEgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbiBcdFx0emwzMDczeF9jaGFuX3JlZnNlbF9zdGF0ZV9nZXQoY2hhbiksXG4gXHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XG4gXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuJiM0MztcdFx0XHQgICAgICBcdTAwMjZjaGFuLVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuIFxuIFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXG5AQCAtMjM0LDYgJiM0MzsyNDAsMzA3IEBAIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldixcbiBcdHJldHVybiBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKlxuJiM0MzsgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCxcbiYjNDM7ICogaW5kaWNhdGluZyB0aGUgZGV2aWNlIGhhcyBjb21wbGV0ZWQgdGhlIHByZXZpb3VzIFRvRCBvcGVyYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuJiM0MztcdHU4IHRvZF9jdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChGSUVMRF9HRVQoWkxfRFBMTF9UT0RfQ1RSTF9DTUQsIHRvZF9jdHJsKSkge1xuJiM0MztcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxuJiM0MztcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmMgPT0gLUVUSU1FRE9VVCA/IC1FQlVTWSA6IHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbiYjNDM7ICpcbiYjNDM7ICogV3JpdGVzIHRoZSBzZW1hcGhvcmUgYW5kIGNvbW1hbmQgdG8gZHBsbF90b2RfY3RybC4gVGhlIGNhbGxlciBtdXN0XG4mIzQzOyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmdcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbnNlYztcbiYjNDM7XHR1NjQgc2VjO1xuJiM0MztcdHU4IGNtZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X2h6KVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXHUwMDI2bnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4mIzQzO1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB0czogdGltZSB0byBzZXRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuJiM0MztcdFx0XHRcdCAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcbiYjNDM7ICpcbiYjNDM7ICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuJiM0MzsgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXG4mIzQzOyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxuJiM0MzsgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjay5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXHUwMDI2dHNfbmV4dCwgTlVMTCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRvbyBjbG9zZSB0byAob3IgcGFzdCkgdGhlIG5leHQgcm9sbG92ZXIsIHdhaXQgaXQgb3V0ICovXG4mIzQzO1x0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4mIzQzO1x0aWYgKGRpZmYudHZfc2VjIFx1MDAzYyAwIHx8ICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2MgdGhyZXNob2xkX25zKSkge1xuJiM0MztcdFx0aWYgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjKVxuJiM0MztcdFx0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTtcbiYjNDM7XHRcdHRzX25leHQudHZfc2VjJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuJiM0MztcdHRzX25leHQgPSB0aW1lc3BlYzY0X2FkZCh0c19uZXh0LCBkZWx0YSk7XG4mIzQzO1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIGFkanVzdGVkIFRvRCBiYWNrIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcbiYjNDM7XHRpZiAoIXJjKVxuJiM0MztcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICYjNDM7LTFzKVxuJiM0MzsgKlxuJiM0MzsgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbiYjNDM7ICogdG8gdGhlIHNwZWNpZmllZCBjaGFubmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbiYjNDM7e1xuJiM0MztcdHM2NCB0aWVfZGF0YTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuJiM0MztcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xuJiM0MztcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuJiM0MztcdFx0XHRcdFpMX0RQTExfVElFX0NUUkxfT1BfV1IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbiYjNDM7ICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuJiM0MzsgKiBAdG9kX3N0ZXA6IGFsc28gc3RlcCB0aGUgVG9EIGNvdW50ZXJcbiYjNDM7ICpcbiYjNDM7ICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbiYjNDM7ICogdGhlIHN0ZXAgdmFsdWUgaXMgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4mIzQzO1x0XHRcdCAgICBib29sIHRvZF9zdGVwKVxuJiM0Mzt7XG4mIzQzO1x0dTggY3RybDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0ZXBfY3ljbGVzKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfFxuJiM0MztcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4mIzQzO1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4mIzQzO1x0aWYgKHRvZF9zdGVwKVxuJiM0MztcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45ZGM1YTNmMTk5MWYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbkBAIC01LDEwICYjNDM7NSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtyZWdzLmhcJiMzNDtcbiBcbiYjNDM7c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xuIHN0cnVjdCB6bDMwNzN4X2RldjtcbiBcbiAvKipcbkBAIC0xNiw2ICYjNDM7MTgsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxuICAqIEBtb2RlX3JlZnNlbDogbW9kZSBhbmQgcmVmZXJlbmNlIHNlbGVjdGlvbiByZWdpc3RlciB2YWx1ZVxuICAqIEByZWZfcHJpbzogcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyAoNCBiaXRzIHBlciByZWYsIFAvTiBwYWNrZWQpXG4mIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFza1xuICAqIEBtb25fc3RhdHVzOiBtb25pdG9yIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEByZWZzZWxfc3RhdHVzOiByZWZlcmVuY2Ugc2VsZWN0aW9uIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHNcbkBAIC0yNiw2ICYjNDM7MjksOSBAQCBzdHJ1Y3QgemwzMDczeF9jaGFuIHtcbiBcdFx0dThcdG1vZGVfcmVmc2VsO1xuIFx0XHR1OFx0cmVmX3ByaW9bWkwzMDczWF9OVU1fUkVGUyAvIDJdO1xuIFx0KTtcbiYjNDM7XHRzdHJ1Y3RfZ3JvdXAoaW52LCAvKiBJbnZhcmlhbnRzICovXG4mIzQzO1x0XHR1MTZcdG91dF9zdGVwX3RpbWVfbWFzaztcbiYjNDM7XHQpO1xuIFx0c3RydWN0X2dyb3VwKHN0YXQsXG4gXHRcdHU4XHRtb25fc3RhdHVzO1xuIFx0XHR1OFx0cmVmc2VsX3N0YXR1cztcbkBAIC00Miw2ICYjNDM7NDgsMjAgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuJiM0MztcbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuQEAgLTIwMCw2ICYjNDM7MjIwLDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGVcbiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuJiM0MzsgKlxuJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7emwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuJiM0MztcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMzMsNCAmIzQzOzI2OCwxNyBAQCBzdGF0aWMgaW5saW5lIHU4IHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIEZJRUxEX0dFVChaTF9EUExMX1JFRlNFTF9TVEFUVVNfUkVGU0VMLCBjaGFuLVx1MDAzZXJlZnNlbF9zdGF0dXMpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xuJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4mIzQzOyAqIEBvdXQ6IG91dHB1dCBpbmRleFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7emwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG91dClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhIShjaGFuLVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcdTAwMjYgQklUKG91dCkpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZiAvKiBfWkwzMDczWF9DSEFOX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbmluZGV4IDdmNWFmYWFhZTYzNDIuLmIyZjlmYzk3ZmQxYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTEwMzMsNiAmIzQzOzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbmluZGV4IDc4ZGMyMDhmM2VlYTIuLjJkYzgzNmQwYzhmNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTXHQoMzAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuIFxuIGVudW0gemwzMDczeF9mbGFncyB7XG4gXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxuQEAgLTU1LDYgJiM0Mzs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4mIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4mIzQzOyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXG4gICogQHJlZjogYXJyYXkgb2YgaW5wdXQgcmVmZXJlbmNlcyYjMzk7IGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJiMzOTsgaW52YXJpYW50c1xuQEAgLTcxLDYgJiM0Mzs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0cGhhc2Vfc3RlcF9sb2NrO1xuIFxuIFx0LyogSW52YXJpYW50cyAqL1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5pbmRleCAwNDg4YWU2YWM0ODZjLi4zMjA4NTJkZmM1OGNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yLDYgJiM0MzsyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiBcbkBAIC00MSw2ICYjNDM7NDMsNyBAQFxuICAqIEBwaGFzZV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgcGluIHBoYXNlIG9mZnNldFxuICAqIEBmcmVxX29mZnNldDogbGFzdCBzYXZlZCBmcmFjdGlvbmFsIGZyZXF1ZW5jeSBvZmZzZXRcbiAgKiBAbWVhc3VyZWRfZnJlcTogbGFzdCBzYXZlZCBtZWFzdXJlZCBmcmVxdWVuY3lcbiYjNDM7ICogQHBlcm91dF9pZHg6IFBUUCBwZXJvdXQgY2hhbm5lbCBpbmRleCwgb3IgLTEgaWYgbm90IHBlcm91dC1lbGlnaWJsZVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5AQCAtNTgsNiAmIzQzOzYxLDcgQEAgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xuIFx0czY0XHRcdFx0cGhhc2Vfb2Zmc2V0O1xuIFx0czY0XHRcdFx0ZnJlcV9vZmZzZXQ7XG4gXHR1MzJcdFx0XHRtZWFzdXJlZF9mcmVxO1xuJiM0MztcdHM4XHRcdFx0cGVyb3V0X2lkeDtcbiB9O1xuIFxuIC8qXG5AQCAtOTM1LDIxICYjNDM7OTM5LDE3IEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiB9XG4gXG4gc3RhdGljIGludFxuLXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi1cdFx0XHRcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLVx0XHRcdFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0MztfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcbiYjNDM7XHRcdFx0XHRcdHU2NCBmcmVxdWVuY3kpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuIFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4gXHR1MzIgbmV3X2Rpdiwgc3ludGhfZnJlcTtcbiBcdHN0cnVjdCB6bDMwNzN4X291dCBvdXQ7XG4gXHR1OCBvdXRfaWQ7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuIFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiBcdG91dCA9ICp6bDMwNzN4X291dF9zdGF0ZV9nZXQoemxkZXYsIG91dF9pZCk7XG5AQCAtMTAxMCw2ICYjNDM7MTAxMCwyMSBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXHRyZXR1cm4gemwzMDczeF9vdXRfc3RhdGVfc2V0KHpsZGV2LCBvdXRfaWQsIFx1MDAyNm91dCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50XG4mIzQzO3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiYjNDM7XHRcdFx0XHQgICAgICB2b2lkICpwaW5fcHJpdixcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4mIzQzO1x0XHRcdFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbl9wcml2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgZnJlcXVlbmN5KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4gemwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIFx0XHRcdFx0XHQgdm9pZCAqcGluX3ByaXYsXG5AQCAtMTYwNyw2ICYjNDM7MTYyMiw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsXG4gXHRwaW4tXHUwMDNlZHBsbCA9IHpsZHBsbDtcbiBcdHBpbi1cdTAwM2VkaXIgPSBkaXI7XG4gXHRwaW4tXHUwMDNlaWQgPSBpZDtcbiYjNDM7XHRwaW4tXHUwMDNlcGVyb3V0X2lkeCA9IC0xO1xuIFxuIFx0cmV0dXJuIHBpbjtcbiB9XG5AQCAtMTYyNSw2ICYjNDM7MTY0MSw0NCBAQCB6bDMwNzN4X2RwbGxfcGluX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbilcbiBcdGtmcmVlKHBpbik7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQgLSBjaGVjayBpZiBvdXRwdXQgcGluIGlzIHBlcm91dC1lbGlnaWJsZVxuJiM0MzsgKiBAcGluOiBEUExMIHBpbiB0byBjaGVja1xuJiM0MzsgKiBAcHJvcHM6IHBpbiBwcm9wZXJ0aWVzIChhbHJlYWR5IGZldGNoZWQgYnkgY2FsbGVyKVxuJiM0MzsgKlxuJiM0MzsgKiBBbiBvdXRwdXQgcGluIGlzIGVsaWdpYmxlIGZvciBQVFAgcGVyaW9kaWMgb3V0cHV0IGlmIGl0IGlzIHNpbmdsZS1lbmRlZFxuJiM0MzsgKiAobm90IGRpZmZlcmVudGlhbCkgYW5kIHN1cHBvcnRzIDEgSHogaW4gaXRzIGZyZXF1ZW5jeSBsaXN0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgZWxpZ2libGUsIGZhbHNlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2xcbiYjNDM7emwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfcGluX3Byb3BzICpwcm9wcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IHBpbi1cdTAwM2VkcGxsO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0dTggb3V0X2lkO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuJiM0MztcdGlmICh6bDMwNzN4X2Rldl9vdXRfaXNfZGlmZih6bGRwbGwtXHUwMDNlZGV2LCBvdXRfaWQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdGlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRbaV0ubWluID09IDEpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIHBpblxuICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW5cbkBAIC0xNjY2LDYgJiM0MzsxNzIwLDggQEAgemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLCB1MzIgaW5kZXgpXG4gXHRcdGlmIChwaW4tXHUwMDNlcHJpbyA9PSBaTF9EUExMX1JFRl9QUklPX05PTkUpXG4gXHRcdFx0LyogQ2xhbXAgcHJpbyB0byBtYXggdmFsdWUgKi9cbiBcdFx0XHRwaW4tXHUwMDNlcHJpbyA9IFpMX0RQTExfUkVGX1BSSU9fTUFYO1xuJiM0MztcdH0gZWxzZSBpZiAoemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQocGluLCBwcm9wcykpIHtcbiYjNDM7XHRcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHQvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovXG5AQCAtMTg5Niw2ICYjNDM7MTk1Miw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdHU4IGlkLCBpbmRleDtcbiBcdGludCByYztcbiBcbiYjNDM7XHR6bGRwbGwtXHUwMDNlcHRwX2luZm8ubl9wZXJfb3V0ID0gMDtcbiYjNDM7XG4gXHQvKiBQcm9jZXNzIGlucHV0IHBpbnMgKi9cbiBcdGZvciAoaW5kZXggPSAwOyBpbmRleCBcdTAwM2MgWkwzMDczWF9OVU1fUElOUzsgaW5kZXgmIzQzOyYjNDM7KSB7XG4gXHRcdC8qIEZpcnN0IGlucHV0IHBpbnMgYW5kIHRoZW4gb3V0cHV0IHBpbnMgKi9cbkBAIC0yMjc1LDQ1ICYjNDM7MjMzMyw0NDcgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuJiM0MzsvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiAmIzQzOy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbiYjNDM7XG4gLyoqXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lXG4mIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiBcbi1cdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuLVx0aWYgKCF6bGRwbGwpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIHpsZHBsbDtcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4mIzQzOyAqXG4mIzQzOyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4mIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxuJiM0MzsgKlxuJiM0MzsgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4mIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXG4mIzQzOyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbiYjNDM7ICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4mIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlXG4mIzQzOyAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuJiM0MztcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbiYjNDM7XHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4mIzQzO1x0czMyIHN0ZXBfY3ljbGVzO1xuJiM0MztcdHUzMiBzeW50aF9mcmVxO1xuJiM0MztcdGludCByYztcbiYjNDM7XHR1OCBpO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbiYjNDM7XHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4mIzQzO1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgb3V0X2lkKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuJiM0MztcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4mIzQzO1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXG4mIzQzO1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4mIzQzO1x0XHRcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3ludGhfbWFza1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4mIzQzO1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICF0b2Rfc3RlcHBlZCk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0aWYgKHRvZF9zdGVwcGVkKSB7XG4mIzQzO1x0XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O1BhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR0b2Rfc3RlcHBlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxuJiM0MztcdCAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXRvZF9zdGVwcGVkKSB7XG4mIzQzO1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuJiM0MztcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4gICpcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4mIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcbiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxuJiM0MzsgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXZvaWRcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbiYjNDM7XHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4mIzQzO1xuJiM0MztcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbiYjNDM7XHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxuJiM0MztcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGFicyhkZWx0YSkgXHUwMDNlPSBOU0VDX1BFUl9TRUMpIHtcbiYjNDM7XHRcdHMzMiByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbiYjNDM7XHRcdHRzLnR2X25zZWMgPSAwO1xuJiM0MztcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4mIzQzO1x0XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xuJiM0MztcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuJiM0MztcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4mIzQzO1x0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcbiYjNDM7XHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmMgXHUwMDI2XHUwMDI2IHNlY19hZGp1c3RlZCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCwgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0czY0IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuJiM0MztcdCAqXG4mIzQzO1x0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcbiYjNDM7XHQgKi9cbiYjNDM7XHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbiYjNDM7XHRpZiAob2Zmc2V0ID09IGNoYW4tXHUwMDNlZGZfb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIG9mZnNldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuJiM0MzsgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24mIzM5O3Qgc3VwcG9ydCBUSUUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHMzMlxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4mIzQzO1x0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3BpbiAtIGZpbmQgcGluIGJ5IHBlcm91dCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgcGluLCBvciBOVUxMIGlmIG5vdCBmb3VuZFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBpbnQgaWR4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAocGluLVx1MDAzZXBlcm91dF9pZHggPT0gaWR4KVxuJiM0MztcdFx0XHRyZXR1cm4gcGluO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBycTogdGhlIHJlcXVlc3RlZCBjbG9jayBmdW5jdGlvbiBhbmQgcGFyYW1ldGVyc1xuJiM0MzsgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXG4mIzQzOyAqXG4mIzQzOyAqIEhhbmRsZXMgUFRQX0NMS19SRVFfUEVST1VUIHJlcXVlc3RzLiBPbmx5IDFQUFMgKHBlcmlvZCA9IDFzKSBpcyBzdXBwb3J0ZWQuXG4mIzQzOyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xuJiM0MzsgKiBhcyB0aGUgc2lnbmFsIGlzIG5vdCBkaXNhYmxlZC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaWR4O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKHJxLVx1MDAzZXR5cGUgIT0gUFRQX0NMS19SRVFfUEVST1VUKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZHggPSBycS1cdTAwM2VwZXJvdXQuaW5kZXg7XG4mIzQzO1x0aWYgKGlkeCBcdTAwM2U9IGluZm8tXHUwMDNlbl9wZXJfb3V0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXG4mIzQzO1x0ICogaXMgYSBuby1vcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW9uKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXG4mIzQzO1x0aWYgKHJxLVx1MDAzZXBlcm91dC5wZXJpb2Quc2VjICE9IDEgfHwgcnEtXHUwMDNlcGVyb3V0LnBlcmlvZC5uc2VjICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcbiYjNDM7XHRpZiAoIXBpbikge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfZGV2X291dHB1dF9waW5fZnJlcV9nZXQoemxkcGxsLVx1MDAzZWRldiwgcGluLVx1MDAzZWlkKSA9PSAxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHRkcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbi1cdTAwM2VkcGxsX3Bpbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4mIzQzO1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzQzO1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuJiM0MztcdC5nZXR0aW1leDY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcbiYjNDM7XHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuJiM0MztcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbiYjNDM7XHQuYWRqZmluZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXG4mIzQzO1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4mIzQzO1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4mIzQzO1x0LmVuYWJsZVx0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xuJiM0MztcbiYjNDM7XHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbiYjNDM7XHRcdCBcJiMzNDt6bDMwNzN4LWRwbGwldVwmIzM0OywgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNnpsZHBsbC1cdTAwM2VwdHBfaW5mbywgemxkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVx1MDAzZXB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4mIzQzO1x0fVxuIH1cbiBcbiAvKipcbkBAIC0yMzk4LDYgJiM0MzsyODU4LDQ4IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1xuJiM0MztcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuJiM0MztcdGlmICghemxkcGxsKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbiYjNDM7XHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbiYjNDM7XHR6bGRwbGwtXHUwMDNlcHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemxkcGxsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4mIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKi9cbiYjNDM7dm9pZFxuJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdGtmcmVlKHpsZHBsbCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuQEAgLTI0MjgsNiAmIzQzOzI5MzAsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuJiM0MztcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgJiM0MzsyOTUwLDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB2b2lkXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHtcbi1cdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cbiYjNDM7XHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiAmIzQzOzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbiBcbkBAIC0yMiw2ICYjNDM7MjMsOCBAQFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcbiAgKiBAcGluczogbGlzdCBvZiBwaW5zXG4mIzQzOyAqIEBwdHBfaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiAmIzQzOzM5LDggQEAgc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRlbnVtIGRwbGxfdHlwZVx0XHRcdHR5cGU7XG4gXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcdFx0bG9ja19zdGF0dXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHBpbnM7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja19pbmZvXHRcdHB0cF9pbmZvO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi40NDc3NTdlOTk4NDVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFx0XHRcdEdFTk1BU0soMiwgMClcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcdFx0NFxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXHRcdFx0NFxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSlcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXHQxXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0OFxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4mIzQzO1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgJiM0MzsyMDcsOSBAQFxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcbiYjNDM7ICpcbiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuJiM0MzsgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5AQCAtMjAyLDYgJiM0MzsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxuJiM0MztcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgJiM0MzsyNTYsOCBAQFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFx0XHRHRU5NQVNLKDYsIDQpXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTMxNiw2ICYjNDM7MzUzLDI1IEBAXG4gI2RlZmluZSBaTF9SRUdfT1VUUFVUX0VTWU5DX1dJRFRIXHRcdFpMX1JFRygxNCwgMHgxOCwgNClcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfQ09NUFx0XHRaTF9SRUcoMTQsIDB4MjAsIDQpXG4gXG4mIzQzOy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuJiM0MzsgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwXG4mIzQzOyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXHRCSVQoMylcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXHQxXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1x0XHRaTF9SRUcoOSwgMHgzYSwgMilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4mIzQzO1xuIC8qXG4gICogUmVnaXN0ZXIgUGFnZSAyNTUgLSBIVyByZWdpc3RlcnMgYWNjZXNzXG4gICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIEkyQy9TUEkgY29ubmVjdGVkIERQTEwgZGV2aWNlcy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjQyM2U1MGVjZDAwMWNkZTI4MzE4NDFjYzljYzE5MjQ3NjhjOTFhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDI6NTI6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwppbmRleCA1YmJjYTE0MDA1ODEzLi5kYTE3MzFhY2UxNWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcKQEAgLTIsNyAmIzQzOzIsNyBAQAogCiBjb25maWcgWkwzMDczWAogCXRyaXN0YXRlICYjMzQ7TWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcyYjMzQ7IGlmIENPTVBJTEVfVEVTVAotCWRlcGVuZHMgb24gTkVUCiYjNDM7CWRlcGVuZHMgb24gTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0sKIAlzZWxlY3QgRFBMTAogCXNlbGVjdCBORVRfREVWTElOSwogCXNlbGVjdCBSRUdNQVAKQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYCiAKIGNvbmZpZyBaTDMwNzNYX0kyQwogCXRyaXN0YXRlICYjMzQ7STJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQKJiM0MzsJZGVwZW5kcyBvbiBJMkMgJmFtcDsmYW1wOyBORVQgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DSwogCXNlbGVjdCBSRUdNQVBfSTJDCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCkBAIC0yOCw3ICYjNDM7MjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkMKIAogY29uZmlnIFpMMzA3M1hfU1BJCiAJdHJpc3RhdGUgJiMzNDtTUEkgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzJiMzNDsKLQlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSQomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFNQSSAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLCiAJc2VsZWN0IFJFR01BUF9TUEkKIAlzZWxlY3QgWkwzMDczWAogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYwppbmRleCA0ZWMyY2Y1M2RhZDQ2Li41MzAzMmU3ODJmZDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCkBAIC0yMDIsNiAmIzQzOzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQogCQl6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSwKIAkJemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTsKIAomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssCiYjNDM7CQkJICAgICAgJmFtcDtjaGFuLSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O211bHRpb3BfbG9jayk7CiAKIAkvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi8KQEAgLTIzNCw2ICYjNDM7MjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsCiAJcmV0dXJuICZhbXA7emxkZXYtJmd0O2NoYW5baW5kZXhdOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhcgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICoKJiM0MzsgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCwKJiM0MzsgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiYjNDM7CXU4IHRvZF9jdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksICZhbXA7dG9kX2N0cmwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHsKJiM0MzsJY2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjoKJiM0MzsJCXRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmQKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5CiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lCiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLgomIzQzOyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZQomIzQzOyAqIG5leHQtSHogc2Vjb25kcyBieSBvbmUuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgJmFtcDt0c19uZXh0LCBOVUxMKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBJZiB0b28gY2xvc2UgdG8gKG9yIHBhc3QpIHRoZSBuZXh0IHJvbGxvdmVyLCB3YWl0IGl0IG91dCAqLwomIzQzOwlkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTsKJiM0MzsJaWYgKGRpZmYudHZfc2VjICZsdDsgMCB8fCAoIWRpZmYudHZfc2VjICZhbXA7JmFtcDsgZGlmZi50dl9uc2VjICZsdDsgdGhyZXNob2xkX25zKSkgewomIzQzOwkJaWYgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYykKJiM0MzsJCQlmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTsKJiM0MzsJCXRzX25leHQudHZfc2VjJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi8KJiM0MzsJdHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTsKJiM0MzsJaWYgKCF0aW1lc3BlYzY0X3ZhbGlkKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogV3JpdGUgYWRqdXN0ZWQgVG9EIGJhY2sgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHMKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTsKJiM0MzsJaWYgKCFyYykKJiM0MzsJCXpsZGV2LSZndDtjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAmIzQzOy0xcykKJiM0MzsgKgomIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YQomIzQzOyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpCiYjNDM7ewomIzQzOwlzNjQgdGllX2RhdGE7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCSAgWkxfRFBMTF9USUVfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqLwomIzQzOwl0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQlaTF9EUExMX1RJRV9DVFJMX09QX1dSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb24KJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXAKJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzCiYjNDM7ICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZQomIzQzOyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsCiYjNDM7CQkJICAgIGJvb2wgdG9kX3N0ZXApCiYjNDM7ewomIzQzOwl1OCBjdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsCiYjNDM7CQkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsCiYjNDM7CQkJICAgICAgIHN0ZXBfY3ljbGVzKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJY3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfAomIzQzOwkgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7CiYjNDM7CWlmICh0b2Rfc3RlcCkKJiM0MzsJCWN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmUKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAppbmRleCBkYzljNmQ5NWJkZWU3Li45ZGM1YTNmMTk5MWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oCkBAIC01LDEwICYjNDM7NSwxMiBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdGRkZWYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtyZWdzLmgmIzM0OwogCiYjNDM7c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wOwogc3RydWN0IHpsMzA3M3hfZGV2OwogCiAvKioKQEAgLTE2LDYgJiM0MzsxOCw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldjsKICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWUKICAqIEBtb2RlX3JlZnNlbDogbW9kZSBhbmQgcmVmZXJlbmNlIHNlbGVjdGlvbiByZWdpc3RlciB2YWx1ZQogICogQHJlZl9wcmlvOiByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzICg0IGJpdHMgcGVyIHJlZiwgUC9OIHBhY2tlZCkKJiM0MzsgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2sKICAqIEBtb25fc3RhdHVzOiBtb25pdG9yIHN0YXR1cyByZWdpc3RlciB2YWx1ZQogICogQHJlZnNlbF9zdGF0dXM6IHJlZmVyZW5jZSBzZWxlY3Rpb24gc3RhdHVzIHJlZ2lzdGVyIHZhbHVlCiAgKiBAZGZfb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlIGluIDJeLTQ4IHN0ZXBzCkBAIC0yNiw2ICYjNDM7MjksOSBAQCBzdHJ1Y3QgemwzMDczeF9jaGFuIHsKIAkJdTgJbW9kZV9yZWZzZWw7CiAJCXU4CXJlZl9wcmlvW1pMMzA3M1hfTlVNX1JFRlMgLyAyXTsKIAkpOwomIzQzOwlzdHJ1Y3RfZ3JvdXAoaW52LCAvKiBJbnZhcmlhbnRzICovCiYjNDM7CQl1MTYJb3V0X3N0ZXBfdGltZV9tYXNrOwomIzQzOwkpOwogCXN0cnVjdF9ncm91cChzdGF0LAogCQl1OAltb25fc3RhdHVzOwogCQl1OAlyZWZzZWxfc3RhdHVzOwpAQCAtNDIsNiAmIzQzOzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LAogaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpOwogaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpOwogCiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCSAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTsKJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTsKJiM0MzsKJiM0MztpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpOwomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlCiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCkBAIC0yMDAsNiAmIzQzOzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQogCXJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlCiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQomIzQzOyAqCiYjNDM7ICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8CiYjNDM7CQl6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHkKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIzMyw0ICYjNDM7MjY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIEZJRUxEX0dFVChaTF9EUExMX1JFRlNFTF9TVEFUVVNfUkVGU0VMLCBjaGFuLSZndDtyZWZzZWxfc3RhdHVzKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFzawomIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKJiM0MzsgKiBAb3V0OiBvdXRwdXQgaW5kZXgKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnMKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0Mzt6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggb3V0KQomIzQzO3sKJiM0MzsJcmV0dXJuICEhKGNoYW4tJmd0O291dF9zdGVwX3RpbWVfbWFzayAmYW1wOyBCSVQob3V0KSk7CiYjNDM7fQomIzQzOwogI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCmluZGV4IDdmNWFmYWFhZTYzNDIuLmIyZjlmYzk3ZmQxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKQEAgLTEwMzMsNiAmIzQzOzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpCiAJICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuCiAJICovCiAJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7bXVsdGlvcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKJiM0MzsJCQkJICAgICAmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XG4mIzM0Oyk7CiYjNDM7CXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAogCQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oCmluZGV4IDc4ZGMyMDhmM2VlYTIuLjJkYzgzNmQwYzhmNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC03MSw2ICYjNDM7NzcsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwppbmRleCAwNDg4YWU2YWM0ODZjLi4zMjA4NTJkZmM1OGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29udGFpbmVyX29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwpAQCAtMTMsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcHJpbnRmLmgmZ3Q7CiAKQEAgLTQxLDYgJiM0Mzs0Myw3IEBACiAgKiBAcGhhc2Vfb2Zmc2V0OiBsYXN0IHNhdmVkIHBpbiBwaGFzZSBvZmZzZXQKICAqIEBmcmVxX29mZnNldDogbGFzdCBzYXZlZCBmcmFjdGlvbmFsIGZyZXF1ZW5jeSBvZmZzZXQKICAqIEBtZWFzdXJlZF9mcmVxOiBsYXN0IHNhdmVkIG1lYXN1cmVkIGZyZXF1ZW5jeQomIzQzOyAqIEBwZXJvdXRfaWR4OiBQVFAgcGVyb3V0IGNoYW5uZWwgaW5kZXgsIG9yIC0xIGlmIG5vdCBwZXJvdXQtZWxpZ2libGUKICAqLwogc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKQEAgLTU4LDYgJiM0Mzs2MSw3IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHsKIAlzNjQJCQlwaGFzZV9vZmZzZXQ7CiAJczY0CQkJZnJlcV9vZmZzZXQ7CiAJdTMyCQkJbWVhc3VyZWRfZnJlcTsKJiM0MzsJczgJCQlwZXJvdXRfaWR4OwogfTsKIAogLyoKQEAgLTkzNSwyMSAmIzQzOzkzOSwxNyBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCiB9CiAKIHN0YXRpYyBpbnQKLXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKLQkJCQkgICAgICB2b2lkICpwaW5fcHJpdiwKLQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsCi0JCQkJICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LAotCQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0MztfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLAomIzQzOwkJCQkJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwKJiM0MzsJCQkJCXU2NCBmcmVxdWVuY3kpCiB7Ci0Jc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2OwogCXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7CiAJY29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoOwogCXUzMiBuZXdfZGl2LCBzeW50aF9mcmVxOwogCXN0cnVjdCB6bDMwNzN4X291dCBvdXQ7CiAJdTggb3V0X2lkOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiAKIAlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKIAlvdXQgPSAqemwzMDczeF9vdXRfc3RhdGVfZ2V0KHpsZGV2LCBvdXRfaWQpOwpAQCAtMTAxMCw2ICYjNDM7MTAxMCwyMSBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCiAJcmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCAmYW1wO291dCk7CiB9CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7emwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAomIzQzOwkJCQkgICAgICB2b2lkICpwaW5fcHJpdiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLAomIzQzOwkJCQkgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbl9wcml2LAomIzQzOwkJCQkJCSAgICAgICBmcmVxdWVuY3kpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQKIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKIAkJCQkJIHZvaWQgKnBpbl9wcml2LApAQCAtMTYwNyw2ICYjNDM7MTYyMiw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsCiAJcGluLSZndDtkcGxsID0gemxkcGxsOwogCXBpbi0mZ3Q7ZGlyID0gZGlyOwogCXBpbi0mZ3Q7aWQgPSBpZDsKJiM0MzsJcGluLSZndDtwZXJvdXRfaWR4ID0gLTE7CiAKIAlyZXR1cm4gcGluOwogfQpAQCAtMTYyNSw2ICYjNDM7MTY0MSw0NCBAQCB6bDMwNzN4X2RwbGxfcGluX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbikKIAlrZnJlZShwaW4pOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQgLSBjaGVjayBpZiBvdXRwdXQgcGluIGlzIHBlcm91dC1lbGlnaWJsZQomIzQzOyAqIEBwaW46IERQTEwgcGluIHRvIGNoZWNrCiYjNDM7ICogQHByb3BzOiBwaW4gcHJvcGVydGllcyAoYWxyZWFkeSBmZXRjaGVkIGJ5IGNhbGxlcikKJiM0MzsgKgomIzQzOyAqIEFuIG91dHB1dCBwaW4gaXMgZWxpZ2libGUgZm9yIFBUUCBwZXJpb2RpYyBvdXRwdXQgaWYgaXQgaXMgc2luZ2xlLWVuZGVkCiYjNDM7ICogKG5vdCBkaWZmZXJlbnRpYWwpIGFuZCBzdXBwb3J0cyAxIEh6IGluIGl0cyBmcmVxdWVuY3kgbGlzdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBlbGlnaWJsZSwgZmFsc2Ugb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wKJiM0Mzt6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X3Bpbl9wcm9wcyAqcHJvcHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBwaW4tJmd0O2RwbGw7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CXU4IG91dF9pZDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi0mZ3Q7aWQpOwomIzQzOwlpZiAoemwzMDczeF9kZXZfb3V0X2lzX2RpZmYoemxkcGxsLSZndDtkZXYsIG91dF9pZCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY2hhbiwgb3V0X2lkKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHByb3BzLSZndDtkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChwcm9wcy0mZ3Q7ZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZFtpXS5taW4gPT0gMSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBwaW4KICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW4KQEAgLTE2NjYsNiAmIzQzOzE3MjAsOCBAQCB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sIHUzMiBpbmRleCkKIAkJaWYgKHBpbi0mZ3Q7cHJpbyA9PSBaTF9EUExMX1JFRl9QUklPX05PTkUpCiAJCQkvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqLwogCQkJcGluLSZndDtwcmlvID0gWkxfRFBMTF9SRUZfUFJJT19NQVg7CiYjNDM7CX0gZWxzZSBpZiAoemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQocGluLCBwcm9wcykpIHsKJiM0MzsJCXBpbi0mZ3Q7cGVyb3V0X2lkeCA9IHpsZHBsbC0mZ3Q7cHRwX2luZm8ubl9wZXJfb3V0JiM0MzsmIzQzOzsKIAl9CiAKIAkvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovCkBAIC0xODk2LDYgJiM0MzsxOTUyLDggQEAgemwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCXU4IGlkLCBpbmRleDsKIAlpbnQgcmM7CiAKJiM0MzsJemxkcGxsLSZndDtwdHBfaW5mby5uX3Blcl9vdXQgPSAwOwomIzQzOwogCS8qIFByb2Nlc3MgaW5wdXQgcGlucyAqLwogCWZvciAoaW5kZXggPSAwOyBpbmRleCAmbHQ7IFpMMzA3M1hfTlVNX1BJTlM7IGluZGV4JiM0MzsmIzQzOykgewogCQkvKiBGaXJzdCBpbnB1dCBwaW5zIGFuZCB0aGVuIG91dHB1dCBwaW5zICovCkBAIC0yMjc1LDQ1ICYjNDM7MjMzMyw0NDcgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldikKIAlyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX1NZTlRIX1BIQVNFX1NISUZUX0NUUkwsIDB4MDEpOwogfQogCiYjNDM7LyogTWF4aW11bSBmcmVxdWVuY3kgYWRqdXN0bWVudDogJiM0MzstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi8KJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESgkxMDAwMDAwMAomIzQzOwogLyoqCi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQotICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXIKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQgLSByZWFkIGN1cnJlbnQgdGltZSBmcm9tIFRvRCBjb3VudGVycwomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lCiYjNDM7ICogQHN0czogb3B0aW9uYWwgc3lzdGVtIHRpbWVzdGFtcCBwYWlyIGZvciBjcm9zcy10aW1lc3RhbXBpbmcKICAqCi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAomIzQzOwkJCQkgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsIGZhbHNlLCB0cywgc3RzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWUKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXQKICAqCi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCi1zdHJ1Y3QgemwzMDczeF9kcGxsICoKLXpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKQogewotCXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwogCi0JemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7Ci0JaWYgKCF6bGRwbGwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwogCi0JemxkcGxsLSZndDtkZXYgPSB6bGRldjsKLQl6bGRwbGwtJmd0O2lkID0gY2g7Ci0JbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDt6bGRwbGwtJmd0O3BpbnMpOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF93cml0ZSh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgKnRzKTsKJiM0Mzt9CiAKLQlyZXR1cm4gemxkcGxsOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbAomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQywKJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpCiYjNDM7ICoKJiM0MzsgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoCiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzCiYjNDM7ICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uCiYjNDM7ICoKJiM0MzsgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluCiYjNDM7ICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHMKJiM0MzsgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nCiYjNDM7ICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9ECiYjNDM7ICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGUKJiM0MzsgKiBsb3dlc3QtSUQgc3ludGgmIzM5O3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbm8gc3ludGhzIGF2YWlsYWJsZSwgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwKJiM0MzsJCQkJCSAgICAgICBzNjQgZGVsdGEpCiYjNDM7ewomIzQzOwl1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoOwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluOwomIzQzOwl1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7CiYjNDM7CWJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTsKJiM0MzsJczMyIHN0ZXBfY3ljbGVzOwomIzQzOwl1MzIgc3ludGhfZnJlcTsKJiM0MzsJaW50IHJjOwomIzQzOwl1OCBpOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CS8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJdTggb3V0X2lkLCBzeW50aF9pZDsKJiM0MzsKJiM0MzsJCWlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7CiYjNDM7CQlpZiAoc3ludGhfaWQgJmd0Oz0gWkwzMDczWF9OVU1fU1lOVEhTKSB7CiYjNDM7CQkJZGV2X3dhcm4oemxkZXYtJmd0O2RldiwgJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxuJiMzNDssCiYjNDM7CQkJCSBvdXRfaWQpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJc3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBaTDMwNzNYX05VTV9TWU5USFM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTsKJiM0MzsJCWlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fAomIzQzOwkJICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC0mZ3Q7aWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7CiYjNDM7CiYjNDM7CQkvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi8KJiM0MzsJCWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCQlmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTsKJiM0MzsKJiM0MzsJCWlmICghc3ludGhfbWFza1tpXSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqLwomIzQzOwkJc3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgIHN5bnRoX21hc2tbaV0sIHN0ZXBfY3ljbGVzLAomIzQzOwkJCQkJICAgICAhdG9kX3N0ZXBwZWQpOwomIzQzOwkJaWYgKHJjKSB7CiYjNDM7CQkJaWYgKHRvZF9zdGVwcGVkKSB7CiYjNDM7CQkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkgJiMzNDtQYXJ0aWFsIHBoYXNlIHN0ZXAgZmFpbHVyZVxuJiMzNDspOwomIzQzOwkJCQlyZXR1cm4gMDsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwkJdG9kX3N0ZXBwZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZmlyc3Rfc3ludGhfZnJlcSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyogTm8gZW5hYmxlZCBvdXRwdXRzIGZvdW5kOyBzdGVwIFRvRCBjb3VudGVyIG9ubHkgdXNpbmcgdGhlCiYjNDM7CSAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS4KJiM0MzsJICovCiYjNDM7CWlmICghdG9kX3N0ZXBwZWQpIHsKJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIDAsCiYjNDM7CQkJCQkgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQotICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKICAqCi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqIEZvciBOQ08sIGxhcmdlIGRlbHRhcyAoJmd0Oz0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9ECiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvcgomIzQzOyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksCiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLgomIzQzOyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kCiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiAgKi8KLXZvaWQKLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSkKIHsKLQlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJYm9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgdHM7CiYjNDM7CWludCByYzsKIAotCW11dGV4X2Rlc3Ryb3koJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCWtmcmVlKHpsZHBsbCk7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJLyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqLwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pICZhbXA7JmFtcDsKJiM0MzsJICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCQkgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpOwomIzQzOwomIzQzOwkvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kCiYjNDM7CSAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtCiYjNDM7CSAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuCiYjNDM7CSAqLwomIzQzOwlpZiAoYWJzKGRlbHRhKSAmZ3Q7PSBOU0VDX1BFUl9TRUMpIHsKJiM0MzsJCXMzMiByZW1haW5kZXI7CiYjNDM7CiYjNDM7CQl0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCAmYW1wO3JlbWFpbmRlcik7CiYjNDM7CQl0cy50dl9uc2VjID0gMDsKJiM0MzsJCWRlbHRhID0gcmVtYWluZGVyOwomIzQzOwomIzQzOwkJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLSZndDtpZCwgdHMpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJCXNlY19hZGp1c3RlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQkvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqLwomIzQzOwkJaWYgKCFkZWx0YSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqLwomIzQzOwlpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLSZndDtpZCwgZGVsdGEpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsCiYjNDM7CQkJCSAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpOwomIzQzOwomIzQzOwkvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFjawomIzQzOwkgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm4KJiM0MzsJICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmQKJiM0MzsJICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3QKJiM0MzsJICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuCiYjNDM7CSAqLwomIzQzOwlpZiAocmMgJmFtcDsmYW1wOyBzZWNfYWRqdXN0ZWQpIHsKJiM0MzsJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3kKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNikKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJczY0IG9mZnNldDsKJiM0MzsKJiM0MzsJLyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczoKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjYKJiM0MzsJICoKJiM0MzsJICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjYKJiM0MzsJICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNQomIzQzOwkgKi8KJiM0MzsJb2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwljaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCk7CiYjNDM7CWlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKQomIzQzOwkJcmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7CiYjNDM7CWlmIChvZmZzZXQgPT0gY2hhbi0mZ3Q7ZGZfb2Zmc2V0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtJmd0O2RldiwgemxkcGxsLSZndDtpZCwgb2Zmc2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2UKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMKJiM0MzsgKgomIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvcgomIzQzOyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24mIzM5O3Qgc3VwcG9ydCBUSUUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CiYjNDM7CWlmICghZGVsdGEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHMzMgomIzQzO3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZCkKJiM0Mzt7CiYjNDM7CS8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gJiM0MzstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFcKJiM0MzsJICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4gLSBmaW5kIHBpbiBieSBwZXJvdXQgY2hhbm5lbCBpbmRleAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbAomIzQzOyAqIEBpZHg6IHBlcm91dCBjaGFubmVsIGluZGV4IHRvIGZpbmQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgcGluLCBvciBOVUxMIGlmIG5vdCBmb3VuZAomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqCiYjNDM7emwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBpbnQgaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sICZhbXA7emxkcGxsLSZndDtwaW5zLCBsaXN0KSB7CiYjNDM7CQlpZiAocGluLSZndDtwZXJvdXRfaWR4ID09IGlkeCkKJiM0MzsJCQlyZXR1cm4gcGluOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnMKJiM0MzsgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlCiYjNDM7ICoKJiM0MzsgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLgomIzQzOyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZwomIzQzOyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsJdW5zaWduZWQgaW50IGlkeDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAocnEtJmd0O3R5cGUgIT0gUFRQX0NMS19SRVFfUEVST1VUKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZHggPSBycS0mZ3Q7cGVyb3V0LmluZGV4OwomIzQzOwlpZiAoaWR4ICZndDs9IGluZm8tJmd0O25fcGVyX291dCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBUb2dnbGluZyBvdXRwdXQgcGlucyBjYW4gcHJvZHVjZSBydW50IHB1bHNlcywgc28gZGlzYWJsZQomIzQzOwkgKiBpcyBhIG5vLW9wLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFvbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBPbmx5IGFjY2VwdCBleGFjdGx5IDFQUFMgKHBlcmlvZC5zZWMgPT0gMSwgbnNlYyA9PSAwKSAqLwomIzQzOwlpZiAocnEtJmd0O3Blcm91dC5wZXJpb2Quc2VjICE9IDEgfHwgcnEtJmd0O3Blcm91dC5wZXJpb2QubnNlYyAhPSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlwaW4gPSB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3Bpbih6bGRwbGwsIGlkeCk7CiYjNDM7CWlmICghcGluKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovCiYjNDM7CWlmICh6bDMwNzN4X2Rldl9vdXRwdXRfcGluX2ZyZXFfZ2V0KHpsZHBsbC0mZ3Q7ZGV2LCBwaW4tJmd0O2lkKSA9PSAxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW4sIDEpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJZHBsbF9waW5fY2hhbmdlX250ZihwaW4tJmd0O2RwbGxfcGluKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHsKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzOwkubWF4X2Fkagk9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESiwKJiM0MzsJLmdldHRpbWV4NjQJPSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsCiYjNDM7CS5zZXR0aW1lNjQJPSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCwKJiM0MzsJLmFkanRpbWUJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsCiYjNDM7CS5hZGpmaW5lCT0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLAomIzQzOwkuYWRqcGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLAomIzQzOwkuZ2V0bWF4cGhhc2UJPSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLAomIzQzOwkuZW5hYmxlCQk9IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvcgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtJmd0O2RldjsKJiM0MzsJc3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrOwomIzQzOwomIzQzOwlzbnByaW50Zih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtJmd0O3B0cF9pbmZvLm5hbWUpLAomIzQzOwkJICYjMzQ7emwzMDczeC1kcGxsJXUmIzM0OywgemxkcGxsLSZndDtpZCk7CiYjNDM7CiYjNDM7CXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmYW1wO3psZHBsbC0mZ3Q7cHRwX2luZm8sIHpsZGV2LSZndDtkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHsKJiM0MzsJCWRldl9lcnIoemxkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcbiYjMzQ7LAomIzQzOwkJCXpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTsKJiM0MzsJfQomIzQzOwomIzQzOwl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IHB0cF9jbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbAomIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtJmd0O3B0cF9jbG9jaykpIHsKJiM0MzsJCXB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC0mZ3Q7cHRwX2Nsb2NrKTsKJiM0MzsJCXpsZHBsbC0mZ3Q7cHRwX2Nsb2NrID0gTlVMTDsKJiM0MzsJfQogfQogCiAvKioKQEAgLTIzOTgsNiAmIzQzOzI4NTgsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICoKJiM0MzsgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKgomIzQzO3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDsKJiM0MzsKJiM0MzsJemxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7CiYjNDM7CWlmICghemxkcGxsKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7CiYjNDM7CXpsZHBsbC0mZ3Q7aWQgPSBjaDsKJiM0MzsJemxkcGxsLSZndDtwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsZHBsbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlCiYjNDM7ICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLgomIzQzOyAqLwomIzQzO3ZvaWQKJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlXQVJOKHpsZHBsbC0mZ3Q7ZHBsbF9kZXYsICYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJa2ZyZWUoemxkcGxsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnMKICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQpAQCAtMjQyOCw2ICYjNDM7MjkzMCwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NDEsNyAmIzQzOzI5NTAsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogdm9pZAogemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQogewotCS8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi8KJiM0MzsJemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7CiAJemwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oCmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NvcmUuaCYjMzQ7CiAKQEAgLTIyLDYgJiM0MzsyMyw4IEBACiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKQogICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXMKICAqIEBwaW5zOiBsaXN0IG9mIHBpbnMKJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpCiAgKi8KIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CkBAIC0zNiw2ICYjNDM7MzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAllbnVtIGRwbGxfdHlwZQkJCXR5cGU7CiAJZW51bSBkcGxsX2xvY2tfc3RhdHVzCQlsb2NrX3N0YXR1czsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlwaW5zOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8JCXB0cF9pbmZvOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrCQkqcHRwX2Nsb2NrOwogfTsKIAogc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAppbmRleCBiNzBlYWQ3ZDQ0OTViLi40NDc3NTdlOTk4NDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oCkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQAogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01ECQkJR0VOTUFTSygyLCAwKQogI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JCQk0CiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMCQkJWkxfUkVHKDUsIDB4MzAsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QCQkJR0VOTUFTSygyLCAwKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUgkJCTQKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0sJCVpMX1JFRyg1LCAweDMxLCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCA4LCAxKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU0JCQlCSVQoNCkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01ECQkJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFoJMQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVAk4CiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWgk5CiYjNDM7CiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTAkJCVpMX1JFRyg1LCAweDUwLCAxKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTgkJCUJJVCgwKQogI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SCQlHRU5NQVNLKDcsIDQpCkBAIC0xOTMsNiAmIzQzOzIwNyw5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YQomIzQzOyAqCiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LAomIzQzOyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkJCQkJCVwKQEAgLTIwMiw2ICYjNDM7MjE5LDI0IEBACiAJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNCkKICNkZWZpbmUgWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTglTNjRfTUlOCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzQJCQlaTF9SRUcoNywgMHgwQywgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBKF9pZHgpCQkJCQlcCiYjNDM7CSgoX2lkeCkgJmx0OyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzQJCQlaTF9SRUcoNywgMHgxMiwgNikKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180CQkJWkxfUkVHKDcsIDB4MTgsIDQpCiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNCkKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjEsNiAmIzQzOzI1Niw4IEBACiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTAkJR0VOTUFTSyg2LCA0KQogCiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLCQlaTF9SRUcoOSwgMHgzNiwgMikKJiM0MzsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMTYsNiAmIzQzOzM1MywyNSBAQAogI2RlZmluZSBaTF9SRUdfT1VUUFVUX0VTWU5DX1dJRFRICQlaTF9SRUcoMTQsIDB4MTgsIDQpCiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfQ09NUAkJWkxfUkVHKDE0LCAweDIwLCA0KQogCiYjNDM7LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiYjNDM7ICogUmVnaXN0ZXIgUGFnZSA5LCBPdXRwdXQgUGhhc2UgU3RlcAomIzQzOyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMCQlaTF9SRUcoOSwgMHgzOCwgMSkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTAkJR0VOTUFTSyg2LCA0KQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUAlCSVQoMykKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORQkwCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUCTEKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRAkyCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFCTMKJiM0MzsKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIJCVpMX1JFRyg5LCAweDM5LCAxKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0sJCVpMX1JFRyg5LCAweDNhLCAyKQomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEJCVpMX1JFRyg5LCAweDNjLCA0KQomIzQzOwogLyoKICAqIFJlZ2lzdGVyIFBhZ2UgMjU1IC0gSFcgcmVnaXN0ZXJzIGFjY2VzcwogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzYxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBQVFAgQ2xvY2sgUGF0Y2ggaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgUFRQIGNsb2NrIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoYGRyaXZlcnMvZHBsbC96bDMwNzN4L2ApLiBJdCBsb29rcyBzb2xpZDogYWRkcyB0aGUgYFBUUF8xNTg4X0NMT0NLYCBkZXBlbmRlbmN5IGluIGBLY29uZmlnYCwgdGhlIG5lY2Vzc2FyeSBUb0QgZnVuY3Rpb25zLCBwaGFzZS9mcmVxdWVuY3kgYWRqdXN0bWVudCwgYW5kIGhhbmRsZXMgdGhlIDFQUFMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZSBQVFAgY2xvY2sgdmlhIGBwdHBfY2xvY2tfcmVnaXN0ZXJgIHNvIG5vdyB0aGUgcXVlc3Rpb24gaXMgY2FuIEkgcmVhY2ggaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQuIFRoZSBkcml2ZXIgdGFyZ2V0cyBNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNvbm5lY3RlZCB2aWEgSTJDIG9yIFNQSS4gTG9va2luZyBhdCB0aGUgYEtjb25maWdgIGZvciB0aGUgZHJpdmVyLCBpdCBjb25maXJtcyBgWkwzMDczWF9JMkNgIGFuZCBgWkwzMDczWF9TUElgIGFzIG9wdGlvbnMuIE5vdywgSSBrbm93IEkyQyBhbmQgU1BJIGRldmljZXMgYXJlIGEgZnJlcXVlbnQgdGFyZ2V0IGZvciBzeXprYWxsZXIuCgpJIHJlbWVtYmVyIHN5emthbGxlciBjYW4gb2Z0ZW4gaGFuZGxlIHRoZXNlIHZpYSBwc2V1ZG8tc3lzY2FsbHMgb3IgYnkgaW5qZWN0aW5nIEkyQy9TUEkgdHJhZmZpYy4gSG93ZXZlciwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZ2VuZXJpYyBkZXZpY2UgaW5zdGFudGlhdGlvbi4gU3l6a2FsbGVyIHVzdWFsbHkgaXNuJiMzOTt0IGdyZWF0IGF0IGluc3RhbnRpYXRpbmcgKmFyYml0cmFyeSogSTJDL1NQSSBkZXZpY2VzIHVubGVzcyB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IGRlc2NyaWJlZCBpbiBhIHN5eiBkZXNjcmlwdGlvbiwgb3IgaWYgdGhleSYjMzk7cmUgaGFuZGxlZCB2aWEgZGV2aWNlIHRyZWUgb3Igc3lzZnMuIFdhaXQsIGRpZG4mIzM5O3QgSSBjb21lIGFjcm9zcyBhIHdheSB0byBkbyB0aGF0IGluIHRoZSBwYXN0Li4uIEFoIHllcywgSSBjYW4gaW5zdGFudGlhdGUgSTJDIGRldmljZXMgdmlhIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYCBvciBzaW1pbGFyLCBvciBwb3RlbnRpYWxseSB2aWEgbmV0bGluayBpZiBpdCYjMzk7cyBhIG5ldCBkZXZpY2UuIFRoaXMgaXMgYSBEUExMIGRldmljZSB0aG91Z2guIFNvIGl0IHdpbGwgbmVlZCB0byBiZSBwcm9iZWQgdmlhIEkyQy4KClRoaW5raW5nIG1vcmUgYWJvdXQgdGhpcywgSSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgRFBMTCBzdWJzeXN0ZW0gdmlhIG5ldGxpbmsgKEdlbmVyaWMgTmV0bGluayBgZHBsbGApLiBUaGUgdHJpY2t5IHBhcnQgaXMgdGhlIGRldmljZSBpdHNlbGYg4oCTIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgcHJvYmUgdGhpcyBJMkMvU1BJIGRldmljZT8gRG9lcyBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X2kyY19zZXR1cGA/IE5vLCB0aGF0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdXNlZCBmb3Igc2V0dXAgcHVycG9zZXMsIEkgaGF2ZSB0byBmaW5kIGEgd2F5IHRvIG1ha2UgdGhlIGRyaXZlciBwcm9iZSB0aGUgZGV2aWNlLiBJdCBoYXMgYGkyYy1kZXZgLCB3aGljaCBwcm92aWRlcyBhIHVzZXItc3BhY2UgaW50ZXJmYWNlIHRvIGFuIEkyQyBidXMsIGJ1dCBpdCBkb2VzbiYjMzk7dCBwcm9iZSB0aGUga2VybmVsIGRyaXZlci4KCk9rYXksIHdhaXQgYSBzZWNvbmQuIEkgcmVtZW1iZXIgbm93OiBzeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIGJ5IHdyaXRpbmcgdG8gYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0lZC9uZXdfZGV2aWNlYC4gVGhhdCBjb3VsZCBiZSB0aGUga2V5ISBJIHNob3VsZCBjaGVjayB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgYWxyZWFkeSBhdmFpbGFibGUgZm9yIERQTEwgb3IgSTJDIGluc3RhbnRpYXRpb24uIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ2MDEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdD03Nz1wYXJhbWV0ZXJzLCBpbmZvIHZlcnNpb25zLCBhbmQgb3RoZXIgZmVhdHVyZXMgaXQgc3VwcG9ydHMuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0LTEwNC0gICB0aS1jcHN3LXN3aXRjaFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0OjEwNTogICB6bDMwNzN4XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3QtMy09PT09PT09PT09PT09PT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q6NDp6bDMwNzN4IGRldmxpbmsgc3VwcG9ydFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3QtNS09PT09PT09PT09PT09PT09PT09PT09PVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3QtNi1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0Ojc6VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRldmxpbmsgZmVhdHVyZXMgaW1wbGVtZW50ZWQgYnkgdGhlIGBgemwzMDczeGBgXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdC04LWRldmljZSBkcml2ZXIuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q9MjQ9SW5mbyB2ZXJzaW9uc1xuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTI2LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q6Mjc6VGhlIGBgemwzMDczeGBgIGRyaXZlciByZXBvcnRzIHRoZSBmb2xsb3dpbmcgdmVyc2lvbnNcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTI4LVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0PTUzPUZsYXNoIFVwZGF0ZVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTU1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q6NTY6VGhlIGBgemwzMDczeGBgIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGZsYXNoIHVwZGF0ZSB1c2luZyB0aGVcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTU3LWBgZGV2bGluay1mbGFzaGBgIGludGVyZmFjZS4gSXQgc3VwcG9ydHMgdXBkYXRpbmcgdGhlIGRldmljZSBmbGFzaCB1c2luZyBhXG4tLVxuTUFJTlRBSU5FUlM9MTc4NjA9RjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kcGxsL21pY3JvY2hpcCx6bDMwNzMxLnlhbWxcbk1BSU5UQUlORVJTOjE3ODYxOkY6XHRkcml2ZXJzL2RwbGwvemwzMDczeC9cbk1BSU5UQUlORVJTLTE3ODYyLVxuLS1cbmRyaXZlcnMvZHBsbC9LY29uZmlnPTExPWNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXG4tLVxuZHJpdmVycy9kcGxsL0tjb25maWctMjUtXG5kcml2ZXJzL2RwbGwvS2NvbmZpZzoyNjpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9kcGxsL0tjb25maWctMjctXG4tLVxuZHJpdmVycy9kcGxsL01ha2VmaWxlPTk9ZHBsbC15ICAgICAgICAgICAgICAgICAgJiM0Mzs9IGRwbGxfbmwub1xuZHJpdmVycy9kcGxsL01ha2VmaWxlLTEwLVxuZHJpdmVycy9kcGxsL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19aTDMwNzNYKVx0JiM0Mzs9IHpsMzA3M3gvXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZz0zPWNvbmZpZyBaTDMwNzNYXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoxNTpcdCAgd2lsbCBiZSBjYWxsZWQgemwzMDczeC5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMTYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTE3PWNvbmZpZyBaTDMwNzNYX0kyQ1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctMjYtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoyNzpcdCAgYmUgY2FsbGVkIHpsMzA3M3hfaTJjLlxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0yOC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mjk9Y29uZmlnIFpMMzA3M1hfU1BJXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0zOC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjM5Olx0ICBiZSBjYWxsZWQgemwzMDczeF9zcGkuXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtMi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1pMMzA3M1gpXHRcdCYjNDM7PSB6bDMwNzN4Lm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjQ6emwzMDczeC1vYmpzXHRcdFx0Oj0gY2hhbi5vIGNvcmUubyBkZXZsaW5rLm8gZHBsbC5vXHRcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNS1cdFx0XHRcdCAgIGZsYXNoLm8gZncubyBvdXQubyBwcm9wLm8gcmVmLm8gc3ludGgub1xuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtNi1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1pMMzA3M1hfSTJDKVx0JiM0Mzs9IHpsMzA3M3hfaTJjLm9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjg6emwzMDczeF9pMmMtb2Jqc1x0XHQ6PSBpMmMub1xuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtOS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19aTDMwNzNYX1NQSSlcdCYjNDM7PSB6bDMwNzN4X3NwaS5vXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZToxMTp6bDMwNzN4X3NwaS1vYmpzXHRcdDo9IHNwaS5vXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE0OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUgLSB1cGRhdGUgRFBMTCBjaGFubmVsIHN0YXR1cyBmcm9tIEhXXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwOmludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxLXtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMjpcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMy1cdHU2NCB2YWw7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX01PTl9TVEFUVVMoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3LVx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2Vtb25fc3RhdHVzKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzE6XHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfUkVGU0VMX1NUQVRVUyhpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzItXHRcdFx0ICAgICBcdTAwMjZjaGFuLVx1MDAzZXJlZnNlbF9zdGF0dXMpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zOC1cdCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5Olx0aWYgKCF6bDMwNzN4X2NoYW5faXNfbG9ja2VkKGNoYW4pKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDA6XHRcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxLVx0XHRcdGNoYW4tXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDU6XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00Ni1cdFx0XHRcdCAgWkxfRFBMTF9ERl9SRUFEX1NFTSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTE6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyLVx0XHRcdCAgICAgIFpMX0RQTExfREZfUkVBRF9TRU0gfCBaTF9EUExMX0RGX1JFQURfUkVGX09GU1QpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NjpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU3LVx0XHRcdFx0ICBaTF9EUExMX0RGX1JFQURfU0VNLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MjpcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGluZGV4KSwgXHUwMDI2dmFsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02My1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzEtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NzI6ICogemwzMDczeF9jaGFuX25jb19tb2RlX3NldCAtIHN3aXRjaCBEUExMIGNoYW5uZWwgdG8gTkNPIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo3MzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzQtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODItICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6ODM6aW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtODQte1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjg1Olx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg2LVx0dTggcHJldl9tb2RlLCBkZl9yZWFkO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04OS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5MDpcdHByZXZfbW9kZSA9IHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05MS1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTYtXHRpZiAocHJldl9tb2RlID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9GUkVFUlVOKSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTc6XHRcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBaTF9EUExMX01PREVfUkVGU0VMX01PREVfTkNPKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05OC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo5OTpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAwLVx0XHRcdFx0ICAgICAgY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAxLVx0XHRpZiAocmMpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMDI6XHRcdFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIHByZXZfbW9kZSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAzLVx0XHRcdHJldHVybiByYztcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIwLVx0XHQgIEZJRUxEX1BSRVAoWkxfRFBMTF9ERl9SRUFEX0NNRCwgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTIxOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSwgZGZfcmVhZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTIyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTMxOlx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9OQ08pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEzMjpcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzMy1cdFx0XHQgICAgICBjaGFuLVx1MDAzZW1vZGVfcmVmc2VsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzQtXHRpZiAocmMpIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzU6XHRcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBwcmV2X21vZGUpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzNi1cdFx0cmV0dXJuIHJjO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNDctXHQgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNDg6XHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChpbmRleCksIFx1MDAyNnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTQ5LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2MS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjI6ICogemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoIC0gZmV0Y2ggRFBMTCBjaGFubmVsIHN0YXRlIGZyb20gaGFyZHdhcmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2NC0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBmZXRjaCBzdGF0ZSBmb3Jcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTcwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3MTppbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Mi17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTczOlx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3NC1cdGludCByYywgaTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTc2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX0NUUkwoaW5kZXgpLCBcdTAwMjZjaGFuLVx1MDAzZWN0cmwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE3Ny1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc5LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4MDpcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTgxLVx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4NS1cdGRldl9kYmcoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtEUExMJXUgbW9kZTogJXUsIHJlZjogJXVcXG5cJiMzNDssIGluZGV4LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4NjpcdFx0emwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pLCB6bDMwNzN4X2NoYW5fcmVmX2dldChjaGFuKSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTg3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4ODpcdHJjID0gemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZSh6bGRldiwgaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4OS1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTk1LVx0ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTk2Olx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xOTctXHRcdGNoYW4tXHUwMDNlZGZfb2Zmc2V0ID0gWkxfRFBMTF9ERl9PRkZTRVRfVU5LTk9XTjtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjAwLVx0XHRcJiMzNDtEUExMJXUgbG9ja19zdGF0ZTogJXUsIGhvOiAldSwgc2VsX3N0YXRlOiAldSwgc2VsX3JlZjogJXVcXG5cJiMzNDssXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAxOlx0XHRpbmRleCwgemwzMDczeF9jaGFuX2xvY2tfc3RhdGVfZ2V0KGNoYW4pLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwMjpcdFx0emwzMDczeF9jaGFuX2lzX2hvX3JlYWR5KGNoYW4pID8gMSA6IDAsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAzOlx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDQ6XHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjaGFuKSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwNjpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMDctXHRcdFx0ICAgICAgXHUwMDI2Y2hhbi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTMtXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMTQ6XHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjE1LVx0XHRcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMjAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNoYW4tXHUwMDNlcmVmX3ByaW8pOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIyMTpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1JFRl9QUklPKGkpLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIyMi1cdFx0XHRcdCAgICAgXHUwMDI2Y2hhbi1cdTAwM2VyZWZfcHJpb1tpXSk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzMC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMzE6ICogemwzMDczeF9jaGFuX3N0YXRlX2dldCAtIGdldCBjdXJyZW50IERQTEwgY2hhbm5lbCBzdGF0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzMjogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjMzLSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIGdldCBzdGF0ZSBmb3Jcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjM2LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzNzpjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjM4LVx0XHRcdFx0XHRcdCAgdTggaW5kZXgpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI0My0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNDQ6ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjUyLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI1MzpzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTQte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNTgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjU5Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI2MC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjcxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI3MjpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzMtXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjc4LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI3OTogKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI4MDogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yODEtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjg5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5MDpzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5MS17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjkyOlx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTMtXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5Ni0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyOTc6ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjk4OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5OS0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDMtICpcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDQ6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDUtICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDYtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzA3OmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzA4LVx0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyMS1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzIyOlx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjMtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyNi1cdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMyNzpcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjgtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMzE6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMzNjpcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFx1MDAyNnNlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM3LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDAtXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzQxOlx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1MS0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTI6ICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNTM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU0LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1Ni0gKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM1NzogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1OC0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1OS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozNjA6aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzYxLVx0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjUtXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM2NjpcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzY3LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjktXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzcwOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzcxLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzMtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc0Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc1LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc4Olx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzc5LVx0XHRcdFx0ICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzgyLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM4MzogKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM4NDogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODUtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzkyLSAqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzkzOiAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk0LSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk1LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5NjppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk3LVx0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDAzLVx0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDA0Olx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MDUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwOC1cdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDk6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxMC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDI2LVx0LyogV3JpdGUgYWRqdXN0ZWQgVG9EIGJhY2sgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0Mjc6XHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MjgtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzMC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MzE6XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDMyLX1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDM0LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQzNTogKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MzY6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDM3LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0MS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NDI6aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0My17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0NS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NDY6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0Ny1cdGlmICghcmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ1My0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NTQ6ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDYzLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ2NDppbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ2NS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ3MS1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDcyOlx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDczLVx0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODAtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDgxOlx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0RBVEEoY2gpLCB0aWVfZGF0YSk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDgyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDg1Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODYtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4OC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0ODk6XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDkwLVx0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ5My0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0OTQ6ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0OTU6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDk2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MDY6aW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNy1cdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNS1cdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUxNjpcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNy1cdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTIxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUyMjpcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyMy1cdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjYtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTI3Olx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MjgtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MzE6XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUzMi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0MTpcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQyLX1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQ0LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0NTogKiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0IC0gY29tbWl0IERQTEwgY2hhbm5lbCBzdGF0ZSBjaGFuZ2VzIHRvIGhhcmR3YXJlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQ2OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDctICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gc2V0IHN0YXRlIGZvclxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NTYtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTU3OmludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1ODpcdFx0XHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1OS17XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTYwOlx0c3RydWN0IHpsMzA3M3hfY2hhbiAqZGNoYW4gPSBcdTAwMjZ6bGRldi1cdTAwM2VjaGFuW2luZGV4XTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NjEtXHRpbnQgcmMsIGk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU2OC1cdGlmIChkY2hhbi1cdTAwM2VjdHJsICE9IGNoYW4tXHUwMDNlY3RybCkge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2OTpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9DVFJMKGluZGV4KSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzAtXHRcdFx0XHQgICAgICBjaGFuLVx1MDAzZWN0cmwpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzYtXHRpZiAoZGNoYW4tXHUwMDNlbW9kZV9yZWZzZWwgIT0gY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCkge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU3NzpcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTc4LVx0XHRcdFx0ICAgICAgY2hhbi1cdTAwM2Vtb2RlX3JlZnNlbCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU5Mi1cdC8qIFJlYWQgRFBMTCBjb25maWd1cmF0aW9uIGludG8gbWFpbGJveCAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU5MzpcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9SRCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01OTQtXHRcdFx0ICAgWkxfUkVHX0RQTExfTUJfTUFTSywgQklUKGluZGV4KSk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwMC1cdFx0aWYgKGRjaGFuLVx1MDAzZXJlZl9wcmlvW2ldICE9IGNoYW4tXHUwMDNlcmVmX3ByaW9baV0pIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MDE6XHRcdFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwMi1cdFx0XHRcdFx0ICAgICAgWkxfUkVHX0RQTExfUkVGX1BSSU8oaSksXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwOS1cdC8qIENvbW1pdCBEUExMIGNvbmZpZ3VyYXRpb24gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MTA6XHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fV1IsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNjExLVx0XHRcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD0xMz1zdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTQ6c3RydWN0IHpsMzA3M3hfZGV2O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE2LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjE3OiAqIHN0cnVjdCB6bDMwNzN4X2NoYW4gLSBEUExMIGNoYW5uZWwgc3RhdGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOC0gKiBAY3RybDogRFBMTCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI1LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjI2OnN0cnVjdCB6bDMwNzN4X2NoYW4ge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTI3LVx0c3RydWN0X2dyb3VwKGNmZyxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDEtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDI6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDM6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ0LVx0XHRcdFx0XHRcdCB1OCBpbmRleCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDU6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDY6XHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNDctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDg6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ5OmludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01MC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1MTppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUyLVx0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTMtXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NTQ6aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTUtXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjU2OmludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01Ny1cdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjU4OmludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC01OS1cdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTYwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYxOmludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NjM6aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjUtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NjY6ICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTY3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9NzE9c3RhdGljIGlubGluZSBzNjRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo3Mjp6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTczLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzctLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6Nzg6ICogemwzMDczeF9jaGFuX21vZGVfZ2V0IC0gZ2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTc5LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtODItICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6ODM6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04NC17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTg4LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjg5OiAqIHpsMzA3M3hfY2hhbl9yZWZfZ2V0IC0gZ2V0IG1hbnVhbGx5IHNlbGVjdGVkIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTkwLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTMtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6OTQ6c3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTk1LXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTktLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTAwOiAqIHpsMzA3M3hfY2hhbl9tb2RlX3NldCAtIHNldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDEtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDMtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTA0OnN0YXRpYyBpbmxpbmUgdm9pZCB6bDMwNzN4X2NoYW5fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggbW9kZSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDUte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDktLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTEwOiAqIHpsMzA3M3hfY2hhbl9yZWZfc2V0IC0gc2V0IG1hbnVhbGx5IHNlbGVjdGVkIHJlZmVyZW5jZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExMS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExMy0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMTQ6c3RhdGljIGlubGluZSB2b2lkIHpsMzA3M3hfY2hhbl9yZWZfc2V0KHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IHJlZilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTUte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTktLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTIwOiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQgLSBnZXQgcmVmZXJlbmNlIHByaW9yaXR5XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTIxLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTI2PXN0YXRpYyBpbmxpbmUgdThcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMjc6emwzMDczeF9jaGFuX3JlZl9wcmlvX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCByZWYpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTI4LXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTM3LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjEzODogKiB6bDMwNzN4X2NoYW5fcmVmX3ByaW9fc2V0IC0gc2V0IHJlZmVyZW5jZSBwcmlvcml0eVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzOS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1OTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGVzZSB0aGluZ3MgYXJlIHR5cGljYWxseSBpbnN0YW50aWF0ZWQgdXNpbmcgSTJDIG9yIFNQSSBjb21tdW5pY2F0aW9uIHByb3RvY29scy4gU3RhbmRhcmQgZmFyZS4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgYHN5emthbGxlcmAgYmVpbmcgYWJsZSB0byBpbnN0YW50aWF0ZSBJMkMgZGV2aWNlcyBkaXJlY3RseSB1c2luZyB0aGUgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0lZC9uZXdfZGV2aWNlYCBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSByZWxldmFudCBmb3IgZnV6emluZyBhbmQgdGVzdGluZyB0aGlzIGRyaXZlci4KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwbHksIGlzIHRvIHF1aWNrbHkgY2hlY2sgd2hldGhlciB0aGlzIGRyaXZlciB1dGlsaXplcyB0aGUgc3RhbmRhcmQgYGkyY19kcml2ZXJgIGFuZCBgc3BpX2RyaXZlcmAgaW5mcmFzdHJ1Y3R1cmUuIElmIGl0IGRvZXMsIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBpcyBjb3JyZWN0IGFuZCB0aGVzZSBpbnRlcmZhY2VzIGNhbiBsaWtlbHkgYmUgbGV2ZXJhZ2VkLCBwb3RlbnRpYWxseSBieSBzeXprYWxsZXIuIElmIG5vdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBoYXJkd2FyZSBhY2Nlc3MgbW9yZSBjbG9zZWx5LiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIHRoZSBjYXNlLCBhbmQgaXMgdGhlIG1vcmUgbGlrZWx5IGFuc3dlciwgYnV0IEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIHNpbXBsZXIgcGF0aCwgYmVjYXVzZSBpdCBwcm92aWRlcyBhIGdvb2Qgb3ZlcnZpZXcgZm9yIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pMmNfZHJpdmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MjI3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZW51bWVyYXRpb24ucnN0PTMxMD1pbnB1dCBkcml2ZXI6OlxuLS1cbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9lbnVtZXJhdGlvbi5yc3QtMzI4LVx0fTtcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9lbnVtZXJhdGlvbi5yc3Q6MzI5Olx0bW9kdWxlX2kyY19kcml2ZXIobXB1MzA1MF9pMmNfZHJpdmVyKTtcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9lbnVtZXJhdGlvbi5yc3QtMzMwLVxuLS1cbkRvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cy5yc3Q9MjI5PWRyaXZlciBtb2R1bGUgaXMgdXN1YWxseSBlbm91Z2guXG4tLVxuRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzLnJzdC0yNDQtXG5Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMucnN0OjI0NTogIFRoZSBtb2R1bGVfaTJjX2RyaXZlcigpIG1hY3JvIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSBhYm92ZSBjb2RlLlxuRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzLnJzdC0yNDYtXG5Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMucnN0OjI0NzogIG1vZHVsZV9pMmNfZHJpdmVyKGZvb19kcml2ZXIpO1xuRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzLnJzdC0yNDgtXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21jdV9tcGM4MzQ5ZW1pdHguYz0yMTQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1jdV9kcml2ZXIgPSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21jdV9tcGM4MzQ5ZW1pdHguYy0yMjMtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWN1X21wYzgzNDllbWl0eC5jOjIyNDptb2R1bGVfaTJjX2RyaXZlcihtY3VfZHJpdmVyKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tY3VfbXBjODM0OWVtaXR4LmMtMjI1LVxuLS1cbmRyaXZlcnMvYXV4ZGlzcGxheS9odDE2azMzLmM9NzcwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBodDE2azMzX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2F1eGRpc3BsYXkvaHQxNmszMy5jLTc3OC19O1xuZHJpdmVycy9hdXhkaXNwbGF5L2h0MTZrMzMuYzo3Nzk6bW9kdWxlX2kyY19kcml2ZXIoaHQxNmszM19kcml2ZXIpO1xuZHJpdmVycy9hdXhkaXNwbGF5L2h0MTZrMzMuYy03ODAtXG4tLVxuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmM9MzY4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsY2Qyc19pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYXV4ZGlzcGxheS9sY2Qycy5jLTM3Ni19O1xuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmM6Mzc3Om1vZHVsZV9pMmNfZHJpdmVyKGxjZDJzX2kyY19kcml2ZXIpO1xuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmMtMzc4LVxuLS1cbmRyaXZlcnMvYXV4ZGlzcGxheS9tYXg2OTU5LmM9MTc1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg2OTU5X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9hdXhkaXNwbGF5L21heDY5NTkuYy0xODQtfTtcbmRyaXZlcnMvYXV4ZGlzcGxheS9tYXg2OTU5LmM6MTg1Om1vZHVsZV9pMmNfZHJpdmVyKG1heDY5NTlfaTJjX2RyaXZlcik7XG5kcml2ZXJzL2F1eGRpc3BsYXkvbWF4Njk1OS5jLTE4Ni1cbi0tXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1iX2Rldl9pbnQuYz0zNjk9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlwbWJfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2hhci9pcG1pL2lwbWJfZGV2X2ludC5jLTM3Ny19O1xuZHJpdmVycy9jaGFyL2lwbWkvaXBtYl9kZXZfaW50LmM6Mzc4Om1vZHVsZV9pMmNfZHJpdmVyKGlwbWJfZHJpdmVyKTtcbmRyaXZlcnMvY2hhci9pcG1pL2lwbWJfZGV2X2ludC5jLTM3OS1cbi0tXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYz01NzQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlwbWlfaXBtYl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9pcG1iLmMtNTgzLX07XG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYzo1ODQ6bW9kdWxlX2kyY19kcml2ZXIoaXBtaV9pcG1iX2RyaXZlcik7XG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYy01ODUtXG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYz0xMjU2PWt1bml0X3Rlc3Rfc3VpdGUoc3NpZl9ibWNfdGVzdF9zdWl0ZSk7XG4tLVxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYy0xMjU4LVxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYzoxMjU5Om1vZHVsZV9pMmNfZHJpdmVyKHNzaWZfYm1jX2RyaXZlcik7XG5kcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2JtYy5jLTEyNjAtXG4tLVxuZHJpdmVycy9jaGFyL3RwbS9zdDMzenAyNC9pMmMuYz0xNTY9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHN0MzN6cDI0X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9jaGFyL3RwbS9zdDMzenAyNC9pMmMuYy0xNjctXG5kcml2ZXJzL2NoYXIvdHBtL3N0MzN6cDI0L2kyYy5jOjE2ODptb2R1bGVfaTJjX2RyaXZlcihzdDMzenAyNF9pMmNfZHJpdmVyKTtcbmRyaXZlcnMvY2hhci90cG0vc3QzM3pwMjQvaTJjLmMtMTY5LVxuLS1cbmRyaXZlcnMvY2hhci90cG0vdHBtX2kyY19hdG1lbC5jPTIxNz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2F0bWVsX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfYXRtZWwuYy0yMjctXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfYXRtZWwuYzoyMjg6bW9kdWxlX2kyY19kcml2ZXIoaTJjX2F0bWVsX2RyaXZlcik7XG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfYXRtZWwuYy0yMjktXG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmM9NzIwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0cG1fdGlzX2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmMtNzMwLVxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmM6NzMxOm1vZHVsZV9pMmNfZHJpdmVyKHRwbV90aXNfaTJjX2RyaXZlcik7XG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfaW5maW5lb24uYy03MzItTU9EVUxFX0FVVEhPUihcJiMzNDtQZXRlciBIdWV3ZSBcdTAwM2NwZXRlci5odWV3ZUBpbmZpbmVvbi5jb21cdTAwM2VcJiMzNDspO1xuLS1cbmRyaXZlcnMvY2hhci90cG0vdHBtX2kyY19udXZvdG9uLmM9NjQ1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfbnV2b3Rvbl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX251dm90b24uYy02NTUtXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfbnV2b3Rvbi5jOjY1Njptb2R1bGVfaTJjX2RyaXZlcihpMmNfbnV2b3Rvbl9kcml2ZXIpO1xuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX251dm90b24uYy02NTctXG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyYy5jPTM5Mz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBtX3Rpc19pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmMuYy00MDItfTtcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmMuYzo0MDM6bW9kdWxlX2kyY19kcml2ZXIodHBtX3Rpc19pMmNfZHJpdmVyKTtcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmMuYy00MDQtXG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyY19jcjUwLmM9ODIzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjcjUwX2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyY19jcjUwLmMtODMzLVxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyY19jcjUwLmM6ODM0Om1vZHVsZV9pMmNfZHJpdmVyKGNyNTBfaTJjX2RyaXZlcik7XG5kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXNfaTJjX2NyNTAuYy04MzUtXG4tLVxuZHJpdmVycy9jbGsvY2xrLWNkY2U3MDYuYz02ODc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNkY2U3MDZfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstY2RjZTcwNi5jLTY5NC19O1xuZHJpdmVycy9jbGsvY2xrLWNkY2U3MDYuYzo2OTU6bW9kdWxlX2kyY19kcml2ZXIoY2RjZTcwNl9pMmNfZHJpdmVyKTtcbmRyaXZlcnMvY2xrL2Nsay1jZGNlNzA2LmMtNjk2LVxuLS1cbmRyaXZlcnMvY2xrL2Nsay1jZGNlOTI1LmM9ODQ2PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjZGNlOTI1X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstY2RjZTkyNS5jLTg1My19O1xuZHJpdmVycy9jbGsvY2xrLWNkY2U5MjUuYzo4NTQ6bW9kdWxlX2kyY19kcml2ZXIoY2RjZTkyNV9kcml2ZXIpO1xuZHJpdmVycy9jbGsvY2xrLWNkY2U5MjUuYy04NTUtXG4tLVxuZHJpdmVycy9jbGsvY2xrLWNzMjAwMC1jcC5jPTYyMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY3MyMDAwX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstY3MyMDAwLWNwLmMtNjMzLVxuZHJpdmVycy9jbGsvY2xrLWNzMjAwMC1jcC5jOjYzNDptb2R1bGVfaTJjX2RyaXZlcihjczIwMDBfZHJpdmVyKTtcbmRyaXZlcnMvY2xrL2Nsay1jczIwMDAtY3AuYy02MzUtXG4tLVxuZHJpdmVycy9jbGsvY2xrLW1heDk0ODUuYz0zODA9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDk0ODVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay1tYXg5NDg1LmMtMzg4LX07XG5kcml2ZXJzL2Nsay9jbGstbWF4OTQ4NS5jOjM4OTptb2R1bGVfaTJjX2RyaXZlcihtYXg5NDg1X2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstbWF4OTQ4NS5jLTM5MC1cbi0tXG5kcml2ZXJzL2Nsay9jbGstcmVuZXNhcy1wY2llLmM9NDE0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciByczlfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay1yZW5lc2FzLXBjaWUuYy00MjItfTtcbmRyaXZlcnMvY2xrL2Nsay1yZW5lc2FzLXBjaWUuYzo0MjM6bW9kdWxlX2kyY19kcml2ZXIocnM5X2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstcmVuZXNhcy1wY2llLmMtNDI0LVxuLS1cbmRyaXZlcnMvY2xrL2Nsay1zaTUxNC5jPTM5Mz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2k1MTRfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay1zaTUxNC5jLTQwMC19O1xuZHJpdmVycy9jbGsvY2xrLXNpNTE0LmM6NDAxOm1vZHVsZV9pMmNfZHJpdmVyKHNpNTE0X2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstc2k1MTQuYy00MDItXG4tLVxuZHJpdmVycy9jbGsvY2xrLXNpNTIxeHguYz0zODQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTIxeHhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay1zaTUyMXh4LmMtMzkyLX07XG5kcml2ZXJzL2Nsay9jbGstc2k1MjF4eC5jOjM5Mzptb2R1bGVfaTJjX2RyaXZlcihzaTUyMXh4X2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstc2k1MjF4eC5jLTM5NC1cbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1MzQxLmM9MTg0Nz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2k1MzQxX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1MzQxLmMtMTg1NS19O1xuZHJpdmVycy9jbGsvY2xrLXNpNTM0MS5jOjE4NTY6bW9kdWxlX2kyY19kcml2ZXIoc2k1MzQxX2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstc2k1MzQxLmMtMTg1Ny1cbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1MzUxLmM9MTcxMT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2k1MzUxX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1MzUxLmMtMTcxOC19O1xuZHJpdmVycy9jbGsvY2xrLXNpNTM1MS5jOjE3MTk6bW9kdWxlX2kyY19kcml2ZXIoc2k1MzUxX2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstc2k1MzUxLmMtMTcyMC1cbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1NDQuYz00OTc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTQ0X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstc2k1NDQuYy01MDQtfTtcbmRyaXZlcnMvY2xrL2Nsay1zaTU0NC5jOjUwNTptb2R1bGVfaTJjX2RyaXZlcihzaTU0NF9kcml2ZXIpO1xuZHJpdmVycy9jbGsvY2xrLXNpNTQ0LmMtNTA2LVxuLS1cbmRyaXZlcnMvY2xrL2Nsay1zaTU3MC5jPTUyMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2k1NzBfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay1zaTU3MC5jLTUzMC19O1xuZHJpdmVycy9jbGsvY2xrLXNpNTcwLmM6NTMxOm1vZHVsZV9pMmNfZHJpdmVyKHNpNTcwX2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstc2k1NzAuYy01MzItXG4tLVxuZHJpdmVycy9jbGsvY2xrLXZlcnNhY2xvY2szLmM9MTE1Nz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdmMzX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazMuYy0xMTYzLX07XG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazMuYzoxMTY0Om1vZHVsZV9pMmNfZHJpdmVyKHZjM19kcml2ZXIpO1xuZHJpdmVycy9jbGsvY2xrLXZlcnNhY2xvY2szLmMtMTE2NS1cbi0tXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazUuYz0xMzQwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB2YzVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNS5jLTEzNDktfTtcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNS5jOjEzNTA6bW9kdWxlX2kyY19kcml2ZXIodmM1X2RyaXZlcik7XG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazUuYy0xMzUxLVxuLS1cbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNy5jPTEzMDI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHZjN19pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNy5jLTEzMTAtfTtcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNy5jOjEzMTE6bW9kdWxlX2kyY19kcml2ZXIodmM3X2kyY19kcml2ZXIpO1xuZHJpdmVycy9jbGsvY2xrLXZlcnNhY2xvY2s3LmMtMTMxMi1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz00OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU1LX07XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1Njptb2R1bGVfaTJjX2RyaXZlcih6bDMwNzN4X2kyY19kcml2ZXIpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTctXG4tLVxuZHJpdmVycy9leHRjb24vZXh0Y29uLWxjODI0MjA2eGEuYz00ODM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxjODI0MjA2eGFfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1sYzgyNDIwNnhhLmMtNDkwLVxuZHJpdmVycy9leHRjb24vZXh0Y29uLWxjODI0MjA2eGEuYzo0OTE6bW9kdWxlX2kyY19kcml2ZXIobGM4MjQyMDZ4YV9kcml2ZXIpO1xuZHJpdmVycy9leHRjb24vZXh0Y29uLWxjODI0MjA2eGEuYy00OTItXG4tLVxuZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDE0NTI2LmM9Mjg4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXgxNDUyNl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDE0NTI2LmMtMjk2LX07XG5kcml2ZXJzL2V4dGNvbi9leHRjb24tbWF4MTQ1MjYuYzoyOTc6bW9kdWxlX2kyY19kcml2ZXIobWF4MTQ1MjZfZHJpdmVyKTtcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1tYXgxNDUyNi5jLTI5OC1cbi0tXG5kcml2ZXJzL2V4dGNvbi9leHRjb24tcHRuNTE1MC5jPTQwMT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcHRuNTE1MF9pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1wdG41MTUwLmMtNDA5LX07XG5kcml2ZXJzL2V4dGNvbi9leHRjb24tcHRuNTE1MC5jOjQxMDptb2R1bGVfaTJjX2RyaXZlcihwdG41MTUwX2kyY19kcml2ZXIpO1xuZHJpdmVycy9leHRjb24vZXh0Y29uLXB0bjUxNTAuYy00MTEtXG4tLVxuZHJpdmVycy9mc2kvZnNpLW1hc3Rlci1pMmNyLmM9MzAyPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNyX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2ZzaS9mc2ktbWFzdGVyLWkyY3IuYy0zMTAtXG5kcml2ZXJzL2ZzaS9mc2ktbWFzdGVyLWkyY3IuYzozMTE6bW9kdWxlX2kyY19kcml2ZXIoaTJjcl9kcml2ZXIpXG5kcml2ZXJzL2ZzaS9mc2ktbWFzdGVyLWkyY3IuYy0zMTItXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tYWRucC5jPTUxND1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRucF9pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWFkbnAuYy01MjEtfTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWFkbnAuYzo1MjI6bW9kdWxlX2kyY19kcml2ZXIoYWRucF9pMmNfZHJpdmVyKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWFkbnAuYy01MjMtXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tZHM0NTIwLmM9NjI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRzNDUyMF9ncGlvX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1kczQ1MjAuYy02OS19O1xuZHJpdmVycy9ncGlvL2dwaW8tZHM0NTIwLmM6NzA6bW9kdWxlX2kyY19kcml2ZXIoZHM0NTIwX2dwaW9fZHJpdmVyKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWRzNDUyMC5jLTcxLVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWZ4bDY0MDguYz0xNTg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGZ4bDY0MDhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWZ4bDY0MDguYy0xNjYtfTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWZ4bDY0MDguYzoxNjc6bW9kdWxlX2kyY19kcml2ZXIoZnhsNjQwOF9kcml2ZXIpO1xuZHJpdmVycy9ncGlvL2dwaW8tZnhsNjQwOC5jLTE2OC1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1ndy1wbGQuYz0xMjM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGd3X3BsZF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tZ3ctcGxkLmMtMTMwLX07XG5kcml2ZXJzL2dwaW8vZ3Bpby1ndy1wbGQuYzoxMzE6bW9kdWxlX2kyY19kcml2ZXIoZ3dfcGxkX2RyaXZlcik7XG5kcml2ZXJzL2dwaW8vZ3Bpby1ndy1wbGQuYy0xMzItXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTU3MC5jPTE4MT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcGNhOTU3MF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTU3MC5jLTE4OC19O1xuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTU3MC5jOjE4OTptb2R1bGVfaTJjX2RyaXZlcihwY2E5NTcwX2RyaXZlcik7XG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTcwLmMtMTkwLVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXRwaWMyODEwLmM9MTIwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0cGljMjgxMF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tdHBpYzI4MTAuYy0xMjctfTtcbmRyaXZlcnMvZ3Bpby9ncGlvLXRwaWMyODEwLmM6MTI4Om1vZHVsZV9pMmNfZHJpdmVyKHRwaWMyODEwX2RyaXZlcik7XG5kcml2ZXJzL2dwaW8vZ3Bpby10cGljMjgxMC5jLTEyOS1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby10czQ5MDAuYz0xODM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRzNDkwMF9ncGlvX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby10czQ5MDAuYy0xOTAtfTtcbmRyaXZlcnMvZ3Bpby9ncGlvLXRzNDkwMC5jOjE5MTptb2R1bGVfaTJjX2RyaXZlcih0czQ5MDBfZ3Bpb19kcml2ZXIpO1xuZHJpdmVycy9ncGlvL2dwaW8tdHM0OTAwLmMtMTkyLVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXdhdmVzaGFyZS1kc2kuYz0xOTc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdhdmVzaGFyZV9ncGlvX3JlZ3VsYXRvcl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8td2F2ZXNoYXJlLWRzaS5jLTIwNC1cbmRyaXZlcnMvZ3Bpby9ncGlvLXdhdmVzaGFyZS1kc2kuYzoyMDU6bW9kdWxlX2kyY19kcml2ZXIod2F2ZXNoYXJlX2dwaW9fcmVndWxhdG9yX2RyaXZlcik7XG5kcml2ZXJzL2dwaW8vZ3Bpby13YXZlc2hhcmUtZHNpLmMtMjA2LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54NjM0NS5jPTc4MD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYW54NjM0NV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng2MzQ1LmMtNzg4LX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDYzNDUuYzo3ODk6bW9kdWxlX2kyY19kcml2ZXIoYW54NjM0NV9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng2MzQ1LmMtNzkwLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54Nzh4eC5jPTEzNDc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFueDc4eHhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54Nzh4eC5jLTEzNTQtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54Nzh4eC5jOjEzNTU6bW9kdWxlX2kyY19kcml2ZXIoYW54Nzh4eF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng3OHh4LmMtMTM1Ni1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FueDc2MjUuYz0zMDA4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhbng3NjI1X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FueDc2MjUuYy0zMDE5LVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbng3NjI1LmM6MzAyMDptb2R1bGVfaTJjX2RyaXZlcihhbng3NjI1X2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FueDc2MjUuYy0zMDIxLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2hyb250ZWwtY2g3MDMzLmM9NjA0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjaDcwMzNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2hyb250ZWwtY2g3MDMzLmMtNjEzLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jaHJvbnRlbC1jaDcwMzMuYzo2MTQ6bW9kdWxlX2kyY19kcml2ZXIoY2g3MDMzX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Nocm9udGVsLWNoNzAzMy5jLTYxNS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Nyb3MtZWMtYW54NzY4OC5jPTE3NT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY3Jvc19lY19hbng3Njg4X2JyaWRnZV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jcm9zLWVjLWFueDc2ODguYy0xODMtXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Nyb3MtZWMtYW54NzY4OC5jOjE4NDptb2R1bGVfaTJjX2RyaXZlcihjcm9zX2VjX2FueDc2ODhfYnJpZGdlX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Nyb3MtZWMtYW54NzY4OC5jLTE4NS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDYyNjMuYz05MTg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGl0NjI2M19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2MjYzLmMtOTI1LX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDYyNjMuYzo5MjY6bW9kdWxlX2kyY19kcml2ZXIoaXQ2MjYzX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDYyNjMuYy05MjctXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmM9MzY2Nz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXQ2NTA1X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMtMzY3OC1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jOjM2Nzk6bW9kdWxlX2kyY19kcml2ZXIoaXQ2NTA1X2kyY19kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMtMzY4MC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY2MTIxLmM9MTcyNz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXQ2NjEyMV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NjEyMS5jLTE3MzYtXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY2MTIxLmM6MTczNzptb2R1bGVfaTJjX2RyaXZlcihpdDY2MTIxX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY2MTIxLmMtMTczOC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ4NzEzc3guYz01ODE9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGx0ODcxM3N4X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ4NzEzc3guYy01OTEtXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ4NzEzc3guYzo1OTI6bW9kdWxlX2kyY19kcml2ZXIobHQ4NzEzc3hfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDg3MTNzeC5jLTU5My1NT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDg5MTJiLmM9ODI0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdDg5MTJfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ4OTEyYi5jLTgzMy19O1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODkxMmIuYzo4MzQ6bW9kdWxlX2kyY19kcml2ZXIobHQ4OTEyX2kyY19kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODkxMmIuYy04MzUtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTIxMS5jPTc4Nj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHQ5MjExX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5MjExLmMtNzk0LX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5MjExLmM6Nzk1Om1vZHVsZV9pMmNfZHJpdmVyKGx0OTIxMV9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTIxMS5jLTc5Ni1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmM9MTI0Mz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHQ5NjExX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmMtMTI1MS19O1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jOjEyNTI6bW9kdWxlX2kyY19kcml2ZXIobHQ5NjExX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmMtMTI1My1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM9OTA5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdDk2MTF1eGNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYy05MTgtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYzo5MTk6bW9kdWxlX2kyY19kcml2ZXIobHQ5NjExdXhjX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtOTIwLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYz0zMzI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHB0bjM0NjBfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYy0zNDAtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYzozNDE6bW9kdWxlX2kyY19kcml2ZXIocHRuMzQ2MF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ueHAtcHRuMzQ2MC5jLTM0Mi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYz01Mzg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBzODYyMl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjIyLmMtNTQ2LX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYzo1NDc6bW9kdWxlX2kyY19kcml2ZXIocHM4NjIyX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYy01NDgtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmM9NzM5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwczg2NDBfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFyYWRlLXBzODY0MC5jLTc0Ni19O1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmM6NzQ3Om1vZHVsZV9pMmNfZHJpdmVyKHBzODY0MF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmMtNzQ4LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jPTEyNDU9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpaTkwMnhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jLTEyNTMtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jOjEyNTQ6bW9kdWxlX2kyY19kcml2ZXIoc2lpOTAyeF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zaWk5MDJ4LmMtMTI1NS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpaTkyMzQuYz05NTM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpaTkyMzRfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTIzNC5jLTk2Mi1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTIzNC5jOjk2Mzptb2R1bGVfaTJjX2RyaXZlcihzaWk5MjM0X2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpaTkyMzQuYy05NjQtTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1NpbGljb24gSW1hZ2UgU0lJOTIzNCBIRE1JL01ITCBicmlkZ2UgZHJpdmVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpbC1zaWk4NjIwLmM9MjM3OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2lpODYyMF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zaWwtc2lpODYyMC5jLTIzODctXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpbC1zaWk4NjIwLmM6MjM4ODptb2R1bGVfaTJjX2RyaXZlcihzaWk4NjIwX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpbC1zaWk4NjIwLmMtMjM4OS1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7U2lsaWNvbiBJbWFnZSBTaUk4NjIwIEhETUkvTUhMIGJyaWRnZSBkcml2ZXJcJiMzNDspO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjcuYz0yNjI1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0YzM1ODc2N19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2Ny5jLTI2MzMtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjcuYzoyNjM0Om1vZHVsZV9pMmNfZHJpdmVyKHRjMzU4NzY3X2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY3LmMtMjYzNS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY4LmM9MTQ1Mj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGMzNTg3NjhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjguYy0xNDYwLX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY4LmM6MTQ2MTptb2R1bGVfaTJjX2RyaXZlcih0YzM1ODc2OF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2OC5jLTE0NjItXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc3NS5jPTc0Mz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGMzNTg3NzVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NzUuYy03NTEtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NzUuYzo3NTI6bW9kdWxlX2kyY19kcml2ZXIodGMzNTg3NzVfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NzUuYy03NTMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90ZGE5OTh4X2Rydi5jPTIwNjc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRkYTk5OHhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGRhOTk4eF9kcnYuYy0yMDc2LVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90ZGE5OTh4X2Rydi5jOjIwNzc6bW9kdWxlX2kyY19kcml2ZXIodGRhOTk4eF9kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90ZGE5OTh4X2Rydi5jLTIwNzgtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1kbHBjMzQzMy5jPTQwMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZGxwYzM0MzNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktZGxwYzM0MzMuYy00MTEtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktZGxwYzM0MzMuYzo0MTI6bW9kdWxlX2kyY19kcml2ZXIoZGxwYzM0MzNfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktZGxwYzM0MzMuYy00MTMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODMuYz0xMDg5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzbjY1ZHNpODNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTgzLmMtMTA5Ny19O1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODMuYzoxMDk4Om1vZHVsZV9pMmNfZHJpdmVyKHNuNjVkc2k4M19kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODMuYy0xMDk5LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktdGRwMTU4LmM9MTA1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0ZHAxNThfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktdGRwMTU4LmMtMTExLX07XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXRkcDE1OC5jOjExMjptb2R1bGVfaTJjX2RyaXZlcih0ZHAxNThfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktdGRwMTU4LmMtMTEzLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvd2F2ZXNoYXJlLWRzaS5jPTE5NT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd3NfYnJpZGdlX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3dhdmVzaGFyZS1kc2kuYy0yMDEtfTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvd2F2ZXNoYXJlLWRzaS5jOjIwMjptb2R1bGVfaTJjX2RyaXZlcih3c19icmlkZ2VfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvd2F2ZXNoYXJlLWRzaS5jLTIwMy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtb2xpbWV4LWxjZC1vbGludXhpbm8uYz0yNjE9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxjZF9vbGludXhpbm9fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vbGltZXgtbGNkLW9saW51eGluby5jLTI2OS1cbmRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vbGltZXgtbGNkLW9saW51eGluby5jOjI3MDptb2R1bGVfaTJjX2RyaXZlcihsY2Rfb2xpbnV4aW5vX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtb2xpbWV4LWxjZC1vbGludXhpbm8uYy0yNzEtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3NpdHJvbml4L3N0NzU3MS1pMmMuYz0xNDM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHN0NzU3MV9pMmNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9zaXRyb25peC9zdDc1NzEtaTJjLmMtMTUyLVxuZHJpdmVycy9ncHUvZHJtL3NpdHJvbml4L3N0NzU3MS1pMmMuYzoxNTM6bW9kdWxlX2kyY19kcml2ZXIoc3Q3NTcxX2kyY19kcml2ZXIpO1xuZHJpdmVycy9ncHUvZHJtL3NpdHJvbml4L3N0NzU3MS1pMmMuYy0xNTQtXG4tLVxuZHJpdmVycy9ncHUvZHJtL3NvbG9tb24vc3NkMTMweC1pMmMuYz0xMTI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNzZDEzMHhfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vc29sb21vbi9zc2QxMzB4LWkyYy5jLTEyMC19O1xuZHJpdmVycy9ncHUvZHJtL3NvbG9tb24vc3NkMTMweC1pMmMuYzoxMjE6bW9kdWxlX2kyY19kcml2ZXIoc3NkMTMweF9pMmNfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9zb2xvbW9uL3NzZDEzMHgtaTJjLmMtMTIyLVxuLS1cbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1hY3BpLmM9MTI2PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfaGlkX2FjcGlfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1hY3BpLmMtMTM4LVxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLWFjcGkuYzoxMzk6bW9kdWxlX2kyY19kcml2ZXIoaTJjX2hpZF9hY3BpX2RyaXZlcik7XG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtYWNwaS5jLTE0MC1cbi0tXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZWxhbi5jPTIxNj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZWxhbl9pMmNfaGlkX3RzX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZWxhbi5jLTIyNi19O1xuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWVsYW4uYzoyMjc6bW9kdWxlX2kyY19kcml2ZXIoZWxhbl9pMmNfaGlkX3RzX2RyaXZlcik7XG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZWxhbi5jLTIyOC1cbi0tXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZ29vZGl4LmM9MTI0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBnb29kaXhfaTJjX2hpZF90c19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWdvb2RpeC5jLTEzNC19O1xuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWdvb2RpeC5jOjEzNTptb2R1bGVfaTJjX2RyaXZlcihnb29kaXhfaTJjX2hpZF90c19kcml2ZXIpO1xuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWdvb2RpeC5jLTEzNi1cbi0tXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YuYz0xNTM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19oaWRfb2ZfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi5jLTE2Ni1cbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi5jOjE2Nzptb2R1bGVfaTJjX2RyaXZlcihpMmNfaGlkX29mX2RyaXZlcik7XG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YuYy0xNjgtXG4tLVxuZHJpdmVycy9od21vbi9hZDc0MTQuYz0yMTk9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkNzQxNF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9od21vbi9hZDc0MTQuYy0yMjctXG5kcml2ZXJzL2h3bW9uL2FkNzQxNC5jOjIyODptb2R1bGVfaTJjX2RyaXZlcihhZDc0MTRfZHJpdmVyKTtcbmRyaXZlcnMvaHdtb24vYWQ3NDE0LmMtMjI5LVxuLS1cbmRyaXZlcnMvaHdtb24vYWQ3NDE4LmM9Mjk5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZDc0MThfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvaHdtb24vYWQ3NDE4LmMtMzA3LVxuZHJpdmVycy9od21vbi9hZDc0MTguYzozMDg6bW9kdWxlX2kyY19kcml2ZXIoYWQ3NDE4X2RyaXZlcik7XG5kcml2ZXJzL2h3bW9uL2FkNzQxOC5jLTMwOS1cbi0tXG5kcml2ZXJzL2h3bW9uL2FkYzEyOGQ4MTguYz00OTQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkYzEyOF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9od21vbi9hZGMxMjhkODE4LmMtNTA1LVxuZHJpdmVycy9od21vbi9hZGMxMjhkODE4LmM6NTA2Om1vZHVsZV9pMmNfZHJpdmVyKGFkYzEyOF9kcml2ZXIpO1xuZHJpdmVycy9od21vbi9hZGMxMjhkODE4LmMtNTA3LVxuLS1cbmRyaXZlcnMvaHdtb24vYWRtMTAyNS5jPTU1Nz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRtMTAyNV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9od21vbi9hZG0xMDI1LmMtNTY3LVxuZHJpdmVycy9od21vbi9hZG0xMDI1LmM6NTY4Om1vZHVsZV9pMmNfZHJpdmVyKGFkbTEwMjVfZHJpdmVyKTtcbmRyaXZlcnMvaHdtb24vYWRtMTAyNS5jLTU2OS1cbi0tXG5kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYz0xODY1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZG0xMDI2X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYy0xODc1LVxuZHJpdmVycy9od21vbi9hZG0xMDI2LmM6MTg3Njptb2R1bGVfaTJjX2RyaXZlcihhZG0xMDI2X2RyaXZlcik7XG5kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYy0xODc3LVxuLS1cbmRyaXZlcnMvaHdtb24vYWRtMTAyOS5jPTM5MD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRtMTAyOV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9od21vbi9hZG0xMDI5LmMtNDAwLVxuZHJpdmVycy9od21vbi9hZG0xMDI5LmM6NDAxOm1vZHVsZV9pMmNfZHJpdmVyKGFkbTEwMjlfZHJpdmVyKTtcbmRyaXZlcnMvaHdtb24vYWRtMTAyOS5jLTQwMi1cbi0tXG5kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYz0xMDY0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZG0xMDMxX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYy0xMDc0LVxuZHJpdmVycy9od21vbi9hZG0xMDMxLmM6MTA3NTptb2R1bGVfaTJjX2RyaXZlcihhZG0xMDMxX2RyaXZlcik7XG5kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYy0xMDc2LVxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjIxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSB6bDMwNzN4IERyaXZlcioqCgpPa2F5LCBzbyB0aGUgemwzMDczeCBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSBrZXJuZWwgdGhyb3VnaCBgbW9kdWxlX2kyY19kcml2ZXJgIGFuZCBgbW9kdWxlX3NwaV9kcml2ZXJgLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiBlZmZlY3RpdmVseSBmdXp6IHRoZXNlIEkyQyBhbmQgU1BJIGRyaXZlcnMuIEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfaTJjX3NldHVwYCBhbmQgYHN5el9zcGlfc2V0dXBgIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBhbmQgdGhlIHN5c3RlbSBidXMgb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGluc3RhbnRpYXRlIHZpYSBzeXNmcyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAuIFdhaXQsIG5vLCBJIGp1c3QgY2hlY2tlZCB0aGUga2VybmVsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYHN5el9pMmNfc2V0dXBgIGRlZmluZWQuIEJ1dCBzeXprYWxsZXIgKmNhbiogd3JpdGUgdGhlIGRldmljZSBuYW1lIHRvIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYCwgd2hpY2ggY291bGQgd29yayBhcyB3ZWxsLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiB0aGUgZHJpdmVyIGlzIGV2ZW4gKnJlYWNoYWJsZSouIFRoZSBwYXRjaCBtb2RpZmllcyBmaWxlcyBsaWtlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNgLCBgY29yZS5jYCwgYW5kIGBkcGxsLmNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgRFBMTCBkcml2ZXIsIHdoaWNoIHN1Z2dlc3RzIGNvcmUgZnVuY3Rpb25hbCBsb2dpYyBpcyBiZWluZyBtb2RpZmllZC4gTm93LCBhIGtleSBxdWVzdGlvbjogY2FuIHRoaXMgZHJpdmVyIGV2ZW4gYmUgcmVhY2hlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIHRoZSBvbmUgc3l6a2FsbGVyIHVzZXM/IFRoZSBkcml2ZXIgaXMgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBhIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZGV2aWNlLgoKSWYgc3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSB0aGUgZHJpdmVyIHRocm91Z2ggSTJDL1NQSSwgaXQgc2hvdWxkIGJlIGFibGUgdG8gcmVhY2ggdGhlIHByb2JlIGZ1bmN0aW9uLiBUaGVuLCBJIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBkcml2ZXIgdGhyb3VnaCBEUExMIG5ldGxpbmsgYW5kIFBUUCBpb2N0bHMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBoYXJkd2FyZSBkZXBlbmRlbmN5IHRoYXQgd291bGQgcHJldmVudCB0aGUgZHJpdmVyIGZyb20gcHJvYmluZyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIHNwZWNpZmljIHJlZ2lzdGVyIGFjY2Vzc2VzIG9yIG90aGVyIGRldmljZS1zcGVjaWZpYyByZXF1aXJlbWVudHMgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bDMwNzN4X2Rldl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9OTI1PXpsMzA3M3hfZGV2bV9kcGxsX2luaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTcyLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk3MzogKiB6bDMwNzN4X2Rldl9wcm9iZSAtIGluaXRpYWxpemUgemwzMDczeCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzQtICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3OS0gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODA6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTgxLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTA2MC19XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTA2MTpFWFBPUlRfU1lNQk9MX05TX0dQTCh6bDMwNzN4X2Rldl9wcm9iZSwgXCYjMzQ7WkwzMDczWFwmIzM0Oyk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTA2Mi1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9MTA0PXN0cnVjdCB6bDMwNzN4X2RldiAqemwzMDczeF9kZXZtX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg6MTA1OmludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaC0xMDYtXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6MjU6XHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjYtfVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3NwaS5jPTExPXN0YXRpYyBpbnQgemwzMDczeF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zcGkuYy0yNC1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3NwaS5jOjI1Olx0cmV0dXJuIHpsMzA3M3hfZGV2X3Byb2JlKHpsZGV2KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3NwaS5jLTI2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODEyMwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHpsMzA3M3hfZGV2X3Byb2JlYCYjMzk7cyBSZWdpc3RlciBSZWFkaW5nKioKCkFscmlnaHQsIG15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGB6bDMwNzN4X2Rldl9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgaGFyZHdhcmUgaW50ZXJhY3Rpb24gc3RyYXRlZ3kuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXQgZXhwbGljaXRseSByZWFkcyBoYXJkd2FyZSByZWdpc3RlcnMgZHVyaW5nIGl0cyBpbml0aWFsaXphdGlvbiBvciBwcm9iaW5nIHNlcXVlbmNlLiBNeSBodW5jaCBpcywgc2luY2UgdGhpcyBpcyBhIHByb2JlIGZ1bmN0aW9uLCBpdCBwcm9iYWJseSBkb2VzLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyBpdCAqdmFsaWRhdGUqIHRob3NlIHJlZ2lzdGVyIHZhbHVlcz8gRG9lcyBpdCBoYXZlIGVycm9yIGhhbmRsaW5nIGluIHBsYWNlIHRoYXQgd291bGQgcmVzdWx0IGluIGEgcHJvYmUgZmFpbHVyZSBpZiB0aGUgZXhwZWN0ZWQgcmVnaXN0ZXIgdmFsdWVzIGRvbiYjMzk7dCBtYXRjaCB3aGF0IGl0IHJlYWRzPyBUaGlzIGlzIGtleS4gVGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyB2YWxpZGF0aW9uIGxvZ2ljIHRlbGxzIG1lIGEgbG90IGFib3V0IHRoZSByb2J1c3RuZXNzIG9mIHRoZSBkcml2ZXImIzM5O3MgaGFyZHdhcmUgZGV0ZWN0aW9uIGFuZCBjb25maWd1cmF0aW9uIGFwcHJvYWNoLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb21wYXJpc29ucyBhZ2FpbnN0IGV4cGVjdGVkIHZhbHVlcywgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHJlZ2lzdGVyIGNvbnRlbnRzLCBhbmQgdWx0aW1hdGVseSwgYW55IGByZXR1cm5gIHN0YXRlbWVudHMgdGhhdCBpbmRpY2F0ZSBhIHByb2JpbmcgZmFpbHVyZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBub3QgYSBibGluZCByZWFkIGFuZCBwcm9jZWVkIHNldHVwLCBzaW5jZSBhIGJsaW5kIHJlYWQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBzZXJpb3VzIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NzA6XHR9XG4gOTcxOlx0XG4gOTcyOlx0LyoqXG4gOTczOlx0ICogemwzMDczeF9kZXZfcHJvYmUgLSBpbml0aWFsaXplIHpsMzA3M3ggZGV2aWNlXG4gOTc0Olx0ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4gOTc1Olx0ICpcbiA5NzY6XHQgKiBDb21tb24gaW5pdGlhbGl6YXRpb24gb2YgemwzMDczeCBkZXZpY2Ugc3RydWN0dXJlLlxuIDk3NzpcdCAqXG4gOTc4Olx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gOTc5Olx0ICovXG4gOTgwOlx0aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gOTgxOlx0e1xuIDk4MjpcdFx0dTE2IGlkLCByZXZpc2lvbiwgZndfdmVyO1xuIDk4MzpcdFx0dW5zaWduZWQgaW50IGk7XG4gOTg0Olx0XHR1MzIgY2ZnX3ZlcjtcbiA5ODU6XHRcdGludCByYztcbiA5ODY6XHRcbiA5ODc6XHRcdC8qIFJlYWQgY2hpcCBJRCAqL1xuIDk4ODpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFx1MDAyNmlkKTtcbiA5ODk6XHRcdGlmIChyYylcbiA5OTA6XHRcdFx0cmV0dXJuIHJjO1xuIDk5MTpcdFxuIDk5MjpcdFx0LyogRGV0ZWN0IGNoaXAgdmFyaWFudCAqL1xuIDk5MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKTsgaSYjNDM7JiM0MzspIHtcbiA5OTQ6XHRcdFx0aWYgKHpsMzA3M3hfY2hpcF9pZHNbaV0uaWQgPT0gaWQpXG4gOTk1Olx0XHRcdFx0YnJlYWs7XG4gOTk2Olx0XHR9XG4gOTk3Olx0XG4gOTk4Olx0XHRpZiAoaSA9PSBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpKVxuIDk5OTpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIC1FTk9ERVYsXG4xMDAwOlx0XHRcdFx0XHQgICAgIFwmIzM0O1Vua25vd24gY2hpcCBJRDogMHglMDR4XFxuXCYjMzQ7LCBpZCk7XG4xMDAxOlx0XG4xMDAyOlx0XHR6bGRldi1cdTAwM2VpbmZvID0gXHUwMDI2emwzMDczeF9jaGlwX2lkc1tpXTtcbjEwMDM6XHRcbjEwMDQ6XHRcdC8qIFJlYWQgcmV2aXNpb24sIGZpcm13YXJlIHZlcnNpb24gYW5kIGN1c3RvbSBjb25maWcgdmVyc2lvbiAqL1xuMTAwNTpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFx1MDAyNnJldmlzaW9uKTtcbjEwMDY6XHRcdGlmIChyYylcbjEwMDc6XHRcdFx0cmV0dXJuIHJjO1xuMTAwODpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRldfVkVSLCBcdTAwMjZmd192ZXIpO1xuMTAwOTpcdFx0aWYgKHJjKVxuMTAxMDpcdFx0XHRyZXR1cm4gcmM7XG4xMDExOlx0XHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19DVVNUT01fQ09ORklHX1ZFUiwgXHUwMDI2Y2ZnX3Zlcik7XG4xMDEyOlx0XHRpZiAocmMpXG4xMDEzOlx0XHRcdHJldHVybiByYztcbjEwMTQ6XHRcbjEwMTU6XHRcdGRldl9kYmcoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtDaGlwSUQoJVgpLCBDaGlwUmV2KCVYKSwgRndWZXIoJXUpXFxuXCYjMzQ7LCBpZCxcbjEwMTY6XHRcdFx0cmV2aXNpb24sIGZ3X3Zlcik7XG4xMDE3Olx0XHRkZXZfZGJnKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q3VzdG9tIGNvbmZpZyB2ZXJzaW9uOiAlbHUuJWx1LiVsdS4lbHVcXG5cJiMzNDssXG4xMDE4Olx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDMxLCAyNCksIGNmZ192ZXIpLFxuMTAxOTpcdFx0XHRGSUVMRF9HRVQoR0VOTUFTSygyMywgMTYpLCBjZmdfdmVyKSxcbjEwMjA6XHRcdFx0RklFTERfR0VUKEdFTk1BU0soMTUsIDgpLCBjZmdfdmVyKSxcbjEwMjE6XHRcdFx0RklFTERfR0VUKEdFTk1BU0soNywgMCksIGNmZ192ZXIpKTtcbjEwMjI6XHRcbjEwMjM6XHRcdC8qIEdlbmVyYXRlIHJhbmRvbSBjbG9jayBJRCBhcyB0aGUgZGV2aWNlIGhhcyBub3Qgc3VjaCBwcm9wZXJ0eSB0aGF0XG4xMDI0Olx0XHQgKiBjb3VsZCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIEEgdXNlciBjYW4gbGF0ZXIgY2hhbmdlIHRoaXMgdmFsdWVcbjEwMjU6XHRcdCAqIHVzaW5nIGRldmxpbmsuXG4xMDI2Olx0XHQgKi9cbjEwMjc6XHRcdHpsZGV2LVx1MDAzZWNsb2NrX2lkID0gZ2V0X3JhbmRvbV91NjQoKTtcbjEwMjg6XHRcbjEwMjk6XHRcdC8qIERlZmF1bHQgcGhhc2Ugb2Zmc2V0IGF2ZXJhZ2luZyBmYWN0b3IgKi9cbjEwMzA6XHRcdHpsZGV2LVx1MDAzZXBoYXNlX2F2Z19mYWN0b3IgPSAyO1xuMTAzMTpcdFxuMTAzMjpcdFx0LyogSW5pdGlhbGl6ZSBtdXRleCBmb3Igb3BlcmF0aW9ucyB3aGVyZSBtdWx0aXBsZSByZWFkcywgd3JpdGVzXG4xMDMzOlx0XHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbjEwMzQ6XHRcdCAqL1xuMTAzNTpcdFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuMTAzNjpcdFx0aWYgKHJjKVxuMTAzNzpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuMTAzODpcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4xMDM5Olx0XHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4xMDQwOlx0XHRpZiAocmMpXG4xMDQxOlx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4xMDQyOlx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbjEwNDM6XHRcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuMTA0NDpcdFx0aWYgKHJjKVxuMTA0NTpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuMTA0NjpcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4xMDQ3Olx0XG4xMDQ4Olx0XHQvKiBSZWdpc3RlciBEUExMIGNoYW5uZWxzICovXG4xMDQ5Olx0XHRyYyA9IHpsMzA3M3hfZGV2bV9kcGxsX2luaXQoemxkZXYpO1xuMTA1MDpcdFx0aWYgKHJjKVxuMTA1MTpcdFx0XHRyZXR1cm4gcmM7XG4xMDUyOlx0XG4xMDUzOlx0XHQvKiBSZWdpc3RlciB0aGUgZGV2bGluayBpbnN0YW5jZSBhbmQgcGFyYW1ldGVycyAqL1xuMTA1NDpcdFx0cmMgPSB6bDMwNzN4X2RldmxpbmtfcmVnaXN0ZXIoemxkZXYpO1xuMTA1NTpcdFx0aWYgKHJjKVxuMTA1NjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuMTA1NzpcdFx0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bGluayBpbnN0YW5jZVxcblwmIzM0Oyk7XG4xMDU4Olx0XG4xMDU5Olx0XHRyZXR1cm4gMDtcbjEwNjA6XHR9XG4xMDYxOlx0RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFwmIzM0O1pMMzA3M1hcJiMzNDspO1xuMTA2MjpcdFxuMTA2MzpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7SXZhbiBWZWNlcmEgXHUwMDNjaXZlY2VyYUByZWRoYXQuY29tXHUwMDNlXCYjMzQ7KTtcbjEwNjQ6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWljcm9jaGlwIFpMMzA3M3ggY29yZSBkcml2ZXJcJiMzNDspO1xuMTA2NTpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTAwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvYmUgRnVuY3Rpb24mIzM5O3MgQmVoYXZpb3Igd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHByb2JlYCBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBzeXprYWxsZXJgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyByZWFkaW5nIGBaTF9SRUdfSURgIGFuZCBjb21wYXJpbmcgaXQgdG8gYHpsMzA3M3hfY2hpcF9pZHNgLiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGlmIGBzeXprYWxsZXJgIHRyaWVzIHRvIGluc3RhbnRpYXRlIHRoZSBJMkMgZGV2aWNlLCBpdCYjMzk7cyBnb2luZyB0byBhdHRlbXB0IGFuIEkyQyByZWFkLiBXaXRob3V0IHJlYWwgaGFyZHdhcmUsIHRoYXQgcmVhZCBpcyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGZhaWwgb3IgcmV0dXJuIGdhcmJhZ2Ug4oCTIHByb2JhYmx5IHplcm8uIEFuZCB0aGF0IG1lYW5zIHRoZSBwcm9iZSBpcyBnb2luZyB0byBmYWlsLCB3aGljaCBpc24mIzM5O3Qgd2hhdCB3ZSB3YW50LgoKSG9sZCBvbiBhIHNlY29uZC4uLiBkb2VzbiYjMzk7dCBgc3l6a2FsbGVyYCBoYXZlIHNvbWV0aGluZyBmb3Igc2V0dGluZyB1cCBJMkM/IEkgc2VlbSB0byByZWNhbGwgYSBmdW5jdGlvbiBjYWxsZWQgYHN5el9pMmNfc2V0dXBgLiBMZXQgbWUgZG91YmxlLWNoZWNrLiAqTG9va3MgaXQgdXAqLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHdoYXQgSSB3YXMgaG9waW5nIGZvci4gYHN5emthbGxlcmAgZG9lc24mIzM5O3QgaGF2ZSBhIGdlbmVyaWMgSTJDIGRldmljZSAqZW11bGF0b3IqLiBJdCBjYW4gaW5qZWN0IHRyYWZmaWMgaWYgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBwc2V1ZG8tc3lzY2FsbCwgb3IgaWYgaXQgdXNlcyBgaTJjLWRldmAgdG8gYWN0IGFzIGEgbWFzdGVyLCBidXQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBhYmxlIHRvIGVhc2lseSBlbXVsYXRlIGEgc2xhdmUgZGV2aWNlIGFuZCByZXNwb25kIHRvLCBzYXksIGEgYHpsMzA3M3hfcmVhZF91MTZgIGNhbGwuIFNvLCB3ZSYjMzk7cmUgc3RpbGwgc3R1Y2sgd2l0aCB0aGUgcG90ZW50aWFsIHByb2JlIGZhaWx1cmUuIFdlIG5lZWQgdG8gZmluZCBhIHdvcmthcm91bmQuIEJhY2sgdG8gdGhlIGRyYXdpbmcgYm9hcmQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfaTJjX3NldHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA2NzAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYHN5el9zcGlfc2V0dXBgKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgc3l6X3NwaV9zZXR1cGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IElzIGl0IGEga2V5IGZ1bmN0aW9uIGluIGEgZnV6emluZyBzZXR1cD8gSXMgaXQgcmVsYXRlZCB0byBkcml2ZXIgaW5pdGlhbGl6YXRpb24/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcywgaXRzIHBhcmFtZXRlcnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFNQSSBzdWJzeXN0ZW0uIE1vcmUgc3BlY2lmaWNhbGx5LCB3aGF0IGlzIGBzeXpfYCBwcmVmaXggYW5kIHdoYXQgaXMgaXRzIHJlbGF0aW9uIHdpdGggdGhlIFNQSS4gSXMgaXQgcmVsYXRlZCB0byB0aGUga2VybmVsIG1vZHVsZT8gSXMgaXQgcmVsYXRlZCB0byB0aGUgaW50ZXJmYWNlPyBGcm9tIHRoZXJlIEkgd2FudCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gZmlndXJlcyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmFyb3VuZCogaXQuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZnVuY3Rpb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgc3RhcnQuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBwcm9ibGVtcyBjYW4gb2NjdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6X3NwaV9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTMxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVtdWxhdGluZyBJMkMgRGV2aWNlcyBmb3IgU3lzdGVtIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gdGVzdCB0aGlzIGB6bDMwNzN4YCBkZXZpY2Ugd2l0aCBzeXprYWxsZXIuIENhbiBzeXprYWxsZXIgYWN0dWFsbHkgKmVtdWxhdGUqIEkyQyBkZXZpY2VzIGVmZmVjdGl2ZWx5PyBJIGtub3cgdGhlcmUmIzM5O3MgdGhpcyBgaTJjLXN0dWJgIHRoaW5nLCBidXQgZnJvbSB3aGF0IEkgcmVjYWxsLCBpdCYjMzk7cyBwcmV0dHkgcnVkaW1lbnRhcnkuIEl0JiMzOTtzIG5vdCBnb2luZyB0byBjdXQgaXQgZm9yIGFueSBzZXJpb3VzIHByb2JpbmcsIGVzcGVjaWFsbHkgaWYgeW91IG5lZWQgc3BlY2lmaWMgcmVnaXN0ZXIgcmVhZHMgZm9yIHRoZSBwcm9iZSB0byBzdWNjZWVkLgoKUmlnaHQsIHNvLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN5emthbGxlciBkb2VzbiYjMzk7dCBwcm92aWRlIGEgZ2VuZXJhbCBtZWNoYW5pc20gdG8gZW11bGF0ZSBhcmJpdHJhcnkgSTJDIG9yIFNQSSBkZXZpY2VzIHRoYXQgcmVseSBvbiBwYXJ0aWN1bGFyIHJlZ2lzdGVyIHJlYWRzIGZvciBzdWNjZXNzZnVsIHByb2JpbmcuIFVubGVzcyB0aGVyZSYjMzk7cyBhIGN1c3RvbSBtb2NrIGRyaXZlciwgb3IgaXQmIzM5O3MgYSBVU0IgZGV2aWNlICh3aGljaCBjYW4gdXNlIHRoZSBkdW1teV9oY2QvcmF3LWdhZGdldCBhcHByb2FjaCksIGEgUENJIGRldmljZSAod2hpY2ggaXMgcHJvYmxlbWF0aWMgdW5sZXNzIGl0JiMzOTtzIGEgdmVyeSBnZW5lcmljIHR5cGUgb3IgaGFzIGEgY3VzdG9tIGVtdWxhdG9yKSwgb3IgYSBuZXR3b3JrIGRldmljZSAodHVuL3RhcCB3b3JrcyB0aGVyZSkuCgpTaW5jZSBgemwzMDczeGAgaXMgYW4gSTJDL1NQSSBkZXZpY2UsIGl0cyBwcm9iZSBmdW5jdGlvbiwgYHpsMzA3M3hfZGV2X3Byb2JlYCwgd2lsbCwgYnkgZGVmaW5pdGlvbiwgYmUgcmVhZGluZyBgWkxfUkVHX0lEYCB2aWEgSTJDIG9yIFNQSS4gSWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBhY3R1YWxseSBwcmVzZW50LCB0aGF0IHJlYWQgaXMgZWl0aGVyIGdvaW5nIHRvIGZhaWwgb3IsIGF0IGJlc3QsIHJldHVybiBzb21ldGhpbmcgbGlrZSAweGZmIG9yIDB4MDAuIEhtbSwgbmVlZCB0byBzZWUgdGhlIGV4cGVjdGVkIHZhbHVlcy4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHdoYXQgdmFsdWVzIGFyZSBleHBlY3RlZCBpbiBgemwzMDczeF9jaGlwX2lkc2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3hfY2hpcF9pZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTI1LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjI2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gemwzMDczeF9jaGlwX2lkc1tdID0ge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTI3LVx0WkxfQ0hJUF9JTkZPKDB4MEUzMCwgMiwgWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyKSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9OTgwPWludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTItXHQvKiBEZXRlY3QgY2hpcCB2YXJpYW50ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTkzOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTQ6XHRcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk5NS1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk5ODpcdGlmIChpID09IEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcykpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk5LVx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIC1FTk9ERVYsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDEtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwMjpcdHpsZGV2LVx1MDAzZWluZm8gPSBcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDQwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgemwzMDczeCBEcml2ZXIgUHJvYmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgemwzMDczeGAgZHJpdmVyIGFuZCBob3cgaXQmIzM5O3MgcHJvYmVkLiBJdCBsb29rcyBsaWtlIHRoZSBjaGlwIGlkZW50aWZpY2F0aW9uIGhhcHBlbnMgdmlhIHRoZXNlIGhleCBJRHMsIHNvbWV0aGluZyBsaWtlIGAweDBFMzBgLCBhcyBJJiMzOTtkIGV4cGVjdC4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5OyBpZiB0aGUgcGh5c2ljYWwgY2hpcCBpc24mIzM5O3QgdGhlcmUsIHRoZSBgemwzMDczeF9yZWFkX3UxNmAgZnVuY3Rpb24gaXMgZ29pbmcgdG8gY3JhcCBvdXQuIEl0JiMzOTtsbCBlaXRoZXIgZmFpbCBvdXRyaWdodCwgb3IsIGV2ZW4gd29yc2UsIHJldHVybiBhIHVzZWxlc3MgdmFsdWUgbGlrZSBgMHgwMDAwYCBvciBgMHhGRkZGYCwgd2hpY2ggaXMgcHJldHR5IGNvbW1vbiBiZWhhdmlvci4gVGhpcyBsZWFkcyB0byB0aGUgcHJvYmUgZmFpbGluZyB3aXRoIGFuIGAtRU5PREVWYCBlcnJvci4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBlcnJvciBjb2RlLCBzbyBJJiMzOTttIG5vdCBzdXJwcmlzZWQgdGhlcmUuCgpUaGlzIGltbWVkaWF0ZWx5IG1lYW5zIEkgY2FuJiMzOTt0IGp1c3Qgc3BpbiB1cCBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGFuZCBleHBlY3QgdGhpcyBkcml2ZXIgdG8gbG9hZCBjbGVhbmx5LiBJIG5lZWQgdGhlIGFjdHVhbCBoYXJkd2FyZSwgb3IgYSBkZWNlbnQgZW11bGF0b3IgdG8gdHJpY2sgdGhlIGRyaXZlciBpbnRvIHRoaW5raW5nIGl0JiMzOTtzIHRoZXJlLiBIb2xkIG9uLCB0aG91Z2guLi4gaXMgdGhlcmUgYW4gSTJDIGVtdWxhdG9yIGluIHRoZSBrZXJuZWwgdGhhdCBzeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byB1c2UgdG8gZmFrZSB0aGUgZGV2aWNlIGFuZCBhbGxvdyB0aGUgZHJpdmVyIHRvIHByb2JlPyBJIGtub3cgdGhlcmUmIzM5O3MgYGkyYy1zdHViYCwgd2hpY2ggaXMga2luZCBvZiBhbiBpbnRlcmVzdGluZyBvcHRpb24sIGJ1dCBpdCBvbmx5IHN1cHBvcnRzIHJlYWxseSBiYXNpYyBTTUJ1cyBjb21tYW5kcywgYW5kIHRoZSBkZXZpY2UgYWRkcmVzc2VzIGhhdmUgdG8gYmUgY29uZmlndXJlZCBpbiBhZHZhbmNlLgoKRXZlbiBpZiBzeXprYWxsZXIgKmNvdWxkKiBsb2FkIGBpMmMtc3R1YmAsIGl0IHdvdWxkIHN0aWxsIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoaWNoIHJlZ2lzdGVyIG9mZnNldHMgdG8gd3JpdGUgdGhlIGNvcnJlY3QgY2hpcCBJRCB0byBiZWZvcmUgZXZlbiBhdHRlbXB0aW5nIHRvIHByb2JlIHRoZSBkcml2ZXIuIFRoYXQgc2VlbXMgbGlrZSBhIGJpdCBvZiBhIGNoYWxsZW5nZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGUgZHJpdmVyIGFjdHVhbGx5IHVzZXMgU01CdXMgb3IgcmF3IEkyQyB0cmFuc2ZlcnMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjaGVjay4gSSB0aGluayBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBkcml2ZXIgY29kZSBhbmQgc2VlIGlmIEkgY2FuIGZpZ3VyZSB0aGlzIG91dC4uLiBpdCYjMzk7cyBwcm9iYWJseSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoaXMgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9yZWFkX3UxNiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM9MTcxPWludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwNS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDY6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA3LVx0XHRcdCAgICAgIFx1MDAyNmNoYW4tXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9MTc4PWludCB6bDMwNzN4X3dyaXRlX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4IHZhbClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTgzLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjE4NDogKiB6bDMwNzN4X3JlYWRfdTE2IC0gcmVhZCB2YWx1ZSBmcm9tIDE2Yml0IHJlZ2lzdGVyXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTg1LSAqIEB6bGRldjogemwzMDczeCBkZXZpY2UgcG9pbnRlclxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xOTItICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTkzOmludCB6bDMwNzN4X3JlYWRfdTE2KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUxNiAqdmFsKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTE5NC17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTk4MD1pbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg3LVx0LyogUmVhZCBjaGlwIElEICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTg4Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFx1MDAyNmlkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODktXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDQtXHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDA1Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFx1MDAyNnJldmlzaW9uKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDA2LVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDctXHRcdHJldHVybiByYztcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDA4Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRldfVkVSLCBcdTAwMjZmd192ZXIpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDktXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oPTE0Nz1pbnQgemwzMDczeF9yZWFkX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4ICp2YWwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjE0ODppbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgtMTQ5LWludCB6bDMwNzN4X3JlYWRfdTMyKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUzMiAqdmFsKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM9MjU9emwzMDczeF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy0zMy1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYzozNDpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcdTAwMjZpZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtMzUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTQ0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjQ1Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFx1MDAyNnJldmlzaW9uKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy00Ni1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6NTY6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFx1MDAyNmZ3X3Zlcik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTEyMzI9emwzMDczeF9kcGxsX3RlbXBfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMjQxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEyNDI6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19ESUVfVEVNUF9TVEFUVVMsIFx1MDAyNnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTI0My1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYz03OT1pbnQgemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE1LVx0LyogUmVhZCBmcmVxdWVuY3kgcmVsYXRlZCByZWdpc3RlcnMgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jOjExNjpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFRl9GUkVRX0JBU0UsIFx1MDAyNnJlZi1cdTAwM2VmcmVxX2Jhc2UpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE3LVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE4LVx0XHRyZXR1cm4gcmM7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMTk6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfRlJFUV9NVUxULCBcdTAwMjZyZWYtXHUwMDNlZnJlcV9tdWx0KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyMC1cdGlmIChyYylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyMS1cdFx0cmV0dXJuIHJjO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM6MTIyOlx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVGX1JBVElPX00sIFx1MDAyNnJlZi1cdTAwM2VmcmVxX3JhdGlvX20pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTIzLVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTI0LVx0XHRyZXR1cm4gcmM7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMjU6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfUkFUSU9fTiwgXHUwMDI2cmVmLVx1MDAzZWZyZXFfcmF0aW9fbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjYtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYz0yMz1pbnQgemwzMDczeF9zeW50aF9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTQ1LVx0ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jOjQ2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfU1lOVEhfRlJFUV9CQVNFLCBcdTAwMjZzeW50aC1cdTAwM2VmcmVxX2Jhc2UpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy00Ny1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTUzLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYzo1NDpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1NZTlRIX0ZSRVFfTSwgXHUwMDI2c3ludGgtXHUwMDNlZnJlcV9tKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy01Ny1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmM6NTg6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19TWU5USF9GUkVRX04sIFx1MDAyNnN5bnRoLVx1MDAzZWZyZXFfbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTU5LVx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTE0MwoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiA3MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBVbnJlYWNoYWJsZSBDb2RlIGluIGEgSGFyZHdhcmUtRGVwZW5kZW50IERyaXZlcioqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgYHpsMzA3M3hgIGRyaXZlciB1c2VzIGByZWdtYXBgIGludGVybmFsbHksIHdoaWNoIG1lYW5zIHRoYXQgYHpsMzA3M3hfcmVhZF91MTZgIHdpbGwsIGluIHR1cm4sIGNhbGwgYHJlZ21hcF9yZWFkYC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGZ1enogYHJlZ21hcGAgZGV2aWNlcz8gVGhlIGFuc3dlciwgYXMgSSBzZWUgaXQsIGlzIGdlbmVyYWxseSBubywgdW5sZXNzIGEgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgZXhpc3RzIG9yIGlmIHRoZSBkZXZpY2UgaXRzZWxmIGdldHMgaW5zdGFudGlhdGVkLgoKSSByZWFsaXplIHRoYXQgYHpsMzA3M3hfZGV2X3Byb2JlYCB3aWxsIGZhaWwgZWFybHkgb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O2xsIGZhaWwgYXQgdGhlIGB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsICZhbXA7aWQpYCBjYWxsIGJlY2F1c2UgYW55IEkyQyBvciBTUEkgcmVhZCBpbiBhIHN5emthbGxlciBjb250ZXh0IHdpbGwgcmVzdWx0IGluIGEgZmFpbHVyZSBvciBqdW5rIGRhdGEgbGlrZSBgMHgwMDAwYCBvciBgMHhGRkZGYC4KCk5vdywgSSBjb25zaWRlcmVkIGBpMmMtc3R1YmAgYW5kIHdoZXRoZXIgdGhhdCBtaWdodCB3b3JrLiBJIGtub3cgdGhhdCBgaTJjLXN0dWJgIGNhbiBiZSBsb2FkZWQgd2l0aCBhIHNwZWNpZmljIGBjaGlwX2FkZHJgLCB3aGljaCB3b3VsZCBsZXQgaXQgcmVzcG9uZCB0byBJMkMgcmVhZHMuIEhvd2V2ZXIsIHN5emthbGxlciBkb2VzbiYjMzk7dCBrbm93IHRoZSBzcGVjaWZpYyBjaGlwIElELCBgWkxfUkVHX0lEYCBpcyBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgMHgwRTMwYCwgYW5kIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHJlZ2lzdGVycyB0byB3cml0ZSB0aGlzIGNoaXAgSUQgdG8sIHNvIHRoZSBjb3JyZWN0IHZhbHVlcyB3b3VsZCBub3QgYmUgd3JpdHRlbi4gVGhlIGxpa2VsaWhvb2Qgb2Ygc3l6a2FsbGVyIHJhbmRvbWx5IHdyaXRpbmcgdGhlIGNvcnJlY3QgdmFsdWVzIHRvIHJlZ2lzdGVyIGAweDAwYCBhbmQgYDB4MDFgIChvciB3aGF0ZXZlciB0aGUgZW5kaWFubmVzcyBpcyksIHRvIHNldCB0aGUgY29ycmVjdCBJRCBiZWZvcmUgYXR0ZW1wdGluZyB0byBwcm9iZSB0aGUgZHJpdmVyLCBpcyBpbmZpbml0ZXNpbWFsbHkgc21hbGwuIFBsdXMsIGBpMmMtc3R1YmAgaXNuJiMzOTt0IHN5emthbGxlciYjMzk7cyB0eXBpY2FsIGFwcHJvYWNoIGZvciBmYWtpbmcgYXJiaXRyYXJ5IGRldmljZXMsIGFuZCByZXF1aXJlcyBtb2R1bGUgcGFyYW1ldGVycyB0byBzZXQgdXAgdGhlIGFkZHJlc3Nlcy4KCkkgYWxzbyByZW1lbWJlciBgc3l6X3VzYl9jb25uZWN0YCB3aGljaCBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcywgYnV0IGhlcmUgd2UgYXJlIHRhbGtpbmcgYWJvdXQgSTJDL1NQSS4gSXQmIzM5O3MgYSBkaWZmZXJlbnQgYmVhc3QuCgpTbywgdGhlIG5leHQgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgd2F5cyB0aGlzIGNvZGUgY2FuIGJlIHJlYWNoZWQ/IE5vLiBJJiMzOTt2ZSByZWNvbmZpcm1lZCB0aGF0IHRoaXMgY29kZSByZXNpZGVzIHNvbGVseSB3aXRoaW4gdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9gIGRpcmVjdG9yeSwgYW5kIGl0JiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMuIENydWNpYWxseSwgdGhlc2UgZGV2aWNlcyBhcmUgbm90IGVtdWxhdGVkIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoZXkgYXJlIHBoeXNpY2FsIGRldmljZXMuCgpOb3csIGxldCYjMzk7cyBzZWUuIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiB0aGUgZGV2aWNlLCBqdXN0IHRvIGJlIHN1cmUuIE5vcGUuIEl0JiMzOTtzIGEgcGh5c2ljYWwgRFBMTCBjaGlwLgoKTm93LCBsZXQgbWUgZ28gYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zIEkgd2FzIGdpdmVuLiBUaGV5IGV4cGxpY2l0bHkgc3RhdGUgdG8gc2V0ICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgYSBwYXRjaCBjb250YWluczoKKiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuCiogQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gUUVNVS4KClRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgSTJDL1NQSSBEUExMIGRyaXZlci4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoaXMgbWVldHMgdGhlIGNyaXRlcmlhIHBlcmZlY3RseS4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhZ2Fpbi4gSXQgbW9kaWZpZXMgZmlsZXMgbGlrZSBgY2hhbi5jYCwgYGNvcmUuY2AsIGFuZCBgZHBsbC5jYCB3aXRoaW4gdGhlIGB6bDMwNzN4YCBkcml2ZXIsIGFkZGluZyBQVFAgY2xvY2sgc3VwcG9ydC4gQnV0IGJlY2F1c2UgdGhlIGRyaXZlciBpdHNlbGYgY2FuJiMzOTt0IGJlIHByb2JlZCB3aXRob3V0IHRoZSBwaHlzaWNhbCBNaWNyb2NoaXAgQXp1cml0ZSBjaGlwLCBub25lIG9mIHRoaXMgY29kZSBjYW4gYmUgZXhlY3V0ZWQgYnkgc3l6a2FsbGVyLgoKVGhlcmVmb3JlLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgY29kZSBpcyBzb2xlbHkgd2l0aGluIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCB3aGljaCBpcyBmb3IgYSBzcGVjaWZpYyBEUExMIGNoaXAgd2hpY2ggY2Fubm90IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgZm9yIEkyQy9TUEkgY29ubmVjdGVkIERQTEwgZGV2aWNlcy4gU2luY2UgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBJMkMvU1BJIGNvbm5lY3RlZCBEUExMIGRldmljZXMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uIHdpbGwgZmFpbCB0byByZWFkIHRoZSBleHBlY3RlZCBoYXJkd2FyZSBjaGlwIElEcywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUyOjM0Ljk0NTEzMzkyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1Mzk3NTIwMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBJMkMvU1BJIGNvbm5lY3RlZCBEUExMIGRldmljZXMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjozNC45NDUxMzg1ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzE1NzMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY0MjNlNTBlY2QwMDFjZGUyODMxODQxY2M5Y2MxOTI0NzY4YzkxYTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwMjo1MjozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbmluZGV4IDViYmNhMTQwMDU4MTMuLmRhMTczMWFjZTE1ZjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcXG5AQCAtMiw3ICsyLDcgQEBcXG4gXFxuIGNvbmZpZyBaTDMwNzNYXFxuIFxcdHRyaXN0YXRlIFxcXCJNaWNyb2NoaXAgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzXFxcIiBpZiBDT01QSUxFX1RFU1RcXG4tXFx0ZGVwZW5kcyBvbiBORVRcXG4rXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcXG4gXFx0c2VsZWN0IERQTExcXG4gXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIFxcdHNlbGVjdCBSRUdNQVBcXG5AQCAtMTYsNyArMTYsNyBAQCBjb25maWcgWkwzMDczWFxcbiBcXG4gY29uZmlnIFpMMzA3M1hfSTJDXFxuIFxcdHRyaXN0YXRlIFxcXCJJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXFxcIlxcbi1cXHRkZXBlbmRzIG9uIEkyQyBcXHUwMDI2XFx1MDAyNiBORVRcXG4rXFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLXFxuIFxcdHNlbGVjdCBSRUdNQVBfSTJDXFxuIFxcdHNlbGVjdCBaTDMwNzNYXFxuIFxcdGhlbHBcXG5AQCAtMjgsNyArMjgsNyBAQCBjb25maWcgWkwzMDczWF9JMkNcXG4gXFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxcbiBcXHR0cmlzdGF0ZSBcXFwiU1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tXFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgU1BJXFxuK1xcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSSBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbiBcXHRzZWxlY3QgUkVHTUFQX1NQSVxcbiBcXHRzZWxlY3QgWkwzMDczWFxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xcbmluZGV4IDRlYzJjZjUzZGFkNDYuLjUzMDMyZTc4MmZkNGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG5AQCAtMjAyLDYgKzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiBcXHRcXHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcXG4gXFx0XFx0emwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTtcXG4gXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4gXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4gXFxuIFxcdC8qIFJlYWQgRFBMTCBjb25maWd1cmF0aW9uIGZyb20gbWFpbGJveCAqL1xcbkBAIC0yMzQsNiArMjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXFxuIFxcdHJldHVybiBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICpcXG4rICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXFxuKyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xcbitcXHR1OCB0b2RfY3RybDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXFx1MDAyNnRvZF9jdHJsKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XFxuK1xcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xcbitcXG4rXFx0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXFxuKyAqXFxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcXG4rICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxcbit7XFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSB0aGUgcmVzdWx0XFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4re1xcbitcXHR1MzIgbnNlYztcXG4rXFx0dTY0IHNlYztcXG4rXFx0dTggY21kO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAobmV4dF9oeilcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXFx1MDAyNnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFxcdTAwMjZuc2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHR0cy1cXHUwMDNldHZfc2VjID0gc2VjO1xcbitcXHR0cy1cXHUwMDNldHZfbnNlYyA9IG5zZWM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAdHM6IHRpbWUgdG8gc2V0XFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxcbit7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXFxuK1xcdFxcdFxcdFxcdCAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcXG4rICpcXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXFxuKyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxcbisgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjay5cXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXFx1MDAyNnRzX25leHQsIE5VTEwpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXFx1MDAyNnRzX2N1ciwgTlVMTCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogSWYgdG9vIGNsb3NlIHRvIChvciBwYXN0KSB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQgKi9cXG4rXFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XFxuK1xcdGlmIChkaWZmLnR2X3NlYyBcXHUwMDNjIDAgfHwgKCFkaWZmLnR2X3NlYyBcXHUwMDI2XFx1MDAyNiBkaWZmLnR2X25zZWMgXFx1MDAzYyB0aHJlc2hvbGRfbnMpKSB7XFxuK1xcdFxcdGlmICghZGlmZi50dl9zZWMgXFx1MDAyNlxcdTAwMjYgZGlmZi50dl9uc2VjKVxcbitcXHRcXHRcXHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyArIDEpO1xcbitcXHRcXHR0c19uZXh0LnR2X3NlYysrO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi9cXG4rXFx0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcXG4rXFx0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFxcdTAwMjZ0c19uZXh0KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBXcml0ZSBhZGp1c3RlZCBUb0QgYmFjayBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0emxkZXYtXFx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKy0xcylcXG4rICpcXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXFxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxcbit7XFxuK1xcdHM2NCB0aWVfZGF0YTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xcbitcXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXFxuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxcbisgKlxcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdCAgICBib29sIHRvZF9zdGVwKVxcbit7XFxuK1xcdHU4IGN0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXFxuK1xcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcXG4rXFx0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcXG4rXFx0aWYgKHRvZF9zdGVwKVxcbitcXHRcXHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbmluZGV4IGRjOWM2ZDk1YmRlZTcuLjlkYzVhM2YxOTkxZjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXFxuQEAgLTUsMTAgKzUsMTIgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RkZGVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicmVncy5oXFxcIlxcbiBcXG4rc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuIFxcbiAvKipcXG5AQCAtMTYsNiArMTgsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXY7XFxuICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVcXG4gICogQG1vZGVfcmVmc2VsOiBtb2RlIGFuZCByZWZlcmVuY2Ugc2VsZWN0aW9uIHJlZ2lzdGVyIHZhbHVlXFxuICAqIEByZWZfcHJpbzogcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyAoNCBiaXRzIHBlciByZWYsIFAvTiBwYWNrZWQpXFxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFza1xcbiAgKiBAbW9uX3N0YXR1czogbW9uaXRvciBzdGF0dXMgcmVnaXN0ZXIgdmFsdWVcXG4gICogQHJlZnNlbF9zdGF0dXM6IHJlZmVyZW5jZSBzZWxlY3Rpb24gc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXFxuICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHNcXG5AQCAtMjYsNiArMjksOSBAQCBzdHJ1Y3QgemwzMDczeF9jaGFuIHtcXG4gXFx0XFx0dThcXHRtb2RlX3JlZnNlbDtcXG4gXFx0XFx0dThcXHRyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07XFxuIFxcdCk7XFxuK1xcdHN0cnVjdF9ncm91cChpbnYsIC8qIEludmFyaWFudHMgKi9cXG4rXFx0XFx0dTE2XFx0b3V0X3N0ZXBfdGltZV9tYXNrO1xcbitcXHQpO1xcbiBcXHRzdHJ1Y3RfZ3JvdXAoc3RhdCxcXG4gXFx0XFx0dThcXHRtb25fc3RhdHVzO1xcbiBcXHRcXHR1OFxcdHJlZnNlbF9zdGF0dXM7XFxuQEAgLTQyLDYgKzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxcbiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gXFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XFxuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XFxuK1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXFxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG5AQCAtMjAwLDYgKzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbiBcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuKyAqXFxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4re1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxcbitcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbkBAIC0yMzMsNCArMjY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuIFxcdHJldHVybiBGSUVMRF9HRVQoWkxfRFBMTF9SRUZTRUxfU1RBVFVTX1JFRlNFTCwgY2hhbi1cXHUwMDNlcmVmc2VsX3N0YXR1cyk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbisgKiBAb3V0OiBvdXRwdXQgaW5kZXhcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCBvdXQpXFxuK3tcXG4rXFx0cmV0dXJuICEhKGNoYW4tXFx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcXHUwMDI2IEJJVChvdXQpKTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5pbmRleCA3ZjVhZmFhYWU2MzQyLi5iMmY5ZmM5N2ZkMWI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbkBAIC0xMDMzLDYgKzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIFxcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxcbiBcXHQgKi9cXG4gXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2VtdWx0aW9wX2xvY2spO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuK1xcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXRpZV9sb2NrKTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi4yZGM4MzZkMGM4ZjZiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXFx0XFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXFx0KDUwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1xcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXFxuIFxcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xcbiBcXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XFxuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXFxuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXFxuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXFxuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXFxuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xcbkBAIC03MSw2ICs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHRcXHQqcmVnbWFwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cXHQqaW5mbztcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0bXVsdGlvcF9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHR0aWVfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGhhc2Vfc3RlcF9sb2NrO1xcbiBcXG4gXFx0LyogSW52YXJpYW50cyAqL1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWZcXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLjMyMDg1MmRmYzU4Y2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcXHUwMDNlXFxuQEAgLTEzLDYgKzE0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwcmludGYuaFxcdTAwM2VcXG4gXFxuQEAgLTQxLDYgKzQzLDcgQEBcXG4gICogQHBoYXNlX29mZnNldDogbGFzdCBzYXZlZCBwaW4gcGhhc2Ugb2Zmc2V0XFxuICAqIEBmcmVxX29mZnNldDogbGFzdCBzYXZlZCBmcmFjdGlvbmFsIGZyZXF1ZW5jeSBvZmZzZXRcXG4gICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5XFxuKyAqIEBwZXJvdXRfaWR4OiBQVFAgcGVyb3V0IGNoYW5uZWwgaW5kZXgsIG9yIC0xIGlmIG5vdCBwZXJvdXQtZWxpZ2libGVcXG4gICovXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuQEAgLTU4LDYgKzYxLDcgQEAgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xcbiBcXHRzNjRcXHRcXHRcXHRwaGFzZV9vZmZzZXQ7XFxuIFxcdHM2NFxcdFxcdFxcdGZyZXFfb2Zmc2V0O1xcbiBcXHR1MzJcXHRcXHRcXHRtZWFzdXJlZF9mcmVxO1xcbitcXHRzOFxcdFxcdFxcdHBlcm91dF9pZHg7XFxuIH07XFxuIFxcbiAvKlxcbkBAIC05MzUsMjEgKzkzOSwxNyBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG4temwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpwaW5fcHJpdixcXG4tXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi1cXHRcXHRcXHRcXHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4rX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IGZyZXF1ZW5jeSlcXG4ge1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XFxuIFxcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4tXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiA9IHBpbl9wcml2O1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XFxuIFxcdHUzMiBuZXdfZGl2LCBzeW50aF9mcmVxO1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9vdXQgb3V0O1xcbiBcXHR1OCBvdXRfaWQ7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXFx1MDAzZWlkKTtcXG4gXFx0b3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTtcXG5AQCAtMTAxMCw2ICsxMDEwLDIxIEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4gXFx0cmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCBcXHUwMDI2b3V0KTtcXG4gfVxcbiBcXG4rc3RhdGljIGludFxcbit6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGZyZXF1ZW5jeSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnRcXG4gemwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbiBcXHRcXHRcXHRcXHRcXHQgdm9pZCAqcGluX3ByaXYsXFxuQEAgLTE2MDcsNiArMTYyMiw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsXFxuIFxcdHBpbi1cXHUwMDNlZHBsbCA9IHpsZHBsbDtcXG4gXFx0cGluLVxcdTAwM2VkaXIgPSBkaXI7XFxuIFxcdHBpbi1cXHUwMDNlaWQgPSBpZDtcXG4rXFx0cGluLVxcdTAwM2VwZXJvdXRfaWR4ID0gLTE7XFxuIFxcbiBcXHRyZXR1cm4gcGluO1xcbiB9XFxuQEAgLTE2MjUsNiArMTY0MSw0NCBAQCB6bDMwNzN4X2RwbGxfcGluX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbilcXG4gXFx0a2ZyZWUocGluKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0IC0gY2hlY2sgaWYgb3V0cHV0IHBpbiBpcyBwZXJvdXQtZWxpZ2libGVcXG4rICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2tcXG4rICogQHByb3BzOiBwaW4gcHJvcGVydGllcyAoYWxyZWFkeSBmZXRjaGVkIGJ5IGNhbGxlcilcXG4rICpcXG4rICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWRcXG4rICogKG5vdCBkaWZmZXJlbnRpYWwpIGFuZCBzdXBwb3J0cyAxIEh6IGluIGl0cyBmcmVxdWVuY3kgbGlzdC5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBib29sXFxuK3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X3Bpbl9wcm9wcyAqcHJvcHMpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gcGluLVxcdTAwM2VkcGxsO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHR1OCBvdXRfaWQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcdGlmICh6bDMwNzN4X2Rldl9vdXRfaXNfZGlmZih6bGRwbGwtXFx1MDAzZWRldiwgb3V0X2lkKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJvcHMtXFx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpKyspIHtcXG4rXFx0XFx0aWYgKHByb3BzLVxcdTAwM2VkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkW2ldLm1pbiA9PSAxKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgcGluXFxuICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW5cXG5AQCAtMTY2Niw2ICsxNzIwLDggQEAgemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLCB1MzIgaW5kZXgpXFxuIFxcdFxcdGlmIChwaW4tXFx1MDAzZXByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKVxcbiBcXHRcXHRcXHQvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqL1xcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXByaW8gPSBaTF9EUExMX1JFRl9QUklPX01BWDtcXG4rXFx0fSBlbHNlIGlmICh6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChwaW4sIHByb3BzKSkge1xcbitcXHRcXHRwaW4tXFx1MDAzZXBlcm91dF9pZHggPSB6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCsrO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovXFxuQEAgLTE4OTYsNiArMTk1Miw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0dTggaWQsIGluZGV4O1xcbiBcXHRpbnQgcmM7XFxuIFxcbitcXHR6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCA9IDA7XFxuK1xcbiBcXHQvKiBQcm9jZXNzIGlucHV0IHBpbnMgKi9cXG4gXFx0Zm9yIChpbmRleCA9IDA7IGluZGV4IFxcdTAwM2MgWkwzMDczWF9OVU1fUElOUzsgaW5kZXgrKykge1xcbiBcXHRcXHQvKiBGaXJzdCBpbnB1dCBwaW5zIGFuZCB0aGVuIG91dHB1dCBwaW5zICovXFxuQEAgLTIyNzUsNDUgKzIzMzMsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIFxcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XFxuIH1cXG4gXFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cXG4rI2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREpcXHQxMDAwMDAwMFxcbitcXG4gLyoqXFxuLSAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXFxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcXG4rICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lXFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXFxuICAqXFxuLSAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxcbiAgKlxcbi0gKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gICovXFxuLXN0cnVjdCB6bDMwNzN4X2RwbGwgKlxcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXFxuIHtcXG4tXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbiBcXG4tXFx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XFxuLVxcdGlmICghemxkcGxsKVxcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0emxkcGxsLVxcdTAwM2VkZXYgPSB6bGRldjtcXG4tXFx0emxkcGxsLVxcdTAwM2VpZCA9IGNoO1xcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zKTtcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQsICp0cyk7XFxuK31cXG4gXFxuLVxcdHJldHVybiB6bGRwbGw7XFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXBcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsXFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcXG4rICogICAgICAgICBOU0VDX1BFUl9TRUMpKVxcbisgKlxcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXFxuKyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwc1xcbisgKiBvdXRwdXRzIGFuZCBUb0QgY29oZXJlbnQuIE9ubHkgdmFsaWQgZm9yIE5DTy5cXG4rICpcXG4rICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpblxcbisgKiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuIFRoZSBmaXJzdCBzeW50aCBncm91cCB3aXRoIGVuYWJsZWQgb3V0cHV0c1xcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXFxuKyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRFxcbisgKiBjb3VudGVyIGlzIHN0ZXBwZWQgYWxvbmUgdXNpbmcgYW4gZW1wdHkgb3V0cHV0IG1hc2sgKHRoZSBGVyB1c2VzIHRoZVxcbisgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHM2NCBkZWx0YSlcXG4re1xcbitcXHR1MTYgc3ludGhfbWFza1taTDMwNzNYX05VTV9TWU5USFNdID0ge307XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXHR1MzIgZmlyc3Rfc3ludGhfZnJlcSA9IDA7XFxuK1xcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcXG4rXFx0czMyIHN0ZXBfY3ljbGVzO1xcbitcXHR1MzIgc3ludGhfZnJlcTtcXG4rXFx0aW50IHJjO1xcbitcXHR1OCBpO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMsIGxpc3QpIHtcXG4rXFx0XFx0dTggb3V0X2lkLCBzeW50aF9pZDtcXG4rXFxuK1xcdFxcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRcXHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2lkID0gemwzMDczeF9kZXZfb3V0X3N5bnRoX2dldCh6bGRldiwgb3V0X2lkKTtcXG4rXFx0XFx0aWYgKHN5bnRoX2lkIFxcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xcbitcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LCBcXFwiVW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBvdXRfaWQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUHJvY2VzcyBlYWNoIHN5bnRoIGdyb3VwICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBaTDMwNzNYX05VTV9TWU5USFM7IGkrKykge1xcbitcXHRcXHRzeW50aCA9IHpsMzA3M3hfc3ludGhfc3RhdGVfZ2V0KHpsZGV2LCBpKTtcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XFxuK1xcdFxcdCAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtXFx1MDAzZWlkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHN5bnRoX2ZyZXEgPSB6bDMwNzN4X3N5bnRoX2ZyZXFfZ2V0KHN5bnRoKTtcXG4rXFxuK1xcdFxcdC8qIFJlbWVtYmVyIGxvd2VzdC1JRCBzeW50aCBmcmVxIGZvciBUb0Qtb25seSBmYWxsYmFjayAqL1xcbitcXHRcXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXFxuK1xcdFxcdFxcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xcbitcXG4rXFx0XFx0aWYgKCFzeW50aF9tYXNrW2ldKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xcbitcXHRcXHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xcbitcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAhdG9kX3N0ZXBwZWQpO1xcbitcXHRcXHRpZiAocmMpIHtcXG4rXFx0XFx0XFx0aWYgKHRvZF9zdGVwcGVkKSB7XFxuK1xcdFxcdFxcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiUGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dG9kX3N0ZXBwZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxcbitcXHQgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cXG4rXFx0ICovXFxuK1xcdGlmICghdG9kX3N0ZXBwZWQpIHtcXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxcbi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kc1xcbiAgKlxcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxcbisgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFxcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3IgdGhlIHNlY29uZHMgcGFydCBhbmQgYW4gb3V0cHV0IHBoYXNlIHN0ZXAgZm9yXFxuKyAqIHRoZSBzdWItc2Vjb25kIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIHBoYXNlIHN0ZXAgZGlyZWN0bHksXFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS5cXG4rICogSW4gQVVUTy9SRUZMT0NLIG1vZGVzLCBsYXJnZSBkZWx0YXMgYXJlIHNwbGl0IGludG8gVG9EXFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBzZWNvbmRzIGFuZCBUSUUgd3JpdGUgZm9yIHRoZSBzdWItc2Vjb25kXFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuICAqL1xcbi12b2lkXFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpXFxuIHtcXG4tXFx0V0FSTih6bGRwbGwtXFx1MDAzZWRwbGxfZGV2LCBcXFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcXFxuXFxcIik7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFx0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XFxuK1xcdGludCByYztcXG4gXFxuLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuLVxcdGtmcmVlKHpsZHBsbCk7XFxuK1xcdGlmICghZGVsdGEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XFxuK1xcbitcXHQvKiBTcGxpdCBvZmYgc2Vjb25kcyB2aWEgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHNvIHRoZSBzdWItc2Vjb25kXFxuK1xcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXFxuK1xcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXFxuK1xcdCAqL1xcbitcXHRpZiAoYWJzKGRlbHRhKSBcXHUwMDNlPSBOU0VDX1BFUl9TRUMpIHtcXG4rXFx0XFx0czMyIHJlbWFpbmRlcjtcXG4rXFxuK1xcdFxcdHRzLnR2X3NlYyA9IGRpdl9zNjRfcmVtKGRlbHRhLCBOU0VDX1BFUl9TRUMsIFxcdTAwMjZyZW1haW5kZXIpO1xcbitcXHRcXHR0cy50dl9uc2VjID0gMDtcXG4rXFx0XFx0ZGVsdGEgPSByZW1haW5kZXI7XFxuK1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCB0cyk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0XFx0c2VjX2FkanVzdGVkID0gdHJ1ZTtcXG4rXFxuK1xcdFxcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXFxuK1xcdFxcdGlmICghZGVsdGEpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBzdWItc2Vjb25kIGRlbHRhIHZpYSBwaGFzZSBzdGVwIChOQ08pIG9yIFRJRSB3cml0ZSAqL1xcbitcXHRpZiAoemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKSB7XFxuK1xcdFxcdHJjID0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoemxkcGxsLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGRlbHRhKTtcXG4rXFx0XFx0aWYgKCFyYylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFBoYXNlIHN0ZXAgb3IgVElFIHdyaXRlIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFRvRCBhZGp1c3QgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XFxuK1xcbitcXHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xcbitcXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cXG4rXFx0ICogc3VjY2VzcyB0byBwcmV2ZW50IHRoZSBQVFAgc2Vydm8gZnJvbSByZXRyeWluZyB0aGUgZnVsbCBkZWx0YSBhbmRcXG4rXFx0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcXG4rXFx0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXFxuK1xcdCAqL1xcbitcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgc2VjX2FkanVzdGVkKSB7XFxuK1xcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiU3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lIC0gYWRqdXN0IFBUUCBjbG9jayBmcmVxdWVuY3lcXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBzY2FsZWRfcHBtOiBmcmVxdWVuY3kgYWRqdXN0bWVudCBpbiBzY2FsZWQgcHBtIChwcG0gKiAyXjE2KVxcbisgKlxcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBOQ08gcGluIGlzIG5vdCBjb25uZWN0ZWQsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xcbitcXHRzNjQgb2Zmc2V0O1xcbitcXG4rXFx0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjMyKSAvIDEwXjZcXG4rXFx0ICpcXG4rXFx0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4yNikgLyA1XjZcXG4rXFx0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxcbitcXHQgKi9cXG4rXFx0b2Zmc2V0ID0gLWRpdl9zNjQoKHM2NClzY2FsZWRfcHBtICogNjcxMDg4NjRMTCwgMTU2MjUpO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHNjYWxlZF9wcG0gPyAtRU9QTk9UU1VQUCA6IDA7XFxuK1xcdGlmIChvZmZzZXQgPT0gY2hhbi1cXHUwMDNlZGZfb2Zmc2V0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCwgb2Zmc2V0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2Rlcy4gVXNlcyBUSUUgd3JpdGUgZm9yXFxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgbW9kZSBkb2Vzbid0IHN1cHBvcnQgVElFLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczMyIGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwdHBfaW5mbyk7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFxuK1xcdGlmICghZGVsdGEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzMzJcXG4remwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gX19hbHdheXNfdW51c2VkKVxcbit7XFxuK1xcdC8qIEhXIGxpbWl0cyBUSUUgd3JpdGUgdG8gKy0xIHNlY29uZC4gUmV0dXJuIHRoZSBjb25zdGFudCBIV1xcbitcXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBOU0VDX1BFUl9TRUMgLSAxO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4gLSBmaW5kIHBpbiBieSBwZXJvdXQgY2hhbm5lbCBpbmRleFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcXG4rICogQGlkeDogcGVyb3V0IGNoYW5uZWwgaW5kZXggdG8gZmluZFxcbisgKlxcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmRcXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqXFxuK3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeClcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKHBpbi1cXHUwMDNlcGVyb3V0X2lkeCA9PSBpZHgpXFxuK1xcdFxcdFxcdHJldHVybiBwaW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9lbmFibGUgLSBlbmFibGUvZGlzYWJsZSBQVFAgY2xvY2sgZnVuY3Rpb25zXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnNcXG4rICogQG9uOiB0cnVlIHRvIGVuYWJsZSwgZmFsc2UgdG8gZGlzYWJsZVxcbisgKlxcbisgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLlxcbisgKiBPbiBlbmFibGUsIGNvbmZpZ3VyZXMgdGhlIG91dHB1dCBkaXZpZGVyIGZvciAxIEh6LiBPbiBkaXNhYmxlLCBkb2VzIG5vdGhpbmdcXG4rICogYXMgdGhlIHNpZ25hbCBpcyBub3QgZGlzYWJsZWQuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xcbitcXHR1bnNpZ25lZCBpbnQgaWR4O1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAocnEtXFx1MDAzZXR5cGUgIT0gUFRQX0NMS19SRVFfUEVST1VUKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRpZHggPSBycS1cXHUwMDNlcGVyb3V0LmluZGV4O1xcbitcXHRpZiAoaWR4IFxcdTAwM2U9IGluZm8tXFx1MDAzZW5fcGVyX291dClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBUb2dnbGluZyBvdXRwdXQgcGlucyBjYW4gcHJvZHVjZSBydW50IHB1bHNlcywgc28gZGlzYWJsZVxcbitcXHQgKiBpcyBhIG5vLW9wLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFvbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBPbmx5IGFjY2VwdCBleGFjdGx5IDFQUFMgKHBlcmlvZC5zZWMgPT0gMSwgbnNlYyA9PSAwKSAqL1xcbitcXHRpZiAocnEtXFx1MDAzZXBlcm91dC5wZXJpb2Quc2VjICE9IDEgfHwgcnEtXFx1MDAzZXBlcm91dC5wZXJpb2QubnNlYyAhPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRwaW4gPSB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3Bpbih6bGRwbGwsIGlkeCk7XFxuK1xcdGlmICghcGluKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFscmVhZHkgYXQgMSBIeiwgbm90aGluZyB0byBkbyAqL1xcbitcXHRpZiAoemwzMDczeF9kZXZfb3V0cHV0X3Bpbl9mcmVxX2dldCh6bGRwbGwtXFx1MDAzZWRldiwgcGluLVxcdTAwM2VpZCkgPT0gMSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAoIXJjKVxcbitcXHRcXHRkcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbi1cXHUwMDNlZHBsbF9waW4pO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcXG4rXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4rXFx0Lm1heF9hZGpcXHQ9IFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESixcXG4rXFx0LmdldHRpbWV4NjRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcXG4rXFx0LnNldHRpbWU2NFxcdD0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsXFxuK1xcdC5hZGp0aW1lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUsXFxuK1xcdC5hZGpmaW5lXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXFxuK1xcdC5hZGpwaGFzZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSxcXG4rXFx0LmdldG1heHBoYXNlXFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlLFxcbitcXHQuZW5hYmxlXFx0XFx0PSB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XFxuK1xcbitcXHRzbnByaW50Zih6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5hbWUsIHNpemVvZih6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLm5hbWUpLFxcbitcXHRcXHQgXFxcInpsMzA3M3gtZHBsbCV1XFxcIiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcbitcXHRwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcHRwX2luZm8sIHpsZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcXG4rXFx0XFx0ZGV2X2Vycih6bGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHR6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcXG4rXFx0fVxcbitcXG4rXFx0emxkcGxsLVxcdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVxcdTAwM2VwdHBfY2xvY2spKSB7XFxuK1xcdFxcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4rXFx0XFx0emxkcGxsLVxcdTAwM2VwdHBfY2xvY2sgPSBOVUxMO1xcbitcXHR9XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMzk4LDYgKzI4NTgsNDggQEAgemwzMDczeF9kcGxsX3JlZl9zeW5jX3BhaXJzX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXFxuKyAqXFxuKyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcXG4rICovXFxuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxcbit6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xcbitcXG4rXFx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XFxuK1xcdGlmICghemxkcGxsKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHpsZHBsbC1cXHUwMDNlZGV2ID0gemxkZXY7XFxuK1xcdHpsZHBsbC1cXHUwMDNlaWQgPSBjaDtcXG4rXFx0emxkcGxsLVxcdTAwM2VwdHBfaW5mbyA9IHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbztcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucyk7XFxuK1xcbitcXHRyZXR1cm4gemxkcGxsO1xcbit9XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXFxuKyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbisgKlxcbisgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxcbisgKi9cXG4rdm9pZFxcbit6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3tcXG4rXFx0V0FSTih6bGRwbGwtXFx1MDAzZWRwbGxfZGV2LCBcXFwiRFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRrZnJlZSh6bGRwbGwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xcbiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG5AQCAtMjQyOCw2ICsyOTMwLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFx0fVxcbiBcXG4rXFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XFxuK1xcdFxcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yNDQxLDcgKzI5NTAsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiB2b2lkXFxuIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4ge1xcbi1cXHQvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovXFxuK1xcdHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiBcXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XFxuIFxcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxcbmluZGV4IGZhZWJjNDAyYmExYjcuLjk5MzIyMWRjNjMyNDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuQEAgLTUsNiArNSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZHBsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gXFxuQEAgLTIyLDYgKzIzLDggQEBcXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcXG4gICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXNcXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXFxuKyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxcbiAgKi9cXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRsaXN0O1xcbkBAIC0zNiw2ICszOSw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xcbiBcXHRlbnVtIGRwbGxfdHlwZVxcdFxcdFxcdHR5cGU7XFxuIFxcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1xcdFxcdGxvY2tfc3RhdHVzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0cGlucztcXG4rXFx0c3RydWN0IHB0cF9jbG9ja19pbmZvXFx0XFx0cHRwX2luZm87XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tcXHRcXHQqcHRwX2Nsb2NrO1xcbiB9O1xcbiBcXG4gc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXFxuaW5kZXggYjcwZWFkN2Q0NDk1Yi4uNDQ3NzU3ZTk5ODQ1ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5AQCAtMTc5LDYgKzE3OSwyMCBAQFxcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcXHRcXHRcXHRHRU5NQVNLKDIsIDApXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVxcdFxcdDRcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcXHRcXHRcXHRaTF9SRUcoNSwgMHgzMCwgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXFx0XFx0XFx0R0VOTUFTSygyLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcXHRcXHRcXHQ0XFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcXHRcXHRaTF9SRUcoNSwgMHgzMSwgMSlcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXFx0XFx0XFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXFx0MVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcXHQ4XFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcXHQ5XFxuK1xcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDUwLCAxKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlxcdFxcdEdFTk1BU0soNywgNClcXG5AQCAtMTkzLDYgKzIwNyw5IEBAXFxuIFxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxcbisgKlxcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcXG4gXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXFx0UzY0X01JTlxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgwQywgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgxMiwgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTgsIDQpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuQEAgLTIyMSw2ICsyNTYsOCBAQFxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXFx0XFx0R0VOTUFTSyg2LCA0KVxcbiBcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXFx0XFx0WkxfUkVHKDksIDB4MzYsIDIpXFxuK1xcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5AQCAtMzE2LDYgKzM1MywyNSBAQFxcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfRVNZTkNfV0lEVEhcXHRcXHRaTF9SRUcoMTQsIDB4MTgsIDQpXFxuICNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9DT01QXFx0XFx0WkxfUkVHKDE0LCAweDIwLCA0KVxcbiBcXG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuKyAqIFJlZ2lzdGVyIFBhZ2UgOSwgT3V0cHV0IFBoYXNlIFN0ZXBcXG4rICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFxcdFxcdFpMX1JFRyg5LCAweDM4LCAxKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFxcdFxcdEdFTk1BU0soNiwgNClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXFx0QklUKDMpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcXHQwXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFxcdDFcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcXHQyXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVxcdDNcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlxcdFxcdFpMX1JFRyg5LCAweDM5LCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDNhLCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVxcdFxcdFpMX1JFRyg5LCAweDNjLCA0KVxcbitcXG4gLypcXG4gICogUmVnaXN0ZXIgUGFnZSAyNTUgLSBIVyByZWdpc3RlcnMgYWNjZXNzXFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MjozNS4zNTkxNjI0MjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NDk4MzQ1ODQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgSTJDL1NQSSBjb25uZWN0ZWQgRFBMTCBkZXZpY2VzLiBTaW5jZSB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIHdpbGwgZmFpbCB0byByZWFkIHRoZSBleHBlY3RlZCBoYXJkd2FyZSBjaGlwIElEcywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjQyM2U1MGVjZDAwMWNkZTI4MzE4NDFjYzljYzE5MjQ3NjhjOTFhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDI6NTI6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xuaW5kZXggNWJiY2ExNDAwNTgxMy4uZGExNzMxYWNlMTVmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgKzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcIiBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuK1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0Ni4uNTMwMzJlNzgyZmQ0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5AQCAtMyw2ICszLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG5AQCAtMjAyLDYgKzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcbiBcdFx0emwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTtcbiBcbitcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcbitcdFx0XHQgICAgICBcdTAwMjZjaGFuLVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuIFxuIFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXG5AQCAtMjM0LDYgKzI0MCwzMDcgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuIFx0cmV0dXJuIFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKlxuKyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLFxuKyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGltZW91dDtcbitcdHU4IHRvZF9jdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXHUwMDI2dG9kX2N0cmwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4rXHRjYXNlIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaOlxuK1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfV1JfVElNRU9VVF9VUztcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHR0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUztcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcbitcbitcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXG4rICpcbisgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcbisgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuK3tcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4rXHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIHRoZSByZXN1bHRcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHQgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKVxuK3tcbitcdHUzMiBuc2VjO1xuK1x0dTY0IHNlYztcbitcdHU4IGNtZDtcbitcdGludCByYztcbitcbitcdGlmIChuZXh0X2h6KVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcbitcdGVsc2VcbitcdFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1x0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXHUwMDI2c2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0dHMtXHUwMDNldHZfc2VjID0gc2VjO1xuK1x0dHMtXHUwMDNldHZfbnNlYyA9IG5zZWM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF93cml0ZSAtIHdyaXRlIFRvRCByZWdpc3RlcnMgYW5kIHRyaWdnZXIgMSBIeiB1cGRhdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEB0czogdGltZSB0byBzZXRcbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cylcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCxcbitcdFx0XHRcdCAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxuKyAqXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxuKyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cbisgKiBJZiBsZXNzIHRoYW4gMjAgbXMgcmVtYWlucywgd2FpdHMgZm9yIHRoZSByb2xsb3ZlciBhbmQgaW5jcmVtZW50cyB0aGVcbisgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjay5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKVxuK3tcbitcdHN0YXRpYyBjb25zdCBsb25nIHRocmVzaG9sZF9ucyA9IDIwICogTlNFQ19QRVJfTVNFQztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcbitcdGludCByYztcbitcbitcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogUmVhZCBjdXJyZW50IFRvRCB0byBkZXRlcm1pbmUgcmVtYWluaW5nIG1hcmdpbiAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXHUwMDI2dHNfY3VyLCBOVUxMKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogSWYgdG9vIGNsb3NlIHRvIChvciBwYXN0KSB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQgKi9cbitcdGRpZmYgPSB0aW1lc3BlYzY0X3N1Yih0c19uZXh0LCB0c19jdXIpO1xuK1x0aWYgKGRpZmYudHZfc2VjIFx1MDAzYyAwIHx8ICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYyBcdTAwM2MgdGhyZXNob2xkX25zKSkge1xuK1x0XHRpZiAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMpXG4rXHRcdFx0ZnNsZWVwKCh1bnNpZ25lZCBsb25nKWRpZmYudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUMgKyAxKTtcbitcdFx0dHNfbmV4dC50dl9zZWMrKztcbitcdH1cbitcbitcdC8qIEFwcGx5IGRlbHRhIHRvIHRoZSBuZXh0LUh6IFRvRCAqL1xuK1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbitcdGlmICghdGltZXNwZWM2NF92YWxpZChcdTAwMjZ0c19uZXh0KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBXcml0ZSBhZGp1c3RlZCBUb0QgYmFjayBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQgLSB3cml0ZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGhhcmR3YXJlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IGluIDJeLTQ4IHN0ZXBzXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcbit7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuK1x0aWYgKCFyYylcbitcdFx0emxkZXYtXHUwMDNlY2hhbltjaF0uZGZfb2Zmc2V0ID0gb2Zmc2V0O1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAZGVsdGFfbnM6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICstMXMpXG4rICpcbisgKiBDb252ZXJ0cyBuYW5vc2Vjb25kcyB0byBUSUUgdW5pdHMgKDAuMDEgcHMpIGFuZCB3cml0ZXMgVElFIGRhdGFcbisgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpXG4re1xuK1x0czY0IHRpZV9kYXRhO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUSUUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbitcdFx0XHRcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4rXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLLCBCSVQoY2gpKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwIC0gZXhlY3V0ZSBvbmUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAb3V0X21hc2s6IGJpdG1hc2sgb2Ygb3V0cHV0cyB0byBzdGVwXG4rICogQHN0ZXBfY3ljbGVzOiBwaGFzZSBzdGVwIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlc1xuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuKyAqXG4rICogQWxsIG1hc2tlZCBvdXRwdXRzIG11c3QgdXNlIHN5bnRoZXNpemVycyBvZiB0aGUgc2FtZSBmcmVxdWVuY3kgc2luY2VcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXG4rXHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4re1xuK1x0dTggY3RybDtcbitcdGludCByYztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIHBoYXNlIHN0ZXAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCxcbitcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbitcdFx0XHRcdCAgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQSxcbitcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4rXHQgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7XG4rXHRpZiAodG9kX3N0ZXApXG4rXHRcdGN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDtcbitcbitcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5pbmRleCBkYzljNmQ5NWJkZWU3Li45ZGM1YTNmMTk5MWYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbkBAIC01LDEwICs1LDEyIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyZWdzLmhcIlxuIFxuK3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gXG4gLyoqXG5AQCAtMTYsNiArMTgsNyBAQCBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxuICAqIEBtb2RlX3JlZnNlbDogbW9kZSBhbmQgcmVmZXJlbmNlIHNlbGVjdGlvbiByZWdpc3RlciB2YWx1ZVxuICAqIEByZWZfcHJpbzogcmVmZXJlbmNlIHByaW9yaXR5IHJlZ2lzdGVycyAoNCBiaXRzIHBlciByZWYsIFAvTiBwYWNrZWQpXG4rICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrXG4gICogQG1vbl9zdGF0dXM6IG1vbml0b3Igc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXG4gICogQHJlZnNlbF9zdGF0dXM6IHJlZmVyZW5jZSBzZWxlY3Rpb24gc3RhdHVzIHJlZ2lzdGVyIHZhbHVlXG4gICogQGRmX29mZnNldDogZnJlcXVlbmN5IG9mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZSBpbiAyXi00OCBzdGVwc1xuQEAgLTI2LDYgKzI5LDkgQEAgc3RydWN0IHpsMzA3M3hfY2hhbiB7XG4gXHRcdHU4XHRtb2RlX3JlZnNlbDtcbiBcdFx0dThcdHJlZl9wcmlvW1pMMzA3M1hfTlVNX1JFRlMgLyAyXTtcbiBcdCk7XG4rXHRzdHJ1Y3RfZ3JvdXAoaW52LCAvKiBJbnZhcmlhbnRzICovXG4rXHRcdHUxNlx0b3V0X3N0ZXBfdGltZV9tYXNrO1xuK1x0KTtcbiBcdHN0cnVjdF9ncm91cChzdGF0LFxuIFx0XHR1OFx0bW9uX3N0YXR1cztcbiBcdFx0dThcdHJlZnNlbF9zdGF0dXM7XG5AQCAtNDIsNiArNDgsMjAgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXG4gaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV91cGRhdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xuIGludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBcbitpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4rXHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpO1xuK2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG4rXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMDAsNiArMjIwLDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9SRUZMT0NLO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXG4rICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuKyAqXG4rICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbit7XG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX21vZGVfaXNfYXV0byhjaGFuKSB8fFxuK1x0XHR6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNoYW4pO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMzMsNCArMjY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4gXHRyZXR1cm4gRklFTERfR0VUKFpMX0RQTExfUkVGU0VMX1NUQVRVU19SRUZTRUwsIGNoYW4tXHUwMDNlcmVmc2VsX3N0YXR1cyk7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbisgKiBAb3V0OiBvdXRwdXQgaW5kZXhcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBvdXRwdXQgaXMgYWZmZWN0ZWQgYnkgc3RlcC10aW1lIG9wZXJhdGlvbnNcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2xcbit6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggb3V0KVxuK3tcbitcdHJldHVybiAhIShjaGFuLVx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayBcdTAwMjYgQklUKG91dCkpO1xuK31cbitcbiAjZW5kaWYgLyogX1pMMzA3M1hfQ0hBTl9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5pbmRleCA3ZjVhZmFhYWU2MzQyLi5iMmY5ZmM5N2ZkMWI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0xMDMzLDYgKzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyLi4yZGM4MzZkMGM4ZjZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xuICNkZWZpbmUgWkxfUE9MTF9IV1JFR19USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXHRcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXHQoNTAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVElFX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcdCgzMCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiArNTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8ge1xuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xuICAqIEBpbmZvOiBkZXRlY3RlZCBjaGlwIGluZm9cbiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9uc1xuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXG4rICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJyBpbnZhcmlhbnRzXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xuICAqIEBzeW50aDogYXJyYXkgb2Ygc3ludGhzJyBpbnZhcmlhbnRzXG5AQCAtNzEsNiArNzcsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYge1xuIFx0c3RydWN0IHJlZ21hcFx0XHRcdCpyZWdtYXA7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cdCppbmZvO1xuIFx0c3RydWN0IG11dGV4XHRcdFx0bXVsdGlvcF9sb2NrO1xuK1x0c3RydWN0IG11dGV4XHRcdFx0dGllX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLjMyMDg1MmRmYzU4Y2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTIsNiArMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbkBAIC0xMyw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtNDEsNiArNDMsNyBAQFxuICAqIEBwaGFzZV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgcGluIHBoYXNlIG9mZnNldFxuICAqIEBmcmVxX29mZnNldDogbGFzdCBzYXZlZCBmcmFjdGlvbmFsIGZyZXF1ZW5jeSBvZmZzZXRcbiAgKiBAbWVhc3VyZWRfZnJlcTogbGFzdCBzYXZlZCBtZWFzdXJlZCBmcmVxdWVuY3lcbisgKiBAcGVyb3V0X2lkeDogUFRQIHBlcm91dCBjaGFubmVsIGluZGV4LCBvciAtMSBpZiBub3QgcGVyb3V0LWVsaWdpYmxlXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbkBAIC01OCw2ICs2MSw3IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcbiBcdHM2NFx0XHRcdHBoYXNlX29mZnNldDtcbiBcdHM2NFx0XHRcdGZyZXFfb2Zmc2V0O1xuIFx0dTMyXHRcdFx0bWVhc3VyZWRfZnJlcTtcbitcdHM4XHRcdFx0cGVyb3V0X2lkeDtcbiB9O1xuIFxuIC8qXG5AQCAtOTM1LDIxICs5MzksMTcgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIH1cbiBcbiBzdGF0aWMgaW50XG4temwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuLVx0XHRcdFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXG4tXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tXHRcdFx0XHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4rX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcbitcdFx0XHRcdFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcbitcdFx0XHRcdFx0dTY0IGZyZXF1ZW5jeSlcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG4gXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcbiBcdHUzMiBuZXdfZGl2LCBzeW50aF9mcmVxO1xuIFx0c3RydWN0IHpsMzA3M3hfb3V0IG91dDtcbiBcdHU4IG91dF9pZDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbiBcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4gXHRvdXQgPSAqemwzMDczeF9vdXRfc3RhdGVfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuQEAgLTEwMTAsNiArMTAxMCwyMSBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXHRyZXR1cm4gemwzMDczeF9vdXRfc3RhdGVfc2V0KHpsZGV2LCBvdXRfaWQsIFx1MDAyNm91dCk7XG4gfVxuIFxuK3N0YXRpYyBpbnRcbit6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4rXHRcdFx0XHQgICAgICB2b2lkICpwaW5fcHJpdixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbitcdFx0XHRcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbl9wcml2LFxuK1x0XHRcdFx0XHRcdCAgICAgICBmcmVxdWVuY3kpO1xuK31cbitcbiBzdGF0aWMgaW50XG4gemwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIFx0XHRcdFx0XHQgdm9pZCAqcGluX3ByaXYsXG5AQCAtMTYwNyw2ICsxNjIyLDcgQEAgemwzMDczeF9kcGxsX3Bpbl9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcixcbiBcdHBpbi1cdTAwM2VkcGxsID0gemxkcGxsO1xuIFx0cGluLVx1MDAzZWRpciA9IGRpcjtcbiBcdHBpbi1cdTAwM2VpZCA9IGlkO1xuK1x0cGluLVx1MDAzZXBlcm91dF9pZHggPSAtMTtcbiBcbiBcdHJldHVybiBwaW47XG4gfVxuQEAgLTE2MjUsNiArMTY0MSw0NCBAQCB6bDMwNzN4X2RwbGxfcGluX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbilcbiBcdGtmcmVlKHBpbik7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0IC0gY2hlY2sgaWYgb3V0cHV0IHBpbiBpcyBwZXJvdXQtZWxpZ2libGVcbisgKiBAcGluOiBEUExMIHBpbiB0byBjaGVja1xuKyAqIEBwcm9wczogcGluIHByb3BlcnRpZXMgKGFscmVhZHkgZmV0Y2hlZCBieSBjYWxsZXIpXG4rICpcbisgKiBBbiBvdXRwdXQgcGluIGlzIGVsaWdpYmxlIGZvciBQVFAgcGVyaW9kaWMgb3V0cHV0IGlmIGl0IGlzIHNpbmdsZS1lbmRlZFxuKyAqIChub3QgZGlmZmVyZW50aWFsKSBhbmQgc3VwcG9ydHMgMSBIeiBpbiBpdHMgZnJlcXVlbmN5IGxpc3QuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgZWxpZ2libGUsIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBib29sXG4remwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcbitcdFx0XHQgICBjb25zdCBzdHJ1Y3QgemwzMDczeF9waW5fcHJvcHMgKnByb3BzKVxuK3tcbitcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IHBpbi1cdTAwM2VkcGxsO1xuK1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbitcdHU4IG91dF9pZDtcbitcdGludCBpO1xuK1xuK1x0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbitcdGlmICh6bDMwNzN4X2Rldl9vdXRfaXNfZGlmZih6bGRwbGwtXHUwMDNlZGV2LCBvdXRfaWQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1x0aWYgKCF6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY2hhbiwgb3V0X2lkKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvcHMtXHUwMDNlZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZF9udW07IGkrKykge1xuK1x0XHRpZiAocHJvcHMtXHUwMDNlZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZFtpXS5taW4gPT0gMSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgcGluXG4gICogQHBpbjogcG9pbnRlciB0byBEUExMIHBpblxuQEAgLTE2NjYsNiArMTcyMCw4IEBAIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwgdTMyIGluZGV4KVxuIFx0XHRpZiAocGluLVx1MDAzZXByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKVxuIFx0XHRcdC8qIENsYW1wIHByaW8gdG8gbWF4IHZhbHVlICovXG4gXHRcdFx0cGluLVx1MDAzZXByaW8gPSBaTF9EUExMX1JFRl9QUklPX01BWDtcbitcdH0gZWxzZSBpZiAoemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQocGluLCBwcm9wcykpIHtcbitcdFx0cGluLVx1MDAzZXBlcm91dF9pZHggPSB6bGRwbGwtXHUwMDNlcHRwX2luZm8ubl9wZXJfb3V0Kys7XG4gXHR9XG4gXG4gXHQvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovXG5AQCAtMTg5Niw2ICsxOTUyLDggQEAgemwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0dTggaWQsIGluZGV4O1xuIFx0aW50IHJjO1xuIFxuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCA9IDA7XG4rXG4gXHQvKiBQcm9jZXNzIGlucHV0IHBpbnMgKi9cbiBcdGZvciAoaW5kZXggPSAwOyBpbmRleCBcdTAwM2MgWkwzMDczWF9OVU1fUElOUzsgaW5kZXgrKykge1xuIFx0XHQvKiBGaXJzdCBpbnB1dCBwaW5zIGFuZCB0aGVuIG91dHB1dCBwaW5zICovXG5AQCAtMjI3NSw0NSArMjMzMyw0NDcgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiBcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfU1lOVEhfUEhBU0VfU0hJRlRfQ1RSTCwgMHgwMSk7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4rICpcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGVcbisgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBubyBzeW50aHMgYXZhaWxhYmxlLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4rXHRcdFx0XHRcdCAgICAgICBzNjQgZGVsdGEpXG4re1xuK1x0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1xuK1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuK1x0XHR1OCBvdXRfaWQsIHN5bnRoX2lkO1xuK1xuK1x0XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuK1xuK1x0XHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4rXHRcdGlmIChzeW50aF9pZCBcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xuK1x0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldiwgXCJVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwiLFxuK1x0XHRcdFx0IG91dF9pZCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XG4rXHR9XG4rXG4rXHQvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSsrKSB7XG4rXHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuK1x0XHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcbitcdFx0ICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC1cdTAwM2VpZClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpO1xuK1xuK1x0XHQvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbitcdFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuK1x0XHRcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xuK1xuK1x0XHRpZiAoIXN5bnRoX21hc2tbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xuK1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHRcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXG4rXHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0aWYgKHRvZF9zdGVwcGVkKSB7XG4rXHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCBcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0fVxuK1x0XHRcdHJldHVybiByYztcbitcdFx0fVxuK1x0XHR0b2Rfc3RlcHBlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxuK1x0ICogbG93ZXN0LUlEIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS5cbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoYWJzKGRlbHRhKSBcdTAwM2U9IE5TRUNfUEVSX1NFQykge1xuK1x0XHRzMzIgcmVtYWluZGVyO1xuK1xuK1x0XHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcdTAwMjZyZW1haW5kZXIpO1xuK1x0XHR0cy50dl9uc2VjID0gMDtcbitcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgdHMpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1xuK1x0XHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xuK1x0XHRpZiAoIWRlbHRhKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24ndCBzdXBwb3J0IFRJRSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluIC0gZmluZCBwaW4gYnkgcGVyb3V0IGNoYW5uZWwgaW5kZXhcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbisgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmRcbisgKi9cbitzdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKlxuK3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4rXHRcdGlmIChwaW4tXHUwMDNlcGVyb3V0X2lkeCA9PSBpZHgpXG4rXHRcdFx0cmV0dXJuIHBpbjtcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnNcbisgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXG4rICpcbisgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLlxuKyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xuKyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1x0dW5zaWduZWQgaW50IGlkeDtcbitcdGludCByYztcbitcbitcdGlmIChycS1cdTAwM2V0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWR4ID0gcnEtXHUwMDNlcGVyb3V0LmluZGV4O1xuK1x0aWYgKGlkeCBcdTAwM2U9IGluZm8tXHUwMDNlbl9wZXJfb3V0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXG4rXHQgKiBpcyBhIG5vLW9wLlxuK1x0ICovXG4rXHRpZiAoIW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXG4rXHRpZiAocnEtXHUwMDNlcGVyb3V0LnBlcmlvZC5zZWMgIT0gMSB8fCBycS1cdTAwM2VwZXJvdXQucGVyaW9kLm5zZWMgIT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcbitcdGlmICghcGluKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXG4rXHRpZiAoemwzMDczeF9kZXZfb3V0cHV0X3Bpbl9mcmVxX2dldCh6bGRwbGwtXHUwMDNlZGV2LCBwaW4tXHUwMDNlaWQpID09IDEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKCFyYylcbitcdFx0ZHBsbF9waW5fY2hhbmdlX250ZihwaW4tXHUwMDNlZHBsbF9waW4pO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuK1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuK1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbitcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbitcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbitcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuK1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4rXHQuZW5hYmxlXHRcdD0gemwzMDczeF9kcGxsX3B0cF9lbmFibGUsXG4rfTtcbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XG4rXG4rXHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbitcdFx0IFwiemwzMDczeC1kcGxsJXVcIiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTIzOTgsNiArMjg1OCw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQyOCw2ICsyOTMwLDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQxLDcgKzI5NTAsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3Li45OTMyMjFkYzYzMjQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbkBAIC01LDYgKzUsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyMyw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArMzksOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViLi40NDc3NTdlOTk4NDVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiArMTc5LDIwIEBAXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EXHRcdFx0R0VOTUFTSygyLCAwKVxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVx0XHQ0XG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTFx0XHRcdFpMX1JFRyg1LCAweDMwLCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcdFx0XHQ0XG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSlcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfU0VNXHRcdFx0QklUKDQpXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRFx0XHRcdEdFTk1BU0soMywgMClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXHQxXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UXHQ4XG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWlx0OVxuK1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgKzIwNyw5IEBAXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxuKyAqXG4rICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcdFx0XHRcdFx0XFxcbkBAIC0yMDIsNiArMjE5LDI0IEBAXG4gXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfREZfT0ZGU0VUXzQpXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXHRTNjRfTUlOXG4gXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNFx0XHRcdFpMX1JFRyg3LCAweDBDLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTIsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcdFx0XHRaTF9SRUcoNywgMHgxMiwgNilcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX1NFQ180KVxuK1xuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MTgsIDQsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfNFx0XHRcdFpMX1JFRyg3LCAweDE4LCA0KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVE9EX05TXzQpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSA5LCBTeW50aCBhbmQgT3V0cHV0XG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTIyMSw2ICsyNTYsOCBAQFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFx0XHRHRU5NQVNLKDYsIDQpXG4gXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXHRcdFpMX1JFRyg5LCAweDM2LCAyKVxuK1xuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZSAxMCwgUmVmIE1haWxib3hcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBAIC0zMTYsNiArMzUzLDI1IEBAXG4gI2RlZmluZSBaTF9SRUdfT1VUUFVUX0VTWU5DX1dJRFRIXHRcdFpMX1JFRygxNCwgMHgxOCwgNClcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfQ09NUFx0XHRaTF9SRUcoMTQsIDB4MjAsIDQpXG4gXG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4rICogUmVnaXN0ZXIgUGFnZSA5LCBPdXRwdXQgUGhhc2UgU3RlcFxuKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMXHRcdFpMX1JFRyg5LCAweDM4LCAxKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVBcdEJJVCgzKVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVRcdDFcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVBRFx0MlxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlx0XHRaTF9SRUcoOSwgMHgzOSwgMSlcbitcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLXHRcdFpMX1JFRyg5LCAweDNhLCAyKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4rXG4gLypcbiAgKiBSZWdpc3RlciBQYWdlIDI1NSAtIEhXIHJlZ2lzdGVycyBhY2Nlc3NcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUyOjM1LjM1OTE2MzYxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2Njk3MDg1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFBUUCBDbG9jayBQYXRjaCBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgUFRQIGNsb2NrIHN1cHBvcnQgZm9yIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoYGRyaXZlcnMvZHBsbC96bDMwNzN4L2ApLiBJdCBsb29rcyBzb2xpZDogYWRkcyB0aGUgYFBUUF8xNTg4X0NMT0NLYCBkZXBlbmRlbmN5IGluIGBLY29uZmlnYCwgdGhlIG5lY2Vzc2FyeSBUb0QgZnVuY3Rpb25zLCBwaGFzZS9mcmVxdWVuY3kgYWRqdXN0bWVudCwgYW5kIGhhbmRsZXMgdGhlIDFQUFMuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZSBQVFAgY2xvY2sgdmlhIGBwdHBfY2xvY2tfcmVnaXN0ZXJgIHNvIG5vdyB0aGUgcXVlc3Rpb24gaXMgY2FuIEkgcmVhY2ggaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgc3l6a2FsbGVyIGNhbiByZWFjaCBpdC4gVGhlIGRyaXZlciB0YXJnZXRzIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY29ubmVjdGVkIHZpYSBJMkMgb3IgU1BJLiBMb29raW5nIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIHRoZSBkcml2ZXIsIGl0IGNvbmZpcm1zIGBaTDMwNzNYX0kyQ2AgYW5kIGBaTDMwNzNYX1NQSWAgYXMgb3B0aW9ucy4gTm93LCBJIGtub3cgSTJDIGFuZCBTUEkgZGV2aWNlcyBhcmUgYSBmcmVxdWVudCB0YXJnZXQgZm9yIHN5emthbGxlci5cblxuSSByZW1lbWJlciBzeXprYWxsZXIgY2FuIG9mdGVuIGhhbmRsZSB0aGVzZSB2aWEgcHNldWRvLXN5c2NhbGxzIG9yIGJ5IGluamVjdGluZyBJMkMvU1BJIHRyYWZmaWMuIEhvd2V2ZXIsIEknbSB0aGlua2luZyBhYm91dCB0aGUgZ2VuZXJpYyBkZXZpY2UgaW5zdGFudGlhdGlvbi4gU3l6a2FsbGVyIHVzdWFsbHkgaXNuJ3QgZ3JlYXQgYXQgaW5zdGFudGlhdGluZyAqYXJiaXRyYXJ5KiBJMkMvU1BJIGRldmljZXMgdW5sZXNzIHRoZXkncmUgZXhwbGljaXRseSBkZXNjcmliZWQgaW4gYSBzeXogZGVzY3JpcHRpb24sIG9yIGlmIHRoZXkncmUgaGFuZGxlZCB2aWEgZGV2aWNlIHRyZWUgb3Igc3lzZnMuIFdhaXQsIGRpZG4ndCBJIGNvbWUgYWNyb3NzIGEgd2F5IHRvIGRvIHRoYXQgaW4gdGhlIHBhc3QuLi4gQWggeWVzLCBJIGNhbiBpbnN0YW50aWF0ZSBJMkMgZGV2aWNlcyB2aWEgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2VgIG9yIHNpbWlsYXIsIG9yIHBvdGVudGlhbGx5IHZpYSBuZXRsaW5rIGlmIGl0J3MgYSBuZXQgZGV2aWNlLiBUaGlzIGlzIGEgRFBMTCBkZXZpY2UgdGhvdWdoLiBTbyBpdCB3aWxsIG5lZWQgdG8gYmUgcHJvYmVkIHZpYSBJMkMuXG5cblRoaW5raW5nIG1vcmUgYWJvdXQgdGhpcywgSSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgRFBMTCBzdWJzeXN0ZW0gdmlhIG5ldGxpbmsgKEdlbmVyaWMgTmV0bGluayBgZHBsbGApLiBUaGUgdHJpY2t5IHBhcnQgaXMgdGhlIGRldmljZSBpdHNlbGYg4oCTIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgcHJvYmUgdGhpcyBJMkMvU1BJIGRldmljZT8gRG9lcyBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X2kyY19zZXR1cGA/IE5vLCB0aGF0IGxvb2tzIGxpa2UgaXQncyB1c2VkIGZvciBzZXR1cCBwdXJwb3NlcywgSSBoYXZlIHRvIGZpbmQgYSB3YXkgdG8gbWFrZSB0aGUgZHJpdmVyIHByb2JlIHRoZSBkZXZpY2UuIEl0IGhhcyBgaTJjLWRldmAsIHdoaWNoIHByb3ZpZGVzIGEgdXNlci1zcGFjZSBpbnRlcmZhY2UgdG8gYW4gSTJDIGJ1cywgYnV0IGl0IGRvZXNuJ3QgcHJvYmUgdGhlIGtlcm5lbCBkcml2ZXIuXG5cbk9rYXksIHdhaXQgYSBzZWNvbmQuIEkgcmVtZW1iZXIgbm93OiBzeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIGJ5IHdyaXRpbmcgdG8gYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0lZC9uZXdfZGV2aWNlYC4gVGhhdCBjb3VsZCBiZSB0aGUga2V5ISBJIHNob3VsZCBjaGVjayB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBhbHJlYWR5IGF2YWlsYWJsZSBmb3IgRFBMTCBvciBJMkMgaW5zdGFudGlhdGlvbi4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNjEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1Mjo0My4wMjg4NzQ5NjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MjI5Mzc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bDMwNzN4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNDYwMSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0PTc3PXBhcmFtZXRlcnMsIGluZm8gdmVyc2lvbnMsIGFuZCBvdGhlciBmZWF0dXJlcyBpdCBzdXBwb3J0cy5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdC0xMDQtICAgdGktY3Bzdy1zd2l0Y2hcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3Q6MTA1OiAgIHpsMzA3M3hcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTMtPT09PT09PT09PT09PT09PT09PT09PT1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdDo0OnpsMzA3M3ggZGV2bGluayBzdXBwb3J0XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3QtNS09PT09PT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTYtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q6NzpUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGV2bGluayBmZWF0dXJlcyBpbXBsZW1lbnRlZCBieSB0aGUgYGB6bDMwNzN4YGBcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdC04LWRldmljZSBkcml2ZXIuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdD0yND1JbmZvIHZlcnNpb25zXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdC0yNi1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdDoyNzpUaGUgYGB6bDMwNzN4YGAgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyB2ZXJzaW9uc1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTI4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvemwzMDczeC5yc3Q9NTM9Rmxhc2ggVXBkYXRlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdC01NS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay96bDMwNzN4LnJzdDo1NjpUaGUgYGB6bDMwNzN4YGAgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgZmxhc2ggdXBkYXRlIHVzaW5nIHRoZVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3psMzA3M3gucnN0LTU3LWBgZGV2bGluay1mbGFzaGBgIGludGVyZmFjZS4gSXQgc3VwcG9ydHMgdXBkYXRpbmcgdGhlIGRldmljZSBmbGFzaCB1c2luZyBhXFxuLS1cXG5NQUlOVEFJTkVSUz0xNzg2MD1GOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kcGxsL21pY3JvY2hpcCx6bDMwNzMxLnlhbWxcXG5NQUlOVEFJTkVSUzoxNzg2MTpGOlxcdGRyaXZlcnMvZHBsbC96bDMwNzN4L1xcbk1BSU5UQUlORVJTLTE3ODYyLVxcbi0tXFxuZHJpdmVycy9kcGxsL0tjb25maWc9MTE9Y29uZmlnIERQTExfUkVGQ05UX1RSQUNLRVJcXG4tLVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTI1LVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnOjI2OnNvdXJjZSBcXFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2RwbGwvS2NvbmZpZy0yNy1cXG4tLVxcbmRyaXZlcnMvZHBsbC9NYWtlZmlsZT05PWRwbGwteSAgICAgICAgICAgICAgICAgICs9IGRwbGxfbmwub1xcbmRyaXZlcnMvZHBsbC9NYWtlZmlsZS0xMC1cXG5kcml2ZXJzL2RwbGwvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1pMMzA3M1gpXFx0Kz0gemwzMDczeC9cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mz1jb25maWcgWkwzMDczWFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZy0xNC1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnOjE1OlxcdCAgd2lsbCBiZSBjYWxsZWQgemwzMDczeC5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9MTc9Y29uZmlnIFpMMzA3M1hfSTJDXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTI2LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzoyNzpcXHQgIGJlIGNhbGxlZCB6bDMwNzN4X2kyYy5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTI4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc9Mjk9Y29uZmlnIFpMMzA3M1hfU1BJXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTM4LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzozOTpcXHQgIGJlIGNhbGxlZCB6bDMwNzN4X3NwaS5cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTItXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfWkwzMDczWClcXHRcXHQrPSB6bDMwNzN4Lm9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZTo0OnpsMzA3M3gtb2Jqc1xcdFxcdFxcdDo9IGNoYW4ubyBjb3JlLm8gZGV2bGluay5vIGRwbGwub1xcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZS01LVxcdFxcdFxcdFxcdCAgIGZsYXNoLm8gZncubyBvdXQubyBwcm9wLm8gcmVmLm8gc3ludGgub1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlLTYtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfWkwzMDczWF9JMkMpXFx0Kz0gemwzMDczeF9pMmMub1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjg6emwzMDczeF9pMmMtb2Jqc1xcdFxcdDo9IGkyYy5vXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvTWFrZWZpbGUtOS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfWkwzMDczWF9TUEkpXFx0Kz0gemwzMDczeF9zcGkub1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L01ha2VmaWxlOjExOnpsMzA3M3hfc3BpLW9ianNcXHRcXHQ6PSBzcGkub1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNDogKiB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlIC0gdXBkYXRlIERQTEwgY2hhbm5lbCBzdGF0dXMgZnJvbSBIV1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE2LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTktICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwOmludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIyOlxcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMy1cXHR1NjQgdmFsO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9OX1NUQVRVUyhpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3LVxcdFxcdFxcdCAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZW1vbl9zdGF0dXMpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMTpcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfUkVGU0VMX1NUQVRVUyhpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyLVxcdFxcdFxcdCAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZXJlZnNlbF9zdGF0dXMpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4LVxcdCAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozOTpcXHRpZiAoIXpsMzA3M3hfY2hhbl9pc19sb2NrZWQoY2hhbikpIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDA6XFx0XFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQxLVxcdFxcdFxcdGNoYW4tXFx1MDAzZWRmX29mZnNldCA9IFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV047XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1OlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX0RGX1JFQUQoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00Ni1cXHRcXHRcXHRcXHQgIFpMX0RQTExfREZfUkVBRF9TRU0sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUxOlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfREZfUkVBRChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyLVxcdFxcdFxcdCAgICAgIFpMX0RQTExfREZfUkVBRF9TRU0gfCBaTF9EUExMX0RGX1JFQURfUkVGX09GU1QpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1NjpcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTctXFx0XFx0XFx0XFx0ICBaTF9EUExMX0RGX1JFQURfU0VNLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChpbmRleCksIFxcdTAwMjZ2YWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02My1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzEtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjcyOiAqIHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQgLSBzd2l0Y2ggRFBMTCBjaGFubmVsIHRvIE5DTyBtb2RlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjczOiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNzQtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04Mi0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6ODM6aW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg0LXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6ODU6XFx0c3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiA9IFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTg2LVxcdHU4IHByZXZfbW9kZSwgZGZfcmVhZDtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy04OS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6OTA6XFx0cHJldl9tb2RlID0gemwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05MS1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy05Ni1cXHRpZiAocHJldl9tb2RlID09IFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9GUkVFUlVOKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjk3OlxcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBaTF9EUExMX01PREVfUkVGU0VMX01PREVfTkNPKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtOTgtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjk5OlxcdFxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMDAtXFx0XFx0XFx0XFx0ICAgICAgY2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMDEtXFx0XFx0aWYgKHJjKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjEwMjpcXHRcXHRcXHR6bDMwNzN4X2NoYW5fbW9kZV9zZXQoY2hhbiwgcHJldl9tb2RlKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTAzLVxcdFxcdFxcdHJldHVybiByYztcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMjAtXFx0XFx0ICBGSUVMRF9QUkVQKFpMX0RQTExfREZfUkVBRF9DTUQsIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0kpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMjE6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9SRUFEKGluZGV4KSwgZGZfcmVhZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEyMi1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTMwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzE6XFx0emwzMDczeF9jaGFuX21vZGVfc2V0KGNoYW4sIFpMX0RQTExfTU9ERV9SRUZTRUxfTU9ERV9OQ08pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxMzI6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9NT0RFX1JFRlNFTChpbmRleCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzMy1cXHRcXHRcXHQgICAgICBjaGFuLVxcdTAwM2Vtb2RlX3JlZnNlbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTEzNC1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTM1OlxcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX3NldChjaGFuLCBwcmV2X21vZGUpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xMzYtXFx0XFx0cmV0dXJuIHJjO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE0Ny1cXHQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTQ4OlxcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGluZGV4KSwgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE0OS1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNjEtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE2MjogKiB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2ggLSBmZXRjaCBEUExMIGNoYW5uZWwgc3RhdGUgZnJvbSBoYXJkd2FyZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNjM6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3hfZGV2IHN0cnVjdHVyZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNjQtICogQGluZGV4OiBEUExMIGNoYW5uZWwgaW5kZXggdG8gZmV0Y2ggc3RhdGUgZm9yXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTcwLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxNzE6aW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTcyLXtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTczOlxcdHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4gPSBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzQtXFx0aW50IHJjLCBpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE3NjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfQ1RSTChpbmRleCksIFxcdTAwMjZjaGFuLVxcdTAwM2VjdHJsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMTc3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xNzktXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjE4MDpcXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODEtXFx0XFx0XFx0ICAgICBcXHUwMDI2Y2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4NS1cXHRkZXZfZGJnKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJEUExMJXUgbW9kZTogJXUsIHJlZjogJXVcXFxcblxcXCIsIGluZGV4LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoxODY6XFx0XFx0emwzMDczeF9jaGFuX21vZGVfZ2V0KGNoYW4pLCB6bDMwNzN4X2NoYW5fcmVmX2dldChjaGFuKSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE4Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTg4OlxcdHJjID0gemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZSh6bGRldiwgaW5kZXgpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0xODktXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5NS1cXHQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MTk2OlxcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTE5Ny1cXHRcXHRjaGFuLVxcdTAwM2VkZl9vZmZzZXQgPSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwMC1cXHRcXHRcXFwiRFBMTCV1IGxvY2tfc3RhdGU6ICV1LCBobzogJXUsIHNlbF9zdGF0ZTogJXUsIHNlbF9yZWY6ICV1XFxcXG5cXFwiLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDE6XFx0XFx0aW5kZXgsIHpsMzA3M3hfY2hhbl9sb2NrX3N0YXRlX2dldChjaGFuKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjAyOlxcdFxcdHpsMzA3M3hfY2hhbl9pc19ob19yZWFkeShjaGFuKSA/IDEgOiAwLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMDM6XFx0XFx0emwzMDczeF9jaGFuX3JlZnNlbF9zdGF0ZV9nZXQoY2hhbiksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwNDpcXHRcXHR6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY2hhbikpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMDUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIwNjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwNy1cXHRcXHRcXHQgICAgICBcXHUwMDI2Y2hhbi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMTMtXFx0LyogUmVhZCBEUExMIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWlsYm94ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIxNDpcXHRyYyA9IHpsMzA3M3hfbWJfb3AoemxkZXYsIFpMX1JFR19EUExMX01CX1NFTSwgWkxfRFBMTF9NQl9TRU1fUkQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIxNS1cXHRcXHRcXHQgICBaTF9SRUdfRFBMTF9NQl9NQVNLLCBCSVQoaW5kZXgpKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMjAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoY2hhbi1cXHUwMDNlcmVmX3ByaW8pOyBpKyspIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjIxOlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9SRUZfUFJJTyhpKSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjIyLVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZXJlZl9wcmlvW2ldKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzAtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzMTogKiB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0IC0gZ2V0IGN1cnJlbnQgRFBMTCBjaGFubmVsIHN0YXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjIzMjogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIzMy0gKiBAaW5kZXg6IERQTEwgY2hhbm5lbCBpbmRleCB0byBnZXQgc3RhdGUgZm9yXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjM2LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyMzc6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yMzgtXFx0XFx0XFx0XFx0XFx0XFx0ICB1OCBpbmRleClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNDMtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0NDogKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQgLSB3YWl0IGZvciBUb0Qgc2VtYXBob3JlIHRvIGNsZWFyXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI0NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjQ2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjUyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNTM6c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI1NC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjU4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyNTk6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXFx1MDAyNnRvZF9jdHJsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjYwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzEtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI3MjpcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI3My1cXHRcXHRcXHRcXHQgIFpMX0RQTExfVE9EX0NUUkxfU0VNLCB0aW1lb3V0KTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yNzgtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI3OTogKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyODA6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI4MS0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI4OS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjkwOnN0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5MS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjI5MjpcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0yOTMtXFx0XFx0XFx0XFx0WkxfRFBMTF9UT0RfQ1RSTF9TRU0gfCBjbWQpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5Ni0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mjk3OiAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzoyOTg6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTI5OS0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMwMy0gKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMDQ6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzA1LSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDYtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjMwNzppbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMDgtXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjEtXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzIyOlxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMyMy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzI2LVxcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMjc6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zMjgtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzMxOlxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzMi1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzM1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozMzY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXFx1MDAyNnNlYyk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTMzNy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzQwLVxcdC8qIEhXIG5hbm9zZWNvbmRzIGFyZSBhbHdheXMgaW4gWzAsIE5TRUNfUEVSX1NFQykgcmFuZ2UgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzQxOlxcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgXFx1MDAyNm5zZWMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNDItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1MS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzUyOiAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM1MzogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU0LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzU2LSAqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM1NzogKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNTgtICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM1OS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzYwOmludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjEtXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzY1LVxcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM2NjpcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNjctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM2OS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MzcwOlxcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCB0cy50dl9zZWMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzEtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc0OlxcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzUtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM3Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6Mzc4OlxcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zNzktXFx0XFx0XFx0XFx0ICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zODItLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM4MzogKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozODQ6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM4NS0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5Mi0gKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzozOTM6ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMzk0LSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy0zOTUtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjM5NjppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTM5Ny1cXHRcXHRcXHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDAzLVxcdC8qIFJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHogdGljayAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MDQ6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcXHUwMDI2dHNfbmV4dCwgTlVMTCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQwNS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDA4LVxcdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDA5OlxcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsIFxcdTAwMjZ0c19jdXIsIE5VTEwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MTAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQyNi1cXHQvKiBXcml0ZSBhZGp1c3RlZCBUb0QgYmFjayBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0Mjc6XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQyOC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDMwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MzE6XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00MzItfVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzNC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDM1OiAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0MzY6ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQzNy0gKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ0MS0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDQyOmludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDQzLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NDUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ0NjpcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NDctXFx0aWYgKCFyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NTMtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1NDogKiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlIC0gYWRqdXN0IERQTEwgcGhhc2UgdXNpbmcgVElFIHdyaXRlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjQ1NTogKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDU2LSAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDYzLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0NjQ6aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDY1LXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NzEtXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDcyOlxcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00NzMtXFx0XFx0XFx0XFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4MC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDgxOlxcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00ODItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4NC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDg1OlxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTQ4Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDg4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0ODk6XFx0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTAtXFx0XFx0XFx0XFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNDkzLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo0OTQ6ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NDk1OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy00OTYtICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01MDUtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjUwNjppbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUwNy1cXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTE1LVxcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MTY6XFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUxNy1cXHRcXHRcXHRcXHQgIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTIxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MjI6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyMy1cXHRcXHRcXHQgICAgICAgc3RlcF9jeWNsZXMpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyNi1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTI3OlxcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTUyOC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTMwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo1MzE6XFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSLCAxKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTMyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU0MTpcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NDItfVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU0NC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQ1OiAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTQ2OiAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTQ3LSAqIEBpbmRleDogRFBMTCBjaGFubmVsIGluZGV4IHRvIHNldCBzdGF0ZSBmb3JcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NTYtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU1NzppbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTU4OlxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU1OS17XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2MDpcXHRzdHJ1Y3QgemwzMDczeF9jaGFuICpkY2hhbiA9IFxcdTAwMjZ6bGRldi1cXHUwMDNlY2hhbltpbmRleF07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU2MS1cXHRpbnQgcmMsIGk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTY4LVxcdGlmIChkY2hhbi1cXHUwMDNlY3RybCAhPSBjaGFuLVxcdTAwM2VjdHJsKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjU2OTpcXHRcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX0NUUkwoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzAtXFx0XFx0XFx0XFx0ICAgICAgY2hhbi1cXHUwMDNlY3RybCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTc2LVxcdGlmIChkY2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwgIT0gY2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwpIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTc3OlxcdFxcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoaW5kZXgpLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy01NzgtXFx0XFx0XFx0XFx0ICAgICAgY2hhbi1cXHUwMDNlbW9kZV9yZWZzZWwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTU5Mi1cXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBpbnRvIG1haWxib3ggKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6NTkzOlxcdHJjID0gemwzMDczeF9tYl9vcCh6bGRldiwgWkxfUkVHX0RQTExfTUJfU0VNLCBaTF9EUExMX01CX1NFTV9SRCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtNTk0LVxcdFxcdFxcdCAgIFpMX1JFR19EUExMX01CX01BU0ssIEJJVChpbmRleCkpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwMC1cXHRcXHRpZiAoZGNoYW4tXFx1MDAzZXJlZl9wcmlvW2ldICE9IGNoYW4tXFx1MDAzZXJlZl9wcmlvW2ldKSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jOjYwMTpcXHRcXHRcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTYwMi1cXHRcXHRcXHRcXHRcXHQgICAgICBaTF9SRUdfRFBMTF9SRUZfUFJJTyhpKSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MDktXFx0LyogQ29tbWl0IERQTEwgY29uZmlndXJhdGlvbiAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYzo2MTA6XFx0cmMgPSB6bDMwNzN4X21iX29wKHpsZGV2LCBaTF9SRUdfRFBMTF9NQl9TRU0sIFpMX0RQTExfTUJfU0VNX1dSLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYy02MTEtXFx0XFx0XFx0ICAgWkxfUkVHX0RQTExfTUJfTUFTSywgQklUKGluZGV4KSk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTM9c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxNDpzdHJ1Y3QgemwzMDczeF9kZXY7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTE1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xNi0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTc6ICogc3RydWN0IHpsMzA3M3hfY2hhbiAtIERQTEwgY2hhbm5lbCBzdGF0ZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xOC0gKiBAY3RybDogRFBMTCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMjUtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjI2OnN0cnVjdCB6bDMwNzN4X2NoYW4ge1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0yNy1cXHRzdHJ1Y3RfZ3JvdXAoY2ZnLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0MjppbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDM6Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC00NC1cXHRcXHRcXHRcXHRcXHRcXHQgdTggaW5kZXgpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0NTppbnQgemwzMDczeF9jaGFuX3N0YXRlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6NDY6XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTQ3LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo0ODppbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjQ5OmludCB6bDMwNzN4X2NoYW5fbmNvX21vZGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjUxOmludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUyLVxcdFxcdFxcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTUzLVxcdFxcdFxcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1NDppbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTUtXFx0XFx0XFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo1NjppbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTU3LVxcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjU4OmludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNTktXFx0XFx0XFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjAtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjYxOmludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTYyLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo2MzppbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTY1LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo2NjogKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldCAtIGdldCBjYWNoZWQgZGZfb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTY3LSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaD03MT1zdGF0aWMgaW5saW5lIHM2NFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo3Mjp6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC03My17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzctLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjc4OiAqIHpsMzA3M3hfY2hhbl9tb2RlX2dldCAtIGdldCBEUExMIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtNzktICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTgyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDo4MzpzdGF0aWMgaW5saW5lIHU4IHpsMzA3M3hfY2hhbl9tb2RlX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC04NC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtODgtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjg5OiAqIHpsMzA3M3hfY2hhbl9yZWZfZ2V0IC0gZ2V0IG1hbnVhbGx5IHNlbGVjdGVkIHJlZmVyZW5jZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC05MC0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTMtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjk0OnN0YXRpYyBpbmxpbmUgdTggemwzMDczeF9jaGFuX3JlZl9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtOTUte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTk5LS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaDoxMDA6ICogemwzMDczeF9jaGFuX21vZGVfc2V0IC0gc2V0IERQTEwgY2hhbm5lbCBvcGVyYXRpbmcgbW9kZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDEtICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEwMy0gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTA0OnN0YXRpYyBpbmxpbmUgdm9pZCB6bDMwNzN4X2NoYW5fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggbW9kZSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTA1LXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMDktLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExMDogKiB6bDMwNzN4X2NoYW5fcmVmX3NldCAtIHNldCBtYW51YWxseSBzZWxlY3RlZCByZWZlcmVuY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgtMTExLSAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTMtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oOjExNDpzdGF0aWMgaW5saW5lIHZvaWQgemwzMDczeF9jaGFuX3JlZl9zZXQoc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMTUte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTExOS0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTIwOiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQgLSBnZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEyMS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg9MTI2PXN0YXRpYyBpbmxpbmUgdThcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTI3OnpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbiwgdTggcmVmKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaC0xMjgte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzNy0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmg6MTM4OiAqIHpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQgLSBzZXQgcmVmZXJlbmNlIHByaW9yaXR5XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oLTEzOS0gKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTI6NDQuODAxMTgxMTY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyOTcxMjA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1pY3JvY2hpcCBBenVyaXRlIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIE1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhlc2UgdGhpbmdzIGFyZSB0eXBpY2FsbHkgaW5zdGFudGlhdGVkIHVzaW5nIEkyQyBvciBTUEkgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMuIFN0YW5kYXJkIGZhcmUuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgc29tZXRoaW5nIGFib3V0IGBzeXprYWxsZXJgIGJlaW5nIGFibGUgdG8gaW5zdGFudGlhdGUgSTJDIGRldmljZXMgZGlyZWN0bHkgdXNpbmcgdGhlIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtJWQvbmV3X2RldmljZWAgaW50ZXJmYWNlLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSByZWxldmFudCBmb3IgZnV6emluZyBhbmQgdGVzdGluZyB0aGlzIGRyaXZlci5cblxuVGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgdG9vIGRlZXBseSwgaXMgdG8gcXVpY2tseSBjaGVjayB3aGV0aGVyIHRoaXMgZHJpdmVyIHV0aWxpemVzIHRoZSBzdGFuZGFyZCBgaTJjX2RyaXZlcmAgYW5kIGBzcGlfZHJpdmVyYCBpbmZyYXN0cnVjdHVyZS4gSWYgaXQgZG9lcywgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGlzIGNvcnJlY3QgYW5kIHRoZXNlIGludGVyZmFjZXMgY2FuIGxpa2VseSBiZSBsZXZlcmFnZWQsIHBvdGVudGlhbGx5IGJ5IHN5emthbGxlci4gSWYgbm90LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGhhcmR3YXJlIGFjY2VzcyBtb3JlIGNsb3NlbHkuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgdGhlIGNhc2UsIGFuZCBpcyB0aGUgbW9yZSBsaWtlbHkgYW5zd2VyLCBidXQgSSdsbCBzdGFydCB3aXRoIHRoZSBzaW1wbGVyIHBhdGgsIGJlY2F1c2UgaXQgcHJvdmlkZXMgYSBnb29kIG92ZXJ2aWV3IGZvciBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU1OTEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1Mjo0OS4zMzA4OTY1ODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NjA2NjAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaTJjX2RyaXZlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDgyMjcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9lbnVtZXJhdGlvbi5yc3Q9MzEwPWlucHV0IGRyaXZlcjo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Zpcm13YXJlLWd1aWRlL2FjcGkvZW51bWVyYXRpb24ucnN0LTMyOC1cXHR9O1xcbkRvY3VtZW50YXRpb24vZmlybXdhcmUtZ3VpZGUvYWNwaS9lbnVtZXJhdGlvbi5yc3Q6MzI5OlxcdG1vZHVsZV9pMmNfZHJpdmVyKG1wdTMwNTBfaTJjX2RyaXZlcik7XFxuRG9jdW1lbnRhdGlvbi9maXJtd2FyZS1ndWlkZS9hY3BpL2VudW1lcmF0aW9uLnJzdC0zMzAtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMucnN0PTIyOT1kcml2ZXIgbW9kdWxlIGlzIHVzdWFsbHkgZW5vdWdoLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzLnJzdC0yNDQtXFxuRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzLnJzdDoyNDU6ICBUaGUgbW9kdWxlX2kyY19kcml2ZXIoKSBtYWNybyBjYW4gYmUgdXNlZCB0byByZWR1Y2UgYWJvdmUgY29kZS5cXG5Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMucnN0LTI0Ni1cXG5Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMucnN0OjI0NzogIG1vZHVsZV9pMmNfZHJpdmVyKGZvb19kcml2ZXIpO1xcbkRvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cy5yc3QtMjQ4LVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21jdV9tcGM4MzQ5ZW1pdHguYz0yMTQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1jdV9kcml2ZXIgPSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWN1X21wYzgzNDllbWl0eC5jLTIyMy1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWN1X21wYzgzNDllbWl0eC5jOjIyNDptb2R1bGVfaTJjX2RyaXZlcihtY3VfZHJpdmVyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWN1X21wYzgzNDllbWl0eC5jLTIyNS1cXG4tLVxcbmRyaXZlcnMvYXV4ZGlzcGxheS9odDE2azMzLmM9NzcwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBodDE2azMzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvYXV4ZGlzcGxheS9odDE2azMzLmMtNzc4LX07XFxuZHJpdmVycy9hdXhkaXNwbGF5L2h0MTZrMzMuYzo3Nzk6bW9kdWxlX2kyY19kcml2ZXIoaHQxNmszM19kcml2ZXIpO1xcbmRyaXZlcnMvYXV4ZGlzcGxheS9odDE2azMzLmMtNzgwLVxcbi0tXFxuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmM9MzY4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsY2Qyc19pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmMtMzc2LX07XFxuZHJpdmVycy9hdXhkaXNwbGF5L2xjZDJzLmM6Mzc3Om1vZHVsZV9pMmNfZHJpdmVyKGxjZDJzX2kyY19kcml2ZXIpO1xcbmRyaXZlcnMvYXV4ZGlzcGxheS9sY2Qycy5jLTM3OC1cXG4tLVxcbmRyaXZlcnMvYXV4ZGlzcGxheS9tYXg2OTU5LmM9MTc1PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg2OTU5X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2F1eGRpc3BsYXkvbWF4Njk1OS5jLTE4NC19O1xcbmRyaXZlcnMvYXV4ZGlzcGxheS9tYXg2OTU5LmM6MTg1Om1vZHVsZV9pMmNfZHJpdmVyKG1heDY5NTlfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9hdXhkaXNwbGF5L21heDY5NTkuYy0xODYtXFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1iX2Rldl9pbnQuYz0zNjk9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlwbWJfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtYl9kZXZfaW50LmMtMzc3LX07XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtYl9kZXZfaW50LmM6Mzc4Om1vZHVsZV9pMmNfZHJpdmVyKGlwbWJfZHJpdmVyKTtcXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1iX2Rldl9pbnQuYy0zNzktXFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYz01NzQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlwbWlfaXBtYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYy01ODMtfTtcXG5kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2lwbWIuYzo1ODQ6bW9kdWxlX2kyY19kcml2ZXIoaXBtaV9pcG1iX2RyaXZlcik7XFxuZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9pcG1iLmMtNTg1LVxcbi0tXFxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYz0xMjU2PWt1bml0X3Rlc3Rfc3VpdGUoc3NpZl9ibWNfdGVzdF9zdWl0ZSk7XFxuLS1cXG5kcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2JtYy5jLTEyNTgtXFxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYzoxMjU5Om1vZHVsZV9pMmNfZHJpdmVyKHNzaWZfYm1jX2RyaXZlcik7XFxuZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYy0xMjYwLVxcbi0tXFxuZHJpdmVycy9jaGFyL3RwbS9zdDMzenAyNC9pMmMuYz0xNTY9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHN0MzN6cDI0X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvdHBtL3N0MzN6cDI0L2kyYy5jLTE2Ny1cXG5kcml2ZXJzL2NoYXIvdHBtL3N0MzN6cDI0L2kyYy5jOjE2ODptb2R1bGVfaTJjX2RyaXZlcihzdDMzenAyNF9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2NoYXIvdHBtL3N0MzN6cDI0L2kyYy5jLTE2OS1cXG4tLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX2kyY19hdG1lbC5jPTIxNz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2F0bWVsX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX2kyY19hdG1lbC5jLTIyNy1cXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfYXRtZWwuYzoyMjg6bW9kdWxlX2kyY19kcml2ZXIoaTJjX2F0bWVsX2RyaXZlcik7XFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2F0bWVsLmMtMjI5LVxcbi0tXFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmM9NzIwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0cG1fdGlzX2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfaW5maW5lb24uYy03MzAtXFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmM6NzMxOm1vZHVsZV9pMmNfZHJpdmVyKHRwbV90aXNfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmMtNzMyLU1PRFVMRV9BVVRIT1IoXFxcIlBldGVyIEh1ZXdlIFxcdTAwM2NwZXRlci5odWV3ZUBpbmZpbmVvbi5jb21cXHUwMDNlXFxcIik7XFxuLS1cXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfbnV2b3Rvbi5jPTY0NT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX251dm90b25fZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX251dm90b24uYy02NTUtXFxuZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX251dm90b24uYzo2NTY6bW9kdWxlX2kyY19kcml2ZXIoaTJjX251dm90b25fZHJpdmVyKTtcXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfbnV2b3Rvbi5jLTY1Ny1cXG4tLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmMuYz0zOTM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRwbV90aXNfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmMuYy00MDItfTtcXG5kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXNfaTJjLmM6NDAzOm1vZHVsZV9pMmNfZHJpdmVyKHRwbV90aXNfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyYy5jLTQwNC1cXG4tLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmNfY3I1MC5jPTgyMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY3I1MF9pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2kyY19jcjUwLmMtODMzLVxcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmNfY3I1MC5jOjgzNDptb2R1bGVfaTJjX2RyaXZlcihjcjUwX2kyY19kcml2ZXIpO1xcbmRyaXZlcnMvY2hhci90cG0vdHBtX3Rpc19pMmNfY3I1MC5jLTgzNS1cXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1jZGNlNzA2LmM9Njg3PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjZGNlNzA2X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstY2RjZTcwNi5jLTY5NC19O1xcbmRyaXZlcnMvY2xrL2Nsay1jZGNlNzA2LmM6Njk1Om1vZHVsZV9pMmNfZHJpdmVyKGNkY2U3MDZfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9jbGsvY2xrLWNkY2U3MDYuYy02OTYtXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstY2RjZTkyNS5jPTg0Nj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY2RjZTkyNV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstY2RjZTkyNS5jLTg1My19O1xcbmRyaXZlcnMvY2xrL2Nsay1jZGNlOTI1LmM6ODU0Om1vZHVsZV9pMmNfZHJpdmVyKGNkY2U5MjVfZHJpdmVyKTtcXG5kcml2ZXJzL2Nsay9jbGstY2RjZTkyNS5jLTg1NS1cXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1jczIwMDAtY3AuYz02MjM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNzMjAwMF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstY3MyMDAwLWNwLmMtNjMzLVxcbmRyaXZlcnMvY2xrL2Nsay1jczIwMDAtY3AuYzo2MzQ6bW9kdWxlX2kyY19kcml2ZXIoY3MyMDAwX2RyaXZlcik7XFxuZHJpdmVycy9jbGsvY2xrLWNzMjAwMC1jcC5jLTYzNS1cXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1tYXg5NDg1LmM9MzgwPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg5NDg1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1tYXg5NDg1LmMtMzg4LX07XFxuZHJpdmVycy9jbGsvY2xrLW1heDk0ODUuYzozODk6bW9kdWxlX2kyY19kcml2ZXIobWF4OTQ4NV9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1tYXg5NDg1LmMtMzkwLVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXJlbmVzYXMtcGNpZS5jPTQxND1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnM5X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1yZW5lc2FzLXBjaWUuYy00MjItfTtcXG5kcml2ZXJzL2Nsay9jbGstcmVuZXNhcy1wY2llLmM6NDIzOm1vZHVsZV9pMmNfZHJpdmVyKHJzOV9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1yZW5lc2FzLXBjaWUuYy00MjQtXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc2k1MTQuYz0zOTM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTE0X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1zaTUxNC5jLTQwMC19O1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUxNC5jOjQwMTptb2R1bGVfaTJjX2RyaXZlcihzaTUxNF9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUxNC5jLTQwMi1cXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1zaTUyMXh4LmM9Mzg0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzaTUyMXh4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1zaTUyMXh4LmMtMzkyLX07XFxuZHJpdmVycy9jbGsvY2xrLXNpNTIxeHguYzozOTM6bW9kdWxlX2kyY19kcml2ZXIoc2k1MjF4eF9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUyMXh4LmMtMzk0LVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXNpNTM0MS5jPTE4NDc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTM0MV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc2k1MzQxLmMtMTg1NS19O1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUzNDEuYzoxODU2Om1vZHVsZV9pMmNfZHJpdmVyKHNpNTM0MV9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUzNDEuYy0xODU3LVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXNpNTM1MS5jPTE3MTE9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTM1MV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc2k1MzUxLmMtMTcxOC19O1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUzNTEuYzoxNzE5Om1vZHVsZV9pMmNfZHJpdmVyKHNpNTM1MV9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1zaTUzNTEuYy0xNzIwLVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXNpNTQ0LmM9NDk3PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzaTU0NF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc2k1NDQuYy01MDQtfTtcXG5kcml2ZXJzL2Nsay9jbGstc2k1NDQuYzo1MDU6bW9kdWxlX2kyY19kcml2ZXIoc2k1NDRfZHJpdmVyKTtcXG5kcml2ZXJzL2Nsay9jbGstc2k1NDQuYy01MDYtXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstc2k1NzAuYz01MjM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpNTcwX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay1zaTU3MC5jLTUzMC19O1xcbmRyaXZlcnMvY2xrL2Nsay1zaTU3MC5jOjUzMTptb2R1bGVfaTJjX2RyaXZlcihzaTU3MF9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay1zaTU3MC5jLTUzMi1cXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrMy5jPTExNTc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHZjM19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazMuYy0xMTYzLX07XFxuZHJpdmVycy9jbGsvY2xrLXZlcnNhY2xvY2szLmM6MTE2NDptb2R1bGVfaTJjX2RyaXZlcih2YzNfZHJpdmVyKTtcXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazMuYy0xMTY1LVxcbi0tXFxuZHJpdmVycy9jbGsvY2xrLXZlcnNhY2xvY2s1LmM9MTM0MD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdmM1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNS5jLTEzNDktfTtcXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazUuYzoxMzUwOm1vZHVsZV9pMmNfZHJpdmVyKHZjNV9kcml2ZXIpO1xcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNS5jLTEzNTEtXFxuLS1cXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazcuYz0xMzAyPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB2YzdfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvY2xrL2Nsay12ZXJzYWNsb2NrNy5jLTEzMTAtfTtcXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazcuYzoxMzExOm1vZHVsZV9pMmNfZHJpdmVyKHZjN19pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2Nsay9jbGstdmVyc2FjbG9jazcuYy0xMzEyLVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU1LX07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTY6bW9kdWxlX2kyY19kcml2ZXIoemwzMDczeF9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01Ny1cXG4tLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1sYzgyNDIwNnhhLmM9NDgzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsYzgyNDIwNnhhX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1sYzgyNDIwNnhhLmMtNDkwLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1sYzgyNDIwNnhhLmM6NDkxOm1vZHVsZV9pMmNfZHJpdmVyKGxjODI0MjA2eGFfZHJpdmVyKTtcXG5kcml2ZXJzL2V4dGNvbi9leHRjb24tbGM4MjQyMDZ4YS5jLTQ5Mi1cXG4tLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1tYXgxNDUyNi5jPTI4OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWF4MTQ1MjZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDE0NTI2LmMtMjk2LX07XFxuZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDE0NTI2LmM6Mjk3Om1vZHVsZV9pMmNfZHJpdmVyKG1heDE0NTI2X2RyaXZlcik7XFxuZHJpdmVycy9leHRjb24vZXh0Y29uLW1heDE0NTI2LmMtMjk4LVxcbi0tXFxuZHJpdmVycy9leHRjb24vZXh0Y29uLXB0bjUxNTAuYz00MDE9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHB0bjUxNTBfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZXh0Y29uL2V4dGNvbi1wdG41MTUwLmMtNDA5LX07XFxuZHJpdmVycy9leHRjb24vZXh0Y29uLXB0bjUxNTAuYzo0MTA6bW9kdWxlX2kyY19kcml2ZXIocHRuNTE1MF9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2V4dGNvbi9leHRjb24tcHRuNTE1MC5jLTQxMS1cXG4tLVxcbmRyaXZlcnMvZnNpL2ZzaS1tYXN0ZXItaTJjci5jPTMwMj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjcl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2ZzaS9mc2ktbWFzdGVyLWkyY3IuYy0zMTAtXFxuZHJpdmVycy9mc2kvZnNpLW1hc3Rlci1pMmNyLmM6MzExOm1vZHVsZV9pMmNfZHJpdmVyKGkyY3JfZHJpdmVyKVxcbmRyaXZlcnMvZnNpL2ZzaS1tYXN0ZXItaTJjci5jLTMxMi1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWFkbnAuYz01MTQ9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkbnBfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWFkbnAuYy01MjEtfTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1hZG5wLmM6NTIyOm1vZHVsZV9pMmNfZHJpdmVyKGFkbnBfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9ncGlvL2dwaW8tYWRucC5jLTUyMy1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWRzNDUyMC5jPTYyPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkczQ1MjBfZ3Bpb19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1kczQ1MjAuYy02OS19O1xcbmRyaXZlcnMvZ3Bpby9ncGlvLWRzNDUyMC5jOjcwOm1vZHVsZV9pMmNfZHJpdmVyKGRzNDUyMF9ncGlvX2RyaXZlcik7XFxuZHJpdmVycy9ncGlvL2dwaW8tZHM0NTIwLmMtNzEtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1meGw2NDA4LmM9MTU4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBmeGw2NDA4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWZ4bDY0MDguYy0xNjYtfTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1meGw2NDA4LmM6MTY3Om1vZHVsZV9pMmNfZHJpdmVyKGZ4bDY0MDhfZHJpdmVyKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1meGw2NDA4LmMtMTY4LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tZ3ctcGxkLmM9MTIzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBnd19wbGRfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tZ3ctcGxkLmMtMTMwLX07XFxuZHJpdmVycy9ncGlvL2dwaW8tZ3ctcGxkLmM6MTMxOm1vZHVsZV9pMmNfZHJpdmVyKGd3X3BsZF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLWd3LXBsZC5jLTEzMi1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLXBjYTk1NzAuYz0xODE9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBjYTk1NzBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTU3MC5jLTE4OC19O1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXBjYTk1NzAuYzoxODk6bW9kdWxlX2kyY19kcml2ZXIocGNhOTU3MF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXBjYTk1NzAuYy0xOTAtXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby10cGljMjgxMC5jPTEyMD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBpYzI4MTBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tdHBpYzI4MTAuYy0xMjctfTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby10cGljMjgxMC5jOjEyODptb2R1bGVfaTJjX2RyaXZlcih0cGljMjgxMF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXRwaWMyODEwLmMtMTI5LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tdHM0OTAwLmM9MTgzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0czQ5MDBfZ3Bpb19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby10czQ5MDAuYy0xOTAtfTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby10czQ5MDAuYzoxOTE6bW9kdWxlX2kyY19kcml2ZXIodHM0OTAwX2dwaW9fZHJpdmVyKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby10czQ5MDAuYy0xOTItXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby13YXZlc2hhcmUtZHNpLmM9MTk3PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3YXZlc2hhcmVfZ3Bpb19yZWd1bGF0b3JfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8td2F2ZXNoYXJlLWRzaS5jLTIwNC1cXG5kcml2ZXJzL2dwaW8vZ3Bpby13YXZlc2hhcmUtZHNpLmM6MjA1Om1vZHVsZV9pMmNfZHJpdmVyKHdhdmVzaGFyZV9ncGlvX3JlZ3VsYXRvcl9kcml2ZXIpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXdhdmVzaGFyZS1kc2kuYy0yMDYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDYzNDUuYz03ODA9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFueDYzNDVfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng2MzQ1LmMtNzg4LX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeC1hbng2MzQ1LmM6Nzg5Om1vZHVsZV9pMmNfZHJpdmVyKGFueDYzNDVfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDYzNDUuYy03OTAtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDc4eHguYz0xMzQ3PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhbng3OHh4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXgtYW54Nzh4eC5jLTEzNTQtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDc4eHguYzoxMzU1Om1vZHVsZV9pMmNfZHJpdmVyKGFueDc4eHhfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4LWFueDc4eHguYy0xMzU2LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbng3NjI1LmM9MzAwOD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYW54NzYyNV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FueDc2MjUuYy0zMDE5LVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW54NzYyNS5jOjMwMjA6bW9kdWxlX2kyY19kcml2ZXIoYW54NzYyNV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW54NzYyNS5jLTMwMjEtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Nocm9udGVsLWNoNzAzMy5jPTYwND1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgY2g3MDMzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2hyb250ZWwtY2g3MDMzLmMtNjEzLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2hyb250ZWwtY2g3MDMzLmM6NjE0Om1vZHVsZV9pMmNfZHJpdmVyKGNoNzAzM19kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2hyb250ZWwtY2g3MDMzLmMtNjE1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jcm9zLWVjLWFueDc2ODguYz0xNzU9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNyb3NfZWNfYW54NzY4OF9icmlkZ2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jcm9zLWVjLWFueDc2ODguYy0xODMtXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jcm9zLWVjLWFueDc2ODguYzoxODQ6bW9kdWxlX2kyY19kcml2ZXIoY3Jvc19lY19hbng3Njg4X2JyaWRnZV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY3Jvcy1lYy1hbng3Njg4LmMtMTg1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2MjYzLmM9OTE4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpdDYyNjNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2MjYzLmMtOTI1LX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2MjYzLmM6OTI2Om1vZHVsZV9pMmNfZHJpdmVyKGl0NjI2M19kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjI2My5jLTkyNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjUwNS5jPTM2Njc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGl0NjUwNV9pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMtMzY3OC1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYzozNjc5Om1vZHVsZV9pMmNfZHJpdmVyKGl0NjUwNV9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYy0zNjgwLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NjEyMS5jPTE3Mjc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGl0NjYxMjFfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NjEyMS5jLTE3MzYtXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NjEyMS5jOjE3Mzc6bW9kdWxlX2kyY19kcml2ZXIoaXQ2NjEyMV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0NjYxMjEuYy0xNzM4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODcxM3N4LmM9NTgxPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdDg3MTNzeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ4NzEzc3guYy01OTEtXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODcxM3N4LmM6NTkyOm1vZHVsZV9pMmNfZHJpdmVyKGx0ODcxM3N4X2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODcxM3N4LmMtNTkzLU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDg5MTJiLmM9ODI0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdDg5MTJfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDg5MTJiLmMtODMzLX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0ODkxMmIuYzo4MzQ6bW9kdWxlX2kyY19kcml2ZXIobHQ4OTEyX2kyY19kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDg5MTJiLmMtODM1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTIxMS5jPTc4Nj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHQ5MjExX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDkyMTEuYy03OTQtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5MjExLmM6Nzk1Om1vZHVsZV9pMmNfZHJpdmVyKGx0OTIxMV9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDkyMTEuYy03OTYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmM9MTI0Mz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHQ5NjExX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTEuYy0xMjUxLX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jOjEyNTI6bW9kdWxlX2kyY19kcml2ZXIobHQ5NjExX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jLTEyNTMtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM9OTA5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdDk2MTF1eGNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMXV4Yy5jLTkxOC19O1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYzo5MTk6bW9kdWxlX2kyY19kcml2ZXIobHQ5NjExdXhjX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMXV4Yy5jLTkyMC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYz0zMzI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHB0bjM0NjBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ueHAtcHRuMzQ2MC5jLTM0MC19O1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYzozNDE6bW9kdWxlX2kyY19kcml2ZXIocHRuMzQ2MF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbnhwLXB0bjM0NjAuYy0zNDItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYz01Mzg9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBzODYyMl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYy01NDYtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIuYzo1NDc6bW9kdWxlX2kyY19kcml2ZXIocHM4NjIyX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjIyLmMtNTQ4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmM9NzM5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwczg2NDBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmMtNzQ2LX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmM6NzQ3Om1vZHVsZV9pMmNfZHJpdmVyKHBzODY0MF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFyYWRlLXBzODY0MC5jLTc0OC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jPTEyNDU9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpaTkwMnhfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zaWk5MDJ4LmMtMTI1My19O1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jOjEyNTQ6bW9kdWxlX2kyY19kcml2ZXIoc2lpOTAyeF9kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jLTEyNTUtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpaTkyMzQuYz05NTM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpaTkyMzRfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zaWk5MjM0LmMtOTYyLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTIzNC5jOjk2Mzptb2R1bGVfaTJjX2RyaXZlcihzaWk5MjM0X2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zaWk5MjM0LmMtOTY0LU1PRFVMRV9ERVNDUklQVElPTihcXFwiU2lsaWNvbiBJbWFnZSBTSUk5MjM0IEhETUkvTUhMIGJyaWRnZSBkcml2ZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lsLXNpaTg2MjAuYz0yMzc4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzaWk4NjIwX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lsLXNpaTg2MjAuYy0yMzg3LVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lsLXNpaTg2MjAuYzoyMzg4Om1vZHVsZV9pMmNfZHJpdmVyKHNpaTg2MjBfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpbC1zaWk4NjIwLmMtMjM4OS1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIlNpbGljb24gSW1hZ2UgU2lJODYyMCBIRE1JL01ITCBicmlkZ2UgZHJpdmVyXFxcIik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY3LmM9MjYyNT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGMzNTg3NjdfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2Ny5jLTI2MzMtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY3LmM6MjYzNDptb2R1bGVfaTJjX2RyaXZlcih0YzM1ODc2N19kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjcuYy0yNjM1LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2OC5jPTE0NTI9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRjMzU4NzY4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjguYy0xNDYwLX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc2OC5jOjE0NjE6bW9kdWxlX2kyY19kcml2ZXIodGMzNTg3NjhfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY4LmMtMTQ2Mi1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NzUuYz03NDM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRjMzU4Nzc1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NzUuYy03NTEtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4Nzc1LmM6NzUyOm1vZHVsZV9pMmNfZHJpdmVyKHRjMzU4Nzc1X2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90YzM1ODc3NS5jLTc1My1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGRhOTk4eF9kcnYuYz0yMDY3PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0ZGE5OTh4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGRhOTk4eF9kcnYuYy0yMDc2LVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGRhOTk4eF9kcnYuYzoyMDc3Om1vZHVsZV9pMmNfZHJpdmVyKHRkYTk5OHhfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RkYTk5OHhfZHJ2LmMtMjA3OC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktZGxwYzM0MzMuYz00MDM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRscGMzNDMzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktZGxwYzM0MzMuYy00MTEtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLWRscGMzNDMzLmM6NDEyOm1vZHVsZV9pMmNfZHJpdmVyKGRscGMzNDMzX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1kbHBjMzQzMy5jLTQxMy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTgzLmM9MTA4OT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc242NWRzaTgzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTgzLmMtMTA5Ny19O1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTgzLmM6MTA5ODptb2R1bGVfaTJjX2RyaXZlcihzbjY1ZHNpODNfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4My5jLTEwOTktXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXRkcDE1OC5jPTEwNT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGRwMTU4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktdGRwMTU4LmMtMTExLX07XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS10ZHAxNTguYzoxMTI6bW9kdWxlX2kyY19kcml2ZXIodGRwMTU4X2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS10ZHAxNTguYy0xMTMtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3dhdmVzaGFyZS1kc2kuYz0xOTU9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdzX2JyaWRnZV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3dhdmVzaGFyZS1kc2kuYy0yMDEtfTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3dhdmVzaGFyZS1kc2kuYzoyMDI6bW9kdWxlX2kyY19kcml2ZXIod3NfYnJpZGdlX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS93YXZlc2hhcmUtZHNpLmMtMjAzLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLW9saW1leC1sY2Qtb2xpbnV4aW5vLmM9MjYxPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsY2Rfb2xpbnV4aW5vX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vbGltZXgtbGNkLW9saW51eGluby5jLTI2OS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtb2xpbWV4LWxjZC1vbGludXhpbm8uYzoyNzA6bW9kdWxlX2kyY19kcml2ZXIobGNkX29saW51eGlub19kcml2ZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vbGltZXgtbGNkLW9saW51eGluby5jLTI3MS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zaXRyb25peC9zdDc1NzEtaTJjLmM9MTQzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzdDc1NzFfaTJjX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zaXRyb25peC9zdDc1NzEtaTJjLmMtMTUyLVxcbmRyaXZlcnMvZ3B1L2RybS9zaXRyb25peC9zdDc1NzEtaTJjLmM6MTUzOm1vZHVsZV9pMmNfZHJpdmVyKHN0NzU3MV9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vc2l0cm9uaXgvc3Q3NTcxLWkyYy5jLTE1NC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9zb2xvbW9uL3NzZDEzMHgtaTJjLmM9MTEyPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzc2QxMzB4X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vc29sb21vbi9zc2QxMzB4LWkyYy5jLTEyMC19O1xcbmRyaXZlcnMvZ3B1L2RybS9zb2xvbW9uL3NzZDEzMHgtaTJjLmM6MTIxOm1vZHVsZV9pMmNfZHJpdmVyKHNzZDEzMHhfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3NvbG9tb24vc3NkMTMweC1pMmMuYy0xMjItXFxuLS1cXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtYWNwaS5jPTEyNj1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2hpZF9hY3BpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1hY3BpLmMtMTM4LVxcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1hY3BpLmM6MTM5Om1vZHVsZV9pMmNfZHJpdmVyKGkyY19oaWRfYWNwaV9kcml2ZXIpO1xcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1hY3BpLmMtMTQwLVxcbi0tXFxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWVsYW4uYz0yMTY9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGVsYW5faTJjX2hpZF90c19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZWxhbi5jLTIyNi19O1xcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi1lbGFuLmM6MjI3Om1vZHVsZV9pMmNfZHJpdmVyKGVsYW5faTJjX2hpZF90c19kcml2ZXIpO1xcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi1lbGFuLmMtMjI4LVxcbi0tXFxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWdvb2RpeC5jPTEyND1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZ29vZGl4X2kyY19oaWRfdHNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLWdvb2RpeC5jLTEzNC19O1xcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi1nb29kaXguYzoxMzU6bW9kdWxlX2kyY19kcml2ZXIoZ29vZGl4X2kyY19oaWRfdHNfZHJpdmVyKTtcXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YtZ29vZGl4LmMtMTM2LVxcbi0tXFxuZHJpdmVycy9oaWQvaTJjLWhpZC9pMmMtaGlkLW9mLmM9MTUzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfaGlkX29mX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi5jLTE2Ni1cXG5kcml2ZXJzL2hpZC9pMmMtaGlkL2kyYy1oaWQtb2YuYzoxNjc6bW9kdWxlX2kyY19kcml2ZXIoaTJjX2hpZF9vZl9kcml2ZXIpO1xcbmRyaXZlcnMvaGlkL2kyYy1oaWQvaTJjLWhpZC1vZi5jLTE2OC1cXG4tLVxcbmRyaXZlcnMvaHdtb24vYWQ3NDE0LmM9MjE5PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZDc0MTRfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9od21vbi9hZDc0MTQuYy0yMjctXFxuZHJpdmVycy9od21vbi9hZDc0MTQuYzoyMjg6bW9kdWxlX2kyY19kcml2ZXIoYWQ3NDE0X2RyaXZlcik7XFxuZHJpdmVycy9od21vbi9hZDc0MTQuYy0yMjktXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FkNzQxOC5jPTI5OT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWQ3NDE4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvaHdtb24vYWQ3NDE4LmMtMzA3LVxcbmRyaXZlcnMvaHdtb24vYWQ3NDE4LmM6MzA4Om1vZHVsZV9pMmNfZHJpdmVyKGFkNzQxOF9kcml2ZXIpO1xcbmRyaXZlcnMvaHdtb24vYWQ3NDE4LmMtMzA5LVxcbi0tXFxuZHJpdmVycy9od21vbi9hZGMxMjhkODE4LmM9NDk0PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZGMxMjhfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9od21vbi9hZGMxMjhkODE4LmMtNTA1LVxcbmRyaXZlcnMvaHdtb24vYWRjMTI4ZDgxOC5jOjUwNjptb2R1bGVfaTJjX2RyaXZlcihhZGMxMjhfZHJpdmVyKTtcXG5kcml2ZXJzL2h3bW9uL2FkYzEyOGQ4MTguYy01MDctXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FkbTEwMjUuYz01NTc9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkbTEwMjVfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9od21vbi9hZG0xMDI1LmMtNTY3LVxcbmRyaXZlcnMvaHdtb24vYWRtMTAyNS5jOjU2ODptb2R1bGVfaTJjX2RyaXZlcihhZG0xMDI1X2RyaXZlcik7XFxuZHJpdmVycy9od21vbi9hZG0xMDI1LmMtNTY5LVxcbi0tXFxuZHJpdmVycy9od21vbi9hZG0xMDI2LmM9MTg2NT1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRtMTAyNl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYy0xODc1LVxcbmRyaXZlcnMvaHdtb24vYWRtMTAyNi5jOjE4NzY6bW9kdWxlX2kyY19kcml2ZXIoYWRtMTAyNl9kcml2ZXIpO1xcbmRyaXZlcnMvaHdtb24vYWRtMTAyNi5jLTE4NzctXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYz0zOTA9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkbTEwMjlfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9od21vbi9hZG0xMDI5LmMtNDAwLVxcbmRyaXZlcnMvaHdtb24vYWRtMTAyOS5jOjQwMTptb2R1bGVfaTJjX2RyaXZlcihhZG0xMDI5X2RyaXZlcik7XFxuZHJpdmVycy9od21vbi9hZG0xMDI5LmMtNDAyLVxcbi0tXFxuZHJpdmVycy9od21vbi9hZG0xMDMxLmM9MTA2ND1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRtMTAzMV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYy0xMDc0LVxcbmRyaXZlcnMvaHdtb24vYWRtMTAzMS5jOjEwNzU6bW9kdWxlX2kyY19kcml2ZXIoYWRtMTAzMV9kcml2ZXIpO1xcbmRyaXZlcnMvaHdtb24vYWRtMTAzMS5jLTEwNzYtXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTI6NTEuMjE2OTczNjY3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMzNjU4NjM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgemwzMDczeCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB0aGUgemwzMDczeCBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSBrZXJuZWwgdGhyb3VnaCBgbW9kdWxlX2kyY19kcml2ZXJgIGFuZCBgbW9kdWxlX3NwaV9kcml2ZXJgLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiBlZmZlY3RpdmVseSBmdXp6IHRoZXNlIEkyQyBhbmQgU1BJIGRyaXZlcnMuIEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfaTJjX3NldHVwYCBhbmQgYHN5el9zcGlfc2V0dXBgIHdoaWNoIGlzIGEgZ29vZCBzaWduLCBhbmQgdGhlIHN5c3RlbSBidXMgb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGluc3RhbnRpYXRlIHZpYSBzeXNmcyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAuIFdhaXQsIG5vLCBJIGp1c3QgY2hlY2tlZCB0aGUga2VybmVsIGFuZCBJIGRvbid0IHNlZSBgc3l6X2kyY19zZXR1cGAgZGVmaW5lZC4gQnV0IHN5emthbGxlciAqY2FuKiB3cml0ZSB0aGUgZGV2aWNlIG5hbWUgdG8gYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2VgLCB3aGljaCBjb3VsZCB3b3JrIGFzIHdlbGwuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGRyaXZlciBpcyBldmVuICpyZWFjaGFibGUqLiBUaGUgcGF0Y2ggbW9kaWZpZXMgZmlsZXMgbGlrZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jYCwgYGNvcmUuY2AsIGFuZCBgZHBsbC5jYC4gVGhlc2UgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBhZGRpbmcgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIERQTEwgZHJpdmVyLCB3aGljaCBzdWdnZXN0cyBjb3JlIGZ1bmN0aW9uYWwgbG9naWMgaXMgYmVpbmcgbW9kaWZpZWQuIE5vdywgYSBrZXkgcXVlc3Rpb246IGNhbiB0aGlzIGRyaXZlciBldmVuIGJlIHJlYWNoZWQgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSB0aGUgb25lIHN5emthbGxlciB1c2VzPyBUaGUgZHJpdmVyIGlzIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgYSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRldmljZS5cblxuSWYgc3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSB0aGUgZHJpdmVyIHRocm91Z2ggSTJDL1NQSSwgaXQgc2hvdWxkIGJlIGFibGUgdG8gcmVhY2ggdGhlIHByb2JlIGZ1bmN0aW9uLiBUaGVuLCBJIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBkcml2ZXIgdGhyb3VnaCBEUExMIG5ldGxpbmsgYW5kIFBUUCBpb2N0bHMuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlJ3MgYW55IGhhcmR3YXJlIGRlcGVuZGVuY3kgdGhhdCB3b3VsZCBwcmV2ZW50IHRoZSBkcml2ZXIgZnJvbSBwcm9iaW5nIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyByZWdpc3RlciBhY2Nlc3NlcyBvciBvdGhlciBkZXZpY2Utc3BlY2lmaWMgcmVxdWlyZW1lbnRzIHRoYXQgY291bGQgY2F1c2UgcHJvYmxlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NjIxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUyOjU3LjU1MzU2MjU0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYzMTA5OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfZGV2X3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05MjU9emwzMDczeF9kZXZtX2RwbGxfaW5pdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3Mi0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTczOiAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzQtICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTc5LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODA6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk4MS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTA2MC19XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjEwNjE6RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFxcXCJaTDMwNzNYXFxcIik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwNjItXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9MTA0PXN0cnVjdCB6bDMwNzN4X2RldiAqemwzMDczeF9kZXZtX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjEwNTppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTEwNi1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTExPXN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjI1OlxcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjYtfVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmMtMjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM6MjU6XFx0cmV0dXJuIHpsMzA3M3hfZGV2X3Byb2JlKHpsZGV2KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zcGkuYy0yNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUyOjU5LjExNjY3Nzk2NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzE5MDkzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGB6bDMwNzN4X2Rldl9wcm9iZWAncyBSZWdpc3RlciBSZWFkaW5nKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBoYXJkd2FyZSBpbnRlcmFjdGlvbiBzdHJhdGVneS4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0IGV4cGxpY2l0bHkgcmVhZHMgaGFyZHdhcmUgcmVnaXN0ZXJzIGR1cmluZyBpdHMgaW5pdGlhbGl6YXRpb24gb3IgcHJvYmluZyBzZXF1ZW5jZS4gTXkgaHVuY2ggaXMsIHNpbmNlIHRoaXMgaXMgYSBwcm9iZSBmdW5jdGlvbiwgaXQgcHJvYmFibHkgZG9lcy4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGRvZXMgaXQgKnZhbGlkYXRlKiB0aG9zZSByZWdpc3RlciB2YWx1ZXM/IERvZXMgaXQgaGF2ZSBlcnJvciBoYW5kbGluZyBpbiBwbGFjZSB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIHByb2JlIGZhaWx1cmUgaWYgdGhlIGV4cGVjdGVkIHJlZ2lzdGVyIHZhbHVlcyBkb24ndCBtYXRjaCB3aGF0IGl0IHJlYWRzPyBUaGlzIGlzIGtleS4gVGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyB2YWxpZGF0aW9uIGxvZ2ljIHRlbGxzIG1lIGEgbG90IGFib3V0IHRoZSByb2J1c3RuZXNzIG9mIHRoZSBkcml2ZXIncyBoYXJkd2FyZSBkZXRlY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb24gYXBwcm9hY2guIEknbGwgYmUgbG9va2luZyBmb3IgY29tcGFyaXNvbnMgYWdhaW5zdCBleHBlY3RlZCB2YWx1ZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiByZWdpc3RlciBjb250ZW50cywgYW5kIHVsdGltYXRlbHksIGFueSBgcmV0dXJuYCBzdGF0ZW1lbnRzIHRoYXQgaW5kaWNhdGUgYSBwcm9iaW5nIGZhaWx1cmUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBub3QgYSBibGluZCByZWFkIGFuZCBwcm9jZWVkIHNldHVwLCBzaW5jZSBhIGJsaW5kIHJlYWQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBzZXJpb3VzIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgxMjMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MzowMy40NDg1ODk4OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTcwOlxcdH1cXG4gOTcxOlxcdFxcbiA5NzI6XFx0LyoqXFxuIDk3MzpcXHQgKiB6bDMwNzN4X2Rldl9wcm9iZSAtIGluaXRpYWxpemUgemwzMDczeCBkZXZpY2VcXG4gOTc0OlxcdCAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbiA5NzU6XFx0ICpcXG4gOTc2OlxcdCAqIENvbW1vbiBpbml0aWFsaXphdGlvbiBvZiB6bDMwNzN4IGRldmljZSBzdHJ1Y3R1cmUuXFxuIDk3NzpcXHQgKlxcbiA5Nzg6XFx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiA5Nzk6XFx0ICovXFxuIDk4MDpcXHRpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gOTgxOlxcdHtcXG4gOTgyOlxcdFxcdHUxNiBpZCwgcmV2aXNpb24sIGZ3X3ZlcjtcXG4gOTgzOlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbiA5ODQ6XFx0XFx0dTMyIGNmZ192ZXI7XFxuIDk4NTpcXHRcXHRpbnQgcmM7XFxuIDk4NjpcXHRcXG4gOTg3OlxcdFxcdC8qIFJlYWQgY2hpcCBJRCAqL1xcbiA5ODg6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFxcdTAwMjZpZCk7XFxuIDk4OTpcXHRcXHRpZiAocmMpXFxuIDk5MDpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIDk5MTpcXHRcXG4gOTkyOlxcdFxcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cXG4gOTkzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpKyspIHtcXG4gOTk0OlxcdFxcdFxcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxcbiA5OTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDk5NjpcXHRcXHR9XFxuIDk5NzpcXHRcXG4gOTk4OlxcdFxcdGlmIChpID09IEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcykpXFxuIDk5OTpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCAtRU5PREVWLFxcbjEwMDA6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiVW5rbm93biBjaGlwIElEOiAweCUwNHhcXFxcblxcXCIsIGlkKTtcXG4xMDAxOlxcdFxcbjEwMDI6XFx0XFx0emxkZXYtXFx1MDAzZWluZm8gPSBcXHUwMDI2emwzMDczeF9jaGlwX2lkc1tpXTtcXG4xMDAzOlxcdFxcbjEwMDQ6XFx0XFx0LyogUmVhZCByZXZpc2lvbiwgZmlybXdhcmUgdmVyc2lvbiBhbmQgY3VzdG9tIGNvbmZpZyB2ZXJzaW9uICovXFxuMTAwNTpcXHRcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRVZJU0lPTiwgXFx1MDAyNnJldmlzaW9uKTtcXG4xMDA2OlxcdFxcdGlmIChyYylcXG4xMDA3OlxcdFxcdFxcdHJldHVybiByYztcXG4xMDA4OlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0ZXX1ZFUiwgXFx1MDAyNmZ3X3Zlcik7XFxuMTAwOTpcXHRcXHRpZiAocmMpXFxuMTAxMDpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTAxMTpcXHRcXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19DVVNUT01fQ09ORklHX1ZFUiwgXFx1MDAyNmNmZ192ZXIpO1xcbjEwMTI6XFx0XFx0aWYgKHJjKVxcbjEwMTM6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHRkZXZfZGJnKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJDaGlwSUQoJVgpLCBDaGlwUmV2KCVYKSwgRndWZXIoJXUpXFxcXG5cXFwiLCBpZCxcXG4xMDE2OlxcdFxcdFxcdHJldmlzaW9uLCBmd192ZXIpO1xcbjEwMTc6XFx0XFx0ZGV2X2RiZyh6bGRldi1cXHUwMDNlZGV2LCBcXFwiQ3VzdG9tIGNvbmZpZyB2ZXJzaW9uOiAlbHUuJWx1LiVsdS4lbHVcXFxcblxcXCIsXFxuMTAxODpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSygzMSwgMjQpLCBjZmdfdmVyKSxcXG4xMDE5OlxcdFxcdFxcdEZJRUxEX0dFVChHRU5NQVNLKDIzLCAxNiksIGNmZ192ZXIpLFxcbjEwMjA6XFx0XFx0XFx0RklFTERfR0VUKEdFTk1BU0soMTUsIDgpLCBjZmdfdmVyKSxcXG4xMDIxOlxcdFxcdFxcdEZJRUxEX0dFVChHRU5NQVNLKDcsIDApLCBjZmdfdmVyKSk7XFxuMTAyMjpcXHRcXG4xMDIzOlxcdFxcdC8qIEdlbmVyYXRlIHJhbmRvbSBjbG9jayBJRCBhcyB0aGUgZGV2aWNlIGhhcyBub3Qgc3VjaCBwcm9wZXJ0eSB0aGF0XFxuMTAyNDpcXHRcXHQgKiBjb3VsZCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIEEgdXNlciBjYW4gbGF0ZXIgY2hhbmdlIHRoaXMgdmFsdWVcXG4xMDI1OlxcdFxcdCAqIHVzaW5nIGRldmxpbmsuXFxuMTAyNjpcXHRcXHQgKi9cXG4xMDI3OlxcdFxcdHpsZGV2LVxcdTAwM2VjbG9ja19pZCA9IGdldF9yYW5kb21fdTY0KCk7XFxuMTAyODpcXHRcXG4xMDI5OlxcdFxcdC8qIERlZmF1bHQgcGhhc2Ugb2Zmc2V0IGF2ZXJhZ2luZyBmYWN0b3IgKi9cXG4xMDMwOlxcdFxcdHpsZGV2LVxcdTAwM2VwaGFzZV9hdmdfZmFjdG9yID0gMjtcXG4xMDMxOlxcdFxcbjEwMzI6XFx0XFx0LyogSW5pdGlhbGl6ZSBtdXRleCBmb3Igb3BlcmF0aW9ucyB3aGVyZSBtdWx0aXBsZSByZWFkcywgd3JpdGVzXFxuMTAzMzpcXHRcXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cXG4xMDM0OlxcdFxcdCAqL1xcbjEwMzU6XFx0XFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2VtdWx0aW9wX2xvY2spO1xcbjEwMzY6XFx0XFx0aWYgKHJjKVxcbjEwMzc6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuMTAzODpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuMTAzOTpcXHRcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuMTA0MDpcXHRcXHRpZiAocmMpXFxuMTA0MTpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4xMDQyOlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4xMDQzOlxcdFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbjEwNDQ6XFx0XFx0aWYgKHJjKVxcbjEwNDU6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuMTA0NjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcXFxuXFxcIik7XFxuMTA0NzpcXHRcXG4xMDQ4OlxcdFxcdC8qIFJlZ2lzdGVyIERQTEwgY2hhbm5lbHMgKi9cXG4xMDQ5OlxcdFxcdHJjID0gemwzMDczeF9kZXZtX2RwbGxfaW5pdCh6bGRldik7XFxuMTA1MDpcXHRcXHRpZiAocmMpXFxuMTA1MTpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTA1MjpcXHRcXG4xMDUzOlxcdFxcdC8qIFJlZ2lzdGVyIHRoZSBkZXZsaW5rIGluc3RhbmNlIGFuZCBwYXJhbWV0ZXJzICovXFxuMTA1NDpcXHRcXHRyYyA9IHpsMzA3M3hfZGV2bGlua19yZWdpc3Rlcih6bGRldik7XFxuMTA1NTpcXHRcXHRpZiAocmMpXFxuMTA1NjpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4xMDU3OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byByZWdpc3RlciBkZXZsaW5rIGluc3RhbmNlXFxcXG5cXFwiKTtcXG4xMDU4OlxcdFxcbjEwNTk6XFx0XFx0cmV0dXJuIDA7XFxuMTA2MDpcXHR9XFxuMTA2MTpcXHRFWFBPUlRfU1lNQk9MX05TX0dQTCh6bDMwNzN4X2Rldl9wcm9iZSwgXFxcIlpMMzA3M1hcXFwiKTtcXG4xMDYyOlxcdFxcbjEwNjM6XFx0TU9EVUxFX0FVVEhPUihcXFwiSXZhbiBWZWNlcmEgXFx1MDAzY2l2ZWNlcmFAcmVkaGF0LmNvbVxcdTAwM2VcXFwiKTtcXG4xMDY0OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiTWljcm9jaGlwIFpMMzA3M3ggY29yZSBkcml2ZXJcXFwiKTtcXG4xMDY1OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MDMuNDQ4NzE4Nzc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTMwNDQ5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9iZSBGdW5jdGlvbidzIEJlaGF2aW9yIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcHJvYmVgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYHN5emthbGxlcmAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgcmVhZGluZyBgWkxfUkVHX0lEYCBhbmQgY29tcGFyaW5nIGl0IHRvIGB6bDMwNzN4X2NoaXBfaWRzYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBpZiBgc3l6a2FsbGVyYCB0cmllcyB0byBpbnN0YW50aWF0ZSB0aGUgSTJDIGRldmljZSwgaXQncyBnb2luZyB0byBhdHRlbXB0IGFuIEkyQyByZWFkLiBXaXRob3V0IHJlYWwgaGFyZHdhcmUsIHRoYXQgcmVhZCBpcyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGZhaWwgb3IgcmV0dXJuIGdhcmJhZ2Ug4oCTIHByb2JhYmx5IHplcm8uIEFuZCB0aGF0IG1lYW5zIHRoZSBwcm9iZSBpcyBnb2luZyB0byBmYWlsLCB3aGljaCBpc24ndCB3aGF0IHdlIHdhbnQuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gZG9lc24ndCBgc3l6a2FsbGVyYCBoYXZlIHNvbWV0aGluZyBmb3Igc2V0dGluZyB1cCBJMkM/IEkgc2VlbSB0byByZWNhbGwgYSBmdW5jdGlvbiBjYWxsZWQgYHN5el9pMmNfc2V0dXBgLiBMZXQgbWUgZG91YmxlLWNoZWNrLiAqTG9va3MgaXQgdXAqLiBBaCwgcmlnaHQsIHRoYXQncyBub3QgcXVpdGUgd2hhdCBJIHdhcyBob3BpbmcgZm9yLiBgc3l6a2FsbGVyYCBkb2Vzbid0IGhhdmUgYSBnZW5lcmljIEkyQyBkZXZpY2UgKmVtdWxhdG9yKi4gSXQgY2FuIGluamVjdCB0cmFmZmljIGlmIHRoZXJlJ3MgYSBzcGVjaWZpYyBwc2V1ZG8tc3lzY2FsbCwgb3IgaWYgaXQgdXNlcyBgaTJjLWRldmAgdG8gYWN0IGFzIGEgbWFzdGVyLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGJlIGFibGUgdG8gZWFzaWx5IGVtdWxhdGUgYSBzbGF2ZSBkZXZpY2UgYW5kIHJlc3BvbmQgdG8sIHNheSwgYSBgemwzMDczeF9yZWFkX3UxNmAgY2FsbC4gU28sIHdlJ3JlIHN0aWxsIHN0dWNrIHdpdGggdGhlIHBvdGVudGlhbCBwcm9iZSBmYWlsdXJlLiBXZSBuZWVkIHRvIGZpbmQgYSB3b3JrYXJvdW5kLiBCYWNrIHRvIHRoZSBkcmF3aW5nIGJvYXJkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMTAwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MDguNzAxNzY2MDQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg2MTQ1MjUyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfaTJjX3NldHVwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MzoxMC4yODc5MTg5NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5ODQ2NjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHN5el9zcGlfc2V0dXBgKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHN5el9zcGlfc2V0dXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIGl0IGEga2V5IGZ1bmN0aW9uIGluIGEgZnV6emluZyBzZXR1cD8gSXMgaXQgcmVsYXRlZCB0byBkcml2ZXIgaW5pdGlhbGl6YXRpb24/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcywgaXRzIHBhcmFtZXRlcnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFNQSSBzdWJzeXN0ZW0uIE1vcmUgc3BlY2lmaWNhbGx5LCB3aGF0IGlzIGBzeXpfYCBwcmVmaXggYW5kIHdoYXQgaXMgaXRzIHJlbGF0aW9uIHdpdGggdGhlIFNQSS4gSXMgaXQgcmVsYXRlZCB0byB0aGUga2VybmVsIG1vZHVsZT8gSXMgaXQgcmVsYXRlZCB0byB0aGUgaW50ZXJmYWNlPyBGcm9tIHRoZXJlIEkgd2FudCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gZmlndXJlcyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyAqYXJvdW5kKiBpdC4gQXJlIHRoZXJlIGFueSBwYXJ0aWN1bGFyIGVudHJ5IHBvaW50cyBmb3IgdGhpcyBmdW5jdGlvbiB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhhdCdzIHdoZXJlIEkgc2hvdWxkIHN0YXJ0LiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBpZiBhbnkgcHJvYmxlbXMgY2FuIG9jY3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDY3MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjUzOjEzLjg4NjM4ODgyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNTE1NTE3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3l6X3NwaV9zZXR1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MTUuNDIxNTUyMDA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzcxNDQyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW11bGF0aW5nIEkyQyBEZXZpY2VzIGZvciBTeXN0ZW0gVGVzdGluZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gdGVzdCB0aGlzIGB6bDMwNzN4YCBkZXZpY2Ugd2l0aCBzeXprYWxsZXIuIENhbiBzeXprYWxsZXIgYWN0dWFsbHkgKmVtdWxhdGUqIEkyQyBkZXZpY2VzIGVmZmVjdGl2ZWx5PyBJIGtub3cgdGhlcmUncyB0aGlzIGBpMmMtc3R1YmAgdGhpbmcsIGJ1dCBmcm9tIHdoYXQgSSByZWNhbGwsIGl0J3MgcHJldHR5IHJ1ZGltZW50YXJ5LiBJdCdzIG5vdCBnb2luZyB0byBjdXQgaXQgZm9yIGFueSBzZXJpb3VzIHByb2JpbmcsIGVzcGVjaWFsbHkgaWYgeW91IG5lZWQgc3BlY2lmaWMgcmVnaXN0ZXIgcmVhZHMgZm9yIHRoZSBwcm9iZSB0byBzdWNjZWVkLlxuXG5SaWdodCwgc28sIGFzIEkgdW5kZXJzdGFuZCBpdCwgc3l6a2FsbGVyIGRvZXNuJ3QgcHJvdmlkZSBhIGdlbmVyYWwgbWVjaGFuaXNtIHRvIGVtdWxhdGUgYXJiaXRyYXJ5IEkyQyBvciBTUEkgZGV2aWNlcyB0aGF0IHJlbHkgb24gcGFydGljdWxhciByZWdpc3RlciByZWFkcyBmb3Igc3VjY2Vzc2Z1bCBwcm9iaW5nLiBVbmxlc3MgdGhlcmUncyBhIGN1c3RvbSBtb2NrIGRyaXZlciwgb3IgaXQncyBhIFVTQiBkZXZpY2UgKHdoaWNoIGNhbiB1c2UgdGhlIGR1bW15X2hjZC9yYXctZ2FkZ2V0IGFwcHJvYWNoKSwgYSBQQ0kgZGV2aWNlICh3aGljaCBpcyBwcm9ibGVtYXRpYyB1bmxlc3MgaXQncyBhIHZlcnkgZ2VuZXJpYyB0eXBlIG9yIGhhcyBhIGN1c3RvbSBlbXVsYXRvciksIG9yIGEgbmV0d29yayBkZXZpY2UgKHR1bi90YXAgd29ya3MgdGhlcmUpLlxuXG5TaW5jZSBgemwzMDczeGAgaXMgYW4gSTJDL1NQSSBkZXZpY2UsIGl0cyBwcm9iZSBmdW5jdGlvbiwgYHpsMzA3M3hfZGV2X3Byb2JlYCwgd2lsbCwgYnkgZGVmaW5pdGlvbiwgYmUgcmVhZGluZyBgWkxfUkVHX0lEYCB2aWEgSTJDIG9yIFNQSS4gSWYgdGhlIGhhcmR3YXJlIGlzbid0IGFjdHVhbGx5IHByZXNlbnQsIHRoYXQgcmVhZCBpcyBlaXRoZXIgZ29pbmcgdG8gZmFpbCBvciwgYXQgYmVzdCwgcmV0dXJuIHNvbWV0aGluZyBsaWtlIDB4ZmYgb3IgMHgwMC4gSG1tLCBuZWVkIHRvIHNlZSB0aGUgZXhwZWN0ZWQgdmFsdWVzLiBJIHNob3VsZCByZWFsbHkgY2hlY2sgd2hhdCB2YWx1ZXMgYXJlIGV4cGVjdGVkIGluIGB6bDMwNzN4X2NoaXBfaWRzYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA5MzEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MjAuNzU4Njk4NjA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY1MjYzMjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfY2hpcF9pZHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTI1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHpsMzA3M3hfY2hpcF9pZHNbXSA9IHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjctXFx0WkxfQ0hJUF9JTkZPKDB4MEUzMCwgMiwgWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyKSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODA9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTkyLVxcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTkzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpKyspIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk0OlxcdFxcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTUtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk3LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTg6XFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk5LVxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIC1FTk9ERVYsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwMS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwMjpcXHR6bGRldi1cXHUwMDNlaW5mbyA9IFxcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1MzoyMi4zMjM5NjYzMzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1NzM1OTQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHpsMzA3M3ggRHJpdmVyIFByb2JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB6bDMwNzN4YCBkcml2ZXIgYW5kIGhvdyBpdCdzIHByb2JlZC4gSXQgbG9va3MgbGlrZSB0aGUgY2hpcCBpZGVudGlmaWNhdGlvbiBoYXBwZW5zIHZpYSB0aGVzZSBoZXggSURzLCBzb21ldGhpbmcgbGlrZSBgMHgwRTMwYCwgYXMgSSdkIGV4cGVjdC4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5OyBpZiB0aGUgcGh5c2ljYWwgY2hpcCBpc24ndCB0aGVyZSwgdGhlIGB6bDMwNzN4X3JlYWRfdTE2YCBmdW5jdGlvbiBpcyBnb2luZyB0byBjcmFwIG91dC4gSXQnbGwgZWl0aGVyIGZhaWwgb3V0cmlnaHQsIG9yLCBldmVuIHdvcnNlLCByZXR1cm4gYSB1c2VsZXNzIHZhbHVlIGxpa2UgYDB4MDAwMGAgb3IgYDB4RkZGRmAsIHdoaWNoIGlzIHByZXR0eSBjb21tb24gYmVoYXZpb3IuIFRoaXMgbGVhZHMgdG8gdGhlIHByb2JlIGZhaWxpbmcgd2l0aCBhbiBgLUVOT0RFVmAgZXJyb3IuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBlcnJvciBjb2RlLCBzbyBJJ20gbm90IHN1cnByaXNlZCB0aGVyZS5cblxuVGhpcyBpbW1lZGlhdGVseSBtZWFucyBJIGNhbid0IGp1c3Qgc3BpbiB1cCBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGFuZCBleHBlY3QgdGhpcyBkcml2ZXIgdG8gbG9hZCBjbGVhbmx5LiBJIG5lZWQgdGhlIGFjdHVhbCBoYXJkd2FyZSwgb3IgYSBkZWNlbnQgZW11bGF0b3IgdG8gdHJpY2sgdGhlIGRyaXZlciBpbnRvIHRoaW5raW5nIGl0J3MgdGhlcmUuIEhvbGQgb24sIHRob3VnaC4uLiBpcyB0aGVyZSBhbiBJMkMgZW11bGF0b3IgaW4gdGhlIGtlcm5lbCB0aGF0IHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIHVzZSB0byBmYWtlIHRoZSBkZXZpY2UgYW5kIGFsbG93IHRoZSBkcml2ZXIgdG8gcHJvYmU/IEkga25vdyB0aGVyZSdzIGBpMmMtc3R1YmAsIHdoaWNoIGlzIGtpbmQgb2YgYW4gaW50ZXJlc3Rpbmcgb3B0aW9uLCBidXQgaXQgb25seSBzdXBwb3J0cyByZWFsbHkgYmFzaWMgU01CdXMgY29tbWFuZHMsIGFuZCB0aGUgZGV2aWNlIGFkZHJlc3NlcyBoYXZlIHRvIGJlIGNvbmZpZ3VyZWQgaW4gYWR2YW5jZS5cblxuRXZlbiBpZiBzeXprYWxsZXIgKmNvdWxkKiBsb2FkIGBpMmMtc3R1YmAsIGl0IHdvdWxkIHN0aWxsIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoaWNoIHJlZ2lzdGVyIG9mZnNldHMgdG8gd3JpdGUgdGhlIGNvcnJlY3QgY2hpcCBJRCB0byBiZWZvcmUgZXZlbiBhdHRlbXB0aW5nIHRvIHByb2JlIHRoZSBkcml2ZXIuIFRoYXQgc2VlbXMgbGlrZSBhIGJpdCBvZiBhIGNoYWxsZW5nZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGUgZHJpdmVyIGFjdHVhbGx5IHVzZXMgU01CdXMgb3IgcmF3IEkyQyB0cmFuc2ZlcnMuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNoZWNrLiBJIHRoaW5rIEknbGwgZ28gdGhyb3VnaCB0aGUgZHJpdmVyIGNvZGUgYW5kIHNlZSBpZiBJIGNhbiBmaWd1cmUgdGhpcyBvdXQuLi4gaXQncyBwcm9iYWJseSBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoaXMgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIwNDAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MjcuODgxMzI4MjMxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwNjM5NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfcmVhZF91MTZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jPTE3MT1pbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jLTIwNS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmM6MjA2OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMtMjA3LVxcdFxcdFxcdCAgICAgIFxcdTAwMjZjaGFuLVxcdTAwM2VvdXRfc3RlcF90aW1lX21hc2spO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTE3OD1pbnQgemwzMDczeF93cml0ZV91OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1OCB2YWwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTgzLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxODQ6ICogemwzMDczeF9yZWFkX3UxNiAtIHJlYWQgdmFsdWUgZnJvbSAxNmJpdCByZWdpc3RlclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xODUtICogQHpsZGV2OiB6bDMwNzN4IGRldmljZSBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTkyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxOTM6aW50IHpsMzA3M3hfcmVhZF91MTYoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTE2ICp2YWwpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTE5NC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9OTgwPWludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk4Ny1cXHQvKiBSZWFkIGNoaXAgSUQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTg4OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcXHUwMDI2aWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODktXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDQtXFx0LyogUmVhZCByZXZpc2lvbiwgZmlybXdhcmUgdmVyc2lvbiBhbmQgY3VzdG9tIGNvbmZpZyB2ZXJzaW9uICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjEwMDU6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFxcdTAwMjZyZXZpc2lvbik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDYtXFx0aWYgKHJjKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDA3LVxcdFxcdHJldHVybiByYztcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwODpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFxcdTAwMjZmd192ZXIpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDA5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaD0xNDc9aW50IHpsMzA3M3hfcmVhZF91OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1OCAqdmFsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg6MTQ4OmludCB6bDMwNzN4X3JlYWRfdTE2KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUxNiAqdmFsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgtMTQ5LWludCB6bDMwNzN4X3JlYWRfdTMyKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUzMiAqdmFsKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYz0yNT16bDMwNzN4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtMzMtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjM0OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcXHUwMDI2aWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy0zNS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNDQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjQ1OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFVklTSU9OLCBcXHUwMDI2cmV2aXNpb24pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy00Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTUtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjU2OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0ZXX1ZFUiwgXFx1MDAyNmZ3X3Zlcik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTU3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xMjMyPXpsMzA3M3hfZHBsbF90ZW1wX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMjQxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMjQyOlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0RJRV9URU1QX1NUQVRVUywgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyNDMtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM9Nzk9aW50IHpsMzA3M3hfcmVmX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE1LVxcdC8qIFJlYWQgZnJlcXVlbmN5IHJlbGF0ZWQgcmVnaXN0ZXJzICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM6MTE2OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFRl9GUkVRX0JBU0UsIFxcdTAwMjZyZWYtXFx1MDAzZWZyZXFfYmFzZSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE3LVxcdGlmIChyYylcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMTgtXFx0XFx0cmV0dXJuIHJjO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jOjExOTpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfRlJFUV9NVUxULCBcXHUwMDI2cmVmLVxcdTAwM2VmcmVxX211bHQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyMC1cXHRpZiAocmMpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTIxLVxcdFxcdHJldHVybiByYztcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMjI6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVGX1JBVElPX00sIFxcdTAwMjZyZWYtXFx1MDAzZWZyZXFfcmF0aW9fbSk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTIzLVxcdGlmIChyYylcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjQtXFx0XFx0cmV0dXJuIHJjO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jOjEyNTpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfUkFUSU9fTiwgXFx1MDAyNnJlZi1cXHUwMDNlZnJlcV9yYXRpb19uKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjYtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYz0yMz1pbnQgemwzMDczeF9zeW50aF9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNDUtXFx0ICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYzo0NjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19TWU5USF9GUkVRX0JBU0UsIFxcdTAwMjZzeW50aC1cXHUwMDNlZnJlcV9iYXNlKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTQ3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTMtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYzo1NDpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19TWU5USF9GUkVRX00sIFxcdTAwMjZzeW50aC1cXHUwMDNlZnJlcV9tKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTU1LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTctXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYzo1ODpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19TWU5USF9GUkVRX04sIFxcdTAwMjZzeW50aC1cXHUwMDNlZnJlcV9uKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTU5LVxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTM6MjkuNTQxOTg4NTY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODAwNTgxOTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogVW5yZWFjaGFibGUgQ29kZSBpbiBhIEhhcmR3YXJlLURlcGVuZGVudCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgYHpsMzA3M3hgIGRyaXZlciB1c2VzIGByZWdtYXBgIGludGVybmFsbHksIHdoaWNoIG1lYW5zIHRoYXQgYHpsMzA3M3hfcmVhZF91MTZgIHdpbGwsIGluIHR1cm4sIGNhbGwgYHJlZ21hcF9yZWFkYC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGZ1enogYHJlZ21hcGAgZGV2aWNlcz8gVGhlIGFuc3dlciwgYXMgSSBzZWUgaXQsIGlzIGdlbmVyYWxseSBubywgdW5sZXNzIGEgc3BlY2lmaWMgcHNldWRvLXN5c2NhbGwgZXhpc3RzIG9yIGlmIHRoZSBkZXZpY2UgaXRzZWxmIGdldHMgaW5zdGFudGlhdGVkLlxuXG5JIHJlYWxpemUgdGhhdCBgemwzMDczeF9kZXZfcHJvYmVgIHdpbGwgZmFpbCBlYXJseSBvbi4gU3BlY2lmaWNhbGx5LCBpdCdsbCBmYWlsIGF0IHRoZSBgemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcdTAwMjZpZClgIGNhbGwgYmVjYXVzZSBhbnkgSTJDIG9yIFNQSSByZWFkIGluIGEgc3l6a2FsbGVyIGNvbnRleHQgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIG9yIGp1bmsgZGF0YSBsaWtlIGAweDAwMDBgIG9yIGAweEZGRkZgLlxuXG5Ob3csIEkgY29uc2lkZXJlZCBgaTJjLXN0dWJgIGFuZCB3aGV0aGVyIHRoYXQgbWlnaHQgd29yay4gSSBrbm93IHRoYXQgYGkyYy1zdHViYCBjYW4gYmUgbG9hZGVkIHdpdGggYSBzcGVjaWZpYyBgY2hpcF9hZGRyYCwgd2hpY2ggd291bGQgbGV0IGl0IHJlc3BvbmQgdG8gSTJDIHJlYWRzLiBIb3dldmVyLCBzeXprYWxsZXIgZG9lc24ndCBrbm93IHRoZSBzcGVjaWZpYyBjaGlwIElELCBgWkxfUkVHX0lEYCBpcyBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgMHgwRTMwYCwgYW5kIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHJlZ2lzdGVycyB0byB3cml0ZSB0aGlzIGNoaXAgSUQgdG8sIHNvIHRoZSBjb3JyZWN0IHZhbHVlcyB3b3VsZCBub3QgYmUgd3JpdHRlbi4gVGhlIGxpa2VsaWhvb2Qgb2Ygc3l6a2FsbGVyIHJhbmRvbWx5IHdyaXRpbmcgdGhlIGNvcnJlY3QgdmFsdWVzIHRvIHJlZ2lzdGVyIGAweDAwYCBhbmQgYDB4MDFgIChvciB3aGF0ZXZlciB0aGUgZW5kaWFubmVzcyBpcyksIHRvIHNldCB0aGUgY29ycmVjdCBJRCBiZWZvcmUgYXR0ZW1wdGluZyB0byBwcm9iZSB0aGUgZHJpdmVyLCBpcyBpbmZpbml0ZXNpbWFsbHkgc21hbGwuIFBsdXMsIGBpMmMtc3R1YmAgaXNuJ3Qgc3l6a2FsbGVyJ3MgdHlwaWNhbCBhcHByb2FjaCBmb3IgZmFraW5nIGFyYml0cmFyeSBkZXZpY2VzLCBhbmQgcmVxdWlyZXMgbW9kdWxlIHBhcmFtZXRlcnMgdG8gc2V0IHVwIHRoZSBhZGRyZXNzZXMuXG5cbkkgYWxzbyByZW1lbWJlciBgc3l6X3VzYl9jb25uZWN0YCB3aGljaCBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcywgYnV0IGhlcmUgd2UgYXJlIHRhbGtpbmcgYWJvdXQgSTJDL1NQSS4gSXQncyBhIGRpZmZlcmVudCBiZWFzdC5cblxuU28sIHRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIHdheXMgdGhpcyBjb2RlIGNhbiBiZSByZWFjaGVkPyBOby4gSSd2ZSByZWNvbmZpcm1lZCB0aGF0IHRoaXMgY29kZSByZXNpZGVzIHNvbGVseSB3aXRoaW4gdGhlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9gIGRpcmVjdG9yeSwgYW5kIGl0J3MgYSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciBmb3IgTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlcy4gQ3J1Y2lhbGx5LCB0aGVzZSBkZXZpY2VzIGFyZSBub3QgZW11bGF0ZWQgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhleSBhcmUgcGh5c2ljYWwgZGV2aWNlcy5cblxuTm93LCBsZXQncyBzZWUuIEknbGwgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9mIHRoZSBkZXZpY2UsIGp1c3QgdG8gYmUgc3VyZS4gTm9wZS4gSXQncyBhIHBoeXNpY2FsIERQTEwgY2hpcC5cblxuTm93LCBsZXQgbWUgZ28gYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zIEkgd2FzIGdpdmVuLiBUaGV5IGV4cGxpY2l0bHkgc3RhdGUgdG8gc2V0IFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgYSBwYXRjaCBjb250YWluczpcbiogQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuKiBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLlxuXG5UaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIEkyQy9TUEkgRFBMTCBkcml2ZXIuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGlzIG1lZXRzIHRoZSBjcml0ZXJpYSBwZXJmZWN0bHkuXG5cbkkndmUgcmV2aWV3ZWQgdGhlIHBhdGNoIGFnYWluLiBJdCBtb2RpZmllcyBmaWxlcyBsaWtlIGBjaGFuLmNgLCBgY29yZS5jYCwgYW5kIGBkcGxsLmNgIHdpdGhpbiB0aGUgYHpsMzA3M3hgIGRyaXZlciwgYWRkaW5nIFBUUCBjbG9jayBzdXBwb3J0LiBCdXQgYmVjYXVzZSB0aGUgZHJpdmVyIGl0c2VsZiBjYW4ndCBiZSBwcm9iZWQgd2l0aG91dCB0aGUgcGh5c2ljYWwgTWljcm9jaGlwIEF6dXJpdGUgY2hpcCwgbm9uZSBvZiB0aGlzIGNvZGUgY2FuIGJlIGV4ZWN1dGVkIGJ5IHN5emthbGxlci5cblxuVGhlcmVmb3JlLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBjb2RlIGlzIHNvbGVseSB3aXRoaW4gYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIHdoaWNoIGlzIGZvciBhIHNwZWNpZmljIERQTEwgY2hpcCB3aGljaCBjYW5ub3QgYmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MTQzLCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1Mzo0MC4zNDI1NzY2NDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBJMkMvU1BJIGNvbm5lY3RlZCBEUExMIGRldmljZXMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIGZvciBJMkMvU1BJIGNvbm5lY3RlZCBEUExMIGRldmljZXMuIFNpbmNlIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBmYWlsIHRvIHJlYWQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNoaXAgSURzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow7txp6[1] Phase: Running StartedAt: 2026-08-01 02:53:52 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txp6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-01 02:53:52 +0000 UTC FinishedAt: 2026-08-01 02:53:56 +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,}