Name: series-workflowztlfb Phase: Failed StartedAt: 2026-07-07 13:02:22 +0000 UTC FinishedAt: 2026-07-07 13:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztlfb[0] Phase: Succeeded StartedAt: 2026-07-07 13:02:22 +0000 UTC FinishedAt: 2026-07-07 13:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztlfb[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 13:02:22 +0000 UTC FinishedAt: 2026-07-07 13:16:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KSB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbi4gVGhlc2UgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgd2l0aG91dCBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIFR4L1J4IHJpbmcgcHJvY2Vzc2luZyBhbmQgaGFyZHdhcmUgZXJyb3IgcmVjb3ZlcnkpIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdW5jdGlvbmFsbHkgZnV6eiBpbiBvdXIgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjlmOTk3NWE5NmUzYjMyNjY1MjU5NDRiNzZkNmJhNmIwNjRiYjhlZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMTM6MTU6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbkBAIC00LDUgJiM0Mzs0LDUgQEBcbiBcbiBvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vXG4gXG4tbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXG4mIzQzO2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xuIGxpYnd4LW9ianMgJiM0Mzs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wY2I5OWU0NTZhMWM5N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCAmIzQzOzEsMzE3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfdHlwZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuJiM0MzsgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4KVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1xuJiM0MztcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XG4mIzQzO1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xuJiM0MztcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcbiYjNDM7XHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4mIzQzO1x0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cGNpX3NldF9tYXN0ZXIocGRldik7XG4mIzQzO1x0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XG4mIzQzO1x0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvd25fc3VzcGVuZClcbiYjNDM7XHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXG4mIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcbiYjNDM7ICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4mIzQzO1x0XHRlcnIgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xuJiM0MztcdC5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLFxuJiM0MztcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcbiYjNDM7XHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxuJiM0Mzt9O1xuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR3eF93YXJuKHd4LCBcJiMzNDtSZXNldCBhZGFwdGVyLlxcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0d3hfcGZfcmVzZXRfc3VidGFzayh3eCk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cXVldWVfd29yayh3eC1cdTAwM2VyZXNldF93cSwgXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XG4mIzQzO1xuJiM0MztpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0d3gtXHUwMDNlcmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7JXNfcmVzZXRfd3FfJXhcJiMzNDssIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxuJiM0MztcdFx0XHRcdCAgICAgICAxLCB3eC1cdTAwM2Vkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC1cdTAwM2VwZGV2KSk7XG4mIzQzO1x0aWYgKCF3eC1cdTAwM2VyZXNldF93cSkge1xuJiM0MztcdFx0d3hfZXJyKHd4LCBcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHd4X3Jlc2V0X3dxIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3hfcmluZ19mZWF0dXJlICp2bWRxID0gXHUwMDI2d3gtXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9WTURRXTtcbiYjNDM7XHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cdTAwM2VtYXNrKTtcbiYjNDM7XHR1MzIgaSwgajtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3eC1cdTAwM2VudW1fdmZzKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdmZzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgcV9wZXJfcG9vbDsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0dTMyIGgsIHQ7XG4mIzQzO1xuJiM0MztcdFx0XHRoID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuJiM0MztcdFx0XHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGggIT0gdClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfd2F0Y2hkb2dfZmx1c2hfdHgoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICh3eF9yaW5nX3R4X3BlbmRpbmcod3gpIHx8IHd4X3ZmX3R4X3BlbmRpbmcod3gpKSB7XG4mIzQzO1x0XHQvKiBXZSYjMzk7dmUgbG9zdCBsaW5rLCBzbyB0aGUgY29udHJvbGxlciBzdG9wcyBETUEsXG4mIzQzO1x0XHQgKiBidXQgd2UmIzM5O3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0JiMzOTtzIG5ldmVyIGdvaW5nXG4mIzQzO1x0XHQgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC5cbiYjNDM7XHRcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHd4X3dhcm4od3gsIFwmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBJZiB3ZSYjMzk7cmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqL1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovXG4mIzQzO1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSkge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHd4KTtcbiYjNDM7XHR3eF9kZXRlY3RfdHhfaGFuZyh3eCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spO1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHZpZCwgcGNpX2NtZDtcbiYjNDM7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXHUwMDNlcGRldiwgUENJX1ZFTkRPUl9JRCwgXHUwMDI2dmlkKTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXHUwMDI2cGNpX2NtZCk7XG4mIzQzO1xuJiM0MztcdC8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4mIzM5O3QgYWNjZXNzICovXG4mIzQzO1x0aWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCBcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWVcbiYjNDM7XHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxuJiM0MztcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbiYjNDM7XHQgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfZXJyKHd4LCBcJiMzNDtQQ0llIGVycm9yIGRldGVjdGVkIGR1cmluZyB0eCB0aW1lb3V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF93YXJuKHd4LCBcJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XFxuXCYjMzQ7KTtcbiYjNDM7XHR3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHd4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCBfX2Fsd2F5c191bnVzZWQgdHhxdWV1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4mIzQzO1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHR3eF93YXJuKHd4LFxuJiM0MztcdFx0XCYjMzQ7RGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0dHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCxcbiYjNDM7XHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuJiM0MztcdFx0cmQzMih3eCwgV1hfUFhfVFJfV1AodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxuJiM0MztcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbiYjNDM7XG4mIzQzO1x0bmV0aWZfc3RvcF9zdWJxdWV1ZSh0eF9yaW5nLVx1MDAzZW5ldGRldiwgdHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4mIzQzO1xuJiM0MztcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcbkBAIC0wLDAgJiM0MzsxLDE4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qXG4mIzQzOyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXJcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9XWF9FUlJfSF9cbiYjNDM7I2RlZmluZSBfV1hfRVJSX0hfXG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcbiYjNDM7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTtcbiYjNDM7dm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9XWF9FUlJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5pbmRleCA1ZGY5NzFhY2E5ZTM1Zi4uZDEzNTZmZjVkNjliNTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC0zOTUsNyAmIzQzOzM5NSw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqL1xuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiB9XG4gXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMjYwZTE0ZDVkNTQxMjEuLjEyMmM0OTUyZDIwM2YwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbkBAIC0xOTMyLDYgJiM0MzsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuJiM0MztcdGJpdG1hcF96ZXJvKHJpbmctXHUwMDNlc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xuIFx0LyogcmVpbml0aWFsaXplIHR4X2J1ZmZlcl9pbmZvICovXG4gXHRtZW1zZXQocmluZy1cdTAwM2V0eF9idWZmZXJfaW5mbywgMCxcbiBcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVx1MDAzZWNvdW50KTtcbkBAIC0yODUxLDE2ICYjNDM7Mjg1MiwyNiBAQCBFWFBPUlRfU1lNQk9MKHd4X2ZjX2VuYWJsZSk7XG4gc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0c3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gXHUwMDI2d3gtXHUwMDNlc3RhdHM7XG4mIzQzO1x0dTY0IGRhdGE7XG4mIzQzO1x0aW50IGk7XG4gXG4gXHRpZiAod3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19mdWxsIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHd4LVx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICh3eC1cdTAwM2VtYWMudHlwZSBcdTAwM2U9IHd4X21hY19hbWwpXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbi1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNnd4LVx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xuJiM0MztcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4gXHRlbHNlXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XG4mIzQzO1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbiYjNDM7XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICYjNDM7PSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xuJiM0MztcdGlmICghZGF0YSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCA4MTRkODhkMmFlZTQ4Ny4uYTY1MzEyYzgwNzhmYTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt3eF90eXBlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfaHcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X3ZmX2xpYi5oXCYjMzQ7XG5AQCAtNzQyLDYgJiM0Mzs3NDMsMzcgQEAgc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnd4X3R4cmluZ190eHEoY29uc3Qgc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4gXHRyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLVx1MDAzZW5ldGRldiwgcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGhlYWQsIHRhaWw7XG4mIzQzO1xuJiM0MztcdGhlYWQgPSByaW5nLVx1MDAzZW5leHRfdG9fY2xlYW47XG4mIzQzO1x0dGFpbCA9IHJpbmctXHUwMDNlbmV4dF90b191c2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAoKGhlYWQgXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICYjNDM7IHJpbmctXHUwMDNlY291bnQpIC0gaGVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiYjNDM7e1xuJiM0MztcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XG4mIzQzO1x0dTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTtcbiYjNDM7XHR1MzIgdHhfZG9uZSA9IHJpbmctXHUwMDNlc3RhdHMucGFja2V0cztcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHJpbmctXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSBcdTAwMjZcdTAwMjYgdHhfcGVuZGluZylcbiYjNDM7XHRcdC8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovXG4mIzQzO1x0XHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0LyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi9cbiYjNDM7XHRyaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcbiYjNDM7XHQvKiByZXNldCB0aGUgY291bnRkb3duICovXG4mIzQzO1x0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cbkBAIC04NjYsNiAmIzQzOzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvcixcbiBcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUod3hfdHhyaW5nX3R4cSh0eF9yaW5nKSxcbiBcdFx0XHRcdCAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpO1xuIFxuJiM0MztcdGlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7XG4mIzQzO1x0XHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxuIFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXHUwMDI2XHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcbkBAIC0zMTEyLDcgJiM0MzszMTQ5LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IGZlYXR1cmVzO1xuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbiYjNDM7XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gXHRlbHNlIGlmIChjaGFuZ2VkIFx1MDAyNiAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxuIFx0XHR3eF9zZXRfcnhfbW9kZShuZXRkZXYpO1xuIFxuQEAgLTMxNjIsNyAmIzQzOzMxOTksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFxuIG91dDpcbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbiYjNDM7XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzM0Niw1ICYjNDM7MzM4MywyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7XG4gXG4mIzQzO3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSB8fFxuJiM0MztcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGNpX2NsZWFyX21hc3Rlcih3eC1cdTAwM2VwZGV2KTtcbiYjNDM7XHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRuZXRpZl9jYXJyaWVyX29mZih3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG5ldGlmX3R4X2Rpc2FibGUod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiYjNDM7XHR3eF9wdHBfcXVpZXNjZSh3eCk7XG4mIzQzO1xuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7XG4mIzQzO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuaW5kZXggYWVkNmVhOGNmMGQ2NGEuLjExYmQ3OTk4NWUxNzEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuQEAgLTQxLDUgJiM0Mzs0MSw2IEBAIHZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4mIzQzO3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIFxuICNlbmRpZiAvKiBfV1hfTElCX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi5hMjVlYjZhZWQ1NjYwZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbkBAIC0zMjEsNiAmIzQzOzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cClcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcbiBcdGludCB0c19kb25lO1xuIFxuJiM0MztcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybiBIWjtcbiYjNDM7XG4gXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xuIFxuIFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcbkBAIC04NDIsNiAmIzQzOzg0NSwyNCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZXB0cF9jbG9jaylcbiYjNDM7XHRcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZXB0cF90eF9za2IpIHtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuJiM0MztcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4mIzQzO1xuIC8qKlxuICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wXG4gICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5pbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfaW5pdChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuaW5kZXggNjVlM2U1NWRiMWNmZmIuLmFhMzU3ZTI2MGM0YzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtNDUwLDYgJiM0Mzs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDhcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19IRUFEX1dCICAgICAgICAgQklUKDI3KVxuIFxuJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbiYjNDM7XHRcdChXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKVxuJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbiYjNDM7XHRcdChXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKVxuJiM0MztcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSlcbiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgJiM0MzsgKChfaSkgKiAweDQwKSlcbkBAIC0xMDQwLDYgJiM0MzsxMDQ1LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xuIFx0dTY0IHJlc3RhcnRfcXVldWU7XG4gXHR1NjQgdHhfYnVzeTtcbiYjNDM7XHR1MzIgdHhfZG9uZV9vbGQ7XG4gfTtcbiBcbiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuQEAgLTEwNTUsNiAmIzQzOzEwNjEsMTIgQEAgc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcbiAjZGVmaW5lIHd4X2Zvcl9lYWNoX3JpbmcocG9zbSwgaGVhZG0pIFxcXG4gXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVx1MDAzZW5leHQpXG4gXG4mIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7XG4mIzQzO1x0V1hfVFhfREVURUNUX0hBTkcsXG4mIzQzO1x0V1hfSEFOR19DSEVDS19BUk1FRCxcbiYjNDM7XHRXWF9SSU5HX1NUQVRFX05CSVRTXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XG4gXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZzsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbGlua2VkIGxpc3Qgb2YgcmluZ3MgKi9cbiBcdHVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsgICAgICAgLyogdG90YWwgYnl0ZXMgcHJvY2Vzc2VkIHRoaXMgaW50ICovXG5AQCAtMTA3NCw2ICYjNDM7MTA4Niw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcbiBcdFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XG4gXHRcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xuIFx0fTtcbiYjNDM7XHRERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHR1OCBfX2lvbWVtICp0YWlsO1xuIFx0ZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqL1xuIFx0ZG1hX2FkZHJfdCBoZWFkd2JfZG1hO1xuQEAgLTEyMDksNiAmIzQzOzEyMjIsOCBAQCBlbnVtIHd4X3N0YXRlIHtcbiBcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxuIFx0V1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuIFx0V1hfU1RBVEVfU0VSVklDRV9TQ0hFRCxcbiYjNDM7XHRXWF9TVEFURV9ESVNBQkxFRCxcbiYjNDM7XHRXWF9TVEFURV9SRVNfRlJFRUQsXG4gXHRXWF9TVEFURV9OQklUU1x0XHQvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEyNzUsNiAmIzQzOzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcbiBcdFdYX0ZMQUdfTkVFRF9ET19SRVNFVCxcbiBcdFdYX0ZMQUdfUlhfTUVSR0VfRU5BQkxFRCxcbiBcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXG4mIzQzO1x0V1hfRkxBR19ORUVEX1BGX1JFU0VULFxuJiM0MztcdFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLFxuIFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEzOTUsNyAmIzQzOzE0MTIsOCBAQCBzdHJ1Y3Qgd3gge1xuIFx0dm9pZCAoKmF0cikoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF90eF9idWZmZXIgKmZpcnN0LCB1OCBwdHlwZSk7XG4gXHR2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpO1xuIFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcbi1cdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4mIzQzO1x0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4mIzQzO1x0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdHZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7XG4gXG5AQCAtMTQyMyw2ICYjNDM7MTQ0MSw4IEBAIHN0cnVjdCB3eCB7XG4gXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHNlcnZpY2VfdGFzaztcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcbiYjNDM7XHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XG4gXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXG4gfTtcbiBcbkBAIC0xNTA1LDcgJiM0MzsxNTI1LDggQEAgcmQzMl93cmFwKHN0cnVjdCB3eCAqd3gsIHUzMiByZWcsIHUzMiAqbGFzdClcbiBcbiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZXJyKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4tXG4mIzQzOyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXG4mIzQzO1x0ZGV2X3dhcm4oXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZGJnKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5pbmRleCBiMmUxOTE5ODI4MDMyNi4uMTk2MGY3MTU0MTUxZGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTU5LDcgJiM0Mzs1OSw2IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XG4gXHRrdmZyZWUodGVtcF9yaW5nKTtcbiBcbi1cdHd4X2NvbmZpZ3VyZSh3eCk7XG4gXHRuZ2JlX3VwKHd4KTtcbiBcbiBjbGVhcl9yZXNldDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbmluZGV4IGExNjIyMTk5NTkwOWY5Li41NmQ0YjYzMzg3ZmQ2ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X21ieC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XG4gXHR7IH1cbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbiYjNDM7XHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lycSh3eCk7XG4mIzQzO1x0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiYjNDM7XHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtMTMzLDYgJiM0MzsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcbiYjNDM7XHR3eC1cdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XG4mIzQzO1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE0Nyw2ICYjNDM7MTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XG4gXG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuJiM0MztcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG4gXG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHR3eF9mbHVzaF9zd19tYWNfdGFibGUod3gpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLmFkZHIpO1xuIFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG5AQCAtNDIzLDEzICYjNDM7NDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuIH1cbiBcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG5AQCAtNDkwLDcgJiM0Mzs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFxuIFx0d3hfcHRwX2luaXQod3gpO1xuIFxuLVx0bmdiZV91cCh3eCk7XG4mIzQzO1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBlcnJfZGlzX3BoeTpcbkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0d3hfY29uZmlndXJlKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZVxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcbkBAIC01MTgsMTIgJiM0Mzs1NDgsMTYgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0bmdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTUsNyAmIzQzOzU4OSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sICplbmFibGVfd2FrZSlcbiBcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC01OTAsNiAmIzQzOzYyNSw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0ICovXG4gXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRuZ2JlX2Nsb3NlKGRldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmdiZV9yZXNldCh3eCk7XG4gXG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0bmV0aWZfdHJhbnNfdXBkYXRlKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4mIzQzO1x0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0bmdiZV9kb3duKHd4KTtcbiYjNDM7XHRuZ2JlX3VwKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiYjNDM7XHRcdG5nYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmdiZV9yZXNldCh3eCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW4gICAgICAgICAgICAgICA9IG5nYmVfb3BlbixcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gbmdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbiYjNDM7XHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03MDAsNiAmIzQzOzc2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcbiBcdG5nYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XG4gXHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5nYmVfbmV0ZGV2X29wcztcbiYjNDM7XHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8XG5AQCAtNzk2LDYgJiM0Mzs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbiYjNDM7XHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4mIzQzO1xuIFx0bmdiZV9pbml0X3NlcnZpY2Uod3gpO1xuIFxuIFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbkBAIC04MTIsNiAmIzQzOzg3OSw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuJiM0MztcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtODIzLDYgJiM0Mzs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTg1NCw2ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0cGh5bGlua19kZXN0cm95KHd4LVx1MDAzZXBoeWxpbmspO1xuIFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxuQEAgLTg2Myw3ICYjNDM7OTM1LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG5AQCAtODkwLDYgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHR3eF9lcnIod3gsIFwmIzM0O0Nhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0cGNpX3NldF9tYXN0ZXIocGRldik7XG4gXHRkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuQEAgLTkxNCw2ICYjNDM7OTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuIFx0LnJlc3VtZSAgID0gbmdiZV9yZXN1bWUsXG4gXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4mIzQzO1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5pbmRleCA3MDc3YTBkYTRjOTg2YS4uYzkyMzNkYzdhZTUwNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICYjNDM7MTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4mIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2VuZGlmIC8qIF9OR0JFX1RZUEVfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCAyMGM1YTI5NWM2YzI5Ni4uZDg1ZWU4MzE5MmU0ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2Vyci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfcHRwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbkBAIC05Myw2ICYjNDM7OTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEwNiw2ICYjNDM7MTExLDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEyMyw2ICYjNDM7MTMyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7XG4gXHR0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTtcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbiYjNDM7XHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMTQ0LDYgJiM0MzsxNTUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC0xODcsNiAmIzQzOzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4gXHR1OCBvbGRfYWRkcltFVEhfQUxFTl07XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTtcbiBcdGlmIChlcnIgIT0gMClcbiBcdFx0d3hfZXJyKHd4LCBcJiMzNDtIYXJkd2FyZSBFcnJvcjogJWRcXG5cJiMzNDssIGVycik7XG5AQCAtMjI0LDYgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfaXJxX2Rpc2FibGUod3gpO1xuIFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4gXG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtMjkyLDYgJiM0MzszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dHhnYmVfdXBfY29tcGxldGUod3gpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lycSh3eCk7XG4mIzQzO1x0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbiYjNDM7XHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4mIzQzO1x0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTQwOCw2ICYjNDM7NDM4LDcgQEAgc3RhdGljIGludCB0eGdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xuIFx0d3gtXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcbiYjNDM7XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC01MTgsMTIgJiM0Mzs1NDksMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdHd4X3B0cF9zdG9wKHd4KTtcbiBcdHR4Z2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuJiM0MztvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NDQsNyAmIzQzOzU3OSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtNjA2LDExICYjNDM7NjQyLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiB9XG4gXG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuJiM0Mzt2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNiByZWluaXQpXG4gXHRcdHR4Z2JlX3JlaW5pdF9sb2NrZWQod3gpO1xuIFx0ZWxzZVxuIFx0XHR0eGdiZV9yZXNldCh3eCk7XG5AQCAtNjU0LDYgJiM0Mzs2OTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuJiM0MztcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTc0NSw2ICYjNDM7NzgyLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7XG4gXHR0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dHhnYmVfbmV0ZGV2X29wcztcbiYjNDM7XHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXHRuZXRkZXYtXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyA9IFx1MDAyNnR4Z2JlX3VkcF90dW5uZWxzO1xuIFxuIFx0Lyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovXG5AQCAtODE0LDYgJiM0Mzs4NTIsMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXG4mIzQzO1x0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xuJiM0MztcbiBcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTg4OSw2ICYjNDM7OTMxLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcbkBAIC05MTYsNiAmIzQzOzk1OSw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTk0OCw2ICYjNDM7OTkzLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NTksNyAmIzQzOzEwMDYsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTY5LDYgJiM0MzsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbiBcdC5yZW1vdmUgICA9IHR4Z2JlX3JlbW92ZSxcbiBcdC5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4mIzQzO1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmI2Li4zZTkzYTNmMzA5YzE2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuQEAgLTMxMyw3ICYjNDM7MzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxuIFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbGlid3gpIHRvIGFkZCBQQ0kgZXJyb3IgaGFuZGxpbmcgYW5kIFR4IGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyB3aXRob3V0IHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIG9yIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgVHgvUnggcmluZyBwcm9jZXNzaW5nIGFuZCBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSkgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1bmN0aW9uYWxseSBmdXp6IGluIG91ciBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI5Zjk5NzVhOTZlM2IzMjY2NTI1OTQ0Yjc2ZDZiYTZiMDY0YmI4ZWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDEzOjE1OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKaW5kZXggYTcxYjBhZDc3ZGUzZjcuLmM4NzI0YmIxMjlhYTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKQEAgLTQsNSAmIzQzOzQsNSBAQAogCiBvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vCiAKLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubwomIzQzO2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIubwogbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBjYjk5ZTQ1NmExYzk3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwpAQCAtMCwwICYjNDM7MSwzMTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovCiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3d4X3R5cGUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZwomIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkJICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKJiM0MzsKJiM0MzsJaWYgKCF3eCkKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9zb2Z0X3F1aWVzY2Uod3gpOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CS8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqLwomIzQzOwlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuCiYjNDM7ICoKJiM0MzsgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkgewomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O0Nhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovCiYjNDM7CXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJcGNpX3NldF9tYXN0ZXIocGRldik7CiYjNDM7CXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwomIzQzOwlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpICZhbXA7JmFtcDsgd3gtJmd0O2Rvd25fc3VzcGVuZCkKJiM0MzsJCXd4LSZndDtkb3duX3N1c3BlbmQod3gpOwomIzQzOwlpZiAod3gtJmd0O2RvX3Jlc2V0KQomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KHd4LSZndDtuZXRkZXYsIGZhbHNlKTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAomIzQzOyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewomIzQzOwkJZXJyID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXd4X2Vycih3eCwgJiMzNDtGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7b3V0OgomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0gewomIzQzOwkuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCwKJiM0MzsJLnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LAomIzQzOwkucmVzdW1lID0gd3hfaW9fcmVzdW1lLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LCAmIzM0O1Jlc2V0IGFkYXB0ZXIuXG4mIzM0Oyk7CiYjNDM7CWlmICh3eC0mZ3Q7ZG9fcmVzZXQpCiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spOwomIzQzOwomIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl3eC0mZ3Q7cmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDslc19yZXNldF93cV8leCYjMzQ7LCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSwKJiM0MzsJCQkJICAgICAgIDEsIHd4LSZndDtkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC0mZ3Q7cGRldikpOwomIzQzOwlpZiAoIXd4LSZndDtyZXNldF93cSkgewomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlJTklUX1dPUksoJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spOwomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtJmd0O3R4X3JpbmdbaV07CiYjNDM7CiYjNDM7CQlpZiAodHhfcmluZy0mZ3Q7bmV4dF90b191c2UgIT0gdHhfcmluZy0mZ3Q7bmV4dF90b19jbGVhbikKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSAmYW1wO3d4LSZndDtyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdOwomIzQzOwl1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS0mZ3Q7bWFzayk7CiYjNDM7CXUzMiBpLCBqOwomIzQzOwomIzQzOwlpZiAoIXd4LSZndDtudW1fdmZzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV92ZnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgcV9wZXJfcG9vbDsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQl1MzIgaCwgdDsKJiM0MzsKJiM0MzsJCQloID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpOwomIzQzOwkJCXQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CiYjNDM7CQkJaWYgKGggIT0gdCkKJiM0MzsJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHsKJiM0MzsJCS8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSwKJiM0MzsJCSAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmcKJiM0MzsJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgomIzQzOwkJICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS4KJiM0MzsJCSAqLwomIzQzOwkJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcbiYjMzQ7KTsKJiM0MzsJCXNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogSWYgd2UmIzM5O3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi8KJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi8KJiM0MzsJaWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtJmd0O25ldGRldikpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJc2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpOwomIzQzOwl3eF9kZXRlY3RfdHhfaGFuZyh3eCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl1MTYgdmlkLCBwY2lfY21kOwomIzQzOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX1ZFTkRPUl9JRCwgJmFtcDt2aWQpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX0NPTU1BTkQsICZhbXA7cGNpX2NtZCk7CiYjNDM7CiYjNDM7CS8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4mIzM5O3QgYWNjZXNzICovCiYjNDM7CWlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgJmFtcDsgUENJX0NPTU1BTkRfTUVNT1JZKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llCiYjNDM7CSAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSCiYjNDM7CSAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWQKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9lcnIod3gsICYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxuJiMzNDspOwomIzQzOwlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSkKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpOwomIzQzOwllbHNlCiYjNDM7CQl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTsKJiM0MzsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LAomIzQzOwkJJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcbiYjMzQ7LAomIzQzOwkJdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgsCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQl0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSwgbmV4dCwKJiM0MzsJCXR4X3JpbmctJmd0O3R4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpOwomIzQzOwomIzQzOwluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctJmd0O25ldGRldiwgdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1dYX0VSUl9IXwomIzQzOyNkZWZpbmUgX1dYX0VSUl9IXwomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyOwomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9XWF9FUlJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKaW5kZXggNWRmOTcxYWNhOWUzNWYuLmQxMzU2ZmY1ZDY5YjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwpAQCAtMzk1LDcgJiM0MzszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpCiAKIAkvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi8KIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIH0KIAogaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsCiAJZWxzZQogCQlyaW5nLSZndDthdHJfc2FtcGxlX3JhdGUgPSAwOwogCiYjNDM7CWJpdG1hcF96ZXJvKHJpbmctJmd0O3N0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTsKIAkvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi8KIAltZW1zZXQocmluZy0mZ3Q7dHhfYnVmZmVyX2luZm8sIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctJmd0O2NvdW50KTsKQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTsKIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KQogewogCXN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9ICZhbXA7d3gtJmd0O3N0YXRzOwomIzQzOwl1NjQgZGF0YTsKJiM0MzsJaW50IGk7CiAKIAlpZiAod3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfZnVsbCAmYW1wOyZhbXA7CiAJICAgIHd4LSZndDtmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKQogCQlyZXR1cm47CiAKIAlpZiAod3gtJmd0O21hYy50eXBlICZndDs9IHd4X21hY19hbWwpCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCi0JCQkJCSAgICAgICAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKJiM0MzsJCWRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCiYjNDM7CQkJCSAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKIAllbHNlCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpOwomIzQzOwkJZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSBkYXRhOwomIzQzOwomIzQzOwkvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqLwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCA4MTRkODhkMmFlZTQ4Ny4uYTY1MzEyYzgwNzhmYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKIAogI2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3ZmX2xpYi5oJiMzNDsKQEAgLTc0Miw2ICYjNDM7NzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKQogCXJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctJmd0O25ldGRldiwgcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwogfQogCiYjNDM7c3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBoZWFkLCB0YWlsOwomIzQzOwomIzQzOwloZWFkID0gcmluZy0mZ3Q7bmV4dF90b19jbGVhbjsKJiM0MzsJdGFpbCA9IHJpbmctJmd0O25leHRfdG9fdXNlOwomIzQzOwomIzQzOwlyZXR1cm4gKChoZWFkICZsdDs9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy0mZ3Q7Y291bnQpIC0gaGVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXUzMiB0eF9kb25lX29sZCA9IHJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkOwomIzQzOwl1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpOwomIzQzOwl1MzIgdHhfZG9uZSA9IHJpbmctJmd0O3N0YXRzLnBhY2tldHM7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lICZhbXA7JmFtcDsgdHhfcGVuZGluZykKJiM0MzsJCS8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovCiYjNDM7CQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CS8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovCiYjNDM7CXJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTsKJiM0MzsJLyogcmVzZXQgdGhlIGNvdW50ZG93biAqLwomIzQzOwljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uCkBAIC04NjYsNiAmIzQzOzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvciwKIAluZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksCiAJCQkJICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7CiAKJiM0MzsJaWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHsKJiM0MzsJCXd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpOwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMikKIAlpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyAmYW1wOyZhbXA7IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy0mZ3Q7bmV0ZGV2KSAmYW1wOyZhbXA7CiAJCSAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpICZndDs9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHsKQEAgLTMxMTIsNyAmIzQzOzMxNDksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgPSBmZWF0dXJlczsKIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogCWVsc2UgaWYgKGNoYW5nZWQgJmFtcDsgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSkKIAkJd3hfc2V0X3J4X21vZGUobmV0ZGV2KTsKIApAQCAtMzE2Miw3ICYjNDM7MzE5OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiAKIG91dDoKIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzM0Niw1ICYjNDM7MzM4MywyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiB9CiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpOwogCiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyh3eC0mZ3Q7bmV0ZGV2KSB8fAomIzQzOwkgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwY2lfY2xlYXJfbWFzdGVyKHd4LSZndDtwZGV2KTsKJiM0MzsJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LSZndDtuZXRkZXYpOwomIzQzOwluZXRpZl9jYXJyaWVyX29mZih3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJbmV0aWZfdHhfZGlzYWJsZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJd3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7CiYjNDM7CXd4X3B0cF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTsKJiM0MzsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAppbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaApAQCAtNDEsNSAmIzQzOzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LAogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTsKJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIAogI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi5hMjVlYjZhZWQ1NjYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCkBAIC0zMjEsNiAmIzQzOzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCkKIAlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7CiAJaW50IHRzX2RvbmU7CiAKJiM0MzsJaWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiBIWjsKJiM0MzsKIAl0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpOwogCiAJd3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTsKQEAgLTg0Miw2ICYjNDM7ODQ1LDI0IEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCkKIH0KIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApOwogCiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKHd4LSZndDtwdHBfY2xvY2spCiYjNDM7CQlwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LSZndDtwdHBfY2xvY2spOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF90eF9za2IpIHsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHd4LSZndDtwdHBfdHhfc2tiKTsKJiM0MzsJCXd4LSZndDtwdHBfdHhfc2tiID0gTlVMTDsKJiM0MzsJfQomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtJmd0O3N0YXRlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7CiYjNDM7CiAvKioKICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wCiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaAppbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaApAQCAtMTAsNiAmIzQzOzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCmluZGV4IDY1ZTNlNTVkYjFjZmZiLi5hYTM1N2UyNjBjNGM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTQ1MCw2ICYjNDM7NDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUgewogI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDgKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpCiAKJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXAomIzQzOwkJKFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOwogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKQpAQCAtMTA0MCw2ICYjNDM7MTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7CiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMgewogCXU2NCByZXN0YXJ0X3F1ZXVlOwogCXU2NCB0eF9idXN5OwomIzQzOwl1MzIgdHhfZG9uZV9vbGQ7CiB9OwogCiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewpAQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewogI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcCiAJZm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS0mZ3Q7bmV4dCkKIAomIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7CiYjNDM7CVdYX1RYX0RFVEVDVF9IQU5HLAomIzQzOwlXWF9IQU5HX0NIRUNLX0FSTUVELAomIzQzOwlXWF9SSU5HX1NUQVRFX05CSVRTCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7CiAJc3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovCiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi8KQEAgLTEwNzQsNiAmIzQzOzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7CiAJCXN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OwomIzQzOwlERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7CiAJdTggX19pb21lbSAqdGFpbDsKIAlkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBoZWFkd2JfZG1hOwpAQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUgewogCVdYX1NUQVRFX1BUUF9SVU5OSU5HLAogCVdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlXWF9TVEFURV9TRVJWSUNFX1NDSEVELAomIzQzOwlXWF9TVEFURV9ESVNBQkxFRCwKJiM0MzsJV1hfU1RBVEVfUkVTX0ZSRUVELAogCVdYX1NUQVRFX05CSVRTCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEyNzUsNiAmIzQzOzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHsKIAlXWF9GTEFHX05FRURfRE9fUkVTRVQsCiAJV1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELAogCVdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwKJiM0MzsJV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksCiAJV1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEzOTUsNyAmIzQzOzE0MTIsOCBAQCBzdHJ1Y3Qgd3ggewogCXZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpOwogCXZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTsKLQl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzOwl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTsKJiM0MzsJdm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7CiAJdm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTsKIApAQCAtMTQyMyw2ICYjNDM7MTQ0MSw4IEBAIHN0cnVjdCB3eCB7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7CiAJc3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqLwogfTsKIApAQCAtMTUwNSw3ICYjNDM7MTUyNSw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpCiAKICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9lcnIoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCi0KJiM0MzsjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcCiYjNDM7CWRldl93YXJuKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQogI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcCiAJZGV2X2RiZygmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwpAQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7CiAJa3ZmcmVlKHRlbXBfcmluZyk7CiAKLQl3eF9jb25maWd1cmUod3gpOwogCW5nYmVfdXAod3gpOwogCiBjbGVhcl9yZXNldDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwppbmRleCBhMTYyMjE5OTU5MDlmOS4uNTZkNGI2MzM4N2ZkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbWJ4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oJiMzNDsKQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7CiAJeyB9CiB9OwogCiYjNDM7c3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGh5bGlua19zdG9wKHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7CiYjNDM7CXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiYjNDM7CXd4X2ZyZWVfaXJxKHd4KTsKJiM0MzsJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKJiM0MzsJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZQogICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKQEAgLTEzMyw2ICYjNDM7MTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAogCXd4LSZndDttYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFOwogCXd4LSZndDtzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7CiYjNDM7CXd4LSZndDtkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDsKIAlzZXRfYml0KDAsICZhbXA7d3gtJmd0O2Z3ZF9iaXRtYXNrKTsKIAogCXJldHVybiAwOwpAQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7CiAKIAl3eF91cGRhdGVfc3RhdHMod3gpOwomIzQzOwl3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpOwomIzQzOwl3eF9jaGVja19lcnJfc3VidGFzayh3eCk7CiAKIAl3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTsKIH0KQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5hZGRyKTsKIAlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCkKIAl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwogfQogCi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiB7CiAJd3hfY29uZmlndXJlX3ZlY3RvcnMod3gpOwogCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKQEAgLTQ5MCw3ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAogCXd4X3B0cF9pbml0KHd4KTsKIAotCW5nYmVfdXAod3gpOwomIzQzOwluZ2JlX3VwX2NvbXBsZXRlKHd4KTsKIAogCXJldHVybiAwOwogZXJyX2Rpc19waHk6CkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0Mzt2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4X2NvbmZpZ3VyZSh3eCk7CiYjNDM7CW5nYmVfdXBfY29tcGxldGUod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCW5nYmVfZG93bih3eCk7CiAJd3hfZnJlZV9pcnEod3gpOwogCXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CiAJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwogCXBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtJmd0O3BoeWxpbmspOwomIzQzO291dDoKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQogCSplbmFibGVfd2FrZSA9ICEhd3VmYzsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbmdiZV9jbG9zZShkZXYpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKIAogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CW5ldGlmX3RyYW5zX3VwZGF0ZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJc2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CW5nYmVfZG93bih3eCk7CiYjNDM7CW5nYmVfdXAod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQomIzQzOwkJbmdiZV9yZWluaXRfbG9ja2VkKHd4KTsKJiM0MzsJZWxzZQomIzQzOwkJbmdiZV9yZXNldCh3eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtNzAwLDYgJiM0Mzs3NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTsKIAluZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOwogCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bmdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCiAJbmV0ZGV2LSZndDtmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAogCQkJICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfApAQCAtNzk2LDYgJiM0Mzs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAKJiM0MzsJZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX21hY190YWJsZTsKJiM0MzsKIAluZ2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODEyLDYgJiM0Mzs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODIzLDYgJiM0Mzs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTg1NCw2ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXBoeWxpbmtfZGVzdHJveSh3eC0mZ3Q7cGh5bGluayk7CiAJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LApAQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODkwLDYgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuJiMzNDspOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWRldmljZV93YWtldXBfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CiAKQEAgLTkxNCw2ICYjNDM7OTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0gewogCS5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLAogCS5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCkBAIC0xMjUsNSAmIzQzOzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCmluZGV4IDIwYzVhMjk1YzZjMjk2Li5kODVlZTgzMTkyZTRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9tYnguaCYjMzQ7CkBAIC05Myw2ICYjNDM7OTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiB7CiAJaW50IGVycjsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTA2LDYgJiM0MzsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTIzLDYgJiM0MzsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7CiAJdHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7CiAJd3hfdXBkYXRlX3N0YXRzKHd4KTsKJiM0MzsJd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTsKJiM0MzsJd3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpOwogCiAJd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7CiB9CkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAogCXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CkBAIC0xODcsNiAmIzQzOzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpCiAJdTggb2xkX2FkZHJbRVRIX0FMRU5dOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTsKIAlpZiAoZXJyICE9IDApCiAJCXd4X2Vycih3eCwgJiMzNDtIYXJkd2FyZSBFcnJvcjogJWRcbiYjMzQ7LCBlcnIpOwpAQCAtMjI0LDYgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCXd4X2lycV9kaXNhYmxlKHd4KTsKIAl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtMjkyLDYgJiM0MzszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KQogCXR4Z2JlX3VwX2NvbXBsZXRlKHd4KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwaHlsaW5rX3N0b3Aod3gtJmd0O3BoeWxpbmspOwomIzQzOwl3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpOwomIzQzOwl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwomIzQzOwl3eF9mcmVlX2lycSh3eCk7CiYjNDM7CXR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtJmd0O3ByaXYpOwomIzQzOwl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiYjNDM7CXR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGUKICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC00MDgsNiAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KQogCiAJd3gtJmd0O3NldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7CiAJd3gtJmd0O2RvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7CiAJc2V0X2JpdCgwLCAmYW1wO3d4LSZndDtmd2RfYml0bWFzayk7CiAKIAlzd2l0Y2ggKHd4LSZndDttYWMudHlwZSkgewpAQCAtNTE4LDEyICYjNDM7NTQ5LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCXR4Z2JlX2Rvd24od3gpOwogCXd4X2ZyZWVfaXJxKHd4KTsKIAl0eGdiZV9mcmVlX21pc2NfaXJxKHd4LSZndDtwcml2KTsKIAl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiAJdHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7CiYjNDM7b3V0OgogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAogCXJldHVybiAwOwpAQCAtNTQ0LDcgJiM0Mzs1NzksOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC02MDYsMTEgJiM0Mzs2NDIsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KQogCW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKIH0KIAotdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQogCQl0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTsKIAllbHNlCiAJCXR4Z2JlX3Jlc2V0KHd4KTsKQEAgLTY1NCw2ICYjNDM7NjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LAogCS5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSwKJiM0MzsJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsCiAJLm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsCkBAIC03NDUsNiAmIzQzOzc4Miw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7CiAJdHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDt0eGdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCW5ldGRldi0mZ3Q7dWRwX3R1bm5lbF9uaWNfaW5mbyA9ICZhbXA7dHhnYmVfdWRwX3R1bm5lbHM7CiAKIAkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KQEAgLTgxNCw2ICYjNDM7ODUyLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAomIzQzOwllcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlOwomIzQzOwogCXR4Z2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODg5LDYgJiM0Mzs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlnb3RvIGVycl9yZW1vdmVfcGh5OwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIApAQCAtOTE2LDYgJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogZXJyX2NhbmNlbF9zZXJ2aWNlOgogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIGVycl9mcmVlX21hY190YWJsZToKIAlrZnJlZSh3eC0mZ3Q7cnNzX2tleSk7CiAJa2ZyZWUod3gtJmd0O21hY190YWJsZSk7CkBAIC05NDgsNiAmIzQzOzk5Myw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJdHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKQEAgLTk1OSw3ICYjNDM7MTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0gewpAQCAtOTY5LDYgJiM0MzsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKIAkucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsCiAJLnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAppbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCkBAIC0zMTMsNyAmIzQzOzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107CiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7CiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTsKLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcCiAJdW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjIwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBXYW5neHVuIEV0aGVybmV0IERyaXZlcnMgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbiBmb3IgdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycywgYG5nYmVgIGFuZCBgdHhnYmVgLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlcyBhbmQgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyB0byBoYW5kbGUgUENJIGVycm9ycywgVHggdGltZW91dHMsIGFuZCBoYW5nIGRldGVjdGlvbi4gVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGVzZSBhcmUgcGh5c2ljYWwgUENJIGRldmljZXMsIHJpZ2h0PyBUeXBpY2FsbHksIG5ldHdvcmsgZHJpdmVycyBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgYXJlIGluYWNjZXNzaWJsZSB1bmxlc3MgdGhlcmUmIzM5O3MgZW11bGF0aW9uIGluIFFFTVUgb3Igc29tZSBzb2Z0d2FyZSBlcXVpdmFsZW50LgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBlbXVsYXRpb24uIEkgY291bGQgc2VhcmNoIGZvciBgbmdiZWAgb3IgYHR4Z2JlYCBpbiBRRU1VLCBidXQgSSBkb24mIzM5O3QgaGF2ZSB0aGUgc291cmNlIGhhbmR5LCBzbyBJJiMzOTtsbCBzZWUgaWYgdGhlIGtlcm5lbCBpdHNlbGYgaGFzIHNvZnR3YXJlIGVtdWxhdGlvbi4gQnV0IHdhaXQsIGBuZ2JlYCBhbmQgYHR4Z2JlYCAqYXJlKiBwaHlzaWNhbCBQQ0kgZGV2aWNlcy4gU28sIGlzIHRoZXJlIGFueSBjaGFuY2Ugc3l6a2FsbGVyIGNhbiBnZXQgdG8gdGhpcz8KClN5emthbGxlciBjYW4gZnV6eiBQQ0kgZGV2aWNlcyB1c2luZyB2UENJIGlmIHRoZSBkcml2ZXIgYmluZHMgdG8gaXQuIEl0IGNhbiB1c2UgYSBQQ0kgZnV6emVyIHRoYXQgcHJvYmVzIGRyaXZlcnMgYnkgbWF0Y2hpbmcgUENJIElEcyBhbmQgZnV6emluZyBNTUlPL1BJTy9jb25maWcgc3BhY2UuIElmIHRoZSBkcml2ZXIgaXMgYSBQQ0kgZHJpdmVyLCBzeXprYWxsZXIgY2FuIGhpdCB0aGUgYHByb2JlYCBmdW5jdGlvbiBhbmQgcG90ZW50aWFsbHkgb3RoZXIgZnVuY3Rpb25zIGlmIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyB0ZWxsIG1lIHRoYXQgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uIGFyZSBub3Qgd29ydGggZnV6emluZy4mIzM0OwoKU28sIGlzIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emluZyBlbm91Z2ggdG8gY29uc2lkZXIgaXQgJiMzNDtyZWFjaGFibGUmIzM0Oz8gRm9yIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMsIHdpdGhvdXQgZW11bGF0aW9uIChsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYG5ldGRldnNpbWApLCBpdCYjMzk7cyBnZW5lcmFsbHkgKnVucmVhY2hhYmxlKiBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLCB1bmxlc3Mgd2UmIzM5O3JlIGV4cGxpY2l0bHkgdGFsa2luZyBhYm91dCB0aGUgUENJIGZ1enplci4gTGV0IG1lIGNoZWNrIGlmIGBuZ2JlYCBvciBgdHhnYmVgIGFyZSB0eXBpY2FsbHkgZnV6emVkLiBCdXQgd2FpdCwgdGhlIGF1dGhvciBvZiB0aGUgY29tbWl0IGlzIGBzeXotY2x1c3RlcmAuIFRoaXMgcHJvYmFibHkgbWVhbnMgc3l6a2FsbGVyICppcyogdGVzdGluZyBhIHBhdGNoIGZvciB0aGlzIGRyaXZlci4gTm8sIHRoaXMgaXMgc3RhbmRhcmQgY29tbWl0IG1lc3NhZ2UgZm9yIHRoZSBwYXRjaCBiZWluZyB0ZXN0ZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBQQ0kgSURzIGZvciBgbmdiZWAgYW5kIGB0eGdiZWAuIENhbiBzeXprYWxsZXIgZnV6eiB0aGlzPyBZZXMsIHZpYSBgc3l6X3BjaV9wcm9iZWAuIEJ1dCBnZW5lcmFsbHksIHdlIGRvbiYjMzk7dCBjb25zaWRlciBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHdvcnRoIGZ1enppbmcgdW5sZXNzIHRoZXkgZXhwb3NlIGEgZ2VuZXJpYyBpbnRlcmZhY2UuCgpTeXprYWxsZXIgdXNlcyBhIGBzeXpfcGNpYCBwc2V1ZG8tZGV2aWNlIGluIFFFTVUgdG8gaW5qZWN0IFBDSSBkZXZpY2VzLiBTaG91bGQgd2UgZnV6eiB0aGlzPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSwgJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLiYjMzQ7IEFuZCwgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi4mIzM0OwoKV2FuZ3h1biBpcyBhIHBoeXNpY2FsIFBDSWUgRXRoZXJuZXQgY2FyZC4gVW5sZXNzIHdlIGhhdmUgaGFyZHdhcmUgcGFzc3Rocm91Z2gsIGl0JiMzOTtzIGdlbmVyYWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBmdW5jdGlvbmFsIG5ldHdvcmsgdHJhZmZpYyBwYXRocyBpbiBhIHN0YW5kYXJkIFZNLiBIb3dldmVyLCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciAqY2FuKiByZWFjaCB0aGUgYHByb2JlYCBmdW5jdGlvbiBhbmQgdHJpZ2dlciBpbnRlcnJ1cHRzIG9yIE1NSU8gYWNjZXNzZXMuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBpdCBjYW4gcmVhY2ggYHd4X3R4X3RpbWVvdXRgIG9yIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLgoKYHd4X3R4X3RpbWVvdXRgIGlzIGNhbGxlZCBieSB0aGUgbmV0ZGV2IHdhdGNoZG9nIHdoZW4gdGhlIFR4IHF1ZXVlIHRpbWVzIG91dC4gSWYgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkIGFuZCBicm91Z2h0IHVwLCB0aGVuIHNlbmRpbmcgYSBkdW1teSBwYWNrZXQgbWlnaHQgdHJpZ2dlciBgbmRvX3N0YXJ0X3htaXRgLiBJZiB0aGF0IGRvZXNuJiMzOTt0IGNvbXBsZXRlLCBgbmRvX3R4X3RpbWVvdXRgIHdpbGwgYmUgY2FsbGVkLiBCdXQgYHByb2JlYCB1c3VhbGx5IGZhaWxzIGlmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCByZXNwb25kIGNvcnJlY3RseS4gVW5sZXNzIHRoZSBQQ0kgZnV6emVyIHBlcmZlY3RseSBlbXVsYXRlcyB0aGUgTU1JTywgd2hpY2ggaXMgdW5saWtlbHkgZm9yIGEgY29tcGxleCBFdGhlcm5ldCBjb250cm9sbGVyLCBgcHJvYmVgIHdpbGwgZmFpbCwgYW5kIHRoZW4gd2Ugd2lsbCBub3QgcmVhY2ggdGhlIGZ1bmN0aW9ucyBiZWluZyBhZGRlZCBieSB0aGUgcGF0Y2guIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGVtdWxhdGlvbiBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbmd4dW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdD04PUNvbnRlbnRzOlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3QtNTktICAgdGkvaWNzc2dfcHJ1ZXRoXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYwOiAgIHdhbmd4dW4vdHhnYmVcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjE6ICAgd2FuZ3h1bi90eGdiZXZmXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYyOiAgIHdhbmd4dW4vbmdiZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MzogICB3YW5neHVuL25nYmV2ZlxuLS1cbk1BSU5UQUlORVJTPTI5MDAxPVc6XHRodHRwczovL3d3dy5uZXQtc3dpZnQuY29tXG5NQUlOVEFJTkVSUzoyOTAwMjpGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vKlxuTUFJTlRBSU5FUlM6MjkwMDM6RjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXG5NQUlOVEFJTkVSUy0yOTAwNC1GOlx0ZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXd4LmNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnPTE4Nz1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvdmlhL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc6MTg4OnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWctMTg5LXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvS2NvbmZpZ1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfTkVUX1ZFTkRPUl9WSUEpICYjNDM7PSB2aWEvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX05FVF9WRU5ET1JfV0FOR1hVTikgJiM0Mzs9IHdhbmd4dW4vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfV0laTkVUKSAmIzQzOz0gd2l6bmV0L1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zNy1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mzg6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZS5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTQzPWNvbmZpZyBUWEdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02MS1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NjI6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy03OS1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODA6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTg1PWNvbmZpZyBOR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTUtXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjk2Olx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTctXG4tLVxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA0Mj1zdGF0aWMgaW50IHBjaV9xdWlya19sb29uZ3Nvbl9hY3Moc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGFjc19mbGFncylcbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MDYyLSAqL1xuZHJpdmVycy9wY2kvcXVpcmtzLmM6NTA2MzpzdGF0aWMgaW50ICBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MDY0LXtcbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYz01MDc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3NfZW5hYmxlZCB7XG4tLVxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0My1cdC8qIFdhbmd4dW4gbmljcyAqL1xuZHJpdmVycy9wY2kvcXVpcmtzLmM6NTI0NDpcdHsgUENJX1ZFTkRPUl9JRF9XQU5HWFVOLCBQQ0lfQU5ZX0lELCBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzIH0sXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MjQ1LVx0eyAwIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ3MgoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBXYW5neHVuIEV0aGVybmV0IERyaXZlcnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChgbmdiZWAsIGB0eGdiZWAsIGBuZ2JldmZgLCBgdHhnYmV2ZmApIGFyZSBjb21wbGV0ZWx5IHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMuIFRoZXJlJiMzOTtzIHplcm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVtIHdpdGhpbiB0aGUga2VybmVsLiBXaGlsZSBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciAqbWlnaHQqIHRvdWNoIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLCBhY3R1YWxseSBoaXR0aW5nIHRoZSBUeC9SeCBwYXRocyDigJMgdGhpbmdzIGxpa2UgYHd4X2NsZWFuX3R4X2lycWAsIGB3eF90eF90aW1lb3V0YCwgb3IgYHd4X2hhbmRsZV90eF9oYW5nYCDigJMgZGVtYW5kcyBhIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBkZXZpY2UuIFRoYXQgbWVhbnMgcmVnaXN0cmF0aW9uIGFzIGEgbmV0ZGV2LCBicmluZ2luZyBpdCB1cCB2aWEgYG5kb19vcGVuYCwgYW5kIHRoZW4gcHJvY2Vzc2luZyByZWFsIFR4L1J4IHRyYWZmaWMuIEVzc2VudGlhbGx5IGltcG9zc2libGUgd2l0aG91dCBhIHJlYWwgZGV2aWNlIG9yIGEgZGVkaWNhdGVkLCBzcGVjaWFsaXplZCBlbXVsYXRvciBsaWtlIFFFTVUmIzM5O3MgZTEwMDBlLgoKVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyB3aXRoaW4gdGhpcyBwYXRjaCBzZWVtIHRvIGJlIHJlbGVnYXRlZCB0byB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQmFzZWQgb24gdGhpcywgSSYjMzk7bSB0aGlua2luZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhvbGQgb24sIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjay4gT2theSwgdGhlIHBhdGNoIGluIHF1ZXN0aW9uIGFkZHMgZXJyb3IgaGFuZGxpbmcgYW5kIFR4IGhhbmcgZGV0ZWN0aW9uIHRvIGBsaWJ3eGAsIGBuZ2JlYCwgYW5kIGB0eGdiZWAuIFRoZXNlIGFyZSB1bmVxdWl2b2NhbGx5IGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGluc3RydWN0cyBtZTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcGh5c2ljYWwgUENJZSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciB3aXRoIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiwgdGhpcyBjbGVhcmx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBJJiMzOTtsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byByZXBvcnQgdGhhdCB0aGlzIHBhdGNoJiMzOTtzIGZ1enppbmcgd29ydGggaXMgbWluaW1hbCwgYW5kIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KSB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbi4gVGhlc2UgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgd2l0aG91dCBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIFR4L1J4IHJpbmcgcHJvY2Vzc2luZyBhbmQgaGFyZHdhcmUgZXJyb3IgcmVjb3ZlcnkpIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdW5jdGlvbmFsbHkgZnV6eiBpbiBvdXIgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBHaWdhYml0IFBDSSBFeHByZXNzIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlLCBsaWJ3eCkgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggaGFuZyBkZXRlY3Rpb24uIFRoZXNlIGFyZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHdpdGhvdXQgc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgb3Igc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBUeC9SeCByaW5nIHByb2Nlc3NpbmcgYW5kIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5KSBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnVuY3Rpb25hbGx5IGZ1enogaW4gb3VyIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjU2LjU4MTI4MDU1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODUzODU4NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBHaWdhYml0IFBDSSBFeHByZXNzIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlLCBsaWJ3eCkgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggaGFuZyBkZXRlY3Rpb24uIFRoZXNlIGFyZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHdpdGhvdXQgc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgb3Igc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBUeC9SeCByaW5nIHByb2Nlc3NpbmcgYW5kIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5KSBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnVuY3Rpb25hbGx5IGZ1enogaW4gb3VyIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6NTYuNTgxMjg2MjA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTc4Njk2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyOWY5OTc1YTk2ZTNiMzI2NjUyNTk0NGI3NmQ2YmE2YjA2NGJiOGVkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMTM6MTU6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5AQCAtNCw1ICs0LDUgQEBcXG4gXFxuIG9iai0kKENPTkZJR19MSUJXWCkgKz0gbGlid3gub1xcbiBcXG4tbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXFxuK2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xcbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wY2I5OWU0NTZhMWM5N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXFxuQEAgLTAsMCArMSwzMTcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYWVyLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwid3hfdHlwZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9lcnIuaFxcXCJcXG4rXFxuKy8qKlxcbisgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGVcXG4rICpcXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXFxuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxcbisgKi9cXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbitcXG4rXFx0aWYgKCF3eClcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRuZXRkZXYgPSB3eC1cXHUwMDNlbmV0ZGV2O1xcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuK1xcdFxcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXG4rXFx0aWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xcbitcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cXG4rXFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cXG4rICpcXG4rICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXFxuKyAqL1xcbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcbitcXHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFx0fVxcbitcXG4rXFx0LyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi9cXG4rXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG4rXFx0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XFxuK1xcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb3duX3N1c3BlbmQpXFxuK1xcdFxcdHd4LVxcdTAwM2Vkb3duX3N1c3BlbmQod3gpO1xcbitcXHRpZiAod3gtXFx1MDAzZWRvX3Jlc2V0KVxcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQod3gtXFx1MDAzZW5ldGRldiwgZmFsc2UpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcXG4rICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRuZXRkZXYgPSB3eC1cXHUwMDNlbmV0ZGV2O1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHRlcnIgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19vcGVuKG5ldGRldik7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0d3hfZXJyKHd4LCBcXFwiRmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XFxuK291dDpcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlciA9IHtcXG4rXFx0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXFxuK1xcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcXG4rXFx0LnJlc3VtZSA9IHd4X2lvX3Jlc3VtZSxcXG4rfTtcXG4rRVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3eF93YXJuKHd4LCBcXFwiUmVzZXQgYWRhcHRlci5cXFxcblxcXCIpO1xcbitcXHRpZiAod3gtXFx1MDAzZWRvX3Jlc2V0KVxcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQod3gtXFx1MDAzZW5ldGRldiwgdHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xcbitcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcXG4rXFxuK291dDpcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbitcXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHF1ZXVlX3dvcmsod3gtXFx1MDAzZXJlc2V0X3dxLCBcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spO1xcbitcXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHR3eC1cXHUwMDNlcmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcIiVzX3Jlc2V0X3dxXyV4XFxcIiwgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXFxuK1xcdFxcdFxcdFxcdCAgICAgICAxLCB3eC1cXHUwMDNlZHJpdmVyX25hbWUsIHBjaV9kZXZfaWQod3gtXFx1MDAzZXBkZXYpKTtcXG4rXFx0aWYgKCF3eC1cXHUwMDNlcmVzZXRfd3EpIHtcXG4rXFx0XFx0d3hfZXJyKHd4LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXFx1MDAzZXR4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbilcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcXHUwMDI2d3gtXFx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XFxuK1xcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVxcdTAwM2VtYXNrKTtcXG4rXFx0dTMyIGksIGo7XFxuK1xcbitcXHRpZiAoIXd4LVxcdTAwM2VudW1fdmZzKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV92ZnM7IGkrKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgcV9wZXJfcG9vbDsgaisrKSB7XFxuK1xcdFxcdFxcdHUzMiBoLCB0O1xcbitcXG4rXFx0XFx0XFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcXG4rXFx0XFx0XFx0dCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChoICE9IHQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfd2F0Y2hkb2dfZmx1c2hfdHgoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICh3eF9yaW5nX3R4X3BlbmRpbmcod3gpIHx8IHd4X3ZmX3R4X3BlbmRpbmcod3gpKSB7XFxuK1xcdFxcdC8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLFxcbitcXHRcXHQgKiBidXQgd2UndmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQncyBuZXZlciBnb2luZ1xcbitcXHRcXHQgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC5cXG4rXFx0XFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHd4X3dhcm4od3gsIFxcXCJpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcXFxcblxcXCIpO1xcbitcXHRcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogSWYgd2UncmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqL1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xcbitcXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cXHUwMDNlbmV0ZGV2KSkge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0XFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHd4KTtcXG4rXFx0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTtcXG4rXFxuK3N0YXRpYyBib29sIHd4X2NoZWNrX3BjaWVfZXJyb3Ioc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHR1MTYgdmlkLCBwY2lfY21kO1xcbitcXG4rXFx0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXFx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFxcdTAwMjZ2aWQpO1xcbitcXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cXHUwMDNlcGRldiwgUENJX0NPTU1BTkQsIFxcdTAwMjZwY2lfY21kKTtcXG4rXFxuK1xcdC8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4ndCBhY2Nlc3MgKi9cXG4rXFx0aWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCBcXHUwMDI2IFBDSV9DT01NQU5EX01FTU9SWSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3JlY292ZXJ5KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWVcXG4rXFx0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcXG4rXFx0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxcbitcXHQgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC5cXG4rXFx0ICovXFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X2Vycih3eCwgXFxcIlBDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXFxcblxcXCIpO1xcbitcXHRxdWV1ZV93b3JrKHd4LVxcdTAwM2VyZXNldF93cSwgXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfd2Fybih3eCwgXFxcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXFxcblxcXCIpO1xcbitcXHR3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHd4KTtcXG4rfVxcbitcXG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCBfX2Fsd2F5c191bnVzZWQgdHhxdWV1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuK1xcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcXG4rXFx0XFx0d3hfdHhfdGltZW91dF9yZWNvdmVyeSh3eCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTtcXG4rXFxuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVxcdTAwM2VuZXRkZXYpO1xcbitcXG4rXFx0d3hfd2Fybih3eCxcXG4rXFx0XFx0XFxcIkRldGVjdGVkIFR4IFVuaXQgSGFuZzogUXVldWUgJWQsIFRESCAleCwgVERUICV4LCBudHUgJXgsIG50YyAleCwgbnRjLnRpbWVfc3RhbXAgJWx4LCBqaWZmaWVzICVseFxcXFxuXFxcIixcXG4rXFx0XFx0dHhfcmluZy1cXHUwMDNlcXVldWVfaW5kZXgsXFxuK1xcdFxcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXFx1MDAzZXJlZ19pZHgpKSxcXG4rXFx0XFx0cmQzMih3eCwgV1hfUFhfVFJfV1AodHhfcmluZy1cXHUwMDNlcmVnX2lkeCkpLFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcXG4rXFx0XFx0dHhfcmluZy1cXHUwMDNldHhfYnVmZmVyX2luZm9bbmV4dF0udGltZV9zdGFtcCwgamlmZmllcyk7XFxuK1xcbitcXHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXFx1MDAzZW5ldGRldiwgdHhfcmluZy1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbitcXG4rXFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXFxuQEAgLTAsMCArMSwxOCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXFxuKyAqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfV1hfRVJSX0hfXFxuKyNkZWZpbmUgX1dYX0VSUl9IX1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXI7XFxuK1xcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XFxuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KTtcXG4rXFxuKyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5pbmRleCA1ZGY5NzFhY2E5ZTM1Zi4uZDEzNTZmZjVkNjliNTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbkBAIC0zOTUsNyArMzk1LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXFxuIFxcdGlmIChuZWVkX3Jlc2V0IFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb19yZXNldClcXG4tXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xcbiB9XFxuIFxcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyaW5nLVxcdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xcbiBcXG4rXFx0Yml0bWFwX3plcm8ocmluZy1cXHUwMDNlc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cXG4gXFx0bWVtc2V0KHJpbmctXFx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxcbiBcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF90eF9idWZmZXIpICogcmluZy1cXHUwMDNlY291bnQpO1xcbkBAIC0yODUxLDE2ICsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcXG4gc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0c3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gXFx1MDAyNnd4LVxcdTAwM2VzdGF0cztcXG4rXFx0dTY0IGRhdGE7XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0aWYgKHd4LVxcdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHd4LVxcdTAwM2VmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAod3gtXFx1MDAzZW1hYy50eXBlIFxcdTAwM2U9IHd4X21hY19hbWwpXFxuLVxcdFxcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ3eC1cXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XFxuK1xcdFxcdGRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2d3gtXFx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XFxuK1xcdFxcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xcbitcXHRod3N0YXRzLVxcdTAwM2VseG9mZnJ4YyArPSBkYXRhO1xcbitcXG4rXFx0LyogcmVmaWxsIGNyZWRpdHMgKG5vIHR4IGhhbmcpIGlmIHdlIHJlY2VpdmVkIHhvZmYgKi9cXG4rXFx0aWYgKCFkYXRhKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbmluZGV4IDgxNGQ4OGQyYWVlNDg3Li5hNjUzMTJjODA3OGZhOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwid3hfdHlwZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X3ZmX2xpYi5oXFxcIlxcbkBAIC03NDIsNiArNzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbiBcXHRyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLVxcdTAwM2VuZXRkZXYsIHJpbmctXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcXG4rXFxuK1xcdGhlYWQgPSByaW5nLVxcdTAwM2VuZXh0X3RvX2NsZWFuO1xcbitcXHR0YWlsID0gcmluZy1cXHUwMDNlbmV4dF90b191c2U7XFxuK1xcbitcXHRyZXR1cm4gKChoZWFkIFxcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgKyByaW5nLVxcdTAwM2Vjb3VudCkgLSBoZWFkO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbit7XFxuK1xcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXFx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkO1xcbitcXHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xcbitcXHR1MzIgdHhfZG9uZSA9IHJpbmctXFx1MDAzZXN0YXRzLnBhY2tldHM7XFxuK1xcbitcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSBcXHUwMDI2XFx1MDAyNiB0eF9wZW5kaW5nKVxcbitcXHRcXHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xcbitcXHRcXHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xcbitcXHRyaW5nLVxcdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7XFxuK1xcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cXG4rXFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHd4X2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlc1xcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxcbkBAIC04NjYsNiArODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxcbiBcXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksXFxuIFxcdFxcdFxcdFxcdCAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpO1xcbiBcXG4rXFx0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcXG4rXFx0XFx0d3hfaGFuZGxlX3R4X2hhbmcodHhfcmluZywgaSk7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXFxuIFxcdGlmICh1bmxpa2VseSh0b3RhbF9wYWNrZXRzIFxcdTAwMjZcXHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cXHUwMDNlbmV0ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcXHUwMDNlPSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7XFxuQEAgLTMxMTIsNyArMzE0OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgPSBmZWF0dXJlcztcXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIFxcdGVsc2UgaWYgKGNoYW5nZWQgXFx1MDAyNiAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxcbiBcXHRcXHR3eF9zZXRfcnhfbW9kZShuZXRkZXYpO1xcbiBcXG5AQCAtMzE2Miw3ICszMTk5LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFxuIG91dDpcXG4gXFx0aWYgKG5lZWRfcmVzZXQgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zMzQ2LDUgKzMzODMsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7XFxuIFxcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSB8fFxcbitcXHQgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwY2lfY2xlYXJfbWFzdGVyKHd4LVxcdTAwM2VwZGV2KTtcXG4rXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRuZXRpZl9jYXJyaWVyX29mZih3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0bmV0aWZfdHhfZGlzYWJsZSh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuK1xcdHd4X3B0cF9xdWllc2NlKHd4KTtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpO1xcbitcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuaW5kZXggYWVkNmVhOGNmMGQ2NGEuLjExYmQ3OTk4NWUxNzEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuQEAgLTQxLDUgKzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIFxcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi5hMjVlYjZhZWQ1NjYwZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbkBAIC0zMjEsNiArMzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XFxuIFxcdGludCB0c19kb25lO1xcbiBcXG4rXFx0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIEhaO1xcbitcXG4gXFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcXG4gXFxuIFxcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XFxuQEAgLTg0Miw2ICs4NDUsMjQgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xcbiBcXG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcbitcXHRpZiAod3gtXFx1MDAzZXB0cF9jbG9jaylcXG4rXFx0XFx0cHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX3R4X3NrYikge1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cXHUwMDNlcHRwX3R4X3NrYik7XFxuK1xcdFxcdHd4LVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4rXFx0fVxcbitcXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcXG4rXFxuIC8qKlxcbiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcFxcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuaW5kZXggNTBkYjkwYTZlM2VlNjYuLmFkMmY4MjQ4NzVkNTFiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuQEAgLTEwLDYgKzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbmluZGV4IDY1ZTNlNTVkYjFjZmZiLi5hYTM1N2UyNjBjNGM1MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTQ1MCw2ICs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXFxuIFxcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfUlAoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbitcXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXFxuQEAgLTEwNDAsNiArMTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XFxuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XFxuIFxcdHU2NCByZXN0YXJ0X3F1ZXVlO1xcbiBcXHR1NjQgdHhfYnVzeTtcXG4rXFx0dTMyIHR4X2RvbmVfb2xkO1xcbiB9O1xcbiBcXG4gc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcXG5AQCAtMTA1NSw2ICsxMDYxLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XFxuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcXFxcbiBcXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVxcdTAwM2VuZXh0KVxcbiBcXG4rZW51bSB3eF9yaW5nX3N0YXRlIHtcXG4rXFx0V1hfVFhfREVURUNUX0hBTkcsXFxuK1xcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXFxuK1xcdFdYX1JJTkdfU1RBVEVfTkJJVFNcXG4rfTtcXG4rXFxuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XFxuIFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xcbkBAIC0xMDc0LDYgKzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XFxuIFxcdFxcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xcbiBcXHRcXHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcXG4gXFx0fTtcXG4rXFx0REVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHR1OCBfX2lvbWVtICp0YWlsO1xcbiBcXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXFxuIFxcdGRtYV9hZGRyX3QgaGVhZHdiX2RtYTtcXG5AQCAtMTIwOSw2ICsxMjIyLDggQEAgZW51bSB3eF9zdGF0ZSB7XFxuIFxcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxcbiBcXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXFxuIFxcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXFxuK1xcdFdYX1NUQVRFX0RJU0FCTEVELFxcbitcXHRXWF9TVEFURV9SRVNfRlJFRUQsXFxuIFxcdFdYX1NUQVRFX05CSVRTXFx0XFx0LyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMjc1LDYgKzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcXG4gXFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxcbiBcXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXFxuIFxcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXFxuK1xcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcXG4rXFx0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXFxuIFxcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMzk1LDcgKzE0MTIsOCBAQCBzdHJ1Y3Qgd3gge1xcbiBcXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcXG4gXFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcXG4tXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4rXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuK1xcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuQEAgLTE0MjMsNiArMTQ0MSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXFxuIH07XFxuIFxcbkBAIC0xNTA1LDcgKzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxcbiBcXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9lcnIoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4tXFxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9kYmcoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG5AQCAtNTksNyArNTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XFxuIFxcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcbiBcXG4tXFx0d3hfY29uZmlndXJlKHd4KTtcXG4gXFx0bmdiZV91cCh3eCk7XFxuIFxcbiBjbGVhcl9yZXNldDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbkBAIC00Niw2ICs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XFxuIFxcdHsgfVxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBoeWxpbmtfc3RvcCh3eC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xcbitcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbitcXHR3eF9mcmVlX2lycSh3eCk7XFxuK1xcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuK1xcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtMTMzLDYgKzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHR3eC1cXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcXG4gXFx0d3gtXFx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcXG4rXFx0d3gtXFx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kO1xcbiBcXHRzZXRfYml0KDAsIFxcdTAwMjZ3eC1cXHUwMDNlZndkX2JpdG1hc2spO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE0Nyw2ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xcbiBcXG4gXFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcXG4rXFx0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcXG4rXFx0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xcbiBcXG4gXFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XFxuIH1cXG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcXG4gXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFxuIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4ge1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMuYWRkcik7XFxuIFxcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG5AQCAtNDIzLDEzICs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4gfVxcbiBcXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuK3N0YXRpYyB2b2lkIG5nYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHR3eF9jb25maWd1cmVfdmVjdG9ycyh3eCk7XFxuIFxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXFx1MDAzZW5ldGRldik7XFxuQEAgLTQ5MCw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXG4gXFx0d3hfcHRwX2luaXQod3gpO1xcbiBcXG4tXFx0bmdiZV91cCh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIGVycl9kaXNfcGh5OlxcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHd4X2NvbmZpZ3VyZSh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2VcXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxcbkBAIC01MTgsMTIgKzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHRuZ2JlX2Rvd24od3gpO1xcbiBcXHR3eF9mcmVlX2lycSh3eCk7XFxuIFxcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuIFxcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4gXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cXHUwMDNlcGh5bGluayk7XFxuK291dDpcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTU1NSw3ICs1ODksOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXFxuIFxcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5AQCAtNTkwLDYgKzYyNSw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHQgKi9cXG4gXFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcXG4gXFx0XFx0bmdiZV9jbG9zZShkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5nYmVfcmVzZXQod3gpO1xcbiBcXG4gXFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIFxcbkBAIC02MDYsMTEgKzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnd4LVxcdTAwM2VyZXNldF9sb2NrKTtcXG4rXFx0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRuZ2JlX2Rvd24od3gpO1xcbitcXHRuZ2JlX3VwKHd4KTtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbit9XFxuK1xcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4rXFx0XFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZ2JlX3Jlc2V0KHd4KTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXFxuIFxcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxcbitcXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcXG5AQCAtNzAwLDYgKzc2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0d3gtXFx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNm5nYmVfbmV0ZGV2X29wcztcXG4rXFx0bmV0ZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcXG4gXFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxcbkBAIC03OTYsNiArODU5LDEwIEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcbitcXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XFxuK1xcbiBcXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04MTIsNiArODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC04MjMsNiArODkxLDggQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIGVycl9mcmVlX21hY190YWJsZTpcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZXJzc19rZXkpO1xcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG5AQCAtODU0LDYgKzkyNCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBcXG4gXFx0cGh5bGlua19kZXN0cm95KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxcbkBAIC04NjMsNyArOTM1LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXFxuQEAgLTg5MCw2ICs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHR3eF9lcnIod3gsIFxcXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiBcXHRkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbkBAIC05MTQsNiArOTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xcbiBcXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcXG4gXFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXFxuaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbkBAIC0xMjUsNSArMTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuIFxcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggMjBjNWEyOTVjNmMyOTYuLmQ4NWVlODMxOTJlNGZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG5AQCAtOTMsNiArOTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTEwNiw2ICsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0xMjMsNiArMTMyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcXG4gXFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XFxuIFxcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XFxuK1xcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XFxuK1xcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcXG4gXFxuIFxcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xcbiB9XFxuQEAgLTE0NCw2ICsxNTUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtMTg3LDYgKzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuIFxcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xcbiBcXHRpZiAoZXJyICE9IDApXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkhhcmR3YXJlIEVycm9yOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG5AQCAtMjI0LDYgKzIzOSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHd4X2lycV9kaXNhYmxlKHd4KTtcXG4gXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuIFxcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4gXFxuQEAgLTI5Miw2ICszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcXG4rXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4rXFx0d3hfZnJlZV9pcnEod3gpO1xcbitcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbitcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXFxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXFxuQEAgLTQwOCw2ICs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xcbiBcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcXG4gXFx0c2V0X2JpdCgwLCBcXHUwMDI2d3gtXFx1MDAzZWZ3ZF9iaXRtYXNrKTtcXG4gXFxuIFxcdHN3aXRjaCAod3gtXFx1MDAzZW1hYy50eXBlKSB7XFxuQEAgLTUxOCwxMiArNTQ5LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHR0eGdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbiBcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTQ0LDcgKzU3OSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC02MDYsMTEgKzY0MiwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbiB9XFxuIFxcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4gXFx0XFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0dHhnYmVfcmVzZXQod3gpO1xcbkBAIC02NTQsNiArNjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxcbiBcXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcXG4rXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxcbiBcXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXFxuQEAgLTc0NSw2ICs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0dHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XFxuIFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xcbitcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xcbiBcXHRuZXRkZXYtXFx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XFxuIFxcbiBcXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cXG5AQCAtODE0LDYgKzg1MiwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04ODksNiArOTMxLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcbkBAIC05MTYsNiArOTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBlcnJfZnJlZV9tYWNfdGFibGU6XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2Vyc3Nfa2V5KTtcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuQEAgLTk0OCw2ICs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHR0eGdiZV9yZW1vdmVfcGh5KHR4Z2JlKTtcXG4gXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG5AQCAtOTU5LDcgKzEwMDYsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XFxuQEAgLTk2OSw2ICsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG4gXFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxcbiBcXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG5pbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcXG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4gXFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxcXFxuIFxcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNTo1Ny40ODExNTkzOTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTUzOTcwNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBHaWdhYml0IFBDSSBFeHByZXNzIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlLCBsaWJ3eCkgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggaGFuZyBkZXRlY3Rpb24uIFRoZXNlIGFyZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHdpdGhvdXQgc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgb3Igc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBUeC9SeCByaW5nIHByb2Nlc3NpbmcgYW5kIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5KSBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnVuY3Rpb25hbGx5IGZ1enogaW4gb3VyIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyOWY5OTc1YTk2ZTNiMzI2NjUyNTk0NGI3NmQ2YmE2YjA2NGJiOGVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxMzoxNTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5AQCAtNCw1ICs0LDUgQEBcbiBcbiBvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbitsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wY2I5OWU0NTZhMWM5N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCArMSwzMTcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4rI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4rXG4rLyoqXG4rICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxuKyAqXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4rXG4rXHRpZiAoIXd4KVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXG4rXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXG4rXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcbit9XG4rXG4rLyoqXG4rICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC5cbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICpcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4rICpcbisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cbisgKi9cbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXG4rXHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XG4rXHRcdHd4X2Vycih3eCwgXCJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXFxuXCIpO1xuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcdH1cbitcbitcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4rXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbitcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbitcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xuK1x0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvd25fc3VzcGVuZClcbitcdFx0d3gtXHUwMDNlZG93bl9zdXNwZW5kKHd4KTtcbitcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcbit9XG4rXG4rLyoqXG4rICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICpcbisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxuKyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuK1x0cnRubF9sb2NrKCk7XG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4rXHRcdGVyciA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHR3eF9lcnIod3gsIFwiRmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxuXCIpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHR9XG4rXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4rb3V0OlxuK1x0cnRubF91bmxvY2soKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlciA9IHtcbitcdC5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLFxuK1x0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxuK1x0LnJlc3VtZSA9IHd4X2lvX3Jlc3VtZSxcbit9O1xuK0VYUE9SVF9TWU1CT0wod3hfZXJyX2hhbmRsZXIpO1xuK1xuK3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3hfd2Fybih3eCwgXCJSZXNldCBhZGFwdGVyLlxcblwiKTtcbitcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spO1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbitcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XG4rXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcIiVzX3Jlc2V0X3dxXyV4XCIsIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxuK1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbitcdGlmICghd3gtXHUwMDNlcmVzZXRfd3EpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdElOSVRfV09SSyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xuK1xuK3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcbitcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFx1MDAyNnd4LVx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XG4rXHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cdTAwM2VtYXNrKTtcbitcdHUzMiBpLCBqO1xuK1xuK1x0aWYgKCF3eC1cdTAwM2VudW1fdmZzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdmZzOyBpKyspIHtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgcV9wZXJfcG9vbDsgaisrKSB7XG4rXHRcdFx0dTMyIGgsIHQ7XG4rXG4rXHRcdFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbitcdFx0XHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuK1xuK1x0XHRcdGlmIChoICE9IHQpXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xuK1x0XHQvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbitcdFx0ICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmdcbitcdFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXG4rXHRcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXG4rXHRcdCAqL1xuK1x0XHR3eF93YXJuKHd4LCBcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcblwiKTtcbitcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qIElmIHdlJ3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbitcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuK1x0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0fVxuK31cbitcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuK1x0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4rXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHUxNiB2aWQsIHBjaV9jbWQ7XG4rXG4rXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuK1x0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXHUwMDNlcGRldiwgUENJX0NPTU1BTkQsIFx1MDAyNnBjaV9jbWQpO1xuK1xuK1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbid0IGFjY2VzcyAqL1xuK1x0aWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCBcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcbit7XG4rXHQvKlxuK1x0ICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWVcbitcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSXG4rXHQgKiBkcml2ZXIgZm9yIGN1cnJlbnQga2VybmVsIHBvbGljeS4gVGhlcmVmb3JlLCBhIHNlbGYtY29udGFpbmVkXG4rXHQgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC5cbitcdCAqL1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0d3hfZXJyKHd4LCBcIlBDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXG5cIik7XG4rXHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF93YXJuKHd4LCBcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXG5cIik7XG4rXHR3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHd4KTtcbit9XG4rXG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCBfX2Fsd2F5c191bnVzZWQgdHhxdWV1ZSlcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcbitcdFx0d3hfdHhfdGltZW91dF9yZWNvdmVyeSh3eCk7XG4rXHRlbHNlXG4rXHRcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xuK1xuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVx1MDAzZW5ldGRldik7XG4rXG4rXHR3eF93YXJuKHd4LFxuK1x0XHRcIkRldGVjdGVkIFR4IFVuaXQgSGFuZzogUXVldWUgJWQsIFRESCAleCwgVERUICV4LCBudHUgJXgsIG50YyAleCwgbnRjLnRpbWVfc3RhbXAgJWx4LCBqaWZmaWVzICVseFxcblwiLFxuK1x0XHR0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4LFxuK1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbitcdFx0cmQzMih3eCwgV1hfUFhfVFJfV1AodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4rXHRcdHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UsIG5leHQsXG4rXHRcdHR4X3JpbmctXHUwMDNldHhfYnVmZmVyX2luZm9bbmV4dF0udGltZV9zdGFtcCwgamlmZmllcyk7XG4rXG4rXHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbitcbitcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCArMSwxOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXG4rICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cbisgKi9cbitcbisjaWZuZGVmIF9XWF9FUlJfSF9cbisjZGVmaW5lIF9XWF9FUlJfSF9cbitcbitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xuK1xuKyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggNWRmOTcxYWNhOWUzNWYuLmQxMzU2ZmY1ZDY5YjU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5AQCAtMzk1LDcgKzM5NSw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqL1xuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIH1cbiBcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAyNjBlMTRkNWQ1NDEyMS4uMTIyYzQ5NTJkMjAzZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuQEAgLTE5MzIsNiArMTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsXG4gXHRlbHNlXG4gXHRcdHJpbmctXHUwMDNlYXRyX3NhbXBsZV9yYXRlID0gMDtcbiBcbitcdGJpdG1hcF96ZXJvKHJpbmctXHUwMDNlc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xuIFx0LyogcmVpbml0aWFsaXplIHR4X2J1ZmZlcl9pbmZvICovXG4gXHRtZW1zZXQocmluZy1cdTAwM2V0eF9idWZmZXJfaW5mbywgMCxcbiBcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVx1MDAzZWNvdW50KTtcbkBAIC0yODUxLDE2ICsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcdTAwMjZ3eC1cdTAwM2VzdGF0cztcbitcdHU2NCBkYXRhO1xuK1x0aW50IGk7XG4gXG4gXHRpZiAod3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19mdWxsIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHd4LVx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICh3eC1cdTAwM2VtYWMudHlwZSBcdTAwM2U9IHd4X21hY19hbWwpXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4rXHRcdGRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4rXHRcdFx0XHQgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4gXHRlbHNlXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbitcdFx0ZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XG4rXHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICs9IGRhdGE7XG4rXG4rXHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xuK1x0aWYgKCFkYXRhKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4rXHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IDgxNGQ4OGQyYWVlNDg3Li5hNjUzMTJjODA3OGZhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCJ3eF90eXBlLmhcIlxuICNpbmNsdWRlIFwid3hfbGliLmhcIlxuKyNpbmNsdWRlIFwid3hfZXJyLmhcIlxuICNpbmNsdWRlIFwid3hfcHRwLmhcIlxuICNpbmNsdWRlIFwid3hfaHcuaFwiXG4gI2luY2x1ZGUgXCJ3eF92Zl9saWIuaFwiXG5AQCAtNzQyLDYgKzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4rc3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbit7XG4rXHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbitcbitcdGhlYWQgPSByaW5nLVx1MDAzZW5leHRfdG9fY2xlYW47XG4rXHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbitcbitcdHJldHVybiAoKGhlYWQgXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuK3tcbitcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XG4rXHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuK1x0dTMyIHR4X2RvbmUgPSByaW5nLVx1MDAzZXN0YXRzLnBhY2tldHM7XG4rXG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuK1x0XHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xuK1x0XHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXG4rXHRyaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcbitcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbitcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cbkBAIC04NjYsNiArODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4rXHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xuK1x0XHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxuIFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXHUwMDI2XHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcbkBAIC0zMTEyLDcgKzMxNDksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFx0ZWxzZSBpZiAoY2hhbmdlZCBcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcbiBcdFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcbiBcbkBAIC0zMTYyLDcgKzMxOTksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFxuIG91dDpcbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzQ2LDUgKzMzODMsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xuIFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbitcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGNpX2NsZWFyX21hc3Rlcih3eC1cdTAwM2VwZGV2KTtcbitcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuK1x0bmV0aWZfY2Fycmllcl9vZmYod3gtXHUwMDNlbmV0ZGV2KTtcbitcdG5ldGlmX3R4X2Rpc2FibGUod3gtXHUwMDNlbmV0ZGV2KTtcbitcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuK1x0d3hfcHRwX3F1aWVzY2Uod3gpO1xuK1xuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbitcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuaW5kZXggYWVkNmVhOGNmMGQ2NGEuLjExYmQ3OTk4NWUxNzEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuQEAgLTQxLDUgKzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NGYzZTY1MDUyNDY4Zi4uYTI1ZWI2YWVkNTY2MGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5AQCAtMzIxLDYgKzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cClcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcbiBcdGludCB0c19kb25lO1xuIFxuK1x0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm4gSFo7XG4rXG4gXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xuIFxuIFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcbkBAIC04NDIsNiArODQ1LDI0IEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XG4gXG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1xuK1x0aWYgKHd4LVx1MDAzZXB0cF9jbG9jaylcbitcdFx0cHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC1cdTAwM2VwdHBfY2xvY2spO1xuK1xuK1x0aWYgKHd4LVx1MDAzZXB0cF90eF9za2IpIHtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXHUwMDNlcHRwX3R4X3NrYik7XG4rXHRcdHd4LVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuK1x0fVxuK1x0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4rXG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTY2Li5hZDJmODI0ODc1ZDUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICsxMCw3IEBAIHZvaWQgd3hfcHRwX3Jlc2V0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuaW5kZXggNjVlM2U1NWRiMWNmZmIuLmFhMzU3ZTI2MGM0YzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtNDUwLDYgKzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4rI2RlZmluZSBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXG4rXHRcdChXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXG4rI2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXG4rXHRcdChXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXG4rXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXG4gI2RlZmluZSBXWF9QWF9SUl9CQUwoX2kpICAgICAgICAgICAgICgweDAxMDAwICsgKChfaSkgKiAweDQwKSlcbiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgKyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwNDAsNiArMTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XG4gc3RydWN0IHd4X3R4X3F1ZXVlX3N0YXRzIHtcbiBcdHU2NCByZXN0YXJ0X3F1ZXVlO1xuIFx0dTY0IHR4X2J1c3k7XG4rXHR1MzIgdHhfZG9uZV9vbGQ7XG4gfTtcbiBcbiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuQEAgLTEwNTUsNiArMTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbitlbnVtIHd4X3Jpbmdfc3RhdGUge1xuK1x0V1hfVFhfREVURUNUX0hBTkcsXG4rXHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuK1x0V1hfUklOR19TVEFURV9OQklUU1xuK307XG4rXG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDc0LDYgKzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XG4gXHRcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xuIFx0XHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcbiBcdH07XG4rXHRERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHR1OCBfX2lvbWVtICp0YWlsO1xuIFx0ZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqL1xuIFx0ZG1hX2FkZHJfdCBoZWFkd2JfZG1hO1xuQEAgLTEyMDksNiArMTIyMiw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuK1x0V1hfU1RBVEVfRElTQUJMRUQsXG4rXHRXWF9TVEFURV9SRVNfRlJFRUQsXG4gXHRXWF9TVEFURV9OQklUU1x0XHQvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEyNzUsNiArMTI5MCw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbitcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcbitcdFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLFxuIFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEzOTUsNyArMTQxMiw4IEBAIHN0cnVjdCB3eCB7XG4gXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcbiBcdHZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xuLVx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbitcdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuK1x0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdHZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7XG4gXG5AQCAtMTQyMyw2ICsxNDQxLDggQEAgc3RydWN0IHd4IHtcbiBcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7XG4rXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XG4gXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXG4gfTtcbiBcbkBAIC0xNTA1LDcgKzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxuIFxuICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9lcnIoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbi1cbisjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcXFxuK1x0ZGV2X3dhcm4oXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZGJnKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5pbmRleCBiMmUxOTE5ODI4MDMyNi4uMTk2MGY3MTU0MTUxZGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTU5LDcgKzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF90eXBlLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfaHcuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9saWIuaFwiXG4rI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9lcnIuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9wdHAuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9tYnguaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9zcmlvdi5oXCJcbkBAIC00Niw2ICs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XG4gXHR7IH1cbiB9O1xuIFxuK3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbitcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4rXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuK1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbitcdHd4X2ZyZWVfaXJxKHd4KTtcbitcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4rXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4rfVxuK1xuIC8qKlxuICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTEzMyw2ICsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcbitcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbitcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xNDcsNiArMTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XG4gXG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuK1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbitcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0zOTIsNiArNDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG4gXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiArNDI4LDkgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFxuIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiB7XG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0d3hfZmx1c2hfc3dfbWFjX3RhYmxlKHd4KTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5hZGRyKTtcbiBcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuQEAgLTQyMywxMyArNDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuIH1cbiBcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbitzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFx0LyogZW5hYmxlIHRyYW5zbWl0cyAqL1xuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuQEAgLTQ5MCw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFxuIFx0d3hfcHRwX2luaXQod3gpO1xuIFxuLVx0bmdiZV91cCh3eCk7XG4rXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICs1MjcsMTIgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHd4X2NvbmZpZ3VyZSh3eCk7XG4rXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbit9XG4rXG4gLyoqXG4gICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2VcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXG5AQCAtNTE4LDEyICs1NDgsMTYgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0bmdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuK291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU1NSw3ICs1ODksOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXG4gXHQqZW5hYmxlX3dha2UgPSAhIXd1ZmM7XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICs2MjUsOCBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdCAqL1xuIFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbiBcdFx0bmdiZV9jbG9zZShkZXYpO1xuK1x0ZWxzZVxuK1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSArNjQzLDM2IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cdTAwM2VuZXRkZXYpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbitcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRuZ2JlX2Rvd24od3gpO1xuK1x0bmdiZV91cCh3eCk7XG4rXG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4rfVxuK1xuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbitcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbitcdGVsc2VcbitcdFx0bmdiZV9yZXNldCh3eCk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sXG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4rXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03MDAsNiArNzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxuQEAgLTc5Niw2ICs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbitcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4rXG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbitcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtODIzLDYgKzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTg1NCw2ICs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0cGh5bGlua19kZXN0cm95KHd4LVx1MDAzZXBoeWxpbmspO1xuIFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxuQEAgLTg2Myw3ICs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG5AQCAtODkwLDYgKzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxuXCIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgKzk4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2JlX2RyaXZlciA9IHtcbiBcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxuIFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5pbmRleCA3MDc3YTBkYTRjOTg2YS4uYzkyMzNkYzdhZTUwNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuaW5kZXggMjBjNWEyOTVjNmMyOTYuLmQ4NWVlODMxOTJlNGZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuIFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2xpYi5oXCJcbisjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2Vyci5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3B0cC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuQEAgLTkzLDYgKzk0LDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEwNiw2ICsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjMsNiArMTMyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7XG4gXHR0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTtcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4rXHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuK1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTE0NCw2ICsxNTUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTE4Nyw2ICsxOTksOSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xuIFx0aW50IGVycjtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XG4gXHRpZiAoZXJyICE9IDApXG4gXHRcdHd4X2Vycih3eCwgXCJIYXJkd2FyZSBFcnJvcjogJWRcXG5cIiwgZXJyKTtcbkBAIC0yMjQsNiArMjM5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdHd4X2lycV9kaXNhYmxlKHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuIFxuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtMjkyLDYgKzMwOCwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4gXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4rXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuK1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbitcdHd4X2ZyZWVfaXJxKHd4KTtcbitcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4rXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4rXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbit9XG4rXG4gLyoqXG4gICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTQwOCw2ICs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XG4gXHR3eC1cdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xuK1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtNTE4LDEyICs1NDksMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdHd4X3B0cF9zdG9wKHd4KTtcbiBcdHR4Z2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuK291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU0NCw3ICs1NzksOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC02MDYsMTEgKzY0MiwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4gfVxuIFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiBcdFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4gXHRlbHNlXG4gXHRcdHR4Z2JlX3Jlc2V0KHd4KTtcbkBAIC02NTQsNiArNjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSB0eGdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbitcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTc0NSw2ICs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcbiBcdHR4Z2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFx0bmV0ZGV2LVx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcdTAwMjZ0eGdiZV91ZHBfdHVubmVscztcbiBcbiBcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xuQEAgLTgxNCw2ICs4NTIsMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXG4rXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xuK1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgKzkzMSw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlbW92ZV9waHk7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuK1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcbkBAIC05MTYsNiArOTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTk0OCw2ICs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NTksNyArMTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTY5LDYgKzEwMTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbitcdC5lcnJfaGFuZGxlciA9IFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxuIH07XG4gXG4gbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5pbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXG4gXHR1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjU3LjQ4MTE2MjMyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNjUzNTYyMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIFdhbmd4dW4gRXRoZXJuZXQgRHJpdmVycyBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gd2UndmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbiBmb3IgdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycywgYG5nYmVgIGFuZCBgdHhnYmVgLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlcyBhbmQgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyB0byBoYW5kbGUgUENJIGVycm9ycywgVHggdGltZW91dHMsIGFuZCBoYW5nIGRldGVjdGlvbi4gVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGVzZSBhcmUgcGh5c2ljYWwgUENJIGRldmljZXMsIHJpZ2h0PyBUeXBpY2FsbHksIG5ldHdvcmsgZHJpdmVycyBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgYXJlIGluYWNjZXNzaWJsZSB1bmxlc3MgdGhlcmUncyBlbXVsYXRpb24gaW4gUUVNVSBvciBzb21lIHNvZnR3YXJlIGVxdWl2YWxlbnQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgZW11bGF0aW9uLiBJIGNvdWxkIHNlYXJjaCBmb3IgYG5nYmVgIG9yIGB0eGdiZWAgaW4gUUVNVSwgYnV0IEkgZG9uJ3QgaGF2ZSB0aGUgc291cmNlIGhhbmR5LCBzbyBJJ2xsIHNlZSBpZiB0aGUga2VybmVsIGl0c2VsZiBoYXMgc29mdHdhcmUgZW11bGF0aW9uLiBCdXQgd2FpdCwgYG5nYmVgIGFuZCBgdHhnYmVgICphcmUqIHBoeXNpY2FsIFBDSSBkZXZpY2VzLiBTbywgaXMgdGhlcmUgYW55IGNoYW5jZSBzeXprYWxsZXIgY2FuIGdldCB0byB0aGlzP1xuXG5TeXprYWxsZXIgY2FuIGZ1enogUENJIGRldmljZXMgdXNpbmcgdlBDSSBpZiB0aGUgZHJpdmVyIGJpbmRzIHRvIGl0LiBJdCBjYW4gdXNlIGEgUENJIGZ1enplciB0aGF0IHByb2JlcyBkcml2ZXJzIGJ5IG1hdGNoaW5nIFBDSSBJRHMgYW5kIGZ1enppbmcgTU1JTy9QSU8vY29uZmlnIHNwYWNlLiBJZiB0aGUgZHJpdmVyIGlzIGEgUENJIGRyaXZlciwgc3l6a2FsbGVyIGNhbiBoaXQgdGhlIGBwcm9iZWAgZnVuY3Rpb24gYW5kIHBvdGVudGlhbGx5IG90aGVyIGZ1bmN0aW9ucyBpZiB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQuIEhvd2V2ZXIsIHRoZSBpbnN0cnVjdGlvbnMgdGVsbCBtZSB0aGF0IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiBhcmUgbm90IHdvcnRoIGZ1enppbmcuXCJcblxuU28sIGlzIHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGVub3VnaCB0byBjb25zaWRlciBpdCBcInJlYWNoYWJsZVwiPyBGb3IgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycywgd2l0aG91dCBlbXVsYXRpb24gKGxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgbmV0ZGV2c2ltYCksIGl0J3MgZ2VuZXJhbGx5ICp1bnJlYWNoYWJsZSogZm9yIGZ1bmN0aW9uYWwgZnV6emluZywgdW5sZXNzIHdlJ3JlIGV4cGxpY2l0bHkgdGFsa2luZyBhYm91dCB0aGUgUENJIGZ1enplci4gTGV0IG1lIGNoZWNrIGlmIGBuZ2JlYCBvciBgdHhnYmVgIGFyZSB0eXBpY2FsbHkgZnV6emVkLiBCdXQgd2FpdCwgdGhlIGF1dGhvciBvZiB0aGUgY29tbWl0IGlzIGBzeXotY2x1c3RlcmAuIFRoaXMgcHJvYmFibHkgbWVhbnMgc3l6a2FsbGVyICppcyogdGVzdGluZyBhIHBhdGNoIGZvciB0aGlzIGRyaXZlci4gTm8sIHRoaXMgaXMgc3RhbmRhcmQgY29tbWl0IG1lc3NhZ2UgZm9yIHRoZSBwYXRjaCBiZWluZyB0ZXN0ZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgUENJIElEcyBmb3IgYG5nYmVgIGFuZCBgdHhnYmVgLiBDYW4gc3l6a2FsbGVyIGZ1enogdGhpcz8gWWVzLCB2aWEgYHN5el9wY2lfcHJvYmVgLiBCdXQgZ2VuZXJhbGx5LCB3ZSBkb24ndCBjb25zaWRlciBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHdvcnRoIGZ1enppbmcgdW5sZXNzIHRoZXkgZXhwb3NlIGEgZ2VuZXJpYyBpbnRlcmZhY2UuXG5cblN5emthbGxlciB1c2VzIGEgYHN5el9wY2lgIHBzZXVkby1kZXZpY2UgaW4gUUVNVSB0byBpbmplY3QgUENJIGRldmljZXMuIFNob3VsZCB3ZSBmdXp6IHRoaXM/IFRoZSBpbnN0cnVjdGlvbnMgc2F5LCBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgQW5kLCBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlwiXG5cbldhbmd4dW4gaXMgYSBwaHlzaWNhbCBQQ0llIEV0aGVybmV0IGNhcmQuIFVubGVzcyB3ZSBoYXZlIGhhcmR3YXJlIHBhc3N0aHJvdWdoLCBpdCdzIGdlbmVyYWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBmdW5jdGlvbmFsIG5ldHdvcmsgdHJhZmZpYyBwYXRocyBpbiBhIHN0YW5kYXJkIFZNLiBIb3dldmVyLCBzeXprYWxsZXIncyBQQ0kgZnV6emVyICpjYW4qIHJlYWNoIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGFuZCB0cmlnZ2VyIGludGVycnVwdHMgb3IgTU1JTyBhY2Nlc3Nlcy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGNhbiByZWFjaCBgd3hfdHhfdGltZW91dGAgb3Igb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuXG5cbmB3eF90eF90aW1lb3V0YCBpcyBjYWxsZWQgYnkgdGhlIG5ldGRldiB3YXRjaGRvZyB3aGVuIHRoZSBUeCBxdWV1ZSB0aW1lcyBvdXQuIElmIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCBhbmQgYnJvdWdodCB1cCwgdGhlbiBzZW5kaW5nIGEgZHVtbXkgcGFja2V0IG1pZ2h0IHRyaWdnZXIgYG5kb19zdGFydF94bWl0YC4gSWYgdGhhdCBkb2Vzbid0IGNvbXBsZXRlLCBgbmRvX3R4X3RpbWVvdXRgIHdpbGwgYmUgY2FsbGVkLiBCdXQgYHByb2JlYCB1c3VhbGx5IGZhaWxzIGlmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IHJlc3BvbmQgY29ycmVjdGx5LiBVbmxlc3MgdGhlIFBDSSBmdXp6ZXIgcGVyZmVjdGx5IGVtdWxhdGVzIHRoZSBNTUlPLCB3aGljaCBpcyB1bmxpa2VseSBmb3IgYSBjb21wbGV4IEV0aGVybmV0IGNvbnRyb2xsZXIsIGBwcm9iZWAgd2lsbCBmYWlsLCBhbmQgdGhlbiB3ZSB3aWxsIG5vdCByZWFjaCB0aGUgZnVuY3Rpb25zIGJlaW5nIGFkZGVkIGJ5IHRoZSBwYXRjaC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMjAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTY6MTkuMTM0NzI3OTE2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTM0MjQxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2FuZ3h1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0PTg9Q29udGVudHM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTU5LSAgIHRpL2ljc3NnX3BydWV0aFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjA6ICAgd2FuZ3h1bi90eGdiZVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjE6ICAgd2FuZ3h1bi90eGdiZXZmXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MjogICB3YW5neHVuL25nYmVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYzOiAgIHdhbmd4dW4vbmdiZXZmXFxuLS1cXG5NQUlOVEFJTkVSUz0yOTAwMT1XOlxcdGh0dHBzOi8vd3d3Lm5ldC1zd2lmdC5jb21cXG5NQUlOVEFJTkVSUzoyOTAwMjpGOlxcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuLypcXG5NQUlOVEFJTkVSUzoyOTAwMzpGOlxcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXFxuTUFJTlRBSU5FUlMtMjkwMDQtRjpcXHRkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3Mtd3guY1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0xODc9c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnOjE4ODpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnLTE4OS1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ORVRfVkVORE9SX1ZJQSkgKz0gdmlhL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XQU5HWFVOKSArPSB3YW5neHVuL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQpICs9IHdpem5ldC9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM3LVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjM4OlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZS5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02MS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo2MjpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTY3PWNvbmZpZyBUWEdCRVZGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzktXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODA6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTgxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTg1PWNvbmZpZyBOR0JFVkZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05NS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo5NjpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05Ny1cXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTUwNDI9c3RhdGljIGludCBwY2lfcXVpcmtfbG9vbmdzb25fYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MDYyLSAqL1xcbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjUwNjM6c3RhdGljIGludCAgcGNpX3F1aXJrX3dhbmd4dW5fbmljX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgYWNzX2ZsYWdzKVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUwNjQte1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX2VuYWJsZWQge1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0My1cXHQvKiBXYW5neHVuIG5pY3MgKi9cXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MjQ0OlxcdHsgUENJX1ZFTkRPUl9JRF9XQU5HWFVOLCBQQ0lfQU5ZX0lELCBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzIH0sXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0NS1cXHR7IDAgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNjoyMy4wNDgxNjQzMTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mzg2OTI1MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXJzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMgKGBuZ2JlYCwgYHR4Z2JlYCwgYG5nYmV2ZmAsIGB0eGdiZXZmYCkgYXJlIGNvbXBsZXRlbHkgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycy4gVGhlcmUncyB6ZXJvIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlbSB3aXRoaW4gdGhlIGtlcm5lbC4gV2hpbGUgU3l6a2FsbGVyJ3MgUENJIGZ1enplciAqbWlnaHQqIHRvdWNoIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLCBhY3R1YWxseSBoaXR0aW5nIHRoZSBUeC9SeCBwYXRocyDigJMgdGhpbmdzIGxpa2UgYHd4X2NsZWFuX3R4X2lycWAsIGB3eF90eF90aW1lb3V0YCwgb3IgYHd4X2hhbmRsZV90eF9oYW5nYCDigJMgZGVtYW5kcyBhIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBkZXZpY2UuIFRoYXQgbWVhbnMgcmVnaXN0cmF0aW9uIGFzIGEgbmV0ZGV2LCBicmluZ2luZyBpdCB1cCB2aWEgYG5kb19vcGVuYCwgYW5kIHRoZW4gcHJvY2Vzc2luZyByZWFsIFR4L1J4IHRyYWZmaWMuIEVzc2VudGlhbGx5IGltcG9zc2libGUgd2l0aG91dCBhIHJlYWwgZGV2aWNlIG9yIGEgZGVkaWNhdGVkLCBzcGVjaWFsaXplZCBlbXVsYXRvciBsaWtlIFFFTVUncyBlMTAwMGUuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgd2l0aGluIHRoaXMgcGF0Y2ggc2VlbSB0byBiZSByZWxlZ2F0ZWQgdG8gdGhlc2UgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEJhc2VkIG9uIHRoaXMsIEknbSB0aGlua2luZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrLiBPa2F5LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gYWRkcyBlcnJvciBoYW5kbGluZyBhbmQgVHggaGFuZyBkZXRlY3Rpb24gdG8gYGxpYnd4YCwgYG5nYmVgLCBhbmQgYHR4Z2JlYC4gVGhlc2UgYXJlIHVuZXF1aXZvY2FsbHkgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgaW5zdHJ1Y3RzIG1lOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBoeXNpY2FsIFBDSWUgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgd2l0aCBubyBzb2Z0d2FyZSBlbXVsYXRpb24sIHRoaXMgY2xlYXJseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQuIEknbGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gcmVwb3J0IHRoYXQgdGhpcyBwYXRjaCdzIGZ1enppbmcgd29ydGggaXMgbWluaW1hbCwgYW5kIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NzIsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE2OjMyLjQzNTA5NDA3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbGlid3gpIHRvIGFkZCBQQ0kgZXJyb3IgaGFuZGxpbmcgYW5kIFR4IGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyB3aXRob3V0IHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIG9yIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgVHgvUnggcmluZyBwcm9jZXNzaW5nIGFuZCBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSkgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1bmN0aW9uYWxseSBmdXp6IGluIG91ciBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KSB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbi4gVGhlc2UgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgd2l0aG91dCBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIFR4L1J4IHJpbmcgcHJvY2Vzc2luZyBhbmQgaGFyZHdhcmUgZXJyb3IgcmVjb3ZlcnkpIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdW5jdGlvbmFsbHkgZnV6eiBpbiBvdXIgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowztlfb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 13:02:22 +0000 UTC FinishedAt: 2026-07-07 13:16:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KSB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbi4gVGhlc2UgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgd2l0aG91dCBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIFR4L1J4IHJpbmcgcHJvY2Vzc2luZyBhbmQgaGFyZHdhcmUgZXJyb3IgcmVjb3ZlcnkpIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdW5jdGlvbmFsbHkgZnV6eiBpbiBvdXIgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjlmOTk3NWE5NmUzYjMyNjY1MjU5NDRiNzZkNmJhNmIwNjRiYjhlZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMTM6MTU6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbmluZGV4IGE3MWIwYWQ3N2RlM2Y3Li5jODcyNGJiMTI5YWEwNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcbkBAIC00LDUgJiM0Mzs0LDUgQEBcbiBcbiBvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vXG4gXG4tbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXG4mIzQzO2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xuIGxpYnd4LW9ianMgJiM0Mzs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wY2I5OWU0NTZhMWM5N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCAmIzQzOzEsMzE3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24uICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hZXIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfdHlwZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3d4X2Vyci5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuJiM0MzsgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXd4KVxuJiM0MztcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4mIzQzO1xuJiM0MztcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XG4mIzQzO1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqL1xuJiM0MztcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC5cbiYjNDM7ICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHtcbiYjNDM7XHRcdHd4X2Vycih3eCwgXCYjMzQ7Q2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4mIzQzO1x0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cGNpX3NldF9tYXN0ZXIocGRldik7XG4mIzQzO1x0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XG4mIzQzO1x0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvd25fc3VzcGVuZClcbiYjNDM7XHRcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCh3eCk7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXG4mIzQzOyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcbiYjNDM7ICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4mIzQzO1x0XHRlcnIgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBvcGVuIG5ldGRldiBhZnRlciByZXNldFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0ge1xuJiM0MztcdC5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLFxuJiM0MztcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcbiYjNDM7XHQucmVzdW1lID0gd3hfaW9fcmVzdW1lLFxuJiM0Mzt9O1xuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2Vycl9oYW5kbGVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR3eF93YXJuKHd4LCBcJiMzNDtSZXNldCBhZGFwdGVyLlxcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZWRvX3Jlc2V0KVxuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3eCwgcmVzZXRfdGFzayk7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHd4X3NvZnRfcXVpZXNjZSh3eCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0d3hfcGZfcmVzZXRfc3VidGFzayh3eCk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cXVldWVfd29yayh3eC1cdTAwM2VyZXNldF93cSwgXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XG4mIzQzO1xuJiM0MztpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0d3gtXHUwMDNlcmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7JXNfcmVzZXRfd3FfJXhcJiMzNDssIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxuJiM0MztcdFx0XHRcdCAgICAgICAxLCB3eC1cdTAwM2Vkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC1cdTAwM2VwZGV2KSk7XG4mIzQzO1x0aWYgKCF3eC1cdTAwM2VyZXNldF93cSkge1xuJiM0MztcdFx0d3hfZXJyKHd4LCBcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHd4X3Jlc2V0X3dxIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgd3hfcmluZ190eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodHhfcmluZy1cdTAwM2VuZXh0X3RvX3VzZSAhPSB0eF9yaW5nLVx1MDAzZW5leHRfdG9fY2xlYW4pXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3hfcmluZ19mZWF0dXJlICp2bWRxID0gXHUwMDI2d3gtXHUwMDNlcmluZ19mZWF0dXJlW1JJTkdfRl9WTURRXTtcbiYjNDM7XHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cdTAwM2VtYXNrKTtcbiYjNDM7XHR1MzIgaSwgajtcbiYjNDM7XG4mIzQzO1x0aWYgKCF3eC1cdTAwM2VudW1fdmZzKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdmZzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgcV9wZXJfcG9vbDsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0dTMyIGgsIHQ7XG4mIzQzO1xuJiM0MztcdFx0XHRoID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuJiM0MztcdFx0XHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGggIT0gdClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfd2F0Y2hkb2dfZmx1c2hfdHgoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICh3eF9yaW5nX3R4X3BlbmRpbmcod3gpIHx8IHd4X3ZmX3R4X3BlbmRpbmcod3gpKSB7XG4mIzQzO1x0XHQvKiBXZSYjMzk7dmUgbG9zdCBsaW5rLCBzbyB0aGUgY29udHJvbGxlciBzdG9wcyBETUEsXG4mIzQzO1x0XHQgKiBidXQgd2UmIzM5O3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0JiMzOTtzIG5ldmVyIGdvaW5nXG4mIzQzO1x0XHQgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC5cbiYjNDM7XHRcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHd4X3dhcm4od3gsIFwmIzM0O2luaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBJZiB3ZSYjMzk7cmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqL1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovXG4mIzQzO1x0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXHUwMDNlbmV0ZGV2KSkge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbiYjNDM7XHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHd4KTtcbiYjNDM7XHR3eF9kZXRlY3RfdHhfaGFuZyh3eCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9jaGVja19oYW5nX3N1YnRhc2spO1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHZpZCwgcGNpX2NtZDtcbiYjNDM7XG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXHUwMDNlcGRldiwgUENJX1ZFTkRPUl9JRCwgXHUwMDI2dmlkKTtcbiYjNDM7XHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfQ09NTUFORCwgXHUwMDI2cGNpX2NtZCk7XG4mIzQzO1xuJiM0MztcdC8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4mIzM5O3QgYWNjZXNzICovXG4mIzQzO1x0aWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCBcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWVcbiYjNDM7XHQgKiByZWNvdmVyeSBtZWNoYW5pc20uIEhvd2V2ZXIsIHRoaXMgcmVjb3ZlcnkgZmxvdyByZWxpZXMgb24gdGhlIEFFUlxuJiM0MztcdCAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWRcbiYjNDM7XHQgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0d3hfZXJyKHd4LCBcJiMzNDtQQ0llIGVycm9yIGRldGVjdGVkIGR1cmluZyB0eCB0aW1lb3V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR3eF93YXJuKHd4LCBcJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XFxuXCYjMzQ7KTtcbiYjNDM7XHR3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHd4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCBfX2Fsd2F5c191bnVzZWQgdHhxdWV1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAod3hfY2hlY2tfcGNpZV9lcnJvcih3eCkpXG4mIzQzO1x0XHR3eF90eF90aW1lb3V0X3JlY292ZXJ5KHd4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xuJiM0MztcbiYjNDM7dm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHR3eF93YXJuKHd4LFxuJiM0MztcdFx0XCYjMzQ7RGV0ZWN0ZWQgVHggVW5pdCBIYW5nOiBRdWV1ZSAlZCwgVERIICV4LCBURFQgJXgsIG50dSAleCwgbnRjICV4LCBudGMudGltZV9zdGFtcCAlbHgsIGppZmZpZXMgJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0dHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCxcbiYjNDM7XHRcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXHUwMDNlcmVnX2lkeCkpLFxuJiM0MztcdFx0cmQzMih3eCwgV1hfUFhfVFJfV1AodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4mIzQzO1x0XHR0eF9yaW5nLVx1MDAzZW5leHRfdG9fdXNlLCBuZXh0LFxuJiM0MztcdFx0dHhfcmluZy1cdTAwM2V0eF9idWZmZXJfaW5mb1tuZXh0XS50aW1lX3N0YW1wLCBqaWZmaWVzKTtcbiYjNDM7XG4mIzQzO1x0bmV0aWZfc3RvcF9zdWJxdWV1ZSh0eF9yaW5nLVx1MDAzZW5ldGRldiwgdHhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4mIzQzO1xuJiM0MztcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcbkBAIC0wLDAgJiM0MzsxLDE4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qXG4mIzQzOyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXJcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9XWF9FUlJfSF9cbiYjNDM7I2RlZmluZSBfV1hfRVJSX0hfXG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcbiYjNDM7XG4mIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XG4mIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xuJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KTtcbiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTtcbiYjNDM7dm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9XWF9FUlJfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5pbmRleCA1ZGY5NzFhY2E5ZTM1Zi4uZDEzNTZmZjVkNjliNTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC0zOTUsNyAmIzQzOzM5NSw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqL1xuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuJiM0MztcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiB9XG4gXG4gaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuaW5kZXggMjYwZTE0ZDVkNTQxMjEuLjEyMmM0OTUyZDIwM2YwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbkBAIC0xOTMyLDYgJiM0MzsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcbiBcdGVsc2VcbiBcdFx0cmluZy1cdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xuIFxuJiM0MztcdGJpdG1hcF96ZXJvKHJpbmctXHUwMDNlc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xuIFx0LyogcmVpbml0aWFsaXplIHR4X2J1ZmZlcl9pbmZvICovXG4gXHRtZW1zZXQocmluZy1cdTAwM2V0eF9idWZmZXJfaW5mbywgMCxcbiBcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVx1MDAzZWNvdW50KTtcbkBAIC0yODUxLDE2ICYjNDM7Mjg1MiwyNiBAQCBFWFBPUlRfU1lNQk9MKHd4X2ZjX2VuYWJsZSk7XG4gc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0c3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gXHUwMDI2d3gtXHUwMDNlc3RhdHM7XG4mIzQzO1x0dTY0IGRhdGE7XG4mIzQzO1x0aW50IGk7XG4gXG4gXHRpZiAod3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19mdWxsIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHd4LVx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICh3eC1cdTAwM2VtYWMudHlwZSBcdTAwM2U9IHd4X21hY19hbWwpXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbi1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNnd4LVx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xuJiM0MztcdFx0ZGF0YSA9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcbiYjNDM7XHRcdFx0XHQgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4gXHRlbHNlXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgJiM0Mzs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XG4mIzQzO1x0XHRkYXRhID0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbiYjNDM7XHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICYjNDM7PSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xuJiM0MztcdGlmICghZGF0YSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRjbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2VzdGF0ZSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCA4MTRkODhkMmFlZTQ4Ny4uYTY1MzEyYzgwNzhmYTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt3eF90eXBlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9saWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3eF9lcnIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X3B0cC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfaHcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3d4X3ZmX2xpYi5oXCYjMzQ7XG5AQCAtNzQyLDYgJiM0Mzs3NDMsMzcgQEAgc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKnd4X3R4cmluZ190eHEoY29uc3Qgc3RydWN0IHd4X3JpbmcgKnJpbmcpXG4gXHRyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLVx1MDAzZW5ldGRldiwgcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIHd4X2dldF90eF9wZW5kaW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGhlYWQsIHRhaWw7XG4mIzQzO1xuJiM0MztcdGhlYWQgPSByaW5nLVx1MDAzZW5leHRfdG9fY2xlYW47XG4mIzQzO1x0dGFpbCA9IHJpbmctXHUwMDNlbmV4dF90b191c2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAoKGhlYWQgXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICYjNDM7IHJpbmctXHUwMDNlY291bnQpIC0gaGVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiYjNDM7e1xuJiM0MztcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XG4mIzQzO1x0dTMyIHR4X3BlbmRpbmcgPSB3eF9nZXRfdHhfcGVuZGluZyhyaW5nKTtcbiYjNDM7XHR1MzIgdHhfZG9uZSA9IHJpbmctXHUwMDNlc3RhdHMucGFja2V0cztcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHJpbmctXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSBcdTAwMjZcdTAwMjYgdHhfcGVuZGluZylcbiYjNDM7XHRcdC8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovXG4mIzQzO1x0XHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0LyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi9cbiYjNDM7XHRyaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcbiYjNDM7XHQvKiByZXNldCB0aGUgY291bnRkb3duICovXG4mIzQzO1x0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXHUwMDNlc3RhdGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cbkBAIC04NjYsNiAmIzQzOzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvcixcbiBcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUod3hfdHhyaW5nX3R4cSh0eF9yaW5nKSxcbiBcdFx0XHRcdCAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpO1xuIFxuJiM0MztcdGlmICh3eF9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7XG4mIzQzO1x0XHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxuIFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXHUwMDI2XHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcbkBAIC0zMTEyLDcgJiM0MzszMTQ5LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiBcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyA9IGZlYXR1cmVzO1xuIFxuIFx0aWYgKGNoYW5nZWQgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbiYjNDM7XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gXHRlbHNlIGlmIChjaGFuZ2VkIFx1MDAyNiAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxuIFx0XHR3eF9zZXRfcnhfbW9kZShuZXRkZXYpO1xuIFxuQEAgLTMxNjIsNyAmIzQzOzMxOTksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFxuIG91dDpcbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbiYjNDM7XHRcdHd4LVx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzM0Niw1ICYjNDM7MzM4MywyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7XG4gXG4mIzQzO3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXHUwMDNlbmV0ZGV2KSB8fFxuJiM0MztcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGNpX2NsZWFyX21hc3Rlcih3eC1cdTAwM2VwZGV2KTtcbiYjNDM7XHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRuZXRpZl9jYXJyaWVyX29mZih3eC1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdG5ldGlmX3R4X2Rpc2FibGUod3gtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHR3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTtcbiYjNDM7XHR3eF9wdHBfcXVpZXNjZSh3eCk7XG4mIzQzO1xuJiM0MztcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHd4X3NvZnRfcXVpZXNjZSk7XG4mIzQzO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuaW5kZXggYWVkNmVhOGNmMGQ2NGEuLjExYmQ3OTk4NWUxNzEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuQEAgLTQxLDUgJiM0Mzs0MSw2IEBAIHZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4mIzQzO3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpO1xuIFxuICNlbmRpZiAvKiBfV1hfTElCX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi5hMjVlYjZhZWQ1NjYwZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmNcbkBAIC0zMjEsNiAmIzQzOzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cClcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcbiBcdGludCB0c19kb25lO1xuIFxuJiM0MztcdGlmICghdGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybiBIWjtcbiYjNDM7XG4gXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xuIFxuIFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcbkBAIC04NDIsNiAmIzQzOzg0NSwyNCBAQCB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xuIFxuJiM0Mzt2b2lkIHd4X3B0cF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZXB0cF9jbG9jaylcbiYjNDM7XHRcdHB0cF9jYW5jZWxfd29ya2VyX3N5bmMod3gtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHd4LVx1MDAzZXB0cF90eF9za2IpIHtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55KHd4LVx1MDAzZXB0cF90eF9za2IpO1xuJiM0MztcdFx0d3gtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdGNsZWFyX2JpdF91bmxvY2soV1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4mIzQzO1xuIC8qKlxuICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wXG4gICogQHd4OiBwb2ludGVyIHRvIHd4IHN0cnVjdFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5pbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfaW5pdChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuaW5kZXggNjVlM2U1NWRiMWNmZmIuLmFhMzU3ZTI2MGM0YzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtNDUwLDYgJiM0Mzs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XG4gI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDhcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19IRUFEX1dCICAgICAgICAgQklUKDI3KVxuIFxuJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbiYjNDM7XHRcdChXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKVxuJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcbiYjNDM7XHRcdChXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKVxuJiM0MztcbiAvKiBSZWNlaXZlIERNQSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSlcbiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgJiM0MzsgKChfaSkgKiAweDQwKSlcbkBAIC0xMDQwLDYgJiM0MzsxMDQ1LDcgQEAgc3RydWN0IHd4X3F1ZXVlX3N0YXRzIHtcbiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMge1xuIFx0dTY0IHJlc3RhcnRfcXVldWU7XG4gXHR1NjQgdHhfYnVzeTtcbiYjNDM7XHR1MzIgdHhfZG9uZV9vbGQ7XG4gfTtcbiBcbiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuQEAgLTEwNTUsNiAmIzQzOzEwNjEsMTIgQEAgc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcbiAjZGVmaW5lIHd4X2Zvcl9lYWNoX3JpbmcocG9zbSwgaGVhZG0pIFxcXG4gXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVx1MDAzZW5leHQpXG4gXG4mIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7XG4mIzQzO1x0V1hfVFhfREVURUNUX0hBTkcsXG4mIzQzO1x0V1hfSEFOR19DSEVDS19BUk1FRCxcbiYjNDM7XHRXWF9SSU5HX1NUQVRFX05CSVRTXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XG4gXHRzdHJ1Y3Qgd3hfcmluZyAqcmluZzsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbGlua2VkIGxpc3Qgb2YgcmluZ3MgKi9cbiBcdHVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsgICAgICAgLyogdG90YWwgYnl0ZXMgcHJvY2Vzc2VkIHRoaXMgaW50ICovXG5AQCAtMTA3NCw2ICYjNDM7MTA4Niw3IEBAIHN0cnVjdCB3eF9yaW5nIHtcbiBcdFx0c3RydWN0IHd4X3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87XG4gXHRcdHN0cnVjdCB3eF9yeF9idWZmZXIgKnJ4X2J1ZmZlcl9pbmZvO1xuIFx0fTtcbiYjNDM7XHRERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHR1OCBfX2lvbWVtICp0YWlsO1xuIFx0ZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqL1xuIFx0ZG1hX2FkZHJfdCBoZWFkd2JfZG1hO1xuQEAgLTEyMDksNiAmIzQzOzEyMjIsOCBAQCBlbnVtIHd4X3N0YXRlIHtcbiBcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxuIFx0V1hfU1RBVEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuIFx0V1hfU1RBVEVfU0VSVklDRV9TQ0hFRCxcbiYjNDM7XHRXWF9TVEFURV9ESVNBQkxFRCxcbiYjNDM7XHRXWF9TVEFURV9SRVNfRlJFRUQsXG4gXHRXWF9TVEFURV9OQklUU1x0XHQvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEyNzUsNiAmIzQzOzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcbiBcdFdYX0ZMQUdfTkVFRF9ET19SRVNFVCxcbiBcdFdYX0ZMQUdfUlhfTUVSR0VfRU5BQkxFRCxcbiBcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXG4mIzQzO1x0V1hfRkxBR19ORUVEX1BGX1JFU0VULFxuJiM0MztcdFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLFxuIFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEzOTUsNyAmIzQzOzE0MTIsOCBAQCBzdHJ1Y3Qgd3gge1xuIFx0dm9pZCAoKmF0cikoc3RydWN0IHd4X3JpbmcgKnJpbmcsIHN0cnVjdCB3eF90eF9idWZmZXIgKmZpcnN0LCB1OCBwdHlwZSk7XG4gXHR2b2lkICgqY29uZmlndXJlX2ZkaXIpKHN0cnVjdCB3eCAqd3gpO1xuIFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcbi1cdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4mIzQzO1x0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4mIzQzO1x0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdHZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7XG4gXG5AQCAtMTQyMyw2ICYjNDM7MTQ0MSw4IEBAIHN0cnVjdCB3eCB7XG4gXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHNlcnZpY2VfdGFzaztcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcbiYjNDM7XHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XG4gXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXG4gfTtcbiBcbkBAIC0xNTA1LDcgJiM0MzsxNTI1LDggQEAgcmQzMl93cmFwKHN0cnVjdCB3eCAqd3gsIHUzMiByZWcsIHUzMiAqbGFzdClcbiBcbiAjZGVmaW5lIHd4X2Vycih3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZXJyKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4tXG4mIzQzOyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXG4mIzQzO1x0ZGV2X3dhcm4oXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZGJnKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5pbmRleCBiMmUxOTE5ODI4MDMyNi4uMTk2MGY3MTU0MTUxZGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTU5LDcgJiM0Mzs1OSw2IEBAIHN0YXRpYyBpbnQgbmdiZV9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XG4gXHRrdmZyZWUodGVtcF9yaW5nKTtcbiBcbi1cdHd4X2NvbmZpZ3VyZSh3eCk7XG4gXHRuZ2JlX3VwKHd4KTtcbiBcbiBjbGVhcl9yZXNldDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbmluZGV4IGExNjIyMTk5NTkwOWY5Li41NmQ0YjYzMzg3ZmQ2ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG5AQCAtMTQsNiAmIzQzOzE0LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXJyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9wdHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X21ieC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XG4gXHR7IH1cbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBuZ2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbiYjNDM7XHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lycSh3eCk7XG4mIzQzO1x0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbiYjNDM7XHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZVxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtMTMzLDYgJiM0MzsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcbiYjNDM7XHR3eC1cdTAwM2Vkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7XG4mIzQzO1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gbmdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE0Nyw2ICYjNDM7MTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XG4gXG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuJiM0MztcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG4gXG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgbmdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHR3eF9mbHVzaF9zd19tYWNfdGFibGUod3gpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLmFkZHIpO1xuIFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG5AQCAtNDIzLDEzICYjNDM7NDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuIH1cbiBcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbiYjNDM7c3RhdGljIHZvaWQgbmdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdHd4X2NvbmZpZ3VyZV92ZWN0b3JzKHd4KTtcbiBcbiBcdC8qIG1ha2Ugc3VyZSB0byBjb21wbGV0ZSBwcmUtb3BlcmF0aW9ucyAqL1xuIFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG4gXHRjbGVhcl9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKTtcbiBcdHd4X25hcGlfZW5hYmxlX2FsbCh3eCk7XG4gXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHd4LVx1MDAzZW5ldGRldik7XG5AQCAtNDkwLDcgJiM0Mzs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFxuIFx0d3hfcHRwX2luaXQod3gpO1xuIFxuLVx0bmdiZV91cCh3eCk7XG4mIzQzO1x0bmdiZV91cF9jb21wbGV0ZSh3eCk7XG4gXG4gXHRyZXR1cm4gMDtcbiBlcnJfZGlzX3BoeTpcbkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0d3hfY29uZmlndXJlKHd4KTtcbiYjNDM7XHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBuZ2JlX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZVxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcbkBAIC01MTgsMTIgJiM0Mzs1NDgsMTYgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0bmdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NTUsNyAmIzQzOzU4OSw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sICplbmFibGVfd2FrZSlcbiBcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC01OTAsNiAmIzQzOzYyNSw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0ICovXG4gXHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuIFx0XHRuZ2JlX2Nsb3NlKGRldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmdiZV9yZXNldCh3eCk7XG4gXG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuJiM0Mzt7XG4mIzQzO1x0bmV0aWZfdHJhbnNfdXBkYXRlKHd4LVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4mIzQzO1x0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0bmdiZV9kb3duKHd4KTtcbiYjNDM7XHRuZ2JlX3VwKHd4KTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBuZ2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiYjNDM7XHRcdG5nYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmdiZV9yZXNldCh3eCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW4gICAgICAgICAgICAgICA9IG5nYmVfb3BlbixcbiBcdC5uZG9fc3RvcCAgICAgICAgICAgICAgID0gbmdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbiYjNDM7XHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03MDAsNiAmIzQzOzc2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcbiBcdG5nYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XG4gXHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5nYmVfbmV0ZGV2X29wcztcbiYjNDM7XHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXG4gXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8XG5AQCAtNzk2LDYgJiM0Mzs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbiYjNDM7XHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4mIzQzO1xuIFx0bmdiZV9pbml0X3NlcnZpY2Uod3gpO1xuIFxuIFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbkBAIC04MTIsNiAmIzQzOzg3OSw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuJiM0MztcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtODIzLDYgJiM0Mzs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTg1NCw2ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0cGh5bGlua19kZXN0cm95KHd4LVx1MDAzZXBoeWxpbmspO1xuIFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxuQEAgLTg2Myw3ICYjNDM7OTM1LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG5AQCAtODkwLDYgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHR3eF9lcnIod3gsIFwmIzM0O0Nhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuJiM0MztcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0cGNpX3NldF9tYXN0ZXIocGRldik7XG4gXHRkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuQEAgLTkxNCw2ICYjNDM7OTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xuIFx0LnJlc3VtZSAgID0gbmdiZV9yZXN1bWUsXG4gXHQuc2h1dGRvd24gPSBuZ2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4mIzQzO1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5pbmRleCA3MDc3YTBkYTRjOTg2YS4uYzkyMzNkYzdhZTUwNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICYjNDM7MTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xuIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XG4mIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2VuZGlmIC8qIF9OR0JFX1RZUEVfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5pbmRleCAyMGM1YTI5NWM2YzI5Ni4uZDg1ZWU4MzE5MmU0ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2Vyci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfcHRwLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbkBAIC05Myw2ICYjNDM7OTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXHUwMDNlc3RhdGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEwNiw2ICYjNDM7MTExLDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIFxuIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eClcbiB7XG4mIzQzO1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSB8fFxuJiM0MztcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEyMyw2ICYjNDM7MTMyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7XG4gXHR0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTtcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4mIzQzO1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbiYjNDM7XHR3eF9jaGVja19lcnJfc3VidGFzayh3eCk7XG4gXG4gXHR3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTtcbiB9XG5AQCAtMTQ0LDYgJiM0MzsxNTUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpO1xuIFx0d3hfbmFwaV9lbmFibGVfYWxsKHd4KTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC0xODcsNiAmIzQzOzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXG4gXHR1OCBvbGRfYWRkcltFVEhfQUxFTl07XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTtcbiBcdGlmIChlcnIgIT0gMClcbiBcdFx0d3hfZXJyKHd4LCBcJiMzNDtIYXJkd2FyZSBFcnJvcjogJWRcXG5cJiMzNDssIGVycik7XG5AQCAtMjI0LDYgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0d3hfaXJxX2Rpc2FibGUod3gpO1xuIFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XG4gXG4mIzQzO1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtMjkyLDYgJiM0MzszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dHhnYmVfdXBfY29tcGxldGUod3gpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdHhnYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4mIzQzO3tcbiYjNDM7XHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zdG9wKHd4LVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdHd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7XG4mIzQzO1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbiYjNDM7XHR3eF9mcmVlX2lycSh3eCk7XG4mIzQzO1x0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbiYjNDM7XHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4mIzQzO1x0dHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTQwOCw2ICYjNDM7NDM4LDcgQEAgc3RhdGljIGludCB0eGdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4gXG4gXHR3eC1cdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xuIFx0d3gtXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcbiYjNDM7XHR3eC1cdTAwM2Vkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7XG4gXHRzZXRfYml0KDAsIFx1MDAyNnd4LVx1MDAzZWZ3ZF9iaXRtYXNrKTtcbiBcbiBcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbkBAIC01MTgsMTIgJiM0Mzs1NDksMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdHd4X3B0cF9zdG9wKHd4KTtcbiBcdHR4Z2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuJiM0MztvdXQ6XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC01NDQsNyAmIzQzOzU3OSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbiYjNDM7XHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtNjA2LDExICYjNDM7NjQyLDExIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eClcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbiB9XG4gXG4tdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuJiM0Mzt2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNiByZWluaXQpXG4gXHRcdHR4Z2JlX3JlaW5pdF9sb2NrZWQod3gpO1xuIFx0ZWxzZVxuIFx0XHR0eGdiZV9yZXNldCh3eCk7XG5AQCAtNjU0LDYgJiM0Mzs2OTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxuIFx0Lm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxuJiM0MztcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTc0NSw2ICYjNDM7NzgyLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdHd4LVx1MDAzZWRyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7XG4gXHR0eGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dHhnYmVfbmV0ZGV2X29wcztcbiYjNDM7XHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXHRuZXRkZXYtXHUwMDNldWRwX3R1bm5lbF9uaWNfaW5mbyA9IFx1MDAyNnR4Z2JlX3VkcF90dW5uZWxzO1xuIFxuIFx0Lyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovXG5AQCAtODE0LDYgJiM0Mzs4NTIsMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXG4mIzQzO1x0ZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xuJiM0MztcbiBcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTg4OSw2ICYjNDM7OTMxLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XG4mIzQzO1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcbkBAIC05MTYsNiAmIzQzOzk1OSw4IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTk0OCw2ICYjNDM7OTkzLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuJiM0MztcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NTksNyAmIzQzOzEwMDYsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTY5LDYgJiM0MzsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbiBcdC5yZW1vdmUgICA9IHR4Z2JlX3JlbW92ZSxcbiBcdC5zaHV0ZG93biA9IHR4Z2JlX3NodXRkb3duLFxuIFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXG4mIzQzO1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbmluZGV4IDg3NzIzNGUzZmRjMmI2Li4zZTkzYTNmMzA5YzE2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuQEAgLTMxMyw3ICYjNDM7MzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4mIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxuIFx0dW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTM6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbGlid3gpIHRvIGFkZCBQQ0kgZXJyb3IgaGFuZGxpbmcgYW5kIFR4IGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyB3aXRob3V0IHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIG9yIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgVHgvUnggcmluZyBwcm9jZXNzaW5nIGFuZCBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSkgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1bmN0aW9uYWxseSBmdXp6IGluIG91ciBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI5Zjk5NzVhOTZlM2IzMjY2NTI1OTQ0Yjc2ZDZiYTZiMDY0YmI4ZWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDEzOjE1OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKaW5kZXggYTcxYjBhZDc3ZGUzZjcuLmM4NzI0YmIxMjlhYTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUKQEAgLTQsNSAmIzQzOzQsNSBAQAogCiBvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vCiAKLWxpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubwomIzQzO2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIubwogbGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBjYjk5ZTQ1NmExYzk3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYwpAQCAtMCwwICYjNDM7MSwzMTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovCiYjNDM7LyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3d4X3R5cGUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZwomIzQzOyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkJICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKJiM0MzsKJiM0MzsJaWYgKCF3eCkKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpCiYjNDM7CQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKJiM0MzsKJiM0MzsJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9zb2Z0X3F1aWVzY2Uod3gpOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CS8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqLwomIzQzOwlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuCiYjNDM7ICoKJiM0MzsgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KSkgewomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O0Nhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovCiYjNDM7CXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJcGNpX3NldF9tYXN0ZXIocGRldik7CiYjNDM7CXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwomIzQzOwlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpICZhbXA7JmFtcDsgd3gtJmd0O2Rvd25fc3VzcGVuZCkKJiM0MzsJCXd4LSZndDtkb3duX3N1c3BlbmQod3gpOwomIzQzOwlpZiAod3gtJmd0O2RvX3Jlc2V0KQomIzQzOwkJd3gtJmd0O2RvX3Jlc2V0KHd4LSZndDtuZXRkZXYsIGZhbHNlKTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KJiM0MzsgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdAomIzQzOyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluZXRkZXYgPSB3eC0mZ3Q7bmV0ZGV2OwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewomIzQzOwkJZXJyID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXd4X2Vycih3eCwgJiMzNDtGYWlsZWQgdG8gb3BlbiBuZXRkZXYgYWZ0ZXIgcmVzZXRcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7b3V0OgomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyID0gewomIzQzOwkuZXJyb3JfZGV0ZWN0ZWQgPSB3eF9pb19lcnJvcl9kZXRlY3RlZCwKJiM0MzsJLnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LAomIzQzOwkucmVzdW1lID0gd3hfaW9fcmVzdW1lLAomIzQzO307CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgd3hfcGZfcmVzZXRfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LCAmIzM0O1Jlc2V0IGFkYXB0ZXIuXG4mIzM0Oyk7CiYjNDM7CWlmICh3eC0mZ3Q7ZG9fcmVzZXQpCiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQod3gtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJd3hfc29mdF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LSZndDtmbGFncykpCiYjNDM7CQlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spOwomIzQzOwomIzQzO2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl3eC0mZ3Q7cmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDslc19yZXNldF93cV8leCYjMzQ7LCBXUV9VTkJPVU5EIHwgV1FfSElHSFBSSSwKJiM0MzsJCQkJICAgICAgIDEsIHd4LSZndDtkcml2ZXJfbmFtZSwgcGNpX2Rldl9pZCh3eC0mZ3Q7cGRldikpOwomIzQzOwlpZiAoIXd4LSZndDtyZXNldF93cSkgewomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O0ZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlJTklUX1dPUksoJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spOwomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtJmd0O3R4X3JpbmdbaV07CiYjNDM7CiYjNDM7CQlpZiAodHhfcmluZy0mZ3Q7bmV4dF90b191c2UgIT0gdHhfcmluZy0mZ3Q7bmV4dF90b19jbGVhbikKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHd4X3ZmX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSAmYW1wO3d4LSZndDtyaW5nX2ZlYXR1cmVbUklOR19GX1ZNRFFdOwomIzQzOwl1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS0mZ3Q7bWFzayk7CiYjNDM7CXUzMiBpLCBqOwomIzQzOwomIzQzOwlpZiAoIXd4LSZndDtudW1fdmZzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgd3gtJmd0O251bV92ZnM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgcV9wZXJfcG9vbDsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQl1MzIgaCwgdDsKJiM0MzsKJiM0MzsJCQloID0gcmQzMih3eCwgV1hfUFhfVFJfUlBfUFYocV9wZXJfcG9vbCwgaSwgaikpOwomIzQzOwkJCXQgPSByZDMyKHd4LCBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCBpLCBqKSk7CiYjNDM7CiYjNDM7CQkJaWYgKGggIT0gdCkKJiM0MzsJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAobmV0aWZfY2Fycmllcl9vayh3eC0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHd4X3JpbmdfdHhfcGVuZGluZyh3eCkgfHwgd3hfdmZfdHhfcGVuZGluZyh3eCkpIHsKJiM0MzsJCS8qIFdlJiMzOTt2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSwKJiM0MzsJCSAqIGJ1dCB3ZSYjMzk7dmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQmIzM5O3MgbmV2ZXIgZ29pbmcKJiM0MzsJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgomIzQzOwkJICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS4KJiM0MzsJCSAqLwomIzQzOwkJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcbiYjMzQ7KTsKJiM0MzsJCXNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X2RldGVjdF90eF9oYW5nKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogSWYgd2UmIzM5O3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi8KJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHd4LSZndDtuZXRkZXYpIHx8CiYjNDM7CSAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi8KJiM0MzsJaWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtJmd0O25ldGRldikpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJc2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpOwomIzQzOwl3eF9kZXRlY3RfdHhfaGFuZyh3eCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB3eF9jaGVja19wY2llX2Vycm9yKHN0cnVjdCB3eCAqd3gpCiYjNDM7ewomIzQzOwl1MTYgdmlkLCBwY2lfY21kOwomIzQzOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX1ZFTkRPUl9JRCwgJmFtcDt2aWQpOwomIzQzOwlwY2lfcmVhZF9jb25maWdfd29yZCh3eC0mZ3Q7cGRldiwgUENJX0NPTU1BTkQsICZhbXA7cGNpX2NtZCk7CiYjNDM7CiYjNDM7CS8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4mIzM5O3QgYWNjZXNzICovCiYjNDM7CWlmICh2aWQgPT0gVTE2X01BWCB8fCAhKHBjaV9jbWQgJmFtcDsgUENJX0NPTU1BTkRfTUVNT1JZKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gYSBQQ0llIGhhcmR3YXJlIGVycm9yIG9jY3VycywgdGhlIGRyaXZlciBzaG91bGQgaW5pdGlhdGUgYSBQQ0llCiYjNDM7CSAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSCiYjNDM7CSAqIGRyaXZlciBmb3IgY3VycmVudCBrZXJuZWwgcG9saWN5LiBUaGVyZWZvcmUsIGEgc2VsZi1jb250YWluZWQKJiM0MzsJICogcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl3eF9lcnIod3gsICYjMzQ7UENJZSBlcnJvciBkZXRlY3RlZCBkdXJpbmcgdHggdGltZW91dFxuJiMzNDspOwomIzQzOwlxdWV1ZV93b3JrKHd4LSZndDtyZXNldF93cSwgJmFtcDt3eC0mZ3Q7cmVzZXRfdGFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJd3hfd2Fybih3eCwgJiMzNDtpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byB0eCB0aW1lb3V0XG4mIzM0Oyk7CiYjNDM7CXd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUod3gpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHd4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdW5zaWduZWQgaW50IF9fYWx3YXlzX3VudXNlZCB0eHF1ZXVlKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CiYjNDM7CWlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSkKJiM0MzsJCXd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkod3gpOwomIzQzOwllbHNlCiYjNDM7CQl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTsKJiM0MzsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwomIzQzOwl3eF93YXJuKHd4LAomIzQzOwkJJiMzNDtEZXRlY3RlZCBUeCBVbml0IEhhbmc6IFF1ZXVlICVkLCBUREggJXgsIFREVCAleCwgbnR1ICV4LCBudGMgJXgsIG50Yy50aW1lX3N0YW1wICVseCwgamlmZmllcyAlbHhcbiYjMzQ7LAomIzQzOwkJdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgsCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQlyZDMyKHd4LCBXWF9QWF9UUl9XUCh0eF9yaW5nLSZndDtyZWdfaWR4KSksCiYjNDM7CQl0eF9yaW5nLSZndDtuZXh0X3RvX3VzZSwgbmV4dCwKJiM0MzsJCXR4X3JpbmctJmd0O3R4X2J1ZmZlcl9pbmZvW25leHRdLnRpbWVfc3RhbXAsIGppZmZpZXMpOwomIzQzOwomIzQzOwluZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctJmd0O25ldGRldiwgdHhfcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwl3eF90eF90aW1lb3V0X3Jlc2V0KHd4KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYTZhODJhMjYzNTI4NDkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIFdhbmdYdW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDI2IEJlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1dYX0VSUl9IXwomIzQzOyNkZWZpbmUgX1dYX0VSUl9IXwomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHd4X2Vycl9oYW5kbGVyOwomIzQzOwomIzQzO3ZvaWQgd3hfY2hlY2tfZXJyX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7aW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKTsKJiM0Mzt2b2lkIHd4X2hhbmRsZV90eF9oYW5nKHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nLCB1bnNpZ25lZCBpbnQgbmV4dCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9XWF9FUlJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKaW5kZXggNWRmOTcxYWNhOWUzNWYuLmQxMzU2ZmY1ZDY5YjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYwpAQCAtMzk1LDcgJiM0MzszOTUsNyBAQCBzdGF0aWMgdm9pZCB3eF91cGRhdGVfcnNjKHN0cnVjdCB3eCAqd3gpCiAKIAkvKiByZXNldCB0aGUgZGV2aWNlIHRvIGFwcGx5IHRoZSBuZXcgUlNDIHNldHRpbmcgKi8KIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIH0KIAogaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYwpAQCAtMTkzMiw2ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsCiAJZWxzZQogCQlyaW5nLSZndDthdHJfc2FtcGxlX3JhdGUgPSAwOwogCiYjNDM7CWJpdG1hcF96ZXJvKHJpbmctJmd0O3N0YXRlLCBXWF9SSU5HX1NUQVRFX05CSVRTKTsKIAkvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi8KIAltZW1zZXQocmluZy0mZ3Q7dHhfYnVmZmVyX2luZm8sIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3Qgd3hfdHhfYnVmZmVyKSAqIHJpbmctJmd0O2NvdW50KTsKQEAgLTI4NTEsMTYgJiM0MzsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTsKIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV94b2ZmX3J4X2xmYyhzdHJ1Y3Qgd3ggKnd4KQogewogCXN0cnVjdCB3eF9od19zdGF0cyAqaHdzdGF0cyA9ICZhbXA7d3gtJmd0O3N0YXRzOwomIzQzOwl1NjQgZGF0YTsKJiM0MzsJaW50IGk7CiAKIAlpZiAod3gtJmd0O2ZjLm1vZGUgIT0gd3hfZmNfZnVsbCAmYW1wOyZhbXA7CiAJICAgIHd4LSZndDtmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKQogCQlyZXR1cm47CiAKIAlpZiAod3gtJmd0O21hYy50eXBlICZndDs9IHd4X21hY19hbWwpCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCi0JCQkJCSAgICAgICAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKJiM0MzsJCWRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsCiYjNDM7CQkJCSAmYW1wO3d4LSZndDtsYXN0X3N0YXRzLmx4b2ZmcnhjKTsKIAllbHNlCi0JCWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpOwomIzQzOwkJZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7CiYjNDM7CWh3c3RhdHMtJmd0O2x4b2ZmcnhjICYjNDM7PSBkYXRhOwomIzQzOwomIzQzOwkvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqLwomIzQzOwlpZiAoIWRhdGEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgd3gtJmd0O3R4X3JpbmdbaV0tJmd0O3N0YXRlKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwppbmRleCA4MTRkODhkMmFlZTQ4Ny4uYTY1MzEyYzgwNzhmYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKIAogI2luY2x1ZGUgJiMzNDt3eF90eXBlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfaHcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3d4X3ZmX2xpYi5oJiMzNDsKQEAgLTc0Miw2ICYjNDM7NzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKQogCXJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctJmd0O25ldGRldiwgcmluZy0mZ3Q7cXVldWVfaW5kZXgpOwogfQogCiYjNDM7c3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBoZWFkLCB0YWlsOwomIzQzOwomIzQzOwloZWFkID0gcmluZy0mZ3Q7bmV4dF90b19jbGVhbjsKJiM0MzsJdGFpbCA9IHJpbmctJmd0O25leHRfdG9fdXNlOwomIzQzOwomIzQzOwlyZXR1cm4gKChoZWFkICZsdDs9IHRhaWwpID8gdGFpbCA6IHRhaWwgJiM0MzsgcmluZy0mZ3Q7Y291bnQpIC0gaGVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd3hfY2hlY2tfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZykKJiM0Mzt7CiYjNDM7CXUzMiB0eF9kb25lX29sZCA9IHJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkOwomIzQzOwl1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpOwomIzQzOwl1MzIgdHhfZG9uZSA9IHJpbmctJmd0O3N0YXRzLnBhY2tldHM7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1RYX0RFVEVDVF9IQU5HLCByaW5nLSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lICZhbXA7JmFtcDsgdHhfcGVuZGluZykKJiM0MzsJCS8qIG1ha2Ugc3VyZSBpdCBpcyB0cnVlIGZvciB0d28gY2hlY2tzIGluIGEgcm93ICovCiYjNDM7CQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CS8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovCiYjNDM7CXJpbmctJmd0O3R4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTsKJiM0MzsJLyogcmVzZXQgdGhlIGNvdW50ZG93biAqLwomIzQzOwljbGVhcl9iaXQoV1hfSEFOR19DSEVDS19BUk1FRCwgcmluZy0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB3eF9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21pdCBjb21wbGV0ZXMKICAqIEBxX3ZlY3Rvcjogc3RydWN0dXJlIGNvbnRhaW5pbmcgaW50ZXJydXB0IGFuZCByaW5nIGluZm9ybWF0aW9uCkBAIC04NjYsNiAmIzQzOzg5OCwxMSBAQCBzdGF0aWMgYm9vbCB3eF9jbGVhbl90eF9pcnEoc3RydWN0IHd4X3FfdmVjdG9yICpxX3ZlY3RvciwKIAluZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksCiAJCQkJICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7CiAKJiM0MzsJaWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHsKJiM0MzsJCXd4X2hhbmRsZV90eF9oYW5nKHR4X3JpbmcsIGkpOwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKICNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMikKIAlpZiAodW5saWtlbHkodG90YWxfcGFja2V0cyAmYW1wOyZhbXA7IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy0mZ3Q7bmV0ZGV2KSAmYW1wOyZhbXA7CiAJCSAgICAgKHd4X2Rlc2NfdW51c2VkKHR4X3JpbmcpICZndDs9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHsKQEAgLTMxMTIsNyAmIzQzOzMxNDksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgPSBmZWF0dXJlczsKIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYICZhbXA7JmFtcDsgd3gtJmd0O2RvX3Jlc2V0KQotCQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2KTsKJiM0MzsJCXd4LSZndDtkb19yZXNldChuZXRkZXYsIHRydWUpOwogCWVsc2UgaWYgKGNoYW5nZWQgJmFtcDsgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSkKIAkJd3hfc2V0X3J4X21vZGUobmV0ZGV2KTsKIApAQCAtMzE2Miw3ICYjNDM7MzE5OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiAKIG91dDoKIAlpZiAobmVlZF9yZXNldCAmYW1wOyZhbXA7IHd4LSZndDtkb19yZXNldCkKLQkJd3gtJmd0O2RvX3Jlc2V0KG5ldGRldik7CiYjNDM7CQl3eC0mZ3Q7ZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzM0Niw1ICYjNDM7MzM4MywyMyBAQCB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiB9CiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpOwogCiYjNDM7dm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyh3eC0mZ3Q7bmV0ZGV2KSB8fAomIzQzOwkgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwY2lfY2xlYXJfbWFzdGVyKHd4LSZndDtwZGV2KTsKJiM0MzsJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LSZndDtuZXRkZXYpOwomIzQzOwluZXRpZl9jYXJyaWVyX29mZih3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJbmV0aWZfdHhfZGlzYWJsZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsJd3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7CiYjNDM7CXd4X3B0cF9xdWllc2NlKHd4KTsKJiM0MzsKJiM0MzsJY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTsKJiM0MzsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O0NvbW1vbiBsaWJyYXJ5IGZvciBXYW5neHVuKFIpIEV0aGVybmV0IGRyaXZlcnMuJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAppbmRleCBhZWQ2ZWE4Y2YwZDY0YS4uMTFiZDc5OTg1ZTE3MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaApAQCAtNDEsNSAmIzQzOzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LAogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTsKJiM0Mzt2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIAogI2VuZGlmIC8qIF9XWF9MSUJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi5hMjVlYjZhZWQ1NjYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jCkBAIC0zMjEsNiAmIzQzOzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCkKIAlzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7CiAJaW50IHRzX2RvbmU7CiAKJiM0MzsJaWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiBIWjsKJiM0MzsKIAl0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpOwogCiAJd3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTsKQEAgLTg0Miw2ICYjNDM7ODQ1LDI0IEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCkKIH0KIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApOwogCiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtJmd0O2ZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKHd4LSZndDtwdHBfY2xvY2spCiYjNDM7CQlwdHBfY2FuY2VsX3dvcmtlcl9zeW5jKHd4LSZndDtwdHBfY2xvY2spOwomIzQzOwomIzQzOwlpZiAod3gtJmd0O3B0cF90eF9za2IpIHsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHd4LSZndDtwdHBfdHhfc2tiKTsKJiM0MzsJCXd4LSZndDtwdHBfdHhfc2tiID0gTlVMTDsKJiM0MzsJfQomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtJmd0O3N0YXRlKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7CiYjNDM7CiAvKioKICAqIHd4X3B0cF9yeF9od3RzdGFtcCAtIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggY2hlY2tzIGZvciBSWCB0aW1lIHN0YW1wCiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaAppbmRleCA1MGRiOTBhNmUzZWU2Ni4uYWQyZjgyNDg3NWQ1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaApAQCAtMTAsNiAmIzQzOzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3B0cF9pbml0KHN0cnVjdCB3eCAqd3gpOwogdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7CiYjNDM7dm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTsKIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oCmluZGV4IDY1ZTNlNTVkYjFjZmZiLi5hYTM1N2UyNjBjNGM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmgKQEAgLTQ1MCw2ICYjNDM7NDUwLDExIEBAIGVudW0gV1hfTVNDQV9DTURfdmFsdWUgewogI2RlZmluZSBXWF9QWF9UUl9DRkdfVEhSRV9TSElGVCAgICAgIDgKICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpCiAKJiM0MzsjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXAomIzQzOwkJKFdYX1BYX1RSX1JQKChxX3Blcl9wb29sKSAqICh2Zl9udW1iZXIpICYjNDM7ICh2Zl9xX2luZGV4KSkpCiYjNDM7I2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFwKJiM0MzsJCShXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSAmIzQzOyAodmZfcV9pbmRleCkpKQomIzQzOwogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFdYX1BYX1JSX0JBTChfaSkgICAgICAgICAgICAgKDB4MDEwMDAgJiM0MzsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCAmIzQzOyAoKF9pKSAqIDB4NDApKQpAQCAtMTA0MCw2ICYjNDM7MTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7CiBzdHJ1Y3Qgd3hfdHhfcXVldWVfc3RhdHMgewogCXU2NCByZXN0YXJ0X3F1ZXVlOwogCXU2NCB0eF9idXN5OwomIzQzOwl1MzIgdHhfZG9uZV9vbGQ7CiB9OwogCiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewpAQCAtMTA1NSw2ICYjNDM7MTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMgewogI2RlZmluZSB3eF9mb3JfZWFjaF9yaW5nKHBvc20sIGhlYWRtKSBcCiAJZm9yIChwb3NtID0gKGhlYWRtKS5yaW5nOyBwb3NtOyBwb3NtID0gcG9zbS0mZ3Q7bmV4dCkKIAomIzQzO2VudW0gd3hfcmluZ19zdGF0ZSB7CiYjNDM7CVdYX1RYX0RFVEVDVF9IQU5HLAomIzQzOwlXWF9IQU5HX0NIRUNLX0FSTUVELAomIzQzOwlXWF9SSU5HX1NUQVRFX05CSVRTCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7CiAJc3RydWN0IHd4X3JpbmcgKnJpbmc7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIGxpbmtlZCBsaXN0IG9mIHJpbmdzICovCiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi8KQEAgLTEwNzQsNiAmIzQzOzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7CiAJCXN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OwomIzQzOwlERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7CiAJdTggX19pb21lbSAqdGFpbDsKIAlkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCBoZWFkd2JfZG1hOwpAQCAtMTIwOSw2ICYjNDM7MTIyMiw4IEBAIGVudW0gd3hfc3RhdGUgewogCVdYX1NUQVRFX1BUUF9SVU5OSU5HLAogCVdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlXWF9TVEFURV9TRVJWSUNFX1NDSEVELAomIzQzOwlXWF9TVEFURV9ESVNBQkxFRCwKJiM0MzsJV1hfU1RBVEVfUkVTX0ZSRUVELAogCVdYX1NUQVRFX05CSVRTCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEyNzUsNiAmIzQzOzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHsKIAlXWF9GTEFHX05FRURfRE9fUkVTRVQsCiAJV1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELAogCVdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsCiYjNDM7CVdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwKJiM0MzsJV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksCiAJV1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKQEAgLTEzOTUsNyAmIzQzOzE0MTIsOCBAQCBzdHJ1Y3Qgd3ggewogCXZvaWQgKCphdHIpKHN0cnVjdCB3eF9yaW5nICpyaW5nLCBzdHJ1Y3Qgd3hfdHhfYnVmZmVyICpmaXJzdCwgdTggcHR5cGUpOwogCXZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTsKLQl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzOwl2b2lkICgqZG9fcmVzZXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTsKJiM0MzsJdm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7CiAJaW50ICgqcHRwX3NldHVwX3NkcCkoc3RydWN0IHd4ICp3eCk7CiAJdm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTsKIApAQCAtMTQyMyw2ICYjNDM7MTQ0MSw4IEBAIHN0cnVjdCB3eCB7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwomIzQzOwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7CiAJc3RydWN0IG11dGV4IHJlc2V0X2xvY2s7IC8qIG11dGV4IGZvciByZXNldCAqLwogfTsKIApAQCAtMTUwNSw3ICYjNDM7MTUyNSw4IEBAIHJkMzJfd3JhcChzdHJ1Y3Qgd3ggKnd4LCB1MzIgcmVnLCB1MzIgKmxhc3QpCiAKICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXAogCWRldl9lcnIoJmFtcDsod3gpLSZndDtwZGV2LSZndDtkZXYsIGZtdCwgIyNhcmcpCi0KJiM0MzsjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcCiYjNDM7CWRldl93YXJuKCZhbXA7KHd4KS0mZ3Q7cGRldi0mZ3Q7ZGV2LCBmbXQsICMjYXJnKQogI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcCiAJZGV2X2RiZygmYW1wOyh3eCktJmd0O3BkZXYtJmd0O2RldiwgZm10LCAjI2FyZykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYwpAQCAtNTksNyAmIzQzOzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7CiAJa3ZmcmVlKHRlbXBfcmluZyk7CiAKLQl3eF9jb25maWd1cmUod3gpOwogCW5nYmVfdXAod3gpOwogCiBjbGVhcl9yZXNldDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwppbmRleCBhMTYyMjE5OTU5MDlmOS4uNTZkNGI2MzM4N2ZkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9saWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9lcnIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbWJ4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oJiMzNDsKQEAgLTQ2LDYgJiM0Mzs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7CiAJeyB9CiB9OwogCiYjNDM7c3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CWlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGh5bGlua19zdG9wKHd4LSZndDtwaHlsaW5rKTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC0mZ3Q7cGh5bGluayk7CiYjNDM7CXd4X2NsZWFuX2FsbF90eF9yaW5ncyh3eCk7CiYjNDM7CXd4X2NsZWFuX2FsbF9yeF9yaW5ncyh3eCk7CiYjNDM7CXd4X2ZyZWVfaXJxKHd4KTsKJiM0MzsJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKJiM0MzsJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIG5nYmVfaW5pdF90eXBlX2NvZGUgLSBJbml0aWFsaXplIHRoZSBzaGFyZWQgY29kZQogICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKQEAgLTEzMyw2ICYjNDM7MTQ4LDggQEAgc3RhdGljIGludCBuZ2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eCkKIAogCXd4LSZndDttYnguc2l6ZSA9IFdYX1ZYTUFJTEJPWF9TSVpFOwogCXd4LSZndDtzZXR1cF90YyA9IG5nYmVfc2V0dXBfdGM7CiYjNDM7CXd4LSZndDtkb19yZXNldCA9IG5nYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSBuZ2JlX2Rvd25fc3VzcGVuZDsKIAlzZXRfYml0KDAsICZhbXA7d3gtJmd0O2Z3ZF9iaXRtYXNrKTsKIAogCXJldHVybiAwOwpAQCAtMTQ3LDYgJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7CiAKIAl3eF91cGRhdGVfc3RhdHMod3gpOwomIzQzOwl3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpOwomIzQzOwl3eF9jaGVja19lcnJfc3VidGFzayh3eCk7CiAKIAl3eF9zZXJ2aWNlX2V2ZW50X2NvbXBsZXRlKHd4KTsKIH0KQEAgLTM5Miw2ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtNDA4LDYgJiM0Mzs0MjgsOSBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7CiAJd3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtJmd0O21hYy5hZGRyKTsKIAlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUFRQX1JVTk5JTkcsIHd4LSZndDtzdGF0ZSkpCkBAIC00MjMsMTMgJiM0Mzs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCkKIAl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwogfQogCi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiB7CiAJd3hfY29uZmlndXJlX3ZlY3RvcnMod3gpOwogCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC0mZ3Q7bmV0ZGV2KTsKQEAgLTQ5MCw3ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAogCXd4X3B0cF9pbml0KHd4KTsKIAotCW5nYmVfdXAod3gpOwomIzQzOwluZ2JlX3VwX2NvbXBsZXRlKHd4KTsKIAogCXJldHVybiAwOwogZXJyX2Rpc19waHk6CkBAIC01MDMsNiAmIzQzOzUyNywxMiBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0Mzt2b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CXd4X2NvbmZpZ3VyZSh3eCk7CiYjNDM7CW5nYmVfdXBfY29tcGxldGUod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTUxOCwxMiAmIzQzOzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCW5nYmVfZG93bih3eCk7CiAJd3hfZnJlZV9pcnEod3gpOwogCXd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7CiAJd3hfZnJlZV9yZXNvdXJjZXMod3gpOwogCXBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtJmd0O3BoeWxpbmspOwomIzQzO291dDoKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU1NSw3ICYjNDM7NTg5LDggQEAgc3RhdGljIHZvaWQgbmdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQogCSplbmFibGVfd2FrZSA9ICEhd3VmYzsKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTU5MCw2ICYjNDM7NjI1LDggQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbmdiZV9jbG9zZShkZXYpOwomIzQzOwllbHNlCiYjNDM7CQluZ2JlX3Jlc2V0KHd4KTsKIAogCXd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpOwogCkBAIC02MDYsMTEgJiM0Mzs2NDMsMzYgQEAgaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBuZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHd4ICp3eCkKJiM0Mzt7CiYjNDM7CW5ldGlmX3RyYW5zX3VwZGF0ZSh3eC0mZ3Q7bmV0ZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJc2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CiYjNDM7CW5nYmVfZG93bih3eCk7CiYjNDM7CW5nYmVfdXAod3gpOwomIzQzOwomIzQzOwljbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQomIzQzOwkJbmdiZV9yZWluaXRfbG9ja2VkKHd4KTsKJiM0MzsJZWxzZQomIzQzOwkJbmdiZV9yZXNldCh3eCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBuZ2JlX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSwKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsCiYjNDM7CS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCwKIAkubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLAogCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLApAQCAtNzAwLDYgJiM0Mzs3NjIsNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTsKIAluZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOwogCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bmdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCiAJbmV0ZGV2LSZndDtmZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAogCQkJICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfApAQCAtNzk2LDYgJiM0Mzs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAl3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC0mZ3Q7bWFjLnBlcm1fYWRkcik7CiAKJiM0MzsJZXJyID0gd3hfaW5pdF9lcnJfdGFzayh3eCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlX21hY190YWJsZTsKJiM0MzsKIAluZ2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODEyLDYgJiM0Mzs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODIzLDYgJiM0Mzs4OTEsOCBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiBlcnJfY2FuY2VsX3NlcnZpY2U6CiAJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogZXJyX2ZyZWVfbWFjX3RhYmxlOgogCWtmcmVlKHd4LSZndDtyc3Nfa2V5KTsKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKQEAgLTg1NCw2ICYjNDM7OTI0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIAogCXBoeWxpbmtfZGVzdHJveSh3eC0mZ3Q7cGh5bGluayk7CiAJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LApAQCAtODYzLDcgJiM0Mzs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgaW50IG5nYmVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODkwLDYgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQl3eF9lcnIod3gsICYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuJiMzNDspOwogCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsJY2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWRldmljZV93YWtldXBfZGlzYWJsZSgmYW1wO3BkZXYtJmd0O2Rldik7CiAKQEAgLTkxNCw2ICYjNDM7OTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0gewogCS5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLAogCS5zaHV0ZG93biA9IG5nYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oCkBAIC0xMjUsNSAmIzQzOzEyNSw2IEBAIGV4dGVybiBjaGFyIG5nYmVfZHJpdmVyX25hbWVbXTsKIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpOwogdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IG5nYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpOwomIzQzO3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jCmluZGV4IDIwYzVhMjk1YzZjMjk2Li5kODVlZTgzMTkyZTRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vbGlid3gvd3hfZXJyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9wdHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2xpYnd4L3d4X2h3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9saWJ3eC93eF9tYnguaCYjMzQ7CkBAIC05Myw2ICYjNDM7OTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiB7CiAJaW50IGVycjsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtJmd0O3N0YXRlKSB8fAomIzQzOwkgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTA2LDYgJiM0MzsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpCiAKIHN0YXRpYyB2b2lkIHR4Z2JlX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IHd4ICp3eCkKIHsKJiM0MzsJaWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSkgfHwKJiM0MzsJICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfTElOS19DT05GSUcsIHd4LSZndDtmbGFncykpCiAJCXJldHVybjsKIApAQCAtMTIzLDYgJiM0MzsxMzIsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7CiAJdHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7CiAJd3hfdXBkYXRlX3N0YXRzKHd4KTsKJiM0MzsJd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTsKJiM0MzsJd3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpOwogCiAJd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7CiB9CkBAIC0xNDQsNiAmIzQzOzE1NSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpCiAJLyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovCiAJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CiAJY2xlYXJfYml0KFdYX1NUQVRFX0RPV04sIHd4LSZndDtzdGF0ZSk7CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LSZndDtzdGF0ZSk7CiAJd3hfbmFwaV9lbmFibGVfYWxsKHd4KTsKIAogCXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CkBAIC0xODcsNiAmIzQzOzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpCiAJdTggb2xkX2FkZHJbRVRIX0FMRU5dOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVyciA9IHR4Z2JlX3Jlc2V0X2h3KHd4KTsKIAlpZiAoZXJyICE9IDApCiAJCXd4X2Vycih3eCwgJiMzNDtIYXJkd2FyZSBFcnJvcjogJWRcbiYjMzQ7LCBlcnIpOwpAQCAtMjI0LDYgJiM0MzsyMzksNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KQogCXd4X2lycV9kaXNhYmxlKHd4KTsKIAl3eF9uYXBpX2Rpc2FibGVfYWxsKHd4KTsKIAomIzQzOwljbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC0mZ3Q7ZmxhZ3MpOwogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKIApAQCAtMjkyLDYgJiM0MzszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KQogCXR4Z2JlX3VwX2NvbXBsZXRlKHd4KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KQomIzQzO3sKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwaHlsaW5rX3N0b3Aod3gtJmd0O3BoeWxpbmspOwomIzQzOwl3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpOwomIzQzOwl3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpOwomIzQzOwl3eF9mcmVlX2lycSh3eCk7CiYjNDM7CXR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtJmd0O3ByaXYpOwomIzQzOwl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiYjNDM7CXR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpOwomIzQzO30KJiM0MzsKIC8qKgogICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGUKICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC00MDgsNiAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KQogCiAJd3gtJmd0O3NldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7CiAJd3gtJmd0O2RvX3Jlc2V0ID0gdHhnYmVfZG9fcmVzZXQ7CiYjNDM7CXd4LSZndDtkb3duX3N1c3BlbmQgPSB0eGdiZV9kb3duX3N1c3BlbmQ7CiAJc2V0X2JpdCgwLCAmYW1wO3d4LSZndDtmd2RfYml0bWFzayk7CiAKIAlzd2l0Y2ggKHd4LSZndDttYWMudHlwZSkgewpAQCAtNTE4LDEyICYjNDM7NTQ5LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAomIzQzOwlpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJd3hfcHRwX3N0b3Aod3gpOwogCXR4Z2JlX2Rvd24od3gpOwogCXd4X2ZyZWVfaXJxKHd4KTsKIAl0eGdiZV9mcmVlX21pc2NfaXJxKHd4LSZndDtwcml2KTsKIAl3eF9mcmVlX3Jlc291cmNlcyh3eCk7CiAJdHhnYmVfZmRpcl9maWx0ZXJfZXhpdCh3eCk7CiYjNDM7b3V0OgogCXd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTsKIAogCXJldHVybiAwOwpAQCAtNTQ0LDcgJiM0Mzs1NzksOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtJmd0O3N0YXRlKSkKJiM0MzsJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgdHhnYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC02MDYsMTEgJiM0Mzs2NDIsMTEgQEAgc3RhdGljIHZvaWQgdHhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KQogCW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKIH0KIAotdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpCiB7CiAJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpICZhbXA7JmFtcDsgcmVpbml0KQogCQl0eGdiZV9yZWluaXRfbG9ja2VkKHd4KTsKIAllbHNlCiAJCXR4Z2JlX3Jlc2V0KHd4KTsKQEAgLTY1NCw2ICYjNDM7NjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gdHhnYmVfY2xvc2UsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB3eF9jaGFuZ2VfbXR1LAogCS5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSwKJiM0MzsJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsCiAJLm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsCkBAIC03NDUsNiAmIzQzOzc4Miw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJd3gtJmd0O2RyaXZlcl9uYW1lID0gdHhnYmVfZHJpdmVyX25hbWU7CiAJdHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAJbmV0ZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDt0eGdiZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCW5ldGRldi0mZ3Q7dWRwX3R1bm5lbF9uaWNfaW5mbyA9ICZhbXA7dHhnYmVfdWRwX3R1bm5lbHM7CiAKIAkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KQEAgLTgxNCw2ICYjNDM7ODUyLDEwIEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtJmd0O21hYy5wZXJtX2FkZHIpOwogCXd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LSZndDttYWMucGVybV9hZGRyKTsKIAomIzQzOwllcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlOwomIzQzOwogCXR4Z2JlX2luaXRfc2VydmljZSh3eCk7CiAKIAllcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpOwpAQCAtODg5LDYgJiM0Mzs5MzEsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlnb3RvIGVycl9yZW1vdmVfcGh5OwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTsKJiM0MzsJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIApAQCAtOTE2LDYgJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogZXJyX2NhbmNlbF9zZXJ2aWNlOgogCXRpbWVyX2RlbGV0ZV9zeW5jKCZhbXA7d3gtJmd0O3NlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90YXNrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtyZXNldF90YXNrKTsKJiM0MzsJZGVzdHJveV93b3JrcXVldWUod3gtJmd0O3Jlc2V0X3dxKTsKIGVycl9mcmVlX21hY190YWJsZToKIAlrZnJlZSh3eC0mZ3Q7cnNzX2tleSk7CiAJa2ZyZWUod3gtJmd0O21hY190YWJsZSk7CkBAIC05NDgsNiAmIzQzOzk5Myw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDt3eC0mZ3Q7c2VydmljZV90aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3d4LSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7d3gtJmd0O3Jlc2V0X3Rhc2spOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZSh3eC0mZ3Q7cmVzZXRfd3EpOwogCiAJdHhnYmVfcmVtb3ZlX3BoeSh0eGdiZSk7CiAJd3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTsKQEAgLTk1OSw3ICYjNDM7MTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlrZnJlZSh3eC0mZ3Q7bWFjX3RhYmxlKTsKIAl3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC0mZ3Q7c3RhdGUpKQomIzQzOwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0gewpAQCAtOTY5LDYgJiM0MzsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHsKIAkucmVtb3ZlICAgPSB0eGdiZV9yZW1vdmUsCiAJLnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sCiAJLnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsCiYjNDM7CS5lcnJfaGFuZGxlciA9ICZhbXA7d3hfZXJyX2hhbmRsZXIsCiB9OwogCiBtb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaAppbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oCkBAIC0zMTMsNyAmIzQzOzMxMyw3IEBAIGV4dGVybiBjaGFyIHR4Z2JlX2RyaXZlcl9uYW1lW107CiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7CiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpOwogaW50IHR4Z2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTsKLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiYjNDM7dm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7CiAKICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcCiAJdW5zaWduZWQgbG9uZyBuYW1lW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdID0geyAwLCB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjIwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBXYW5neHVuIEV0aGVybmV0IERyaXZlcnMgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbiBmb3IgdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycywgYG5nYmVgIGFuZCBgdHhnYmVgLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlcyBhbmQgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyB0byBoYW5kbGUgUENJIGVycm9ycywgVHggdGltZW91dHMsIGFuZCBoYW5nIGRldGVjdGlvbi4gVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGVzZSBhcmUgcGh5c2ljYWwgUENJIGRldmljZXMsIHJpZ2h0PyBUeXBpY2FsbHksIG5ldHdvcmsgZHJpdmVycyBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgYXJlIGluYWNjZXNzaWJsZSB1bmxlc3MgdGhlcmUmIzM5O3MgZW11bGF0aW9uIGluIFFFTVUgb3Igc29tZSBzb2Z0d2FyZSBlcXVpdmFsZW50LgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBlbXVsYXRpb24uIEkgY291bGQgc2VhcmNoIGZvciBgbmdiZWAgb3IgYHR4Z2JlYCBpbiBRRU1VLCBidXQgSSBkb24mIzM5O3QgaGF2ZSB0aGUgc291cmNlIGhhbmR5LCBzbyBJJiMzOTtsbCBzZWUgaWYgdGhlIGtlcm5lbCBpdHNlbGYgaGFzIHNvZnR3YXJlIGVtdWxhdGlvbi4gQnV0IHdhaXQsIGBuZ2JlYCBhbmQgYHR4Z2JlYCAqYXJlKiBwaHlzaWNhbCBQQ0kgZGV2aWNlcy4gU28sIGlzIHRoZXJlIGFueSBjaGFuY2Ugc3l6a2FsbGVyIGNhbiBnZXQgdG8gdGhpcz8KClN5emthbGxlciBjYW4gZnV6eiBQQ0kgZGV2aWNlcyB1c2luZyB2UENJIGlmIHRoZSBkcml2ZXIgYmluZHMgdG8gaXQuIEl0IGNhbiB1c2UgYSBQQ0kgZnV6emVyIHRoYXQgcHJvYmVzIGRyaXZlcnMgYnkgbWF0Y2hpbmcgUENJIElEcyBhbmQgZnV6emluZyBNTUlPL1BJTy9jb25maWcgc3BhY2UuIElmIHRoZSBkcml2ZXIgaXMgYSBQQ0kgZHJpdmVyLCBzeXprYWxsZXIgY2FuIGhpdCB0aGUgYHByb2JlYCBmdW5jdGlvbiBhbmQgcG90ZW50aWFsbHkgb3RoZXIgZnVuY3Rpb25zIGlmIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyB0ZWxsIG1lIHRoYXQgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uIGFyZSBub3Qgd29ydGggZnV6emluZy4mIzM0OwoKU28sIGlzIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emluZyBlbm91Z2ggdG8gY29uc2lkZXIgaXQgJiMzNDtyZWFjaGFibGUmIzM0Oz8gRm9yIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMsIHdpdGhvdXQgZW11bGF0aW9uIChsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYG5ldGRldnNpbWApLCBpdCYjMzk7cyBnZW5lcmFsbHkgKnVucmVhY2hhYmxlKiBmb3IgZnVuY3Rpb25hbCBmdXp6aW5nLCB1bmxlc3Mgd2UmIzM5O3JlIGV4cGxpY2l0bHkgdGFsa2luZyBhYm91dCB0aGUgUENJIGZ1enplci4gTGV0IG1lIGNoZWNrIGlmIGBuZ2JlYCBvciBgdHhnYmVgIGFyZSB0eXBpY2FsbHkgZnV6emVkLiBCdXQgd2FpdCwgdGhlIGF1dGhvciBvZiB0aGUgY29tbWl0IGlzIGBzeXotY2x1c3RlcmAuIFRoaXMgcHJvYmFibHkgbWVhbnMgc3l6a2FsbGVyICppcyogdGVzdGluZyBhIHBhdGNoIGZvciB0aGlzIGRyaXZlci4gTm8sIHRoaXMgaXMgc3RhbmRhcmQgY29tbWl0IG1lc3NhZ2UgZm9yIHRoZSBwYXRjaCBiZWluZyB0ZXN0ZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBQQ0kgSURzIGZvciBgbmdiZWAgYW5kIGB0eGdiZWAuIENhbiBzeXprYWxsZXIgZnV6eiB0aGlzPyBZZXMsIHZpYSBgc3l6X3BjaV9wcm9iZWAuIEJ1dCBnZW5lcmFsbHksIHdlIGRvbiYjMzk7dCBjb25zaWRlciBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHdvcnRoIGZ1enppbmcgdW5sZXNzIHRoZXkgZXhwb3NlIGEgZ2VuZXJpYyBpbnRlcmZhY2UuCgpTeXprYWxsZXIgdXNlcyBhIGBzeXpfcGNpYCBwc2V1ZG8tZGV2aWNlIGluIFFFTVUgdG8gaW5qZWN0IFBDSSBkZXZpY2VzLiBTaG91bGQgd2UgZnV6eiB0aGlzPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSwgJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLiYjMzQ7IEFuZCwgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi4mIzM0OwoKV2FuZ3h1biBpcyBhIHBoeXNpY2FsIFBDSWUgRXRoZXJuZXQgY2FyZC4gVW5sZXNzIHdlIGhhdmUgaGFyZHdhcmUgcGFzc3Rocm91Z2gsIGl0JiMzOTtzIGdlbmVyYWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBmdW5jdGlvbmFsIG5ldHdvcmsgdHJhZmZpYyBwYXRocyBpbiBhIHN0YW5kYXJkIFZNLiBIb3dldmVyLCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciAqY2FuKiByZWFjaCB0aGUgYHByb2JlYCBmdW5jdGlvbiBhbmQgdHJpZ2dlciBpbnRlcnJ1cHRzIG9yIE1NSU8gYWNjZXNzZXMuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBpdCBjYW4gcmVhY2ggYHd4X3R4X3RpbWVvdXRgIG9yIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLgoKYHd4X3R4X3RpbWVvdXRgIGlzIGNhbGxlZCBieSB0aGUgbmV0ZGV2IHdhdGNoZG9nIHdoZW4gdGhlIFR4IHF1ZXVlIHRpbWVzIG91dC4gSWYgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkIGFuZCBicm91Z2h0IHVwLCB0aGVuIHNlbmRpbmcgYSBkdW1teSBwYWNrZXQgbWlnaHQgdHJpZ2dlciBgbmRvX3N0YXJ0X3htaXRgLiBJZiB0aGF0IGRvZXNuJiMzOTt0IGNvbXBsZXRlLCBgbmRvX3R4X3RpbWVvdXRgIHdpbGwgYmUgY2FsbGVkLiBCdXQgYHByb2JlYCB1c3VhbGx5IGZhaWxzIGlmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCByZXNwb25kIGNvcnJlY3RseS4gVW5sZXNzIHRoZSBQQ0kgZnV6emVyIHBlcmZlY3RseSBlbXVsYXRlcyB0aGUgTU1JTywgd2hpY2ggaXMgdW5saWtlbHkgZm9yIGEgY29tcGxleCBFdGhlcm5ldCBjb250cm9sbGVyLCBgcHJvYmVgIHdpbGwgZmFpbCwgYW5kIHRoZW4gd2Ugd2lsbCBub3QgcmVhY2ggdGhlIGZ1bmN0aW9ucyBiZWluZyBhZGRlZCBieSB0aGUgcGF0Y2guIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGVtdWxhdGlvbiBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbmd4dW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdD04PUNvbnRlbnRzOlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3QtNTktICAgdGkvaWNzc2dfcHJ1ZXRoXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYwOiAgIHdhbmd4dW4vdHhnYmVcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjE6ICAgd2FuZ3h1bi90eGdiZXZmXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYyOiAgIHdhbmd4dW4vbmdiZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MzogICB3YW5neHVuL25nYmV2ZlxuLS1cbk1BSU5UQUlORVJTPTI5MDAxPVc6XHRodHRwczovL3d3dy5uZXQtc3dpZnQuY29tXG5NQUlOVEFJTkVSUzoyOTAwMjpGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vKlxuTUFJTlRBSU5FUlM6MjkwMDM6RjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXG5NQUlOVEFJTkVSUy0yOTAwNC1GOlx0ZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXd4LmNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnPTE4Nz1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvdmlhL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc6MTg4OnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWctMTg5LXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvS2NvbmZpZ1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfTkVUX1ZFTkRPUl9WSUEpICYjNDM7PSB2aWEvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX05FVF9WRU5ET1JfV0FOR1hVTikgJiM0Mzs9IHdhbmd4dW4vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfV0laTkVUKSAmIzQzOz0gd2l6bmV0L1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zNy1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mzg6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZS5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTQzPWNvbmZpZyBUWEdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02MS1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NjI6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy03OS1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODA6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTg1PWNvbmZpZyBOR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTUtXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjk2Olx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTctXG4tLVxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA0Mj1zdGF0aWMgaW50IHBjaV9xdWlya19sb29uZ3Nvbl9hY3Moc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IGFjc19mbGFncylcbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MDYyLSAqL1xuZHJpdmVycy9wY2kvcXVpcmtzLmM6NTA2MzpzdGF0aWMgaW50ICBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MDY0LXtcbi0tXG5kcml2ZXJzL3BjaS9xdWlya3MuYz01MDc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldl9hY3NfZW5hYmxlZCB7XG4tLVxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0My1cdC8qIFdhbmd4dW4gbmljcyAqL1xuZHJpdmVycy9wY2kvcXVpcmtzLmM6NTI0NDpcdHsgUENJX1ZFTkRPUl9JRF9XQU5HWFVOLCBQQ0lfQU5ZX0lELCBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzIH0sXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MjQ1LVx0eyAwIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ3MgoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBXYW5neHVuIEV0aGVybmV0IERyaXZlcnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgV2FuZ3h1biBFdGhlcm5ldCBkcml2ZXJzIChgbmdiZWAsIGB0eGdiZWAsIGBuZ2JldmZgLCBgdHhnYmV2ZmApIGFyZSBjb21wbGV0ZWx5IHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMuIFRoZXJlJiMzOTtzIHplcm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGVtIHdpdGhpbiB0aGUga2VybmVsLiBXaGlsZSBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciAqbWlnaHQqIHRvdWNoIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLCBhY3R1YWxseSBoaXR0aW5nIHRoZSBUeC9SeCBwYXRocyDigJMgdGhpbmdzIGxpa2UgYHd4X2NsZWFuX3R4X2lycWAsIGB3eF90eF90aW1lb3V0YCwgb3IgYHd4X2hhbmRsZV90eF9oYW5nYCDigJMgZGVtYW5kcyBhIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBkZXZpY2UuIFRoYXQgbWVhbnMgcmVnaXN0cmF0aW9uIGFzIGEgbmV0ZGV2LCBicmluZ2luZyBpdCB1cCB2aWEgYG5kb19vcGVuYCwgYW5kIHRoZW4gcHJvY2Vzc2luZyByZWFsIFR4L1J4IHRyYWZmaWMuIEVzc2VudGlhbGx5IGltcG9zc2libGUgd2l0aG91dCBhIHJlYWwgZGV2aWNlIG9yIGEgZGVkaWNhdGVkLCBzcGVjaWFsaXplZCBlbXVsYXRvciBsaWtlIFFFTVUmIzM5O3MgZTEwMDBlLgoKVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyB3aXRoaW4gdGhpcyBwYXRjaCBzZWVtIHRvIGJlIHJlbGVnYXRlZCB0byB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQmFzZWQgb24gdGhpcywgSSYjMzk7bSB0aGlua2luZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhvbGQgb24sIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjay4gT2theSwgdGhlIHBhdGNoIGluIHF1ZXN0aW9uIGFkZHMgZXJyb3IgaGFuZGxpbmcgYW5kIFR4IGhhbmcgZGV0ZWN0aW9uIHRvIGBsaWJ3eGAsIGBuZ2JlYCwgYW5kIGB0eGdiZWAuIFRoZXNlIGFyZSB1bmVxdWl2b2NhbGx5IGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGluc3RydWN0cyBtZTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcGh5c2ljYWwgUENJZSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciB3aXRoIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiwgdGhpcyBjbGVhcmx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBJJiMzOTtsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byByZXBvcnQgdGhhdCB0aGlzIHBhdGNoJiMzOTtzIGZ1enppbmcgd29ydGggaXMgbWluaW1hbCwgYW5kIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KSB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbi4gVGhlc2UgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgd2l0aG91dCBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIFR4L1J4IHJpbmcgcHJvY2Vzc2luZyBhbmQgaGFyZHdhcmUgZXJyb3IgcmVjb3ZlcnkpIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdW5jdGlvbmFsbHkgZnV6eiBpbiBvdXIgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBHaWdhYml0IFBDSSBFeHByZXNzIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlLCBsaWJ3eCkgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggaGFuZyBkZXRlY3Rpb24uIFRoZXNlIGFyZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHdpdGhvdXQgc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgb3Igc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBUeC9SeCByaW5nIHByb2Nlc3NpbmcgYW5kIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5KSBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnVuY3Rpb25hbGx5IGZ1enogaW4gb3VyIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjU2LjU4MTI4MDU1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODUzODU4NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBHaWdhYml0IFBDSSBFeHByZXNzIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlLCBsaWJ3eCkgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggaGFuZyBkZXRlY3Rpb24uIFRoZXNlIGFyZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHdpdGhvdXQgc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgb3Igc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBUeC9SeCByaW5nIHByb2Nlc3NpbmcgYW5kIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5KSBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnVuY3Rpb25hbGx5IGZ1enogaW4gb3VyIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTU6NTYuNTgxMjg2MjA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTc4Njk2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyOWY5OTc1YTk2ZTNiMzI2NjUyNTk0NGI3NmQ2YmE2YjA2NGJiOGVkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMTM6MTU6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGVcXG5AQCAtNCw1ICs0LDUgQEBcXG4gXFxuIG9iai0kKENPTkZJR19MSUJXWCkgKz0gbGlid3gub1xcbiBcXG4tbGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXFxuK2xpYnd4LW9ianMgOj0gd3hfaHcubyB3eF9saWIubyB3eF9ldGh0b29sLm8gd3hfcHRwLm8gd3hfbWJ4Lm8gd3hfc3Jpb3YubyB3eF9lcnIub1xcbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wY2I5OWU0NTZhMWM5N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jXFxuQEAgLTAsMCArMSwzMTcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC4gKi9cXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYWVyLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwid3hfdHlwZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9lcnIuaFxcXCJcXG4rXFxuKy8qKlxcbisgKiB3eF9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZFxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGVcXG4rICpcXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nXFxuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxcbisgKi9cXG4rc3RhdGljIHBjaV9lcnNfcmVzdWx0X3Qgd3hfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbitcXG4rXFx0aWYgKCF3eClcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRuZXRkZXYgPSB3eC1cXHUwMDNlbmV0ZGV2O1xcbitcXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpXFxuK1xcdFxcdHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUO1xcbitcXG4rXFx0aWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xcbitcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHQvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi9cXG4rXFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB3eF9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LlxcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybjogcGNpX2Vyc19yZXN1bHRfdC5cXG4rICpcXG4rICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuXFxuKyAqL1xcbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcbitcXHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XFxuK1xcdFxcdHd4X2Vycih3eCwgXFxcIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcXG4rXFx0fVxcbitcXG4rXFx0LyogbWFrZSBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgZG9uZSBiZWZvcmUgY2xlYXJpbmcgdGhlIGZsYWcgKi9cXG4rXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG4rXFx0cGNpX3Jlc3RvcmVfc3RhdGUocGRldik7XFxuK1xcdHBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpO1xcbitcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb3duX3N1c3BlbmQpXFxuK1xcdFxcdHd4LVxcdTAwM2Vkb3duX3N1c3BlbmQod3gpO1xcbitcXHRpZiAod3gtXFx1MDAzZWRvX3Jlc2V0KVxcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQod3gtXFx1MDAzZW5ldGRldiwgZmFsc2UpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHd4X2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uXFxuKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2VcXG4rICpcXG4rICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXRcXG4rICogaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgd3hfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRuZXRkZXYgPSB3eC1cXHUwMDNlbmV0ZGV2O1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHRlcnIgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19vcGVuKG5ldGRldik7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0d3hfZXJyKHd4LCBcXFwiRmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XFxuK291dDpcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlciA9IHtcXG4rXFx0LmVycm9yX2RldGVjdGVkID0gd3hfaW9fZXJyb3JfZGV0ZWN0ZWQsXFxuK1xcdC5zbG90X3Jlc2V0ID0gd3hfaW9fc2xvdF9yZXNldCxcXG4rXFx0LnJlc3VtZSA9IHd4X2lvX3Jlc3VtZSxcXG4rfTtcXG4rRVhQT1JUX1NZTUJPTCh3eF9lcnJfaGFuZGxlcik7XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9wZl9yZXNldF9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR3eF93YXJuKHd4LCBcXFwiUmVzZXQgYWRhcHRlci5cXFxcblxcXCIpO1xcbitcXHRpZiAod3gtXFx1MDAzZWRvX3Jlc2V0KVxcbitcXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQod3gtXFx1MDAzZW5ldGRldiwgdHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHd4X3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCByZXNldF90YXNrKTtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXG4rXFx0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHR3eF9zb2Z0X3F1aWVzY2Uod3gpO1xcbitcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcXG4rXFxuK291dDpcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbitcXG4rdm9pZCB3eF9jaGVja19lcnJfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHF1ZXVlX3dvcmsod3gtXFx1MDAzZXJlc2V0X3dxLCBcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfZXJyX3N1YnRhc2spO1xcbitcXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHR3eC1cXHUwMDNlcmVzZXRfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcIiVzX3Jlc2V0X3dxXyV4XFxcIiwgV1FfVU5CT1VORCB8IFdRX0hJR0hQUkksXFxuK1xcdFxcdFxcdFxcdCAgICAgICAxLCB3eC1cXHUwMDNlZHJpdmVyX25hbWUsIHBjaV9kZXZfaWQod3gtXFx1MDAzZXBkZXYpKTtcXG4rXFx0aWYgKCF3eC1cXHUwMDNlcmVzZXRfd3EpIHtcXG4rXFx0XFx0d3hfZXJyKHd4LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSB3eF9yZXNldF93cSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzaywgd3hfcmVzZXRfdGFzayk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfaW5pdF9lcnJfdGFzayk7XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9yaW5nX3R4X3BlbmRpbmcoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXFx1MDAzZXR4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cXHUwMDNlbmV4dF90b19jbGVhbilcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgd3hfdmZfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHN0cnVjdCB3eF9yaW5nX2ZlYXR1cmUgKnZtZHEgPSBcXHUwMDI2d3gtXFx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XFxuK1xcdHUzMiBxX3Blcl9wb29sID0gX19BTElHTl9NQVNLKDEsIH52bWRxLVxcdTAwM2VtYXNrKTtcXG4rXFx0dTMyIGksIGo7XFxuK1xcbitcXHRpZiAoIXd4LVxcdTAwM2VudW1fdmZzKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV92ZnM7IGkrKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgcV9wZXJfcG9vbDsgaisrKSB7XFxuK1xcdFxcdFxcdHUzMiBoLCB0O1xcbitcXG4rXFx0XFx0XFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcXG4rXFx0XFx0XFx0dCA9IHJkMzIod3gsIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChoICE9IHQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfd2F0Y2hkb2dfZmx1c2hfdHgoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKG5ldGlmX2NhcnJpZXJfb2sod3gtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICh3eF9yaW5nX3R4X3BlbmRpbmcod3gpIHx8IHd4X3ZmX3R4X3BlbmRpbmcod3gpKSB7XFxuK1xcdFxcdC8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLFxcbitcXHRcXHQgKiBidXQgd2UndmUgZ290IHF1ZXVlZCBUeCB3b3JrIHRoYXQncyBuZXZlciBnb2luZ1xcbitcXHRcXHQgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC5cXG4rXFx0XFx0ICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHd4X3dhcm4od3gsIFxcXCJpbml0aWF0aW5nIHJlc2V0IGR1ZSB0byBsb3N0IGxpbmsgd2l0aCBwZW5kaW5nIFR4IHdvcmtcXFxcblxcXCIpO1xcbitcXHRcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF9kZXRlY3RfdHhfaGFuZyhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogSWYgd2UncmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqL1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcod3gtXFx1MDAzZW5ldGRldikgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqL1xcbitcXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cXHUwMDNlbmV0ZGV2KSkge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0XFx0c2V0X2JpdChXWF9UWF9ERVRFQ1RfSEFORywgd3gtXFx1MDAzZXR4X3JpbmdbaV0tXFx1MDAzZXN0YXRlKTtcXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHd4X3dhdGNoZG9nX2ZsdXNoX3R4KHd4KTtcXG4rXFx0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wod3hfY2hlY2tfaGFuZ19zdWJ0YXNrKTtcXG4rXFxuK3N0YXRpYyBib29sIHd4X2NoZWNrX3BjaWVfZXJyb3Ioc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHR1MTYgdmlkLCBwY2lfY21kO1xcbitcXG4rXFx0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXFx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFxcdTAwMjZ2aWQpO1xcbitcXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cXHUwMDNlcGRldiwgUENJX0NPTU1BTkQsIFxcdTAwMjZwY2lfY21kKTtcXG4rXFxuK1xcdC8qIFBDSWUgbGluayBsb3NzIG9yIG1lbW9yeSBzcGFjZSBjYW4ndCBhY2Nlc3MgKi9cXG4rXFx0aWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCBcXHUwMDI2IFBDSV9DT01NQU5EX01FTU9SWSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB3eF90eF90aW1lb3V0X3JlY292ZXJ5KHN0cnVjdCB3eCAqd3gpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWVcXG4rXFx0ICogcmVjb3ZlcnkgbWVjaGFuaXNtLiBIb3dldmVyLCB0aGlzIHJlY292ZXJ5IGZsb3cgcmVsaWVzIG9uIHRoZSBBRVJcXG4rXFx0ICogZHJpdmVyIGZvciBjdXJyZW50IGtlcm5lbCBwb2xpY3kuIFRoZXJlZm9yZSwgYSBzZWxmLWNvbnRhaW5lZFxcbitcXHQgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC5cXG4rXFx0ICovXFxuK1xcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHd4X2Vycih3eCwgXFxcIlBDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXFxcblxcXCIpO1xcbitcXHRxdWV1ZV93b3JrKHd4LVxcdTAwM2VyZXNldF93cSwgXFx1MDAyNnd4LVxcdTAwM2VyZXNldF90YXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzZXRfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXFx1MDAzZWZsYWdzKTtcXG4rXFx0d3hfd2Fybih3eCwgXFxcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXFxcblxcXCIpO1xcbitcXHR3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHd4KTtcXG4rfVxcbitcXG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCBfX2Fsd2F5c191bnVzZWQgdHhxdWV1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFxuK1xcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcXG4rXFx0XFx0d3hfdHhfdGltZW91dF9yZWNvdmVyeSh3eCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF90eF90aW1lb3V0KTtcXG4rXFxuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KVxcbit7XFxuK1xcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVxcdTAwM2VuZXRkZXYpO1xcbitcXG4rXFx0d3hfd2Fybih3eCxcXG4rXFx0XFx0XFxcIkRldGVjdGVkIFR4IFVuaXQgSGFuZzogUXVldWUgJWQsIFRESCAleCwgVERUICV4LCBudHUgJXgsIG50YyAleCwgbnRjLnRpbWVfc3RhbXAgJWx4LCBqaWZmaWVzICVseFxcXFxuXFxcIixcXG4rXFx0XFx0dHhfcmluZy1cXHUwMDNlcXVldWVfaW5kZXgsXFxuK1xcdFxcdHJkMzIod3gsIFdYX1BYX1RSX1JQKHR4X3JpbmctXFx1MDAzZXJlZ19pZHgpKSxcXG4rXFx0XFx0cmQzMih3eCwgV1hfUFhfVFJfV1AodHhfcmluZy1cXHUwMDNlcmVnX2lkeCkpLFxcbitcXHRcXHR0eF9yaW5nLVxcdTAwM2VuZXh0X3RvX3VzZSwgbmV4dCxcXG4rXFx0XFx0dHhfcmluZy1cXHUwMDNldHhfYnVmZmVyX2luZm9bbmV4dF0udGltZV9zdGFtcCwgamlmZmllcyk7XFxuK1xcbitcXHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXFx1MDAzZW5ldGRldiwgdHhfcmluZy1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbitcXG4rXFx0d3hfdHhfdGltZW91dF9yZXNldCh3eCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXJyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oXFxuQEAgLTAsMCArMSwxOCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXFxuKyAqIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfV1hfRVJSX0hfXFxuKyNkZWZpbmUgX1dYX0VSUl9IX1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgd3hfZXJyX2hhbmRsZXI7XFxuK1xcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xcbitpbnQgd3hfaW5pdF9lcnJfdGFzayhzdHJ1Y3Qgd3ggKnd4KTtcXG4rdm9pZCB3eF9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XFxuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KTtcXG4rXFxuKyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5pbmRleCA1ZGY5NzFhY2E5ZTM1Zi4uZDEzNTZmZjVkNjliNTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xcbkBAIC0zOTUsNyArMzk1LDcgQEAgc3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxcbiBcXG4gXFx0LyogcmVzZXQgdGhlIGRldmljZSB0byBhcHBseSB0aGUgbmV3IFJTQyBzZXR0aW5nICovXFxuIFxcdGlmIChuZWVkX3Jlc2V0IFxcdTAwMjZcXHUwMDI2IHd4LVxcdTAwM2Vkb19yZXNldClcXG4tXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldik7XFxuK1xcdFxcdHd4LVxcdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xcbiB9XFxuIFxcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xcbmluZGV4IDI2MGUxNGQ1ZDU0MTIxLi4xMjJjNDk1MmQyMDNmMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcXG5AQCAtMTkzMiw2ICsxOTMyLDcgQEAgc3RhdGljIHZvaWQgd3hfY29uZmlndXJlX3R4X3Jpbmcoc3RydWN0IHd4ICp3eCxcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyaW5nLVxcdTAwM2VhdHJfc2FtcGxlX3JhdGUgPSAwO1xcbiBcXG4rXFx0Yml0bWFwX3plcm8ocmluZy1cXHUwMDNlc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHQvKiByZWluaXRpYWxpemUgdHhfYnVmZmVyX2luZm8gKi9cXG4gXFx0bWVtc2V0KHJpbmctXFx1MDAzZXR4X2J1ZmZlcl9pbmZvLCAwLFxcbiBcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB3eF90eF9idWZmZXIpICogcmluZy1cXHUwMDNlY291bnQpO1xcbkBAIC0yODUxLDE2ICsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcXG4gc3RhdGljIHZvaWQgd3hfdXBkYXRlX3hvZmZfcnhfbGZjKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0c3RydWN0IHd4X2h3X3N0YXRzICpod3N0YXRzID0gXFx1MDAyNnd4LVxcdTAwM2VzdGF0cztcXG4rXFx0dTY0IGRhdGE7XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0aWYgKHd4LVxcdTAwM2VmYy5tb2RlICE9IHd4X2ZjX2Z1bGwgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHd4LVxcdTAwM2VmYy5tb2RlICE9IHd4X2ZjX3J4X3BhdXNlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAod3gtXFx1MDAzZW1hYy50eXBlIFxcdTAwM2U9IHd4X21hY19hbWwpXFxuLVxcdFxcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IHJkMzJfd3JhcCh3eCwgV1hfTUFDX0xYT0ZGUlhDX0FNTCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ3eC1cXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XFxuK1xcdFxcdGRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2d3gtXFx1MDAzZWxhc3Rfc3RhdHMubHhvZmZyeGMpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGh3c3RhdHMtXFx1MDAzZWx4b2ZmcnhjICs9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XFxuK1xcdFxcdGRhdGEgPSByZDY0KHd4LCBXWF9NQUNfTFhPRkZSWEMpO1xcbitcXHRod3N0YXRzLVxcdTAwM2VseG9mZnJ4YyArPSBkYXRhO1xcbitcXG4rXFx0LyogcmVmaWxsIGNyZWRpdHMgKG5vIHR4IGhhbmcpIGlmIHdlIHJlY2VpdmVkIHhvZmYgKi9cXG4rXFx0aWYgKCFkYXRhKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHd4LVxcdTAwM2V0eF9yaW5nW2ldLVxcdTAwM2VzdGF0ZSk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbmluZGV4IDgxNGQ4OGQyYWVlNDg3Li5hNjUzMTJjODA3OGZhOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwid3hfdHlwZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwid3hfaHcuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X3ZmX2xpYi5oXFxcIlxcbkBAIC03NDIsNiArNzQzLDM3IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp3eF90eHJpbmdfdHhxKGNvbnN0IHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbiBcXHRyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShyaW5nLVxcdTAwM2VuZXRkZXYsIHJpbmctXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcXG4rXFxuK1xcdGhlYWQgPSByaW5nLVxcdTAwM2VuZXh0X3RvX2NsZWFuO1xcbitcXHR0YWlsID0gcmluZy1cXHUwMDNlbmV4dF90b191c2U7XFxuK1xcbitcXHRyZXR1cm4gKChoZWFkIFxcdTAwM2M9IHRhaWwpID8gdGFpbCA6IHRhaWwgKyByaW5nLVxcdTAwM2Vjb3VudCkgLSBoZWFkO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxcbit7XFxuK1xcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXFx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkO1xcbitcXHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xcbitcXHR1MzIgdHhfZG9uZSA9IHJpbmctXFx1MDAzZXN0YXRzLnBhY2tldHM7XFxuK1xcbitcXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAodHhfZG9uZV9vbGQgPT0gdHhfZG9uZSBcXHUwMDI2XFx1MDAyNiB0eF9wZW5kaW5nKVxcbitcXHRcXHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xcbitcXHRcXHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHQvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqL1xcbitcXHRyaW5nLVxcdTAwM2V0eF9zdGF0cy50eF9kb25lX29sZCA9IHR4X2RvbmU7XFxuK1xcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cXG4rXFx0Y2xlYXJfYml0KFdYX0hBTkdfQ0hFQ0tfQVJNRUQsIHJpbmctXFx1MDAzZXN0YXRlKTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHd4X2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlc1xcbiAgKiBAcV92ZWN0b3I6IHN0cnVjdHVyZSBjb250YWluaW5nIGludGVycnVwdCBhbmQgcmluZyBpbmZvcm1hdGlvblxcbkBAIC04NjYsNiArODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxcbiBcXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHd4X3R4cmluZ190eHEodHhfcmluZyksXFxuIFxcdFxcdFxcdFxcdCAgdG90YWxfcGFja2V0cywgdG90YWxfYnl0ZXMpO1xcbiBcXG4rXFx0aWYgKHd4X2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHtcXG4rXFx0XFx0d3hfaGFuZGxlX3R4X2hhbmcodHhfcmluZywgaSk7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpXFxuIFxcdGlmICh1bmxpa2VseSh0b3RhbF9wYWNrZXRzIFxcdTAwMjZcXHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cXHUwMDNlbmV0ZGV2KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcXHUwMDNlPSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7XFxuQEAgLTMxMTIsNyArMzE0OSw3IEBAIGludCB3eF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgPSBmZWF0dXJlcztcXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIFxcdGVsc2UgaWYgKGNoYW5nZWQgXFx1MDAyNiAoTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxcbiBcXHRcXHR3eF9zZXRfcnhfbW9kZShuZXRkZXYpO1xcbiBcXG5AQCAtMzE2Miw3ICszMTk5LDcgQEAgaW50IHd4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFxuIG91dDpcXG4gXFx0aWYgKG5lZWRfcmVzZXQgXFx1MDAyNlxcdTAwMjYgd3gtXFx1MDAzZWRvX3Jlc2V0KVxcbi1cXHRcXHR3eC1cXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcXG4rXFx0XFx0d3gtXFx1MDAzZWRvX3Jlc2V0KG5ldGRldiwgdHJ1ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zMzQ2LDUgKzMzODMsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfc2VydmljZV90aW1lcik7XFxuIFxcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh3eC1cXHUwMDNlbmV0ZGV2KSB8fFxcbitcXHQgICAgdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwY2lfY2xlYXJfbWFzdGVyKHd4LVxcdTAwM2VwZGV2KTtcXG4rXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHd4LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRuZXRpZl9jYXJyaWVyX29mZih3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0bmV0aWZfdHhfZGlzYWJsZSh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuK1xcdHd4X3B0cF9xdWllc2NlKHd4KTtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh3eF9zb2Z0X3F1aWVzY2UpO1xcbitcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuaW5kZXggYWVkNmVhOGNmMGQ2NGEuLjExYmQ3OTk4NWUxNzEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuQEAgLTQxLDUgKzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4rdm9pZCB3eF9zb2Z0X3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIFxcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbmluZGV4IDQ0ZjNlNjUwNTI0NjhmLi5hMjVlYjZhZWQ1NjYwZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuY1xcbkBAIC0zMjEsNiArMzIxLDkgQEAgc3RhdGljIGxvbmcgd3hfcHRwX2RvX2F1eF93b3JrKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwKVxcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHd4LCBwdHBfY2Fwcyk7XFxuIFxcdGludCB0c19kb25lO1xcbiBcXG4rXFx0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIEhaO1xcbitcXG4gXFx0dHNfZG9uZSA9IHd4X3B0cF90eF9od3RzdGFtcF93b3JrKHd4KTtcXG4gXFxuIFxcdHd4X3B0cF9vdmVyZmxvd19jaGVjayh3eCk7XFxuQEAgLTg0Miw2ICs4NDUsMjQgQEAgdm9pZCB3eF9wdHBfc3RvcChzdHJ1Y3Qgd3ggKnd4KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfcHRwX3N0b3ApO1xcbiBcXG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19QVFBfUFBTX0VOQUJMRUQsIHd4LVxcdTAwM2VmbGFncyk7XFxuK1xcbitcXHRpZiAod3gtXFx1MDAzZXB0cF9jbG9jaylcXG4rXFx0XFx0cHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC1cXHUwMDNlcHRwX2Nsb2NrKTtcXG4rXFxuK1xcdGlmICh3eC1cXHUwMDNlcHRwX3R4X3NrYikge1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueSh3eC1cXHUwMDNlcHRwX3R4X3NrYik7XFxuK1xcdFxcdHd4LVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4rXFx0fVxcbitcXHRjbGVhcl9iaXRfdW5sb2NrKFdYX1NUQVRFX1BUUF9UWF9JTl9QUk9HUkVTUywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHd4X3B0cF9xdWllc2NlKTtcXG4rXFxuIC8qKlxcbiAgKiB3eF9wdHBfcnhfaHd0c3RhbXAgLSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgUlggdGltZSBzdGFtcFxcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuaW5kZXggNTBkYjkwYTZlM2VlNjYuLmFkMmY4MjQ4NzVkNTFiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5oXFxuQEAgLTEwLDYgKzEwLDcgQEAgdm9pZCB3eF9wdHBfcmVzZXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N1c3BlbmQoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eCk7XFxuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfcHRwX3J4X2h3dHN0YW1wKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBpbnQgd3hfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbmluZGV4IDY1ZTNlNTVkYjFjZmZiLi5hYTM1N2UyNjBjNGM1MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXFxuQEAgLTQ1MCw2ICs0NTAsMTEgQEAgZW51bSBXWF9NU0NBX0NNRF92YWx1ZSB7XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX1RIUkVfU0hJRlQgICAgICA4XFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXFxuIFxcbisjZGVmaW5lIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfUlAoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbisjZGVmaW5lIFdYX1BYX1RSX1dQX1BWKHFfcGVyX3Bvb2wsIHZmX251bWJlciwgdmZfcV9pbmRleCkgXFxcXFxcbitcXHRcXHQoV1hfUFhfVFJfV1AoKHFfcGVyX3Bvb2wpICogKHZmX251bWJlcikgKyAodmZfcV9pbmRleCkpKVxcbitcXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFMKF9pKSAgICAgICAgICAgICAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpXFxuICNkZWZpbmUgV1hfUFhfUlJfQkFIKF9pKSAgICAgICAgICAgICAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpXFxuQEAgLTEwNDAsNiArMTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XFxuIHN0cnVjdCB3eF90eF9xdWV1ZV9zdGF0cyB7XFxuIFxcdHU2NCByZXN0YXJ0X3F1ZXVlO1xcbiBcXHR1NjQgdHhfYnVzeTtcXG4rXFx0dTMyIHR4X2RvbmVfb2xkO1xcbiB9O1xcbiBcXG4gc3RydWN0IHd4X3J4X3F1ZXVlX3N0YXRzIHtcXG5AQCAtMTA1NSw2ICsxMDYxLDEyIEBAIHN0cnVjdCB3eF9yeF9xdWV1ZV9zdGF0cyB7XFxuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcXFxcbiBcXHRmb3IgKHBvc20gPSAoaGVhZG0pLnJpbmc7IHBvc207IHBvc20gPSBwb3NtLVxcdTAwM2VuZXh0KVxcbiBcXG4rZW51bSB3eF9yaW5nX3N0YXRlIHtcXG4rXFx0V1hfVFhfREVURUNUX0hBTkcsXFxuK1xcdFdYX0hBTkdfQ0hFQ0tfQVJNRUQsXFxuK1xcdFdYX1JJTkdfU1RBVEVfTkJJVFNcXG4rfTtcXG4rXFxuIHN0cnVjdCB3eF9yaW5nX2NvbnRhaW5lciB7XFxuIFxcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xcbiBcXHR1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7ICAgICAgIC8qIHRvdGFsIGJ5dGVzIHByb2Nlc3NlZCB0aGlzIGludCAqL1xcbkBAIC0xMDc0LDYgKzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XFxuIFxcdFxcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xcbiBcXHRcXHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcXG4gXFx0fTtcXG4rXFx0REVDTEFSRV9CSVRNQVAoc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xcbiBcXHR1OCBfX2lvbWVtICp0YWlsO1xcbiBcXHRkbWFfYWRkcl90IGRtYTsgICAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciByaW5nICovXFxuIFxcdGRtYV9hZGRyX3QgaGVhZHdiX2RtYTtcXG5AQCAtMTIwOSw2ICsxMjIyLDggQEAgZW51bSB3eF9zdGF0ZSB7XFxuIFxcdFdYX1NUQVRFX1BUUF9SVU5OSU5HLFxcbiBcXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXFxuIFxcdFdYX1NUQVRFX1NFUlZJQ0VfU0NIRUQsXFxuK1xcdFdYX1NUQVRFX0RJU0FCTEVELFxcbitcXHRXWF9TVEFURV9SRVNfRlJFRUQsXFxuIFxcdFdYX1NUQVRFX05CSVRTXFx0XFx0LyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMjc1LDYgKzEyOTAsOCBAQCBlbnVtIHd4X3BmX2ZsYWdzIHtcXG4gXFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxcbiBcXHRXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsXFxuIFxcdFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsXFxuK1xcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcXG4rXFx0V1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksXFxuIFxcdFdYX1BGX0ZMQUdTX05CSVRTICAgICAgICAgICAgICAgLyogbXVzdCBiZSBsYXN0ICovXFxuIH07XFxuIFxcbkBAIC0xMzk1LDcgKzE0MTIsOCBAQCBzdHJ1Y3Qgd3gge1xcbiBcXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcXG4gXFx0dm9pZCAoKmNvbmZpZ3VyZV9mZGlyKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0aW50ICgqc2V0dXBfdGMpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHRjKTtcXG4tXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4rXFx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuK1xcdHZvaWQgKCpkb3duX3N1c3BlbmQpKHN0cnVjdCB3eCAqd3gpO1xcbiBcXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFx0dm9pZCAoKnNldF9udW1fcXVldWVzKShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuQEAgLTE0MjMsNiArMTQ0MSw4IEBAIHN0cnVjdCB3eCB7XFxuIFxcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzaztcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc2V0X3dxO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXFxuIH07XFxuIFxcbkBAIC0xNTA1LDcgKzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxcbiBcXG4gI2RlZmluZSB3eF9lcnIod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9lcnIoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4tXFxuKyNkZWZpbmUgd3hfd2Fybih3eCwgZm10LCBhcmcuLi4pIFxcXFxcXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gI2RlZmluZSB3eF9kYmcod3gsIGZtdCwgYXJnLi4uKSBcXFxcXFxuIFxcdGRldl9kYmcoXFx1MDAyNih3eCktXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgZm10LCAjI2FyZylcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xcbmluZGV4IGIyZTE5MTk4MjgwMzI2Li4xOTYwZjcxNTQxNTFkZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcXG5AQCAtNTksNyArNTksNiBAQCBzdGF0aWMgaW50IG5nYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XFxuIFxcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcbiBcXG4tXFx0d3hfY29uZmlndXJlKHd4KTtcXG4gXFx0bmdiZV91cCh3eCk7XFxuIFxcbiBjbGVhcl9yZXNldDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXFxuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9lcnIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbkBAIC00Niw2ICs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XFxuIFxcdHsgfVxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgbmdiZV9kb3duX3N1c3BlbmQoc3RydWN0IHd4ICp3eClcXG4re1xcbitcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBoeWxpbmtfc3RvcCh3eC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXFx1MDAzZXBoeWxpbmspO1xcbitcXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xcbitcXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xcbitcXHR3eF9mcmVlX2lycSh3eCk7XFxuK1xcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuK1xcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcXG4gICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtMTMzLDYgKzE0OCw4IEBAIHN0YXRpYyBpbnQgbmdiZV9zd19pbml0KHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBcXHR3eC1cXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcXG4gXFx0d3gtXFx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcXG4rXFx0d3gtXFx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kO1xcbiBcXHRzZXRfYml0KDAsIFxcdTAwMjZ3eC1cXHUwMDNlZndkX2JpdG1hc2spO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE0Nyw2ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHd4LCBzZXJ2aWNlX3Rhc2spO1xcbiBcXG4gXFx0d3hfdXBkYXRlX3N0YXRzKHd4KTtcXG4rXFx0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcXG4rXFx0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xcbiBcXG4gXFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XFxuIH1cXG5AQCAtMzkyLDYgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdG5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTtcXG4gXFxuK1xcdGNsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG5AQCAtNDA4LDYgKzQyOCw5IEBAIHN0YXRpYyB2b2lkIG5nYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcXG4gXFxuIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcXG4ge1xcbitcXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHd4X2ZsdXNoX3N3X21hY190YWJsZSh3eCk7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMuYWRkcik7XFxuIFxcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXFx1MDAzZXN0YXRlKSlcXG5AQCAtNDIzLDEzICs0NDYsMTQgQEAgdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eClcXG4gXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4gfVxcbiBcXG4tdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpXFxuK3N0YXRpYyB2b2lkIG5nYmVfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcXG4ge1xcbiBcXHR3eF9jb25maWd1cmVfdmVjdG9ycyh3eCk7XFxuIFxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXHQvKiBlbmFibGUgdHJhbnNtaXRzICovXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMod3gtXFx1MDAzZW5ldGRldik7XFxuQEAgLTQ5MCw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXG4gXFx0d3hfcHRwX2luaXQod3gpO1xcbiBcXG4tXFx0bmdiZV91cCh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIGVycl9kaXNfcGh5OlxcbkBAIC01MDMsNiArNTI3LDEyIEBAIHN0YXRpYyBpbnQgbmdiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdHd4X2NvbmZpZ3VyZSh3eCk7XFxuK1xcdG5nYmVfdXBfY29tcGxldGUod3gpO1xcbit9XFxuK1xcbiAvKipcXG4gICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2VcXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxcbkBAIC01MTgsMTIgKzU0OCwxNiBAQCBzdGF0aWMgaW50IG5nYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHRuZ2JlX2Rvd24od3gpO1xcbiBcXHR3eF9mcmVlX2lycSh3eCk7XFxuIFxcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XFxuIFxcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcXG4gXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh3eC1cXHUwMDNlcGh5bGluayk7XFxuK291dDpcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTU1NSw3ICs1ODksOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXFxuIFxcdCplbmFibGVfd2FrZSA9ICEhd3VmYztcXG4gXFx0d3hfY29udHJvbF9odyh3eCwgZmFsc2UpO1xcbiBcXG4tXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5AQCAtNTkwLDYgKzYyNSw4IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxcbiBcXHQgKi9cXG4gXFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcXG4gXFx0XFx0bmdiZV9jbG9zZShkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5nYmVfcmVzZXQod3gpO1xcbiBcXG4gXFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIFxcbkBAIC02MDYsMTEgKzY0MywzNiBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cXHUwMDNlbmV0ZGV2KTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnd4LVxcdTAwM2VyZXNldF9sb2NrKTtcXG4rXFx0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcbitcXHRuZ2JlX2Rvd24od3gpO1xcbitcXHRuZ2JlX3VwKHd4KTtcXG4rXFxuK1xcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbit9XFxuK1xcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4rXFx0XFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuZ2JlX3Jlc2V0KHd4KTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZ2JlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fb3BlbiAgICAgICAgICAgICAgID0gbmdiZV9vcGVuLFxcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXFxuIFxcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zdGFydF94bWl0ICAgICAgICAgPSB3eF94bWl0X2ZyYW1lLFxcbitcXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXFxuIFxcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gd3hfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcXG5AQCAtNzAwLDYgKzc2Miw3IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0d3gtXFx1MDAzZWRyaXZlcl9uYW1lID0gbmdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNm5nYmVfbmV0ZGV2X29wcztcXG4rXFx0bmV0ZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcXG4gXFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxcbkBAIC03OTYsNiArODU5LDEwIEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXFx1MDAzZW1hYy5wZXJtX2FkZHIpO1xcbiBcXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcbitcXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XFxuK1xcbiBcXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04MTIsNiArODc5LDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC04MjMsNiArODkxLDggQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XFxuIFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIGVycl9mcmVlX21hY190YWJsZTpcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZXJzc19rZXkpO1xcbiBcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG5AQCAtODU0LDYgKzkyNCw4IEBAIHN0YXRpYyB2b2lkIG5nYmVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBcXG4gXFx0cGh5bGlua19kZXN0cm95KHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxcbkBAIC04NjMsNyArOTM1LDggQEAgc3RhdGljIHZvaWQgbmdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXFxuQEAgLTg5MCw2ICs5NjMsNyBAQCBzdGF0aWMgaW50IG5nYmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHR3eF9lcnIod3gsIFxcXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiBcXHRkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbkBAIC05MTQsNiArOTg4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nYmVfZHJpdmVyID0ge1xcbiBcXHQucmVzdW1lICAgPSBuZ2JlX3Jlc3VtZSxcXG4gXFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKG5nYmVfZHJpdmVyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXFxuaW5kZXggNzA3N2EwZGE0Yzk4NmEuLmM5MjMzZGM3YWU1MDUyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxcbkBAIC0xMjUsNSArMTI1LDYgQEAgZXh0ZXJuIGNoYXIgbmdiZV9kcml2ZXJfbmFtZVtdO1xcbiB2b2lkIG5nYmVfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcXG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0Yyk7XFxuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XFxuIFxcbiAjZW5kaWYgLyogX05HQkVfVFlQRV9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuaW5kZXggMjBjNWEyOTVjNmMyOTYuLmQ4NWVlODMxOTJlNGZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2xpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXJyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9tYnguaFxcXCJcXG5AQCAtOTMsNiArOTQsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTEwNiw2ICsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIFxcbiBzdGF0aWMgdm9pZCB0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4rXFx0aWYgKHRlc3RfYml0KFdYX1NUQVRFX0RPV04sIHd4LVxcdTAwM2VzdGF0ZSkgfHxcXG4rXFx0ICAgIHRlc3RfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0xMjMsNiArMTMyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHd4KTtcXG4gXFx0dHhnYmVfbGlua19jb25maWdfc3VidGFzayh3eCk7XFxuIFxcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XFxuK1xcdHd4X2NoZWNrX2hhbmdfc3VidGFzayh3eCk7XFxuK1xcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcXG4gXFxuIFxcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xcbiB9XFxuQEAgLTE0NCw2ICsxNTUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHQvKiBtYWtlIHN1cmUgdG8gY29tcGxldGUgcHJlLW9wZXJhdGlvbnMgKi9cXG4gXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuIFxcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cXHUwMDNlc3RhdGUpO1xcbiBcXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xcbiBcXG4gXFx0c3dpdGNoICh3eC1cXHUwMDNlbWFjLnR5cGUpIHtcXG5AQCAtMTg3LDYgKzE5OSw5IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3Jlc2V0KHN0cnVjdCB3eCAqd3gpXFxuIFxcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZXJyID0gdHhnYmVfcmVzZXRfaHcod3gpO1xcbiBcXHRpZiAoZXJyICE9IDApXFxuIFxcdFxcdHd4X2Vycih3eCwgXFxcIkhhcmR3YXJlIEVycm9yOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG5AQCAtMjI0LDYgKzIzOSw3IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHd4X2lycV9kaXNhYmxlKHd4KTtcXG4gXFx0d3hfbmFwaV9kaXNhYmxlX2FsbCh3eCk7XFxuIFxcbitcXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4gXFxuQEAgLTI5Miw2ICszMDgsMjAgQEAgdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxcbiBcXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxcbit7XFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGh5bGlua19zdG9wKHd4LVxcdTAwM2VwaHlsaW5rKTtcXG4rXFx0d3hfY2xlYW5fYWxsX3R4X3JpbmdzKHd4KTtcXG4rXFx0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcXG4rXFx0d3hfZnJlZV9pcnEod3gpO1xcbitcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4rXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbitcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqICB0eGdiZV9pbml0X3R5cGVfY29kZSAtIEluaXRpYWxpemUgdGhlIHNoYXJlZCBjb2RlXFxuICAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXFxuQEAgLTQwOCw2ICs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gXFxuIFxcdHd4LVxcdTAwM2VzZXR1cF90YyA9IHR4Z2JlX3NldHVwX3RjO1xcbiBcXHR3eC1cXHUwMDNlZG9fcmVzZXQgPSB0eGdiZV9kb19yZXNldDtcXG4rXFx0d3gtXFx1MDAzZWRvd25fc3VzcGVuZCA9IHR4Z2JlX2Rvd25fc3VzcGVuZDtcXG4gXFx0c2V0X2JpdCgwLCBcXHUwMDI2d3gtXFx1MDAzZWZ3ZF9iaXRtYXNrKTtcXG4gXFxuIFxcdHN3aXRjaCAod3gtXFx1MDAzZW1hYy50eXBlKSB7XFxuQEAgLTUxOCwxMiArNTQ5LDE2IEBAIHN0YXRpYyBpbnQgdHhnYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9SRVNfRlJFRUQsIHd4LVxcdTAwM2VzdGF0ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0d3hfcHRwX3N0b3Aod3gpO1xcbiBcXHR0eGdiZV9kb3duKHd4KTtcXG4gXFx0d3hfZnJlZV9pcnEod3gpO1xcbiBcXHR0eGdiZV9mcmVlX21pc2NfaXJxKHd4LVxcdTAwM2Vwcml2KTtcXG4gXFx0d3hfZnJlZV9yZXNvdXJjZXMod3gpO1xcbiBcXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcXG4rb3V0OlxcbiBcXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNTQ0LDcgKzU3OSw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHR4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC02MDYsMTEgKzY0MiwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X2xvY2spO1xcbiB9XFxuIFxcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3ZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpXFxuIHtcXG4gXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2IHJlaW5pdClcXG4gXFx0XFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0dHhnYmVfcmVzZXQod3gpO1xcbkBAIC02NTQsNiArNjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IHR4Z2JlX2Nsb3NlLFxcbiBcXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcXG4rXFx0Lm5kb190eF90aW1lb3V0ICAgICAgICAgPSB3eF90eF90aW1lb3V0LFxcbiBcXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXMgICAgICAgPSB3eF9maXhfZmVhdHVyZXMsXFxuQEAgLTc0NSw2ICs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcXG4gXFx0dHhnYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XFxuIFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xcbitcXHRuZXRkZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xcbiBcXHRuZXRkZXYtXFx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcXHUwMDI2dHhnYmVfdWRwX3R1bm5lbHM7XFxuIFxcbiBcXHQvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi9cXG5AQCAtODE0LDYgKzg1MiwxMCBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIFxcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVxcdTAwM2VtYWMucGVybV9hZGRyKTtcXG4gXFxuK1xcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX21hY190YWJsZTtcXG4rXFxuIFxcdHR4Z2JlX2luaXRfc2VydmljZSh3eCk7XFxuIFxcbiBcXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xcbkBAIC04ODksNiArOTMxLDcgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0Z290byBlcnJfcmVtb3ZlX3BoeTtcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3eCk7XFxuK1xcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXG4gXFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcbkBAIC05MTYsNiArOTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gZXJyX2NhbmNlbF9zZXJ2aWNlOlxcbiBcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXNlcnZpY2VfdGltZXIpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90YXNrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2d3gtXFx1MDAzZXJlc2V0X3Rhc2spO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cXHUwMDNlcmVzZXRfd3EpO1xcbiBlcnJfZnJlZV9tYWNfdGFibGU6XFxuIFxcdGtmcmVlKHd4LVxcdTAwM2Vyc3Nfa2V5KTtcXG4gXFx0a2ZyZWUod3gtXFx1MDAzZW1hY190YWJsZSk7XFxuQEAgLTk0OCw2ICs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfdGFzayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVxcdTAwM2VyZXNldF93cSk7XFxuIFxcbiBcXHR0eGdiZV9yZW1vdmVfcGh5KHR4Z2JlKTtcXG4gXFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcXG5AQCAtOTU5LDcgKzEwMDYsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGtmcmVlKHd4LVxcdTAwM2VtYWNfdGFibGUpO1xcbiBcXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcXG4gXFxuLVxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cXHUwMDNlc3RhdGUpKVxcbitcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XFxuQEAgLTk2OSw2ICsxMDE3LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG4gXFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxcbiBcXHQuc2h1dGRvd24gPSB0eGdiZV9zaHV0ZG93bixcXG4gXFx0LnNyaW92X2NvbmZpZ3VyZSA9IHd4X3BjaV9zcmlvdl9jb25maWd1cmUsXFxuK1xcdC5lcnJfaGFuZGxlciA9IFxcdTAwMjZ3eF9lcnJfaGFuZGxlcixcXG4gfTtcXG4gXFxuIG1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG5pbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcXG4gdm9pZCB0eGdiZV9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xcbi12b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KTtcXG4gXFxuICNkZWZpbmUgREVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0tfWkVSTyhuYW1lKSBcXFxcXFxuIFxcdHVuc2lnbmVkIGxvbmcgbmFtZVtQSFlfSU5URVJGQUNFX01PREVfTUFYXSA9IHsgMCwgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNTo1Ny40ODExNTkzOTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTUzOTcwNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2FuZ3h1biBHaWdhYml0IFBDSSBFeHByZXNzIEV0aGVybmV0IGRyaXZlcnMgKG5nYmUsIHR4Z2JlLCBsaWJ3eCkgdG8gYWRkIFBDSSBlcnJvciBoYW5kbGluZyBhbmQgVHggaGFuZyBkZXRlY3Rpb24uIFRoZXNlIGFyZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHdpdGhvdXQgc29mdHdhcmUgZW11bGF0aW9uIGluIHRoZSBrZXJuZWwgb3Igc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUvR0NFKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBUeC9SeCByaW5nIHByb2Nlc3NpbmcgYW5kIGhhcmR3YXJlIGVycm9yIHJlY292ZXJ5KSBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnVuY3Rpb25hbGx5IGZ1enogaW4gb3VyIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyOWY5OTc1YTk2ZTNiMzI2NjUyNTk0NGI3NmQ2YmE2YjA2NGJiOGVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxMzoxNTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5pbmRleCBhNzFiMGFkNzdkZTNmNy4uYzg3MjRiYjEyOWFhMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlXG5AQCAtNCw1ICs0LDUgQEBcbiBcbiBvYmotJChDT05GSUdfTElCV1gpICs9IGxpYnd4Lm9cbiBcbi1saWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cbitsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm8gd3hfZXJyLm9cbiBsaWJ3eC1vYmpzICs9IHd4X3ZmLm8gd3hfdmZfbGliLm8gd3hfdmZfY29tbW9uLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wY2I5OWU0NTZhMWM5N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuY1xuQEAgLTAsMCArMSwzMTcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMjYgQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQuICovXG4rLyogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWVyLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInd4X3R5cGUuaFwiXG4rI2luY2x1ZGUgXCJ3eF9saWIuaFwiXG4rI2luY2x1ZGUgXCJ3eF9lcnIuaFwiXG4rXG4rLyoqXG4rICogd3hfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWRcbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZVxuKyAqXG4rICogUmV0dXJuOiBwY2lfZXJzX3Jlc3VsdF90LlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZ1xuKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLlxuKyAqL1xuK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHd4X2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHRcdFx0XHQgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4rXG4rXHRpZiAoIXd4KVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdG5ldGRldiA9IHd4LVx1MDAzZW5ldGRldjtcbitcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSlcbitcdFx0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7XG4rXG4rXHRpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKVxuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0LyogUmVxdWVzdCBhIHNsb3QgcmVzZXQuICovXG4rXHRyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDtcbit9XG4rXG4rLyoqXG4rICogd3hfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC5cbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICpcbisgKiBSZXR1cm46IHBjaV9lcnNfcmVzdWx0X3QuXG4rICpcbisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC5cbisgKi9cbitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB3eF9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXG4rXHRpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKSB7XG4rXHRcdHd4X2Vycih3eCwgXCJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXFxuXCIpO1xuK1x0XHRyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDtcbitcdH1cbitcbitcdC8qIG1ha2UgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIGNsZWFyaW5nIHRoZSBmbGFnICovXG4rXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbitcdGNsZWFyX2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLCB3eC1cdTAwM2VmbGFncyk7XG4rXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbitcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xuK1x0cGNpX3dha2VfZnJvbV9kMyhwZGV2LCBmYWxzZSk7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvd25fc3VzcGVuZClcbitcdFx0d3gtXHUwMDNlZG93bl9zdXNwZW5kKHd4KTtcbitcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCBmYWxzZSk7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDtcbit9XG4rXG4rLyoqXG4rICogd3hfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi5cbisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlXG4rICpcbisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdFxuKyAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZCB3eF9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuK1x0cnRubF9sb2NrKCk7XG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4rXHRcdGVyciA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHR3eF9lcnIod3gsIFwiRmFpbGVkIHRvIG9wZW4gbmV0ZGV2IGFmdGVyIHJlc2V0XFxuXCIpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHR9XG4rXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4rb3V0OlxuK1x0cnRubF91bmxvY2soKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlciA9IHtcbitcdC5lcnJvcl9kZXRlY3RlZCA9IHd4X2lvX2Vycm9yX2RldGVjdGVkLFxuK1x0LnNsb3RfcmVzZXQgPSB3eF9pb19zbG90X3Jlc2V0LFxuK1x0LnJlc3VtZSA9IHd4X2lvX3Jlc3VtZSxcbit9O1xuK0VYUE9SVF9TWU1CT0wod3hfZXJyX2hhbmRsZXIpO1xuK1xuK3N0YXRpYyB2b2lkIHd4X3BmX3Jlc2V0X3N1YnRhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3hfd2Fybih3eCwgXCJSZXNldCBhZGFwdGVyLlxcblwiKTtcbitcdGlmICh3eC1cdTAwM2Vkb19yZXNldClcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQod3gtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHJlc2V0X3Rhc2spO1xuK1xuK1x0cnRubF9sb2NrKCk7XG4rXG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0d3hfc29mdF9xdWllc2NlKHd4KTtcbitcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR3eF9wZl9yZXNldF9zdWJ0YXNrKHd4KTtcbitcbitvdXQ6XG4rXHRydG5sX3VubG9jaygpO1xuK31cbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9jaGVja19lcnJfc3VidGFzayk7XG4rXG4raW50IHd4X2luaXRfZXJyX3Rhc2soc3RydWN0IHd4ICp3eClcbit7XG4rXHR3eC1cdTAwM2VyZXNldF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcIiVzX3Jlc2V0X3dxXyV4XCIsIFdRX1VOQk9VTkQgfCBXUV9ISUdIUFJJLFxuK1x0XHRcdFx0ICAgICAgIDEsIHd4LVx1MDAzZWRyaXZlcl9uYW1lLCBwY2lfZGV2X2lkKHd4LVx1MDAzZXBkZXYpKTtcbitcdGlmICghd3gtXHUwMDNlcmVzZXRfd3EpIHtcbitcdFx0d3hfZXJyKHd4LCBcIkZhaWxlZCB0byBjcmVhdGUgd3hfcmVzZXRfd3Egd29ya3F1ZXVlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdElOSVRfV09SSyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrLCB3eF9yZXNldF90YXNrKTtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2luaXRfZXJyX3Rhc2spO1xuK1xuK3N0YXRpYyBib29sIHd4X3JpbmdfdHhfcGVuZGluZyhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCB3eF9yaW5nICp0eF9yaW5nID0gd3gtXHUwMDNldHhfcmluZ1tpXTtcbitcbitcdFx0aWYgKHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UgIT0gdHhfcmluZy1cdTAwM2VuZXh0X3RvX2NsZWFuKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF92Zl90eF9wZW5kaW5nKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0c3RydWN0IHd4X3JpbmdfZmVhdHVyZSAqdm1kcSA9IFx1MDAyNnd4LVx1MDAzZXJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV07XG4rXHR1MzIgcV9wZXJfcG9vbCA9IF9fQUxJR05fTUFTSygxLCB+dm1kcS1cdTAwM2VtYXNrKTtcbitcdHUzMiBpLCBqO1xuK1xuK1x0aWYgKCF3eC1cdTAwM2VudW1fdmZzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdmZzOyBpKyspIHtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgcV9wZXJfcG9vbDsgaisrKSB7XG4rXHRcdFx0dTMyIGgsIHQ7XG4rXG4rXHRcdFx0aCA9IHJkMzIod3gsIFdYX1BYX1RSX1JQX1BWKHFfcGVyX3Bvb2wsIGksIGopKTtcbitcdFx0XHR0ID0gcmQzMih3eCwgV1hfUFhfVFJfV1BfUFYocV9wZXJfcG9vbCwgaSwgaikpO1xuK1xuK1x0XHRcdGlmIChoICE9IHQpXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCB3eF93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAobmV0aWZfY2Fycmllcl9vayh3eC1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAod3hfcmluZ190eF9wZW5kaW5nKHd4KSB8fCB3eF92Zl90eF9wZW5kaW5nKHd4KSkge1xuK1x0XHQvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSxcbitcdFx0ICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmdcbitcdFx0ICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguXG4rXHRcdCAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuXG4rXHRcdCAqL1xuK1x0XHR3eF93YXJuKHd4LCBcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIGxvc3QgbGluayB3aXRoIHBlbmRpbmcgVHggd29ya1xcblwiKTtcbitcdFx0c2V0X2JpdChXWF9GTEFHX05FRURfUEZfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfZGV0ZWN0X3R4X2hhbmcoc3RydWN0IHd4ICp3eClcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qIElmIHdlJ3JlIGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi9cbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEZvcmNlIGRldGVjdGlvbiBvZiBodW5nIGNvbnRyb2xsZXIgKi9cbitcdGlmIChuZXRpZl9jYXJyaWVyX29rKHd4LVx1MDAzZW5ldGRldikpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd3gtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxuK1x0XHRcdHNldF9iaXQoV1hfVFhfREVURUNUX0hBTkcsIHd4LVx1MDAzZXR4X3JpbmdbaV0tXHUwMDNlc3RhdGUpO1xuK1x0fVxuK31cbitcbit2b2lkIHd4X2NoZWNrX2hhbmdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d3hfd2F0Y2hkb2dfZmx1c2hfdHgod3gpO1xuK1x0d3hfZGV0ZWN0X3R4X2hhbmcod3gpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X2NoZWNrX2hhbmdfc3VidGFzayk7XG4rXG4rc3RhdGljIGJvb2wgd3hfY2hlY2tfcGNpZV9lcnJvcihzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHUxNiB2aWQsIHBjaV9jbWQ7XG4rXG4rXHRwY2lfcmVhZF9jb25maWdfd29yZCh3eC1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2aWQpO1xuK1x0cGNpX3JlYWRfY29uZmlnX3dvcmQod3gtXHUwMDNlcGRldiwgUENJX0NPTU1BTkQsIFx1MDAyNnBjaV9jbWQpO1xuK1xuK1x0LyogUENJZSBsaW5rIGxvc3Mgb3IgbWVtb3J5IHNwYWNlIGNhbid0IGFjY2VzcyAqL1xuK1x0aWYgKHZpZCA9PSBVMTZfTUFYIHx8ICEocGNpX2NtZCBcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHd4X3R4X3RpbWVvdXRfcmVjb3Zlcnkoc3RydWN0IHd4ICp3eClcbit7XG4rXHQvKlxuK1x0ICogV2hlbiBhIFBDSWUgaGFyZHdhcmUgZXJyb3Igb2NjdXJzLCB0aGUgZHJpdmVyIHNob3VsZCBpbml0aWF0ZSBhIFBDSWVcbitcdCAqIHJlY292ZXJ5IG1lY2hhbmlzbS4gSG93ZXZlciwgdGhpcyByZWNvdmVyeSBmbG93IHJlbGllcyBvbiB0aGUgQUVSXG4rXHQgKiBkcml2ZXIgZm9yIGN1cnJlbnQga2VybmVsIHBvbGljeS4gVGhlcmVmb3JlLCBhIHNlbGYtY29udGFpbmVkXG4rXHQgKiByZWNvdmVyeSBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIHlldC5cbitcdCAqL1xuK1x0c2V0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0d3hfZXJyKHd4LCBcIlBDSWUgZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHR4IHRpbWVvdXRcXG5cIik7XG4rXHRxdWV1ZV93b3JrKHd4LVx1MDAzZXJlc2V0X3dxLCBcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgd3hfdHhfdGltZW91dF9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHNldF9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4rXHR3eF93YXJuKHd4LCBcImluaXRpYXRpbmcgcmVzZXQgZHVlIHRvIHR4IHRpbWVvdXRcXG5cIik7XG4rXHR3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHd4KTtcbit9XG4rXG4rdm9pZCB3eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVuc2lnbmVkIGludCBfX2Fsd2F5c191bnVzZWQgdHhxdWV1ZSlcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmICh3eF9jaGVja19wY2llX2Vycm9yKHd4KSlcbitcdFx0d3hfdHhfdGltZW91dF9yZWNvdmVyeSh3eCk7XG4rXHRlbHNlXG4rXHRcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuK31cbitFWFBPUlRfU1lNQk9MKHd4X3R4X3RpbWVvdXQpO1xuK1xuK3ZvaWQgd3hfaGFuZGxlX3R4X2hhbmcoc3RydWN0IHd4X3JpbmcgKnR4X3JpbmcsIHVuc2lnbmVkIGludCBuZXh0KVxuK3tcbitcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdih0eF9yaW5nLVx1MDAzZW5ldGRldik7XG4rXG4rXHR3eF93YXJuKHd4LFxuK1x0XHRcIkRldGVjdGVkIFR4IFVuaXQgSGFuZzogUXVldWUgJWQsIFRESCAleCwgVERUICV4LCBudHUgJXgsIG50YyAleCwgbnRjLnRpbWVfc3RhbXAgJWx4LCBqaWZmaWVzICVseFxcblwiLFxuK1x0XHR0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4LFxuK1x0XHRyZDMyKHd4LCBXWF9QWF9UUl9SUCh0eF9yaW5nLVx1MDAzZXJlZ19pZHgpKSxcbitcdFx0cmQzMih3eCwgV1hfUFhfVFJfV1AodHhfcmluZy1cdTAwM2VyZWdfaWR4KSksXG4rXHRcdHR4X3JpbmctXHUwMDNlbmV4dF90b191c2UsIG5leHQsXG4rXHRcdHR4X3JpbmctXHUwMDNldHhfYnVmZmVyX2luZm9bbmV4dF0udGltZV9zdGFtcCwgamlmZmllcyk7XG4rXG4rXHRuZXRpZl9zdG9wX3N1YnF1ZXVlKHR4X3JpbmctXHUwMDNlbmV0ZGV2LCB0eF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbitcbitcdHd4X3R4X3RpbWVvdXRfcmVzZXQod3gpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2Vyci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNmE4MmEyNjM1Mjg0OVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9lcnIuaFxuQEAgLTAsMCArMSwxOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBXYW5nWHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyXG4rICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyNiBCZWlqaW5nIFdhbmdYdW4gVGVjaG5vbG9neSBDby4sIEx0ZC5cbisgKi9cbitcbisjaWZuZGVmIF9XWF9FUlJfSF9cbisjZGVmaW5lIF9XWF9FUlJfSF9cbitcbitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB3eF9lcnJfaGFuZGxlcjtcbitcbit2b2lkIHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK2ludCB3eF9pbml0X2Vycl90YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7XG4rdm9pZCB3eF9oYW5kbGVfdHhfaGFuZyhzdHJ1Y3Qgd3hfcmluZyAqdHhfcmluZywgdW5zaWduZWQgaW50IG5leHQpO1xuK1xuKyNlbmRpZiAvKiBfV1hfRVJSX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggNWRmOTcxYWNhOWUzNWYuLmQxMzU2ZmY1ZDY5YjU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5AQCAtMzk1LDcgKzM5NSw3IEBAIHN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcbiBcbiBcdC8qIHJlc2V0IHRoZSBkZXZpY2UgdG8gYXBwbHkgdGhlIG5ldyBSU0Mgc2V0dGluZyAqL1xuIFx0aWYgKG5lZWRfcmVzZXQgXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIH1cbiBcbiBpbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jXG5pbmRleCAyNjBlMTRkNWQ1NDEyMS4uMTIyYzQ5NTJkMjAzZjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2h3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfaHcuY1xuQEAgLTE5MzIsNiArMTkzMiw3IEBAIHN0YXRpYyB2b2lkIHd4X2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCB3eCAqd3gsXG4gXHRlbHNlXG4gXHRcdHJpbmctXHUwMDNlYXRyX3NhbXBsZV9yYXRlID0gMDtcbiBcbitcdGJpdG1hcF96ZXJvKHJpbmctXHUwMDNlc3RhdGUsIFdYX1JJTkdfU1RBVEVfTkJJVFMpO1xuIFx0LyogcmVpbml0aWFsaXplIHR4X2J1ZmZlcl9pbmZvICovXG4gXHRtZW1zZXQocmluZy1cdTAwM2V0eF9idWZmZXJfaW5mbywgMCxcbiBcdCAgICAgICBzaXplb2Yoc3RydWN0IHd4X3R4X2J1ZmZlcikgKiByaW5nLVx1MDAzZWNvdW50KTtcbkBAIC0yODUxLDE2ICsyODUyLDI2IEBAIEVYUE9SVF9TWU1CT0wod3hfZmNfZW5hYmxlKTtcbiBzdGF0aWMgdm9pZCB3eF91cGRhdGVfeG9mZl9yeF9sZmMoc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3Qgd3hfaHdfc3RhdHMgKmh3c3RhdHMgPSBcdTAwMjZ3eC1cdTAwM2VzdGF0cztcbitcdHU2NCBkYXRhO1xuK1x0aW50IGk7XG4gXG4gXHRpZiAod3gtXHUwMDNlZmMubW9kZSAhPSB3eF9mY19mdWxsIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHd4LVx1MDAzZWZjLm1vZGUgIT0gd3hfZmNfcnhfcGF1c2UpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICh3eC1cdTAwM2VtYWMudHlwZSBcdTAwM2U9IHd4X21hY19hbWwpXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gcmQzMl93cmFwKHd4LCBXWF9NQUNfTFhPRkZSWENfQU1MLFxuLVx0XHRcdFx0XHQgICAgICAgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4rXHRcdGRhdGEgPSByZDMyX3dyYXAod3gsIFdYX01BQ19MWE9GRlJYQ19BTUwsXG4rXHRcdFx0XHQgXHUwMDI2d3gtXHUwMDNlbGFzdF9zdGF0cy5seG9mZnJ4Yyk7XG4gXHRlbHNlXG4tXHRcdGh3c3RhdHMtXHUwMDNlbHhvZmZyeGMgKz0gcmQ2NCh3eCwgV1hfTUFDX0xYT0ZGUlhDKTtcbitcdFx0ZGF0YSA9IHJkNjQod3gsIFdYX01BQ19MWE9GRlJYQyk7XG4rXHRod3N0YXRzLVx1MDAzZWx4b2ZmcnhjICs9IGRhdGE7XG4rXG4rXHQvKiByZWZpbGwgY3JlZGl0cyAobm8gdHggaGFuZykgaWYgd2UgcmVjZWl2ZWQgeG9mZiAqL1xuK1x0aWYgKCFkYXRhKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4rXHRcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCB3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbmluZGV4IDgxNGQ4OGQyYWVlNDg3Li5hNjUzMTJjODA3OGZhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCJ3eF90eXBlLmhcIlxuICNpbmNsdWRlIFwid3hfbGliLmhcIlxuKyNpbmNsdWRlIFwid3hfZXJyLmhcIlxuICNpbmNsdWRlIFwid3hfcHRwLmhcIlxuICNpbmNsdWRlIFwid3hfaHcuaFwiXG4gI2luY2x1ZGUgXCJ3eF92Zl9saWIuaFwiXG5AQCAtNzQyLDYgKzc0MywzNyBAQCBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqd3hfdHhyaW5nX3R4cShjb25zdCBzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbiBcdHJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHJpbmctXHUwMDNlbmV0ZGV2LCByaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiB9XG4gXG4rc3RhdGljIHUzMiB3eF9nZXRfdHhfcGVuZGluZyhzdHJ1Y3Qgd3hfcmluZyAqcmluZylcbit7XG4rXHR1bnNpZ25lZCBpbnQgaGVhZCwgdGFpbDtcbitcbitcdGhlYWQgPSByaW5nLVx1MDAzZW5leHRfdG9fY2xlYW47XG4rXHR0YWlsID0gcmluZy1cdTAwM2VuZXh0X3RvX3VzZTtcbitcbitcdHJldHVybiAoKGhlYWQgXHUwMDNjPSB0YWlsKSA/IHRhaWwgOiB0YWlsICsgcmluZy1cdTAwM2Vjb3VudCkgLSBoZWFkO1xuK31cbitcbitzdGF0aWMgYm9vbCB3eF9jaGVja190eF9oYW5nKHN0cnVjdCB3eF9yaW5nICpyaW5nKVxuK3tcbitcdHUzMiB0eF9kb25lX29sZCA9IHJpbmctXHUwMDNldHhfc3RhdHMudHhfZG9uZV9vbGQ7XG4rXHR1MzIgdHhfcGVuZGluZyA9IHd4X2dldF90eF9wZW5kaW5nKHJpbmcpO1xuK1x0dTMyIHR4X2RvbmUgPSByaW5nLVx1MDAzZXN0YXRzLnBhY2tldHM7XG4rXG4rXHRpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXWF9UWF9ERVRFQ1RfSEFORywgcmluZy1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh0eF9kb25lX29sZCA9PSB0eF9kb25lIFx1MDAyNlx1MDAyNiB0eF9wZW5kaW5nKVxuK1x0XHQvKiBtYWtlIHN1cmUgaXQgaXMgdHJ1ZSBmb3IgdHdvIGNoZWNrcyBpbiBhIHJvdyAqL1xuK1x0XHRyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdC8qIHVwZGF0ZSBjb21wbGV0ZWQgc3RhdHMgYW5kIGNvbnRpbnVlICovXG4rXHRyaW5nLVx1MDAzZXR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTtcbitcdC8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi9cbitcdGNsZWFyX2JpdChXWF9IQU5HX0NIRUNLX0FSTUVELCByaW5nLVx1MDAzZXN0YXRlKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogd3hfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzXG4gICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb25cbkBAIC04NjYsNiArODk4LDExIEBAIHN0YXRpYyBib29sIHd4X2NsZWFuX3R4X2lycShzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yLFxuIFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh3eF90eHJpbmdfdHhxKHR4X3JpbmcpLFxuIFx0XHRcdFx0ICB0b3RhbF9wYWNrZXRzLCB0b3RhbF9ieXRlcyk7XG4gXG4rXHRpZiAod3hfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkge1xuK1x0XHR3eF9oYW5kbGVfdHhfaGFuZyh0eF9yaW5nLCBpKTtcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4gI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKVxuIFx0aWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgXHUwMDI2XHUwMDI2IG5ldGlmX2NhcnJpZXJfb2sodHhfcmluZy1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICh3eF9kZXNjX3VudXNlZCh0eF9yaW5nKSBcdTAwM2U9IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHtcbkBAIC0zMTEyLDcgKzMxNDksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gZmVhdHVyZXM7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggXHUwMDI2XHUwMDI2IHd4LVx1MDAzZWRvX3Jlc2V0KVxuLVx0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYpO1xuK1x0XHR3eC1cdTAwM2Vkb19yZXNldChuZXRkZXYsIHRydWUpO1xuIFx0ZWxzZSBpZiAoY2hhbmdlZCBcdTAwMjYgKE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSlcbiBcdFx0d3hfc2V0X3J4X21vZGUobmV0ZGV2KTtcbiBcbkBAIC0zMTYyLDcgKzMxOTksNyBAQCBpbnQgd3hfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuIFxuIG91dDpcbiBcdGlmIChuZWVkX3Jlc2V0IFx1MDAyNlx1MDAyNiB3eC1cdTAwM2Vkb19yZXNldClcbi1cdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2KTtcbitcdFx0d3gtXHUwMDNlZG9fcmVzZXQobmV0ZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMzQ2LDUgKzMzODMsMjMgQEAgdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3NlcnZpY2VfdGltZXIpO1xuIFxuK3ZvaWQgd3hfc29mdF9xdWllc2NlKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVx1MDAzZW5ldGRldikgfHxcbitcdCAgICB0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX0RPV04sIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cGNpX2NsZWFyX21hc3Rlcih3eC1cdTAwM2VwZGV2KTtcbitcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuK1x0bmV0aWZfY2Fycmllcl9vZmYod3gtXHUwMDNlbmV0ZGV2KTtcbitcdG5ldGlmX3R4X2Rpc2FibGUod3gtXHUwMDNlbmV0ZGV2KTtcbitcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuK1x0d3hfcHRwX3F1aWVzY2Uod3gpO1xuK1xuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4rfVxuK0VYUE9SVF9TWU1CT0wod3hfc29mdF9xdWllc2NlKTtcbitcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJDb21tb24gbGlicmFyeSBmb3IgV2FuZ3h1bihSKSBFdGhlcm5ldCBkcml2ZXJzLlwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuaW5kZXggYWVkNmVhOGNmMGQ2NGEuLjExYmQ3OTk4NWUxNzEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuQEAgLTQxLDUgKzQxLDYgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbit2b2lkIHd4X3NvZnRfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KTtcbiBcbiAjZW5kaWYgLyogX1dYX0xJQl9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5pbmRleCA0NGYzZTY1MDUyNDY4Zi4uYTI1ZWI2YWVkNTY2MGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3B0cC5jXG5AQCAtMzIxLDYgKzMyMSw5IEBAIHN0YXRpYyBsb25nIHd4X3B0cF9kb19hdXhfd29yayhzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cClcbiBcdHN0cnVjdCB3eCAqd3ggPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgd3gsIHB0cF9jYXBzKTtcbiBcdGludCB0c19kb25lO1xuIFxuK1x0aWYgKCF0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm4gSFo7XG4rXG4gXHR0c19kb25lID0gd3hfcHRwX3R4X2h3dHN0YW1wX3dvcmsod3gpO1xuIFxuIFx0d3hfcHRwX292ZXJmbG93X2NoZWNrKHd4KTtcbkBAIC04NDIsNiArODQ1LDI0IEBAIHZvaWQgd3hfcHRwX3N0b3Aoc3RydWN0IHd4ICp3eClcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9wdHBfc3RvcCk7XG4gXG4rdm9pZCB3eF9wdHBfcXVpZXNjZShzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX1NUQVRFX1BUUF9SVU5OSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdGNsZWFyX2JpdChXWF9GTEFHX1BUUF9QUFNfRU5BQkxFRCwgd3gtXHUwMDNlZmxhZ3MpO1xuK1xuK1x0aWYgKHd4LVx1MDAzZXB0cF9jbG9jaylcbitcdFx0cHRwX2NhbmNlbF93b3JrZXJfc3luYyh3eC1cdTAwM2VwdHBfY2xvY2spO1xuK1xuK1x0aWYgKHd4LVx1MDAzZXB0cF90eF9za2IpIHtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkod3gtXHUwMDNlcHRwX3R4X3NrYik7XG4rXHRcdHd4LVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuK1x0fVxuK1x0Y2xlYXJfYml0X3VubG9jayhXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsIHd4LVx1MDAzZXN0YXRlKTtcbit9XG4rRVhQT1JUX1NZTUJPTCh3eF9wdHBfcXVpZXNjZSk7XG4rXG4gLyoqXG4gICogd3hfcHRwX3J4X2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFJYIHRpbWUgc3RhbXBcbiAgKiBAd3g6IHBvaW50ZXIgdG8gd3ggc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbmluZGV4IDUwZGI5MGE2ZTNlZTY2Li5hZDJmODI0ODc1ZDUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfcHRwLmhcbkBAIC0xMCw2ICsxMCw3IEBAIHZvaWQgd3hfcHRwX3Jlc2V0KHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfcHRwX2luaXQoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3B0cF9zdG9wKHN0cnVjdCB3eCAqd3gpO1xuK3ZvaWQgd3hfcHRwX3F1aWVzY2Uoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9wdHBfcnhfaHd0c3RhbXAoc3RydWN0IHd4ICp3eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gaW50IHd4X2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3R5cGUuaFxuaW5kZXggNjVlM2U1NWRiMWNmZmIuLmFhMzU3ZTI2MGM0YzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdHlwZS5oXG5AQCAtNDUwLDYgKzQ1MCwxMSBAQCBlbnVtIFdYX01TQ0FfQ01EX3ZhbHVlIHtcbiAjZGVmaW5lIFdYX1BYX1RSX0NGR19USFJFX1NISUZUICAgICAgOFxuICNkZWZpbmUgV1hfUFhfVFJfQ0ZHX0hFQURfV0IgICAgICAgICBCSVQoMjcpXG4gXG4rI2RlZmluZSBXWF9QWF9UUl9SUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXG4rXHRcdChXWF9QWF9UUl9SUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXG4rI2RlZmluZSBXWF9QWF9UUl9XUF9QVihxX3Blcl9wb29sLCB2Zl9udW1iZXIsIHZmX3FfaW5kZXgpIFxcXG4rXHRcdChXWF9QWF9UUl9XUCgocV9wZXJfcG9vbCkgKiAodmZfbnVtYmVyKSArICh2Zl9xX2luZGV4KSkpXG4rXG4gLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovXG4gI2RlZmluZSBXWF9QWF9SUl9CQUwoX2kpICAgICAgICAgICAgICgweDAxMDAwICsgKChfaSkgKiAweDQwKSlcbiAjZGVmaW5lIFdYX1BYX1JSX0JBSChfaSkgICAgICAgICAgICAgKDB4MDEwMDQgKyAoKF9pKSAqIDB4NDApKVxuQEAgLTEwNDAsNiArMTA0NSw3IEBAIHN0cnVjdCB3eF9xdWV1ZV9zdGF0cyB7XG4gc3RydWN0IHd4X3R4X3F1ZXVlX3N0YXRzIHtcbiBcdHU2NCByZXN0YXJ0X3F1ZXVlO1xuIFx0dTY0IHR4X2J1c3k7XG4rXHR1MzIgdHhfZG9uZV9vbGQ7XG4gfTtcbiBcbiBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuQEAgLTEwNTUsNiArMTA2MSwxMiBAQCBzdHJ1Y3Qgd3hfcnhfcXVldWVfc3RhdHMge1xuICNkZWZpbmUgd3hfZm9yX2VhY2hfcmluZyhwb3NtLCBoZWFkbSkgXFxcbiBcdGZvciAocG9zbSA9IChoZWFkbSkucmluZzsgcG9zbTsgcG9zbSA9IHBvc20tXHUwMDNlbmV4dClcbiBcbitlbnVtIHd4X3Jpbmdfc3RhdGUge1xuK1x0V1hfVFhfREVURUNUX0hBTkcsXG4rXHRXWF9IQU5HX0NIRUNLX0FSTUVELFxuK1x0V1hfUklOR19TVEFURV9OQklUU1xuK307XG4rXG4gc3RydWN0IHd4X3JpbmdfY29udGFpbmVyIHtcbiBcdHN0cnVjdCB3eF9yaW5nICpyaW5nOyAgICAgICAgICAgLyogcG9pbnRlciB0byBsaW5rZWQgbGlzdCBvZiByaW5ncyAqL1xuIFx0dW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOyAgICAgICAvKiB0b3RhbCBieXRlcyBwcm9jZXNzZWQgdGhpcyBpbnQgKi9cbkBAIC0xMDc0LDYgKzEwODYsNyBAQCBzdHJ1Y3Qgd3hfcmluZyB7XG4gXHRcdHN0cnVjdCB3eF90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvO1xuIFx0XHRzdHJ1Y3Qgd3hfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbztcbiBcdH07XG4rXHRERUNMQVJFX0JJVE1BUChzdGF0ZSwgV1hfUklOR19TVEFURV9OQklUUyk7XG4gXHR1OCBfX2lvbWVtICp0YWlsO1xuIFx0ZG1hX2FkZHJfdCBkbWE7ICAgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqL1xuIFx0ZG1hX2FkZHJfdCBoZWFkd2JfZG1hO1xuQEAgLTEyMDksNiArMTIyMiw4IEBAIGVudW0gd3hfc3RhdGUge1xuIFx0V1hfU1RBVEVfUFRQX1JVTk5JTkcsXG4gXHRXWF9TVEFURV9QVFBfVFhfSU5fUFJPR1JFU1MsXG4gXHRXWF9TVEFURV9TRVJWSUNFX1NDSEVELFxuK1x0V1hfU1RBVEVfRElTQUJMRUQsXG4rXHRXWF9TVEFURV9SRVNfRlJFRUQsXG4gXHRXWF9TVEFURV9OQklUU1x0XHQvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEyNzUsNiArMTI5MCw4IEBAIGVudW0gd3hfcGZfZmxhZ3Mge1xuIFx0V1hfRkxBR19ORUVEX0RPX1JFU0VULFxuIFx0V1hfRkxBR19SWF9NRVJHRV9FTkFCTEVELFxuIFx0V1hfRkxBR19UWEhFQURfV0JfRU5BQkxFRCxcbitcdFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCxcbitcdFdYX0ZMQUdfTkVFRF9QQ0lFX1JFQ09WRVJZLFxuIFx0V1hfUEZfRkxBR1NfTkJJVFMgICAgICAgICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi9cbiB9O1xuIFxuQEAgLTEzOTUsNyArMTQxMiw4IEBAIHN0cnVjdCB3eCB7XG4gXHR2b2lkICgqYXRyKShzdHJ1Y3Qgd3hfcmluZyAqcmluZywgc3RydWN0IHd4X3R4X2J1ZmZlciAqZmlyc3QsIHU4IHB0eXBlKTtcbiBcdHZvaWQgKCpjb25maWd1cmVfZmRpcikoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpzZXR1cF90Yykoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggdGMpO1xuLVx0dm9pZCAoKmRvX3Jlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbitcdHZvaWQgKCpkb19yZXNldCkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuK1x0dm9pZCAoKmRvd25fc3VzcGVuZCkoc3RydWN0IHd4ICp3eCk7XG4gXHRpbnQgKCpwdHBfc2V0dXBfc2RwKShzdHJ1Y3Qgd3ggKnd4KTtcbiBcdHZvaWQgKCpzZXRfbnVtX3F1ZXVlcykoc3RydWN0IHd4ICp3eCk7XG4gXG5AQCAtMTQyMyw2ICsxNDQxLDggQEAgc3RydWN0IHd4IHtcbiBcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNlcnZpY2VfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2VydmljZV90YXNrO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7XG4rXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzZXRfd3E7XG4gXHRzdHJ1Y3QgbXV0ZXggcmVzZXRfbG9jazsgLyogbXV0ZXggZm9yIHJlc2V0ICovXG4gfTtcbiBcbkBAIC0xNTA1LDcgKzE1MjUsOCBAQCByZDMyX3dyYXAoc3RydWN0IHd4ICp3eCwgdTMyIHJlZywgdTMyICpsYXN0KVxuIFxuICNkZWZpbmUgd3hfZXJyKHd4LCBmbXQsIGFyZy4uLikgXFxcbiBcdGRldl9lcnIoXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbi1cbisjZGVmaW5lIHd4X3dhcm4od3gsIGZtdCwgYXJnLi4uKSBcXFxuK1x0ZGV2X3dhcm4oXHUwMDI2KHd4KS1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZm10LCAjI2FyZylcbiAjZGVmaW5lIHd4X2RiZyh3eCwgZm10LCBhcmcuLi4pIFxcXG4gXHRkZXZfZGJnKFx1MDAyNih3eCktXHUwMDNlcGRldi1cdTAwM2VkZXYsIGZtdCwgIyNhcmcpXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jXG5pbmRleCBiMmUxOTE5ODI4MDMyNi4uMTk2MGY3MTU0MTUxZGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuY1xuQEAgLTU5LDcgKzU5LDYgQEAgc3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcbiBcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuIFxuLVx0d3hfY29uZmlndXJlKHd4KTtcbiBcdG5nYmVfdXAod3gpO1xuIFxuIGNsZWFyX3Jlc2V0OlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uY1xuaW5kZXggYTE2MjIxOTk1OTA5ZjkuLjU2ZDRiNjMzODdmZDZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF90eXBlLmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfaHcuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9saWIuaFwiXG4rI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9lcnIuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9wdHAuaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9tYnguaFwiXG4gI2luY2x1ZGUgXCIuLi9saWJ3eC93eF9zcmlvdi5oXCJcbkBAIC00Niw2ICs0NywyMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmdiZV9wY2lfdGJsW10gPSB7XG4gXHR7IH1cbiB9O1xuIFxuK3N0YXRpYyB2b2lkIG5nYmVfZG93bl9zdXNwZW5kKHN0cnVjdCB3eCAqd3gpXG4re1xuK1x0aWYgKHRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHBoeWxpbmtfc3RvcCh3eC1cdTAwM2VwaHlsaW5rKTtcbitcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkod3gtXHUwMDNlcGh5bGluayk7XG4rXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuK1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbitcdHd4X2ZyZWVfaXJxKHd4KTtcbitcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4rXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4rfVxuK1xuIC8qKlxuICAqICBuZ2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTEzMyw2ICsxNDgsOCBAQCBzdGF0aWMgaW50IG5nYmVfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIFxuIFx0d3gtXHUwMDNlbWJ4LnNpemUgPSBXWF9WWE1BSUxCT1hfU0laRTtcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gbmdiZV9zZXR1cF90YztcbitcdHd4LVx1MDAzZWRvX3Jlc2V0ID0gbmdiZV9kb19yZXNldDtcbitcdHd4LVx1MDAzZWRvd25fc3VzcGVuZCA9IG5nYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xNDcsNiArMTY0LDggQEAgc3RhdGljIHZvaWQgbmdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IHd4ICp3eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd3gsIHNlcnZpY2VfdGFzayk7XG4gXG4gXHR3eF91cGRhdGVfc3RhdHMod3gpO1xuK1x0d3hfY2hlY2tfaGFuZ19zdWJ0YXNrKHd4KTtcbitcdHd4X2NoZWNrX2Vycl9zdWJ0YXNrKHd4KTtcbiBcbiBcdHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUod3gpO1xuIH1cbkBAIC0zOTIsNiArNDExLDcgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG4gXG4rXHRjbGVhcl9iaXQoV1hfRkxBR19ORUVEX1BGX1JFU0VULCB3eC1cdTAwM2VmbGFncyk7XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbkBAIC00MDgsNiArNDI4LDkgQEAgc3RhdGljIHZvaWQgbmdiZV9kaXNhYmxlX2RldmljZShzdHJ1Y3Qgd3ggKnd4KVxuIFxuIHN0YXRpYyB2b2lkIG5nYmVfcmVzZXQoc3RydWN0IHd4ICp3eClcbiB7XG4rXHRpZiAodGVzdF9iaXQoV1hfRkxBR19ORUVEX1BDSUVfUkVDT1ZFUlksIHd4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0d3hfZmx1c2hfc3dfbWFjX3RhYmxlKHd4KTtcbiBcdHd4X21hY19zZXRfZGVmYXVsdF9maWx0ZXIod3gsIHd4LVx1MDAzZW1hYy5hZGRyKTtcbiBcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9QVFBfUlVOTklORywgd3gtXHUwMDNlc3RhdGUpKVxuQEAgLTQyMywxMyArNDQ2LDE0IEBAIHZvaWQgbmdiZV9kb3duKHN0cnVjdCB3eCAqd3gpXG4gXHR3eF9jbGVhbl9hbGxfcnhfcmluZ3Mod3gpO1xuIH1cbiBcbi12b2lkIG5nYmVfdXAoc3RydWN0IHd4ICp3eClcbitzdGF0aWMgdm9pZCBuZ2JlX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0d3hfY29uZmlndXJlX3ZlY3RvcnMod3gpO1xuIFxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFx0LyogZW5hYmxlIHRyYW5zbWl0cyAqL1xuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh3eC1cdTAwM2VuZXRkZXYpO1xuQEAgLTQ5MCw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG5nYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFxuIFx0d3hfcHRwX2luaXQod3gpO1xuIFxuLVx0bmdiZV91cCh3eCk7XG4rXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbiBcbiBcdHJldHVybiAwO1xuIGVycl9kaXNfcGh5OlxuQEAgLTUwMyw2ICs1MjcsMTIgQEAgc3RhdGljIGludCBuZ2JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3ZvaWQgbmdiZV91cChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdHd4X2NvbmZpZ3VyZSh3eCk7XG4rXHRuZ2JlX3VwX2NvbXBsZXRlKHd4KTtcbit9XG4rXG4gLyoqXG4gICogbmdiZV9jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2VcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlXG5AQCAtNTE4LDEyICs1NDgsMTYgQEAgc3RhdGljIGludCBuZ2JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0d3hfcHRwX3N0b3Aod3gpO1xuIFx0bmdiZV9kb3duKHd4KTtcbiBcdHd4X2ZyZWVfaXJxKHd4KTtcbiBcdHd4X2ZyZWVfaXNiX3Jlc291cmNlcyh3eCk7XG4gXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHd4LVx1MDAzZXBoeWxpbmspO1xuK291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU1NSw3ICs1ODksOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX2Rldl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpXG4gXHQqZW5hYmxlX3dha2UgPSAhIXd1ZmM7XG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZ2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTU5MCw2ICs2MjUsOCBAQCBpbnQgbmdiZV9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0YylcbiBcdCAqL1xuIFx0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbiBcdFx0bmdiZV9jbG9zZShkZXYpO1xuK1x0ZWxzZVxuK1x0XHRuZ2JlX3Jlc2V0KHd4KTtcbiBcbiBcdHd4X2NsZWFyX2ludGVycnVwdF9zY2hlbWUod3gpO1xuIFxuQEAgLTYwNiwxMSArNjQzLDM2IEBAIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5nYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdG5ldGlmX3RyYW5zX3VwZGF0ZSh3eC1cdTAwM2VuZXRkZXYpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbitcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXG4rXHRuZ2JlX2Rvd24od3gpO1xuK1x0bmdiZV91cCh3eCk7XG4rXG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4rfVxuK1xuK3ZvaWQgbmdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdClcbit7XG4rXHRzdHJ1Y3Qgd3ggKnd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbitcdFx0bmdiZV9yZWluaXRfbG9ja2VkKHd4KTtcbitcdGVsc2VcbitcdFx0bmdiZV9yZXNldCh3eCk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19vcGVuICAgICAgICAgICAgICAgPSBuZ2JlX29wZW4sXG4gXHQubmRvX3N0b3AgICAgICAgICAgICAgICA9IG5nYmVfY2xvc2UsXG4gXHQubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHd4X2NoYW5nZV9tdHUsXG4gXHQubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHd4X3htaXRfZnJhbWUsXG4rXHQubmRvX3R4X3RpbWVvdXQgICAgICAgICA9IHd4X3R4X3RpbWVvdXQsXG4gXHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IHd4X3NldF9yeF9tb2RlLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXMgICAgICAgPSB3eF9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX2ZpeF9mZWF0dXJlcyAgICAgICA9IHd4X2ZpeF9mZWF0dXJlcyxcbkBAIC03MDAsNiArNzYyLDcgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSBuZ2JlX2RyaXZlcl9uYW1lO1xuIFx0bmdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTtcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2bmdiZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFxuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxuQEAgLTc5Niw2ICs4NTksMTAgQEAgc3RhdGljIGludCBuZ2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXHR3eF9tYWNfc2V0X2RlZmF1bHRfZmlsdGVyKHd4LCB3eC1cdTAwM2VtYWMucGVybV9hZGRyKTtcbiBcbitcdGVyciA9IHd4X2luaXRfZXJyX3Rhc2sod3gpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZV9tYWNfdGFibGU7XG4rXG4gXHRuZ2JlX2luaXRfc2VydmljZSh3eCk7XG4gXG4gXHRlcnIgPSB3eF9pbml0X2ludGVycnVwdF9zY2hlbWUod3gpO1xuQEAgLTgxMiw2ICs4NzksNyBAQCBzdGF0aWMgaW50IG5nYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcbitcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtODIzLDYgKzg5MSw4IEBAIHN0YXRpYyBpbnQgbmdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTg1NCw2ICs5MjQsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXJlc2V0X3Rhc2spO1xuK1x0ZGVzdHJveV93b3JrcXVldWUod3gtXHUwMDNlcmVzZXRfd3EpO1xuIFxuIFx0cGh5bGlua19kZXN0cm95KHd4LVx1MDAzZXBoeWxpbmspO1xuIFx0cGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxuQEAgLTg2Myw3ICs5MzUsOCBAQCBzdGF0aWMgdm9pZCBuZ2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmdiZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXG5AQCAtODkwLDYgKzk2Myw3IEBAIHN0YXRpYyBpbnQgbmdiZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHd4X2Vycih3eCwgXCJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXFxuXCIpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1x0Y2xlYXJfYml0KFdYX1NUQVRFX0RJU0FCTEVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiBcdGRldmljZV93YWtldXBfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5AQCAtOTE0LDYgKzk4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2JlX2RyaXZlciA9IHtcbiBcdC5yZXN1bWUgICA9IG5nYmVfcmVzdW1lLFxuIFx0LnNodXRkb3duID0gbmdiZV9zaHV0ZG93bixcbiBcdC5zcmlvdl9jb25maWd1cmUgPSB3eF9wY2lfc3Jpb3ZfY29uZmlndXJlLFxuK1x0LmVycl9oYW5kbGVyID0gXHUwMDI2d3hfZXJyX2hhbmRsZXIsXG4gfTtcbiBcbiBtb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfdHlwZS5oXG5pbmRleCA3MDc3YTBkYTRjOTg2YS4uYzkyMzNkYzdhZTUwNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV90eXBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX3R5cGUuaFxuQEAgLTEyNSw1ICsxMjUsNiBAQCBleHRlcm4gY2hhciBuZ2JlX2RyaXZlcl9uYW1lW107XG4gdm9pZCBuZ2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCBuZ2JlX3VwKHN0cnVjdCB3eCAqd3gpO1xuIGludCBuZ2JlX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHRjKTtcbit2b2lkIG5nYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByZWluaXQpO1xuIFxuICNlbmRpZiAvKiBfTkdCRV9UWVBFX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uY1xuaW5kZXggMjBjNWEyOTVjNmMyOTYuLmQ4NWVlODMxOTJlNGZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jXG5AQCAtMTQsNiArMTQsNyBAQFxuIFxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfdHlwZS5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2xpYi5oXCJcbisjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2Vyci5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X3B0cC5oXCJcbiAjaW5jbHVkZSBcIi4uL2xpYnd4L3d4X2h3LmhcIlxuICNpbmNsdWRlIFwiLi4vbGlid3gvd3hfbWJ4LmhcIlxuQEAgLTkzLDYgKzk0LDEwIEBAIHN0YXRpYyB2b2lkIHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAodGVzdF9iaXQoV1hfU1RBVEVfRE9XTiwgd3gtXHUwMDNlc3RhdGUpIHx8XG4rXHQgICAgdGVzdF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9NT0RVTEVfUkVTRVQsIHd4LVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTEwNiw2ICsxMTEsMTAgQEAgc3RhdGljIHZvaWQgdHhnYmVfbW9kdWxlX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCB3eCAqd3gpXG4gXG4gc3RhdGljIHZvaWQgdHhnYmVfbGlua19jb25maWdfc3VidGFzayhzdHJ1Y3Qgd3ggKnd4KVxuIHtcbitcdGlmICh0ZXN0X2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSkgfHxcbitcdCAgICB0ZXN0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoV1hfRkxBR19ORUVEX0xJTktfQ09ORklHLCB3eC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMjMsNiArMTMyLDggQEAgc3RhdGljIHZvaWQgdHhnYmVfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHR4Z2JlX21vZHVsZV9kZXRlY3Rpb25fc3VidGFzayh3eCk7XG4gXHR0eGdiZV9saW5rX2NvbmZpZ19zdWJ0YXNrKHd4KTtcbiBcdHd4X3VwZGF0ZV9zdGF0cyh3eCk7XG4rXHR3eF9jaGVja19oYW5nX3N1YnRhc2sod3gpO1xuK1x0d3hfY2hlY2tfZXJyX3N1YnRhc2sod3gpO1xuIFxuIFx0d3hfc2VydmljZV9ldmVudF9jb21wbGV0ZSh3eCk7XG4gfVxuQEAgLTE0NCw2ICsxNTUsNyBAQCBzdGF0aWMgdm9pZCB0eGdiZV91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KVxuIFx0LyogbWFrZSBzdXJlIHRvIGNvbXBsZXRlIHByZS1vcGVyYXRpb25zICovXG4gXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbiBcdGNsZWFyX2JpdChXWF9TVEFURV9ET1dOLCB3eC1cdTAwM2VzdGF0ZSk7XG4rXHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTX0ZSRUVELCB3eC1cdTAwM2VzdGF0ZSk7XG4gXHR3eF9uYXBpX2VuYWJsZV9hbGwod3gpO1xuIFxuIFx0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuQEAgLTE4Nyw2ICsxOTksOSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZXNldChzdHJ1Y3Qgd3ggKnd4KVxuIFx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xuIFx0aW50IGVycjtcbiBcbitcdGlmICh0ZXN0X2JpdChXWF9GTEFHX05FRURfUENJRV9SRUNPVkVSWSwgd3gtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRlcnIgPSB0eGdiZV9yZXNldF9odyh3eCk7XG4gXHRpZiAoZXJyICE9IDApXG4gXHRcdHd4X2Vycih3eCwgXCJIYXJkd2FyZSBFcnJvcjogJWRcXG5cIiwgZXJyKTtcbkBAIC0yMjQsNiArMjM5LDcgQEAgc3RhdGljIHZvaWQgdHhnYmVfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHd4ICp3eClcbiBcdHd4X2lycV9kaXNhYmxlKHd4KTtcbiBcdHd4X25hcGlfZGlzYWJsZV9hbGwod3gpO1xuIFxuK1x0Y2xlYXJfYml0KFdYX0ZMQUdfTkVFRF9QRl9SRVNFVCwgd3gtXHUwMDNlZmxhZ3MpO1xuIFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gXG5AQCAtMjkyLDYgKzMwOCwyMCBAQCB2b2lkIHR4Z2JlX3VwKHN0cnVjdCB3eCAqd3gpXG4gXHR0eGdiZV91cF9jb21wbGV0ZSh3eCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHR4Z2JlX2Rvd25fc3VzcGVuZChzdHJ1Y3Qgd3ggKnd4KVxuK3tcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwaHlsaW5rX3N0b3Aod3gtXHUwMDNlcGh5bGluayk7XG4rXHR3eF9jbGVhbl9hbGxfdHhfcmluZ3Mod3gpO1xuK1x0d3hfY2xlYW5fYWxsX3J4X3JpbmdzKHd4KTtcbitcdHd4X2ZyZWVfaXJxKHd4KTtcbitcdHR4Z2JlX2ZyZWVfbWlzY19pcnEod3gtXHUwMDNlcHJpdik7XG4rXHR3eF9mcmVlX3Jlc291cmNlcyh3eCk7XG4rXHR0eGdiZV9mZGlyX2ZpbHRlcl9leGl0KHd4KTtcbit9XG4rXG4gLyoqXG4gICogIHR4Z2JlX2luaXRfdHlwZV9jb2RlIC0gSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIGNvZGVcbiAgKiAgQHd4OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTQwOCw2ICs0MzgsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbiBcbiBcdHd4LVx1MDAzZXNldHVwX3RjID0gdHhnYmVfc2V0dXBfdGM7XG4gXHR3eC1cdTAwM2Vkb19yZXNldCA9IHR4Z2JlX2RvX3Jlc2V0O1xuK1x0d3gtXHUwMDNlZG93bl9zdXNwZW5kID0gdHhnYmVfZG93bl9zdXNwZW5kO1xuIFx0c2V0X2JpdCgwLCBcdTAwMjZ3eC1cdTAwM2Vmd2RfYml0bWFzayk7XG4gXG4gXHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG5AQCAtNTE4LDEyICs1NDksMTYgQEAgc3RhdGljIGludCB0eGdiZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuK1x0aWYgKHRlc3RfYml0KFdYX1NUQVRFX1JFU19GUkVFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdHd4X3B0cF9zdG9wKHd4KTtcbiBcdHR4Z2JlX2Rvd24od3gpO1xuIFx0d3hfZnJlZV9pcnEod3gpO1xuIFx0dHhnYmVfZnJlZV9taXNjX2lycSh3eC1cdTAwM2Vwcml2KTtcbiBcdHd4X2ZyZWVfcmVzb3VyY2VzKHd4KTtcbiBcdHR4Z2JlX2ZkaXJfZmlsdGVyX2V4aXQod3gpO1xuK291dDpcbiBcdHd4X2NvbnRyb2xfaHcod3gsIGZhbHNlKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTU0NCw3ICs1NzksOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9kZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR3eF9jb250cm9sX2h3KHd4LCBmYWxzZSk7XG4gXG4tXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoV1hfU1RBVEVfRElTQUJMRUQsIHd4LVx1MDAzZXN0YXRlKSlcbitcdFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0eGdiZV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbkBAIC02MDYsMTEgKzY0MiwxMSBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCB3eCAqd3gpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2d3gtXHUwMDNlcmVzZXRfbG9jayk7XG4gfVxuIFxuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbit2b2lkIHR4Z2JlX2RvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmVpbml0KVxuIHtcbiBcdHN0cnVjdCB3eCAqd3ggPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFxuLVx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgXHUwMDI2XHUwMDI2IHJlaW5pdClcbiBcdFx0dHhnYmVfcmVpbml0X2xvY2tlZCh3eCk7XG4gXHRlbHNlXG4gXHRcdHR4Z2JlX3Jlc2V0KHd4KTtcbkBAIC02NTQsNiArNjkwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wICAgICAgICAgICAgICAgPSB0eGdiZV9jbG9zZSxcbiBcdC5uZG9fY2hhbmdlX210dSAgICAgICAgID0gd3hfY2hhbmdlX210dSxcbiBcdC5uZG9fc3RhcnRfeG1pdCAgICAgICAgID0gd3hfeG1pdF9mcmFtZSxcbitcdC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gd3hfdHhfdGltZW91dCxcbiBcdC5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gd3hfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlcyAgICAgICA9IHd4X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fZml4X2ZlYXR1cmVzICAgICAgID0gd3hfZml4X2ZlYXR1cmVzLFxuQEAgLTc0NSw2ICs3ODIsNyBAQCBzdGF0aWMgaW50IHR4Z2JlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0d3gtXHUwMDNlZHJpdmVyX25hbWUgPSB0eGdiZV9kcml2ZXJfbmFtZTtcbiBcdHR4Z2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ0eGdiZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuIFx0bmV0ZGV2LVx1MDAzZXVkcF90dW5uZWxfbmljX2luZm8gPSBcdTAwMjZ0eGdiZV91ZHBfdHVubmVscztcbiBcbiBcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xuQEAgLTgxNCw2ICs4NTIsMTAgQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVx1MDAzZW1hYy5wZXJtX2FkZHIpO1xuIFx0d3hfbWFjX3NldF9kZWZhdWx0X2ZpbHRlcih3eCwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gXG4rXHRlcnIgPSB3eF9pbml0X2Vycl90YXNrKHd4KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfbWFjX3RhYmxlO1xuK1xuIFx0dHhnYmVfaW5pdF9zZXJ2aWNlKHd4KTtcbiBcbiBcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XG5AQCAtODg5LDYgKzkzMSw3IEBAIHN0YXRpYyBpbnQgdHhnYmVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdGdvdG8gZXJyX3JlbW92ZV9waHk7XG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuK1x0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcbkBAIC05MTYsNiArOTU5LDggQEAgc3RhdGljIGludCB0eGdiZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBlcnJfY2FuY2VsX3NlcnZpY2U6XG4gXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90YXNrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2d3gtXHUwMDNlcmVzZXRfdGFzayk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZSh3eC1cdTAwM2VyZXNldF93cSk7XG4gZXJyX2ZyZWVfbWFjX3RhYmxlOlxuIFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gXHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuQEAgLTk0OCw2ICs5OTMsOCBAQCBzdGF0aWMgdm9pZCB0eGdiZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZ3eC1cdTAwM2VyZXNldF90YXNrKTtcbitcdGRlc3Ryb3lfd29ya3F1ZXVlKHd4LVx1MDAzZXJlc2V0X3dxKTtcbiBcbiBcdHR4Z2JlX3JlbW92ZV9waHkodHhnYmUpO1xuIFx0d3hfZnJlZV9pc2JfcmVzb3VyY2VzKHd4KTtcbkBAIC05NTksNyArMTAwNiw4IEBAIHN0YXRpYyB2b2lkIHR4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gXHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiBcbi1cdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbitcdGlmICghdGVzdF9hbmRfc2V0X2JpdChXWF9TVEFURV9ESVNBQkxFRCwgd3gtXHUwMDNlc3RhdGUpKVxuK1x0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG5AQCAtOTY5LDYgKzEwMTcsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xuIFx0LnJlbW92ZSAgID0gdHhnYmVfcmVtb3ZlLFxuIFx0LnNodXRkb3duID0gdHhnYmVfc2h1dGRvd24sXG4gXHQuc3Jpb3ZfY29uZmlndXJlID0gd3hfcGNpX3NyaW92X2NvbmZpZ3VyZSxcbitcdC5lcnJfaGFuZGxlciA9IFx1MDAyNnd4X2Vycl9oYW5kbGVyLFxuIH07XG4gXG4gbW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oXG5pbmRleCA4NzcyMzRlM2ZkYzJiNi4uM2U5M2EzZjMwOWMxNjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmhcbkBAIC0zMTMsNyArMzEzLDcgQEAgZXh0ZXJuIGNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXTtcbiB2b2lkIHR4Z2JlX2Rvd24oc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB0eGdiZV91cChzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgdHhnYmVfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdGMpO1xuLXZvaWQgdHhnYmVfZG9fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4rdm9pZCB0eGdiZV9kb19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJlaW5pdCk7XG4gXG4gI2RlZmluZSBERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTS19aRVJPKG5hbWUpIFxcXG4gXHR1bnNpZ25lZCBsb25nIG5hbWVbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF0gPSB7IDAsIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE1OjU3LjQ4MTE2MjMyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNjUzNTYyMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIFdhbmd4dW4gRXRoZXJuZXQgRHJpdmVycyBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gd2UndmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbiBmb3IgdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVycywgYG5nYmVgIGFuZCBgdHhnYmVgLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlcyBhbmQgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyB0byBoYW5kbGUgUENJIGVycm9ycywgVHggdGltZW91dHMsIGFuZCBoYW5nIGRldGVjdGlvbi4gVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGVzZSBhcmUgcGh5c2ljYWwgUENJIGRldmljZXMsIHJpZ2h0PyBUeXBpY2FsbHksIG5ldHdvcmsgZHJpdmVycyBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgYXJlIGluYWNjZXNzaWJsZSB1bmxlc3MgdGhlcmUncyBlbXVsYXRpb24gaW4gUUVNVSBvciBzb21lIHNvZnR3YXJlIGVxdWl2YWxlbnQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgZW11bGF0aW9uLiBJIGNvdWxkIHNlYXJjaCBmb3IgYG5nYmVgIG9yIGB0eGdiZWAgaW4gUUVNVSwgYnV0IEkgZG9uJ3QgaGF2ZSB0aGUgc291cmNlIGhhbmR5LCBzbyBJJ2xsIHNlZSBpZiB0aGUga2VybmVsIGl0c2VsZiBoYXMgc29mdHdhcmUgZW11bGF0aW9uLiBCdXQgd2FpdCwgYG5nYmVgIGFuZCBgdHhnYmVgICphcmUqIHBoeXNpY2FsIFBDSSBkZXZpY2VzLiBTbywgaXMgdGhlcmUgYW55IGNoYW5jZSBzeXprYWxsZXIgY2FuIGdldCB0byB0aGlzP1xuXG5TeXprYWxsZXIgY2FuIGZ1enogUENJIGRldmljZXMgdXNpbmcgdlBDSSBpZiB0aGUgZHJpdmVyIGJpbmRzIHRvIGl0LiBJdCBjYW4gdXNlIGEgUENJIGZ1enplciB0aGF0IHByb2JlcyBkcml2ZXJzIGJ5IG1hdGNoaW5nIFBDSSBJRHMgYW5kIGZ1enppbmcgTU1JTy9QSU8vY29uZmlnIHNwYWNlLiBJZiB0aGUgZHJpdmVyIGlzIGEgUENJIGRyaXZlciwgc3l6a2FsbGVyIGNhbiBoaXQgdGhlIGBwcm9iZWAgZnVuY3Rpb24gYW5kIHBvdGVudGlhbGx5IG90aGVyIGZ1bmN0aW9ucyBpZiB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQuIEhvd2V2ZXIsIHRoZSBpbnN0cnVjdGlvbnMgdGVsbCBtZSB0aGF0IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiBhcmUgbm90IHdvcnRoIGZ1enppbmcuXCJcblxuU28sIGlzIHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGVub3VnaCB0byBjb25zaWRlciBpdCBcInJlYWNoYWJsZVwiPyBGb3IgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycywgd2l0aG91dCBlbXVsYXRpb24gKGxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgbmV0ZGV2c2ltYCksIGl0J3MgZ2VuZXJhbGx5ICp1bnJlYWNoYWJsZSogZm9yIGZ1bmN0aW9uYWwgZnV6emluZywgdW5sZXNzIHdlJ3JlIGV4cGxpY2l0bHkgdGFsa2luZyBhYm91dCB0aGUgUENJIGZ1enplci4gTGV0IG1lIGNoZWNrIGlmIGBuZ2JlYCBvciBgdHhnYmVgIGFyZSB0eXBpY2FsbHkgZnV6emVkLiBCdXQgd2FpdCwgdGhlIGF1dGhvciBvZiB0aGUgY29tbWl0IGlzIGBzeXotY2x1c3RlcmAuIFRoaXMgcHJvYmFibHkgbWVhbnMgc3l6a2FsbGVyICppcyogdGVzdGluZyBhIHBhdGNoIGZvciB0aGlzIGRyaXZlci4gTm8sIHRoaXMgaXMgc3RhbmRhcmQgY29tbWl0IG1lc3NhZ2UgZm9yIHRoZSBwYXRjaCBiZWluZyB0ZXN0ZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgUENJIElEcyBmb3IgYG5nYmVgIGFuZCBgdHhnYmVgLiBDYW4gc3l6a2FsbGVyIGZ1enogdGhpcz8gWWVzLCB2aWEgYHN5el9wY2lfcHJvYmVgLiBCdXQgZ2VuZXJhbGx5LCB3ZSBkb24ndCBjb25zaWRlciBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHdvcnRoIGZ1enppbmcgdW5sZXNzIHRoZXkgZXhwb3NlIGEgZ2VuZXJpYyBpbnRlcmZhY2UuXG5cblN5emthbGxlciB1c2VzIGEgYHN5el9wY2lgIHBzZXVkby1kZXZpY2UgaW4gUUVNVSB0byBpbmplY3QgUENJIGRldmljZXMuIFNob3VsZCB3ZSBmdXp6IHRoaXM/IFRoZSBpbnN0cnVjdGlvbnMgc2F5LCBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgQW5kLCBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlwiXG5cbldhbmd4dW4gaXMgYSBwaHlzaWNhbCBQQ0llIEV0aGVybmV0IGNhcmQuIFVubGVzcyB3ZSBoYXZlIGhhcmR3YXJlIHBhc3N0aHJvdWdoLCBpdCdzIGdlbmVyYWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBmdW5jdGlvbmFsIG5ldHdvcmsgdHJhZmZpYyBwYXRocyBpbiBhIHN0YW5kYXJkIFZNLiBIb3dldmVyLCBzeXprYWxsZXIncyBQQ0kgZnV6emVyICpjYW4qIHJlYWNoIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGFuZCB0cmlnZ2VyIGludGVycnVwdHMgb3IgTU1JTyBhY2Nlc3Nlcy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGl0IGNhbiByZWFjaCBgd3hfdHhfdGltZW91dGAgb3Igb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuXG5cbmB3eF90eF90aW1lb3V0YCBpcyBjYWxsZWQgYnkgdGhlIG5ldGRldiB3YXRjaGRvZyB3aGVuIHRoZSBUeCBxdWV1ZSB0aW1lcyBvdXQuIElmIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCBhbmQgYnJvdWdodCB1cCwgdGhlbiBzZW5kaW5nIGEgZHVtbXkgcGFja2V0IG1pZ2h0IHRyaWdnZXIgYG5kb19zdGFydF94bWl0YC4gSWYgdGhhdCBkb2Vzbid0IGNvbXBsZXRlLCBgbmRvX3R4X3RpbWVvdXRgIHdpbGwgYmUgY2FsbGVkLiBCdXQgYHByb2JlYCB1c3VhbGx5IGZhaWxzIGlmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IHJlc3BvbmQgY29ycmVjdGx5LiBVbmxlc3MgdGhlIFBDSSBmdXp6ZXIgcGVyZmVjdGx5IGVtdWxhdGVzIHRoZSBNTUlPLCB3aGljaCBpcyB1bmxpa2VseSBmb3IgYSBjb21wbGV4IEV0aGVybmV0IGNvbnRyb2xsZXIsIGBwcm9iZWAgd2lsbCBmYWlsLCBhbmQgdGhlbiB3ZSB3aWxsIG5vdCByZWFjaCB0aGUgZnVuY3Rpb25zIGJlaW5nIGFkZGVkIGJ5IHRoZSBwYXRjaC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMjAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTM6MTY6MTkuMTM0NzI3OTE2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTM0MjQxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2FuZ3h1blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0PTg9Q29udGVudHM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTU5LSAgIHRpL2ljc3NnX3BydWV0aFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjA6ICAgd2FuZ3h1bi90eGdiZVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjE6ICAgd2FuZ3h1bi90eGdiZXZmXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MjogICB3YW5neHVuL25nYmVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYzOiAgIHdhbmd4dW4vbmdiZXZmXFxuLS1cXG5NQUlOVEFJTkVSUz0yOTAwMT1XOlxcdGh0dHBzOi8vd3d3Lm5ldC1zd2lmdC5jb21cXG5NQUlOVEFJTkVSUzoyOTAwMjpGOlxcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuLypcXG5NQUlOVEFJTkVSUzoyOTAwMzpGOlxcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXFxuTUFJTlRBSU5FUlMtMjkwMDQtRjpcXHRkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3Mtd3guY1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0xODc9c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnOjE4ODpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnLTE4OS1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9LY29uZmlnXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ORVRfVkVORE9SX1ZJQSkgKz0gdmlhL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XQU5HWFVOKSArPSB3YW5neHVuL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQpICs9IHdpem5ldC9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTM3LVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjM4OlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZS5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02MS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo2MjpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTY3PWNvbmZpZyBUWEdCRVZGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzktXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODA6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmLnJzdFxcdTAwM2UuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTgxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTg1PWNvbmZpZyBOR0JFVkZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05NS1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo5NjpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy05Ny1cXG4tLVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jPTUwNDI9c3RhdGljIGludCBwY2lfcXVpcmtfbG9vbmdzb25fYWNzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBhY3NfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL3BjaS9xdWlya3MuYy01MDYyLSAqL1xcbmRyaXZlcnMvcGNpL3F1aXJrcy5jOjUwNjM6c3RhdGljIGludCAgcGNpX3F1aXJrX3dhbmd4dW5fbmljX2FjcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MTYgYWNzX2ZsYWdzKVxcbmRyaXZlcnMvcGNpL3F1aXJrcy5jLTUwNjQte1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmM9NTA3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfYWNzX2VuYWJsZWQge1xcbi0tXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0My1cXHQvKiBXYW5neHVuIG5pY3MgKi9cXG5kcml2ZXJzL3BjaS9xdWlya3MuYzo1MjQ0OlxcdHsgUENJX1ZFTkRPUl9JRF9XQU5HWFVOLCBQQ0lfQU5ZX0lELCBwY2lfcXVpcmtfd2FuZ3h1bl9uaWNfYWNzIH0sXFxuZHJpdmVycy9wY2kvcXVpcmtzLmMtNTI0NS1cXHR7IDAgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMzoxNjoyMy4wNDgxNjQzMTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mzg2OTI1MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXJzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBXYW5neHVuIEV0aGVybmV0IGRyaXZlcnMgKGBuZ2JlYCwgYHR4Z2JlYCwgYG5nYmV2ZmAsIGB0eGdiZXZmYCkgYXJlIGNvbXBsZXRlbHkgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycy4gVGhlcmUncyB6ZXJvIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlbSB3aXRoaW4gdGhlIGtlcm5lbC4gV2hpbGUgU3l6a2FsbGVyJ3MgUENJIGZ1enplciAqbWlnaHQqIHRvdWNoIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLCBhY3R1YWxseSBoaXR0aW5nIHRoZSBUeC9SeCBwYXRocyDigJMgdGhpbmdzIGxpa2UgYHd4X2NsZWFuX3R4X2lycWAsIGB3eF90eF90aW1lb3V0YCwgb3IgYHd4X2hhbmRsZV90eF9oYW5nYCDigJMgZGVtYW5kcyBhIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBkZXZpY2UuIFRoYXQgbWVhbnMgcmVnaXN0cmF0aW9uIGFzIGEgbmV0ZGV2LCBicmluZ2luZyBpdCB1cCB2aWEgYG5kb19vcGVuYCwgYW5kIHRoZW4gcHJvY2Vzc2luZyByZWFsIFR4L1J4IHRyYWZmaWMuIEVzc2VudGlhbGx5IGltcG9zc2libGUgd2l0aG91dCBhIHJlYWwgZGV2aWNlIG9yIGEgZGVkaWNhdGVkLCBzcGVjaWFsaXplZCBlbXVsYXRvciBsaWtlIFFFTVUncyBlMTAwMGUuXG5cblRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgd2l0aGluIHRoaXMgcGF0Y2ggc2VlbSB0byBiZSByZWxlZ2F0ZWQgdG8gdGhlc2UgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEJhc2VkIG9uIHRoaXMsIEknbSB0aGlua2luZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrLiBPa2F5LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gYWRkcyBlcnJvciBoYW5kbGluZyBhbmQgVHggaGFuZyBkZXRlY3Rpb24gdG8gYGxpYnd4YCwgYG5nYmVgLCBhbmQgYHR4Z2JlYC4gVGhlc2UgYXJlIHVuZXF1aXZvY2FsbHkgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgaW5zdHJ1Y3RzIG1lOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBoeXNpY2FsIFBDSWUgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgd2l0aCBubyBzb2Z0d2FyZSBlbXVsYXRpb24sIHRoaXMgY2xlYXJseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQuIEknbGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gcmVwb3J0IHRoYXQgdGhpcyBwYXRjaCdzIGZ1enppbmcgd29ydGggaXMgbWluaW1hbCwgYW5kIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NzIsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEzOjE2OjMyLjQzNTA5NDA3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdhbmd4dW4gR2lnYWJpdCBQQ0kgRXhwcmVzcyBFdGhlcm5ldCBkcml2ZXJzIChuZ2JlLCB0eGdiZSwgbGlid3gpIHRvIGFkZCBQQ0kgZXJyb3IgaGFuZGxpbmcgYW5kIFR4IGhhbmcgZGV0ZWN0aW9uLiBUaGVzZSBhcmUgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyB3aXRob3V0IHNvZnR3YXJlIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsIG9yIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VL0dDRSkuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgVHgvUnggcmluZyBwcm9jZXNzaW5nIGFuZCBoYXJkd2FyZSBlcnJvciByZWNvdmVyeSkgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1bmN0aW9uYWxseSBmdXp6IGluIG91ciBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXYW5neHVuIEdpZ2FiaXQgUENJIEV4cHJlc3MgRXRoZXJuZXQgZHJpdmVycyAobmdiZSwgdHhnYmUsIGxpYnd4KSB0byBhZGQgUENJIGVycm9yIGhhbmRsaW5nIGFuZCBUeCBoYW5nIGRldGVjdGlvbi4gVGhlc2UgYXJlIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgd2l0aG91dCBzb2Z0d2FyZSBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbCBvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVS9HQ0UpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIFR4L1J4IHJpbmcgcHJvY2Vzc2luZyBhbmQgaGFyZHdhcmUgZXJyb3IgcmVjb3ZlcnkpIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdW5jdGlvbmFsbHkgZnV6eiBpbiBvdXIgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowztlfb[1] Phase: Running StartedAt: 2026-07-07 13:16:43 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztlfb[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-07 13:16:43 +0000 UTC FinishedAt: 2026-07-07 13:16:50 +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,}