Name: series-workflowj88pt Phase: Failed StartedAt: 2026-07-13 13:17:06 +0000 UTC FinishedAt: 2026-07-13 13:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj88pt[0] Phase: Succeeded StartedAt: 2026-07-13 13:17:06 +0000 UTC FinishedAt: 2026-07-13 13:40:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj88pt[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 13:17:06 +0000 UTC FinishedAt: 2026-07-13 13:40:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIEkyQy9TUEkgZHJpdmVyLiBEdXJpbmcgaW5pdGlhbGl6YXRpb24gKHpsMzA3M3hfZGV2X3Byb2JlKSwgdGhlIGRyaXZlciBzdHJpY3RseSByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIGhhcmR3YXJlIGNoaXAgSUQgKFpMX1JFR19JRCkuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIHRoZSBrZXJuZWwsIGFuZCBnZW5lcmljIEkyQyBtb2NrcyBsaWtlIGkyYy1zdHViIGRvIG5vdCBzdXBwb3J0IHRoZSAxNi1iaXQgcmVnaXN0ZXIgYWRkcmVzc2luZyByZXF1aXJlZCBieSB0aGlzIGRyaXZlciwgdGhlIHByb2JlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGZhaWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgYW5kIFBUUCBkZXZpY2VzIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWE2MDBhMWJkNjVhMjFmNDc0ZGJlY2Y5ZWU2ZDlkYjczZWI4MjgwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDEzOjM2OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzMS4uZDA1NzRhZDU3MWQzZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5AQCAtMiw3ICYjNDM7Miw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tXHRkZXBlbmRzIG9uIE5FVFxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4mIzQzO1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxuIFx0dHJpc3RhdGUgXCYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gXHRzZWxlY3QgUkVHTUFQX1NQSVxuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbmluZGV4IDRlYzJjZjUzZGFkNDY4Li41MzAzMmU3ODJmZDRhZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0yMDIsNiAmIzQzOzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcbiBcdFx0emwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTtcbiBcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNmNoYW4tXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4gXG4gXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cbkBAIC0yMzQsNiAmIzQzOzI0MCwzMDcgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuIFx0cmV0dXJuIFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqXG4mIzQzOyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLFxuJiM0MzsgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHRpbWVvdXQ7XG4mIzQzO1x0dTggdG9kX2N0cmw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4mIzQzO1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcbiYjNDM7XHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0ICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZVxuJiM0MzsgKlxuJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcbiYjNDM7ICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kXG4mIzQzOyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbiYjNDM7XHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50XG4mIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbiYjNDM7e1xuJiM0MztcdHUzMiBuc2VjO1xuJiM0MztcdHU2NCBzZWM7XG4mIzQzO1x0dTggY21kO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKG5leHRfaHopXG4mIzQzO1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFx1MDAyNnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHRzLVx1MDAzZXR2X3NlYyA9IHNlYztcbiYjNDM7XHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldFxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXG4mIzQzO1x0XHRcdFx0ICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXG4mIzQzOyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cbiYjNDM7ICogSWYgbGVzcyB0aGFuIDIwIG1zIHJlbWFpbnMsIHdhaXRzIGZvciB0aGUgcm9sbG92ZXIgYW5kIGluY3JlbWVudHMgdGhlXG4mIzQzOyAqIG5leHQtSHogc2Vjb25kcyBieSBvbmUuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSWYgdG9vIGNsb3NlIHRvIChvciBwYXN0KSB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQgKi9cbiYjNDM7XHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcbiYjNDM7XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNjIDAgfHwgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjIFx1MDAzYyB0aHJlc2hvbGRfbnMpKSB7XG4mIzQzO1x0XHRpZiAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMpXG4mIzQzO1x0XHRcdGZzbGVlcCgodW5zaWduZWQgbG9uZylkaWZmLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDICYjNDM7IDEpO1xuJiM0MztcdFx0dHNfbmV4dC50dl9zZWMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4mIzQzO1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbiYjNDM7XHRpZiAoIXRpbWVzcGVjNjRfdmFsaWQoXHUwMDI2dHNfbmV4dCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgYWRqdXN0ZWQgVG9EIGJhY2sgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHR6bGRldi1cdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gJiM0MzstMXMpXG4mIzQzOyAqXG4mIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuJiM0Mzt7XG4mIzQzO1x0czY0IHRpZV9kYXRhO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4mIzQzO1x0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxuJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4mIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4mIzQzO3tcbiYjNDM7XHR1OCBjdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuJiM0MztcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0XHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuJiM0MztcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4mIzQzO1x0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbiYjNDM7XHRpZiAodG9kX3N0ZXApXG4mIzQzO1x0XHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTc1Li45ZGM1YTNmMTk5MWYxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCAmIzQzOzUsMTIgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cmVncy5oXCYjMzQ7XG4gXG4mIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gXG4gLyoqXG5AQCAtMTYsNiAmIzQzOzE4LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2O1xuICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVcbiAgKiBAbW9kZV9yZWZzZWw6IG1vZGUgYW5kIHJlZmVyZW5jZSBzZWxlY3Rpb24gcmVnaXN0ZXIgdmFsdWVcbiAgKiBAcmVmX3ByaW86IHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgKDQgYml0cyBwZXIgcmVmLCBQL04gcGFja2VkKVxuJiM0MzsgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2tcbiAgKiBAbW9uX3N0YXR1czogbW9uaXRvciBzdGF0dXMgcmVnaXN0ZXIgdmFsdWVcbiAgKiBAcmVmc2VsX3N0YXR1czogcmVmZXJlbmNlIHNlbGVjdGlvbiBzdGF0dXMgcmVnaXN0ZXIgdmFsdWVcbiAgKiBAZGZfb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlIGluIDJeLTQ4IHN0ZXBzXG5AQCAtMjYsNiAmIzQzOzI5LDkgQEAgc3RydWN0IHpsMzA3M3hfY2hhbiB7XG4gXHRcdHU4XHRtb2RlX3JlZnNlbDtcbiBcdFx0dThcdHJlZl9wcmlvW1pMMzA3M1hfTlVNX1JFRlMgLyAyXTtcbiBcdCk7XG4mIzQzO1x0c3RydWN0X2dyb3VwKGludiwgLyogSW52YXJpYW50cyAqL1xuJiM0MztcdFx0dTE2XHRvdXRfc3RlcF90aW1lX21hc2s7XG4mIzQzO1x0KTtcbiBcdHN0cnVjdF9ncm91cChzdGF0LFxuIFx0XHR1OFx0bW9uX3N0YXR1cztcbiBcdFx0dThcdHJlZnNlbF9zdGF0dXM7XG5AQCAtNDIsNiAmIzQzOzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbiYjNDM7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG4mIzQzO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMDAsNiAmIzQzOzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXG4mIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbiYjNDM7XHRcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjMzLDQgJiM0MzsyNjgsMTcgQEAgc3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiBGSUVMRF9HRVQoWkxfRFBMTF9SRUZTRUxfU1RBVFVTX1JFRlNFTCwgY2hhbi1cdTAwM2VyZWZzZWxfc3RhdHVzKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuJiM0MzsgKiBAb3V0OiBvdXRwdXQgaW5kZXhcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3psMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCBvdXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gISEoY2hhbi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChvdXQpKTtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWYgLyogX1pMMzA3M1hfQ0hBTl9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5pbmRleCA3ZjVhZmFhYWU2MzQyZi4uYjJmOWZjOTdmZDFiNjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTEwMzMsNiAmIzQzOzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbmluZGV4IDc4ZGMyMDhmM2VlYTJhLi4yZGM4MzZkMGM4ZjZiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5AQCAtMjYsNiAmIzQzOzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7XG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVNcdFx0KDMwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VU1x0KDMwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiAmIzQzOzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXG4gICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnNcbiYjNDM7ICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnNcbiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJiMzOTsgaW52YXJpYW50c1xuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMmIzM5OyBpbnZhcmlhbnRzXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzXG5AQCAtNzEsNiAmIzQzOzc3LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IGQ5MWY1MmI1OGVhZTM0Li43YzExZGUzNTgyMWFlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5AQCAtMTQsNiAmIzQzOzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtNDIsNiAmIzQzOzQ0LDcgQEBcbiAgKiBAcGhhc2Vfb2Zmc2V0OiBsYXN0IHNhdmVkIHBpbiBwaGFzZSBvZmZzZXRcbiAgKiBAZnJlcV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgZnJhY3Rpb25hbCBmcmVxdWVuY3kgb2Zmc2V0XG4gICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5XG4mIzQzOyAqIEBwZXJvdXRfaWR4OiBQVFAgcGVyb3V0IGNoYW5uZWwgaW5kZXgsIG9yIC0xIGlmIG5vdCBwZXJvdXQtZWxpZ2libGVcbiAgKi9cbiBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuQEAgLTU5LDYgJiM0Mzs2Miw3IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcbiBcdHM2NFx0XHRcdHBoYXNlX29mZnNldDtcbiBcdHM2NFx0XHRcdGZyZXFfb2Zmc2V0O1xuIFx0dTMyXHRcdFx0bWVhc3VyZWRfZnJlcTtcbiYjNDM7XHRzOFx0XHRcdHBlcm91dF9pZHg7XG4gfTtcbiBcbiAvKlxuQEAgLTkzNiwyMSAmIzQzOzk0MCwxNyBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gfVxuIFxuIHN0YXRpYyBpbnRcbi16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tXHRcdFx0XHQgICAgICB2b2lkICpwaW5fcHJpdixcbi1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbi1cdFx0XHRcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7X196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4mIzQzO1x0XHRcdFx0XHR1NjQgZnJlcXVlbmN5KVxuIHtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcbiBcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiA9IHBpbl9wcml2O1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuIFx0dTMyIG5ld19kaXYsIHN5bnRoX2ZyZXE7XG4gXHRzdHJ1Y3QgemwzMDczeF9vdXQgb3V0O1xuIFx0dTggb3V0X2lkO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbiBcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4gXHRvdXQgPSAqemwzMDczeF9vdXRfc3RhdGVfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuQEAgLTEwMTEsNiAmIzQzOzEwMTEsMjEgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIFx0cmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCBcdTAwMjZvdXQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuJiM0MztcdFx0XHRcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGZyZXF1ZW5jeSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludFxuIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdFx0XHRcdFx0IHZvaWQgKnBpbl9wcml2LFxuQEAgLTE2MDgsNiAmIzQzOzE2MjMsNyBAQCB6bDMwNzN4X2RwbGxfcGluX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyLFxuIFx0cGluLVx1MDAzZWRwbGwgPSB6bGRwbGw7XG4gXHRwaW4tXHUwMDNlZGlyID0gZGlyO1xuIFx0cGluLVx1MDAzZWlkID0gaWQ7XG4mIzQzO1x0cGluLVx1MDAzZXBlcm91dF9pZHggPSAtMTtcbiBcbiBcdHJldHVybiBwaW47XG4gfVxuQEAgLTE2MjYsNiAmIzQzOzE2NDIsNDQgQEAgemwzMDczeF9kcGxsX3Bpbl9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4pXG4gXHRrZnJlZShwaW4pO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0IC0gY2hlY2sgaWYgb3V0cHV0IHBpbiBpcyBwZXJvdXQtZWxpZ2libGVcbiYjNDM7ICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2tcbiYjNDM7ICogQHByb3BzOiBwaW4gcHJvcGVydGllcyAoYWxyZWFkeSBmZXRjaGVkIGJ5IGNhbGxlcilcbiYjNDM7ICpcbiYjNDM7ICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWRcbiYjNDM7ICogKG5vdCBkaWZmZXJlbnRpYWwpIGFuZCBzdXBwb3J0cyAxIEh6IGluIGl0cyBmcmVxdWVuY3kgbGlzdC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2VcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4mIzQzO1x0XHRcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X3Bpbl9wcm9wcyAqcHJvcHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBwaW4tXHUwMDNlZHBsbDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdHU4IG91dF9pZDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAoemwzMDczeF9kZXZfb3V0X2lzX2RpZmYoemxkcGxsLVx1MDAzZWRldiwgb3V0X2lkKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcm9wcy1cdTAwM2VkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkX251bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwcm9wcy1cdTAwM2VkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkW2ldLm1pbiA9PSAxKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBwaW5cbiAgKiBAcGluOiBwb2ludGVyIHRvIERQTEwgcGluXG5AQCAtMTY2Nyw2ICYjNDM7MTcyMSw4IEBAIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwgdTMyIGluZGV4KVxuIFx0XHRpZiAocGluLVx1MDAzZXByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKVxuIFx0XHRcdC8qIENsYW1wIHByaW8gdG8gbWF4IHZhbHVlICovXG4gXHRcdFx0cGluLVx1MDAzZXByaW8gPSBaTF9EUExMX1JFRl9QUklPX01BWDtcbiYjNDM7XHR9IGVsc2UgaWYgKHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHBpbiwgcHJvcHMpKSB7XG4mIzQzO1x0XHRwaW4tXHUwMDNlcGVyb3V0X2lkeCA9IHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uX3Blcl9vdXQmIzQzOyYjNDM7O1xuIFx0fVxuIFxuIFx0LyogQ3JlYXRlIG9yIGdldCBleGlzdGluZyBEUExMIHBpbiAqL1xuQEAgLTE4OTcsNiAmIzQzOzE5NTMsOCBAQCB6bDMwNzN4X2RwbGxfcGluc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHR1OCBpZCwgaW5kZXg7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCA9IDA7XG4mIzQzO1xuIFx0LyogUHJvY2VzcyBpbnB1dCBwaW5zICovXG4gXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIFpMMzA3M1hfTlVNX1BJTlM7IGluZGV4JiM0MzsmIzQzOykge1xuIFx0XHQvKiBGaXJzdCBpbnB1dCBwaW5zIGFuZCB0aGVuIG91dHB1dCBwaW5zICovXG5AQCAtMjI4MCw0NSAmIzQzOzIzMzgsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuJiM0MzsvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiAmIzQzOy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbiYjNDM7XG4gLyoqXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lXG4mIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiBcbi1cdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuLVx0aWYgKCF6bGRwbGwpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIHpsZHBsbDtcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4mIzQzOyAqXG4mIzQzOyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4mIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxuJiM0MzsgKlxuJiM0MzsgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4mIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXG4mIzQzOyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbiYjNDM7ICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4mIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlXG4mIzQzOyAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuJiM0MztcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbiYjNDM7XHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4mIzQzO1x0czMyIHN0ZXBfY3ljbGVzO1xuJiM0MztcdHUzMiBzeW50aF9mcmVxO1xuJiM0MztcdGludCByYztcbiYjNDM7XHR1OCBpO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbiYjNDM7XHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4mIzQzO1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgb3V0X2lkKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuJiM0MztcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4mIzQzO1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXG4mIzQzO1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4mIzQzO1x0XHRcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3ludGhfbWFza1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4mIzQzO1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICF0b2Rfc3RlcHBlZCk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0aWYgKHRvZF9zdGVwcGVkKSB7XG4mIzQzO1x0XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O1BhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR0b2Rfc3RlcHBlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxuJiM0MztcdCAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXRvZF9zdGVwcGVkKSB7XG4mIzQzO1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuJiM0MztcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4gICpcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4mIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcbiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxuJiM0MzsgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXZvaWRcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbiYjNDM7XHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4mIzQzO1xuJiM0MztcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbiYjNDM7XHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxuJiM0MztcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGFicyhkZWx0YSkgXHUwMDNlPSBOU0VDX1BFUl9TRUMpIHtcbiYjNDM7XHRcdHMzMiByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbiYjNDM7XHRcdHRzLnR2X25zZWMgPSAwO1xuJiM0MztcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4mIzQzO1x0XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xuJiM0MztcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuJiM0MztcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4mIzQzO1x0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcbiYjNDM7XHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmMgXHUwMDI2XHUwMDI2IHNlY19hZGp1c3RlZCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCwgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0czY0IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuJiM0MztcdCAqXG4mIzQzO1x0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcbiYjNDM7XHQgKi9cbiYjNDM7XHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbiYjNDM7XHRpZiAob2Zmc2V0ID09IGNoYW4tXHUwMDNlZGZfb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIG9mZnNldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuJiM0MzsgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24mIzM5O3Qgc3VwcG9ydCBUSUUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHMzMlxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4mIzQzO1x0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3BpbiAtIGZpbmQgcGluIGJ5IHBlcm91dCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgcGluLCBvciBOVUxMIGlmIG5vdCBmb3VuZFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBpbnQgaWR4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAocGluLVx1MDAzZXBlcm91dF9pZHggPT0gaWR4KVxuJiM0MztcdFx0XHRyZXR1cm4gcGluO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBycTogdGhlIHJlcXVlc3RlZCBjbG9jayBmdW5jdGlvbiBhbmQgcGFyYW1ldGVyc1xuJiM0MzsgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXG4mIzQzOyAqXG4mIzQzOyAqIEhhbmRsZXMgUFRQX0NMS19SRVFfUEVST1VUIHJlcXVlc3RzLiBPbmx5IDFQUFMgKHBlcmlvZCA9IDFzKSBpcyBzdXBwb3J0ZWQuXG4mIzQzOyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xuJiM0MzsgKiBhcyB0aGUgc2lnbmFsIGlzIG5vdCBkaXNhYmxlZC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaWR4O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKHJxLVx1MDAzZXR5cGUgIT0gUFRQX0NMS19SRVFfUEVST1VUKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZHggPSBycS1cdTAwM2VwZXJvdXQuaW5kZXg7XG4mIzQzO1x0aWYgKGlkeCBcdTAwM2U9IGluZm8tXHUwMDNlbl9wZXJfb3V0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXG4mIzQzO1x0ICogaXMgYSBuby1vcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW9uKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXG4mIzQzO1x0aWYgKHJxLVx1MDAzZXBlcm91dC5wZXJpb2Quc2VjICE9IDEgfHwgcnEtXHUwMDNlcGVyb3V0LnBlcmlvZC5uc2VjICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcbiYjNDM7XHRpZiAoIXBpbikge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfZGV2X291dHB1dF9waW5fZnJlcV9nZXQoemxkcGxsLVx1MDAzZWRldiwgcGluLVx1MDAzZWlkKSA9PSAxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHRkcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbi1cdTAwM2VkcGxsX3Bpbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4mIzQzO1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzQzO1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuJiM0MztcdC5nZXR0aW1leDY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcbiYjNDM7XHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuJiM0MztcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbiYjNDM7XHQuYWRqZmluZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXG4mIzQzO1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4mIzQzO1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4mIzQzO1x0LmVuYWJsZVx0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xuJiM0MztcbiYjNDM7XHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbiYjNDM7XHRcdCBcJiMzNDt6bDMwNzN4LWRwbGwldVwmIzM0OywgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNnpsZHBsbC1cdTAwM2VwdHBfaW5mbywgemxkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVx1MDAzZXB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4mIzQzO1x0fVxuIH1cbiBcbiAvKipcbkBAIC0yNDAzLDYgJiM0MzsyODYzLDQ4IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1xuJiM0MztcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuJiM0MztcdGlmICghemxkcGxsKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbiYjNDM7XHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbiYjNDM7XHR6bGRwbGwtXHUwMDNlcHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemxkcGxsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4mIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKi9cbiYjNDM7dm9pZFxuJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdGtmcmVlKHpsZHBsbCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuQEAgLTI0MzMsNiAmIzQzOzI5MzUsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuJiM0MztcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQ2LDcgJiM0MzsyOTU1LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB2b2lkXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHtcbi1cdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cbiYjNDM7XHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbmluZGV4IGZhZWJjNDAyYmExYjcwLi45YjVmNzJjMzM4NDljZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5AQCAtNSw2ICYjNDM7NSw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHBsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4gXG5AQCAtMjIsNiAmIzQzOzI0LDggQEBcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xuJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0O1xuQEAgLTM2LDYgJiM0Mzs0MCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0ZW51bSBkcGxsX3R5cGVcdFx0XHR0eXBlO1xuIFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXHRcdGxvY2tfc3RhdHVzO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRwaW5zO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrXHRcdCpwdHBfY2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuaW5kZXggYjcwZWFkN2Q0NDk1YjIuLjQ0Nzc1N2U5OTg0NWQ4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFx0XHRcdEdFTk1BU0soMiwgMClcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcdFx0NFxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXHRcdFx0NFxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSlcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXHQxXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0OFxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4mIzQzO1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgJiM0MzsyMDcsOSBAQFxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcbiYjNDM7ICpcbiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuJiM0MzsgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5AQCAtMjAyLDYgJiM0MzsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxuJiM0MztcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgJiM0MzsyNTYsOCBAQFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFx0XHRHRU5NQVNLKDYsIDQpXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTMxNiw2ICYjNDM7MzUzLDI1IEBAXG4gI2RlZmluZSBaTF9SRUdfT1VUUFVUX0VTWU5DX1dJRFRIXHRcdFpMX1JFRygxNCwgMHgxOCwgNClcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfQ09NUFx0XHRaTF9SRUcoMTQsIDB4MjAsIDQpXG4gXG4mIzQzOy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuJiM0MzsgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwXG4mIzQzOyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXHRCSVQoMylcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXHQxXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1x0XHRaTF9SRUcoOSwgMHgzYSwgMilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4mIzQzO1xuIC8qXG4gICogUmVnaXN0ZXIgUGFnZSAyNTUgLSBIVyByZWdpc3RlcnMgYWNjZXNzXG4gICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgSTJDL1NQSSBkcml2ZXIuIER1cmluZyBpbml0aWFsaXphdGlvbiAoemwzMDczeF9kZXZfcHJvYmUpLCB0aGUgZHJpdmVyIHN0cmljdGx5IHJlYWRzIGFuZCB2ZXJpZmllcyB0aGUgaGFyZHdhcmUgY2hpcCBJRCAoWkxfUkVHX0lEKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gdGhlIGtlcm5lbCwgYW5kIGdlbmVyaWMgSTJDIG1vY2tzIGxpa2UgaTJjLXN0dWIgZG8gbm90IHN1cHBvcnQgdGhlIDE2LWJpdCByZWdpc3RlciBhZGRyZXNzaW5nIHJlcXVpcmVkIGJ5IHRoaXMgZHJpdmVyLCB0aGUgcHJvYmUgZnVuY3Rpb24gd2lsbCBhbHdheXMgZmFpbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgRFBMTCBhbmQgUFRQIGRldmljZXMgd2lsbCBuZXZlciBiZSByZWdpc3RlcmVkLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVhNjAwYTFiZDY1YTIxZjQ3NGRiZWNmOWVlNmQ5ZGI3M2ViODI4MDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAxMzozNjo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCmluZGV4IDViYmNhMTQwMDU4MTMxLi5kMDU3NGFkNTcxZDNmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCkBAIC0yLDcgJiM0MzsyLDcgQEAKIAogY29uZmlnIFpMMzA3M1gKIAl0cmlzdGF0ZSAmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMmIzM0OyBpZiBDT01QSUxFX1RFU1QKLQlkZXBlbmRzIG9uIE5FVAomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMCiAJc2VsZWN0IERQTEwKIAlzZWxlY3QgTkVUX0RFVkxJTksKIAlzZWxlY3QgUkVHTUFQCkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBjb25maWcgWkwzMDczWAogCiBjb25maWcgWkwzMDczWF9JMkMKIAl0cmlzdGF0ZSAmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUCiYjNDM7CWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUwKIAlzZWxlY3QgUkVHTUFQX0kyQwogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApAQCAtMjgsNyAmIzQzOzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDCiAKIGNvbmZpZyBaTDMwNzNYX1NQSQogCXRyaXN0YXRlICYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTAogCXNlbGVjdCBSRUdNQVBfU1BJCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKaW5kZXggNGVjMmNmNTNkYWQ0NjguLjUzMDMyZTc4MmZkNGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCkBAIC0yMDIsNiAmIzQzOzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQogCQl6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSwKIAkJemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTsKIAomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssCiYjNDM7CQkJICAgICAgJmFtcDtjaGFuLSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O211bHRpb3BfbG9jayk7CiAKIAkvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi8KQEAgLTIzNCw2ICYjNDM7MjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsCiAJcmV0dXJuICZhbXA7emxkZXYtJmd0O2NoYW5baW5kZXhdOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhcgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICoKJiM0MzsgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCwKJiM0MzsgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiYjNDM7CXU4IHRvZF9jdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksICZhbXA7dG9kX2N0cmwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHsKJiM0MzsJY2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjoKJiM0MzsJCXRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmQKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5CiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lCiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLgomIzQzOyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZQomIzQzOyAqIG5leHQtSHogc2Vjb25kcyBieSBvbmUuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgJmFtcDt0c19uZXh0LCBOVUxMKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBJZiB0b28gY2xvc2UgdG8gKG9yIHBhc3QpIHRoZSBuZXh0IHJvbGxvdmVyLCB3YWl0IGl0IG91dCAqLwomIzQzOwlkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTsKJiM0MzsJaWYgKGRpZmYudHZfc2VjICZsdDsgMCB8fCAoIWRpZmYudHZfc2VjICZhbXA7JmFtcDsgZGlmZi50dl9uc2VjICZsdDsgdGhyZXNob2xkX25zKSkgewomIzQzOwkJaWYgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYykKJiM0MzsJCQlmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTsKJiM0MzsJCXRzX25leHQudHZfc2VjJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi8KJiM0MzsJdHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTsKJiM0MzsJaWYgKCF0aW1lc3BlYzY0X3ZhbGlkKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogV3JpdGUgYWRqdXN0ZWQgVG9EIGJhY2sgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHMKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTsKJiM0MzsJaWYgKCFyYykKJiM0MzsJCXpsZGV2LSZndDtjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAmIzQzOy0xcykKJiM0MzsgKgomIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YQomIzQzOyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpCiYjNDM7ewomIzQzOwlzNjQgdGllX2RhdGE7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCSAgWkxfRFBMTF9USUVfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqLwomIzQzOwl0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQlaTF9EUExMX1RJRV9DVFJMX09QX1dSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb24KJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXAKJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzCiYjNDM7ICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZQomIzQzOyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsCiYjNDM7CQkJICAgIGJvb2wgdG9kX3N0ZXApCiYjNDM7ewomIzQzOwl1OCBjdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsCiYjNDM7CQkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsCiYjNDM7CQkJICAgICAgIHN0ZXBfY3ljbGVzKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJY3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfAomIzQzOwkgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7CiYjNDM7CWlmICh0b2Rfc3RlcCkKJiM0MzsJCWN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmUKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAppbmRleCBkYzljNmQ5NWJkZWU3NS4uOWRjNWEzZjE5OTFmMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKQEAgLTUsMTAgJiM0Mzs1LDEyIEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0ZGRlZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3JlZ3MuaCYjMzQ7CiAKJiM0MztzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7CiBzdHJ1Y3QgemwzMDczeF9kZXY7CiAKIC8qKgpAQCAtMTYsNiAmIzQzOzE4LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2OwogICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZQogICogQG1vZGVfcmVmc2VsOiBtb2RlIGFuZCByZWZlcmVuY2Ugc2VsZWN0aW9uIHJlZ2lzdGVyIHZhbHVlCiAgKiBAcmVmX3ByaW86IHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgKDQgYml0cyBwZXIgcmVmLCBQL04gcGFja2VkKQomIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzawogICogQG1vbl9zdGF0dXM6IG1vbml0b3Igc3RhdHVzIHJlZ2lzdGVyIHZhbHVlCiAgKiBAcmVmc2VsX3N0YXR1czogcmVmZXJlbmNlIHNlbGVjdGlvbiBzdGF0dXMgcmVnaXN0ZXIgdmFsdWUKICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHMKQEAgLTI2LDYgJiM0MzsyOSw5IEBAIHN0cnVjdCB6bDMwNzN4X2NoYW4gewogCQl1OAltb2RlX3JlZnNlbDsKIAkJdTgJcmVmX3ByaW9bWkwzMDczWF9OVU1fUkVGUyAvIDJdOwogCSk7CiYjNDM7CXN0cnVjdF9ncm91cChpbnYsIC8qIEludmFyaWFudHMgKi8KJiM0MzsJCXUxNglvdXRfc3RlcF90aW1lX21hc2s7CiYjNDM7CSk7CiAJc3RydWN0X2dyb3VwKHN0YXQsCiAJCXU4CW1vbl9zdGF0dXM7CiAJCXU4CXJlZnNlbF9zdGF0dXM7CkBAIC00Miw2ICYjNDM7NDgsMjAgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsCiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIwMCw2ICYjNDM7MjIwLDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSzsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGUKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICoKJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHwKJiM0MzsJCXpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpAQCAtMjMzLDQgJiM0MzsyNjgsMTcgQEAgc3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKIAlyZXR1cm4gRklFTERfR0VUKFpMX0RQTExfUkVGU0VMX1NUQVRVU19SRUZTRUwsIGNoYW4tJmd0O3JlZnNlbF9zdGF0dXMpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrCiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQomIzQzOyAqIEBvdXQ6IG91dHB1dCBpbmRleAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9ucwomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCBvdXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gISEoY2hhbi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrICZhbXA7IEJJVChvdXQpKTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYgLyogX1pMMzA3M1hfQ0hBTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKaW5kZXggN2Y1YWZhYWFlNjM0MmYuLmIyZjlmYzk3ZmQxYjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCkBAIC0xMDMzLDYgJiM0MzsxMDMzLDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCSAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LgogCSAqLwogCXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O211bHRpb3BfbG9jayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKJiM0MzsJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiAJaWYgKHJjKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKIAkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAppbmRleCA3OGRjMjA4ZjNlZWEyYS4uMmRjODM2ZDBjOGY2YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC03MSw2ICYjNDM7NzcsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwppbmRleCBkOTFmNTJiNThlYWUzNC4uN2MxMWRlMzU4MjFhZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CkBAIC0xNCw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKIApAQCAtNDIsNiAmIzQzOzQ0LDcgQEAKICAqIEBwaGFzZV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgcGluIHBoYXNlIG9mZnNldAogICogQGZyZXFfb2Zmc2V0OiBsYXN0IHNhdmVkIGZyYWN0aW9uYWwgZnJlcXVlbmN5IG9mZnNldAogICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5CiYjNDM7ICogQHBlcm91dF9pZHg6IFBUUCBwZXJvdXQgY2hhbm5lbCBpbmRleCwgb3IgLTEgaWYgbm90IHBlcm91dC1lbGlnaWJsZQogICovCiBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwpAQCAtNTksNiAmIzQzOzYyLDcgQEAgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gewogCXM2NAkJCXBoYXNlX29mZnNldDsKIAlzNjQJCQlmcmVxX29mZnNldDsKIAl1MzIJCQltZWFzdXJlZF9mcmVxOwomIzQzOwlzOAkJCXBlcm91dF9pZHg7CiB9OwogCiAvKgpAQCAtOTM2LDIxICYjNDM7OTQwLDE3IEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKIH0KIAogc3RhdGljIGludAotemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAotCQkJCSAgICAgIHZvaWQgKnBpbl9wcml2LAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwKLQkJCQkgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksCi0JCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO19femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsCiYjNDM7CQkJCQlzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLAomIzQzOwkJCQkJdTY0IGZyZXF1ZW5jeSkKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7CiAJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwotCXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjsKIAljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiAJdTMyIG5ld19kaXYsIHN5bnRoX2ZyZXE7CiAJc3RydWN0IHpsMzA3M3hfb3V0IG91dDsKIAl1OCBvdXRfaWQ7CiAKLQlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAogCW91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi0mZ3Q7aWQpOwogCW91dCA9ICp6bDMwNzN4X291dF9zdGF0ZV9nZXQoemxkZXYsIG91dF9pZCk7CkBAIC0xMDExLDYgJiM0MzsxMDExLDIxIEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKIAlyZXR1cm4gemwzMDczeF9vdXRfc3RhdGVfc2V0KHpsZGV2LCBvdXRfaWQsICZhbXA7b3V0KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQKJiM0Mzt6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCiYjNDM7CQkJCSAgICAgIHZvaWQgKnBpbl9wcml2LAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsCiYjNDM7CQkJCSAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHpsZHBsbCwgcGluX3ByaXYsCiYjNDM7CQkJCQkJICAgICAgIGZyZXF1ZW5jeSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludAogemwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAogCQkJCQkgdm9pZCAqcGluX3ByaXYsCkBAIC0xNjA4LDYgJiM0MzsxNjIzLDcgQEAgemwzMDczeF9kcGxsX3Bpbl9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpciwKIAlwaW4tJmd0O2RwbGwgPSB6bGRwbGw7CiAJcGluLSZndDtkaXIgPSBkaXI7CiAJcGluLSZndDtpZCA9IGlkOwomIzQzOwlwaW4tJmd0O3Blcm91dF9pZHggPSAtMTsKIAogCXJldHVybiBwaW47CiB9CkBAIC0xNjI2LDYgJiM0MzsxNjQyLDQ0IEBAIHpsMzA3M3hfZHBsbF9waW5fZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluKQogCWtmcmVlKHBpbik7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dCAtIGNoZWNrIGlmIG91dHB1dCBwaW4gaXMgcGVyb3V0LWVsaWdpYmxlCiYjNDM7ICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2sKJiM0MzsgKiBAcHJvcHM6IHBpbiBwcm9wZXJ0aWVzIChhbHJlYWR5IGZldGNoZWQgYnkgY2FsbGVyKQomIzQzOyAqCiYjNDM7ICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWQKJiM0MzsgKiAobm90IGRpZmZlcmVudGlhbCkgYW5kIHN1cHBvcnRzIDEgSHogaW4gaXRzIGZyZXF1ZW5jeSBsaXN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbAomIzQzO3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sCiYjNDM7CQkJICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfcGluX3Byb3BzICpwcm9wcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IHBpbi0mZ3Q7ZHBsbDsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJdTggb3V0X2lkOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJb3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLSZndDtpZCk7CiYjNDM7CWlmICh6bDMwNzN4X2Rldl9vdXRfaXNfZGlmZih6bGRwbGwtJmd0O2Rldiwgb3V0X2lkKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcHJvcHMtJmd0O2RwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHByb3BzLSZndDtkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkW2ldLm1pbiA9PSAxKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIHBpbgogICogQHBpbjogcG9pbnRlciB0byBEUExMIHBpbgpAQCAtMTY2Nyw2ICYjNDM7MTcyMSw4IEBAIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwgdTMyIGluZGV4KQogCQlpZiAocGluLSZndDtwcmlvID09IFpMX0RQTExfUkVGX1BSSU9fTk9ORSkKIAkJCS8qIENsYW1wIHByaW8gdG8gbWF4IHZhbHVlICovCiAJCQlwaW4tJmd0O3ByaW8gPSBaTF9EUExMX1JFRl9QUklPX01BWDsKJiM0MzsJfSBlbHNlIGlmICh6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChwaW4sIHByb3BzKSkgewomIzQzOwkJcGluLSZndDtwZXJvdXRfaWR4ID0gemxkcGxsLSZndDtwdHBfaW5mby5uX3Blcl9vdXQmIzQzOyYjNDM7OwogCX0KIAogCS8qIENyZWF0ZSBvciBnZXQgZXhpc3RpbmcgRFBMTCBwaW4gKi8KQEAgLTE4OTcsNiAmIzQzOzE5NTMsOCBAQCB6bDMwNzN4X2RwbGxfcGluc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJdTggaWQsIGluZGV4OwogCWludCByYzsKIAomIzQzOwl6bGRwbGwtJmd0O3B0cF9pbmZvLm5fcGVyX291dCA9IDA7CiYjNDM7CiAJLyogUHJvY2VzcyBpbnB1dCBwaW5zICovCiAJZm9yIChpbmRleCA9IDA7IGluZGV4ICZsdDsgWkwzMDczWF9OVU1fUElOUzsgaW5kZXgmIzQzOyYjNDM7KSB7CiAJCS8qIEZpcnN0IGlucHV0IHBpbnMgYW5kIHRoZW4gb3V0cHV0IHBpbnMgKi8KQEAgLTIyODAsNDUgJiM0MzsyMzM4LDQ0NyBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCXJldHVybiByYzsKIH0KIAomIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovCiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREoJMTAwMDAwMDAKJiM0MzsKIC8qKgotICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQotICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZQomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiAgKgotICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBmYWxzZSwgdHMsIHN0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0CiAgKgotICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotc3RydWN0IHpsMzA3M3hfZHBsbCAqCi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKIAotCXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwotCWlmICghemxkcGxsKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAotCXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7Ci0JemxkcGxsLSZndDtpZCA9IGNoOwotCW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsICp0cyk7CiYjNDM7fQogCi0JcmV0dXJuIHpsZHBsbDsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXAKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsCiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKQomIzQzOyAqCiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aAomIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwcwomIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlCiYjNDM7ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsCiYjNDM7CQkJCQkgICAgICAgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJdTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9OwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsJdTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwOwomIzQzOwlib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7CiYjNDM7CXMzMiBzdGVwX2N5Y2xlczsKJiM0MzsJdTMyIHN5bnRoX2ZyZXE7CiYjNDM7CWludCByYzsKJiM0MzsJdTggaTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwkvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgJmFtcDt6bGRwbGwtJmd0O3BpbnMsIGxpc3QpIHsKJiM0MzsJCXU4IG91dF9pZCwgc3ludGhfaWQ7CiYjNDM7CiYjNDM7CQlpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJb3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLSZndDtpZCk7CiYjNDM7CiYjNDM7CQlpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpOwomIzQzOwkJaWYgKHN5bnRoX2lkICZndDs9IFpMMzA3M1hfTlVNX1NZTlRIUykgewomIzQzOwkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsICYjMzQ7VW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcbiYjMzQ7LAomIzQzOwkJCQkgb3V0X2lkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCXN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkwzMDczWF9OVU1fU1lOVEhTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7CiYjNDM7CQlpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHwKJiM0MzsJCSAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtJmd0O2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpOwomIzQzOwomIzQzOwkJLyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBsb3dlc3QtSUQgc3ludGgmIzM5O3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXRvZF9zdGVwcGVkKSB7CiYjNDM7CQlzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpOwomIzQzOwkJcmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCAwLAomIzQzOwkJCQkJICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2UKLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzCiAgKgotICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKCZndDs9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3IKJiM0MzsgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LAomIzQzOyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS4KJiM0MzsgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZAomIzQzOyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCi12b2lkCi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpCiB7Ci0JV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CWJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzOwomIzQzOwlpbnQgcmM7CiAKLQltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKLQlrZnJlZSh6bGRwbGwpOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CS8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi8KJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKQomIzQzOwkJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZAomIzQzOwkgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbQomIzQzOwkgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGFicyhkZWx0YSkgJmd0Oz0gTlNFQ19QRVJfU0VDKSB7CiYjNDM7CQlzMzIgcmVtYWluZGVyOwomIzQzOwomIzQzOwkJdHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgJmFtcDtyZW1haW5kZXIpOwomIzQzOwkJdHMudHZfbnNlYyA9IDA7CiYjNDM7CQlkZWx0YSA9IHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIHRzKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlzZWNfYWRqdXN0ZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJLyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi8KJiM0MzsJCWlmICghZGVsdGEpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi8KJiM0MzsJaWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkgewomIzQzOwkJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2sKJiM0MzsJICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuCiYjNDM7CSAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kCiYjNDM7CSAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0CiYjNDM7CSAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZhbXA7JmFtcDsgc2VjX2FkanVzdGVkKSB7CiYjNDM7CQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5CiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CXM2NCBvZmZzZXQ7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42CiYjNDM7CSAqCiYjNDM7CSAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjUKJiM0MzsJICovCiYjNDM7CW9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkKJiM0MzsJCXJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwOwomIzQzOwlpZiAob2Zmc2V0ID09IGNoYW4tJmd0O2RmX29mZnNldCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsIG9mZnNldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3IKJiM0MzsgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBtb2RlIGRvZXNuJiMzOTt0IHN1cHBvcnQgVElFLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzMzIKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpCiYjNDM7ewomIzQzOwkvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXCiYjNDM7CSAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluIC0gZmluZCBwaW4gYnkgcGVyb3V0IGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmQKJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKgomIzQzO3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJaWYgKHBpbi0mZ3Q7cGVyb3V0X2lkeCA9PSBpZHgpCiYjNDM7CQkJcmV0dXJuIHBpbjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9lbmFibGUgLSBlbmFibGUvZGlzYWJsZSBQVFAgY2xvY2sgZnVuY3Rpb25zCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHJxOiB0aGUgcmVxdWVzdGVkIGNsb2NrIGZ1bmN0aW9uIGFuZCBwYXJhbWV0ZXJzCiYjNDM7ICogQG9uOiB0cnVlIHRvIGVuYWJsZSwgZmFsc2UgdG8gZGlzYWJsZQomIzQzOyAqCiYjNDM7ICogSGFuZGxlcyBQVFBfQ0xLX1JFUV9QRVJPVVQgcmVxdWVzdHMuIE9ubHkgMVBQUyAocGVyaW9kID0gMXMpIGlzIHN1cHBvcnRlZC4KJiM0MzsgKiBPbiBlbmFibGUsIGNvbmZpZ3VyZXMgdGhlIG91dHB1dCBkaXZpZGVyIGZvciAxIEh6LiBPbiBkaXNhYmxlLCBkb2VzIG5vdGhpbmcKJiM0MzsgKiBhcyB0aGUgc2lnbmFsIGlzIG5vdCBkaXNhYmxlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJxLCBpbnQgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXVuc2lnbmVkIGludCBpZHg7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKHJxLSZndDt0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWR4ID0gcnEtJmd0O3Blcm91dC5pbmRleDsKJiM0MzsJaWYgKGlkeCAmZ3Q7PSBpbmZvLSZndDtuX3Blcl9vdXQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogVG9nZ2xpbmcgb3V0cHV0IHBpbnMgY2FuIHByb2R1Y2UgcnVudCBwdWxzZXMsIHNvIGRpc2FibGUKJiM0MzsJICogaXMgYSBuby1vcC4KJiM0MzsJICovCiYjNDM7CWlmICghb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogT25seSBhY2NlcHQgZXhhY3RseSAxUFBTIChwZXJpb2Quc2VjID09IDEsIG5zZWMgPT0gMCkgKi8KJiM0MzsJaWYgKHJxLSZndDtwZXJvdXQucGVyaW9kLnNlYyAhPSAxIHx8IHJxLSZndDtwZXJvdXQucGVyaW9kLm5zZWMgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcGluID0gemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oemxkcGxsLCBpZHgpOwomIzQzOwlpZiAoIXBpbikgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFscmVhZHkgYXQgMSBIeiwgbm90aGluZyB0byBkbyAqLwomIzQzOwlpZiAoemwzMDczeF9kZXZfb3V0cHV0X3Bpbl9mcmVxX2dldCh6bGRwbGwtJmd0O2RldiwgcGluLSZndDtpZCkgPT0gMSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHpsZHBsbCwgcGluLCAxKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFyYykKJiM0MzsJCWRwbGxfcGluX2NoYW5nZV9udGYocGluLSZndDtkcGxsX3Bpbik7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7CiYjNDM7CS5vd25lcgkJPSBUSElTX01PRFVMRSwKJiM0MzsJLm1heF9hZGoJPSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosCiYjNDM7CS5nZXR0aW1leDY0CT0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LAomIzQzOwkuc2V0dGltZTY0CT0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsCiYjNDM7CS5hZGp0aW1lCT0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLAomIzQzOwkuYWRqZmluZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSwKJiM0MzsJLmFkanBoYXNlCT0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSwKJiM0MzsJLmdldG1heHBoYXNlCT0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSwKJiM0MzsJLmVuYWJsZQkJPSB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsCiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jazsKJiM0MzsKJiM0MzsJc25wcmludGYoemxkcGxsLSZndDtwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLSZndDtwdHBfaW5mby5uYW1lKSwKJiM0MzsJCSAmIzM0O3psMzA3M3gtZHBsbCV1JiMzNDssIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDt6bGRwbGwtJmd0O3B0cF9pbmZvLCB6bGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwdHBfY2xvY2spKSB7CiYjNDM7CQlkZXZfZXJyKHpsZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XG4mIzM0OywKJiM0MzsJCQl6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLSZndDtwdHBfY2xvY2spKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0yNDAzLDYgJiM0MzsyODYzLDQ4IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICoKJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CiYjNDM7CXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwomIzQzOwlpZiAoIXpsZHBsbCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwomIzQzOwl6bGRwbGwtJmd0O2lkID0gY2g7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CiYjNDM7CXJldHVybiB6bGRwbGw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKi8KJiM0Mzt2b2lkCiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHpsZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zCiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKQEAgLTI0MzMsNiAmIzQzOzI5MzUsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAkJcmV0dXJuIHJjOwogCX0KIAomIzQzOwlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yNDQ2LDcgJiM0MzsyOTU1LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHZvaWQKIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHsKLQkvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovCiYjNDM7CXpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAppbmRleCBmYWViYzQwMmJhMWI3MC4uOWI1ZjcyYzMzODQ5Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKQEAgLTUsNiAmIzQzOzUsOCBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NvcmUuaCYjMzQ7CiAKQEAgLTIyLDYgJiM0MzsyNCw4IEBACiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKQogICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXMKICAqIEBwaW5zOiBsaXN0IG9mIHBpbnMKJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpCiAgKi8KIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CkBAIC0zNiw2ICYjNDM7NDAsOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAllbnVtIGRwbGxfdHlwZQkJCXR5cGU7CiAJZW51bSBkcGxsX2xvY2tfc3RhdHVzCQlsb2NrX3N0YXR1czsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlwaW5zOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8JCXB0cF9pbmZvOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrCQkqcHRwX2Nsb2NrOwogfTsKIAogc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAppbmRleCBiNzBlYWQ3ZDQ0OTViMi4uNDQ3NzU3ZTk5ODQ1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKQEAgLTE3OSw2ICYjNDM7MTc5LDIwIEBACiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTUQJCQlHRU5NQVNLKDIsIDApCiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0kJCTQKIAomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkwJCQlaTF9SRUcoNSwgMHgzMCwgMSkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1AJCQlHRU5NQVNLKDIsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSCQkJNAomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSwkJWkxfUkVHKDUsIDB4MzEsIDEpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIDgsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTUQJCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWgkxCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UCTgKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaCTkKJiM0MzsKICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMCQkJWkxfUkVHKDUsIDB4NTAsIDEpCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1IJCUdFTk1BU0soNywgNCkKQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhCiYjNDM7ICoKJiM0MzsgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsCiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KQkJCQkJXApAQCAtMjAyLDYgJiM0MzsyMTksMjQgQEAKIAkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KQogI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOCVM2NF9NSU4KIAomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNAkJCVpMX1JFRyg3LCAweDBDLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNAkJCVpMX1JFRyg3LCAweDEyLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzQJCQlaTF9SRUcoNywgMHgxOCwgNCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyMSw2ICYjNDM7MjU2LDggQEAKICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU4JCQlCSVQoMCkKICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMCQlHRU5NQVNLKDYsIDQpCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0sJCVpMX1JFRyg5LCAweDM2LCAyKQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMxNiw2ICYjNDM7MzUzLDI1IEBACiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfRVNZTkNfV0lEVEgJCVpMX1JFRygxNCwgMHgxOCwgNCkKICNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9DT01QCQlaTF9SRUcoMTQsIDB4MjAsIDQpCiAKJiM0MzsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKJiM0MzsgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwCiYjNDM7ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwJCVpMX1JFRyg5LCAweDM4LCAxKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMCQlHRU5NQVNLKDYsIDQpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQCUJJVCgzKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUAkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FCTAKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVQJMQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFECTIKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUJMwomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUgkJWkxfUkVHKDksIDB4MzksIDEpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSwkJWkxfUkVHKDksIDB4M2EsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQQkJWkxfUkVHKDksIDB4M2MsIDQpCiYjNDM7CiAvKgogICogUmVnaXN0ZXIgUGFnZSAyNTUgLSBIVyByZWdpc3RlcnMgYWNjZXNzCiAgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMzcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhpbmVzcyBvZiBGdXp6aW5nIHRoZSBBenVyaXRlIERQTEwgRHJpdmVyKioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0b3VjaGluZyB0aGUgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AgZGlyZWN0b3J5LCB3aGljaCBpbmRpY2F0ZXMgUFRQIGNsb2NrIHN1cHBvcnQgaXMgYmVpbmcgYWRkZWQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBUaGlzIGxvb2tzIGludGVyZXN0aW5nOyBpdCBpbnZvbHZlcyBuZXcgZmVhdHVyZXMgYW5kIGxpa2VseSBuZXcgY29kZSBwYXRocy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGRlcGVuZGVuY3ksIHJlZ2lzdGVycyBhIFBUUCBjbG9jaywgYW5kIGltcGxlbWVudHMgdGhlIG5lY2Vzc2FyeSBQVFAgY2xvY2sgb3BlcmF0aW9ucyDigJMgYGdldHRpbWV4NjRgLCBgc2V0dGltZTY0YCwgYWRqdXN0bWVudCBmdW5jdGlvbnMgYW5kIGVuYWJsaW5nL2Rpc2FibGluZyBvZiB0aGUgY2xvY2suIFRoaXMgbWVhbnMgaXQgY3JlYXRlcyBgL2Rldi9wdHBYYCBkZXZpY2VzIHRoYXQgY2FuIGJlIGZ1enplZCB0aHJvdWdoIGlvY3RscywgcGx1cywgdGhlIGRyaXZlciBleHBvc2VzIGEgRFBMTCBkZXZpY2UgdmlhIG5ldGxpbmsuIFRoZSBkcml2ZXIgdXNlcyBJMkMgYW5kIFNQSSwgd2hpY2ggbWFrZXMgbWUgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGRpZmZpY3VsdHkgb2YgaW5zdGFudGlhdGlvbiBpbiBhIGZ1enppbmcgY29udGV4dC4KCkNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZT8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBrbm93IHN5emthbGxlciBjYW4gaGl0IFBUUCBpb2N0bHMgYW5kIERQTEwgbmV0bGluaywgd2hpY2ggaXMgcHJvbWlzaW5nLiBCdXQgSTJDL1NQSSBkZXZpY2VzIGFyZSB1c3VhbGx5IGEgcGFpbi4gVHlwaWNhbGx5LCB0aGV5IHJlcXVpcmUgZGV2aWNlIHRyZWUsIEFDUEksIG9yIHNwZWNpZmljIGJvYXJkIGNvZGUgdG8gYmUgaW5pdGlhbGl6ZWQuIENhbiBzeXprYWxsZXIgaW5zdGFudGlhdGUgdGhlIGB6bDMwNzN4YCBkZXZpY2Ugc29tZWhvdz8gRG9lcyBpdCBoYXZlIGEgbWVjaGFuaXNtIGxpa2UgYGkyY19uZXdfY2xpZW50X2RldmljZWAgb3IgYW55dGhpbmcgbmV0bGluay9zeXNmcy1yZWxhdGVkIGZvciBjcmVhdGluZyBhbiBJMkMgb3IgU1BJIGNsaWVudD8gTG9va2luZyBhdCB0aGUgdG9vbGluZywgaXQgc2VlbXMgbGlrZSB0aGVyZSBpcyBubyBzcGVjaWZpYyBgc3l6X2kyY19zZXR1cGAgZXF1aXZhbGVudC4KCkJ1dCB3YWl0LCB0aGUgZGlyZWN0aXZlIHdlIGFyZSB3b3JraW5nIHdpdGggaXMgYWJvdXQgKnJlYWNoYWJsZSogY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgY3JpdGljYWwgcG9pbnQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aGVyZSB3ZSBjYW4gZW5hYmxlIHRoZSBjb25maWcsIHJpZ2h0PyBTbyBldmVuIGlmIGl0JiMzOTtzIGFuIEkyQy9TUEkgZHJpdmVyLCBpZiBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBpdCYjMzk7cyBvZnRlbiB3b3J0aCBmdXp6aW5nIGlmIHdlIGNhbiBlbmFibGUgdGhlIGNvbmZpZyBvcHRpb24uIFRoZSBtYWluIGNhdmVhdCBpcyB2aXJ0dWFsaXphdGlvbi4gQ2FuIHdlIHJlYWNoIHRoaXMgY29kZSBwYXRoIGluIEdDRSBvciBRRU1VPyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzICpub3QqIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdGhvc2UgZW52aXJvbm1lbnRzLiBXZSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYHpsMzA3M3hgIGRldmljZSBpcyBwcm9iZWQgdG8gc2VlIGlmIGl0JiMzOTtzIHJlYWNoYWJsZS4gV2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiBpdCBkZXBlbmRzIG9uIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiB0aGF0IGlzIHVuYXZhaWxhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgbm90LCB0aGUgY2hhbmdlIGlzIFdvcnRoRnV6emluZz10cnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3hfaTJjX3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTEwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6MTE6c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMTIte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTQ4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB6bDMwNzN4X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTItXHR9LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTM6XHQucHJvYmUgPSB6bDMwNzN4X2kyY19wcm9iZSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU0LVx0LmlkX3RhYmxlID0gemwzMDczeF9pMmNfaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXBwcm9hY2ggdG8gUHJvYmluZyB0aGUgSTJDIERldmljZSoqCgpPa2F5LCBsZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBNeSBnb2FsIGlzIHRvIHNlZSBpZiBJIGNhbiB0cmlnZ2VyIHRoaXMgcHJvYmUgc29tZWhvdy4gTXkgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZXNlIHR5cGVzIG9mIGludmVzdGlnYXRpb25zIHdpdGggSTJDIGRldmljZXMgaXMgdGhlIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC9uZXdfZGV2aWNlYCBpbnRlcmZhY2UuIElmIHN5emthbGxlciBoYXMgdGhlIG5lY2Vzc2FyeSBhY2Nlc3MgdG8gc3lzZnMg4oCTIHdoaWNoLCBrbm93aW5nIGl0LCBpdCBsaWtlbHkgZG9lcyDigJMgdGhlbiBJIGNhbiBwcm9iYWJseSB3cml0ZSB0byBgbmV3X2RldmljZWAgdG8gZWZmZWN0aXZlbHkgaW5zdGFudGlhdGUgdGhlIEkyQyBkZXZpY2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBob29rIHRvIHRyaWdnZXIgdGhlIHByb2JlIGFuZCBvYnNlcnZlIGl0cyBiZWhhdmlvci4gTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGlmIHRoZSBgemwzMDczeGAgZGV2aWNlIGhhcyBhbiBJMkMgSUQgdGFibGUuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bDMwNzN4X2kyY19pZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz0xMT1zdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoyODpzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI5LVx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzFcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0zNS19O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6MzY6TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHpsMzA3M3hfaTJjX2lkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTM3LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTQ4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB6bDMwNzN4X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTMtXHQucHJvYmUgPSB6bDMwNzN4X2kyY19wcm9iZSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjU0Olx0LmlkX3RhYmxlID0gemwzMDczeF9pMmNfaWQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjMyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHpsMzA3MzFgIERldmljZSBJbnN0YW50aWF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gdGhlIGRldmljZSBuYW1lIGlzIGRlZmluaXRlbHkgJiMzNDt6bDMwNzMxJiMzNDsuIFN5emthbGxlciBjYW4gd3JpdGUgJiMzNDt6bDMwNzMxIDB4MjAmIzM0OyB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAgdG8gdHJpZ2dlciBpdHMgY3JlYXRpb24uIFN0YW5kYXJkIHByb2NlZHVyZSwgdW5kZXJzdG9vZC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGluc3RhbnRpYXRpb24gKnJlcXVpcmUqIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHRvIHN1Y2NlZWQ/IEkgbmVlZCB0byBiZSBzdXJlIHRoZSBwcm9iZSBkb2VzbiYjMzk7dCByZWx5IG9uIHNvbWUgdW5kb2N1bWVudGVkIHJlZ2lzdGVyIG9yIGV4dGVybmFsIHNpZ25hbC4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgcHJvYmUgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgemwzMDczeF9pMmNfcHJvYmVgIGFuZCBgemwzMDczeF9kZXZfcHJvYmVgLiBUaG9zZSBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBoYXJkd2FyZSBwcmVjb25kaXRpb25zIGZvciB0aGUgYHpsMzA3MzFgIHRvIGluaXRpYWxpemUgY29ycmVjdGx5LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBsb2dpYyByZXNpZGVzLiBVbmRlcnN0YW5kaW5nIHRob3NlIHJvdXRpbmVzIHdpbGwgZGV0ZXJtaW5lIGlmIHRoaXMgaW5zdGFudGlhdGlvbiBpcyB0cnVseSBjbGVhbiwgb3IgaWYgdGhlcmUgYXJlIHBvdGVudGlhbCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMTpcdHN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiAgMTI6XHR7XG4gIDEzOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZjbGllbnQtXHUwMDNlZGV2O1xuICAxNDpcdFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldjtcbiAgMTU6XHRcbiAgMTY6XHRcdHpsZGV2ID0gemwzMDczeF9kZXZtX2FsbG9jKGRldik7XG4gIDE3Olx0XHRpZiAoSVNfRVJSKHpsZGV2KSlcbiAgMTg6XHRcdFx0cmV0dXJuIFBUUl9FUlIoemxkZXYpO1xuICAxOTpcdFxuICAyMDpcdFx0emxkZXYtXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCBcdTAwMjZ6bDMwNzN4X3JlZ21hcF9jb25maWcpO1xuICAyMTpcdFx0aWYgKElTX0VSUih6bGRldi1cdTAwM2VyZWdtYXApKVxuICAyMjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoemxkZXYtXHUwMDNlcmVnbWFwKSxcbiAgMjM6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXFxuXCYjMzQ7KTtcbiAgMjQ6XHRcbiAgMjU6XHRcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XG4gIDI2Olx0fVxuICAyNzpcdFxuICAyODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB6bDMwNzN4X2kyY19pZFtdID0ge1xuICAyOTpcdFx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzFcJiMzNDsgfSxcbiAgMzA6XHRcdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzMyXCYjMzQ7IH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5NzAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSB6bDMwNzN4IERyaXZlcioqCgpSaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhpcyBzcGVjaWZpYyBEUExMLCBhbmQgdGhhdCYjMzk7cyB0aGUgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBUaGlzIGlzIHByb2JhYmx5IGluIHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jYCBmaWxlLCB3aGVyZSB0aGUgY29yZSBkZXZpY2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcHJvYmUgZnVuY3Rpb24gYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkcml2ZXIgaXMgZmlyc3Qgc2V0dGluZyB0aGluZ3MgdXAgd2hlbiB0aGUgaGFyZHdhcmUgaXMgZGV0ZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSByZWdpc3RlciBtYXAgYW5kIGlmIHRoZXJlIGFueSBvYnZpb3VzIGdvdGNoYXMgaW4gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLWRvY3VtZW50ZWQsIGJ1dCBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgaXMgbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgdGhlIGxvdyBsZXZlbCBkZXRhaWxzLCBhbmQgZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBjbG9jayBjb25maWd1cmF0aW9ucywgb3IgZXJyYXRhIGhhbmRsaW5nIHRoYXQgY291bGQgYml0ZSBtZSBsYXRlciBvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB6bDMwNzN4X2Rldl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9OTI1PXpsMzA3M3hfZGV2bV9kcGxsX2luaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTc5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk4MDppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODEte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaD0xMDQ9c3RydWN0IHpsMzA3M3hfZGV2ICp6bDMwNzN4X2Rldm1fYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaDoxMDU6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTEwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MzMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYHpsMzA3M3hfZGV2X3Byb2JlYCwgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipBbmFseXppbmcgdGhlIGB6bDMwNzN4X2Rldl9wcm9iZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHdlJiMzOTtyZSBsb29raW5nIGF0IGB6bDMwNzN4X2Rldl9wcm9iZWAuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGluIHRoZSByZWFsbSBvZiBkZXZpY2UgcHJvYmluZywgYW5kIGl0JiMzOTtzIHNwZWNpZmljYWxseSBmb3IgYSBgemwzMDczeGAgZGV2aWNlLCB3aGljaCBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgb2YuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBhdHRlbXB0cyB0byBpZGVudGlmeSwgaW5pdGlhbGl6ZSwgYW5kIHJlZ2lzdGVyIGEgbmV3IGB6bDMwNzN4YCBkZXZpY2UgdGhhdCYjMzk7cyBiZWVuIHBsdWdnZWQgaW4gb3IgaXMgb3RoZXJ3aXNlIGJlY29taW5nIGF2YWlsYWJsZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uKio6IEhvdyBhcmUgdGhleSBnZXR0aW5nIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzLCBsaWtlIG1lbW9yeSByZWdpb25zLCBJUlFzLCBJMkMgb3IgU1BJIGJ1c2VzLCBldGMuPyBJIHdhbnQgdG8gc2VlIGlmIHRoZXkgYXJlIHVzaW5nIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBtZWNoYW5pc21zIG9yIGlmIHRoZXJlJiMzOTtzIGEgbW9yZSBnZW5lcmljIGFwcHJvYWNoLiBBbnkgdW51c3VhbCBhcHByb2FjaGVzIGhlcmUgd291bGQgYmUgaW50ZXJlc3RpbmcuCiogICAqKkRldmljZSBpZGVudGlmaWNhdGlvbioqOiBIb3cgaXMgdGhlIGRyaXZlciB2ZXJpZnlpbmcgdGhlIGRldmljZSBpcyAqYWN0dWFsbHkqIGEgYHpsMzA3M3hgPyBBcmUgdGhleSBjaGVja2luZyBhIGRldmljZSBJRCByZWdpc3Rlcj8gVmVuZG9yLXNwZWNpZmljIG1hZ2ljPyBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBhcHByb2FjaCBhbmQgYW55IHBvdGVudGlhbCBmb3Igcm9idXN0bmVzcyBpc3N1ZXMuCiogICAqKkluaXRpYWxpemF0aW9uIHNlcXVlbmNlKio6IFdoYXQgc3RlcHMgYXJlIHRha2VuIHRvIGdldCB0aGUgZGV2aWNlIHJlYWR5IGZvciB1c2U/IFRoaXMgY291bGQgaW5jbHVkZSBwb3dlci11cCBzZXF1ZW5jZXMsIHJlZ2lzdGVyIHdyaXRlcywgY2xvY2sgY29uZmlndXJhdGlvbiwgYW5kIHBvc3NpYmx5IGZpcm13YXJlIGxvYWRpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIHRpbWluZyBjb25zdHJhaW50cy4KKiAgICoqRHJpdmVyIHJlZ2lzdHJhdGlvbioqOiBPbmNlIHRoZSBkZXZpY2UgaXMgcmVhZHksIEkmIzM5O2xsIGJlIHdhdGNoaW5nIHRvIHNlZSBob3cgdGhlIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIHdpdGggdGhlIGtlcm5lbC4gSXMgaXQgdXNpbmcgdGhlIHN0YW5kYXJkIGRldmljZSBkcml2ZXIgbW9kZWw/IEFyZSB0aGVyZSBhbnkgY3VzdG9tIGNhbGxiYWNrcyBvciBzdHJ1Y3R1cmVzPyBBbnkgY3VzdG9tIGRhdGEgc3RydWN0dXJlcyBvciBpbnRlcmFjdGlvbnMgd2lsbCBiZSBvZiBpbnRlcmVzdC4KKiAgICoqRXJyb3IgaGFuZGxpbmcqKjogV2hlcmUgYXJlIHRoZSBlcnJvciBjaGVja3M/IFdoYXQgaGFwcGVucyBpZiBhbnkgb2YgdGhlIGNyaXRpY2FsIHN0ZXBzIGZhaWw/IEkgd2FudCB0byBhc3Nlc3MgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHByb2JlIGZ1bmN0aW9uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHdlYWtuZXNzZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRob3JvdWdoIGVycm9yIGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBoYXJkd2FyZS4KKiAgICoqQ29uY3VycmVuY3kqKjogSSYjMzk7bGwgYWxzbyBnbGFuY2UgdG8gc2VlIGlmIGFueXRoaW5nIGhlcmUgaXMgc3VzY2VwdGlibGUgdG8gY29uY3VycmVuY3kgaXNzdWVzIGFzIEkga25vdyBoYXJkd2FyZSBwcm9iaW5nIGNhbiBvZnRlbiBoYXZlIHNoYXJlZCByZXNvdXJjZXMuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGdhdGV3YXkuIEl0IHNob3VsZCBiZSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgdGhlIGRldmljZSB3ZSYjMzk7cmUgZXhwZWN0aW5nLCBhbmQgdGhlbiBnZXR0aW5nIGl0IHJlYWR5IHRvIGJlIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgZG9uZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiA5ODE6XHR7XG4gOTgyOlx0XHR1MTYgaWQsIHJldmlzaW9uLCBmd192ZXI7XG4gOTgzOlx0XHR1bnNpZ25lZCBpbnQgaTtcbiA5ODQ6XHRcdHUzMiBjZmdfdmVyO1xuIDk4NTpcdFx0aW50IHJjO1xuIDk4NjpcdFxuIDk4NzpcdFx0LyogUmVhZCBjaGlwIElEICovXG4gOTg4Olx0XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19JRCwgXHUwMDI2aWQpO1xuIDk4OTpcdFx0aWYgKHJjKVxuIDk5MDpcdFx0XHRyZXR1cm4gcmM7XG4gOTkxOlx0XG4gOTkyOlx0XHQvKiBEZXRlY3QgY2hpcCB2YXJpYW50ICovXG4gOTkzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpJiM0MzsmIzQzOykge1xuIDk5NDpcdFx0XHRpZiAoemwzMDczeF9jaGlwX2lkc1tpXS5pZCA9PSBpZClcbiA5OTU6XHRcdFx0XHRicmVhaztcbiA5OTY6XHRcdH1cbiA5OTc6XHRcbiA5OTg6XHRcdGlmIChpID09IEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcykpXG4gOTk5Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgLUVOT0RFVixcbjEwMDA6XHRcdFx0XHRcdCAgICAgXCYjMzQ7VW5rbm93biBjaGlwIElEOiAweCUwNHhcXG5cJiMzNDssIGlkKTtcbjEwMDE6XHRcbjEwMDI6XHRcdHpsZGV2LVx1MDAzZWluZm8gPSBcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xuMTAwMzpcdFxuMTAwNDpcdFx0LyogUmVhZCByZXZpc2lvbiwgZmlybXdhcmUgdmVyc2lvbiBhbmQgY3VzdG9tIGNvbmZpZyB2ZXJzaW9uICovXG4xMDA1Olx0XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRVZJU0lPTiwgXHUwMDI2cmV2aXNpb24pO1xuMTAwNjpcdFx0aWYgKHJjKVxuMTAwNzpcdFx0XHRyZXR1cm4gcmM7XG4xMDA4Olx0XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFx1MDAyNmZ3X3Zlcik7XG4xMDA5Olx0XHRpZiAocmMpXG4xMDEwOlx0XHRcdHJldHVybiByYztcbjEwMTE6XHRcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0NVU1RPTV9DT05GSUdfVkVSLCBcdTAwMjZjZmdfdmVyKTtcbjEwMTI6XHRcdGlmIChyYylcbjEwMTM6XHRcdFx0cmV0dXJuIHJjO1xuMTAxNDpcdFxuMTAxNTpcdFx0ZGV2X2RiZyh6bGRldi1cdTAwM2VkZXYsIFwmIzM0O0NoaXBJRCglWCksIENoaXBSZXYoJVgpLCBGd1ZlcigldSlcXG5cJiMzNDssIGlkLFxuMTAxNjpcdFx0XHRyZXZpc2lvbiwgZndfdmVyKTtcbjEwMTc6XHRcdGRldl9kYmcoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtDdXN0b20gY29uZmlnIHZlcnNpb246ICVsdS4lbHUuJWx1LiVsdVxcblwmIzM0OyxcbjEwMTg6XHRcdFx0RklFTERfR0VUKEdFTk1BU0soMzEsIDI0KSwgY2ZnX3ZlciksXG4xMDE5Olx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDIzLCAxNiksIGNmZ192ZXIpLFxuMTAyMDpcdFx0XHRGSUVMRF9HRVQoR0VOTUFTSygxNSwgOCksIGNmZ192ZXIpLFxuMTAyMTpcdFx0XHRGSUVMRF9HRVQoR0VOTUFTSyg3LCAwKSwgY2ZnX3ZlcikpO1xuMTAyMjpcdFxuMTAyMzpcdFx0LyogR2VuZXJhdGUgcmFuZG9tIGNsb2NrIElEIGFzIHRoZSBkZXZpY2UgaGFzIG5vdCBzdWNoIHByb3BlcnR5IHRoYXRcbjEwMjQ6XHRcdCAqIGNvdWxkIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4gQSB1c2VyIGNhbiBsYXRlciBjaGFuZ2UgdGhpcyB2YWx1ZVxuMTAyNTpcdFx0ICogdXNpbmcgZGV2bGluay5cbjEwMjY6XHRcdCAqL1xuMTAyNzpcdFx0emxkZXYtXHUwMDNlY2xvY2tfaWQgPSBnZXRfcmFuZG9tX3U2NCgpO1xuMTAyODpcdFxuMTAyOTpcdFx0LyogRGVmYXVsdCBwaGFzZSBvZmZzZXQgYXZlcmFnaW5nIGZhY3RvciAqL1xuMTAzMDpcdFx0emxkZXYtXHUwMDNlcGhhc2VfYXZnX2ZhY3RvciA9IDI7XG4xMDMxOlx0XG4xMDMyOlx0XHQvKiBJbml0aWFsaXplIG11dGV4IGZvciBvcGVyYXRpb25zIHdoZXJlIG11bHRpcGxlIHJlYWRzLCB3cml0ZXNcbjEwMzM6XHRcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxuMTAzNDpcdFx0ICovXG4xMDM1Olx0XHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4xMDM2Olx0XHRpZiAocmMpXG4xMDM3Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4xMDM4Olx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbjEwMzk6XHRcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbjEwNDA6XHRcdGlmIChyYylcbjEwNDE6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwNDI6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuMTA0MzpcdFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4xMDQ0Olx0XHRpZiAocmMpXG4xMDQ1Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4xMDQ2Olx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbjEwNDc6XHRcbjEwNDg6XHRcdC8qIFJlZ2lzdGVyIERQTEwgY2hhbm5lbHMgKi9cbjEwNDk6XHRcdHJjID0gemwzMDczeF9kZXZtX2RwbGxfaW5pdCh6bGRldik7XG4xMDUwOlx0XHRpZiAocmMpXG4xMDUxOlx0XHRcdHJldHVybiByYztcbjEwNTI6XHRcbjEwNTM6XHRcdC8qIFJlZ2lzdGVyIHRoZSBkZXZsaW5rIGluc3RhbmNlIGFuZCBwYXJhbWV0ZXJzICovXG4xMDU0Olx0XHRyYyA9IHpsMzA3M3hfZGV2bGlua19yZWdpc3Rlcih6bGRldik7XG4xMDU1Olx0XHRpZiAocmMpXG4xMDU2Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4xMDU3Olx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBkZXZsaW5rIGluc3RhbmNlXFxuXCYjMzQ7KTtcbjEwNTg6XHRcbjEwNTk6XHRcdHJldHVybiAwO1xuMTA2MDpcdH1cbjEwNjE6XHRFWFBPUlRfU1lNQk9MX05TX0dQTCh6bDMwNzN4X2Rldl9wcm9iZSwgXCYjMzQ7WkwzMDczWFwmIzM0Oyk7XG4xMDYyOlx0XG4xMDYzOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtJdmFuIFZlY2VyYSBcdTAwM2NpdmVjZXJhQHJlZGhhdC5jb21cdTAwM2VcJiMzNDspO1xuMTA2NDpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNaWNyb2NoaXAgWkwzMDczeCBjb3JlIGRyaXZlclwmIzM0Oyk7XG4xMDY1Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2NTcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgUHJvYmUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwcm9iZSBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgZ3JhYmJpbmcgdGhlIGBaTF9SRUdfSURgIGFuZCBjb21wYXJpbmcgaXQgdG8gdGhlIGtub3duIGB6bDMwNzN4X2NoaXBfaWRzYC4gVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCBpcyB0aGF0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSB0aGUgb25lIHN5emthbGxlciB1c2VzLCB0aGVzZSBJMkMgcmVhZHMgYXJlIGhpZ2hseSBsaWtlbHkgdG8gZmFpbCBvciByZXR1cm4gZ2FyYmFnZS4gVGhhdCBtZWFucyBhIGAtRU5PREVWYCBlcnJvciwgYW5kIHRoZSBwcm9iZSBqdXN0IGRpZXMuCgpXYWl0IGEgc2Vjb25kLCBkb2VzbuKAmXQgc3l6a2FsbGVyIGhhdmUgKnNvbWUqIG1lY2hhbmlzbSB0byBtb2NrIEkyQyBkZXZpY2VzPyBJIGtub3cgaXQgbW9ja3Mgb3RoZXIgaGFyZHdhcmUgaW50ZXJmYWNlcy4gTm8sIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBoYXZlIGEgZ2VuZXJpYyBJMkMgbW9jaywgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZSBjb21tZW50cyBpbiB0aGUgY29kZSBhcmUgcG9pbnRpbmcgbWUgdG93YXJkcyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGNhbGxpbmcgb3V0IHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLgoKU28gdGhlIHByb2JlICp3aWxsKiBmYWlsIGJlY2F1c2UgaXQmIzM5O3MgZXhwZWN0aW5nIGEgc3BlY2lmaWMgY2hpcCBJRCB0byBjb21lIGJhY2sgZnJvbSB0aGUgSTJDIGJ1cy4gQnV0LCBob2xkIG9uIGEgbWludXRlISBTeXprYWxsZXIgaGFzIGFsbCB0aGVzZSBkaWZmZXJlbnQgc2ltdWxhdG9ycyDigJMgYHZoY2lgLCBgbWFjODAyMTFfaHdzaW1gLCBgdmttc2AsIGB2Y2FuYCwgYHVpbnB1dGAsIGBzbmQtZHVtbXlgLCBgbmV0ZGV2c2ltYCwgYW5kIG1vcmUuIERvIHRoZXkgaGF2ZSBhbiBJMkMgZXF1aXZhbGVudD8KCkFoYSEgVGhlcmUgKmlzKiBgaTJjLXN0dWJgISBJIGNhbiB1c2UgaXQgdG8gbW9jayBJMkMgZGV2aWNlcyEgTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGBpMmMtc3R1YmAgY2FuIGFjdHVhbGx5IHNpbXVsYXRlIHRoaXMgc3BlY2lmaWMgZGV2aWNlLgoKT2theSwgc28gYGkyYy1zdHViYCBsZXRzIHlvdSBzcGVjaWZ5IGNoaXAgYWRkcmVzc2VzIGFuZCBpdOKAmWxsIGFjdCBhcyBhIGR1bW15IEkyQyBkZXZpY2UgdGhhdCBzdG9yZXMgYW5kIHJldHVybnMgd2hhdGV2ZXIgYnl0ZXMgYXJlIHdyaXR0ZW4gdG8gaXQuIEJ1dOKApiB3YWl0IGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjaGVjayBob3cgYHpsMzA3M3hgIGludGVyYWN0cyB3aXRoIHRoZSByZWdpc3RlcnMsIGJlY2F1c2UgaWYgaXQgdXNlcyBgcmVnbWFwYCBpdCBjb3VsZCBiZSByZWFkaW5nIDE2LWJpdCBvciAzMi1iaXQgcmVnaXN0ZXJzLiBJIG5lZWQgdG8gY2hlY2sgYHpsMzA3M3hfcmVhZF91MTZgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgemwzMDczeF9yZWFkX3UxNiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9MTc4PWludCB6bDMwNzN4X3dyaXRlX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4IHZhbClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTkyLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjE5MzppbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xOTQte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaD0xNDc9aW50IHpsMzA3M3hfcmVhZF91OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1OCAqdmFsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaDoxNDg6aW50IHpsMzA3M3hfcmVhZF91MTYoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTE2ICp2YWwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTE0OS1pbnQgemwzMDczeF9yZWFkX3UzMihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgKnZhbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODg2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIHpsMzA3M3hfcmVhZF91MTYgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHpsMzA3M3hfcmVhZF91MTZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG93LWxldmVsIGJlaGF2aW9yLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBkaXNzZWN0IHRoZSBjcml0aWNhbCBwYXRoOyB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb24gaXMgdXNpbmcgdGhlIGhhcmR3YXJlLiBJIGtub3cgdGhlc2UgZGV2aWNlcyBwcmV0dHkgd2VsbCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVnaXN0ZXJzIGFuZCB0aGUgdW5kZXJseWluZyBidXMgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMg4oCTIHByb2JhYmx5IEkyQywgU1BJLCBvciBwb3RlbnRpYWxseSBzb21lIHByb3ByaWV0YXJ5IGJ1cy4gVGhlIGtleSBpcyBpbiBmaWd1cmluZyBvdXQgaG93IHRoZSAxNi1iaXQgdmFsdWUgaXMgYmVpbmcgZmV0Y2hlZC4gQXJlIHRoZXkgdXNpbmcgYSByZWFkIHRyYW5zYWN0aW9uIHdpdGggYSByZWdpc3RlciBhZGRyZXNzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIGRhdGEgc2hlZXQgbGF0ZW5jeSBhbmQgdGltaW5nIHJlcXVpcmVtZW50cz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXRvbWljaXR5IG9yIGNvbmN1cnJlbmN5PyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IGhvdyB0aGUgYWRkcmVzcyBpcyB0cmFuc2xhdGVkIHRvIGFuIEkyQyBvciBTUEkgd3JpdGUuIFRoZW4gZm9sbG93IHRoZSB0cmFuc2FjdGlvbiB0byB0aGUgcmVhZCBzaWRlIHRvIGNvbmZpcm0uIEFyZSB0aGVyZSBhbnkgZXJyb3IgaGFuZGxpbmcgcm91dGluZXM/IFRob3NlIGFyZSBpbXBvcnRhbnQsIHRvbywgZm9yIHVuZGVyc3RhbmRpbmcgcm9idXN0bmVzcy4gVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBwZXJmb3JtcyBhIHNpbXBsZSByZWFkIG9mIGEgMTYtYml0IHZhbHVlIGZyb20gYSBzcGVjaWZpYyBhZGRyZXNzIG9yIGlmIGl0JiMzOTtzIG1vcmUgY29tcGxleCB0aGFuIHRoYXQuIEFyZSB0aGVyZSBhbnkgaGFyZHdhcmUgb3IgYnVzIGNvbnN0cmFpbnRzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkzOlx0aW50IHpsMzA3M3hfcmVhZF91MTYoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTE2ICp2YWwpXG4gMTk0Olx0e1xuIDE5NTpcdFx0aW50IHJjO1xuIDE5NjpcdFxuIDE5NzpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfcmVnKHpsZGV2LCByZWcsIHZhbCwgc2l6ZW9mKCp2YWwpKTtcbiAxOTg6XHRcdGlmICghcmMpXG4gMTk5Olx0XHRcdGJlMTZfdG9fY3B1cyh2YWwpO1xuIDIwMDpcdFxuIDIwMTpcdFx0cmV0dXJuIHJjO1xuIDIwMjpcdH1cbiAyMDM6XHRcbiAyMDQ6XHQvKipcbiAyMDU6XHQgKiB6bDMwNzN4X3dyaXRlX3UxNiAtIHdyaXRlIHZhbHVlIHRvIDE2Yml0IHJlZ2lzdGVyXG4gMjA2Olx0ICogQHpsZGV2OiB6bDMwNzN4IGRldmljZSBwb2ludGVyXG4gMjA3Olx0ICogQHJlZzogcmVnaXN0ZXIgdG8gd3JpdGUgdG9cbiAyMDg6XHQgKiBAdmFsOiB2YWx1ZSB0byB3cml0ZVxuIDIwOTpcdCAqXG4gMjEwOlx0ICogV3JpdGVzIHZhbHVlIGludG8gZ2l2ZW4gMTZiaXQgcmVnaXN0ZXIuXG4gMjExOlx0ICpcbiAyMTI6XHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NDUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSByZXF1ZXN0ZWQsIHNwZWFraW5nIGFzIGlmIHRoZXNlIGFyZSBteSBvd24gdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgQ29kZSAtIHpsMzA3M3hfcmVhZF9yZWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGNvZGUmIzM5O3MgdXNpbmcgYHpsMzA3M3hfcmVhZF9yZWdgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW50ZXJhY3Rpbmcgd2l0aCBhIFpMMzA3M3ggZGV2aWNlLCBsaWtlbHkgYSB0aW1pbmcgY2hpcCBvciBzaW1pbGFyLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lLCBgX3JlYWRfcmVnYCwgc3Ryb25nbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIHJlYWRpbmcgYSByZWdpc3RlciBmcm9tIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHJlZ2lzdGVyIG1hcCBvZiB0aGUgWkwzMDczeC4gSSYjMzk7bGwgbmVlZCB0aGF0IHRvIHVuZGVyc3RhbmQgKndoYXQqIGRhdGEgaXMgYmVpbmcgcmVxdWVzdGVkIGFuZCB3aHkuIEtub3dpbmcgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIGFkZHJlc3NlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlJiMzOTtzIGludGVudC4gSXMgaXQgcmVhZGluZyBzdGF0dXMgZmxhZ3M/IENvbmZpZ3VyYXRpb24gdmFsdWVzPyBPciBwZXJoYXBzIGRpYWdub3N0aWMgaW5mb3JtYXRpb24/IFRoZSBjb250ZXh0IG9mIHdoZXJlIHRoaXMgYHpsMzA3M3hfcmVhZF9yZWdgIGNhbGwgYXBwZWFycyBpbiB0aGUgbGFyZ2VyIGNvZGUgc3RydWN0dXJlIGlzIHZpdGFsIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgd2UgaW5pdGlhbGl6aW5nIHRoZSBkZXZpY2UsIHBvbGxpbmcgZm9yIGFuIGV2ZW50LCBvciByZXNwb25kaW5nIHRvIGFuIGludGVycnVwdD8gTm93IEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNvbW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XHQvKiBNYXAgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgdG8gdmlydHVhbCByYW5nZSAqL1xuIDE0MTpcdFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSAmIzQzOyBaTF9SQU5HRV9PRkZTRVQ7XG4gMTQyOlx0XG4gMTQzOlx0XHRyYyA9IHJlZ21hcF9idWxrX3dyaXRlKHpsZGV2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsIHNpemUpO1xuIDE0NDpcdFx0aWYgKHJjKSB7XG4gMTQ1Olx0XHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgcmVnIDB4JTA0eDogJXBlXFxuXCYjMzQ7LCByZWcsXG4gMTQ2Olx0XHRcdFx0RVJSX1BUUihyYykpO1xuIDE0NzpcdFx0XHRyZXR1cm4gcmM7XG4gMTQ4Olx0XHR9XG4gMTQ5Olx0XG4gMTUwOlx0XHRyZXR1cm4gMDtcbiAxNTE6XHR9XG4gMTUyOlx0XG4gMTUzOlx0LyoqXG4gMTU0Olx0ICogemwzMDczeF9yZWFkX3U4IC0gcmVhZCB2YWx1ZSBmcm9tIDhiaXQgcmVnaXN0ZXJcbiAxNTU6XHQgKiBAemxkZXY6IHpsMzA3M3ggZGV2aWNlIHBvaW50ZXJcbiAxNTY6XHQgKiBAcmVnOiByZWdpc3RlciB0byB3cml0ZSB0b1xuIDE1NzpcdCAqIEB2YWw6IHZhbHVlIHRvIHdyaXRlXG4gMTU4Olx0ICpcbiAxNTk6XHQgKiBSZWFkcyB2YWx1ZSBmcm9tIGdpdmVuIDhiaXQgcmVnaXN0ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTc0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb2RlIEZsb3cqKgoKSG1tLCBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljLCBhbmQgSSBzZWUgYSBjYWxsIHRvIGB6bDMwNzN4X3JlYWRfcmVnYC4gT2theSwgbm93IEkmIzM5O3ZlIG5vdGljZWQgaXQmIzM5O3MgcG9zaXRpb25lZCBhYm92ZSB0aGUgY3VycmVudCBsaW5lIEkmIzM5O20gZXhhbWluaW5nLiBJJiMzOTttIHRha2luZyBhIG1vbWVudCB0byByZWdpc3RlciB0aGF0LCBhbmQgaG93IHRoYXQgcHJlY2VkaW5nIGZ1bmN0aW9uIHJlbGF0ZXMgdG8gdGhlIHN1YnNlcXVlbnQgc3RlcHMuIFRoaXMgcGxhY2VtZW50IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGRhdGEgZGVwZW5kZW5jaWVzIG9yIHBlcmhhcHMgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCByZWxhdGl2ZSBvcmRlcmluZyBhcyBJIGV4YW1pbmUgc3Vic2VxdWVudCBsb2dpYywgYW5kIHVuZGVyc3RhbmQgaG93IHZhbHVlcyByZWFkIGZyb20gcmVnaXN0ZXJzIGJ5IGB6bDMwNzN4X3JlYWRfcmVnYCBhcmUgdGhlbiB1c2VkLiBJdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiB0aGF0IGRpcmVjdHMgbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdGlmIChaTF9SRUdfU0laRShyZWcpICE9IHNpemUpIHtcbiAxMDE6XHRcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwmIzM0O0ludmFsaWQgc2l6ZSAlenUgZm9yIHJlZyAweCUwNGx4XFxuXCYjMzQ7LFxuIDEwMjpcdFx0XHRcdHNpemUsIFpMX1JFR19BRERSKHJlZykpO1xuIDEwMzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTA0Olx0XHR9XG4gMTA1Olx0XG4gMTA2Olx0XHRyZXR1cm4gdHJ1ZTtcbiAxMDc6XHR9XG4gMTA4Olx0XG4gMTA5Olx0c3RhdGljIGludFxuIDExMDpcdHpsMzA3M3hfcmVhZF9yZWcoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdm9pZCAqdmFsLFxuIDExMTpcdFx0XHQgc2l6ZV90IHNpemUpXG4gMTEyOlx0e1xuIDExMzpcdFx0aW50IHJjO1xuIDExNDpcdFxuIDExNTpcdFx0aWYgKCF6bDMwNzN4X2NoZWNrX3JlZyh6bGRldiwgcmVnLCBzaXplKSlcbiAxMTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTE3Olx0XG4gMTE4Olx0XHQvKiBNYXAgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgdG8gdmlydHVhbCByYW5nZSAqL1xuIDExOTpcdFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSAmIzQzOyBaTF9SQU5HRV9PRkZTRVQ7XG4gMTIwOlx0XG4gMTIxOlx0XHRyYyA9IHJlZ21hcF9idWxrX3JlYWQoemxkZXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCwgc2l6ZSk7XG4gMTIyOlx0XHRpZiAocmMpIHtcbiAxMjM6XHRcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWFkIHJlZyAweCUwNHg6ICVwZVxcblwmIzM0OywgcmVnLFxuIDEyNDpcdFx0XHRcdEVSUl9QVFIocmMpKTtcbiAxMjU6XHRcdFx0cmV0dXJuIHJjO1xuIDEyNjpcdFx0fVxuIDEyNzpcdFxuIDEyODpcdFx0cmV0dXJuIDA7XG4gMTI5Olx0fVxuIDEzMDpcdFxuIDEzMTpcdHN0YXRpYyBpbnRcbiAxMzI6XHR6bDMwNzN4X3dyaXRlX3JlZyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCBjb25zdCB2b2lkICp2YWwsXG4gMTMzOlx0XHRcdCAgc2l6ZV90IHNpemUpXG4gMTM0Olx0e1xuIDEzNTpcdFx0aW50IHJjO1xuIDEzNjpcdFxuIDEzNzpcdFx0aWYgKCF6bDMwNzN4X2NoZWNrX3JlZyh6bGRldiwgcmVnLCBzaXplKSlcbiAxMzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTg5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9iZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcHJvYmUgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBsb29raW5nIGZvciBgWkxfUkVHX0lEYC4gTmF0dXJhbGx5LCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHRvIHNvbWV0aGluZyBkZWZpbmVkIHdpdGhpbiBgemwzMDczeF9jaGlwX2lkc2AuIE15IG1pbmQmIzM5O3Mgbm93IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG9zc2libGUgY2hpcCBJRHMuIExldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgd2hhdCB0aGlzIGB6bDMwNzN4X2NoaXBfaWRzYCBhY3R1YWxseSBjb250YWlucy4gVGltZSB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBVbmRlcnN0YW5kaW5nIHRob3NlIElEcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBleHBlY3RlZCBoYXJkd2FyZSB0aGlzIHByb2JlIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9jaGlwX2lkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MjY6c3RhdGljIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB6bDMwNzN4X2NoaXBfaWRzW10gPSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjctXHRaTF9DSElQX0lORk8oMHgwRTMwLCAyLCBaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzIpLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODA9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk5Mi1cdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk5NDpcdFx0aWYgKHpsMzA3M3hfY2hpcF9pZHNbaV0uaWQgPT0gaWQpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk1LVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk4Olx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTktXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgLUVOT0RFVixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwMS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDAyOlx0emxkZXYtXHUwMDNlaW5mbyA9IFx1MDAyNnpsMzA3M3hfY2hpcF9pZHNbaV07XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MjUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgemwzMDczeCBEcml2ZXI6IEEgU3l6a2FsbGVyIENoYWxsZW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhlIGB6bDMwNzN4YCBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc2ltdWxhdGUgaXRzIGhhcmR3YXJlIGRlcGVuZGVuY2llcyB3aXRoaW4gU3l6a2FsbGVyLiBUaGUgY2hpcCBJRCwgbGV0JiMzOTtzIHNheSBgMHgwRTMwYCwgaXMgdGhlIGtleS4gQ2FuIEkgZ2V0IFN5emthbGxlciB0byBtb2NrIHRoaXMgSTJDIGludGVyYWN0aW9uPwoKVGhlIGltbWVkaWF0ZSBwcm9ibGVtIGlzIHRoYXQgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBidWlsdC1pbiwgZmluZS1ncmFpbmVkIEkyQyBtb2NrIHRoYXQgY2FuIHJldHVybiBzcGVjaWZpYyB2YWx1ZXMgZm9yIHNwZWNpZmljIHJlZ2lzdGVycy4gSSBrbm93IGl0ICpkb2VzKiBoYXZlIHNvbWUgYmFzaWMgYC9kZXYvaTJjLVhgIGZ1enppbmcsIGJ1dCB0aGF0JiMzOTtzIHJlYWxseSBmb3IgdXNlcnNwYWNlIHRvICp0YWxrKiB0byBJMkMgZGV2aWNlcywgbm90IGZvciAqZW11bGF0aW5nKiB0aGUgZGV2aWNlcyB0aGVtc2VsdmVzLiBJZiBJIHRyeSB0byB0cmlnZ2VyIHRoZSBkZXZpY2UgaW5zdGFudGlhdGlvbiB0aHJvdWdoIHN5c2ZzJiMzOTtzIGBuZXdfZGV2aWNlYCwgdGhlIGtlcm5lbCBwcm9iZSB3aWxsIHJ1biBJMkMgcmVhZHMsIGFuZCB3aXRob3V0IGEgcmVhbCBkZXZpY2UsIHRob3NlIHJlYWRzIHdpbGwgZmFpbC4gU28gSSBuZWVkIGEgd2F5IHRvIG1ha2UgdGhvc2UgcmVhZHMgcmV0dXJuIHdoYXQgSSB3YW50LiBJZGVhbGx5LCB0aGVyZSYjMzk7ZCBiZSBhIGdlbmVyaWMgc29mdHdhcmUgSTJDIGFkYXB0ZXIgdW5kZXIgU3l6a2FsbGVyJiMzOTtzIGNvbnRyb2wuCgpUaGVuIEkgcmVjYWxsZWQgYGkyYy1zdHViYC4gVGhhdCYjMzk7cyBhIGtlcm5lbCBtb2R1bGUgdGhhdCBtYWtlcyBmYWtlIEkyQyBhZGFwdGVyIGFuZCBkZXZpY2VzLiBMZXQgbWUgY2hlY2sgaWYgU3l6a2FsbGVyIGVuYWJsZXMgaXQuIFVzdWFsbHksIGBDT05GSUdfSTJDX1NUVUJgIGlzIGVuYWJsZWQuIEJ1dCBJIHJlYWxpemVkIGBpMmMtc3R1YmAgb25seSBzdXBwb3J0cyBTTUJ1cyBjb21tYW5kcyBhbmQgYHpsMzA3M3hgIHVzZXMgcmVnbWFwIG92ZXIgSTJDLiBBbmQsIGlmIGBpMmMtc3R1YmAgaXMgdXNlZCwgY291bGQgSSBsb2FkIGl0IHdpdGggYGNoaXBfYWRkcj0weDIwYCBhbmQgdGhlbiBwcm9ncmFtIHRoZSByZWdpc3RlcnMgdmlhIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC8wLTAwMjAvYD8gTm8sIGBpMmMtc3R1YmAgZG9lc24mIzM5O3QgZXhwb3NlIHJlZ2lzdGVycyB2aWEgc3lzZnMuIEFoLCBidXQgd2FpdCBhIHNlY29uZC4KClN5emthbGxlciAqY2FuKiB3cml0ZSB0byBgL2Rldi9pMmMtWGAhIEkgY291bGQgdXNlIGAvZGV2L2kyYy1YYCB0byBwcm9ncmFtIHRoZSBgaTJjLXN0dWJgIHJlZ2lzdGVycy4gQW5kLCBpZiB1c2Vyc3BhY2Ugd3JpdGVzIHRvIGAvZGV2L2kyYy1YYCAodGhlIGZha2UgYWRhcHRlciksIGl0IGNhbiB3cml0ZSB0byB0aGUgZmFrZSBkZXZpY2UmIzM5O3MgcmVnaXN0ZXJzLiBUaGVuLCBpZiB1c2Vyc3BhY2UgaW5zdGFudGlhdGVzIGB6bDMwNzN4YCBvbiB0aGUgc2FtZSBmYWtlIGFkYXB0ZXIgYXQgdGhlIHNhbWUgYWRkcmVzcywgdGhlIGB6bDMwNzN4YCBkcml2ZXIgKnNob3VsZCogcmVhZCB0aGUgcmVnaXN0ZXJzIEkganVzdCBwcm9ncmFtbWVkLiBCcmlsbGlhbnQhCgpOb3csIGRvZXMgU3l6a2FsbGVyICphY3R1YWxseSogZG8gdGhpcz8gSSYjMzk7bSBub3QgZmFtaWxpYXIgd2l0aCBhbnkgc3BlY2lmaWMgZXhhbXBsZXMsIGFuZCBJIGNhbiYjMzk7dCB0aGluayBvZiBhbnl0aGluZyBsaWtlIGBzeXpfaTJjX3NldHVwYC4gSSYjMzk7bGwgaGF2ZSB0byBjaGVjayB0aGUgU3l6a2FsbGVyIHNvdXJjZS4gSG1tLCBJIGp1c3QgcmVtZW1iZXJlZCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X3VzYl9jb25uZWN0YCwgYHN5el84MDIxMV9qb2luX2lic3NgLCBhbmQgc28gb24sIGJ1dCBubyBgc3l6X2kyY19zZXR1cGAuIExldCBtZSBqdXN0IGFzc3VtZSBpdCBkb2VzbiYjMzk7dCBkbyBpdCBkaXJlY3RseS4KCk9rYXksIGFyZSB0aGVyZSAqb3RoZXIqIHBhdGhzIHRvIHJlYWNoIHRoaXMgY29kZT8gV2hhdCBhYm91dCBTUEk/IFRoZSBkcml2ZXIgaGFzIGEgYHpsMzA3M3hfc3BpX3Byb2JlYCBmdW5jdGlvbi4gSSBhbSBub3QgZmFtaWxpYXIgd2l0aCBTeXprYWxsZXImIzM5O3MgU1BJIGNhcGFiaWxpdGllcyBidXQgSSByZW1lbWJlciBpdCBkb2VzbiYjMzk7dCBoYXZlIGEgU1BJIG1vY2sgZWl0aGVyLgoKTm93LCBJIGhhdmUgYSBiaWdnZXIgcHJvYmxlbS4gSSYjMzk7bSBvcGVyYXRpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQXJlIHRoZXNlIGtpbmRzIG9mIEkyQy9TUEkgZHJpdmVycyBldmVuIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQ/ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuJiMzNDsgSXQmIzM5O3MgZ2VuZXJhbGx5IGltcG9zc2libGUgdG8gc3VjY2Vzc2Z1bGx5IHJlYWNoIHRoZSBwcm9iZSBmdW5jdGlvbiB3aXRob3V0IGEgcmVhbC1pc2ggaGFyZHdhcmUgc2V0dXAgb3IgYSByZWFsbHkgY2xldmVyIGVtdWxhdG9yLiBQcm9iZXMgYWx3YXlzIGNoZWNrIGNoaXAgSURzLgoKSSBndWVzcyBJIHNob3VsZCBjaGVjayBvbmUgbGFzdCB0aGluZzogaXMgdGhlcmUgYW55IGV4aXN0aW5nIHRlc3QgbW9jayBmb3IgYHpsMzA3M3hgPyBJZiBub3QsIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBhIG5vbi10cml2aWFsIGFtb3VudCBvZiB3b3JrIHRvIGdldCB0aGlzIGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bDMwNzN4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTMxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBsaW5lIG9mIHRob3VnaHQsIHRoaW5raW5nIGFzIGEgc2Vhc29uZWQgZW5naW5lZXI6CgoqKkNoZWNraW5nIGZvciBUZXN0IE1vY2tzIGluIHRoZSBEUExMIERyaXZlciBEaXJlY3RvcnkqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBoZWF2eS1kdXR5IGRlYnVnZ2luZyBvciBmZWF0dXJlIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGF0IGBkcml2ZXJzL2RwbGwvemwzMDczeC9gIGRpcmVjdG9yeSwgSSBhbHdheXMgc3RhcnQgd2l0aCBhIHNhbml0eSBjaGVjay4gTGV0JiMzOTtzIHNlZSBpZiB3ZSYjMzk7dmUgYmVlbiBkaWxpZ2VudCB3aXRoIG91ciB0ZXN0aW5nIHN0cmF0ZWd5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJiMzOTtzIGEgdGVzdCBtb2NrIGF2YWlsYWJsZS4gSGF2aW5nIGEgbW9jayBmb3IgdGhhdCBEUExMIG1vZHVsZSDigJMgdGhlIFpMMzA3M3gg4oCTIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgZWZmaWNpZW50IGRldmVsb3BtZW50IGFuZCByZWdyZXNzaW9uIHRlc3RpbmcuIEl0IGFsbG93cyBmb3IgY29udHJvbGxlZCBleHBlcmltZW50YXRpb24gYW5kIGlzb2xhdGlvbiBvZiB0aGUgbW9kdWxlIGZyb20gcG90ZW50aWFsbHkgY29tcGxleCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBGaW5kaW5nIGEgZ29vZCBtb2NrIHdpbGwgc2F2ZSBhIGxvdCBvZiB0aW1lIGFuZCBlZmZvcnQgZG93biB0aGUgbGluZS4gSXQgYXZvaWRzIHRoZSBuZWVkIHRvIHJlcGVhdGVkbHkgYm9vdCB0aGUgc3lzdGVtIGluIHZhcmlvdXMgY29uZmlndXJhdGlvbnMganVzdCB0byB0ZXN0IGEgc21hbGwgY29kZSBjaGFuZ2UuIFBsdXMsIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgY3JlYXRpbmcgc3RhYmxlIHVuaXQgdGVzdHMuIElmIHRoZXJlIGlzbiYjMzk7dCBhIG1vY2ssIHRoZW4gaXQmIzM5O3MgdGltZSB0byBjcmVhdGUgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2NoYW4uYyYjMzQ7LAogICAgJiMzNDtjaGFuLmgmIzM0OywKICAgICYjMzQ7Y29yZS5jJiMzNDssCiAgICAmIzM0O2NvcmUuaCYjMzQ7LAogICAgJiMzNDtkZXZsaW5rLmMmIzM0OywKICAgICYjMzQ7ZGV2bGluay5oJiMzNDssCiAgICAmIzM0O2RwbGwuYyYjMzQ7LAogICAgJiMzNDtkcGxsLmgmIzM0OywKICAgICYjMzQ7Zmxhc2guYyYjMzQ7LAogICAgJiMzNDtmbGFzaC5oJiMzNDssCiAgICAmIzM0O2Z3LmMmIzM0OywKICAgICYjMzQ7ZncuaCYjMzQ7LAogICAgJiMzNDtpMmMuYyYjMzQ7LAogICAgJiMzNDtvdXQuYyYjMzQ7LAogICAgJiMzNDtvdXQuaCYjMzQ7LAogICAgJiMzNDtwcm9wLmMmIzM0OywKICAgICYjMzQ7cHJvcC5oJiMzNDssCiAgICAmIzM0O3JlZi5jJiMzNDssCiAgICAmIzM0O3JlZi5oJiMzNDssCiAgICAmIzM0O3JlZ3MuaCYjMzQ7LAogICAgJiMzNDtzcGkuYyYjMzQ7LAogICAgJiMzNDtzeW50aC5jJiMzNDssCiAgICAmIzM0O3N5bnRoLmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFRhcmdldCBDb2RlOiBBIEZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHpsMzA3M3hgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZnV6emFibGUgd2l0aCBzeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtObyB0ZXN0IG1vY2tzLiYjMzQ7IFNpbmNlIHN5emthbGxlciBydW5zIGluIGVudmlyb25tZW50cyB3aXRob3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgdGhpcyBgemwzMDczeGAgZGV2aWNlJiMzOTtzIHByb2JlIGZ1bmN0aW9uIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBmYWlsLiBJdCBleHBsaWNpdGx5IGNoZWNrcyB0aGUgY2hpcCBJRCwgYW5kIGlmIHRoYXQgZG9lc24mIzM5O3QgbWF0Y2gsIGl0IHJldHVybnMgYC1FTk9ERVZgLiBJIHF1aWNrbHkgZGlzbWlzc2VkIHRoZSBieXBhc3MsIGFzIHRoZSBjb2RlIGRpcmVjdGx5IHByZXZlbnRzIHRoYXQuCgpUaGVuLCBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgYGkyYy1zdHViYCwgY291bGQgc3l6a2FsbGVyIGxldmVyYWdlIHRoYXQgdG8gZW11bGF0ZSB0aGUgZGV2aWNlPyBCdXQsIHdhaXQsIGBpMmMtc3R1YmAgb25seSBzdXBwb3J0cyA4LWJpdCByZWdpc3RlciBhZGRyZXNzZXMsIHdoZXJlYXMgYHpsMzA3M3hgIHVzZXMgMTYtYml0IHJlZ2lzdGVycy4gTXkgaW1tZWRpYXRlIGNvbmNsdXNpb24sIHRoZW4sIHdhcyB0aGF0IGl0IHdhcyBpbXBvc3NpYmxlLiBObyBvdGhlciBJMkMgbW9ja3MgYXJlIGF2YWlsYWJsZSwgbm90IGV2ZW4gYW4gYGkyYy1tb2NrYC4gVGhlIHNhbWUgZ29lcyBmb3IgU1BJIOKAkyBubyBgc3BpLW1vY2tgIGV4aXN0cy4KClNvLCB0aGUgcHJvYmUgZmFpbHMsIG1ha2luZyB0aGUgZHJpdmVyIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgc2V0dXAuIFRoZSB0YXJnZXQgY29kZSBsaWVzIHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBldGMuLCBhbGwgb2Ygd2hpY2ggYXJlIFBUUCBjbG9jayBvcGVyYXRpb25zLiBUaGVzZSBhcmUgb25seSByZWdpc3RlcmVkIGlmIGB6bDMwNzN4X2RwbGxfcmVnaXN0ZXJgIHN1Y2NlZWRzLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgemwzMDczeF9kZXZfcHJvYmVgLiBTaW5jZSB0aGF0IHByb2JlIHdpbGwgZmFpbCwgdGhvc2UgZnVuY3Rpb25zIHdpbGwgbmV2ZXIgZ2V0IGV4ZWN1dGVkLiBUaHVzLCB0aGlzIGNvZGUgcGF0aCwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXMgbm90IHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIG1lYW5zLgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrLiBTeXprYWxsZXIgdXN1YWxseSBoYXMgb3B0aW9ucywgcmlnaHQ/IElzIHRoZXJlIGFueXRoaW5nIHRoYXQgY291bGQgYmUgY29uZmlndXJlZCB0byBlbXVsYXRlIEkyQz8gSSBsb29rZWQgZm9yIGFueSBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zLCBidXQsIG5vLCBpdCByZWxpZXMgb24gc3RyaWN0IGNoaXAgSUQgdmFsaWRhdGlvbi4gV2FpdCwgSSBoYWQgYW5vdGhlciB0aG91Z2h0OiB3aGF0IGFib3V0IGB2aGNpYCBmb3IgVVNCLUkyQyBhZGFwdGVyISBJIGNhbiB1c2UgYHN5el91c2JfY29ubmVjdGAgdG8gZmFrZSBhbiBgaTJjLXRpbnktdXNiYCBkZXZpY2UuIFRoYXQgd2F5LCBzeXprYWxsZXIgY291bGQgaW50ZXJjZXB0IHRoZSBJMkMgcmVxdWVzdHMgYW5kIHJldHVybiB0aGUgZXhwZWN0ZWQgY2hpcCBJRCB3aGVuIHJlcXVlc3RlZC4KClllcyEgSSBjYW4gc2VlIHRoYXQgYHN5el91c2JfY29ubmVjdGAgaGFzIHRoYXQgY2FwYWJpbGl0eSEgVGhlIGtlcm5lbCB3b3VsZCB0aGVuIHJlcXVlc3QgYW4gSTJDIHJlYWQsIHRoZSBVU0ItSTJDIGFkYXB0ZXIgd291bGQgcHJvY2VzcyB0aGF0LCBhbmQgc3l6a2FsbGVyIGNvdWxkIHByb3ZpZGUgdGhlIHJpZ2h0IGNoaXAgSUQgYDB4MEUzMGAgaW4gaXRzIHJlc3BvbnNlISBUaGUgcHJvYmFiaWxpdHkgb2Ygc3l6a2FsbGVyIGdlbmVyYXRpbmcgdGhlIGNvcnJlY3QgMTYtYml0IGNoaXAgSUQgcmFuZG9tbHkgaXMsIG9mIGNvdXJzZSwgdmVyeSBsb3c6IDEvNjU1MzYuIEJ1dCwgd2FpdCwgc3l6a2FsbGVyIHVzZXMgY292ZXJhZ2UtZ3VpZGVkIGZ1enppbmcsIHNvIGl0ICpjb3VsZCogZGV0ZWN0IHRoZSBjb21wYXJpc29uIGFuZCBldmVudHVhbGx5IGZpbmQgdGhlIGNoaXAgSUQhCgpTbywgdGhlIEkyQyByZWFkIGdvZXMgdGhyb3VnaCBgcmVnbWFwYCwgdGhlbiBgaTJjYCwgdGhlbiBVU0IgdG8gc3l6a2FsbGVyLiBTeXprYWxsZXImIzM5O3MgVVNCIGZ1enplciByZWNlaXZlcyBhIHN0cmVhbSBvZiBieXRlcyBmb3IgVVNCIGVuZHBvaW50cy4gSWYgSSBjYW4gcHJvdmlkZSBgMHgwRTMwYCwgdGhlIHByb2JlIGNvdWxkIGNvbnRpbnVlLiBUaGUgZHJpdmVyIHdvdWxkIHRoZW4gcmVhZCBgUkVWSVNJT05gLCBgRldfVkVSYCwgYENVU1RPTV9DT05GSUdfVkVSYC4gSXQgd291bGQgdGhlbiByZWdpc3RlciBEUExMIGNoYW5uZWxzLgoKSXMgdGhpcyBwcmFjdGljYWxseSBhY2hpZXZhYmxlLCB0aG91Z2g/IFVzdWFsbHksIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMgYXJlIGNvbnNpZGVyZWQgaGFyZCB0byByZWFjaCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gQnV0LCBpZiBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyLCB3ZSBzdGlsbCB3YW50IHRvIGZ1enogaXQuIFRoZSBpbnN0cnVjdGlvbnMgc3RhdGUgY2xlYXJseSB0byBleGNsdWRlIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEJ1dCBpcyB0aGlzIHJlYWxseSBpbXBvc3NpYmxlPwoKU3l6a2FsbGVyIGNhbiBjcmVhdGUgYW4gSTJDIGJ1cyB2aWEgYGkyYy10aW55LXVzYmAgb3IgYGkyYy1zdHViYCBvciBgaTJjLWdwaW9gLiBCdXQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYW4gSTJDIGRldmljZSBmdXp6ZXIgZm9yIGF1dG9tYXRpY2FsbHkgaW5zdGFudGlhdGluZyBhbGwgSTJDIGRyaXZlcnMgYW5kIG1vY2tpbmcgdGhlaXIgcmVnaXN0ZXJzLiBTeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3IgYGkyY19kZXZgLCBidXQgbm90aGluZyBmb3IgbW9ja2luZyBJMkMgZGV2aWNlcy4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgYHpsMzA3M3hgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bDMwNzN4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDM2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIGZvciBFeGlzdGluZyBTeXprYWxsZXIgQ292ZXJhZ2UqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzY2FuLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7RG8gd2UgYWxyZWFkeSBoYXZlIHNvbWUgU3l6a2FsbGVyIGNvdmVyYWdlIGZvciB0aGlzIGBkcGxsYCB0aGluZz8mIzM0OyBUaGUgZ29hbCBoZXJlIGlzIGVmZmljaWVuY3k7IHRoZXJlJiMzOTtzIG5vIHNlbnNlIGluIHJlaW52ZW50aW5nIHRoZSB3aGVlbCBpZiBzb21lb25lJiMzOTtzIGFscmVhZHkgZG9uZSB0aGUgZ3JvdW5kd29yay4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBmb3IgbWUgLSBxdWlja2x5IHZlcmlmeWluZyBpZiBleGlzdGluZyBmdXp6aW5nIGluZnJhc3RydWN0dXJlIGhhbmRsZXMgYSB0YXJnZXQuIFNvLCBsZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb25zLiBJdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgdG9vbCB0byBoYXZlIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHBsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjM0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogRFBMTCBMb2NhdGlvbioqCgpIbW0sIGxldCYjMzk7cyBzZWUuLi4gKmRwbGwqLi4uIHdoZXJlJiMzOTtzIHRoYXQgaGlkaW5nPyBSaWdodCwgSSBzaG91bGQgYmUgZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGUgYmFzZS4gT2theSwgd2FpdCBhIG1pbnV0ZSwgSSByZW1lbWJlciBub3cuIFRoYXQgbW9kdWxlLCB0aGF0IHNwZWNpZmljIGluc3RhbmNlIG9mIERQTEwsIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgcmVzaWRpbmcgaW4gYGRyaXZlcnMvZHBsbGAuIFllcywgdGhhdCBsb2NhdGlvbiBtYWtlcyBzZW5zZSBnaXZlbiBpdHMgZnVuY3Rpb24gd2l0aGluIHRoZSB3aWRlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ2NDcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvZHBsbC9LY29uZmlnPTExPWNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXG4tLVxuZHJpdmVycy9kcGxsL0tjb25maWctMjAtXHQgIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBleHBvc2VkIHZpYSBkZWJ1Z2ZzIGF0OlxuZHJpdmVycy9kcGxsL0tjb25maWc6MjE6XHQgICAgL3N5cy9rZXJuZWwvZGVidWcvcmVmX3RyYWNrZXIvZHBsbF9kZXZpY2VfKlxuZHJpdmVycy9kcGxsL0tjb25maWc6MjI6XHQgICAgL3N5cy9rZXJuZWwvZGVidWcvcmVmX3RyYWNrZXIvZHBsbF9waW5fKlxuZHJpdmVycy9kcGxsL0tjb25maWctMjMtXG4tLVxuZHJpdmVycy9kcGxsL0tjb25maWctMjUtXG5kcml2ZXJzL2RwbGwvS2NvbmZpZzoyNjpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9kcGxsL0tjb25maWctMjctXG4tLVxuZHJpdmVycy9kcGxsL01ha2VmaWxlLTUtXG5kcml2ZXJzL2RwbGwvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRFBMTCkgICAgICAmIzQzOz0gZHBsbC5vXG5kcml2ZXJzL2RwbGwvTWFrZWZpbGU6NzpkcGxsLXkgICAgICAgICAgICAgICAgICAmIzQzOz0gZHBsbF9jb3JlLm9cbmRyaXZlcnMvZHBsbC9NYWtlZmlsZTo4OmRwbGwteSAgICAgICAgICAgICAgICAgICYjNDM7PSBkcGxsX25ldGxpbmsub1xuZHJpdmVycy9kcGxsL01ha2VmaWxlOjk6ZHBsbC15ICAgICAgICAgICAgICAgICAgJiM0Mzs9IGRwbGxfbmwub1xuZHJpdmVycy9kcGxsL01ha2VmaWxlLTEwLVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yLS8qXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzogKiAgZHBsbF9jb3JlLmMgLSBEUExMIHN1YnN5c3RlbSBrZXJuZWwtc3BhY2UgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uLlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQtICpcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTgtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTk6I2luY2x1ZGUgXCYjMzQ7ZHBsbF9jb3JlLmhcJiMzNDtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyMDojaW5jbHVkZSBcJiMzNDtkcGxsX25ldGxpbmsuaFwmIzM0O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIxLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIyLS8qIE11dGV4IGxvY2sgdG8gcHJvdGVjdCBEUExMIHN1YnN5c3RlbSBkZXZpY2VzIGFuZCBwaW5zICovXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjM6REVGSU5FX01VVEVYKGRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjQtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjU6REVGSU5FX1hBUlJBWV9GTEFHUyhkcGxsX2RldmljZV94YSwgWEFfRkxBR1NfQUxMT0MpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI2OkRFRklORV9YQVJSQVlfRkxBR1MoZHBsbF9waW5feGEsIFhBX0ZMQUdTX0FMTE9DKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNy1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyODpzdGF0aWMgUkFXX05PVElGSUVSX0hFQUQoZHBsbF9ub3RpZmllcl9jaGFpbik7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mjk6c3RhdGljIERFRklORV9JREEoZHBsbF9waW5faWR4X2lkYSk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzAtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzE6c3RhdGljIHUzMiBkcGxsX2RldmljZV94YV9pZDtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMjpzdGF0aWMgdTMyIGRwbGxfcGluX3hhX2lkO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM0LSNkZWZpbmUgQVNTRVJUX0RQTExfUkVHSVNURVJFRChkKVx0XFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNTpcdFdBUk5fT05fT05DRSgheGFfZ2V0X21hcmsoXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIChkKS1cdTAwM2VpZCwgRFBMTF9SRUdJU1RFUkVEKSlcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNi0jZGVmaW5lIEFTU0VSVF9EUExMX05PVF9SRUdJU1RFUkVEKGQpXHRcXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM3Olx0V0FSTl9PTl9PTkNFKHhhX2dldF9tYXJrKFx1MDAyNmRwbGxfZGV2aWNlX3hhLCAoZCktXHUwMDNlaWQsIERQTExfUkVHSVNURVJFRCkpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzgtI2RlZmluZSBBU1NFUlRfRFBMTF9QSU5fUkVHSVNURVJFRChwKSBcXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM5Olx0V0FSTl9PTl9PTkNFKCF4YV9nZXRfbWFyayhcdTAwMjZkcGxsX3Bpbl94YSwgKHApLVx1MDAzZWlkLCBEUExMX1JFR0lTVEVSRUQpKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQwLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQxOnN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24ge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQyLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQzOlx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ0LVx0dm9pZCAqcHJpdjtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NTpcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2LX07XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDctXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDg6c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDktXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTA6XHRjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHM7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTEtXHR2b2lkICpwcml2O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUyLVx0dm9pZCAqY29va2llO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzOlx0ZHBsbF90cmFja2VyIHRyYWNrZXI7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTQtfTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NjpzdGF0aWMgaW50IGNhbGxfZHBsbF9ub3RpZmllcnModW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmluZm8pXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTcte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU4Olx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkcGxsX2xvY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU5Olx0cmV0dXJuIHJhd19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNmRwbGxfbm90aWZpZXJfY2hhaW4sIGFjdGlvbiwgaW5mbyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjAtfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTYxLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYyOnZvaWQgZHBsbF9kZXZpY2Vfbm90aWZ5KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdW5zaWduZWQgbG9uZyBhY3Rpb24pXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjMte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY0Olx0c3RydWN0IGRwbGxfZGV2aWNlX25vdGlmaWVyX2luZm8gaW5mbyA9IHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NTpcdFx0LmRwbGwgPSBkcGxsLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY2Olx0XHQuaWQgPSBkcGxsLVx1MDAzZWlkLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3Olx0XHQuaWR4ID0gZHBsbC1cdTAwM2VkZXZpY2VfaWR4LFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY4Olx0XHQuY2xvY2tfaWQgPSBkcGxsLVx1MDAzZWNsb2NrX2lkLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY5Olx0XHQudHlwZSA9IGRwbGwtXHUwMDNldHlwZSxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03MC1cdH07XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzEtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NzI6XHRjYWxsX2RwbGxfbm90aWZpZXJzKGFjdGlvbiwgXHUwMDI2aW5mbyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzMtfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc0LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjc1OnZvaWQgZHBsbF9waW5fbm90aWZ5KHN0cnVjdCBkcGxsX3BpbiAqcGluLCB1NjQgc3JjX2Nsb2NrX2lkLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc2LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc3LXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3ODpcdHN0cnVjdCBkcGxsX3Bpbl9ub3RpZmllcl9pbmZvIGluZm8gPSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzktXHRcdC5waW4gPSBwaW4sXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTg3LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjg4Olx0Y2FsbF9kcGxsX25vdGlmaWVycyhhY3Rpb24sIFx1MDAyNmluZm8pO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTg5LX1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy05MC1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo5MTpzdGF0aWMgdm9pZCBkcGxsX2RldmljZV90cmFja2VyX2FsbG9jKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo5MjpcdFx0XHRcdCAgICAgIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy05My17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTQtI2lmZGVmIENPTkZJR19EUExMX1JFRkNOVF9UUkFDS0VSXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6OTU6XHRyZWZfdHJhY2tlcl9hbGxvYyhcdTAwMjZkcGxsLVx1MDAzZXJlZmNudF90cmFja2VyLCB0cmFja2VyLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy05Ni0jZW5kaWZcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTgtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6OTk6c3RhdGljIHZvaWQgZHBsbF9kZXZpY2VfdHJhY2tlcl9mcmVlKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDA6XHRcdFx0XHQgICAgIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDEte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwMi0jaWZkZWYgQ09ORklHX0RQTExfUkVGQ05UX1RSQUNLRVJcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDM6XHRyZWZfdHJhY2tlcl9mcmVlKFx1MDAyNmRwbGwtXHUwMDNlcmVmY250X3RyYWNrZXIsIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwNC0jZW5kaWZcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTA2LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEwNzpzdGF0aWMgdm9pZCBfX2RwbGxfZGV2aWNlX2hvbGQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTA4LXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDk6XHRkcGxsX2RldmljZV90cmFja2VyX2FsbG9jKGRwbGwsIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExMDpcdHJlZmNvdW50X2luYyhcdTAwMjZkcGxsLVx1MDAzZXJlZmNvdW50KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTEtfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTExMi1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTM6c3RhdGljIHZvaWQgX19kcGxsX2RldmljZV9wdXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTE0LXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTU6XHRkcGxsX2RldmljZV90cmFja2VyX2ZyZWUoZHBsbCwgdHJhY2tlcik7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE2Olx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZkcGxsLVx1MDAzZXJlZmNvdW50KSkge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExNzpcdFx0QVNTRVJUX0RQTExfTk9UX1JFR0lTVEVSRUQoZHBsbCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE4Olx0XHRXQVJOX09OX09OQ0UoIXhhX2VtcHR5KFx1MDAyNmRwbGwtXHUwMDNlcGluX3JlZnMpKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTk6XHRcdHhhX2Rlc3Ryb3koXHUwMDI2ZHBsbC1cdTAwM2VwaW5fcmVmcyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTIwOlx0XHR4YV9lcmFzZShcdTAwMjZkcGxsX2RldmljZV94YSwgZHBsbC1cdTAwM2VpZCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTIxOlx0XHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMjI6XHRcdHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNmRwbGwtXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEyMzpcdFx0a2ZyZWUoZHBsbCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTI0LVx0fVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMjYtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTI3OnN0YXRpYyB2b2lkIGRwbGxfcGluX3RyYWNrZXJfYWxsb2Moc3RydWN0IGRwbGxfcGluICpwaW4sIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMjgte1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMzMtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTM0OnN0YXRpYyB2b2lkIGRwbGxfcGluX3RyYWNrZXJfZnJlZShzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgZHBsbF90cmFja2VyICp0cmFja2VyKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEzNS17XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0MC1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNDE6c3RhdGljIHZvaWQgX19kcGxsX3Bpbl9ob2xkKHN0cnVjdCBkcGxsX3BpbiAqcGluLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTQyLXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNDM6XHRkcGxsX3Bpbl90cmFja2VyX2FsbG9jKHBpbiwgdHJhY2tlcik7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTQ0LVx0cmVmY291bnRfaW5jKFx1MDAyNnBpbi1cdTAwM2VyZWZjb3VudCk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0Ni1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNDc6c3RhdGljIHZvaWQgZHBsbF9waW5faWR4X2ZyZWUodTMyIHBpbl9pZHgpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE0ODpzdGF0aWMgdm9pZCBkcGxsX3Bpbl9wcm9wX2ZyZWUoc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3ApO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0OS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNTA6c3RhdGljIHZvaWQgX19kcGxsX3Bpbl9wdXQoc3RydWN0IGRwbGxfcGluICpwaW4sIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNTEte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE1MjpcdGRwbGxfcGluX3RyYWNrZXJfZnJlZShwaW4sIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1My1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cGluLVx1MDAzZXJlZmNvdW50KSkge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE1NDpcdFx0eGFfZXJhc2UoXHUwMDI2ZHBsbF9waW5feGEsIHBpbi1cdTAwM2VpZCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTU1Olx0XHR4YV9kZXN0cm95KFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1Ni1cdFx0eGFfZGVzdHJveShcdTAwMjZwaW4tXHUwMDNlcGFyZW50X3JlZnMpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1Ny1cdFx0eGFfZGVzdHJveShcdTAwMjZwaW4tXHUwMDNlcmVmX3N5bmNfcGlucyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTU4Olx0XHRkcGxsX3Bpbl9wcm9wX2ZyZWUoXHUwMDI2cGluLVx1MDAzZXByb3ApO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1OS1cdFx0Zndub2RlX2hhbmRsZV9wdXQocGluLVx1MDAzZWZ3bm9kZSk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTYwOlx0XHRkcGxsX3Bpbl9pZHhfZnJlZShwaW4tXHUwMDNlcGluX2lkeCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTYxLVx0XHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZwaW4tXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNjUtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTY2OnN0cnVjdCBkcGxsX2RldmljZSAqZHBsbF9kZXZpY2VfZ2V0X2J5X2lkKGludCBpZClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNjcte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE2ODpcdGlmICh4YV9nZXRfbWFyayhcdTAwMjZkcGxsX2RldmljZV94YSwgaWQsIERQTExfUkVHSVNURVJFRCkpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTY5Olx0XHRyZXR1cm4geGFfbG9hZChcdTAwMjZkcGxsX2RldmljZV94YSwgaWQpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE3MC1cbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTczLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE3NDpzdGF0aWMgc3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiAqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTc1OmRwbGxfcGluX3JlZ2lzdHJhdGlvbl9maW5kKHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzY6XHRcdFx0ICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2LFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE3Ny1cdFx0XHQgICB2b2lkICpjb29raWUpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTc4LXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzk6XHRzdHJ1Y3QgZHBsbF9waW5fcmVnaXN0cmF0aW9uICpyZWc7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTgwLVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz0xODk9c3RhdGljIGludFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE5MDpkcGxsX3hhX3JlZl9waW5fYWRkKHN0cnVjdCB4YXJyYXkgKnhhX3BpbnMsIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE5MTpcdFx0ICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xOTItXHRcdCAgICB2b2lkICpjb29raWUpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTkzLXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxOTQ6XHRzdHJ1Y3QgZHBsbF9waW5fcmVnaXN0cmF0aW9uICpyZWc7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTk1Olx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE5Ni1cdGJvb2wgcmVmX2V4aXN0cyA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yMDItXHRcdFx0Y29udGludWU7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjAzOlx0XHRyZWcgPSBkcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmluZChyZWYsIG9wcywgcHJpdiwgY29va2llKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yMDQtXHRcdGlmIChyZWcpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIzNC1cdHJlZy1cdTAwM2Vjb29raWUgPSBjb29raWU7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjM1Olx0X19kcGxsX3Bpbl9ob2xkKHBpbiwgXHUwMDI2cmVnLVx1MDAzZXRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIzNi1cdGlmIChyZWZfZXhpc3RzKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNDItXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjQzOnN0YXRpYyBpbnQgZHBsbF94YV9yZWZfcGluX2RlbChzdHJ1Y3QgeGFycmF5ICp4YV9waW5zLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNDQ6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNDUtXHRcdFx0ICAgICAgIHZvaWQgKmNvb2tpZSlcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNDYte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI0NzpcdHN0cnVjdCBkcGxsX3Bpbl9yZWdpc3RyYXRpb24gKnJlZztcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNDg6XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjQ5LVx0dW5zaWduZWQgbG9uZyBpO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNTMtXHRcdFx0Y29udGludWU7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjU0Olx0XHRyZWcgPSBkcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmluZChyZWYsIG9wcywgcHJpdiwgY29va2llKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNTUtXHRcdGlmIChXQVJOX09OKCFyZWcpKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNTctXHRcdGxpc3RfZGVsKFx1MDAyNnJlZy1cdTAwM2VsaXN0KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNTg6XHRcdF9fZHBsbF9waW5fcHV0KHBpbiwgXHUwMDI2cmVnLVx1MDAzZXRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI1OS1cdFx0a2ZyZWUocmVnKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MjcxPXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNzI6ZHBsbF94YV9yZWZfZHBsbF9hZGQoc3RydWN0IHhhcnJheSAqeGFfZHBsbHMsIHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNzM6XHRcdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2LCB2b2lkICpjb29raWUpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjc0LXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNzU6XHRzdHJ1Y3QgZHBsbF9waW5fcmVnaXN0cmF0aW9uICpyZWc7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mjc2Olx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI3Ny1cdGJvb2wgcmVmX2V4aXN0cyA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yODAtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjgxOlx0eGFfZm9yX2VhY2goeGFfZHBsbHMsIGksIHJlZikge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI4MjpcdFx0aWYgKHJlZi1cdTAwM2VkcGxsICE9IGRwbGwpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjgzLVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI4NDpcdFx0cmVnID0gZHBsbF9waW5fcmVnaXN0cmF0aW9uX2ZpbmQocmVmLCBvcHMsIHByaXYsIGNvb2tpZSk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjg1LVx0XHRpZiAocmVnKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yOTQtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mjk1Olx0XHRyZWYtXHUwMDNlZHBsbCA9IGRwbGw7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjk2LVx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZyZWYtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI5NzpcdFx0cmV0ID0geGFfaW5zZXJ0KHhhX2RwbGxzLCBkcGxsLVx1MDAzZWlkLCByZWYsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI5OC1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMDctXHRcdGlmICghcmVmX2V4aXN0cykge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMwODpcdFx0XHR4YV9lcmFzZSh4YV9kcGxscywgZHBsbC1cdTAwM2VpZCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzA5LVx0XHRcdGtmcmVlKHJlZik7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMxNS1cdHJlZy1cdTAwM2Vjb29raWUgPSBjb29raWU7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzE2Olx0X19kcGxsX2RldmljZV9ob2xkKGRwbGwsIFx1MDAyNnJlZy1cdTAwM2V0cmFja2VyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMTctXHRpZiAocmVmX2V4aXN0cylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MzI0PXN0YXRpYyB2b2lkXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzI1OmRwbGxfeGFfcmVmX2RwbGxfZGVsKHN0cnVjdCB4YXJyYXkgKnhhX2RwbGxzLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzI2Olx0XHQgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdiwgdm9pZCAqY29va2llKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMyNy17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzI4Olx0c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiAqcmVnO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMyOTpcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMzAtXHR1bnNpZ25lZCBsb25nIGk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzMxLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMzMjpcdHhhX2Zvcl9lYWNoKHhhX2RwbGxzLCBpLCByZWYpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMzM6XHRcdGlmIChyZWYtXHUwMDNlZHBsbCAhPSBkcGxsKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzNC1cdFx0XHRjb250aW51ZTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMzU6XHRcdHJlZyA9IGRwbGxfcGluX3JlZ2lzdHJhdGlvbl9maW5kKHJlZiwgb3BzLCBwcml2LCBjb29raWUpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzNi1cdFx0aWYgKFdBUk5fT04oIXJlZykpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzOC1cdFx0bGlzdF9kZWwoXHUwMDI2cmVnLVx1MDAzZWxpc3QpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMzOTpcdFx0X19kcGxsX2RldmljZV9wdXQoZHBsbCwgXHUwMDI2cmVnLVx1MDAzZXRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM0MC1cdFx0a2ZyZWUocmVnKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNDEtXHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cmVmLVx1MDAzZXJlZmNvdW50KSkge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM0MjpcdFx0XHR4YV9lcmFzZSh4YV9kcGxscywgaSk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzQzLVx0XHRcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2cmVmLVx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0KSk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM0OS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNTA6c3RydWN0IGRwbGxfcGluX3JlZiAqZHBsbF94YV9yZWZfZHBsbF9maXJzdChzdHJ1Y3QgeGFycmF5ICp4YV9yZWZzKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM1MS17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzUyOlx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM1My1cdHVuc2lnbmVkIGxvbmcgaSA9IDA7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM1OS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNjA6c3RhdGljIHN0cnVjdCBkcGxsX2RldmljZSAqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzYxOmRwbGxfZGV2aWNlX2FsbG9jKGNvbnN0IHU2NCBjbG9ja19pZCwgdTMyIGRldmljZV9pZHgsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNjIte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM2MzpcdHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNjQtXHRpbnQgcmV0O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM2NS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNjY6XHRkcGxsID0ga3phbGxvY19vYmooKmRwbGwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM2NzpcdGlmICghZHBsbClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNjgtXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM2OTpcdHJlZmNvdW50X3NldChcdTAwMjZkcGxsLVx1MDAzZXJlZmNvdW50LCAxKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzA6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZkcGxsLVx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzE6XHRkcGxsLVx1MDAzZWRldmljZV9pZHggPSBkZXZpY2VfaWR4O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM3MjpcdGRwbGwtXHUwMDNlY2xvY2tfaWQgPSBjbG9ja19pZDtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzM6XHRkcGxsLVx1MDAzZW1vZHVsZSA9IG1vZHVsZTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzQ6XHRyZXQgPSB4YV9hbGxvY19jeWNsaWMoXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIFx1MDAyNmRwbGwtXHUwMDNlaWQsIGRwbGwsIHhhX2xpbWl0XzMyYixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzU6XHRcdFx0ICAgICAgXHUwMDI2ZHBsbF9kZXZpY2VfeGFfaWQsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM3Ni1cdGlmIChyZXQgXHUwMDNjIDApIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzc6XHRcdGtmcmVlKGRwbGwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM3OC1cdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNzktXHR9XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzgwOlx0eGFfaW5pdF9mbGFncyhcdTAwMjZkcGxsLVx1MDAzZXBpbl9yZWZzLCBYQV9GTEFHU19BTExPQyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzgxOlx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXHUwMDI2ZHBsbC1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcJiMzNDtkcGxsX2RldmljZVwmIzM0Oyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzgyLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM4MzpcdHJldHVybiBkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM4NC19XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM4Ni0vKipcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozODc6ICogZHBsbF9kZXZpY2VfZ2V0IC0gZmluZCBleGlzdGluZyBvciBjcmVhdGUgbmV3IGRwbGwgZGV2aWNlXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzg4LSAqIEBjbG9ja19pZDogY2xvY2tfaWQgb2YgY3JlYXRvclxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zOTItICpcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozOTM6ICogR2V0IGV4aXN0aW5nIG9iamVjdCBvZiBhIGRwbGwgZGV2aWNlLCB1bmlxdWUgZm9yIGdpdmVuIGFyZ3VtZW50cy5cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zOTQtICogQ3JlYXRlIG5ldyBpZiBkb2VzbiYjMzk7dCBleGlzdCB5ZXQuXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzk1LSAqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mzk2OiAqIENvbnRleHQ6IEFjcXVpcmVzIGEgbG9jayAoZHBsbF9sb2NrKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM5Ny0gKiBSZXR1cm46XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mzk4OiAqICogdmFsaWQgZHBsbF9kZXZpY2Ugc3RydWN0IHBvaW50ZXIgaWYgc3VjY2VlZGVkXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzk5LSAqICogRVJSX1BUUihYKSAtIGVycm9yXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDAwLSAqL1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQwMTpzdHJ1Y3QgZHBsbF9kZXZpY2UgKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQwMjpkcGxsX2RldmljZV9nZXQodTY0IGNsb2NrX2lkLCB1MzIgZGV2aWNlX2lkeCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQwMzpcdFx0ZHBsbF90cmFja2VyICp0cmFja2VyKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQwNC17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDA1Olx0c3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCAqcmV0ID0gTlVMTDtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MDYtXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQwNy1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MDg6XHRtdXRleF9sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDA5Olx0eGFfZm9yX2VhY2goXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIGluZGV4LCBkcGxsKSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDEwOlx0XHRpZiAoZHBsbC1cdTAwM2VjbG9ja19pZCA9PSBjbG9ja19pZCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTE6XHRcdCAgICBkcGxsLVx1MDAzZWRldmljZV9pZHggPT0gZGV2aWNlX2lkeCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTI6XHRcdCAgICBkcGxsLVx1MDAzZW1vZHVsZSA9PSBtb2R1bGUpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTM6XHRcdFx0X19kcGxsX2RldmljZV9ob2xkKGRwbGwsIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQxNDpcdFx0XHRyZXQgPSBkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQxNS1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDE4LVx0aWYgKCFyZXQpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTk6XHRcdHJldCA9IGRwbGxfZGV2aWNlX2FsbG9jKGNsb2NrX2lkLCBkZXZpY2VfaWR4LCBtb2R1bGUpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQyMC1cdFx0aWYgKCFJU19FUlIocmV0KSlcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MjE6XHRcdFx0ZHBsbF9kZXZpY2VfdHJhY2tlcl9hbGxvYyhyZXQsIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQyMi1cdH1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MjMtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDI0Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDI1LVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MjctfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQyODpFWFBPUlRfU1lNQk9MX0dQTChkcGxsX2RldmljZV9nZXQpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQyOS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MzAtLyoqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDMxOiAqIGRwbGxfZGV2aWNlX3B1dCAtIGRlY3JlYXNlIHRoZSByZWZjb3VudCBhbmQgZnJlZSBtZW1vcnkgaWYgcG9zc2libGVcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzI6ICogQGRwbGw6IGRwbGxfZGV2aWNlIHN0cnVjdCBwb2ludGVyXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDMzLSAqIEB0cmFja2VyOiB0cmFja2luZyBvYmplY3QgZm9yIHRoZSBhY3F1aXJlZCByZWZlcmVuY2VcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MzQtICpcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzU6ICogQ29udGV4dDogQWNxdWlyZXMgYSBsb2NrIChkcGxsX2xvY2spXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDM2OiAqIERyb3AgcmVmZXJlbmNlIGZvciBhIGRwbGwgZGV2aWNlLCBpZiBhbGwgcmVmZXJlbmNlcyBhcmUgZ29uZSwgZGVsZXRlXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDM3OiAqIGRwbGwgZGV2aWNlIG9iamVjdC5cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MzgtICovXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDM5OnZvaWQgZHBsbF9kZXZpY2VfcHV0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZHBsbF90cmFja2VyICp0cmFja2VyKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ0MC17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQxOlx0bXV0ZXhfbG9jayhcdTAwMjZkcGxsX2xvY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ0MjpcdF9fZHBsbF9kZXZpY2VfcHV0KGRwbGwsIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ0MzpcdG11dGV4X3VubG9jayhcdTAwMjZkcGxsX2xvY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ0NC19XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ1OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3B1dCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDQ2LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ0NzpzdGF0aWMgc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ4OmRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maW5kKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NDk6XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ1MC17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDUxOlx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ1Mi1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NTM6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgXHUwMDI2ZHBsbC1cdTAwM2VyZWdpc3RyYXRpb25fbGlzdCwgbGlzdCkge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ1NC1cdFx0aWYgKHJlZy1cdTAwM2VvcHMgPT0gb3BzIFx1MDAyNlx1MDAyNiByZWctXHUwMDNlcHJpdiA9PSBwcml2KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjAtLyoqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDYxOiAqIGRwbGxfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdGhlIGRwbGwgZGV2aWNlIGluIHRoZSBzdWJzeXN0ZW1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NjI6ICogQGRwbGw6IHBvaW50ZXIgdG8gYSBkcGxsXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDYzOiAqIEB0eXBlOiB0eXBlIG9mIGEgZHBsbFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2NDogKiBAb3BzOiBvcHMgZm9yIGEgZHBsbCBkZXZpY2VcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjUtICogQHByaXY6IHBvaW50ZXIgdG8gcHJpdmF0ZSBpbmZvcm1hdGlvbiBvZiBvd25lclxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2Ni0gKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2NzogKiBNYWtlIGRwbGwgZGV2aWNlIGF2YWlsYWJsZSBmb3IgdXNlciBzcGFjZS5cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjgtICpcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0Njk6ICogQ29udGV4dDogQWNxdWlyZXMgYSBsb2NrIChkcGxsX2xvY2spXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDcwLSAqIFJldHVybjpcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDczLSAqL1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ3NDppbnQgZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBlbnVtIGRwbGxfdHlwZSB0eXBlLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ3NTpcdFx0XHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3Ni17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDc3Olx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3OC1cdGJvb2wgZmlyc3RfcmVnaXN0cmF0aW9uID0gZmFsc2U7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ4OC1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0ODk6XHRtdXRleF9sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDkwOlx0cmVnID0gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpbmQoZHBsbCwgb3BzLCBwcml2KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00OTEtXHRpZiAocmVnKSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDkyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00OTMtXHRcdHJldHVybiAtRUVYSVNUO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00OTctXHRpZiAoIXJlZykge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ5ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDk5LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTAyLVx0cmVnLVx1MDAzZXByaXYgPSBwcml2O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUwMzpcdGRwbGwtXHUwMDNldHlwZSA9IHR5cGU7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTA0Olx0X19kcGxsX2RldmljZV9ob2xkKGRwbGwsIFx1MDAyNnJlZy1cdTAwM2V0cmFja2VyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MDU6XHRmaXJzdF9yZWdpc3RyYXRpb24gPSBsaXN0X2VtcHR5KFx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUwNjpcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cmVnLVx1MDAzZWxpc3QsIFx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUwNy1cdGlmICghZmlyc3RfcmVnaXN0cmF0aW9uKSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTA4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MDktXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTEtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTEyOlx0eGFfc2V0X21hcmsoXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIGRwbGwtXHUwMDNlaWQsIERQTExfUkVHSVNURVJFRCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTEzOlx0ZHBsbF9kZXZpY2VfY3JlYXRlX250ZihkcGxsKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MTQ6XHRtdXRleF91bmxvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTUtXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxNy19XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTE4OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTktXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTIwLS8qKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyMTogKiBkcGxsX2RldmljZV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBkcGxsIGRldmljZVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyMjogKiBAZHBsbDogcmVnaXN0ZXJlZCBkcGxsIHBvaW50ZXJcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MjM6ICogQG9wczogb3BzIGZvciBhIGRwbGwgZGV2aWNlXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTI0LSAqIEBwcml2OiBwb2ludGVyIHRvIHByaXZhdGUgaW5mb3JtYXRpb24gb2Ygb3duZXJcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTI3LSAqIE5vdGU6IEl0IGRvZXMgbm90IGZyZWUgdGhlIG1lbW9yeVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyODogKiBDb250ZXh0OiBBY3F1aXJlcyBhIGxvY2sgKGRwbGxfbG9jaylcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MjktICovXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTMwOnZvaWQgZHBsbF9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTMxOlx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTMyLXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MzM6XHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTM0LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzNTpcdG11dGV4X2xvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MzY6XHRBU1NFUlRfRFBMTF9SRUdJU1RFUkVEKGRwbGwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzNzpcdGRwbGxfZGV2aWNlX2RlbGV0ZV9udGYoZHBsbCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTM4Olx0cmVnID0gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpbmQoZHBsbCwgb3BzLCBwcml2KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MzktXHRpZiAoV0FSTl9PTighcmVnKSkge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU0MDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTQxLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU0My1cdGxpc3RfZGVsKFx1MDAyNnJlZy1cdTAwM2VsaXN0KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NDQ6XHRfX2RwbGxfZGV2aWNlX3B1dChkcGxsLCBcdTAwMjZyZWctXHUwMDNldHJhY2tlcik7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTQ1LVx0a2ZyZWUocmVnKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NDYtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTQ3Olx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpKSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTQ4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NDktXHRcdHJldHVybjtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NTAtXHR9XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTUxOlx0eGFfY2xlYXJfbWFyayhcdTAwMjZkcGxsX2RldmljZV94YSwgZHBsbC1cdTAwM2VpZCwgRFBMTF9SRUdJU1RFUkVEKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NTI6XHRtdXRleF91bmxvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NTMtfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU1NDpFWFBPUlRfU1lNQk9MX0dQTChkcGxsX2RldmljZV91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NTUtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTU2OnN0YXRpYyBpbnQgZHBsbF9waW5faWR4X2FsbG9jKHUzMiAqcGluX2lkeClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NTcte1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NjMtXHQvKiBBbGxvYyB1bmlxdWUgbnVtYmVyIGZyb20gSURBLiBOdW1iZXIgYmVsb25ncyB0byBcdTAwM2MwLCBJTlRfTUFYXHUwMDNlIHJhbmdlICovXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTY0Olx0cmV0ID0gaWRhX2FsbG9jKFx1MDAyNmRwbGxfcGluX2lkeF9pZGEsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU2NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU3My1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NzQ6c3RhdGljIHZvaWQgZHBsbF9waW5faWR4X2ZyZWUodTMyIHBpbl9pZHgpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTc1LXtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTgyLVx0cGluX2lkeCAtPSAodTMyKUlOVF9NQVggJiM0MzsgMTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1ODM6XHRpZGFfZnJlZShcdTAwMjZkcGxsX3Bpbl9pZHhfaWRhLCBwaW5faWR4KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01ODQtfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU4NS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1ODY6c3RhdGljIHZvaWQgZHBsbF9waW5fcHJvcF9mcmVlKHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpwcm9wKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU4Ny17XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU5My1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1OTQ6c3RhdGljIGludCBkcGxsX3Bpbl9wcm9wX2R1cChjb25zdCBzdHJ1Y3QgZHBsbF9waW5fcHJvcGVydGllcyAqc3JjLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU5NTpcdFx0XHQgICAgIHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpkc3QpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTk2LXtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjM1LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYzNjpzdGF0aWMgc3RydWN0IGRwbGxfcGluICpcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2Mzc6ZHBsbF9waW5fYWxsb2ModTY0IGNsb2NrX2lkLCB1MzIgcGluX2lkeCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYzODpcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fcHJvcGVydGllcyAqcHJvcClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02Mzkte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY0MDpcdHN0cnVjdCBkcGxsX3BpbiAqcGluO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY0MS1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY0My1cdGlmIChwaW5faWR4ID09IERQTExfUElOX0lEWF9VTlNQRUMpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NDQ6XHRcdHJldCA9IGRwbGxfcGluX2lkeF9hbGxvYyhcdTAwMjZwaW5faWR4KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NDUtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY2My1cdH1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NjQ6XHRyZXQgPSBkcGxsX3Bpbl9wcm9wX2R1cChwcm9wLCBcdTAwMjZwaW4tXHUwMDNlcHJvcCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjY1LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjY3LVx0cmVmY291bnRfc2V0KFx1MDAyNnBpbi1cdTAwM2VyZWZjb3VudCwgMSk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NjY4Olx0eGFfaW5pdF9mbGFncyhcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBYQV9GTEFHU19BTExPQyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjY5LVx0eGFfaW5pdF9mbGFncyhcdTAwMjZwaW4tXHUwMDNlcGFyZW50X3JlZnMsIFhBX0ZMQUdTX0FMTE9DKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzAtXHR4YV9pbml0X2ZsYWdzKFx1MDAyNnBpbi1cdTAwM2VyZWZfc3luY19waW5zLCBYQV9GTEFHU19BTExPQyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NjcxOlx0cmV0ID0geGFfYWxsb2NfY3ljbGljKFx1MDAyNmRwbGxfcGluX3hhLCBcdTAwMjZwaW4tXHUwMDNlaWQsIHBpbiwgeGFfbGltaXRfMzJiLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3MjpcdFx0XHQgICAgICBcdTAwMjZkcGxsX3Bpbl94YV9pZCwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjczLVx0aWYgKHJldCBcdTAwM2MgMClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzQtXHRcdGdvdG8gZXJyX3hhX2FsbG9jO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3NTpcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNnBpbi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcJiMzNDtkcGxsX3BpblwmIzM0Oyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjc2LVx0cmV0dXJuIHBpbjtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzctZXJyX3hhX2FsbG9jOlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3ODpcdHhhX2Rlc3Ryb3koXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjc5LVx0eGFfZGVzdHJveShcdTAwMjZwaW4tXHUwMDNlcGFyZW50X3JlZnMpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY4MC1cdHhhX2Rlc3Ryb3koXHUwMDI2cGluLVx1MDAzZXJlZl9zeW5jX3BpbnMpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY4MTpcdGRwbGxfcGluX3Byb3BfZnJlZShcdTAwMjZwaW4tXHUwMDNlcHJvcCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjgyLWVycl9waW5fcHJvcDpcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjg0LWVycl9waW5fYWxsb2M6XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Njg1Olx0ZHBsbF9waW5faWR4X2ZyZWUocGluX2lkeCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjg2LVx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjg4LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY4OTpzdGF0aWMgdm9pZCBkcGxsX25ldGRldl9waW5fYXNzaWduKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4pXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5NzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBEUExMIE5ldGxpbmsgU3VwcG9ydCBpbiBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBkcGxsYCB0aGluZy4gUmlnaHQsIGBkcGxsYCBpcyBhIHN1YnN5c3RlbSwgYW5kIEkgcmVjYWxsIHNlZWluZyB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBpbiBgZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBkb2VzIFN5emthbGxlciBoYXZlIGFueSBkZXNjcmlwdGlvbnMgZm9yIGBkcGxsYCBuZXRsaW5rIGZ1bmN0aW9uYWxpdHk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGFscmVhZHkgY292ZXJlZC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHR5cGljYWwgcGxhY2VzLiBMZXQmIzM5O3Mgc2VlLCBtYXliZSBpdCYjMzk7cyBpbiBgbmV0L2RwbGxgIG9yIHBvc3NpYmx5IGBkcml2ZXJzL2RwbGwvZHBsbF9ubC5jYC4gQWhhISBGb3VuZCBgZHBsbF9ubC5jYCwgdGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBTeXprYWxsZXIgaW5mcmFzdHJ1Y3R1cmUuIERvZXMgU3l6a2FsbGVyIGtub3cgYWJvdXQgdGhpcyBgZHBsbGAgbmV0bGluayBpbnRlcmZhY2U/IEkmIzM5O2xsIHNlYXJjaCB0aGUgYHN5cy9saW51eC9gIGRpcmVjdG9yeSB3aXRoaW4gU3l6a2FsbGVyIGZvciBhbnkgcmVsZXZhbnQgZGVmaW5pdGlvbnMsIGxvb2tpbmcgZm9yIGFueXRoaW5nIG5hbWVkIGBkcGxsYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzgxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFBMTCBGdXp6aW5nIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBJIG5lZWQgdG8gcmVjYWxpYnJhdGUgaGVyZS4gSSYjMzk7bSBkZWVwIGluIHRoZSBrZXJuZWwgdHJlZSwgbm90IHRoZSBzeXprYWxsZXIgcmVwb3NpdG9yeS4gVGhhdCBjaGFuZ2VzIHRoaW5nczsgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHN5emthbGxlciYjMzk7cyBpbnRlcm5hbHMgcmlnaHQgbm93LiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHNlZSBpZiB0aGUgYGRwbGxgIG5ldGxpbmsgZmFtaWx5IGlzIGV2ZW4gdGFyZ2V0ZWQuIEkgY2FuIGNoZWNrIHRoaXMgYnkgdmVyaWZ5aW5nIHRoZSBleGlzdGVuY2Ugb2YgYSBgZ2VubF9mYW1pbHlgIGVudHJ5IGZvciBgZHBsbGAuIFl1cCwgaXQmIzM5O3MgYSBHZW5lcmljIE5ldGxpbmsgZmFtaWx5LCB3aGljaCBtZWFucyBzeXprYWxsZXImIzM5O3MgYGdlbmV0bGlua2AgZnV6emVyICpzaG91bGQqIGF1dG9tYXRpY2FsbHkgcGljayBpdCB1cCwgcHJvdmlkZWQgaXQmIzM5O3MgcmVnaXN0ZXJlZC4KClRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGB6bDMwNzN4YCAqZHJpdmVyKiBpcyByZWFjaGFibGUsIHdoaWNoIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZS4gSWYgdGhlIGRyaXZlciBmYWlscyB0byBwcm9iZSBzdWNjZXNzZnVsbHksIHRoZSBEUExMIGRldmljZSBhbmQgdGhlIFBUUCBjbG9jayB3b24mIzM5O3QgZ2V0IHJlZ2lzdGVyZWQuIFRoYXQgbWVhbnMgdGhlIG5ldGxpbmsgYW5kIFBUUCBpb2N0bHMgd29uJiMzOTt0IGV2ZW4gbWFrZSBpdCB0byB0aGUgZHJpdmVyJiMzOTtzIGNvZGUsIHNvIG5vIGZ1enppbmcgc3VjY2Vzcy4KCkFuZCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgdHJpY2t5LiBUaGF0IGRyaXZlciBpcyBoYXJkd2FyZS1zcGVjaWZpYywgcmVxdWlyaW5nIHNwZWNpZmljIEkyQy9TUEkgaGFyZHdhcmUuIEl0IGNoZWNrcyB0aGUgY2hpcCBJRCwgd2hpY2ggbWVhbnMgaXQgY2Fubm90IGJlIGVtdWxhdGVkIGVhc2lseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBTbyBmYXIsIG5vIGRpY2UuCgpXYWl0LCBpcyB0aGVyZSAqYW55KiByZW1vdGUgY2hhbmNlIHRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCB1c2luZyBgaTJjLXN0dWJgPyBQcmV2aW91c2x5LCBJIG5vdGVkIHRoYXQgYGkyYy1zdHViYCBvbmx5IGRlYWxzIHdpdGggOC1iaXQgcmVnaXN0ZXIgYWRkcmVzc2VzLCB3aGlsZSBgemwzMDczeGAgdXNlcyAxNi1iaXQgcmVnaXN0ZXJzLiBGb3JnZXQgYGkyYy1zdHViYC4KCkJ1dCB3YWl0LCBob2xkIG9uLiBJcyBgaTJjLXN0dWJgIHRoZSBvbmx5IG9wdGlvbj8gV2hhdCBhYm91dCBvdGhlciBwb3NzaWJpbGl0aWVzPyBUaGVyZSBhcmUgbm8gYGkyYy1tb2NrYCBvciBgc3BpLW1vY2tgIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIGB2a21zYCBpcyBmb3IgRFJNOyB3cm9uZyBkb21haW4uIGBtYWM4MDIxMV9od3NpbWAgaXMgZm9yIFdpRmksIGlycmVsZXZhbnQuIEFuZCBgbmV0ZGV2c2ltYCBpcyBmb3IgbmV0d29ya2luZywgYWxzbyBub3QgcmVsZXZhbnQuCgpXaGF0IGFib3V0IGBkcGxsYCBpdHNlbGY/IERvZXMgdGhlIGBkcGxsYCBwYXJ0IGhhdmUgYW55IGtpbmQgb2Ygc2ltdWxhdG9yIG9yIG1vY2tpbmcgY2FwYWJpbGl0eT8gTGV0JiMzOTtzIGludmVzdGlnYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIERQTEwgc2ltdWxhdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsLipzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTU3NT1mb3IgZWFjaCBjYWxsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzIG9ubHkgdGhlIG9iamVjdCByZWZjb3VudFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0OjU3NjppbmNyZWFzZXMuIEFsc28gZHBsbF9waW5fcHV0KCkgd29ya3Mgc2ltaWxhcmx5IHRvIGRwbGxfZGV2aWNlX3B1dCgpLlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzNzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVbnJlYWNoYWJsZSBDb2RlIFBhdGgqKgoKT2theSwgc28gdGhlcmUmIzM5O3Mgbm8gRFBMTCBzaW11bGF0b3IgYXZhaWxhYmxlLCB3aGljaCBpcyBpbW1lZGlhdGVseSBhIHJvYWRibG9jay4gVGhpcyBgemwzMDczeGAgZHJpdmVyIGlzIGNsZWFybHkgaGFyZHdhcmUtc3BlY2lmaWMsIG1lYW5pbmcgSSYjMzk7bSBub3QgZ29pbmcgdG8gZ2V0IGFueXdoZXJlIHdpdGggcHJvYmluZyBpdCB3aXRob3V0IHRoZSBhY3R1YWwgc2lsaWNvbiBvciBhIGhpZ2hseSBzcGVjaWZpYyBlbXVsYXRvci4gSXQmIzM5O3MgYSBkZWFkIGVuZCBpbiBlbnZpcm9ubWVudHMgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBsaW1pdGF0aW9uIGZvciB0ZXN0aW5nIHRoZXNlIG1vZGlmaWNhdGlvbnMuCgpOb3csIGhvbGQgb24uLi4gaXMgdGhlcmUgZXZlbiBhICpyZW1vdGUqIGNoYW5jZSB0aGF0IHRoZSBkcml2ZXImIzM5O3MgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZGlyZWN0bHkgYnkgc29tZXRoaW5nIGVsc2UsIHNvbWUgb3RoZXIgcGllY2Ugb2YgY29kZSB0aGF0ICppcyogcmVhY2hhYmxlPyBObywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIGl04oCZcyBhIHN0YW5kYWxvbmUgZHJpdmVyLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IG1lY2hhbmlzbSwgZXZlbiBvYnNjdXJlLCB0byBieXBhc3MgdGhhdCBkYW1uIGNoaXAgSUQgY2hlY2suIFBlcmhhcHMgdGhlcmUmIzM5O3MgYSBtb2R1bGUgcGFyYW1ldGVyIGhpZGRlbiBzb21ld2hlcmUgdGhhdCBmb3JjZXMgdGhlIGRyaXZlciB0byBsb2FkIHJlZ2FyZGxlc3MuIEdvdHRhIGludmVzdGlnYXRlIHRoYXQgcG9zc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BhcmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTc0NgoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiA4MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzIC0gQXp1cml0ZSBEUExMIERyaXZlcioqCgpPa2F5LCBubyBtb2R1bGUgcGFyYW1ldGVycyB0byBtYW5pcHVsYXRlIHRoaW5ncyBoZXJlLiBJcyB0aGVyZSBldmVuIGEgZGVidWdmcyBpbnRlcmZhY2UsIGFueXRoaW5nLCB0byBpbmplY3QgYSBmYWtlIGNoaXAgSUQ/IE5vcGUuIFNvLCB0aGUgcHJvYmUgd2lsbCBkZWZpbml0ZWx5IGZhaWwgaWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LgoKV2FpdCwgdGhlIHByb21wdOKApiByaWdodCwgaXQgc2F5cyAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIGl0JiMzOTtzIGp1c3QgZG9jcywgS2NvbmZpZywgY29tbWVudHMsIGxvZ2dpbmcsIGRlY29yYXRpdmUgY2hhbmdlcywgb3IgbnVtZXJpYyBjb25zdGFudHMgdGhhdCBkb24mIzM5O3QgY2hhbmdlIGZsb3csIG9y4oCmIGFuZCB0aGlzIGlzIGtleeKApiAqY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyouCgpUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBNaWNyb2NoaXAmIzM5O3MgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzLCB1c2luZyBJMkMvU1BJLiBJdCAqc3RyaWN0bHkqIGNoZWNrcyB0aGUgY2hpcCBJRCBkdXJpbmcgdGhlIHByb2JlLiBUaGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSB0aGF0IEkga25vdyBvZiwgdW5saWtlLCBzYXksIHRoZSBtYWM4MDIxMSBzdHVmZi4gR2VuZXJpYyBJMkMgbW9ja3MgY2FuJiMzOTt0IHNpbXVsYXRlIHRoZSByZWdpc3RlciBhZGRyZXNzaW5nIGVpdGhlci4gU28sIGl0JiMzOTtzICppbXBvc3NpYmxlKiB0byByZWFjaCB0aGlzIGNvZGUgaW4gUUVNVSwgR0NFLCBvciBhbnl0aGluZyBsaWtlIHRoYXQuIFRoZSBwcm9iZSAqd2lsbCogZmFpbC4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgZGVmaW5pdGUgV29ydGhGdXp6aW5nPWZhbHNlIHNpdHVhdGlvbi4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLiBJcyB0aGVyZSAqYW55KiBvdGhlciB3YXkgdG8gZ2V0IHRvIHRoaXM/IENvdWxkIHRoZSBQVFAgY2xvY2sgc29tZWhvdyBiZSByZWdpc3RlcmVkICp3aXRob3V0KiB0aGUgcHJvYmUgc3VjY2VlZGluZz8gTm8uIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYCBpcyBjYWxsZWQgZnJvbSBgemwzMDczeF9kcGxsX3JlZ2lzdGVyYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHpsMzA3M3hfZGV2bV9kcGxsX2luaXRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgemwzMDczeF9kZXZfcHJvYmVgLiBIbW0uIENvdWxkIGB6bDMwNzN4X2Rldl9wcm9iZWAgYmUgY2FsbGVkIGZyb20gKnNvbWV3aGVyZSBlbHNlKj8gQWgsIGl0JiMzOTtzIGV4cG9ydGVkIGFzIGB6bDMwNzN4X2Rldl9wcm9iZWAsIGJ1dCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBieSBgemwzMDczeF9pMmNfcHJvYmVgIGFuZCBgemwzMDczeF9zcGlfcHJvYmVgLiBTbyBpdCYjMzk7cyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgY29udGV4dC4KCk9rYXksIGxldCBtZSBxdWlja2x5IG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIHNuZWFreSBsaXR0bGUgY2FsbCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uCgpGaWxlcyBtb2RpZmllZDoKYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhgCkFsbCBvZiB0aGVtIGFyZSBpbnNpZGUgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AuIEdvb2QsIGFsbCBuZWF0bHkgY29udGFpbmVkIHdpdGhpbiB0aGF0IGRyaXZlci4KCkFscmlnaHQsIEkmIzM5O20gc2V0dGluZyBXb3J0aEZ1enppbmc9ZmFsc2UgYW5kIGNyYWZ0aW5nIGEgc29saWQgcmVhc29uaW5nIHN0YXRlbWVudC4KClRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoYHpsMzA3M3hgKS4gSXQmIzM5O3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBJMkMvU1BJIGRyaXZlci4gRHVyaW5nIGluaXRpYWxpemF0aW9uIChgemwzMDczeF9kZXZfcHJvYmVgKSwgdGhlIGRyaXZlciBzdHJpY3RseSByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIGhhcmR3YXJlIGNoaXAgSUQgKGBaTF9SRUdfSURgKS4gU2luY2UgdGhlcmUmIzM5O3MgKm5vKiBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiB0aGUga2VybmVsLCBhbmQgdGhlIGdlbmVyaWMgSTJDIG1vY2tzIGRvbiYjMzk7dCBzdXBwb3J0IHRoZSAxNi1iaXQgYWRkcmVzc2luZywgdGhlIHByb2JlIHdpbGwgKmFsd2F5cyogZmFpbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgYW5kIFBUUCBkZXZpY2VzIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZC4gSXQmIzM5O3MgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiB0aGUgbW9kaWZpZWQgY29kZS4KCk5vdyB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgSTJDL1NQSSBkcml2ZXIuIER1cmluZyBpbml0aWFsaXphdGlvbiAoemwzMDczeF9kZXZfcHJvYmUpLCB0aGUgZHJpdmVyIHN0cmljdGx5IHJlYWRzIGFuZCB2ZXJpZmllcyB0aGUgaGFyZHdhcmUgY2hpcCBJRCAoWkxfUkVHX0lEKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gdGhlIGtlcm5lbCwgYW5kIGdlbmVyaWMgSTJDIG1vY2tzIGxpa2UgaTJjLXN0dWIgZG8gbm90IHN1cHBvcnQgdGhlIDE2LWJpdCByZWdpc3RlciBhZGRyZXNzaW5nIHJlcXVpcmVkIGJ5IHRoaXMgZHJpdmVyLCB0aGUgcHJvYmUgZnVuY3Rpb24gd2lsbCBhbHdheXMgZmFpbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgRFBMTCBhbmQgUFRQIGRldmljZXMgd2lsbCBuZXZlciBiZSByZWdpc3RlcmVkLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIEkyQy9TUEkgZHJpdmVyLiBEdXJpbmcgaW5pdGlhbGl6YXRpb24gKHpsMzA3M3hfZGV2X3Byb2JlKSwgdGhlIGRyaXZlciBzdHJpY3RseSByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIGhhcmR3YXJlIGNoaXAgSUQgKFpMX1JFR19JRCkuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIHRoZSBrZXJuZWwsIGFuZCBnZW5lcmljIEkyQyBtb2NrcyBsaWtlIGkyYy1zdHViIGRvIG5vdCBzdXBwb3J0IHRoZSAxNi1iaXQgcmVnaXN0ZXIgYWRkcmVzc2luZyByZXF1aXJlZCBieSB0aGlzIGRyaXZlciwgdGhlIHByb2JlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGZhaWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgYW5kIFBUUCBkZXZpY2VzIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NTguNjY1NzA4MjQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNjA0MDE4MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBJMkMvU1BJIGRyaXZlci4gRHVyaW5nIGluaXRpYWxpemF0aW9uICh6bDMwNzN4X2Rldl9wcm9iZSksIHRoZSBkcml2ZXIgc3RyaWN0bHkgcmVhZHMgYW5kIHZlcmlmaWVzIHRoZSBoYXJkd2FyZSBjaGlwIElEIChaTF9SRUdfSUQpLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiB0aGUga2VybmVsLCBhbmQgZ2VuZXJpYyBJMkMgbW9ja3MgbGlrZSBpMmMtc3R1YiBkbyBub3Qgc3VwcG9ydCB0aGUgMTYtYml0IHJlZ2lzdGVyIGFkZHJlc3NpbmcgcmVxdWlyZWQgYnkgdGhpcyBkcml2ZXIsIHRoZSBwcm9iZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyBmYWlsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIGFuZCBQVFAgZGV2aWNlcyB3aWxsIG5ldmVyIGJlIHJlZ2lzdGVyZWQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NTguNjY1NzE0OTQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjUyNDg4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YTYwMGExYmQ2NWEyMWY0NzRkYmVjZjllZTZkOWRiNzNlYjgyODA4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDEzIDEzOjM2OjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuaW5kZXggNWJiY2ExNDAwNTgxMzEuLmQwNTc0YWQ1NzFkM2ZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuQEAgLTIsNyArMiw3IEBAXFxuIFxcbiBjb25maWcgWkwzMDczWFxcbiBcXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuLVxcdGRlcGVuZHMgb24gTkVUXFxuK1xcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuIFxcdHNlbGVjdCBEUExMXFxuIFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiBcXHRzZWxlY3QgUkVHTUFQXFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcXG4gXFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiBcXHR0cmlzdGF0ZSBcXFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tXFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUXFxuK1xcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiBcXHRzZWxlY3QgUkVHTUFQX0kyQ1xcbiBcXHRzZWxlY3QgWkwzMDczWFxcbiBcXHRoZWxwXFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXFxuIFxcbiBjb25maWcgWkwzMDczWF9TUElcXG4gXFx0dHJpc3RhdGUgXFxcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLVxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSVxcbitcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUEkgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gXFx0c2VsZWN0IFJFR01BUF9TUElcXG4gXFx0c2VsZWN0IFpMMzA3M1hcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2OC4uNTMwMzJlNzgyZmQ0YWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG5AQCAtMjAyLDYgKzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiBcXHRcXHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcXG4gXFx0XFx0emwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTtcXG4gXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4gXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4gXFxuIFxcdC8qIFJlYWQgRFBMTCBjb25maWd1cmF0aW9uIGZyb20gbWFpbGJveCAqL1xcbkBAIC0yMzQsNiArMjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXFxuIFxcdHJldHVybiBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICpcXG4rICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXFxuKyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xcbitcXHR1OCB0b2RfY3RybDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXFx1MDAyNnRvZF9jdHJsKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XFxuK1xcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xcbitcXG4rXFx0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXFxuKyAqXFxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcXG4rICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxcbit7XFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSB0aGUgcmVzdWx0XFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4re1xcbitcXHR1MzIgbnNlYztcXG4rXFx0dTY0IHNlYztcXG4rXFx0dTggY21kO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAobmV4dF9oeilcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXFx1MDAyNnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFxcdTAwMjZuc2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHR0cy1cXHUwMDNldHZfc2VjID0gc2VjO1xcbitcXHR0cy1cXHUwMDNldHZfbnNlYyA9IG5zZWM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAdHM6IHRpbWUgdG8gc2V0XFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxcbit7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXFxuK1xcdFxcdFxcdFxcdCAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcXG4rICpcXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXFxuKyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxcbisgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjay5cXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXFx1MDAyNnRzX25leHQsIE5VTEwpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXFx1MDAyNnRzX2N1ciwgTlVMTCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogSWYgdG9vIGNsb3NlIHRvIChvciBwYXN0KSB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQgKi9cXG4rXFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XFxuK1xcdGlmIChkaWZmLnR2X3NlYyBcXHUwMDNjIDAgfHwgKCFkaWZmLnR2X3NlYyBcXHUwMDI2XFx1MDAyNiBkaWZmLnR2X25zZWMgXFx1MDAzYyB0aHJlc2hvbGRfbnMpKSB7XFxuK1xcdFxcdGlmICghZGlmZi50dl9zZWMgXFx1MDAyNlxcdTAwMjYgZGlmZi50dl9uc2VjKVxcbitcXHRcXHRcXHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyArIDEpO1xcbitcXHRcXHR0c19uZXh0LnR2X3NlYysrO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi9cXG4rXFx0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcXG4rXFx0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFxcdTAwMjZ0c19uZXh0KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBXcml0ZSBhZGp1c3RlZCBUb0QgYmFjayBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0emxkZXYtXFx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKy0xcylcXG4rICpcXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXFxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxcbit7XFxuK1xcdHM2NCB0aWVfZGF0YTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xcbitcXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXFxuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxcbisgKlxcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdCAgICBib29sIHRvZF9zdGVwKVxcbit7XFxuK1xcdHU4IGN0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXFxuK1xcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcXG4rXFx0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcXG4rXFx0aWYgKHRvZF9zdGVwKVxcbitcXHRcXHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbmluZGV4IGRjOWM2ZDk1YmRlZTc1Li45ZGM1YTNmMTk5MWYxMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG5AQCAtNSwxMCArNSwxMiBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGRkZWYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWU2NC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJyZWdzLmhcXFwiXFxuIFxcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XFxuIHN0cnVjdCB6bDMwNzN4X2RldjtcXG4gXFxuIC8qKlxcbkBAIC0xNiw2ICsxOCw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldjtcXG4gICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxcbiAgKiBAbW9kZV9yZWZzZWw6IG1vZGUgYW5kIHJlZmVyZW5jZSBzZWxlY3Rpb24gcmVnaXN0ZXIgdmFsdWVcXG4gICogQHJlZl9wcmlvOiByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzICg0IGJpdHMgcGVyIHJlZiwgUC9OIHBhY2tlZClcXG4rICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrXFxuICAqIEBtb25fc3RhdHVzOiBtb25pdG9yIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxcbiAgKiBAcmVmc2VsX3N0YXR1czogcmVmZXJlbmNlIHNlbGVjdGlvbiBzdGF0dXMgcmVnaXN0ZXIgdmFsdWVcXG4gICogQGRmX29mZnNldDogZnJlcXVlbmN5IG9mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZSBpbiAyXi00OCBzdGVwc1xcbkBAIC0yNiw2ICsyOSw5IEBAIHN0cnVjdCB6bDMwNzN4X2NoYW4ge1xcbiBcXHRcXHR1OFxcdG1vZGVfcmVmc2VsO1xcbiBcXHRcXHR1OFxcdHJlZl9wcmlvW1pMMzA3M1hfTlVNX1JFRlMgLyAyXTtcXG4gXFx0KTtcXG4rXFx0c3RydWN0X2dyb3VwKGludiwgLyogSW52YXJpYW50cyAqL1xcbitcXHRcXHR1MTZcXHRvdXRfc3RlcF90aW1lX21hc2s7XFxuK1xcdCk7XFxuIFxcdHN0cnVjdF9ncm91cChzdGF0LFxcbiBcXHRcXHR1OFxcdG1vbl9zdGF0dXM7XFxuIFxcdFxcdHU4XFx0cmVmc2VsX3N0YXR1cztcXG5AQCAtNDIsNiArNDgsMjAgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbiBcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xcbitcXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbkBAIC0yMDAsNiArMjIwLDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuIFxcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXFxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4rICpcXG4rICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbit7XFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XFxuK1xcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuQEAgLTIzMyw0ICsyNjgsMTcgQEAgc3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4gXFx0cmV0dXJuIEZJRUxEX0dFVChaTF9EUExMX1JFRlNFTF9TVEFUVVNfUkVGU0VMLCBjaGFuLVxcdTAwM2VyZWZzZWxfc3RhdHVzKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuKyAqIEBvdXQ6IG91dHB1dCBpbmRleFxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4remwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG91dClcXG4re1xcbitcXHRyZXR1cm4gISEoY2hhbi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFxcdTAwMjYgQklUKG91dCkpO1xcbit9XFxuK1xcbiAjZW5kaWYgLyogX1pMMzA3M1hfQ0hBTl9IICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbmluZGV4IDdmNWFmYWFhZTYzNDJmLi5iMmY5ZmM5N2ZkMWI2OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5AQCAtMTAzMyw2ICsxMDMzLDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cXG4gXFx0ICovXFxuIFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4rXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXFxuaW5kZXggNzhkYzIwOGYzZWVhMmEuLjJkYzgzNmQwYzhmNmIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXFx0XFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXFx0KDUwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1xcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXFxuIFxcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xcbiBcXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XFxuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXFxuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXFxuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXFxuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXFxuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xcbkBAIC03MSw2ICs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHRcXHQqcmVnbWFwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cXHQqaW5mbztcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0bXVsdGlvcF9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHR0aWVfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGhhc2Vfc3RlcF9sb2NrO1xcbiBcXG4gXFx0LyogSW52YXJpYW50cyAqL1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWZcXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xcbmluZGV4IGQ5MWY1MmI1OGVhZTM0Li43YzExZGUzNTgyMWFlYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG5AQCAtMTQsNiArMTUsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3ByaW50Zi5oXFx1MDAzZVxcbiBcXG5AQCAtNDIsNiArNDQsNyBAQFxcbiAgKiBAcGhhc2Vfb2Zmc2V0OiBsYXN0IHNhdmVkIHBpbiBwaGFzZSBvZmZzZXRcXG4gICogQGZyZXFfb2Zmc2V0OiBsYXN0IHNhdmVkIGZyYWN0aW9uYWwgZnJlcXVlbmN5IG9mZnNldFxcbiAgKiBAbWVhc3VyZWRfZnJlcTogbGFzdCBzYXZlZCBtZWFzdXJlZCBmcmVxdWVuY3lcXG4rICogQHBlcm91dF9pZHg6IFBUUCBwZXJvdXQgY2hhbm5lbCBpbmRleCwgb3IgLTEgaWYgbm90IHBlcm91dC1lbGlnaWJsZVxcbiAgKi9cXG4gc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG5AQCAtNTksNiArNjIsNyBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7XFxuIFxcdHM2NFxcdFxcdFxcdHBoYXNlX29mZnNldDtcXG4gXFx0czY0XFx0XFx0XFx0ZnJlcV9vZmZzZXQ7XFxuIFxcdHUzMlxcdFxcdFxcdG1lYXN1cmVkX2ZyZXE7XFxuK1xcdHM4XFx0XFx0XFx0cGVyb3V0X2lkeDtcXG4gfTtcXG4gXFxuIC8qXFxuQEAgLTkzNiwyMSArOTQwLDE3IEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4gfVxcbiBcXG4gc3RhdGljIGludFxcbi16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxcbi1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbitfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgZnJlcXVlbmN5KVxcbiB7XFxuLVxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG4gXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XFxuIFxcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcXG4gXFx0dTMyIG5ld19kaXYsIHN5bnRoX2ZyZXE7XFxuIFxcdHN0cnVjdCB6bDMwNzN4X291dCBvdXQ7XFxuIFxcdHU4IG91dF9pZDtcXG4gXFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cXHUwMDNlaWQpO1xcbiBcXHRvdXQgPSAqemwzMDczeF9vdXRfc3RhdGVfZ2V0KHpsZGV2LCBvdXRfaWQpO1xcbkBAIC0xMDExLDYgKzEwMTEsMjEgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbiBcXHRyZXR1cm4gemwzMDczeF9vdXRfc3RhdGVfc2V0KHpsZGV2LCBvdXRfaWQsIFxcdTAwMjZvdXQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50XFxuK3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbl9wcml2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZnJlcXVlbmN5KTtcXG4rfVxcbitcXG4gc3RhdGljIGludFxcbiB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuIFxcdFxcdFxcdFxcdFxcdCB2b2lkICpwaW5fcHJpdixcXG5AQCAtMTYwOCw2ICsxNjIzLDcgQEAgemwzMDczeF9kcGxsX3Bpbl9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcixcXG4gXFx0cGluLVxcdTAwM2VkcGxsID0gemxkcGxsO1xcbiBcXHRwaW4tXFx1MDAzZWRpciA9IGRpcjtcXG4gXFx0cGluLVxcdTAwM2VpZCA9IGlkO1xcbitcXHRwaW4tXFx1MDAzZXBlcm91dF9pZHggPSAtMTtcXG4gXFxuIFxcdHJldHVybiBwaW47XFxuIH1cXG5AQCAtMTYyNiw2ICsxNjQyLDQ0IEBAIHpsMzA3M3hfZHBsbF9waW5fZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluKVxcbiBcXHRrZnJlZShwaW4pO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQgLSBjaGVjayBpZiBvdXRwdXQgcGluIGlzIHBlcm91dC1lbGlnaWJsZVxcbisgKiBAcGluOiBEUExMIHBpbiB0byBjaGVja1xcbisgKiBAcHJvcHM6IHBpbiBwcm9wZXJ0aWVzIChhbHJlYWR5IGZldGNoZWQgYnkgY2FsbGVyKVxcbisgKlxcbisgKiBBbiBvdXRwdXQgcGluIGlzIGVsaWdpYmxlIGZvciBQVFAgcGVyaW9kaWMgb3V0cHV0IGlmIGl0IGlzIHNpbmdsZS1lbmRlZFxcbisgKiAobm90IGRpZmZlcmVudGlhbCkgYW5kIHN1cHBvcnRzIDEgSHogaW4gaXRzIGZyZXF1ZW5jeSBsaXN0LlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgZWxpZ2libGUsIGZhbHNlIG90aGVyd2lzZVxcbisgKi9cXG4rc3RhdGljIGJvb2xcXG4remwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfcGluX3Byb3BzICpwcm9wcylcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBwaW4tXFx1MDAzZWRwbGw7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdHU4IG91dF9pZDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXFx1MDAzZWlkKTtcXG4rXFx0aWYgKHpsMzA3M3hfZGV2X291dF9pc19kaWZmKHpsZHBsbC1cXHUwMDNlZGV2LCBvdXRfaWQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdGlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9wcy1cXHUwMDNlZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZF9udW07IGkrKykge1xcbitcXHRcXHRpZiAocHJvcHMtXFx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRbaV0ubWluID09IDEpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBwaW5cXG4gICogQHBpbjogcG9pbnRlciB0byBEUExMIHBpblxcbkBAIC0xNjY3LDYgKzE3MjEsOCBAQCB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sIHUzMiBpbmRleClcXG4gXFx0XFx0aWYgKHBpbi1cXHUwMDNlcHJpbyA9PSBaTF9EUExMX1JFRl9QUklPX05PTkUpXFxuIFxcdFxcdFxcdC8qIENsYW1wIHByaW8gdG8gbWF4IHZhbHVlICovXFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlcHJpbyA9IFpMX0RQTExfUkVGX1BSSU9fTUFYO1xcbitcXHR9IGVsc2UgaWYgKHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHBpbiwgcHJvcHMpKSB7XFxuK1xcdFxcdHBpbi1cXHUwMDNlcGVyb3V0X2lkeCA9IHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubl9wZXJfb3V0Kys7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIENyZWF0ZSBvciBnZXQgZXhpc3RpbmcgRFBMTCBwaW4gKi9cXG5AQCAtMTg5Nyw2ICsxOTUzLDggQEAgemwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHR1OCBpZCwgaW5kZXg7XFxuIFxcdGludCByYztcXG4gXFxuK1xcdHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubl9wZXJfb3V0ID0gMDtcXG4rXFxuIFxcdC8qIFByb2Nlc3MgaW5wdXQgcGlucyAqL1xcbiBcXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXFx1MDAzYyBaTDMwNzNYX05VTV9QSU5TOyBpbmRleCsrKSB7XFxuIFxcdFxcdC8qIEZpcnN0IGlucHV0IHBpbnMgYW5kIHRoZW4gb3V0cHV0IHBpbnMgKi9cXG5AQCAtMjI4MCw0NSArMjMzOCw0NDcgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbisvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiArLTElIG9mIG5vbWluYWwgaW4gcHBiICovXFxuKyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXFx0MTAwMDAwMDBcXG4rXFxuIC8qKlxcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xcbiAgKlxcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcXG4gICpcXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuICAqL1xcbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcXG4temwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbiB7XFxuLVxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4gXFxuLVxcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xcbi1cXHRpZiAoIXpsZHBsbClcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdHpsZHBsbC1cXHUwMDNlZGV2ID0gemxkZXY7XFxuLVxcdHpsZHBsbC1cXHUwMDNlaWQgPSBjaDtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucyk7XFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCAqdHMpO1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gemxkcGxsO1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsXFxuKyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcXG4rICpcXG4rICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aFxcbisgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXFxuKyAqXFxuKyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcXG4rICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xcbisgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGVcXG4rICogbG93ZXN0LUlEIHN5bnRoJ3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBubyBzeW50aHMgYXZhaWxhYmxlLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzNjQgZGVsdGEpXFxuK3tcXG4rXFx0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcXG4rXFx0dTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwO1xcbitcXHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XFxuK1xcdHMzMiBzdGVwX2N5Y2xlcztcXG4rXFx0dTMyIHN5bnRoX2ZyZXE7XFxuK1xcdGludCByYztcXG4rXFx0dTggaTtcXG4rXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zLCBsaXN0KSB7XFxuK1xcdFxcdHU4IG91dF9pZCwgc3ludGhfaWQ7XFxuK1xcbitcXHRcXHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cXHUwMDNlaWQpO1xcbitcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY2hhbiwgb3V0X2lkKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XFxuK1xcdFxcdGlmIChzeW50aF9pZCBcXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oemxkZXYtXFx1MDAzZWRldiwgXFxcIlVuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgb3V0X2lkKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpKyspIHtcXG4rXFx0XFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XFxuK1xcdFxcdGlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fFxcbitcXHRcXHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVxcdTAwM2VpZClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XFxuK1xcbitcXHRcXHQvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cXG4rXFx0XFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRcXHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcXG4rXFxuK1xcdFxcdGlmICghc3ludGhfbWFza1tpXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIXRvZF9zdGVwcGVkKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdGlmICh0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHR9XFxuK1xcdFxcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcXG4rXFx0ICogbG93ZXN0LUlEIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXRvZF9zdGVwcGVkKSB7XFxuK1xcdFxcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XFxuK1xcdFxcdHJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcXG4gICpcXG4tICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxcbisgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuXFxuKyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxcbisgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tdm9pZFxcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbiB7XFxuLVxcdFdBUk4oemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgXFxcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXFxcblxcXCIpO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdGJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xcbitcXHRpbnQgcmM7XFxuIFxcbi1cXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbi1cXHRrZnJlZSh6bGRwbGwpO1xcbitcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxcbitcXHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxcbitcXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxcbitcXHQgKi9cXG4rXFx0aWYgKGFicyhkZWx0YSkgXFx1MDAzZT0gTlNFQ19QRVJfU0VDKSB7XFxuK1xcdFxcdHMzMiByZW1haW5kZXI7XFxuK1xcbitcXHRcXHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcXHUwMDI2cmVtYWluZGVyKTtcXG4rXFx0XFx0dHMudHZfbnNlYyA9IDA7XFxuK1xcdFxcdGRlbHRhID0gcmVtYWluZGVyO1xcbitcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgdHMpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdHNlY19hZGp1c3RlZCA9IHRydWU7XFxuK1xcbitcXHRcXHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xcbitcXHRcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cXG4rXFx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xcbitcXHRcXHRpZiAoIXJjKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcXG4rXFx0ICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuXFxuK1xcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXFxuK1xcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XFxuK1xcdCAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHNlY19hZGp1c3RlZCkge1xcbitcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludFxcbit6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFx0czY0IG9mZnNldDtcXG4rXFxuK1xcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42XFxuK1xcdCAqXFxuK1xcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcXG4rXFx0ICovXFxuK1xcdG9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXFxuK1xcdFxcdHJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwO1xcbitcXHRpZiAob2Zmc2V0ID09IGNoYW4tXFx1MDAzZWRmX29mZnNldClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIG9mZnNldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXFxuKyAqXFxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxcbisgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24ndCBzdXBwb3J0IFRJRSwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcbitcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgZGVsdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgczMyXFxuK3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZClcXG4re1xcbitcXHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFdcXG4rXFx0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluIC0gZmluZCBwaW4gYnkgcGVyb3V0IGNoYW5uZWwgaW5kZXhcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsXFxuKyAqIEBpZHg6IHBlcm91dCBjaGFubmVsIGluZGV4IHRvIGZpbmRcXG4rICpcXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBwaW4sIG9yIE5VTEwgaWYgbm90IGZvdW5kXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKlxcbit6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3BpbihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGludCBpZHgpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zLCBsaXN0KSB7XFxuK1xcdFxcdGlmIChwaW4tXFx1MDAzZXBlcm91dF9pZHggPT0gaWR4KVxcbitcXHRcXHRcXHRyZXR1cm4gcGluO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlIC0gZW5hYmxlL2Rpc2FibGUgUFRQIGNsb2NrIGZ1bmN0aW9uc1xcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHJxOiB0aGUgcmVxdWVzdGVkIGNsb2NrIGZ1bmN0aW9uIGFuZCBwYXJhbWV0ZXJzXFxuKyAqIEBvbjogdHJ1ZSB0byBlbmFibGUsIGZhbHNlIHRvIGRpc2FibGVcXG4rICpcXG4rICogSGFuZGxlcyBQVFBfQ0xLX1JFUV9QRVJPVVQgcmVxdWVzdHMuIE9ubHkgMVBQUyAocGVyaW9kID0gMXMpIGlzIHN1cHBvcnRlZC5cXG4rICogT24gZW5hYmxlLCBjb25maWd1cmVzIHRoZSBvdXRwdXQgZGl2aWRlciBmb3IgMSBIei4gT24gZGlzYWJsZSwgZG9lcyBub3RoaW5nXFxuKyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJxLCBpbnQgb24pXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcXG4rXFx0dW5zaWduZWQgaW50IGlkeDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0aWYgKHJxLVxcdTAwM2V0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWR4ID0gcnEtXFx1MDAzZXBlcm91dC5pbmRleDtcXG4rXFx0aWYgKGlkeCBcXHUwMDNlPSBpbmZvLVxcdTAwM2VuX3Blcl9vdXQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogVG9nZ2xpbmcgb3V0cHV0IHBpbnMgY2FuIHByb2R1Y2UgcnVudCBwdWxzZXMsIHNvIGRpc2FibGVcXG4rXFx0ICogaXMgYSBuby1vcC5cXG4rXFx0ICovXFxuK1xcdGlmICghb24pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogT25seSBhY2NlcHQgZXhhY3RseSAxUFBTIChwZXJpb2Quc2VjID09IDEsIG5zZWMgPT0gMCkgKi9cXG4rXFx0aWYgKHJxLVxcdTAwM2VwZXJvdXQucGVyaW9kLnNlYyAhPSAxIHx8IHJxLVxcdTAwM2VwZXJvdXQucGVyaW9kLm5zZWMgIT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cGluID0gemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oemxkcGxsLCBpZHgpO1xcbitcXHRpZiAoIXBpbikge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbHJlYWR5IGF0IDEgSHosIG5vdGhpbmcgdG8gZG8gKi9cXG4rXFx0aWYgKHpsMzA3M3hfZGV2X291dHB1dF9waW5fZnJlcV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHBpbi1cXHUwMDNlaWQpID09IDEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW4sIDEpO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0ZHBsbF9waW5fY2hhbmdlX250ZihwaW4tXFx1MDAzZWRwbGxfcGluKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XFxuK1xcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuK1xcdC5tYXhfYWRqXFx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXFxuK1xcdC5nZXR0aW1leDY0XFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXFxuK1xcdC5zZXR0aW1lNjRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxcbitcXHQuYWRqdGltZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxcbitcXHQuYWRqZmluZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxcbitcXHQuYWRqcGhhc2VcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXFxuK1xcdC5nZXRtYXhwaGFzZVxcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcXG4rXFx0LmVuYWJsZVxcdFxcdD0gemwzMDczeF9kcGxsX3B0cF9lbmFibGUsXFxuK307XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xcbitcXG4rXFx0c25wcmludGYoemxkcGxsLVxcdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVxcdTAwM2VwdHBfaW5mby5uYW1lKSxcXG4rXFx0XFx0IFxcXCJ6bDMwNzN4LWRwbGwldVxcXCIsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLCB6bGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XFxuK1xcdFxcdGRldl9lcnIoemxkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yIERQTEwldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0emxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7XFxuK1xcdH1cXG4rXFxuK1xcdHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrID0gcHRwX2Nsb2NrO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxcbisgKi9cXG4rc3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrKSkge1xcbitcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayk7XFxuK1xcdFxcdHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcXG4rXFx0fVxcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjQwMyw2ICsyODYzLDQ4IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKlxcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXFxuKyAqXFxuKyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqL1xcbitzdHJ1Y3QgemwzMDczeF9kcGxsICpcXG4remwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcXG4rXFxuK1xcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xcbitcXHRpZiAoIXpsZHBsbClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcbitcXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbitcXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuK1xcdHpsZHBsbC1cXHUwMDNlcHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXG4rXFx0cmV0dXJuIHpsZHBsbDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cXG4rICovXFxuK3ZvaWRcXG4remwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdFdBUk4oemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgXFxcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0a2ZyZWUoemxkcGxsKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuQEAgLTI0MzMsNiArMjkzNSwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdH1cXG4gXFxuK1xcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRcXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjQ0Niw3ICsyOTU1LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gdm9pZFxcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIHtcXG4tXFx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xcbitcXHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gXFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiBcXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG5pbmRleCBmYWViYzQwMmJhMWI3MC4uOWI1ZjcyYzMzODQ5Y2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuQEAgLTUsNiArNSw4IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZHBsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuIFxcbkBAIC0yMiw2ICsyNCw4IEBAXFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXFxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXFxuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcXG4rICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTClcXG4gICovXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0bGlzdDtcXG5AQCAtMzYsNiArNDAsOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcXG4gXFx0ZW51bSBkcGxsX3R5cGVcXHRcXHRcXHR0eXBlO1xcbiBcXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcXHRcXHRsb2NrX3N0YXR1cztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdHBpbnM7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1xcdFxcdHB0cF9pbmZvO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrXFx0XFx0KnB0cF9jbG9jaztcXG4gfTtcXG4gXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbmluZGV4IGI3MGVhZDdkNDQ5NWIyLi40NDc3NTdlOTk4NDVkOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5AQCAtMTc5LDYgKzE3OSwyMCBAQFxcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcXHRcXHRcXHRHRU5NQVNLKDIsIDApXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVxcdFxcdDRcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcXHRcXHRcXHRaTF9SRUcoNSwgMHgzMCwgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXFx0XFx0XFx0R0VOTUFTSygyLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcXHRcXHRcXHQ0XFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcXHRcXHRaTF9SRUcoNSwgMHgzMSwgMSlcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXFx0XFx0XFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXFx0MVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcXHQ4XFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcXHQ5XFxuK1xcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDUwLCAxKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlxcdFxcdEdFTk1BU0soNywgNClcXG5AQCAtMTkzLDYgKzIwNyw5IEBAXFxuIFxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxcbisgKlxcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcXG4gXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXFx0UzY0X01JTlxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgwQywgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgxMiwgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTgsIDQpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuQEAgLTIyMSw2ICsyNTYsOCBAQFxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXFx0XFx0R0VOTUFTSyg2LCA0KVxcbiBcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXFx0XFx0WkxfUkVHKDksIDB4MzYsIDIpXFxuK1xcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5AQCAtMzE2LDYgKzM1MywyNSBAQFxcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfRVNZTkNfV0lEVEhcXHRcXHRaTF9SRUcoMTQsIDB4MTgsIDQpXFxuICNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9DT01QXFx0XFx0WkxfUkVHKDE0LCAweDIwLCA0KVxcbiBcXG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuKyAqIFJlZ2lzdGVyIFBhZ2UgOSwgT3V0cHV0IFBoYXNlIFN0ZXBcXG4rICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFxcdFxcdFpMX1JFRyg5LCAweDM4LCAxKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFxcdFxcdEdFTk1BU0soNiwgNClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXFx0QklUKDMpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcXHQwXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFxcdDFcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcXHQyXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVxcdDNcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlxcdFxcdFpMX1JFRyg5LCAweDM5LCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDNhLCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVxcdFxcdFpMX1JFRyg5LCAweDNjLCA0KVxcbitcXG4gLypcXG4gICogUmVnaXN0ZXIgUGFnZSAyNTUgLSBIVyByZWdpc3RlcnMgYWNjZXNzXFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNjo1OS4yOTIxNDE1OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5MTk3NzU3Njc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgSTJDL1NQSSBkcml2ZXIuIER1cmluZyBpbml0aWFsaXphdGlvbiAoemwzMDczeF9kZXZfcHJvYmUpLCB0aGUgZHJpdmVyIHN0cmljdGx5IHJlYWRzIGFuZCB2ZXJpZmllcyB0aGUgaGFyZHdhcmUgY2hpcCBJRCAoWkxfUkVHX0lEKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gdGhlIGtlcm5lbCwgYW5kIGdlbmVyaWMgSTJDIG1vY2tzIGxpa2UgaTJjLXN0dWIgZG8gbm90IHN1cHBvcnQgdGhlIDE2LWJpdCByZWdpc3RlciBhZGRyZXNzaW5nIHJlcXVpcmVkIGJ5IHRoaXMgZHJpdmVyLCB0aGUgcHJvYmUgZnVuY3Rpb24gd2lsbCBhbHdheXMgZmFpbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgRFBMTCBhbmQgUFRQIGRldmljZXMgd2lsbCBuZXZlciBiZSByZWdpc3RlcmVkLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWE2MDBhMWJkNjVhMjFmNDc0ZGJlY2Y5ZWU2ZDlkYjczZWI4MjgwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDEzOjM2OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMxLi5kMDU3NGFkNTcxZDNmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgKzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcIiBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuK1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0NjguLjUzMDMyZTc4MmZkNGFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0yMDIsNiArMjAzLDExIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gXHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfc3RhdGVfZ2V0KGNoYW4pLFxuIFx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY2hhbikpO1xuIFxuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuK1x0XHRcdCAgICAgIFx1MDAyNmNoYW4tXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4gXG4gXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cbkBAIC0yMzQsNiArMjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG4gXHRyZXR1cm4gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqXG4rICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXG4rICogaW5kaWNhdGluZyB0aGUgZGV2aWNlIGhhcyBjb21wbGV0ZWQgdGhlIHByZXZpb3VzIFRvRCBvcGVyYXRpb24uXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3tcbitcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuK1x0dTggdG9kX2N0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuK1xuK1x0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbisgKlxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0dTMyIG5zZWM7XG4rXHR1NjQgc2VjO1xuK1x0dTggY21kO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG5leHRfaHopXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xuK1x0ZWxzZVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4rXHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQHRzOiB0aW1lIHRvIHNldFxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuK3tcbitcdGludCByYztcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuK1x0XHRcdFx0ICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4rICpcbisgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXG4rICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuKyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxuKyAqIG5leHQtSHogc2Vjb25kcyBieSBvbmUuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrLlxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4re1xuK1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuK1x0aW50IHJjO1xuK1xuK1x0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFx1MDAyNnRzX25leHQsIE5VTEwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBJZiB0b28gY2xvc2UgdG8gKG9yIHBhc3QpIHRoZSBuZXh0IHJvbGxvdmVyLCB3YWl0IGl0IG91dCAqL1xuK1x0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4rXHRpZiAoZGlmZi50dl9zZWMgXHUwMDNjIDAgfHwgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjIFx1MDAzYyB0aHJlc2hvbGRfbnMpKSB7XG4rXHRcdGlmICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYylcbitcdFx0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyArIDEpO1xuK1x0XHR0c19uZXh0LnR2X3NlYysrO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4rXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xuK1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIFdyaXRlIGFkanVzdGVkIFRvRCBiYWNrIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuK3tcbitcdGludCByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7XG4rXHRpZiAoIXJjKVxuK1x0XHR6bGRldi1cdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKy0xcylcbisgKlxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbit7XG4rXHRzNjQgdGllX2RhdGE7XG4rXHRpbnQgcmM7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbitcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4rICpcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbitcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbit7XG4rXHR1OCBjdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuK1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuK1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbitcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbitcdGlmICh0b2Rfc3RlcClcbitcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTc1Li45ZGM1YTNmMTk5MWYxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCArNSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVncy5oXCJcbiBcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTE2LDYgKzE4LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2O1xuICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVcbiAgKiBAbW9kZV9yZWZzZWw6IG1vZGUgYW5kIHJlZmVyZW5jZSBzZWxlY3Rpb24gcmVnaXN0ZXIgdmFsdWVcbiAgKiBAcmVmX3ByaW86IHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgKDQgYml0cyBwZXIgcmVmLCBQL04gcGFja2VkKVxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFza1xuICAqIEBtb25fc3RhdHVzOiBtb25pdG9yIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEByZWZzZWxfc3RhdHVzOiByZWZlcmVuY2Ugc2VsZWN0aW9uIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHNcbkBAIC0yNiw2ICsyOSw5IEBAIHN0cnVjdCB6bDMwNzN4X2NoYW4ge1xuIFx0XHR1OFx0bW9kZV9yZWZzZWw7XG4gXHRcdHU4XHRyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07XG4gXHQpO1xuK1x0c3RydWN0X2dyb3VwKGludiwgLyogSW52YXJpYW50cyAqL1xuK1x0XHR1MTZcdG91dF9zdGVwX3RpbWVfbWFzaztcbitcdCk7XG4gXHRzdHJ1Y3RfZ3JvdXAoc3RhdCxcbiBcdFx0dThcdG1vbl9zdGF0dXM7XG4gXHRcdHU4XHRyZWZzZWxfc3RhdHVzO1xuQEAgLTQyLDYgKzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbitcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgKzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbisgKlxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbitcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjMzLDQgKzI2OCwxNyBAQCBzdGF0aWMgaW5saW5lIHU4IHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIEZJRUxEX0dFVChaTF9EUExMX1JFRlNFTF9TVEFUVVNfUkVGU0VMLCBjaGFuLVx1MDAzZXJlZnNlbF9zdGF0dXMpO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4rICogQG91dDogb3V0cHV0IGluZGV4XG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG91dClcbit7XG4rXHRyZXR1cm4gISEoY2hhbi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChvdXQpKTtcbit9XG4rXG4gI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggN2Y1YWZhYWFlNjM0MmYuLmIyZjlmYzk3ZmQxYjY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0xMDMzLDYgKzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyYS4uMmRjODM2ZDBjOGY2YjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgKzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7XG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVNcdFx0KDMwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1x0KDMwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VU1x0KDMwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbiBcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xuIFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4rICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnNcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJyBpbnZhcmlhbnRzXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcbkBAIC03MSw2ICs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHBoYXNlX3N0ZXBfbG9jaztcbiBcbiBcdC8qIEludmFyaWFudHMgKi9cbiBcdHN0cnVjdCB6bDMwNzN4X3JlZlx0cmVmW1pMMzA3M1hfTlVNX1JFRlNdO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggZDkxZjUyYjU4ZWFlMzQuLjdjMTFkZTM1ODIxYWVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yLDYgKzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5AQCAtMTQsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTQyLDYgKzQ0LDcgQEBcbiAgKiBAcGhhc2Vfb2Zmc2V0OiBsYXN0IHNhdmVkIHBpbiBwaGFzZSBvZmZzZXRcbiAgKiBAZnJlcV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgZnJhY3Rpb25hbCBmcmVxdWVuY3kgb2Zmc2V0XG4gICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5XG4rICogQHBlcm91dF9pZHg6IFBUUCBwZXJvdXQgY2hhbm5lbCBpbmRleCwgb3IgLTEgaWYgbm90IHBlcm91dC1lbGlnaWJsZVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5AQCAtNTksNiArNjIsNyBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7XG4gXHRzNjRcdFx0XHRwaGFzZV9vZmZzZXQ7XG4gXHRzNjRcdFx0XHRmcmVxX29mZnNldDtcbiBcdHUzMlx0XHRcdG1lYXN1cmVkX2ZyZXE7XG4rXHRzOFx0XHRcdHBlcm91dF9pZHg7XG4gfTtcbiBcbiAvKlxuQEAgLTkzNiwyMSArOTQwLDE3IEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiB9XG4gXG4gc3RhdGljIGludFxuLXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi1cdFx0XHRcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLVx0XHRcdFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK19femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4rXHRcdFx0XHRcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4rXHRcdFx0XHRcdHU2NCBmcmVxdWVuY3kpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuIFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4gXHR1MzIgbmV3X2Rpdiwgc3ludGhfZnJlcTtcbiBcdHN0cnVjdCB6bDMwNzN4X291dCBvdXQ7XG4gXHR1OCBvdXRfaWQ7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4gXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuIFx0b3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTtcbkBAIC0xMDExLDYgKzEwMTEsMjEgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIFx0cmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCBcdTAwMjZvdXQpO1xuIH1cbiBcbitzdGF0aWMgaW50XG4remwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuK1x0XHRcdFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4rXHRcdFx0XHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdixcbitcdFx0XHRcdFx0XHQgICAgICAgZnJlcXVlbmN5KTtcbit9XG4rXG4gc3RhdGljIGludFxuIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdFx0XHRcdFx0IHZvaWQgKnBpbl9wcml2LFxuQEAgLTE2MDgsNiArMTYyMyw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsXG4gXHRwaW4tXHUwMDNlZHBsbCA9IHpsZHBsbDtcbiBcdHBpbi1cdTAwM2VkaXIgPSBkaXI7XG4gXHRwaW4tXHUwMDNlaWQgPSBpZDtcbitcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gLTE7XG4gXG4gXHRyZXR1cm4gcGluO1xuIH1cbkBAIC0xNjI2LDYgKzE2NDIsNDQgQEAgemwzMDczeF9kcGxsX3Bpbl9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4pXG4gXHRrZnJlZShwaW4pO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dCAtIGNoZWNrIGlmIG91dHB1dCBwaW4gaXMgcGVyb3V0LWVsaWdpYmxlXG4rICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2tcbisgKiBAcHJvcHM6IHBpbiBwcm9wZXJ0aWVzIChhbHJlYWR5IGZldGNoZWQgYnkgY2FsbGVyKVxuKyAqXG4rICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWRcbisgKiAobm90IGRpZmZlcmVudGlhbCkgYW5kIHN1cHBvcnRzIDEgSHogaW4gaXRzIGZyZXF1ZW5jeSBsaXN0LlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgYm9vbFxuK3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfcGluX3Byb3BzICpwcm9wcylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBwaW4tXHUwMDNlZHBsbDtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHR1OCBvdXRfaWQ7XG4rXHRpbnQgaTtcbitcbitcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4rXHRpZiAoemwzMDczeF9kZXZfb3V0X2lzX2RpZmYoemxkcGxsLVx1MDAzZWRldiwgb3V0X2lkKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpKyspIHtcbitcdFx0aWYgKHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRbaV0ubWluID09IDEpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIHBpblxuICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW5cbkBAIC0xNjY3LDYgKzE3MjEsOCBAQCB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sIHUzMiBpbmRleClcbiBcdFx0aWYgKHBpbi1cdTAwM2VwcmlvID09IFpMX0RQTExfUkVGX1BSSU9fTk9ORSlcbiBcdFx0XHQvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqL1xuIFx0XHRcdHBpbi1cdTAwM2VwcmlvID0gWkxfRFBMTF9SRUZfUFJJT19NQVg7XG4rXHR9IGVsc2UgaWYgKHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHBpbiwgcHJvcHMpKSB7XG4rXHRcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCsrO1xuIFx0fVxuIFxuIFx0LyogQ3JlYXRlIG9yIGdldCBleGlzdGluZyBEUExMIHBpbiAqL1xuQEAgLTE4OTcsNiArMTk1Myw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdHU4IGlkLCBpbmRleDtcbiBcdGludCByYztcbiBcbitcdHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uX3Blcl9vdXQgPSAwO1xuK1xuIFx0LyogUHJvY2VzcyBpbnB1dCBwaW5zICovXG4gXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIFpMMzA3M1hfTlVNX1BJTlM7IGluZGV4KyspIHtcbiBcdFx0LyogRmlyc3QgaW5wdXQgcGlucyBhbmQgdGhlbiBvdXRwdXQgcGlucyAqL1xuQEAgLTIyODAsNDUgKzIzMzgsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4rICpcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGVcbisgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBubyBzeW50aHMgYXZhaWxhYmxlLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4rXHRcdFx0XHRcdCAgICAgICBzNjQgZGVsdGEpXG4re1xuK1x0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1xuK1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuK1x0XHR1OCBvdXRfaWQsIHN5bnRoX2lkO1xuK1xuK1x0XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuK1xuK1x0XHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4rXHRcdGlmIChzeW50aF9pZCBcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xuK1x0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldiwgXCJVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwiLFxuK1x0XHRcdFx0IG91dF9pZCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XG4rXHR9XG4rXG4rXHQvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSsrKSB7XG4rXHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuK1x0XHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcbitcdFx0ICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC1cdTAwM2VpZClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpO1xuK1xuK1x0XHQvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbitcdFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuK1x0XHRcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xuK1xuK1x0XHRpZiAoIXN5bnRoX21hc2tbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xuK1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHRcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXG4rXHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0aWYgKHRvZF9zdGVwcGVkKSB7XG4rXHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCBcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0fVxuK1x0XHRcdHJldHVybiByYztcbitcdFx0fVxuK1x0XHR0b2Rfc3RlcHBlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxuK1x0ICogbG93ZXN0LUlEIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS5cbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoYWJzKGRlbHRhKSBcdTAwM2U9IE5TRUNfUEVSX1NFQykge1xuK1x0XHRzMzIgcmVtYWluZGVyO1xuK1xuK1x0XHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcdTAwMjZyZW1haW5kZXIpO1xuK1x0XHR0cy50dl9uc2VjID0gMDtcbitcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgdHMpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1xuK1x0XHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xuK1x0XHRpZiAoIWRlbHRhKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24ndCBzdXBwb3J0IFRJRSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluIC0gZmluZCBwaW4gYnkgcGVyb3V0IGNoYW5uZWwgaW5kZXhcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbisgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmRcbisgKi9cbitzdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKlxuK3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4rXHRcdGlmIChwaW4tXHUwMDNlcGVyb3V0X2lkeCA9PSBpZHgpXG4rXHRcdFx0cmV0dXJuIHBpbjtcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnNcbisgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXG4rICpcbisgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLlxuKyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xuKyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1x0dW5zaWduZWQgaW50IGlkeDtcbitcdGludCByYztcbitcbitcdGlmIChycS1cdTAwM2V0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWR4ID0gcnEtXHUwMDNlcGVyb3V0LmluZGV4O1xuK1x0aWYgKGlkeCBcdTAwM2U9IGluZm8tXHUwMDNlbl9wZXJfb3V0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXG4rXHQgKiBpcyBhIG5vLW9wLlxuK1x0ICovXG4rXHRpZiAoIW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXG4rXHRpZiAocnEtXHUwMDNlcGVyb3V0LnBlcmlvZC5zZWMgIT0gMSB8fCBycS1cdTAwM2VwZXJvdXQucGVyaW9kLm5zZWMgIT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcbitcdGlmICghcGluKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXG4rXHRpZiAoemwzMDczeF9kZXZfb3V0cHV0X3Bpbl9mcmVxX2dldCh6bGRwbGwtXHUwMDNlZGV2LCBwaW4tXHUwMDNlaWQpID09IDEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKCFyYylcbitcdFx0ZHBsbF9waW5fY2hhbmdlX250ZihwaW4tXHUwMDNlZHBsbF9waW4pO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuK1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuK1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbitcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbitcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbitcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuK1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4rXHQuZW5hYmxlXHRcdD0gemwzMDczeF9kcGxsX3B0cF9lbmFibGUsXG4rfTtcbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XG4rXG4rXHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbitcdFx0IFwiemwzMDczeC1kcGxsJXVcIiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTI0MDMsNiArMjg2Myw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQzMyw2ICsyOTM1LDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQ2LDcgKzI5NTUsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3MC4uOWI1ZjcyYzMzODQ5Y2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiArNSw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHBsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyNCw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArNDAsOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViMi4uNDQ3NzU3ZTk5ODQ1ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuQEAgLTE3OSw2ICsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXHRcdFx0R0VOTUFTSygyLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcdFx0WkxfUkVHKDUsIDB4MzEsIDEpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCA4LCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdDhcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4rXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHg1MCwgMSlcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SXHRcdEdFTk1BU0soNywgNClcbkBAIC0xOTMsNiArMjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4rICpcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXG4rICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbitcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgKzI1Niw4IEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTMxNiw2ICszNTMsMjUgQEBcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfRVNZTkNfV0lEVEhcdFx0WkxfUkVHKDE0LCAweDE4LCA0KVxuICNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9DT01QXHRcdFpMX1JFRygxNCwgMHgyMCwgNClcbiBcbisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbisgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwXG4rICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcdFx0R0VOTUFTSyg2LCA0KVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFx0QklUKDMpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVx0MFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFx0MVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXHQzXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcdFx0WkxfUkVHKDksIDB4M2EsIDIpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVx0XHRaTF9SRUcoOSwgMHgzYywgNClcbitcbiAvKlxuICAqIFJlZ2lzdGVyIFBhZ2UgMjU1IC0gSFcgcmVnaXN0ZXJzIGFjY2Vzc1xuICAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NTkuMjkyMTQ0MzU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxNjcxNjQ2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhpbmVzcyBvZiBGdXp6aW5nIHRoZSBBenVyaXRlIERQTEwgRHJpdmVyKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRvdWNoaW5nIHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvYCBkaXJlY3RvcnksIHdoaWNoIGluZGljYXRlcyBQVFAgY2xvY2sgc3VwcG9ydCBpcyBiZWluZyBhZGRlZCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIFRoaXMgbG9va3MgaW50ZXJlc3Rpbmc7IGl0IGludm9sdmVzIG5ldyBmZWF0dXJlcyBhbmQgbGlrZWx5IG5ldyBjb2RlIHBhdGhzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgZGVwZW5kZW5jeSwgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrLCBhbmQgaW1wbGVtZW50cyB0aGUgbmVjZXNzYXJ5IFBUUCBjbG9jayBvcGVyYXRpb25zIOKAkyBgZ2V0dGltZXg2NGAsIGBzZXR0aW1lNjRgLCBhZGp1c3RtZW50IGZ1bmN0aW9ucyBhbmQgZW5hYmxpbmcvZGlzYWJsaW5nIG9mIHRoZSBjbG9jay4gVGhpcyBtZWFucyBpdCBjcmVhdGVzIGAvZGV2L3B0cFhgIGRldmljZXMgdGhhdCBjYW4gYmUgZnV6emVkIHRocm91Z2ggaW9jdGxzLCBwbHVzLCB0aGUgZHJpdmVyIGV4cG9zZXMgYSBEUExMIGRldmljZSB2aWEgbmV0bGluay4gVGhlIGRyaXZlciB1c2VzIEkyQyBhbmQgU1BJLCB3aGljaCBtYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgZGlmZmljdWx0eSBvZiBpbnN0YW50aWF0aW9uIGluIGEgZnV6emluZyBjb250ZXh0LlxuXG5DYW4gd2UgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGU/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBrbm93IHN5emthbGxlciBjYW4gaGl0IFBUUCBpb2N0bHMgYW5kIERQTEwgbmV0bGluaywgd2hpY2ggaXMgcHJvbWlzaW5nLiBCdXQgSTJDL1NQSSBkZXZpY2VzIGFyZSB1c3VhbGx5IGEgcGFpbi4gVHlwaWNhbGx5LCB0aGV5IHJlcXVpcmUgZGV2aWNlIHRyZWUsIEFDUEksIG9yIHNwZWNpZmljIGJvYXJkIGNvZGUgdG8gYmUgaW5pdGlhbGl6ZWQuIENhbiBzeXprYWxsZXIgaW5zdGFudGlhdGUgdGhlIGB6bDMwNzN4YCBkZXZpY2Ugc29tZWhvdz8gRG9lcyBpdCBoYXZlIGEgbWVjaGFuaXNtIGxpa2UgYGkyY19uZXdfY2xpZW50X2RldmljZWAgb3IgYW55dGhpbmcgbmV0bGluay9zeXNmcy1yZWxhdGVkIGZvciBjcmVhdGluZyBhbiBJMkMgb3IgU1BJIGNsaWVudD8gTG9va2luZyBhdCB0aGUgdG9vbGluZywgaXQgc2VlbXMgbGlrZSB0aGVyZSBpcyBubyBzcGVjaWZpYyBgc3l6X2kyY19zZXR1cGAgZXF1aXZhbGVudC5cblxuQnV0IHdhaXQsIHRoZSBkaXJlY3RpdmUgd2UgYXJlIHdvcmtpbmcgd2l0aCBpcyBhYm91dCAqcmVhY2hhYmxlKiBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIHRoZSBjcml0aWNhbCBwb2ludCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdoZXJlIHdlIGNhbiBlbmFibGUgdGhlIGNvbmZpZywgcmlnaHQ/IFNvIGV2ZW4gaWYgaXQncyBhbiBJMkMvU1BJIGRyaXZlciwgaWYgaXQncyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBpdCdzIG9mdGVuIHdvcnRoIGZ1enppbmcgaWYgd2UgY2FuIGVuYWJsZSB0aGUgY29uZmlnIG9wdGlvbi4gVGhlIG1haW4gY2F2ZWF0IGlzIHZpcnR1YWxpemF0aW9uLiBDYW4gd2UgcmVhY2ggdGhpcyBjb2RlIHBhdGggaW4gR0NFIG9yIFFFTVU/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQncyAqbm90KiBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHRob3NlIGVudmlyb25tZW50cy4gV2UgbmVlZCB0byBjaGVjayBob3cgdGhlIGB6bDMwNzN4YCBkZXZpY2UgaXMgcHJvYmVkIHRvIHNlZSBpZiBpdCdzIHJlYWNoYWJsZS4gV2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiBpdCBkZXBlbmRzIG9uIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiB0aGF0IGlzIHVuYXZhaWxhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgbm90LCB0aGUgY2hhbmdlIGlzIFdvcnRoRnV6emluZz10cnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEzNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM3OjA5LjQ1OTMxMjA2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkxMDMzMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfaTJjX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTEwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjExOnN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0xMi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz00OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTItXFx0fSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1MzpcXHQucHJvYmUgPSB6bDMwNzN4X2kyY19wcm9iZSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01NC1cXHQuaWRfdGFibGUgPSB6bDMwNzN4X2kyY19pZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MTQuOTUwMzU2OTMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM1NjQzNjY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBcHByb2FjaCB0byBQcm9iaW5nIHRoZSBJMkMgRGV2aWNlKipcblxuT2theSwgbGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBNeSBnb2FsIGlzIHRvIHNlZSBpZiBJIGNhbiB0cmlnZ2VyIHRoaXMgcHJvYmUgc29tZWhvdy4gTXkgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZXNlIHR5cGVzIG9mIGludmVzdGlnYXRpb25zIHdpdGggSTJDIGRldmljZXMgaXMgdGhlIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC9uZXdfZGV2aWNlYCBpbnRlcmZhY2UuIElmIHN5emthbGxlciBoYXMgdGhlIG5lY2Vzc2FyeSBhY2Nlc3MgdG8gc3lzZnMg4oCTIHdoaWNoLCBrbm93aW5nIGl0LCBpdCBsaWtlbHkgZG9lcyDigJMgdGhlbiBJIGNhbiBwcm9iYWJseSB3cml0ZSB0byBgbmV3X2RldmljZWAgdG8gZWZmZWN0aXZlbHkgaW5zdGFudGlhdGUgdGhlIEkyQyBkZXZpY2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBob29rIHRvIHRyaWdnZXIgdGhlIHByb2JlIGFuZCBvYnNlcnZlIGl0cyBiZWhhdmlvci4gTm93LCBsZXQncyBkb3VibGUtY2hlY2sgaWYgdGhlIGB6bDMwNzN4YCBkZXZpY2UgaGFzIGFuIEkyQyBJRCB0YWJsZS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUxOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzoyMC4zMDY3OTYyNjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg1MDY4NjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bDMwNzN4X2kyY19pZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz0xMT1zdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yNy1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoyODpzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yOS1cXHR7IC5uYW1lID0gXFxcInpsMzA3MzFcXFwiIH0sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0zNS19O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjM2Ok1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB6bDMwNzN4X2kyY19pZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMzctXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz00OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTMtXFx0LnByb2JlID0gemwzMDczeF9pMmNfcHJvYmUsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTQ6XFx0LmlkX3RhYmxlID0gemwzMDczeF9pMmNfaWQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTUtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MjQuMTU3NDg4NDgyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDQ1MDc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB6bDMwNzMxYCBEZXZpY2UgSW5zdGFudGlhdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gdGhlIGRldmljZSBuYW1lIGlzIGRlZmluaXRlbHkgXCJ6bDMwNzMxXCIuIFN5emthbGxlciBjYW4gd3JpdGUgXCJ6bDMwNzMxIDB4MjBcIiB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAgdG8gdHJpZ2dlciBpdHMgY3JlYXRpb24uIFN0YW5kYXJkIHByb2NlZHVyZSwgdW5kZXJzdG9vZC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGluc3RhbnRpYXRpb24gKnJlcXVpcmUqIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHRvIHN1Y2NlZWQ/IEkgbmVlZCB0byBiZSBzdXJlIHRoZSBwcm9iZSBkb2Vzbid0IHJlbHkgb24gc29tZSB1bmRvY3VtZW50ZWQgcmVnaXN0ZXIgb3IgZXh0ZXJuYWwgc2lnbmFsLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIHByb2JlIGZ1bmN0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBgemwzMDczeF9pMmNfcHJvYmVgIGFuZCBgemwzMDczeF9kZXZfcHJvYmVgLiBUaG9zZSBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBoYXJkd2FyZSBwcmVjb25kaXRpb25zIGZvciB0aGUgYHpsMzA3MzFgIHRvIGluaXRpYWxpemUgY29ycmVjdGx5LiBUaGF0J3Mgd2hlcmUgdGhlIGNyaXRpY2FsIGxvZ2ljIHJlc2lkZXMuIFVuZGVyc3RhbmRpbmcgdGhvc2Ugcm91dGluZXMgd2lsbCBkZXRlcm1pbmUgaWYgdGhpcyBpbnN0YW50aWF0aW9uIGlzIHRydWx5IGNsZWFuLCBvciBpZiB0aGVyZSBhcmUgcG90ZW50aWFsIGhhcmR3YXJlIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIzMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzoyOC4zMjE5NDE5MTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMTpcXHRzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuICAxMjpcXHR7XFxuICAxMzpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXY7XFxuICAxNDpcXHRcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2O1xcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHR6bGRldiA9IHpsMzA3M3hfZGV2bV9hbGxvYyhkZXYpO1xcbiAgMTc6XFx0XFx0aWYgKElTX0VSUih6bGRldikpXFxuICAxODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUih6bGRldik7XFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdHpsZGV2LVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFxcdTAwMjZ6bDMwNzN4X3JlZ21hcF9jb25maWcpO1xcbiAgMjE6XFx0XFx0aWYgKElTX0VSUih6bGRldi1cXHUwMDNlcmVnbWFwKSlcXG4gIDIyOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUih6bGRldi1cXHUwMDNlcmVnbWFwKSxcXG4gIDIzOlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcFxcXFxuXFxcIik7XFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XFxuICAyNjpcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB6bDMwNzN4X2kyY19pZFtdID0ge1xcbiAgMjk6XFx0XFx0eyAubmFtZSA9IFxcXCJ6bDMwNzMxXFxcIiB9LFxcbiAgMzA6XFx0XFx0eyAubmFtZSA9IFxcXCJ6bDMwNzMyXFxcIiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzoyOC4zMjIwMjk1OTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc5NjE4NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIHpsMzA3M3ggRHJpdmVyKipcblxuUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGB6bDMwNzN4X2Rldl9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoaXMgc3BlY2lmaWMgRFBMTCwgYW5kIHRoYXQncyB0aGUgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBUaGlzIGlzIHByb2JhYmx5IGluIHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jYCBmaWxlLCB3aGVyZSB0aGUgY29yZSBkZXZpY2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBwcm9iZSBmdW5jdGlvbiBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgZHJpdmVyIGlzIGZpcnN0IHNldHRpbmcgdGhpbmdzIHVwIHdoZW4gdGhlIGhhcmR3YXJlIGlzIGRldGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSByZWdpc3RlciBtYXAgYW5kIGlmIHRoZXJlIGFueSBvYnZpb3VzIGdvdGNoYXMgaW4gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbi4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtZG9jdW1lbnRlZCwgYnV0IGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBpcyBuZWNlc3NhcnkgdG8gdW5kZXJzdGFuZCB0aGUgbG93IGxldmVsIGRldGFpbHMsIGFuZCBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggY2xvY2sgY29uZmlndXJhdGlvbnMsIG9yIGVycmF0YSBoYW5kbGluZyB0aGF0IGNvdWxkIGJpdGUgbWUgbGF0ZXIgb24uIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NzAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM3OjMyLjYwMTY1MDYzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NjQwNDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgemwzMDczeF9kZXZfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTkyNT16bDMwNzN4X2Rldm1fZHBsbF9pbml0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTc5LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODA6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk4MS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9MTA0PXN0cnVjdCB6bDMwNzN4X2RldiAqemwzMDczeF9kZXZtX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjEwNTppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTEwNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MzcuMDU4MDYzMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2NTUzMzM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGB6bDMwNzN4X2Rldl9wcm9iZWAsIGFzIEkgdW5kZXJzdGFuZCBpdDpcblxuKipBbmFseXppbmcgdGhlIGB6bDMwNzN4X2Rldl9wcm9iZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgd2UncmUgbG9va2luZyBhdCBgemwzMDczeF9kZXZfcHJvYmVgLiBUaGF0IG1lYW5zIHdlJ3JlIGluIHRoZSByZWFsbSBvZiBkZXZpY2UgcHJvYmluZywgYW5kIGl0J3Mgc3BlY2lmaWNhbGx5IGZvciBhIGB6bDMwNzN4YCBkZXZpY2UsIHdoaWNoIEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGdlbmVyYWwgYXJjaGl0ZWN0dXJlIG9mLiBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBhdHRlbXB0cyB0byBpZGVudGlmeSwgaW5pdGlhbGl6ZSwgYW5kIHJlZ2lzdGVyIGEgbmV3IGB6bDMwNzN4YCBkZXZpY2UgdGhhdCdzIGJlZW4gcGx1Z2dlZCBpbiBvciBpcyBvdGhlcndpc2UgYmVjb21pbmcgYXZhaWxhYmxlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uKio6IEhvdyBhcmUgdGhleSBnZXR0aW5nIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzLCBsaWtlIG1lbW9yeSByZWdpb25zLCBJUlFzLCBJMkMgb3IgU1BJIGJ1c2VzLCBldGMuPyBJIHdhbnQgdG8gc2VlIGlmIHRoZXkgYXJlIHVzaW5nIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBtZWNoYW5pc21zIG9yIGlmIHRoZXJlJ3MgYSBtb3JlIGdlbmVyaWMgYXBwcm9hY2guIEFueSB1bnVzdWFsIGFwcHJvYWNoZXMgaGVyZSB3b3VsZCBiZSBpbnRlcmVzdGluZy5cbiogICAqKkRldmljZSBpZGVudGlmaWNhdGlvbioqOiBIb3cgaXMgdGhlIGRyaXZlciB2ZXJpZnlpbmcgdGhlIGRldmljZSBpcyAqYWN0dWFsbHkqIGEgYHpsMzA3M3hgPyBBcmUgdGhleSBjaGVja2luZyBhIGRldmljZSBJRCByZWdpc3Rlcj8gVmVuZG9yLXNwZWNpZmljIG1hZ2ljPyBJJ20ga2VlbiB0byBzZWUgdGhlIGFwcHJvYWNoIGFuZCBhbnkgcG90ZW50aWFsIGZvciByb2J1c3RuZXNzIGlzc3Vlcy5cbiogICAqKkluaXRpYWxpemF0aW9uIHNlcXVlbmNlKio6IFdoYXQgc3RlcHMgYXJlIHRha2VuIHRvIGdldCB0aGUgZGV2aWNlIHJlYWR5IGZvciB1c2U/IFRoaXMgY291bGQgaW5jbHVkZSBwb3dlci11cCBzZXF1ZW5jZXMsIHJlZ2lzdGVyIHdyaXRlcywgY2xvY2sgY29uZmlndXJhdGlvbiwgYW5kIHBvc3NpYmx5IGZpcm13YXJlIGxvYWRpbmcuIEknbGwgYmUgbG9va2luZyBhdCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgcGF5aW5nIGF0dGVudGlvbiB0byBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgdGltaW5nIGNvbnN0cmFpbnRzLlxuKiAgICoqRHJpdmVyIHJlZ2lzdHJhdGlvbioqOiBPbmNlIHRoZSBkZXZpY2UgaXMgcmVhZHksIEknbGwgYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUga2VybmVsLiBJcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQgZGV2aWNlIGRyaXZlciBtb2RlbD8gQXJlIHRoZXJlIGFueSBjdXN0b20gY2FsbGJhY2tzIG9yIHN0cnVjdHVyZXM/IEFueSBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIG9yIGludGVyYWN0aW9ucyB3aWxsIGJlIG9mIGludGVyZXN0LlxuKiAgICoqRXJyb3IgaGFuZGxpbmcqKjogV2hlcmUgYXJlIHRoZSBlcnJvciBjaGVja3M/IFdoYXQgaGFwcGVucyBpZiBhbnkgb2YgdGhlIGNyaXRpY2FsIHN0ZXBzIGZhaWw/IEkgd2FudCB0byBhc3Nlc3MgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHByb2JlIGZ1bmN0aW9uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHdlYWtuZXNzZXMuIEknbSBleHBlY3RpbmcgdGhvcm91Z2ggZXJyb3IgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLlxuKiAgICoqQ29uY3VycmVuY3kqKjogSSdsbCBhbHNvIGdsYW5jZSB0byBzZWUgaWYgYW55dGhpbmcgaGVyZSBpcyBzdXNjZXB0aWJsZSB0byBjb25jdXJyZW5jeSBpc3N1ZXMgYXMgSSBrbm93IGhhcmR3YXJlIHByb2JpbmcgY2FuIG9mdGVuIGhhdmUgc2hhcmVkIHJlc291cmNlcy5cblxuRXNzZW50aWFsbHksIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGdhdGV3YXkuIEl0IHNob3VsZCBiZSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgdGhlIGRldmljZSB3ZSdyZSBleHBlY3RpbmcsIGFuZCB0aGVuIGdldHRpbmcgaXQgcmVhZHkgdG8gYmUgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgaG93IHRoZXkndmUgZG9uZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1MzMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzo0Mi42MjM2MDAwNDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTgwOlxcdGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiA5ODE6XFx0e1xcbiA5ODI6XFx0XFx0dTE2IGlkLCByZXZpc2lvbiwgZndfdmVyO1xcbiA5ODM6XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuIDk4NDpcXHRcXHR1MzIgY2ZnX3ZlcjtcXG4gOTg1OlxcdFxcdGludCByYztcXG4gOTg2OlxcdFxcbiA5ODc6XFx0XFx0LyogUmVhZCBjaGlwIElEICovXFxuIDk4ODpcXHRcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19JRCwgXFx1MDAyNmlkKTtcXG4gOTg5OlxcdFxcdGlmIChyYylcXG4gOTkwOlxcdFxcdFxcdHJldHVybiByYztcXG4gOTkxOlxcdFxcbiA5OTI6XFx0XFx0LyogRGV0ZWN0IGNoaXAgdmFyaWFudCAqL1xcbiA5OTM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcyk7IGkrKykge1xcbiA5OTQ6XFx0XFx0XFx0aWYgKHpsMzA3M3hfY2hpcF9pZHNbaV0uaWQgPT0gaWQpXFxuIDk5NTpcXHRcXHRcXHRcXHRicmVhaztcXG4gOTk2OlxcdFxcdH1cXG4gOTk3OlxcdFxcbiA5OTg6XFx0XFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcXG4gOTk5OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIC1FTk9ERVYsXFxuMTAwMDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJVbmtub3duIGNoaXAgSUQ6IDB4JTA0eFxcXFxuXFxcIiwgaWQpO1xcbjEwMDE6XFx0XFxuMTAwMjpcXHRcXHR6bGRldi1cXHUwMDNlaW5mbyA9IFxcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xcbjEwMDM6XFx0XFxuMTAwNDpcXHRcXHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cXG4xMDA1OlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFVklTSU9OLCBcXHUwMDI2cmV2aXNpb24pO1xcbjEwMDY6XFx0XFx0aWYgKHJjKVxcbjEwMDc6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwMDg6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRldfVkVSLCBcXHUwMDI2ZndfdmVyKTtcXG4xMDA5OlxcdFxcdGlmIChyYylcXG4xMDEwOlxcdFxcdFxcdHJldHVybiByYztcXG4xMDExOlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0NVU1RPTV9DT05GSUdfVkVSLCBcXHUwMDI2Y2ZnX3Zlcik7XFxuMTAxMjpcXHRcXHRpZiAocmMpXFxuMTAxMzpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTAxNDpcXHRcXG4xMDE1OlxcdFxcdGRldl9kYmcoemxkZXYtXFx1MDAzZWRldiwgXFxcIkNoaXBJRCglWCksIENoaXBSZXYoJVgpLCBGd1ZlcigldSlcXFxcblxcXCIsIGlkLFxcbjEwMTY6XFx0XFx0XFx0cmV2aXNpb24sIGZ3X3Zlcik7XFxuMTAxNzpcXHRcXHRkZXZfZGJnKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJDdXN0b20gY29uZmlnIHZlcnNpb246ICVsdS4lbHUuJWx1LiVsdVxcXFxuXFxcIixcXG4xMDE4OlxcdFxcdFxcdEZJRUxEX0dFVChHRU5NQVNLKDMxLCAyNCksIGNmZ192ZXIpLFxcbjEwMTk6XFx0XFx0XFx0RklFTERfR0VUKEdFTk1BU0soMjMsIDE2KSwgY2ZnX3ZlciksXFxuMTAyMDpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSygxNSwgOCksIGNmZ192ZXIpLFxcbjEwMjE6XFx0XFx0XFx0RklFTERfR0VUKEdFTk1BU0soNywgMCksIGNmZ192ZXIpKTtcXG4xMDIyOlxcdFxcbjEwMjM6XFx0XFx0LyogR2VuZXJhdGUgcmFuZG9tIGNsb2NrIElEIGFzIHRoZSBkZXZpY2UgaGFzIG5vdCBzdWNoIHByb3BlcnR5IHRoYXRcXG4xMDI0OlxcdFxcdCAqIGNvdWxkIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4gQSB1c2VyIGNhbiBsYXRlciBjaGFuZ2UgdGhpcyB2YWx1ZVxcbjEwMjU6XFx0XFx0ICogdXNpbmcgZGV2bGluay5cXG4xMDI2OlxcdFxcdCAqL1xcbjEwMjc6XFx0XFx0emxkZXYtXFx1MDAzZWNsb2NrX2lkID0gZ2V0X3JhbmRvbV91NjQoKTtcXG4xMDI4OlxcdFxcbjEwMjk6XFx0XFx0LyogRGVmYXVsdCBwaGFzZSBvZmZzZXQgYXZlcmFnaW5nIGZhY3RvciAqL1xcbjEwMzA6XFx0XFx0emxkZXYtXFx1MDAzZXBoYXNlX2F2Z19mYWN0b3IgPSAyO1xcbjEwMzE6XFx0XFxuMTAzMjpcXHRcXHQvKiBJbml0aWFsaXplIG11dGV4IGZvciBvcGVyYXRpb25zIHdoZXJlIG11bHRpcGxlIHJlYWRzLCB3cml0ZXNcXG4xMDMzOlxcdFxcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxcbjEwMzQ6XFx0XFx0ICovXFxuMTAzNTpcXHRcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZW11bHRpb3BfbG9jayk7XFxuMTAzNjpcXHRcXHRpZiAocmMpXFxuMTAzNzpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4xMDM5OlxcdFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcXG4xMDQwOlxcdFxcdGlmIChyYylcXG4xMDQxOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbjEwNDI6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbjEwNDM6XFx0XFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuMTA0NDpcXHRcXHRpZiAocmMpXFxuMTA0NTpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4xMDQ2OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4xMDQ3OlxcdFxcbjEwNDg6XFx0XFx0LyogUmVnaXN0ZXIgRFBMTCBjaGFubmVscyAqL1xcbjEwNDk6XFx0XFx0cmMgPSB6bDMwNzN4X2Rldm1fZHBsbF9pbml0KHpsZGV2KTtcXG4xMDUwOlxcdFxcdGlmIChyYylcXG4xMDUxOlxcdFxcdFxcdHJldHVybiByYztcXG4xMDUyOlxcdFxcbjEwNTM6XFx0XFx0LyogUmVnaXN0ZXIgdGhlIGRldmxpbmsgaW5zdGFuY2UgYW5kIHBhcmFtZXRlcnMgKi9cXG4xMDU0OlxcdFxcdHJjID0gemwzMDczeF9kZXZsaW5rX3JlZ2lzdGVyKHpsZGV2KTtcXG4xMDU1OlxcdFxcdGlmIChyYylcXG4xMDU2OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbjEwNTc6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldmxpbmsgaW5zdGFuY2VcXFxcblxcXCIpO1xcbjEwNTg6XFx0XFxuMTA1OTpcXHRcXHRyZXR1cm4gMDtcXG4xMDYwOlxcdH1cXG4xMDYxOlxcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHpsMzA3M3hfZGV2X3Byb2JlLCBcXFwiWkwzMDczWFxcXCIpO1xcbjEwNjI6XFx0XFxuMTA2MzpcXHRNT0RVTEVfQVVUSE9SKFxcXCJJdmFuIFZlY2VyYSBcXHUwMDNjaXZlY2VyYUByZWRoYXQuY29tXFx1MDAzZVxcXCIpO1xcbjEwNjQ6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNaWNyb2NoaXAgWkwzMDczeCBjb3JlIGRyaXZlclxcXCIpO1xcbjEwNjU6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzo0Mi42MjM4OTY3MDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA0NDMyNTQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERldmljZSBQcm9iZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwcm9iZSBmdW5jdGlvbiBhbmQgaXQncyBncmFiYmluZyB0aGUgYFpMX1JFR19JRGAgYW5kIGNvbXBhcmluZyBpdCB0byB0aGUga25vd24gYHpsMzA3M3hfY2hpcF9pZHNgLiBUaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGlzIHRoYXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIHRoZSBvbmUgc3l6a2FsbGVyIHVzZXMsIHRoZXNlIEkyQyByZWFkcyBhcmUgaGlnaGx5IGxpa2VseSB0byBmYWlsIG9yIHJldHVybiBnYXJiYWdlLiBUaGF0IG1lYW5zIGEgYC1FTk9ERVZgIGVycm9yLCBhbmQgdGhlIHByb2JlIGp1c3QgZGllcy5cblxuV2FpdCBhIHNlY29uZCwgZG9lc27igJl0IHN5emthbGxlciBoYXZlICpzb21lKiBtZWNoYW5pc20gdG8gbW9jayBJMkMgZGV2aWNlcz8gSSBrbm93IGl0IG1vY2tzIG90aGVyIGhhcmR3YXJlIGludGVyZmFjZXMuIE5vLCBpdCBkb2Vzbid0IGFwcGVhciB0byBoYXZlIGEgZ2VuZXJpYyBJMkMgbW9jaywgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZSBjb21tZW50cyBpbiB0aGUgY29kZSBhcmUgcG9pbnRpbmcgbWUgdG93YXJkcyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGNhbGxpbmcgb3V0IHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5TbyB0aGUgcHJvYmUgKndpbGwqIGZhaWwgYmVjYXVzZSBpdCdzIGV4cGVjdGluZyBhIHNwZWNpZmljIGNoaXAgSUQgdG8gY29tZSBiYWNrIGZyb20gdGhlIEkyQyBidXMuIEJ1dCwgaG9sZCBvbiBhIG1pbnV0ZSEgU3l6a2FsbGVyIGhhcyBhbGwgdGhlc2UgZGlmZmVyZW50IHNpbXVsYXRvcnMg4oCTIGB2aGNpYCwgYG1hYzgwMjExX2h3c2ltYCwgYHZrbXNgLCBgdmNhbmAsIGB1aW5wdXRgLCBgc25kLWR1bW15YCwgYG5ldGRldnNpbWAsIGFuZCBtb3JlLiBEbyB0aGV5IGhhdmUgYW4gSTJDIGVxdWl2YWxlbnQ/XG5cbkFoYSEgVGhlcmUgKmlzKiBgaTJjLXN0dWJgISBJIGNhbiB1c2UgaXQgdG8gbW9jayBJMkMgZGV2aWNlcyEgTGV0J3Mgc2VlIGlmIHRoaXMgYGkyYy1zdHViYCBjYW4gYWN0dWFsbHkgc2ltdWxhdGUgdGhpcyBzcGVjaWZpYyBkZXZpY2UuXG5cbk9rYXksIHNvIGBpMmMtc3R1YmAgbGV0cyB5b3Ugc3BlY2lmeSBjaGlwIGFkZHJlc3NlcyBhbmQgaXTigJlsbCBhY3QgYXMgYSBkdW1teSBJMkMgZGV2aWNlIHRoYXQgc3RvcmVzIGFuZCByZXR1cm5zIHdoYXRldmVyIGJ5dGVzIGFyZSB3cml0dGVuIHRvIGl0LiBCdXTigKYgd2FpdCBhIHNlY29uZOKApiBJIG5lZWQgdG8gY2hlY2sgaG93IGB6bDMwNzN4YCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVnaXN0ZXJzLCBiZWNhdXNlIGlmIGl0IHVzZXMgYHJlZ21hcGAgaXQgY291bGQgYmUgcmVhZGluZyAxNi1iaXQgb3IgMzItYml0IHJlZ2lzdGVycy4gSSBuZWVkIHRvIGNoZWNrIGB6bDMwNzN4X3JlYWRfdTE2YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NTcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzo1MS42NjgyMjUwMjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTYzNDE2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHpsMzA3M3hfcmVhZF91MTZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTE3OD1pbnQgemwzMDczeF93cml0ZV91OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1OCB2YWwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTkyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxOTM6aW50IHpsMzA3M3hfcmVhZF91MTYoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTE2ICp2YWwpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTE5NC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9MTQ3PWludCB6bDMwNzN4X3JlYWRfdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTggKnZhbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjE0ODppbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTE0OS1pbnQgemwzMDczeF9yZWFkX3UzMihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgKnZhbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM3OjU2LjA2NDU3NjM3NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI3NDQ1NzI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIHpsMzA3M3hfcmVhZF91MTYgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGB6bDMwNzN4X3JlYWRfdTE2YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvdy1sZXZlbCBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZGlzc2VjdCB0aGUgY3JpdGljYWwgcGF0aDsgdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBoYXJkd2FyZS4gSSBrbm93IHRoZXNlIGRldmljZXMgcHJldHR5IHdlbGwsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVnaXN0ZXJzIGFuZCB0aGUgdW5kZXJseWluZyBidXMgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMg4oCTIHByb2JhYmx5IEkyQywgU1BJLCBvciBwb3RlbnRpYWxseSBzb21lIHByb3ByaWV0YXJ5IGJ1cy4gVGhlIGtleSBpcyBpbiBmaWd1cmluZyBvdXQgaG93IHRoZSAxNi1iaXQgdmFsdWUgaXMgYmVpbmcgZmV0Y2hlZC4gQXJlIHRoZXkgdXNpbmcgYSByZWFkIHRyYW5zYWN0aW9uIHdpdGggYSByZWdpc3RlciBhZGRyZXNzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIGRhdGEgc2hlZXQgbGF0ZW5jeSBhbmQgdGltaW5nIHJlcXVpcmVtZW50cz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXRvbWljaXR5IG9yIGNvbmN1cnJlbmN5PyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaG93IHRoZSBhZGRyZXNzIGlzIHRyYW5zbGF0ZWQgdG8gYW4gSTJDIG9yIFNQSSB3cml0ZS4gVGhlbiBmb2xsb3cgdGhlIHRyYW5zYWN0aW9uIHRvIHRoZSByZWFkIHNpZGUgdG8gY29uZmlybS4gQXJlIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZyByb3V0aW5lcz8gVGhvc2UgYXJlIGltcG9ydGFudCwgdG9vLCBmb3IgdW5kZXJzdGFuZGluZyByb2J1c3RuZXNzLiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgZnVuY3Rpb24gcGVyZm9ybXMgYSBzaW1wbGUgcmVhZCBvZiBhIDE2LWJpdCB2YWx1ZSBmcm9tIGEgc3BlY2lmaWMgYWRkcmVzcyBvciBpZiBpdCdzIG1vcmUgY29tcGxleCB0aGFuIHRoYXQuIEFyZSB0aGVyZSBhbnkgaGFyZHdhcmUgb3IgYnVzIGNvbnN0cmFpbnRzP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyNjg4NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM4OjA2LjMzOTAzNzE4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODczMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MzpcXHRpbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbClcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdGludCByYztcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfcmVnKHpsZGV2LCByZWcsIHZhbCwgc2l6ZW9mKCp2YWwpKTtcXG4gMTk4OlxcdFxcdGlmICghcmMpXFxuIDE5OTpcXHRcXHRcXHRiZTE2X3RvX2NwdXModmFsKTtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0cmV0dXJuIHJjO1xcbiAyMDI6XFx0fVxcbiAyMDM6XFx0XFxuIDIwNDpcXHQvKipcXG4gMjA1OlxcdCAqIHpsMzA3M3hfd3JpdGVfdTE2IC0gd3JpdGUgdmFsdWUgdG8gMTZiaXQgcmVnaXN0ZXJcXG4gMjA2OlxcdCAqIEB6bGRldjogemwzMDczeCBkZXZpY2UgcG9pbnRlclxcbiAyMDc6XFx0ICogQHJlZzogcmVnaXN0ZXIgdG8gd3JpdGUgdG9cXG4gMjA4OlxcdCAqIEB2YWw6IHZhbHVlIHRvIHdyaXRlXFxuIDIwOTpcXHQgKlxcbiAyMTA6XFx0ICogV3JpdGVzIHZhbHVlIGludG8gZ2l2ZW4gMTZiaXQgcmVnaXN0ZXIuXFxuIDIxMTpcXHQgKlxcbiAyMTI6XFx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODowNi4zMzkzMjg0NjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxNTk1MDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UndmUgcmVxdWVzdGVkLCBzcGVha2luZyBhcyBpZiB0aGVzZSBhcmUgbXkgb3duIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgQ29kZSAtIHpsMzA3M3hfcmVhZF9yZWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBjb2RlJ3MgdXNpbmcgYHpsMzA3M3hfcmVhZF9yZWdgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBpbnRlcmFjdGluZyB3aXRoIGEgWkwzMDczeCBkZXZpY2UsIGxpa2VseSBhIHRpbWluZyBjaGlwIG9yIHNpbWlsYXIsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gVGhlIGZ1bmN0aW9uJ3MgbmFtZSwgYF9yZWFkX3JlZ2AsIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJ3JlIHJlYWRpbmcgYSByZWdpc3RlciBmcm9tIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHJlZ2lzdGVyIG1hcCBvZiB0aGUgWkwzMDczeC4gSSdsbCBuZWVkIHRoYXQgdG8gdW5kZXJzdGFuZCAqd2hhdCogZGF0YSBpcyBiZWluZyByZXF1ZXN0ZWQgYW5kIHdoeS4gS25vd2luZyB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIgYWRkcmVzc2VzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUncyBpbnRlbnQuIElzIGl0IHJlYWRpbmcgc3RhdHVzIGZsYWdzPyBDb25maWd1cmF0aW9uIHZhbHVlcz8gT3IgcGVyaGFwcyBkaWFnbm9zdGljIGluZm9ybWF0aW9uPyBUaGUgY29udGV4dCBvZiB3aGVyZSB0aGlzIGB6bDMwNzN4X3JlYWRfcmVnYCBjYWxsIGFwcGVhcnMgaW4gdGhlIGxhcmdlciBjb2RlIHN0cnVjdHVyZSBpcyB2aXRhbCB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHdlIGluaXRpYWxpemluZyB0aGUgZGV2aWNlLCBwb2xsaW5nIGZvciBhbiBldmVudCwgb3IgcmVzcG9uZGluZyB0byBhbiBpbnRlcnJ1cHQ/IE5vdyBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNvbW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU0NSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzg6MTEuMzU1MjgxODA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdC8qIE1hcCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB0byB2aXJ0dWFsIHJhbmdlICovXFxuIDE0MTpcXHRcXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRyYyA9IHJlZ21hcF9idWxrX3dyaXRlKHpsZGV2LVxcdTAwM2VyZWdtYXAsIHJlZywgdmFsLCBzaXplKTtcXG4gMTQ0OlxcdFxcdGlmIChyYykge1xcbiAxNDU6XFx0XFx0XFx0ZGV2X2Vycih6bGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHdyaXRlIHJlZyAweCUwNHg6ICVwZVxcXFxuXFxcIiwgcmVnLFxcbiAxNDY6XFx0XFx0XFx0XFx0RVJSX1BUUihyYykpO1xcbiAxNDc6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiAxNDg6XFx0XFx0fVxcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRyZXR1cm4gMDtcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0LyoqXFxuIDE1NDpcXHQgKiB6bDMwNzN4X3JlYWRfdTggLSByZWFkIHZhbHVlIGZyb20gOGJpdCByZWdpc3RlclxcbiAxNTU6XFx0ICogQHpsZGV2OiB6bDMwNzN4IGRldmljZSBwb2ludGVyXFxuIDE1NjpcXHQgKiBAcmVnOiByZWdpc3RlciB0byB3cml0ZSB0b1xcbiAxNTc6XFx0ICogQHZhbDogdmFsdWUgdG8gd3JpdGVcXG4gMTU4OlxcdCAqXFxuIDE1OTpcXHQgKiBSZWFkcyB2YWx1ZSBmcm9tIGdpdmVuIDhiaXQgcmVnaXN0ZXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM4OjExLjM1NTQ1ODcwN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjU2MjIwODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvZGUgRmxvdyoqXG5cbkhtbSwgSSdtIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljLCBhbmQgSSBzZWUgYSBjYWxsIHRvIGB6bDMwNzN4X3JlYWRfcmVnYC4gT2theSwgbm93IEkndmUgbm90aWNlZCBpdCdzIHBvc2l0aW9uZWQgYWJvdmUgdGhlIGN1cnJlbnQgbGluZSBJJ20gZXhhbWluaW5nLiBJJ20gdGFraW5nIGEgbW9tZW50IHRvIHJlZ2lzdGVyIHRoYXQsIGFuZCBob3cgdGhhdCBwcmVjZWRpbmcgZnVuY3Rpb24gcmVsYXRlcyB0byB0aGUgc3Vic2VxdWVudCBzdGVwcy4gVGhpcyBwbGFjZW1lbnQgaGFzIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBkZXBlbmRlbmNpZXMgb3IgcGVyaGFwcyByZWdpc3RlciBpbml0aWFsaXphdGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgcmVsYXRpdmUgb3JkZXJpbmcgYXMgSSBleGFtaW5lIHN1YnNlcXVlbnQgbG9naWMsIGFuZCB1bmRlcnN0YW5kIGhvdyB2YWx1ZXMgcmVhZCBmcm9tIHJlZ2lzdGVycyBieSBgemwzMDczeF9yZWFkX3JlZ2AgYXJlIHRoZW4gdXNlZC4gSXQncyBhIGtleSBvYnNlcnZhdGlvbiB0aGF0IGRpcmVjdHMgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTc0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODoxNy4wMTE2ODIzODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0aWYgKFpMX1JFR19TSVpFKHJlZykgIT0gc2l6ZSkge1xcbiAxMDE6XFx0XFx0XFx0ZGV2X2Vycih6bGRldi1cXHUwMDNlZGV2LCBcXFwiSW52YWxpZCBzaXplICV6dSBmb3IgcmVnIDB4JTA0bHhcXFxcblxcXCIsXFxuIDEwMjpcXHRcXHRcXHRcXHRzaXplLCBaTF9SRUdfQUREUihyZWcpKTtcXG4gMTAzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTA0OlxcdFxcdH1cXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDEwNzpcXHR9XFxuIDEwODpcXHRcXG4gMTA5OlxcdHN0YXRpYyBpbnRcXG4gMTEwOlxcdHpsMzA3M3hfcmVhZF9yZWcoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdm9pZCAqdmFsLFxcbiAxMTE6XFx0XFx0XFx0IHNpemVfdCBzaXplKVxcbiAxMTI6XFx0e1xcbiAxMTM6XFx0XFx0aW50IHJjO1xcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRpZiAoIXpsMzA3M3hfY2hlY2tfcmVnKHpsZGV2LCByZWcsIHNpemUpKVxcbiAxMTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdC8qIE1hcCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB0byB2aXJ0dWFsIHJhbmdlICovXFxuIDExOTpcXHRcXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRyYyA9IHJlZ21hcF9idWxrX3JlYWQoemxkZXYtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsIHNpemUpO1xcbiAxMjI6XFx0XFx0aWYgKHJjKSB7XFxuIDEyMzpcXHRcXHRcXHRkZXZfZXJyKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVhZCByZWcgMHglMDR4OiAlcGVcXFxcblxcXCIsIHJlZyxcXG4gMTI0OlxcdFxcdFxcdFxcdEVSUl9QVFIocmMpKTtcXG4gMTI1OlxcdFxcdFxcdHJldHVybiByYztcXG4gMTI2OlxcdFxcdH1cXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0cmV0dXJuIDA7XFxuIDEyOTpcXHR9XFxuIDEzMDpcXHRcXG4gMTMxOlxcdHN0YXRpYyBpbnRcXG4gMTMyOlxcdHpsMzA3M3hfd3JpdGVfcmVnKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIGNvbnN0IHZvaWQgKnZhbCxcXG4gMTMzOlxcdFxcdFxcdCAgc2l6ZV90IHNpemUpXFxuIDEzNDpcXHR7XFxuIDEzNTpcXHRcXHRpbnQgcmM7XFxuIDEzNjpcXHRcXG4gMTM3OlxcdFxcdGlmICghemwzMDczeF9jaGVja19yZWcoemxkZXYsIHJlZywgc2l6ZSkpXFxuIDEzODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODoxNy4wMTE4OTc4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzUzMzM1MjAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb2JlIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcHJvYmUgZnVuY3Rpb24sIGFuZCBpdCdzIGxvb2tpbmcgZm9yIGBaTF9SRUdfSURgLiBOYXR1cmFsbHksIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gc29tZXRoaW5nIGRlZmluZWQgd2l0aGluIGB6bDMwNzN4X2NoaXBfaWRzYC4gTXkgbWluZCdzIG5vdyBydW5uaW5nIHRocm91Z2ggdGhlIHBvc3NpYmxlIGNoaXAgSURzLiBMZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIHdoYXQgdGhpcyBgemwzMDczeF9jaGlwX2lkc2AgYWN0dWFsbHkgY29udGFpbnMuIFRpbWUgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBhbmQgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoLiBVbmRlcnN0YW5kaW5nIHRob3NlIElEcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBleHBlY3RlZCBoYXJkd2FyZSB0aGlzIHByb2JlIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5ODksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM4OjMwLjU0NTI1MjIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY1MTAyMzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfY2hpcF9pZHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTI1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHpsMzA3M3hfY2hpcF9pZHNbXSA9IHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjctXFx0WkxfQ0hJUF9JTkZPKDB4MEUzMCwgMiwgWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyKSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODA9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTkyLVxcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTkzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpKyspIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk0OlxcdFxcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTUtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk3LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTg6XFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk5LVxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIC1FTk9ERVYsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwMS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwMjpcXHR6bGRldi1cXHUwMDNlaW5mbyA9IFxcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODozNi43MTAzNjAxMTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ0Mjg3MTQ0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgemwzMDczeCBEcml2ZXI6IEEgU3l6a2FsbGVyIENoYWxsZW5nZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoZSBgemwzMDczeGAgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHNpbXVsYXRlIGl0cyBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgd2l0aGluIFN5emthbGxlci4gVGhlIGNoaXAgSUQsIGxldCdzIHNheSBgMHgwRTMwYCwgaXMgdGhlIGtleS4gQ2FuIEkgZ2V0IFN5emthbGxlciB0byBtb2NrIHRoaXMgSTJDIGludGVyYWN0aW9uP1xuXG5UaGUgaW1tZWRpYXRlIHByb2JsZW0gaXMgdGhhdCBTeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgYnVpbHQtaW4sIGZpbmUtZ3JhaW5lZCBJMkMgbW9jayB0aGF0IGNhbiByZXR1cm4gc3BlY2lmaWMgdmFsdWVzIGZvciBzcGVjaWZpYyByZWdpc3RlcnMuIEkga25vdyBpdCAqZG9lcyogaGF2ZSBzb21lIGJhc2ljIGAvZGV2L2kyYy1YYCBmdXp6aW5nLCBidXQgdGhhdCdzIHJlYWxseSBmb3IgdXNlcnNwYWNlIHRvICp0YWxrKiB0byBJMkMgZGV2aWNlcywgbm90IGZvciAqZW11bGF0aW5nKiB0aGUgZGV2aWNlcyB0aGVtc2VsdmVzLiBJZiBJIHRyeSB0byB0cmlnZ2VyIHRoZSBkZXZpY2UgaW5zdGFudGlhdGlvbiB0aHJvdWdoIHN5c2ZzJ3MgYG5ld19kZXZpY2VgLCB0aGUga2VybmVsIHByb2JlIHdpbGwgcnVuIEkyQyByZWFkcywgYW5kIHdpdGhvdXQgYSByZWFsIGRldmljZSwgdGhvc2UgcmVhZHMgd2lsbCBmYWlsLiBTbyBJIG5lZWQgYSB3YXkgdG8gbWFrZSB0aG9zZSByZWFkcyByZXR1cm4gd2hhdCBJIHdhbnQuIElkZWFsbHksIHRoZXJlJ2QgYmUgYSBnZW5lcmljIHNvZnR3YXJlIEkyQyBhZGFwdGVyIHVuZGVyIFN5emthbGxlcidzIGNvbnRyb2wuXG5cblRoZW4gSSByZWNhbGxlZCBgaTJjLXN0dWJgLiBUaGF0J3MgYSBrZXJuZWwgbW9kdWxlIHRoYXQgbWFrZXMgZmFrZSBJMkMgYWRhcHRlciBhbmQgZGV2aWNlcy4gTGV0IG1lIGNoZWNrIGlmIFN5emthbGxlciBlbmFibGVzIGl0LiBVc3VhbGx5LCBgQ09ORklHX0kyQ19TVFVCYCBpcyBlbmFibGVkLiBCdXQgSSByZWFsaXplZCBgaTJjLXN0dWJgIG9ubHkgc3VwcG9ydHMgU01CdXMgY29tbWFuZHMgYW5kIGB6bDMwNzN4YCB1c2VzIHJlZ21hcCBvdmVyIEkyQy4gQW5kLCBpZiBgaTJjLXN0dWJgIGlzIHVzZWQsIGNvdWxkIEkgbG9hZCBpdCB3aXRoIGBjaGlwX2FkZHI9MHgyMGAgYW5kIHRoZW4gcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHZpYSBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLVgvMC0wMDIwL2A/IE5vLCBgaTJjLXN0dWJgIGRvZXNuJ3QgZXhwb3NlIHJlZ2lzdGVycyB2aWEgc3lzZnMuIEFoLCBidXQgd2FpdCBhIHNlY29uZC5cblxuU3l6a2FsbGVyICpjYW4qIHdyaXRlIHRvIGAvZGV2L2kyYy1YYCEgSSBjb3VsZCB1c2UgYC9kZXYvaTJjLVhgIHRvIHByb2dyYW0gdGhlIGBpMmMtc3R1YmAgcmVnaXN0ZXJzLiBBbmQsIGlmIHVzZXJzcGFjZSB3cml0ZXMgdG8gYC9kZXYvaTJjLVhgICh0aGUgZmFrZSBhZGFwdGVyKSwgaXQgY2FuIHdyaXRlIHRvIHRoZSBmYWtlIGRldmljZSdzIHJlZ2lzdGVycy4gVGhlbiwgaWYgdXNlcnNwYWNlIGluc3RhbnRpYXRlcyBgemwzMDczeGAgb24gdGhlIHNhbWUgZmFrZSBhZGFwdGVyIGF0IHRoZSBzYW1lIGFkZHJlc3MsIHRoZSBgemwzMDczeGAgZHJpdmVyICpzaG91bGQqIHJlYWQgdGhlIHJlZ2lzdGVycyBJIGp1c3QgcHJvZ3JhbW1lZC4gQnJpbGxpYW50IVxuXG5Ob3csIGRvZXMgU3l6a2FsbGVyICphY3R1YWxseSogZG8gdGhpcz8gSSdtIG5vdCBmYW1pbGlhciB3aXRoIGFueSBzcGVjaWZpYyBleGFtcGxlcywgYW5kIEkgY2FuJ3QgdGhpbmsgb2YgYW55dGhpbmcgbGlrZSBgc3l6X2kyY19zZXR1cGAuIEknbGwgaGF2ZSB0byBjaGVjayB0aGUgU3l6a2FsbGVyIHNvdXJjZS4gSG1tLCBJIGp1c3QgcmVtZW1iZXJlZCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X3VzYl9jb25uZWN0YCwgYHN5el84MDIxMV9qb2luX2lic3NgLCBhbmQgc28gb24sIGJ1dCBubyBgc3l6X2kyY19zZXR1cGAuIExldCBtZSBqdXN0IGFzc3VtZSBpdCBkb2Vzbid0IGRvIGl0IGRpcmVjdGx5LlxuXG5Pa2F5LCBhcmUgdGhlcmUgKm90aGVyKiBwYXRocyB0byByZWFjaCB0aGlzIGNvZGU/IFdoYXQgYWJvdXQgU1BJPyBUaGUgZHJpdmVyIGhhcyBhIGB6bDMwNzN4X3NwaV9wcm9iZWAgZnVuY3Rpb24uIEkgYW0gbm90IGZhbWlsaWFyIHdpdGggU3l6a2FsbGVyJ3MgU1BJIGNhcGFiaWxpdGllcyBidXQgSSByZW1lbWJlciBpdCBkb2Vzbid0IGhhdmUgYSBTUEkgbW9jayBlaXRoZXIuXG5cbk5vdywgSSBoYXZlIGEgYmlnZ2VyIHByb2JsZW0uIEknbSBvcGVyYXRpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQXJlIHRoZXNlIGtpbmRzIG9mIEkyQy9TUEkgZHJpdmVycyBldmVuIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQ/IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCIgSXQncyBnZW5lcmFsbHkgaW1wb3NzaWJsZSB0byBzdWNjZXNzZnVsbHkgcmVhY2ggdGhlIHByb2JlIGZ1bmN0aW9uIHdpdGhvdXQgYSByZWFsLWlzaCBoYXJkd2FyZSBzZXR1cCBvciBhIHJlYWxseSBjbGV2ZXIgZW11bGF0b3IuIFByb2JlcyBhbHdheXMgY2hlY2sgY2hpcCBJRHMuXG5cbkkgZ3Vlc3MgSSBzaG91bGQgY2hlY2sgb25lIGxhc3QgdGhpbmc6IGlzIHRoZXJlIGFueSBleGlzdGluZyB0ZXN0IG1vY2sgZm9yIGB6bDMwNzN4YD8gSWYgbm90LCBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIG5vbi10cml2aWFsIGFtb3VudCBvZiB3b3JrIHRvIGdldCB0aGlzIGZ1enplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3MjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzg6NTEuMTM5MDc2ODY5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYzNjQxMzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidG9vbHMvdGVzdGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzg6NTEuOTI1NDUzNzMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDgxMjIwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBsaW5lIG9mIHRob3VnaHQsIHRoaW5raW5nIGFzIGEgc2Vhc29uZWQgZW5naW5lZXI6XG5cbioqQ2hlY2tpbmcgZm9yIFRlc3QgTW9ja3MgaW4gdGhlIERQTEwgRHJpdmVyIERpcmVjdG9yeSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgaGVhdnktZHV0eSBkZWJ1Z2dpbmcgb3IgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhhdCBgZHJpdmVycy9kcGxsL3psMzA3M3gvYCBkaXJlY3RvcnksIEkgYWx3YXlzIHN0YXJ0IHdpdGggYSBzYW5pdHkgY2hlY2suIExldCdzIHNlZSBpZiB3ZSd2ZSBiZWVuIGRpbGlnZW50IHdpdGggb3VyIHRlc3Rpbmcgc3RyYXRlZ3kuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhIHRlc3QgbW9jayBhdmFpbGFibGUuIEhhdmluZyBhIG1vY2sgZm9yIHRoYXQgRFBMTCBtb2R1bGUg4oCTIHRoZSBaTDMwNzN4IOKAkyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIGVmZmljaWVudCBkZXZlbG9wbWVudCBhbmQgcmVncmVzc2lvbiB0ZXN0aW5nLiBJdCBhbGxvd3MgZm9yIGNvbnRyb2xsZWQgZXhwZXJpbWVudGF0aW9uIGFuZCBpc29sYXRpb24gb2YgdGhlIG1vZHVsZSBmcm9tIHBvdGVudGlhbGx5IGNvbXBsZXggaGFyZHdhcmUgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcy4gRmluZGluZyBhIGdvb2QgbW9jayB3aWxsIHNhdmUgYSBsb3Qgb2YgdGltZSBhbmQgZWZmb3J0IGRvd24gdGhlIGxpbmUuIEl0IGF2b2lkcyB0aGUgbmVlZCB0byByZXBlYXRlZGx5IGJvb3QgdGhlIHN5c3RlbSBpbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIGp1c3QgdG8gdGVzdCBhIHNtYWxsIGNvZGUgY2hhbmdlLiBQbHVzLCBpdCdzIGVzc2VudGlhbCBmb3IgY3JlYXRpbmcgc3RhYmxlIHVuaXQgdGVzdHMuIElmIHRoZXJlIGlzbid0IGEgbW9jaywgdGhlbiBpdCdzIHRpbWUgdG8gY3JlYXRlIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MzEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODo1OS41NzM1Nzg0NDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJjaGFuLmNcIixcbiAgICBcImNoYW4uaFwiLFxuICAgIFwiY29yZS5jXCIsXG4gICAgXCJjb3JlLmhcIixcbiAgICBcImRldmxpbmsuY1wiLFxuICAgIFwiZGV2bGluay5oXCIsXG4gICAgXCJkcGxsLmNcIixcbiAgICBcImRwbGwuaFwiLFxuICAgIFwiZmxhc2guY1wiLFxuICAgIFwiZmxhc2guaFwiLFxuICAgIFwiZncuY1wiLFxuICAgIFwiZncuaFwiLFxuICAgIFwiaTJjLmNcIixcbiAgICBcIm91dC5jXCIsXG4gICAgXCJvdXQuaFwiLFxuICAgIFwicHJvcC5jXCIsXG4gICAgXCJwcm9wLmhcIixcbiAgICBcInJlZi5jXCIsXG4gICAgXCJyZWYuaFwiLFxuICAgIFwicmVncy5oXCIsXG4gICAgXCJzcGkuY1wiLFxuICAgIFwic3ludGguY1wiLFxuICAgIFwic3ludGguaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODo1OS41NzM3MTA5MjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE2MDkxMDI3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFRhcmdldCBDb2RlOiBBIEZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB6bDMwNzN4YCBkcml2ZXIgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZnV6emFibGUgd2l0aCBzeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJObyB0ZXN0IG1vY2tzLlwiIFNpbmNlIHN5emthbGxlciBydW5zIGluIGVudmlyb25tZW50cyB3aXRob3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgdGhpcyBgemwzMDczeGAgZGV2aWNlJ3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBhbG1vc3QgY2VydGFpbmx5IGZhaWwuIEl0IGV4cGxpY2l0bHkgY2hlY2tzIHRoZSBjaGlwIElELCBhbmQgaWYgdGhhdCBkb2Vzbid0IG1hdGNoLCBpdCByZXR1cm5zIGAtRU5PREVWYC4gSSBxdWlja2x5IGRpc21pc3NlZCB0aGUgYnlwYXNzLCBhcyB0aGUgY29kZSBkaXJlY3RseSBwcmV2ZW50cyB0aGF0LlxuXG5UaGVuLCBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgYGkyYy1zdHViYCwgY291bGQgc3l6a2FsbGVyIGxldmVyYWdlIHRoYXQgdG8gZW11bGF0ZSB0aGUgZGV2aWNlPyBCdXQsIHdhaXQsIGBpMmMtc3R1YmAgb25seSBzdXBwb3J0cyA4LWJpdCByZWdpc3RlciBhZGRyZXNzZXMsIHdoZXJlYXMgYHpsMzA3M3hgIHVzZXMgMTYtYml0IHJlZ2lzdGVycy4gTXkgaW1tZWRpYXRlIGNvbmNsdXNpb24sIHRoZW4sIHdhcyB0aGF0IGl0IHdhcyBpbXBvc3NpYmxlLiBObyBvdGhlciBJMkMgbW9ja3MgYXJlIGF2YWlsYWJsZSwgbm90IGV2ZW4gYW4gYGkyYy1tb2NrYC4gVGhlIHNhbWUgZ29lcyBmb3IgU1BJIOKAkyBubyBgc3BpLW1vY2tgIGV4aXN0cy5cblxuU28sIHRoZSBwcm9iZSBmYWlscywgbWFraW5nIHRoZSBkcml2ZXIgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cC4gVGhlIHRhcmdldCBjb2RlIGxpZXMgd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGV0Yy4sIGFsbCBvZiB3aGljaCBhcmUgUFRQIGNsb2NrIG9wZXJhdGlvbnMuIFRoZXNlIGFyZSBvbmx5IHJlZ2lzdGVyZWQgaWYgYHpsMzA3M3hfZHBsbF9yZWdpc3RlcmAgc3VjY2VlZHMsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB6bDMwNzN4X2Rldl9wcm9iZWAuIFNpbmNlIHRoYXQgcHJvYmUgd2lsbCBmYWlsLCB0aG9zZSBmdW5jdGlvbnMgd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQuIFRodXMsIHRoaXMgY29kZSBwYXRoLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBub3QgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgbWVhbnMuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjay4gU3l6a2FsbGVyIHVzdWFsbHkgaGFzIG9wdGlvbnMsIHJpZ2h0PyBJcyB0aGVyZSBhbnl0aGluZyB0aGF0IGNvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gZW11bGF0ZSBJMkM/IEkgbG9va2VkIGZvciBhbnkgc2ltaWxhciBjb25maWd1cmF0aW9ucywgYnV0LCBubywgaXQgcmVsaWVzIG9uIHN0cmljdCBjaGlwIElEIHZhbGlkYXRpb24uIFdhaXQsIEkgaGFkIGFub3RoZXIgdGhvdWdodDogd2hhdCBhYm91dCBgdmhjaWAgZm9yIFVTQi1JMkMgYWRhcHRlciEgSSBjYW4gdXNlIGBzeXpfdXNiX2Nvbm5lY3RgIHRvIGZha2UgYW4gYGkyYy10aW55LXVzYmAgZGV2aWNlLiBUaGF0IHdheSwgc3l6a2FsbGVyIGNvdWxkIGludGVyY2VwdCB0aGUgSTJDIHJlcXVlc3RzIGFuZCByZXR1cm4gdGhlIGV4cGVjdGVkIGNoaXAgSUQgd2hlbiByZXF1ZXN0ZWQuXG5cblllcyEgSSBjYW4gc2VlIHRoYXQgYHN5el91c2JfY29ubmVjdGAgaGFzIHRoYXQgY2FwYWJpbGl0eSEgVGhlIGtlcm5lbCB3b3VsZCB0aGVuIHJlcXVlc3QgYW4gSTJDIHJlYWQsIHRoZSBVU0ItSTJDIGFkYXB0ZXIgd291bGQgcHJvY2VzcyB0aGF0LCBhbmQgc3l6a2FsbGVyIGNvdWxkIHByb3ZpZGUgdGhlIHJpZ2h0IGNoaXAgSUQgYDB4MEUzMGAgaW4gaXRzIHJlc3BvbnNlISBUaGUgcHJvYmFiaWxpdHkgb2Ygc3l6a2FsbGVyIGdlbmVyYXRpbmcgdGhlIGNvcnJlY3QgMTYtYml0IGNoaXAgSUQgcmFuZG9tbHkgaXMsIG9mIGNvdXJzZSwgdmVyeSBsb3c6IDEvNjU1MzYuIEJ1dCwgd2FpdCwgc3l6a2FsbGVyIHVzZXMgY292ZXJhZ2UtZ3VpZGVkIGZ1enppbmcsIHNvIGl0ICpjb3VsZCogZGV0ZWN0IHRoZSBjb21wYXJpc29uIGFuZCBldmVudHVhbGx5IGZpbmQgdGhlIGNoaXAgSUQhXG5cblNvLCB0aGUgSTJDIHJlYWQgZ29lcyB0aHJvdWdoIGByZWdtYXBgLCB0aGVuIGBpMmNgLCB0aGVuIFVTQiB0byBzeXprYWxsZXIuIFN5emthbGxlcidzIFVTQiBmdXp6ZXIgcmVjZWl2ZXMgYSBzdHJlYW0gb2YgYnl0ZXMgZm9yIFVTQiBlbmRwb2ludHMuIElmIEkgY2FuIHByb3ZpZGUgYDB4MEUzMGAsIHRoZSBwcm9iZSBjb3VsZCBjb250aW51ZS4gVGhlIGRyaXZlciB3b3VsZCB0aGVuIHJlYWQgYFJFVklTSU9OYCwgYEZXX1ZFUmAsIGBDVVNUT01fQ09ORklHX1ZFUmAuIEl0IHdvdWxkIHRoZW4gcmVnaXN0ZXIgRFBMTCBjaGFubmVscy5cblxuSXMgdGhpcyBwcmFjdGljYWxseSBhY2hpZXZhYmxlLCB0aG91Z2g/IFVzdWFsbHksIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMgYXJlIGNvbnNpZGVyZWQgaGFyZCB0byByZWFjaCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gQnV0LCBpZiBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIsIHdlIHN0aWxsIHdhbnQgdG8gZnV6eiBpdC4gVGhlIGluc3RydWN0aW9ucyBzdGF0ZSBjbGVhcmx5IHRvIGV4Y2x1ZGUgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQnV0IGlzIHRoaXMgcmVhbGx5IGltcG9zc2libGU/XG5cblN5emthbGxlciBjYW4gY3JlYXRlIGFuIEkyQyBidXMgdmlhIGBpMmMtdGlueS11c2JgIG9yIGBpMmMtc3R1YmAgb3IgYGkyYy1ncGlvYC4gQnV0IHN5emthbGxlciBkb2Vzbid0IGhhdmUgYW4gSTJDIGRldmljZSBmdXp6ZXIgZm9yIGF1dG9tYXRpY2FsbHkgaW5zdGFudGlhdGluZyBhbGwgSTJDIGRyaXZlcnMgYW5kIG1vY2tpbmcgdGhlaXIgcmVnaXN0ZXJzLiBTeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3IgYGkyY19kZXZgLCBidXQgbm90aGluZyBmb3IgbW9ja2luZyBJMkMgZGV2aWNlcy4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgYHpsMzA3M3hgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTk3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MjgsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM5OjIxLjE4MjgxNjU3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NTgxMTQ0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bDMwNzN4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM5OjIxLjc5ODQwNjAzNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUxOTYxODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIEV4aXN0aW5nIFN5emthbGxlciBDb3ZlcmFnZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzY2FuLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiRG8gd2UgYWxyZWFkeSBoYXZlIHNvbWUgU3l6a2FsbGVyIGNvdmVyYWdlIGZvciB0aGlzIGBkcGxsYCB0aGluZz9cIiBUaGUgZ29hbCBoZXJlIGlzIGVmZmljaWVuY3k7IHRoZXJlJ3Mgbm8gc2Vuc2UgaW4gcmVpbnZlbnRpbmcgdGhlIHdoZWVsIGlmIHNvbWVvbmUncyBhbHJlYWR5IGRvbmUgdGhlIGdyb3VuZHdvcmsuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgZm9yIG1lIC0gcXVpY2tseSB2ZXJpZnlpbmcgaWYgZXhpc3RpbmcgZnV6emluZyBpbmZyYXN0cnVjdHVyZSBoYW5kbGVzIGEgdGFyZ2V0LiBTbywgbGV0J3MgY2hlY2sgZm9yIGFueSBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb25zLiBJdCdzIHRoZSBtb3N0IGxpa2VseSB0b29sIHRvIGhhdmUgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDM2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6MjYuMjUwMzcxNjk3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc2MTQzODAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RwbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM5OjI2LjUxNzk5NjkzN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcwNjgzMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IERQTEwgTG9jYXRpb24qKlxuXG5IbW0sIGxldCdzIHNlZS4uLiAqZHBsbCouLi4gd2hlcmUncyB0aGF0IGhpZGluZz8gUmlnaHQsIEkgc2hvdWxkIGJlIGZhbWlsaWFyIHdpdGggdGhpcyBjb2RlIGJhc2UuIE9rYXksIHdhaXQgYSBtaW51dGUsIEkgcmVtZW1iZXIgbm93LiBUaGF0IG1vZHVsZSwgdGhhdCBzcGVjaWZpYyBpbnN0YW5jZSBvZiBEUExMLCBJJ20gcHJldHR5IHN1cmUgaXQncyByZXNpZGluZyBpbiBgZHJpdmVycy9kcGxsYC4gWWVzLCB0aGF0IGxvY2F0aW9uIG1ha2VzIHNlbnNlIGdpdmVuIGl0cyBmdW5jdGlvbiB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2MzQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozOTozMC4xODg2ODQ2NDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODgwMjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ2NDcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvZHBsbC9LY29uZmlnPTExPWNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXFxuLS1cXG5kcml2ZXJzL2RwbGwvS2NvbmZpZy0yMC1cXHQgIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBleHBvc2VkIHZpYSBkZWJ1Z2ZzIGF0OlxcbmRyaXZlcnMvZHBsbC9LY29uZmlnOjIxOlxcdCAgICAvc3lzL2tlcm5lbC9kZWJ1Zy9yZWZfdHJhY2tlci9kcGxsX2RldmljZV8qXFxuZHJpdmVycy9kcGxsL0tjb25maWc6MjI6XFx0ICAgIC9zeXMva2VybmVsL2RlYnVnL3JlZl90cmFja2VyL2RwbGxfcGluXypcXG5kcml2ZXJzL2RwbGwvS2NvbmZpZy0yMy1cXG4tLVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTI1LVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnOjI2OnNvdXJjZSBcXFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2RwbGwvS2NvbmZpZy0yNy1cXG4tLVxcbmRyaXZlcnMvZHBsbC9NYWtlZmlsZS01LVxcbmRyaXZlcnMvZHBsbC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19EUExMKSAgICAgICs9IGRwbGwub1xcbmRyaXZlcnMvZHBsbC9NYWtlZmlsZTo3OmRwbGwteSAgICAgICAgICAgICAgICAgICs9IGRwbGxfY29yZS5vXFxuZHJpdmVycy9kcGxsL01ha2VmaWxlOjg6ZHBsbC15ICAgICAgICAgICAgICAgICAgKz0gZHBsbF9uZXRsaW5rLm9cXG5kcml2ZXJzL2RwbGwvTWFrZWZpbGU6OTpkcGxsLXkgICAgICAgICAgICAgICAgICArPSBkcGxsX25sLm9cXG5kcml2ZXJzL2RwbGwvTWFrZWZpbGUtMTAtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMi0vKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozOiAqICBkcGxsX2NvcmUuYyAtIERQTEwgc3Vic3lzdGVtIGtlcm5lbC1zcGFjZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24uXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQtICpcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xOC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTk6I2luY2x1ZGUgXFxcImRwbGxfY29yZS5oXFxcIlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyMDojaW5jbHVkZSBcXFwiZHBsbF9uZXRsaW5rLmhcXFwiXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIxLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yMi0vKiBNdXRleCBsb2NrIHRvIHByb3RlY3QgRFBMTCBzdWJzeXN0ZW0gZGV2aWNlcyBhbmQgcGlucyAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyMzpERUZJTkVfTVVURVgoZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjQtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI1OkRFRklORV9YQVJSQVlfRkxBR1MoZHBsbF9kZXZpY2VfeGEsIFhBX0ZMQUdTX0FMTE9DKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjY6REVGSU5FX1hBUlJBWV9GTEFHUyhkcGxsX3Bpbl94YSwgWEFfRkxBR1NfQUxMT0MpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNy1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mjg6c3RhdGljIFJBV19OT1RJRklFUl9IRUFEKGRwbGxfbm90aWZpZXJfY2hhaW4pO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyOTpzdGF0aWMgREVGSU5FX0lEQShkcGxsX3Bpbl9pZHhfaWRhKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzAtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMxOnN0YXRpYyB1MzIgZHBsbF9kZXZpY2VfeGFfaWQ7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMyOnN0YXRpYyB1MzIgZHBsbF9waW5feGFfaWQ7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNC0jZGVmaW5lIEFTU0VSVF9EUExMX1JFR0lTVEVSRUQoZClcXHRcXFxcXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM1OlxcdFdBUk5fT05fT05DRSgheGFfZ2V0X21hcmsoXFx1MDAyNmRwbGxfZGV2aWNlX3hhLCAoZCktXFx1MDAzZWlkLCBEUExMX1JFR0lTVEVSRUQpKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNi0jZGVmaW5lIEFTU0VSVF9EUExMX05PVF9SRUdJU1RFUkVEKGQpXFx0XFxcXFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzpcXHRXQVJOX09OX09OQ0UoeGFfZ2V0X21hcmsoXFx1MDAyNmRwbGxfZGV2aWNlX3hhLCAoZCktXFx1MDAzZWlkLCBEUExMX1JFR0lTVEVSRUQpKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zOC0jZGVmaW5lIEFTU0VSVF9EUExMX1BJTl9SRUdJU1RFUkVEKHApIFxcXFxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mzk6XFx0V0FSTl9PTl9PTkNFKCF4YV9nZXRfbWFyayhcXHUwMDI2ZHBsbF9waW5feGEsIChwKS1cXHUwMDNlaWQsIERQTExfUkVHSVNURVJFRCkpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQwLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTpzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDItXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzpcXHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHM7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ0LVxcdHZvaWQgKnByaXY7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ1OlxcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00Ni19O1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00Ny1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDg6c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ5LVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTA6XFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MS1cXHR2b2lkICpwcml2O1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01Mi1cXHR2b2lkICpjb29raWU7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzOlxcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NC19O1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTY6c3RhdGljIGludCBjYWxsX2RwbGxfbm90aWZpZXJzKHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICppbmZvKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01Ny17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU4OlxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRwbGxfbG9jayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU5OlxcdHJldHVybiByYXdfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2ZHBsbF9ub3RpZmllcl9jaGFpbiwgYWN0aW9uLCBpbmZvKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjAtfVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02MS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NjI6dm9pZCBkcGxsX2RldmljZV9ub3RpZnkoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCB1bnNpZ25lZCBsb25nIGFjdGlvbilcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjMte1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NDpcXHRzdHJ1Y3QgZHBsbF9kZXZpY2Vfbm90aWZpZXJfaW5mbyBpbmZvID0ge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NTpcXHRcXHQuZHBsbCA9IGRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY2OlxcdFxcdC5pZCA9IGRwbGwtXFx1MDAzZWlkLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NzpcXHRcXHQuaWR4ID0gZHBsbC1cXHUwMDNlZGV2aWNlX2lkeCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Njg6XFx0XFx0LmNsb2NrX2lkID0gZHBsbC1cXHUwMDNlY2xvY2tfaWQsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY5OlxcdFxcdC50eXBlID0gZHBsbC1cXHUwMDNldHlwZSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzAtXFx0fTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzEtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjcyOlxcdGNhbGxfZHBsbF9ub3RpZmllcnMoYWN0aW9uLCBcXHUwMDI2aW5mbyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTczLX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzQtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjc1OnZvaWQgZHBsbF9waW5fbm90aWZ5KHN0cnVjdCBkcGxsX3BpbiAqcGluLCB1NjQgc3JjX2Nsb2NrX2lkLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03Ni1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03Ny17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjc4OlxcdHN0cnVjdCBkcGxsX3Bpbl9ub3RpZmllcl9pbmZvIGluZm8gPSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc5LVxcdFxcdC5waW4gPSBwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtODctXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjg4OlxcdGNhbGxfZHBsbF9ub3RpZmllcnMoYWN0aW9uLCBcXHUwMDI2aW5mbyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTg5LX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTAtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjkxOnN0YXRpYyB2b2lkIGRwbGxfZGV2aWNlX3RyYWNrZXJfYWxsb2Moc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo5MjpcXHRcXHRcXHRcXHQgICAgICBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTkzLXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTQtI2lmZGVmIENPTkZJR19EUExMX1JFRkNOVF9UUkFDS0VSXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjk1OlxcdHJlZl90cmFja2VyX2FsbG9jKFxcdTAwMjZkcGxsLVxcdTAwM2VyZWZjbnRfdHJhY2tlciwgdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTk2LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTk4LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo5OTpzdGF0aWMgdm9pZCBkcGxsX2RldmljZV90cmFja2VyX2ZyZWUoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDA6XFx0XFx0XFx0XFx0ICAgICBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwMS17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwMi0jaWZkZWYgQ09ORklHX0RQTExfUkVGQ05UX1RSQUNLRVJcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTAzOlxcdHJlZl90cmFja2VyX2ZyZWUoXFx1MDAyNmRwbGwtXFx1MDAzZXJlZmNudF90cmFja2VyLCB0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTA0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwNi1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTA3OnN0YXRpYyB2b2lkIF9fZHBsbF9kZXZpY2VfaG9sZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTA4LXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTA5OlxcdGRwbGxfZGV2aWNlX3RyYWNrZXJfYWxsb2MoZHBsbCwgdHJhY2tlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExMDpcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmRwbGwtXFx1MDAzZXJlZmNvdW50KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTExLX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTEyLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTM6c3RhdGljIHZvaWQgX19kcGxsX2RldmljZV9wdXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTExNC17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExNTpcXHRkcGxsX2RldmljZV90cmFja2VyX2ZyZWUoZHBsbCwgdHJhY2tlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExNjpcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZkcGxsLVxcdTAwM2VyZWZjb3VudCkpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE3OlxcdFxcdEFTU0VSVF9EUExMX05PVF9SRUdJU1RFUkVEKGRwbGwpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTg6XFx0XFx0V0FSTl9PTl9PTkNFKCF4YV9lbXB0eShcXHUwMDI2ZHBsbC1cXHUwMDNlcGluX3JlZnMpKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE5OlxcdFxcdHhhX2Rlc3Ryb3koXFx1MDAyNmRwbGwtXFx1MDAzZXBpbl9yZWZzKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTIwOlxcdFxcdHhhX2VyYXNlKFxcdTAwMjZkcGxsX2RldmljZV94YSwgZHBsbC1cXHUwMDNlaWQpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMjE6XFx0XFx0V0FSTl9PTighbGlzdF9lbXB0eShcXHUwMDI2ZHBsbC1cXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTIyOlxcdFxcdHJlZl90cmFja2VyX2Rpcl9leGl0KFxcdTAwMjZkcGxsLVxcdTAwM2VyZWZjbnRfdHJhY2tlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEyMzpcXHRcXHRrZnJlZShkcGxsKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTI0LVxcdH1cXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMjYtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEyNzpzdGF0aWMgdm9pZCBkcGxsX3Bpbl90cmFja2VyX2FsbG9jKHN0cnVjdCBkcGxsX3BpbiAqcGluLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEyOC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTMzLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMzQ6c3RhdGljIHZvaWQgZHBsbF9waW5fdHJhY2tlcl9mcmVlKHN0cnVjdCBkcGxsX3BpbiAqcGluLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEzNS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTQwLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNDE6c3RhdGljIHZvaWQgX19kcGxsX3Bpbl9ob2xkKHN0cnVjdCBkcGxsX3BpbiAqcGluLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0Mi17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE0MzpcXHRkcGxsX3Bpbl90cmFja2VyX2FsbG9jKHBpbiwgdHJhY2tlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0NC1cXHRyZWZjb3VudF9pbmMoXFx1MDAyNnBpbi1cXHUwMDNlcmVmY291bnQpO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0Ni1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTQ3OnN0YXRpYyB2b2lkIGRwbGxfcGluX2lkeF9mcmVlKHUzMiBwaW5faWR4KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTQ4OnN0YXRpYyB2b2lkIGRwbGxfcGluX3Byb3BfZnJlZShzdHJ1Y3QgZHBsbF9waW5fcHJvcGVydGllcyAqcHJvcCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0OS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTUwOnN0YXRpYyB2b2lkIF9fZHBsbF9waW5fcHV0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1MS17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE1MjpcXHRkcGxsX3Bpbl90cmFja2VyX2ZyZWUocGluLCB0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTUzLVxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnBpbi1cXHUwMDNlcmVmY291bnQpKSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE1NDpcXHRcXHR4YV9lcmFzZShcXHUwMDI2ZHBsbF9waW5feGEsIHBpbi1cXHUwMDNlaWQpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNTU6XFx0XFx0eGFfZGVzdHJveShcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNTYtXFx0XFx0eGFfZGVzdHJveShcXHUwMDI2cGluLVxcdTAwM2VwYXJlbnRfcmVmcyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1Ny1cXHRcXHR4YV9kZXN0cm95KFxcdTAwMjZwaW4tXFx1MDAzZXJlZl9zeW5jX3BpbnMpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNTg6XFx0XFx0ZHBsbF9waW5fcHJvcF9mcmVlKFxcdTAwMjZwaW4tXFx1MDAzZXByb3ApO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNTktXFx0XFx0Zndub2RlX2hhbmRsZV9wdXQocGluLVxcdTAwM2Vmd25vZGUpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNjA6XFx0XFx0ZHBsbF9waW5faWR4X2ZyZWUocGluLVxcdTAwM2VwaW5faWR4KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTYxLVxcdFxcdHJlZl90cmFja2VyX2Rpcl9leGl0KFxcdTAwMjZwaW4tXFx1MDAzZXJlZmNudF90cmFja2VyKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNjUtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE2NjpzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGxfZGV2aWNlX2dldF9ieV9pZChpbnQgaWQpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE2Ny17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE2ODpcXHRpZiAoeGFfZ2V0X21hcmsoXFx1MDAyNmRwbGxfZGV2aWNlX3hhLCBpZCwgRFBMTF9SRUdJU1RFUkVEKSlcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTY5OlxcdFxcdHJldHVybiB4YV9sb2FkKFxcdTAwMjZkcGxsX2RldmljZV94YSwgaWQpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNzAtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTczLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzQ6c3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9yZWdpc3RyYXRpb24gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzU6ZHBsbF9waW5fcmVnaXN0cmF0aW9uX2ZpbmQoc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzY6XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2LFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNzctXFx0XFx0XFx0ICAgdm9pZCAqY29va2llKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNzgte1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzk6XFx0c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiAqcmVnO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xODAtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MTg5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTkwOmRwbGxfeGFfcmVmX3Bpbl9hZGQoc3RydWN0IHhhcnJheSAqeGFfcGlucywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE5MTpcXHRcXHQgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2LFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xOTItXFx0XFx0ICAgIHZvaWQgKmNvb2tpZSlcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTkzLXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTk0OlxcdHN0cnVjdCBkcGxsX3Bpbl9yZWdpc3RyYXRpb24gKnJlZztcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTk1OlxcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTk2LVxcdGJvb2wgcmVmX2V4aXN0cyA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIwMi1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjAzOlxcdFxcdHJlZyA9IGRwbGxfcGluX3JlZ2lzdHJhdGlvbl9maW5kKHJlZiwgb3BzLCBwcml2LCBjb29raWUpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yMDQtXFx0XFx0aWYgKHJlZylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yMzQtXFx0cmVnLVxcdTAwM2Vjb29raWUgPSBjb29raWU7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjIzNTpcXHRfX2RwbGxfcGluX2hvbGQocGluLCBcXHUwMDI2cmVnLVxcdTAwM2V0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjM2LVxcdGlmIChyZWZfZXhpc3RzKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI0Mi1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjQzOnN0YXRpYyBpbnQgZHBsbF94YV9yZWZfcGluX2RlbChzdHJ1Y3QgeGFycmF5ICp4YV9waW5zLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjQ0OlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI0NS1cXHRcXHRcXHQgICAgICAgdm9pZCAqY29va2llKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNDYte1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNDc6XFx0c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiAqcmVnO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNDg6XFx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNDktXFx0dW5zaWduZWQgbG9uZyBpO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI1My1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjU0OlxcdFxcdHJlZyA9IGRwbGxfcGluX3JlZ2lzdHJhdGlvbl9maW5kKHJlZiwgb3BzLCBwcml2LCBjb29raWUpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNTUtXFx0XFx0aWYgKFdBUk5fT04oIXJlZykpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjU3LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZyZWctXFx1MDAzZWxpc3QpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNTg6XFx0XFx0X19kcGxsX3Bpbl9wdXQocGluLCBcXHUwMDI2cmVnLVxcdTAwM2V0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjU5LVxcdFxcdGtmcmVlKHJlZyk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MjcxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjcyOmRwbGxfeGFfcmVmX2RwbGxfYWRkKHN0cnVjdCB4YXJyYXkgKnhhX2RwbGxzLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI3MzpcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdiwgdm9pZCAqY29va2llKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNzQte1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNzU6XFx0c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiAqcmVnO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNzY6XFx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNzctXFx0Ym9vbCByZWZfZXhpc3RzID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjgwLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyODE6XFx0eGFfZm9yX2VhY2goeGFfZHBsbHMsIGksIHJlZikge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyODI6XFx0XFx0aWYgKHJlZi1cXHUwMDNlZHBsbCAhPSBkcGxsKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yODMtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI4NDpcXHRcXHRyZWcgPSBkcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmluZChyZWYsIG9wcywgcHJpdiwgY29va2llKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjg1LVxcdFxcdGlmIChyZWcpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjk0LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyOTU6XFx0XFx0cmVmLVxcdTAwM2VkcGxsID0gZHBsbDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjk2LVxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZyZWYtXFx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mjk3OlxcdFxcdHJldCA9IHhhX2luc2VydCh4YV9kcGxscywgZHBsbC1cXHUwMDNlaWQsIHJlZiwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI5OC1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzA3LVxcdFxcdGlmICghcmVmX2V4aXN0cykge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMDg6XFx0XFx0XFx0eGFfZXJhc2UoeGFfZHBsbHMsIGRwbGwtXFx1MDAzZWlkKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzA5LVxcdFxcdFxcdGtmcmVlKHJlZik7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzE1LVxcdHJlZy1cXHUwMDNlY29va2llID0gY29va2llO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMTY6XFx0X19kcGxsX2RldmljZV9ob2xkKGRwbGwsIFxcdTAwMjZyZWctXFx1MDAzZXRyYWNrZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMTctXFx0aWYgKHJlZl9leGlzdHMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MzI0PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMyNTpkcGxsX3hhX3JlZl9kcGxsX2RlbChzdHJ1Y3QgeGFycmF5ICp4YV9kcGxscywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMjY6XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYsIHZvaWQgKmNvb2tpZSlcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzI3LXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzI4OlxcdHN0cnVjdCBkcGxsX3Bpbl9yZWdpc3RyYXRpb24gKnJlZztcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzI5OlxcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzMwLVxcdHVuc2lnbmVkIGxvbmcgaTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzMxLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMzI6XFx0eGFfZm9yX2VhY2goeGFfZHBsbHMsIGksIHJlZikge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMzM6XFx0XFx0aWYgKHJlZi1cXHUwMDNlZHBsbCAhPSBkcGxsKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMzQtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMzNTpcXHRcXHRyZWcgPSBkcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmluZChyZWYsIG9wcywgcHJpdiwgY29va2llKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzM2LVxcdFxcdGlmIChXQVJOX09OKCFyZWcpKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzOC1cXHRcXHRsaXN0X2RlbChcXHUwMDI2cmVnLVxcdTAwM2VsaXN0KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzM5OlxcdFxcdF9fZHBsbF9kZXZpY2VfcHV0KGRwbGwsIFxcdTAwMjZyZWctXFx1MDAzZXRyYWNrZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNDAtXFx0XFx0a2ZyZWUocmVnKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzQxLVxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnJlZi1cXHUwMDNlcmVmY291bnQpKSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM0MjpcXHRcXHRcXHR4YV9lcmFzZSh4YV9kcGxscywgaSk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM0My1cXHRcXHRcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZyZWYtXFx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0KSk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzQ5LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNTA6c3RydWN0IGRwbGxfcGluX3JlZiAqZHBsbF94YV9yZWZfZHBsbF9maXJzdChzdHJ1Y3QgeGFycmF5ICp4YV9yZWZzKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNTEte1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNTI6XFx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNTMtXFx0dW5zaWduZWQgbG9uZyBpID0gMDtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNTktXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM2MDpzdGF0aWMgc3RydWN0IGRwbGxfZGV2aWNlICpcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzYxOmRwbGxfZGV2aWNlX2FsbG9jKGNvbnN0IHU2NCBjbG9ja19pZCwgdTMyIGRldmljZV9pZHgsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzYyLXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzYzOlxcdHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzY0LVxcdGludCByZXQ7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM2NS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzY2OlxcdGRwbGwgPSBremFsbG9jX29iaigqZHBsbCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM2NzpcXHRpZiAoIWRwbGwpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM2OC1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzY5OlxcdHJlZmNvdW50X3NldChcXHUwMDI2ZHBsbC1cXHUwMDNlcmVmY291bnQsIDEpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzA6XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRwbGwtXFx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzcxOlxcdGRwbGwtXFx1MDAzZWRldmljZV9pZHggPSBkZXZpY2VfaWR4O1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzI6XFx0ZHBsbC1cXHUwMDNlY2xvY2tfaWQgPSBjbG9ja19pZDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzczOlxcdGRwbGwtXFx1MDAzZW1vZHVsZSA9IG1vZHVsZTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mzc0OlxcdHJldCA9IHhhX2FsbG9jX2N5Y2xpYyhcXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIFxcdTAwMjZkcGxsLVxcdTAwM2VpZCwgZHBsbCwgeGFfbGltaXRfMzJiLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzU6XFx0XFx0XFx0ICAgICAgXFx1MDAyNmRwbGxfZGV2aWNlX3hhX2lkLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzc2LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM3NzpcXHRcXHRrZnJlZShkcGxsKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzc4LVxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM3OS1cXHR9XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM4MDpcXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZkcGxsLVxcdTAwM2VwaW5fcmVmcywgWEFfRkxBR1NfQUxMT0MpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozODE6XFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXFx1MDAyNmRwbGwtXFx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFxcXCJkcGxsX2RldmljZVxcXCIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zODItXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM4MzpcXHRyZXR1cm4gZHBsbDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzg0LX1cXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zODYtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM4NzogKiBkcGxsX2RldmljZV9nZXQgLSBmaW5kIGV4aXN0aW5nIG9yIGNyZWF0ZSBuZXcgZHBsbCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzg4LSAqIEBjbG9ja19pZDogY2xvY2tfaWQgb2YgY3JlYXRvclxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM5Mi0gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozOTM6ICogR2V0IGV4aXN0aW5nIG9iamVjdCBvZiBhIGRwbGwgZGV2aWNlLCB1bmlxdWUgZm9yIGdpdmVuIGFyZ3VtZW50cy5cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzk0LSAqIENyZWF0ZSBuZXcgaWYgZG9lc24ndCBleGlzdCB5ZXQuXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM5NS0gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozOTY6ICogQ29udGV4dDogQWNxdWlyZXMgYSBsb2NrIChkcGxsX2xvY2spXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM5Ny0gKiBSZXR1cm46XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM5ODogKiAqIHZhbGlkIGRwbGxfZGV2aWNlIHN0cnVjdCBwb2ludGVyIGlmIHN1Y2NlZWRlZFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zOTktICogKiBFUlJfUFRSKFgpIC0gZXJyb3JcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDAwLSAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MDE6c3RydWN0IGRwbGxfZGV2aWNlICpcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDAyOmRwbGxfZGV2aWNlX2dldCh1NjQgY2xvY2tfaWQsIHUzMiBkZXZpY2VfaWR4LCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQwMzpcXHRcXHRkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQwNC17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQwNTpcXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsICpyZXQgPSBOVUxMO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MDYtXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDA3LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MDg6XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDA5OlxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZkcGxsX2RldmljZV94YSwgaW5kZXgsIGRwbGwpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDEwOlxcdFxcdGlmIChkcGxsLVxcdTAwM2VjbG9ja19pZCA9PSBjbG9ja19pZCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTE6XFx0XFx0ICAgIGRwbGwtXFx1MDAzZWRldmljZV9pZHggPT0gZGV2aWNlX2lkeCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTI6XFx0XFx0ICAgIGRwbGwtXFx1MDAzZW1vZHVsZSA9PSBtb2R1bGUpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDEzOlxcdFxcdFxcdF9fZHBsbF9kZXZpY2VfaG9sZChkcGxsLCB0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDE0OlxcdFxcdFxcdHJldCA9IGRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQxNS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MTgtXFx0aWYgKCFyZXQpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDE5OlxcdFxcdHJldCA9IGRwbGxfZGV2aWNlX2FsbG9jKGNsb2NrX2lkLCBkZXZpY2VfaWR4LCBtb2R1bGUpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MjAtXFx0XFx0aWYgKCFJU19FUlIocmV0KSlcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDIxOlxcdFxcdFxcdGRwbGxfZGV2aWNlX3RyYWNrZXJfYWxsb2MocmV0LCB0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDIyLVxcdH1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDIzLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MjQ6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkcGxsX2xvY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MjUtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDI3LX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDI4OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX2dldCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQyOS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDMwLS8qKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzE6ICogZHBsbF9kZXZpY2VfcHV0IC0gZGVjcmVhc2UgdGhlIHJlZmNvdW50IGFuZCBmcmVlIG1lbW9yeSBpZiBwb3NzaWJsZVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzI6ICogQGRwbGw6IGRwbGxfZGV2aWNlIHN0cnVjdCBwb2ludGVyXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQzMy0gKiBAdHJhY2tlcjogdHJhY2tpbmcgb2JqZWN0IGZvciB0aGUgYWNxdWlyZWQgcmVmZXJlbmNlXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQzNC0gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzU6ICogQ29udGV4dDogQWNxdWlyZXMgYSBsb2NrIChkcGxsX2xvY2spXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQzNjogKiBEcm9wIHJlZmVyZW5jZSBmb3IgYSBkcGxsIGRldmljZSwgaWYgYWxsIHJlZmVyZW5jZXMgYXJlIGdvbmUsIGRlbGV0ZVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0Mzc6ICogZHBsbCBkZXZpY2Ugb2JqZWN0LlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MzgtICovXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQzOTp2b2lkIGRwbGxfZGV2aWNlX3B1dChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDQwLXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQxOlxcdG11dGV4X2xvY2soXFx1MDAyNmRwbGxfbG9jayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ0MjpcXHRfX2RwbGxfZGV2aWNlX3B1dChkcGxsLCB0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQzOlxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDQ0LX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ1OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3B1dCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ0Ni1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ3OnN0YXRpYyBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ4OmRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maW5kKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ5OlxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcywgdm9pZCAqcHJpdilcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDUwLXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDUxOlxcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDUyLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NTM6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsIFxcdTAwMjZkcGxsLVxcdTAwM2VyZWdpc3RyYXRpb25fbGlzdCwgbGlzdCkge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NTQtXFx0XFx0aWYgKHJlZy1cXHUwMDNlb3BzID09IG9wcyBcXHUwMDI2XFx1MDAyNiByZWctXFx1MDAzZXByaXYgPT0gcHJpdilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjAtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2MTogKiBkcGxsX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIHRoZSBkcGxsIGRldmljZSBpbiB0aGUgc3Vic3lzdGVtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2MjogKiBAZHBsbDogcG9pbnRlciB0byBhIGRwbGxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDYzOiAqIEB0eXBlOiB0eXBlIG9mIGEgZHBsbFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NjQ6ICogQG9wczogb3BzIGZvciBhIGRwbGwgZGV2aWNlXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2NS0gKiBAcHJpdjogcG9pbnRlciB0byBwcml2YXRlIGluZm9ybWF0aW9uIG9mIG93bmVyXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2Ni0gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0Njc6ICogTWFrZSBkcGxsIGRldmljZSBhdmFpbGFibGUgZm9yIHVzZXIgc3BhY2UuXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2OC0gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0Njk6ICogQ29udGV4dDogQWNxdWlyZXMgYSBsb2NrIChkcGxsX2xvY2spXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3MC0gKiBSZXR1cm46XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDczLSAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NzQ6aW50IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZW51bSBkcGxsX3R5cGUgdHlwZSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDc1OlxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3Ni17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ3NzpcXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3OC1cXHRib29sIGZpcnN0X3JlZ2lzdHJhdGlvbiA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ4OC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDg5OlxcdG11dGV4X2xvY2soXFx1MDAyNmRwbGxfbG9jayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ5MDpcXHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmluZChkcGxsLCBvcHMsIHByaXYpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00OTEtXFx0aWYgKHJlZykge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0OTI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkcGxsX2xvY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00OTMtXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDk3LVxcdGlmICghcmVnKSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ5ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRwbGxfbG9jayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ5OS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MDItXFx0cmVnLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTAzOlxcdGRwbGwtXFx1MDAzZXR5cGUgPSB0eXBlO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MDQ6XFx0X19kcGxsX2RldmljZV9ob2xkKGRwbGwsIFxcdTAwMjZyZWctXFx1MDAzZXRyYWNrZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MDU6XFx0Zmlyc3RfcmVnaXN0cmF0aW9uID0gbGlzdF9lbXB0eShcXHUwMDI2ZHBsbC1cXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MDY6XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cmVnLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZHBsbC1cXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MDctXFx0aWYgKCFmaXJzdF9yZWdpc3RyYXRpb24pIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTA4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTA5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxMS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTEyOlxcdHhhX3NldF9tYXJrKFxcdTAwMjZkcGxsX2RldmljZV94YSwgZHBsbC1cXHUwMDNlaWQsIERQTExfUkVHSVNURVJFRCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUxMzpcXHRkcGxsX2RldmljZV9jcmVhdGVfbnRmKGRwbGwpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MTQ6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkcGxsX2xvY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTUtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE3LX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTE4OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE5LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MjAtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyMTogKiBkcGxsX2RldmljZV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBkcGxsIGRldmljZVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MjI6ICogQGRwbGw6IHJlZ2lzdGVyZWQgZHBsbCBwb2ludGVyXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyMzogKiBAb3BzOiBvcHMgZm9yIGEgZHBsbCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTI0LSAqIEBwcml2OiBwb2ludGVyIHRvIHByaXZhdGUgaW5mb3JtYXRpb24gb2Ygb3duZXJcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MjctICogTm90ZTogSXQgZG9lcyBub3QgZnJlZSB0aGUgbWVtb3J5XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyODogKiBDb250ZXh0OiBBY3F1aXJlcyBhIGxvY2sgKGRwbGxfbG9jaylcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTI5LSAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MzA6dm9pZCBkcGxsX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTMxOlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUzMi17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzMzpcXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUzNC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTM1OlxcdG11dGV4X2xvY2soXFx1MDAyNmRwbGxfbG9jayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzNjpcXHRBU1NFUlRfRFBMTF9SRUdJU1RFUkVEKGRwbGwpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1Mzc6XFx0ZHBsbF9kZXZpY2VfZGVsZXRlX250ZihkcGxsKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTM4OlxcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maW5kKGRwbGwsIG9wcywgcHJpdik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUzOS1cXHRpZiAoV0FSTl9PTighcmVnKSkge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NDA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkcGxsX2xvY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NDEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU0My1cXHRsaXN0X2RlbChcXHUwMDI2cmVnLVxcdTAwM2VsaXN0KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTQ0OlxcdF9fZHBsbF9kZXZpY2VfcHV0KGRwbGwsIFxcdTAwMjZyZWctXFx1MDAzZXRyYWNrZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NDUtXFx0a2ZyZWUocmVnKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTQ2LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NDc6XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZkcGxsLVxcdTAwM2VyZWdpc3RyYXRpb25fbGlzdCkpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTQ4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTQ5LVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTUwLVxcdH1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTUxOlxcdHhhX2NsZWFyX21hcmsoXFx1MDAyNmRwbGxfZGV2aWNlX3hhLCBkcGxsLVxcdTAwM2VpZCwgRFBMTF9SRUdJU1RFUkVEKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTUyOlxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTUzLX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTU0OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3VucmVnaXN0ZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NTUtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU1NjpzdGF0aWMgaW50IGRwbGxfcGluX2lkeF9hbGxvYyh1MzIgKnBpbl9pZHgpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU1Ny17XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTYzLVxcdC8qIEFsbG9jIHVuaXF1ZSBudW1iZXIgZnJvbSBJREEuIE51bWJlciBiZWxvbmdzIHRvIFxcdTAwM2MwLCBJTlRfTUFYXFx1MDAzZSByYW5nZSAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NjQ6XFx0cmV0ID0gaWRhX2FsbG9jKFxcdTAwMjZkcGxsX3Bpbl9pZHhfaWRhLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTY1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU3My1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTc0OnN0YXRpYyB2b2lkIGRwbGxfcGluX2lkeF9mcmVlKHUzMiBwaW5faWR4KVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NzUte1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU4Mi1cXHRwaW5faWR4IC09ICh1MzIpSU5UX01BWCArIDE7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU4MzpcXHRpZGFfZnJlZShcXHUwMDI2ZHBsbF9waW5faWR4X2lkYSwgcGluX2lkeCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU4NC19XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU4NS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTg2OnN0YXRpYyB2b2lkIGRwbGxfcGluX3Byb3BfZnJlZShzdHJ1Y3QgZHBsbF9waW5fcHJvcGVydGllcyAqcHJvcClcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTg3LXtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01OTMtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU5NDpzdGF0aWMgaW50IGRwbGxfcGluX3Byb3BfZHVwKGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpzcmMsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU5NTpcXHRcXHRcXHQgICAgIHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpkc3QpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU5Ni17XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjM1LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2MzY6c3RhdGljIHN0cnVjdCBkcGxsX3BpbiAqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYzNzpkcGxsX3Bpbl9hbGxvYyh1NjQgY2xvY2tfaWQsIHUzMiBwaW5faWR4LCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYzODpcXHQgICAgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3ApXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTYzOS17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY0MDpcXHRzdHJ1Y3QgZHBsbF9waW4gKnBpbjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjQxLVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjQzLVxcdGlmIChwaW5faWR4ID09IERQTExfUElOX0lEWF9VTlNQRUMpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NjQ0OlxcdFxcdHJldCA9IGRwbGxfcGluX2lkeF9hbGxvYyhcXHUwMDI2cGluX2lkeCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY0NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY2My1cXHR9XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY2NDpcXHRyZXQgPSBkcGxsX3Bpbl9wcm9wX2R1cChwcm9wLCBcXHUwMDI2cGluLVxcdTAwM2Vwcm9wKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjY1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjY3LVxcdHJlZmNvdW50X3NldChcXHUwMDI2cGluLVxcdTAwM2VyZWZjb3VudCwgMSk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY2ODpcXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgWEFfRkxBR1NfQUxMT0MpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NjktXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2cGluLVxcdTAwM2VwYXJlbnRfcmVmcywgWEFfRkxBR1NfQUxMT0MpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzAtXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2cGluLVxcdTAwM2VyZWZfc3luY19waW5zLCBYQV9GTEFHU19BTExPQyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3MTpcXHRyZXQgPSB4YV9hbGxvY19jeWNsaWMoXFx1MDAyNmRwbGxfcGluX3hhLCBcXHUwMDI2cGluLVxcdTAwM2VpZCwgcGluLCB4YV9saW1pdF8zMmIsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3MjpcXHRcXHRcXHQgICAgICBcXHUwMDI2ZHBsbF9waW5feGFfaWQsIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY3NC1cXHRcXHRnb3RvIGVycl94YV9hbGxvYztcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Njc1OlxcdHJlZl90cmFja2VyX2Rpcl9pbml0KFxcdTAwMjZwaW4tXFx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFxcXCJkcGxsX3BpblxcXCIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzYtXFx0cmV0dXJuIHBpbjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjc3LWVycl94YV9hbGxvYzpcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Njc4OlxcdHhhX2Rlc3Ryb3koXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjc5LVxcdHhhX2Rlc3Ryb3koXFx1MDAyNnBpbi1cXHUwMDNlcGFyZW50X3JlZnMpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02ODAtXFx0eGFfZGVzdHJveShcXHUwMDI2cGluLVxcdTAwM2VyZWZfc3luY19waW5zKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NjgxOlxcdGRwbGxfcGluX3Byb3BfZnJlZShcXHUwMDI2cGluLVxcdTAwM2Vwcm9wKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjgyLWVycl9waW5fcHJvcDpcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02ODQtZXJyX3Bpbl9hbGxvYzpcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Njg1OlxcdGRwbGxfcGluX2lkeF9mcmVlKHBpbl9pZHgpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02ODYtXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02ODgtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY4OTpzdGF0aWMgdm9pZCBkcGxsX25ldGRldl9waW5fYXNzaWduKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4pXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM5OjMwLjM0NzQ5Mzc1NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY1NTQ1NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRFBMTCBOZXRsaW5rIFN1cHBvcnQgaW4gU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoaXMgYGRwbGxgIHRoaW5nLiBSaWdodCwgYGRwbGxgIGlzIGEgc3Vic3lzdGVtLCBhbmQgSSByZWNhbGwgc2VlaW5nIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGluIGBkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyIGhhdmUgYW55IGRlc2NyaXB0aW9ucyBmb3IgYGRwbGxgIG5ldGxpbmsgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBhbHJlYWR5IGNvdmVyZWQuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHR5cGljYWwgcGxhY2VzLiBMZXQncyBzZWUsIG1heWJlIGl0J3MgaW4gYG5ldC9kcGxsYCBvciBwb3NzaWJseSBgZHJpdmVycy9kcGxsL2RwbGxfbmwuY2AuIEFoYSEgRm91bmQgYGRwbGxfbmwuY2AsIHRoYXQncyBhIGdvb2Qgc2lnbi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBTeXprYWxsZXIgaW5mcmFzdHJ1Y3R1cmUuIERvZXMgU3l6a2FsbGVyIGtub3cgYWJvdXQgdGhpcyBgZHBsbGAgbmV0bGluayBpbnRlcmZhY2U/IEknbGwgc2VhcmNoIHRoZSBgc3lzL2xpbnV4L2AgZGlyZWN0b3J5IHdpdGhpbiBTeXprYWxsZXIgZm9yIGFueSByZWxldmFudCBkZWZpbml0aW9ucywgbG9va2luZyBmb3IgYW55dGhpbmcgbmFtZWQgYGRwbGxgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDc5NzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6MzUuMjEzMDQxMzM1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU1MzkzNjIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6MzUuNzI4NTk0MDM3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMjExOTkxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEUExMIEZ1enppbmcgUmVhY2hhYmlsaXR5KipcblxuT2theSwgSSBuZWVkIHRvIHJlY2FsaWJyYXRlIGhlcmUuIEknbSBkZWVwIGluIHRoZSBrZXJuZWwgdHJlZSwgbm90IHRoZSBzeXprYWxsZXIgcmVwb3NpdG9yeS4gVGhhdCBjaGFuZ2VzIHRoaW5nczsgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gc3l6a2FsbGVyJ3MgaW50ZXJuYWxzIHJpZ2h0IG5vdy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBzZWUgaWYgdGhlIGBkcGxsYCBuZXRsaW5rIGZhbWlseSBpcyBldmVuIHRhcmdldGVkLiBJIGNhbiBjaGVjayB0aGlzIGJ5IHZlcmlmeWluZyB0aGUgZXhpc3RlbmNlIG9mIGEgYGdlbmxfZmFtaWx5YCBlbnRyeSBmb3IgYGRwbGxgLiBZdXAsIGl0J3MgYSBHZW5lcmljIE5ldGxpbmsgZmFtaWx5LCB3aGljaCBtZWFucyBzeXprYWxsZXIncyBgZ2VuZXRsaW5rYCBmdXp6ZXIgKnNob3VsZCogYXV0b21hdGljYWxseSBwaWNrIGl0IHVwLCBwcm92aWRlZCBpdCdzIHJlZ2lzdGVyZWQuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGB6bDMwNzN4YCAqZHJpdmVyKiBpcyByZWFjaGFibGUsIHdoaWNoIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZS4gSWYgdGhlIGRyaXZlciBmYWlscyB0byBwcm9iZSBzdWNjZXNzZnVsbHksIHRoZSBEUExMIGRldmljZSBhbmQgdGhlIFBUUCBjbG9jayB3b24ndCBnZXQgcmVnaXN0ZXJlZC4gVGhhdCBtZWFucyB0aGUgbmV0bGluayBhbmQgUFRQIGlvY3RscyB3b24ndCBldmVuIG1ha2UgaXQgdG8gdGhlIGRyaXZlcidzIGNvZGUsIHNvIG5vIGZ1enppbmcgc3VjY2Vzcy5cblxuQW5kIGhlcmUncyB3aGVyZSBpdCBnZXRzIHRyaWNreS4gVGhhdCBkcml2ZXIgaXMgaGFyZHdhcmUtc3BlY2lmaWMsIHJlcXVpcmluZyBzcGVjaWZpYyBJMkMvU1BJIGhhcmR3YXJlLiBJdCBjaGVja3MgdGhlIGNoaXAgSUQsIHdoaWNoIG1lYW5zIGl0IGNhbm5vdCBiZSBlbXVsYXRlZCBlYXNpbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gU28gZmFyLCBubyBkaWNlLlxuXG5XYWl0LCBpcyB0aGVyZSAqYW55KiByZW1vdGUgY2hhbmNlIHRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCB1c2luZyBgaTJjLXN0dWJgPyBQcmV2aW91c2x5LCBJIG5vdGVkIHRoYXQgYGkyYy1zdHViYCBvbmx5IGRlYWxzIHdpdGggOC1iaXQgcmVnaXN0ZXIgYWRkcmVzc2VzLCB3aGlsZSBgemwzMDczeGAgdXNlcyAxNi1iaXQgcmVnaXN0ZXJzLiBGb3JnZXQgYGkyYy1zdHViYC5cblxuQnV0IHdhaXQsIGhvbGQgb24uIElzIGBpMmMtc3R1YmAgdGhlIG9ubHkgb3B0aW9uPyBXaGF0IGFib3V0IG90aGVyIHBvc3NpYmlsaXRpZXM/IFRoZXJlIGFyZSBubyBgaTJjLW1vY2tgIG9yIGBzcGktbW9ja2AgaW4gdGhlIHVwc3RyZWFtIGtlcm5lbC4gYHZrbXNgIGlzIGZvciBEUk07IHdyb25nIGRvbWFpbi4gYG1hYzgwMjExX2h3c2ltYCBpcyBmb3IgV2lGaSwgaXJyZWxldmFudC4gQW5kIGBuZXRkZXZzaW1gIGlzIGZvciBuZXR3b3JraW5nLCBhbHNvIG5vdCByZWxldmFudC5cblxuV2hhdCBhYm91dCBgZHBsbGAgaXRzZWxmPyBEb2VzIHRoZSBgZHBsbGAgcGFydCBoYXZlIGFueSBraW5kIG9mIHNpbXVsYXRvciBvciBtb2NraW5nIGNhcGFiaWxpdHk/IExldCdzIGludmVzdGlnYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIERQTEwgc2ltdWxhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODM4MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozOTo0NC43NDk3OTY3NTFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzA1MzQ2OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbC4qc2ltXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdD01NzU9Zm9yIGVhY2ggY2FsbCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyBvbmx5IHRoZSBvYmplY3QgcmVmY291bnRcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NTc2OmluY3JlYXNlcy4gQWxzbyBkcGxsX3Bpbl9wdXQoKSB3b3JrcyBzaW1pbGFybHkgdG8gZHBsbF9kZXZpY2VfcHV0KCkuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6NTAuMzgwMzM5ODg1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzOTUxNTE4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVbnJlYWNoYWJsZSBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIG5vIERQTEwgc2ltdWxhdG9yIGF2YWlsYWJsZSwgd2hpY2ggaXMgaW1tZWRpYXRlbHkgYSByb2FkYmxvY2suIFRoaXMgYHpsMzA3M3hgIGRyaXZlciBpcyBjbGVhcmx5IGhhcmR3YXJlLXNwZWNpZmljLCBtZWFuaW5nIEknbSBub3QgZ29pbmcgdG8gZ2V0IGFueXdoZXJlIHdpdGggcHJvYmluZyBpdCB3aXRob3V0IHRoZSBhY3R1YWwgc2lsaWNvbiBvciBhIGhpZ2hseSBzcGVjaWZpYyBlbXVsYXRvci4gSXQncyBhIGRlYWQgZW5kIGluIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGxpbWl0YXRpb24gZm9yIHRlc3RpbmcgdGhlc2UgbW9kaWZpY2F0aW9ucy5cblxuTm93LCBob2xkIG9uLi4uIGlzIHRoZXJlIGV2ZW4gYSAqcmVtb3RlKiBjaGFuY2UgdGhhdCB0aGUgZHJpdmVyJ3MgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZGlyZWN0bHkgYnkgc29tZXRoaW5nIGVsc2UsIHNvbWUgb3RoZXIgcGllY2Ugb2YgY29kZSB0aGF0ICppcyogcmVhY2hhYmxlPyBObywgaXQncyBwcmV0dHkgY2xlYXIgaXTigJlzIGEgc3RhbmRhbG9uZSBkcml2ZXIuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgYW55IG1lY2hhbmlzbSwgZXZlbiBvYnNjdXJlLCB0byBieXBhc3MgdGhhdCBkYW1uIGNoaXAgSUQgY2hlY2suIFBlcmhhcHMgdGhlcmUncyBhIG1vZHVsZSBwYXJhbWV0ZXIgaGlkZGVuIHNvbWV3aGVyZSB0aGF0IGZvcmNlcyB0aGUgZHJpdmVyIHRvIGxvYWQgcmVnYXJkbGVzcy4gR290dGEgaW52ZXN0aWdhdGUgdGhhdCBwb3NzaWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6NTYuNzc1NDk0MzYzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA5NjAxNDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wYXJhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6NTYuOTc2NDYyMTA4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MjkzMjE5MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpcyAtIEF6dXJpdGUgRFBMTCBEcml2ZXIqKlxuXG5Pa2F5LCBubyBtb2R1bGUgcGFyYW1ldGVycyB0byBtYW5pcHVsYXRlIHRoaW5ncyBoZXJlLiBJcyB0aGVyZSBldmVuIGEgZGVidWdmcyBpbnRlcmZhY2UsIGFueXRoaW5nLCB0byBpbmplY3QgYSBmYWtlIGNoaXAgSUQ/IE5vcGUuIFNvLCB0aGUgcHJvYmUgd2lsbCBkZWZpbml0ZWx5IGZhaWwgaWYgdGhlIGhhcmR3YXJlIGlzbid0IHByZXNlbnQuXG5cbldhaXQsIHRoZSBwcm9tcHTigKYgcmlnaHQsIGl0IHNheXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiBpdCdzIGp1c3QgZG9jcywgS2NvbmZpZywgY29tbWVudHMsIGxvZ2dpbmcsIGRlY29yYXRpdmUgY2hhbmdlcywgb3IgbnVtZXJpYyBjb25zdGFudHMgdGhhdCBkb24ndCBjaGFuZ2UgZmxvdywgb3LigKYgYW5kIHRoaXMgaXMga2V54oCmICpjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzKi5cblxuVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgTWljcm9jaGlwJ3MgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzLCB1c2luZyBJMkMvU1BJLiBJdCAqc3RyaWN0bHkqIGNoZWNrcyB0aGUgY2hpcCBJRCBkdXJpbmcgdGhlIHByb2JlLiBUaGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIHRoYXQgSSBrbm93IG9mLCB1bmxpa2UsIHNheSwgdGhlIG1hYzgwMjExIHN0dWZmLiBHZW5lcmljIEkyQyBtb2NrcyBjYW4ndCBzaW11bGF0ZSB0aGUgcmVnaXN0ZXIgYWRkcmVzc2luZyBlaXRoZXIuIFNvLCBpdCdzICppbXBvc3NpYmxlKiB0byByZWFjaCB0aGlzIGNvZGUgaW4gUUVNVSwgR0NFLCBvciBhbnl0aGluZyBsaWtlIHRoYXQuIFRoZSBwcm9iZSAqd2lsbCogZmFpbC4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgZGVmaW5pdGUgV29ydGhGdXp6aW5nPWZhbHNlIHNpdHVhdGlvbi5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2guIElzIHRoZXJlICphbnkqIG90aGVyIHdheSB0byBnZXQgdG8gdGhpcz8gQ291bGQgdGhlIFBUUCBjbG9jayBzb21laG93IGJlIHJlZ2lzdGVyZWQgKndpdGhvdXQqIHRoZSBwcm9iZSBzdWNjZWVkaW5nPyBOby4gYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgIGlzIGNhbGxlZCBmcm9tIGB6bDMwNzN4X2RwbGxfcmVnaXN0ZXJgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgemwzMDczeF9kZXZtX2RwbGxfaW5pdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB6bDMwNzN4X2Rldl9wcm9iZWAuIEhtbS4gQ291bGQgYHpsMzA3M3hfZGV2X3Byb2JlYCBiZSBjYWxsZWQgZnJvbSAqc29tZXdoZXJlIGVsc2UqPyBBaCwgaXQncyBleHBvcnRlZCBhcyBgemwzMDczeF9kZXZfcHJvYmVgLCBidXQgaXQncyBvbmx5IGNhbGxlZCBieSBgemwzMDczeF9pMmNfcHJvYmVgIGFuZCBgemwzMDczeF9zcGlfcHJvYmVgLiBTbyBpdCdzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LlxuXG5Pa2F5LCBsZXQgbWUgcXVpY2tseSBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIHNuZWFreSBsaXR0bGUgY2FsbCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBMZXQncyBzZWUuLi5cblxuRmlsZXMgbW9kaWZpZWQ6XG5gZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ2BcbmBkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNgXG5gZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oYFxuYGRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY2BcbmBkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhgXG5gZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jYFxuYGRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaGBcbmBkcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhgXG5BbGwgb2YgdGhlbSBhcmUgaW5zaWRlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9gLiBHb29kLCBhbGwgbmVhdGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhhdCBkcml2ZXIuXG5cbkFscmlnaHQsIEknbSBzZXR0aW5nIFdvcnRoRnV6emluZz1mYWxzZSBhbmQgY3JhZnRpbmcgYSBzb2xpZCByZWFzb25pbmcgc3RhdGVtZW50LlxuXG5UaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKGB6bDMwNzN4YCkuIEl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBJMkMvU1BJIGRyaXZlci4gRHVyaW5nIGluaXRpYWxpemF0aW9uIChgemwzMDczeF9kZXZfcHJvYmVgKSwgdGhlIGRyaXZlciBzdHJpY3RseSByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIGhhcmR3YXJlIGNoaXAgSUQgKGBaTF9SRUdfSURgKS4gU2luY2UgdGhlcmUncyAqbm8qIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgZ2VuZXJpYyBJMkMgbW9ja3MgZG9uJ3Qgc3VwcG9ydCB0aGUgMTYtYml0IGFkZHJlc3NpbmcsIHRoZSBwcm9iZSB3aWxsICphbHdheXMqIGZhaWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIGFuZCBQVFAgZGV2aWNlcyB3aWxsIG5ldmVyIGJlIHJlZ2lzdGVyZWQuIEl0J3MgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiB0aGUgbW9kaWZpZWQgY29kZS5cblxuTm93IHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3NDYsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjQwOjExLjI2OTY4Mzg2M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIEkyQy9TUEkgZHJpdmVyLiBEdXJpbmcgaW5pdGlhbGl6YXRpb24gKHpsMzA3M3hfZGV2X3Byb2JlKSwgdGhlIGRyaXZlciBzdHJpY3RseSByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIGhhcmR3YXJlIGNoaXAgSUQgKFpMX1JFR19JRCkuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIHRoZSBrZXJuZWwsIGFuZCBnZW5lcmljIEkyQyBtb2NrcyBsaWtlIGkyYy1zdHViIGRvIG5vdCBzdXBwb3J0IHRoZSAxNi1iaXQgcmVnaXN0ZXIgYWRkcmVzc2luZyByZXF1aXJlZCBieSB0aGlzIGRyaXZlciwgdGhlIHByb2JlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGZhaWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgYW5kIFBUUCBkZXZpY2VzIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBJMkMvU1BJIGRyaXZlci4gRHVyaW5nIGluaXRpYWxpemF0aW9uICh6bDMwNzN4X2Rldl9wcm9iZSksIHRoZSBkcml2ZXIgc3RyaWN0bHkgcmVhZHMgYW5kIHZlcmlmaWVzIHRoZSBoYXJkd2FyZSBjaGlwIElEIChaTF9SRUdfSUQpLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiB0aGUga2VybmVsLCBhbmQgZ2VuZXJpYyBJMkMgbW9ja3MgbGlrZSBpMmMtc3R1YiBkbyBub3Qgc3VwcG9ydCB0aGUgMTYtYml0IHJlZ2lzdGVyIGFkZHJlc3NpbmcgcmVxdWlyZWQgYnkgdGhpcyBkcml2ZXIsIHRoZSBwcm9iZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyBmYWlsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIGFuZCBQVFAgZGV2aWNlcyB3aWxsIG5ldmVyIGJlIHJlZ2lzdGVyZWQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj88pt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 13:17:06 +0000 UTC FinishedAt: 2026-07-13 13:40:13 +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+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIEkyQy9TUEkgZHJpdmVyLiBEdXJpbmcgaW5pdGlhbGl6YXRpb24gKHpsMzA3M3hfZGV2X3Byb2JlKSwgdGhlIGRyaXZlciBzdHJpY3RseSByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIGhhcmR3YXJlIGNoaXAgSUQgKFpMX1JFR19JRCkuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIHRoZSBrZXJuZWwsIGFuZCBnZW5lcmljIEkyQyBtb2NrcyBsaWtlIGkyYy1zdHViIGRvIG5vdCBzdXBwb3J0IHRoZSAxNi1iaXQgcmVnaXN0ZXIgYWRkcmVzc2luZyByZXF1aXJlZCBieSB0aGlzIGRyaXZlciwgdGhlIHByb2JlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGZhaWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgYW5kIFBUUCBkZXZpY2VzIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWE2MDBhMWJkNjVhMjFmNDc0ZGJlY2Y5ZWU2ZDlkYjczZWI4MjgwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDEzOjM2OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5pbmRleCA1YmJjYTE0MDA1ODEzMS4uZDA1NzRhZDU3MWQzZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXG5AQCAtMiw3ICYjNDM7Miw3IEBAXG4gXG4gY29uZmlnIFpMMzA3M1hcbiBcdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tXHRkZXBlbmRzIG9uIE5FVFxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuIFx0c2VsZWN0IERQTExcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuIFx0c2VsZWN0IFJFR01BUFxuQEAgLTE2LDcgJiM0MzsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcJiMzNDtJMkMgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNaWNyb2NoaXAgQXp1cml0ZSBkZXZpY2VzXCYjMzQ7XG4tXHRkZXBlbmRzIG9uIEkyQyBcdTAwMjZcdTAwMjYgTkVUXG4mIzQzO1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgJiM0MzsyOCw3IEBAIGNvbmZpZyBaTDMwNzNYX0kyQ1xuIFxuIGNvbmZpZyBaTDMwNzNYX1NQSVxuIFx0dHJpc3RhdGUgXCYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1wmIzM0O1xuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuJiM0MztcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBTUEkgXHUwMDI2XHUwMDI2IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gXHRzZWxlY3QgUkVHTUFQX1NQSVxuIFx0c2VsZWN0IFpMMzA3M1hcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbmluZGV4IDRlYzJjZjUzZGFkNDY4Li41MzAzMmU3ODJmZDRhZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0yMDIsNiAmIzQzOzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxuIFx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcbiBcdFx0emwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTtcbiBcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNmNoYW4tXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4gXG4gXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cbkBAIC0yMzQsNiAmIzQzOzI0MCwzMDcgQEAgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqemwzMDczeF9jaGFuX3N0YXRlX2dldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LFxuIFx0cmV0dXJuIFx1MDAyNnpsZGV2LVx1MDAzZWNoYW5baW5kZXhdO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqXG4mIzQzOyAqIFBvbGxzIHRoZSBUb0QgY29udHJvbCByZWdpc3RlciB1bnRpbCB0aGUgc2VtYXBob3JlIGJpdCBpcyBjbGVhcmVkLFxuJiM0MzsgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FQlVTWSBpZiBzZW1hcGhvcmUgbm90IGNsZWFyZWQsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHRpbWVvdXQ7XG4mIzQzO1x0dTggdG9kX2N0cmw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XG4mIzQzO1x0Y2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjpcbiYjNDM7XHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXG4mIzQzO1x0XHRcdFx0ICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwgLSBpc3N1ZSBUb0QgY29tbWFuZFxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQGNtZDogVG9EIGNvbW1hbmQgdG8gZXhlY3V0ZVxuJiM0MzsgKlxuJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3RcbiYjNDM7ICogZW5zdXJlIHRoZSBkZXZpY2UgaXMgcmVhZHkgKHNlbWFwaG9yZSBjbGVhcikgYmVmb3JlIGNhbGxpbmcgYW5kXG4mIzQzOyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbiYjNDM7XHRcdFx0XHRaTF9EUExMX1RPRF9DVFJMX1NFTSB8IGNtZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQgLSByZWFkIFRvRCByZWdpc3RlcnMgYWZ0ZXIgaXNzdWluZyBhIGNvbW1hbmRcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBuZXh0X2h6OiBpZiB0cnVlLCByZWFkIHByZWRpY3RlZCBUb0QgYXQgbmV4dCAxIEh6OyBvdGhlcndpc2UgcmVhZCBjdXJyZW50XG4mIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuJiM0MzsgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbiYjNDM7e1xuJiM0MztcdHUzMiBuc2VjO1xuJiM0MztcdHU2NCBzZWM7XG4mIzQzO1x0dTggY21kO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKG5leHRfaHopXG4mIzQzO1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9ORVhUXzFIWjtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRwdHBfcmVhZF9zeXN0ZW1fcHJldHMoc3RzKTtcbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIFx1MDAyNnNlYyk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCBcdTAwMjZuc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHRzLVx1MDAzZXR2X3NlYyA9IHNlYztcbiYjNDM7XHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldFxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIHRzLnR2X25zZWMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXG4mIzQzO1x0XHRcdFx0ICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0IC0gYXRvbWljIFRvRCByZWFkLW1vZGlmeS13cml0ZSB3aXRoIHJvbGxvdmVyIGd1YXJkXG4mIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCB0byBhcHBseVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXG4mIzQzOyAqIHJlbWFpbnMgYmVmb3JlIHRoZSBuZXh0IDEgSHogcm9sbG92ZXIgdG8gc2FmZWx5IGNvbXBsZXRlIHRoZSB3cml0ZS5cbiYjNDM7ICogSWYgbGVzcyB0aGFuIDIwIG1zIHJlbWFpbnMsIHdhaXRzIGZvciB0aGUgcm9sbG92ZXIgYW5kIGluY3JlbWVudHMgdGhlXG4mIzQzOyAqIG5leHQtSHogc2Vjb25kcyBieSBvbmUuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCB0cnVlLCBcdTAwMjZ0c19uZXh0LCBOVUxMKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0LyogSWYgdG9vIGNsb3NlIHRvIChvciBwYXN0KSB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQgKi9cbiYjNDM7XHRkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTtcbiYjNDM7XHRpZiAoZGlmZi50dl9zZWMgXHUwMDNjIDAgfHwgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjIFx1MDAzYyB0aHJlc2hvbGRfbnMpKSB7XG4mIzQzO1x0XHRpZiAoIWRpZmYudHZfc2VjIFx1MDAyNlx1MDAyNiBkaWZmLnR2X25zZWMpXG4mIzQzO1x0XHRcdGZzbGVlcCgodW5zaWduZWQgbG9uZylkaWZmLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDICYjNDM7IDEpO1xuJiM0MztcdFx0dHNfbmV4dC50dl9zZWMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4mIzQzO1x0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcbiYjNDM7XHRpZiAoIXRpbWVzcGVjNjRfdmFsaWQoXHUwMDI2dHNfbmV4dCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgYWRqdXN0ZWQgVG9EIGJhY2sgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0IC0gd3JpdGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCB0byBoYXJkd2FyZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG9mZnNldDogZnJlcXVlbmN5IG9mZnNldCBpbiAyXi00OCBzdGVwc1xuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7aW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9ERl9PRkZTRVQoY2gpLCBvZmZzZXQpO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHR6bGRldi1cdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4mIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gJiM0MzstMXMpXG4mIzQzOyAqXG4mIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuJiM0MzsgKiB0byB0aGUgc3BlY2lmaWVkIGNoYW5uZWwuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxuJiM0Mzt7XG4mIzQzO1x0czY0IHRpZV9kYXRhO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXRpZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbiYjNDM7XHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgIFpMX0RQTExfVElFX0NUUkxfT1AsXG4mIzQzO1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgbnMgdG8gVElFIHVuaXRzICgwLjAxIHBzID0gMTBeLTE0IHMpICovXG4mIzQzO1x0dGllX2RhdGEgPSBkZWx0YV9ucyAqIDEwMDAwMExMO1xuJiM0MztcbiYjNDM7XHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4mIzQzO1x0XHRcdFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbiYjNDM7ICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxuJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4mIzQzOyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxuJiM0MzsgKlxuJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuJiM0MzsgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgdG9kX3N0ZXApXG4mIzQzO3tcbiYjNDM7XHR1OCBjdHJsO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBwaGFzZSBzdGVwIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuJiM0MztcdFx0XHRcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0XHQgIFpMX1BPTExfUEhBU0VfU1RFUF9USU1FT1VUX1VTKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuJiM0MztcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTEwsIGNoKSB8XG4mIzQzO1x0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcbiYjNDM7XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbiYjNDM7XHRpZiAodG9kX3N0ZXApXG4mIzQzO1x0XHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTCwgY3RybCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTc1Li45ZGM1YTNmMTk5MWYxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCAmIzQzOzUsMTIgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RkZGVmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cmVncy5oXCYjMzQ7XG4gXG4mIzQzO3N0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcDtcbiBzdHJ1Y3QgemwzMDczeF9kZXY7XG4gXG4gLyoqXG5AQCAtMTYsNiAmIzQzOzE4LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2O1xuICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVcbiAgKiBAbW9kZV9yZWZzZWw6IG1vZGUgYW5kIHJlZmVyZW5jZSBzZWxlY3Rpb24gcmVnaXN0ZXIgdmFsdWVcbiAgKiBAcmVmX3ByaW86IHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgKDQgYml0cyBwZXIgcmVmLCBQL04gcGFja2VkKVxuJiM0MzsgKiBAb3V0X3N0ZXBfdGltZV9tYXNrOiBvdXRwdXQgc3RlcC10aW1lIG1hc2tcbiAgKiBAbW9uX3N0YXR1czogbW9uaXRvciBzdGF0dXMgcmVnaXN0ZXIgdmFsdWVcbiAgKiBAcmVmc2VsX3N0YXR1czogcmVmZXJlbmNlIHNlbGVjdGlvbiBzdGF0dXMgcmVnaXN0ZXIgdmFsdWVcbiAgKiBAZGZfb2Zmc2V0OiBmcmVxdWVuY3kgb2Zmc2V0IHZzIHRyYWNrZWQgcmVmZXJlbmNlIGluIDJeLTQ4IHN0ZXBzXG5AQCAtMjYsNiAmIzQzOzI5LDkgQEAgc3RydWN0IHpsMzA3M3hfY2hhbiB7XG4gXHRcdHU4XHRtb2RlX3JlZnNlbDtcbiBcdFx0dThcdHJlZl9wcmlvW1pMMzA3M1hfTlVNX1JFRlMgLyAyXTtcbiBcdCk7XG4mIzQzO1x0c3RydWN0X2dyb3VwKGludiwgLyogSW52YXJpYW50cyAqL1xuJiM0MztcdFx0dTE2XHRvdXRfc3RlcF90aW1lX21hc2s7XG4mIzQzO1x0KTtcbiBcdHN0cnVjdF9ncm91cChzdGF0LFxuIFx0XHR1OFx0bW9uX3N0YXR1cztcbiBcdFx0dThcdHJlZnNlbF9zdGF0dXM7XG5AQCAtNDIsNiAmIzQzOzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4mIzQzO1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSk7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbiYjNDM7XHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbiYjNDM7XG4mIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7XG4mIzQzO1xuJiM0MztpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKTtcbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX2RmX29mZnNldF9nZXQgLSBnZXQgY2FjaGVkIGRmX29mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZVxuICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbkBAIC0yMDAsNiAmIzQzOzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXG4mIzQzOyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbiYjNDM7XHRcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjMzLDQgJiM0MzsyNjgsMTcgQEAgc3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcbiBcdHJldHVybiBGSUVMRF9HRVQoWkxfRFBMTF9SRUZTRUxfU1RBVFVTX1JFRlNFTCwgY2hhbi1cdTAwM2VyZWZzZWxfc3RhdHVzKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxuJiM0MzsgKiBAb3V0OiBvdXRwdXQgaW5kZXhcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9uc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO3psMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCBvdXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gISEoY2hhbi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChvdXQpKTtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWYgLyogX1pMMzA3M1hfQ0hBTl9IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG5pbmRleCA3ZjVhZmFhYWU2MzQyZi4uYjJmOWZjOTdmZDFiNjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuQEAgLTEwMzMsNiAmIzQzOzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxcblwmIzM0Oyk7XG4mIzQzO1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbmluZGV4IDc4ZGMyMDhmM2VlYTJhLi4yZGM4MzZkMGM4ZjZiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5AQCAtMjYsNiAmIzQzOzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7XG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVNcdFx0KDMwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9QSEFTRV9TVEVQX1RJTUVPVVRfVVNcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4mIzQzOyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VU1x0KDMwICogVVNFQ19QRVJfTVNFQylcbiYjNDM7I2RlZmluZSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXG4gXG4gZW51bSB6bDMwNzN4X2ZsYWdzIHtcbiBcdFpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsXG5AQCAtNTUsNiAmIzQzOzU5LDggQEAgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHtcbiAgKiBAcmVnbWFwOiByZWdtYXAgdG8gYWNjZXNzIGRldmljZSByZWdpc3RlcnNcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXG4gICogQG11bHRpb3BfbG9jazogdG8gc2VyaWFsaXplIG11bHRpcGxlIHJlZ2lzdGVyIG9wZXJhdGlvbnNcbiYjNDM7ICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnNcbiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnNcbiAgKiBAcmVmOiBhcnJheSBvZiBpbnB1dCByZWZlcmVuY2VzJiMzOTsgaW52YXJpYW50c1xuICAqIEBvdXQ6IGFycmF5IG9mIG91dHMmIzM5OyBpbnZhcmlhbnRzXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzXG5AQCAtNzEsNiAmIzQzOzc3LDggQEAgc3RydWN0IHpsMzA3M3hfZGV2IHtcbiBcdHN0cnVjdCByZWdtYXBcdFx0XHQqcmVnbWFwO1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvXHQqaW5mbztcbiBcdHN0cnVjdCBtdXRleFx0XHRcdG11bHRpb3BfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwaGFzZV9zdGVwX2xvY2s7XG4gXG4gXHQvKiBJbnZhcmlhbnRzICovXG4gXHRzdHJ1Y3QgemwzMDczeF9yZWZcdHJlZltaTDMwNzNYX05VTV9SRUZTXTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IGQ5MWY1MmI1OGVhZTM0Li43YzExZGUzNTgyMWFlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5AQCAtMTQsNiAmIzQzOzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gXG5AQCAtNDIsNiAmIzQzOzQ0LDcgQEBcbiAgKiBAcGhhc2Vfb2Zmc2V0OiBsYXN0IHNhdmVkIHBpbiBwaGFzZSBvZmZzZXRcbiAgKiBAZnJlcV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgZnJhY3Rpb25hbCBmcmVxdWVuY3kgb2Zmc2V0XG4gICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5XG4mIzQzOyAqIEBwZXJvdXRfaWR4OiBQVFAgcGVyb3V0IGNoYW5uZWwgaW5kZXgsIG9yIC0xIGlmIG5vdCBwZXJvdXQtZWxpZ2libGVcbiAgKi9cbiBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuQEAgLTU5LDYgJiM0Mzs2Miw3IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcbiBcdHM2NFx0XHRcdHBoYXNlX29mZnNldDtcbiBcdHM2NFx0XHRcdGZyZXFfb2Zmc2V0O1xuIFx0dTMyXHRcdFx0bWVhc3VyZWRfZnJlcTtcbiYjNDM7XHRzOFx0XHRcdHBlcm91dF9pZHg7XG4gfTtcbiBcbiAvKlxuQEAgLTkzNiwyMSAmIzQzOzk0MCwxNyBAQCB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gfVxuIFxuIHN0YXRpYyBpbnRcbi16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4tXHRcdFx0XHQgICAgICB2b2lkICpwaW5fcHJpdixcbi1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbi1cdFx0XHRcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7X196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4mIzQzO1x0XHRcdFx0XHR1NjQgZnJlcXVlbmN5KVxuIHtcbi1cdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcbiBcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiA9IHBpbl9wcml2O1xuIFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfc3ludGggKnN5bnRoO1xuIFx0dTMyIG5ld19kaXYsIHN5bnRoX2ZyZXE7XG4gXHRzdHJ1Y3QgemwzMDczeF9vdXQgb3V0O1xuIFx0dTggb3V0X2lkO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbiBcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4gXHRvdXQgPSAqemwzMDczeF9vdXRfc3RhdGVfZ2V0KHpsZGV2LCBvdXRfaWQpO1xuQEAgLTEwMTEsNiAmIzQzOzEwMTEsMjEgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIFx0cmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCBcdTAwMjZvdXQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuJiM0MztcdFx0XHRcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGZyZXF1ZW5jeSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludFxuIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdFx0XHRcdFx0IHZvaWQgKnBpbl9wcml2LFxuQEAgLTE2MDgsNiAmIzQzOzE2MjMsNyBAQCB6bDMwNzN4X2RwbGxfcGluX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyLFxuIFx0cGluLVx1MDAzZWRwbGwgPSB6bGRwbGw7XG4gXHRwaW4tXHUwMDNlZGlyID0gZGlyO1xuIFx0cGluLVx1MDAzZWlkID0gaWQ7XG4mIzQzO1x0cGluLVx1MDAzZXBlcm91dF9pZHggPSAtMTtcbiBcbiBcdHJldHVybiBwaW47XG4gfVxuQEAgLTE2MjYsNiAmIzQzOzE2NDIsNDQgQEAgemwzMDczeF9kcGxsX3Bpbl9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4pXG4gXHRrZnJlZShwaW4pO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0IC0gY2hlY2sgaWYgb3V0cHV0IHBpbiBpcyBwZXJvdXQtZWxpZ2libGVcbiYjNDM7ICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2tcbiYjNDM7ICogQHByb3BzOiBwaW4gcHJvcGVydGllcyAoYWxyZWFkeSBmZXRjaGVkIGJ5IGNhbGxlcilcbiYjNDM7ICpcbiYjNDM7ICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWRcbiYjNDM7ICogKG5vdCBkaWZmZXJlbnRpYWwpIGFuZCBzdXBwb3J0cyAxIEh6IGluIGl0cyBmcmVxdWVuY3kgbGlzdC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2VcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4mIzQzO1x0XHRcdCAgIGNvbnN0IHN0cnVjdCB6bDMwNzN4X3Bpbl9wcm9wcyAqcHJvcHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBwaW4tXHUwMDNlZHBsbDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuJiM0MztcdHU4IG91dF9pZDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAoemwzMDczeF9kZXZfb3V0X2lzX2RpZmYoemxkcGxsLVx1MDAzZWRldiwgb3V0X2lkKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcm9wcy1cdTAwM2VkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkX251bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwcm9wcy1cdTAwM2VkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkW2ldLm1pbiA9PSAxKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBwaW5cbiAgKiBAcGluOiBwb2ludGVyIHRvIERQTEwgcGluXG5AQCAtMTY2Nyw2ICYjNDM7MTcyMSw4IEBAIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwgdTMyIGluZGV4KVxuIFx0XHRpZiAocGluLVx1MDAzZXByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKVxuIFx0XHRcdC8qIENsYW1wIHByaW8gdG8gbWF4IHZhbHVlICovXG4gXHRcdFx0cGluLVx1MDAzZXByaW8gPSBaTF9EUExMX1JFRl9QUklPX01BWDtcbiYjNDM7XHR9IGVsc2UgaWYgKHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHBpbiwgcHJvcHMpKSB7XG4mIzQzO1x0XHRwaW4tXHUwMDNlcGVyb3V0X2lkeCA9IHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uX3Blcl9vdXQmIzQzOyYjNDM7O1xuIFx0fVxuIFxuIFx0LyogQ3JlYXRlIG9yIGdldCBleGlzdGluZyBEUExMIHBpbiAqL1xuQEAgLTE4OTcsNiAmIzQzOzE5NTMsOCBAQCB6bDMwNzN4X2RwbGxfcGluc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHR1OCBpZCwgaW5kZXg7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCA9IDA7XG4mIzQzO1xuIFx0LyogUHJvY2VzcyBpbnB1dCBwaW5zICovXG4gXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIFpMMzA3M1hfTlVNX1BJTlM7IGluZGV4JiM0MzsmIzQzOykge1xuIFx0XHQvKiBGaXJzdCBpbnB1dCBwaW5zIGFuZCB0aGVuIG91dHB1dCBwaW5zICovXG5AQCAtMjI4MCw0NSAmIzQzOzIzMzgsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuJiM0MzsvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiAmIzQzOy0xJSBvZiBub21pbmFsIGluIHBwYiAqL1xuJiM0MzsjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbiYjNDM7XG4gLyoqXG4tICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2Vcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0gKiBAY2g6IERQTEwgY2hhbm5lbCBudW1iZXJcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnNcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgY3VycmVudCB0aW1lXG4mIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4gICpcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZmFsc2UsIHRzLCBzdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEB0czogdGltZXNwZWMgd2l0aCB0aW1lIHRvIHNldFxuICAqXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiB7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHB0cF9pbmZvKTtcbiBcbi1cdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuLVx0aWYgKCF6bGRwbGwpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4tXHR6bGRwbGwtXHUwMDNlZGV2ID0gemxkZXY7XG4tXHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbi1cdG11dGV4X2luaXQoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIHpsZHBsbDtcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbiYjNDM7ICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHMgKG11c3QgYmUgd2l0aGluICgtTlNFQ19QRVJfU0VDLFxuJiM0MzsgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4mIzQzOyAqXG4mIzQzOyAqIFVzZXMgdGhlIG91dHB1dCBwaGFzZSBzdGVwIG1lY2hhbmlzbSB3aXRoIHRvZF9zdGVwPTEgdG8gYWRqdXN0IGJvdGhcbiYjNDM7ICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4mIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLlxuJiM0MzsgKlxuJiM0MzsgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4mIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzXG4mIzQzOyAqIHVzZXMgdG9kX3N0ZXAgdG8gYWRqdXN0IGJvdGggb3V0cHV0cyBhbmQgdGhlIFRvRCBjb3VudGVyLiBSZW1haW5pbmdcbiYjNDM7ICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4mIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlXG4mIzQzOyAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHM2NCBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHUxNiBzeW50aF9tYXNrW1pMMzA3M1hfTlVNX1NZTlRIU10gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuJiM0MztcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbiYjNDM7XHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XG4mIzQzO1x0czMyIHN0ZXBfY3ljbGVzO1xuJiM0MztcdHUzMiBzeW50aF9mcmVxO1xuJiM0MztcdGludCByYztcbiYjNDM7XHR1OCBpO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMsIGxpc3QpIHtcbiYjNDM7XHRcdHU4IG91dF9pZCwgc3ludGhfaWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0b3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4mIzQzO1x0XHRpZiAoc3ludGhfaWQgXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgb3V0X2lkKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzeW50aF9tYXNrW3N5bnRoX2lkXSB8PSBCSVQob3V0X2lkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuJiM0MztcdFx0aWYgKCF6bDMwNzN4X3N5bnRoX2lzX2VuYWJsZWQoc3ludGgpIHx8XG4mIzQzO1x0XHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVx1MDAzZWlkKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovXG4mIzQzO1x0XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4mIzQzO1x0XHRcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3ludGhfbWFza1tpXSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LyogU2FmZSBmb3IgczMyOiBtYXggc3ludGggZnJlcSBpcyA3NTAgTUh6ICovXG4mIzQzO1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXG4mIzQzO1x0XHRcdFx0XHQgICAgICF0b2Rfc3RlcHBlZCk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0aWYgKHRvZF9zdGVwcGVkKSB7XG4mIzQzO1x0XHRcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O1BhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR0b2Rfc3RlcHBlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxuJiM0MztcdCAqIGxvd2VzdC1JRCBzeW50aCYjMzk7cyBwZXJpb2QgKGVtcHR5IG91dHB1dCBtYXNrKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXRvZF9zdGVwcGVkKSB7XG4mIzQzO1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuJiM0MztcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RlcF9jeWNsZXMsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxuLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUgLSBhZGp1c3QgUFRQIGNsb2NrIHRpbWVcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4gICpcbi0gKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKFx1MDAzZT0gMSBzZWNvbmQpIGFyZSBzcGxpdCBpbnRvIGEgVG9EXG4mIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbiYjNDM7ICogdGhlIHN1Yi1zZWNvbmQgcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgcGhhc2Ugc3RlcCBkaXJlY3RseSxcbiYjNDM7ICogZmFsbGluZyBiYWNrIHRvIFRvRCByZWFkLW1vZGlmeS13cml0ZSBpZiBwaGFzZSBzdGVwIGlzIHVuYXZhaWxhYmxlLlxuJiM0MzsgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbiYjNDM7ICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHNlY29uZHMgYW5kIFRJRSB3cml0ZSBmb3IgdGhlIHN1Yi1zZWNvbmRcbiYjNDM7ICogcmVtYWluZGVyLiBTdWItc2Vjb25kIGRlbHRhcyB1c2UgVElFIHdyaXRlIGRpcmVjdGx5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuICAqL1xuLXZvaWRcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxuIHtcbi1cdFdBUk4oemxkcGxsLVx1MDAzZWRwbGxfZGV2LCBcJiMzNDtEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXHUwMDNlZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbiYjNDM7XHRpbnQgcmM7XG4gXG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdGtmcmVlKHpsZHBsbCk7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBNb2RlcyB3aXRob3V0IHBoYXNlIHN0ZXAgb3IgVElFIHVzZSBwbGFpbiBUb0QgYWRqdXN0ICovXG4mIzQzO1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBuc190b190aW1lc3BlYzY0KGRlbHRhKSk7XG4mIzQzO1xuJiM0MztcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbiYjNDM7XHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxuJiM0MztcdCAqIChwaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGFicyhkZWx0YSkgXHUwMDNlPSBOU0VDX1BFUl9TRUMpIHtcbiYjNDM7XHRcdHMzMiByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0dHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgXHUwMDI2cmVtYWluZGVyKTtcbiYjNDM7XHRcdHRzLnR2X25zZWMgPSAwO1xuJiM0MztcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4mIzQzO1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCB0cyk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XG4mIzQzO1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5vIHN1Yi1zZWNvbmQgcmVtYWluZGVyLCBkb25lICovXG4mIzQzO1x0XHRpZiAoIWRlbHRhKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFwcGx5IHN1Yi1zZWNvbmQgZGVsdGEgdmlhIHBoYXNlIHN0ZXAgKE5DTykgb3IgVElFIHdyaXRlICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xuJiM0MztcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgZGVsdGEpO1xuJiM0MztcdFx0aWYgKCFyYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4mIzQzO1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLFxuJiM0MztcdFx0XHRcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xuJiM0MztcbiYjNDM7XHQvKiBJbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBib3RoIHBoYXNlIHN0ZXAvVElFIHdyaXRlIGFuZCBmYWxsYmFja1xuJiM0MztcdCAqIFRvRCBhZGp1c3QgZmFpbCBhZnRlciBzZWNvbmRzIHdlcmUgYWxyZWFkeSBjb21taXR0ZWQsIHJldHVyblxuJiM0MztcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4mIzQzO1x0ICogYXBwbHlpbmcgc2Vjb25kcyBhZ2Fpbi4gVGhlIHN1Yi1zZWNvbmQgcmVzaWR1YWwgd2lsbCBzZWxmLWNvcnJlY3RcbiYjNDM7XHQgKiBpbiB0aGUgbmV4dCBzZXJ2byBjeWNsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmMgXHUwMDI2XHUwMDI2IHNlY19hZGp1c3RlZCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oemxkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7U3ViLXNlY29uZCBhZGp1c3RtZW50IGZhaWxlZCBhZnRlciBzZWNvbmRzIGFwcGxpZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUgLSBhZGp1c3QgUFRQIGNsb2NrIGZyZXF1ZW5jeVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGZvciBOQ08uIFdyaXRlcyB0aGUgZGVsdGEgZnJlcXVlbmN5IG9mZnNldCByZWdpc3Rlci5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIE5DTyBwaW4gaXMgbm90IGNvbm5lY3RlZCwgXHUwMDNjMCBvbiBlcnJvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4mIzQzO1x0czY0IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVydCBzY2FsZWRfcHBtIHRvIGRmX29mZnNldCBpbiAyXi00OCBzdGVwczpcbiYjNDM7XHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuJiM0MztcdCAqXG4mIzQzO1x0ICogU2ltcGxpZnkgdG8gYXZvaWQgb3ZlcmZsb3c6XG4mIzQzO1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuJiM0MztcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcbiYjNDM7XHQgKi9cbiYjNDM7XHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbiYjNDM7XHRpZiAob2Zmc2V0ID09IGNoYW4tXHUwMDNlZGZfb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIG9mZnNldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxuJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbiYjNDM7ICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuJiM0MzsgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24mIzM5O3Qgc3VwcG9ydCBUSUUsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZWx0YSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGRlbHRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHMzMlxuJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4mIzQzO1x0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3BpbiAtIGZpbmQgcGluIGJ5IHBlcm91dCBjaGFubmVsIGluZGV4XG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuJiM0MzsgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgcGluLCBvciBOVUxMIGlmIG5vdCBmb3VuZFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpcbiYjNDM7emwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBpbnQgaWR4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAocGluLVx1MDAzZXBlcm91dF9pZHggPT0gaWR4KVxuJiM0MztcdFx0XHRyZXR1cm4gcGluO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcbiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBycTogdGhlIHJlcXVlc3RlZCBjbG9jayBmdW5jdGlvbiBhbmQgcGFyYW1ldGVyc1xuJiM0MzsgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXG4mIzQzOyAqXG4mIzQzOyAqIEhhbmRsZXMgUFRQX0NMS19SRVFfUEVST1VUIHJlcXVlc3RzLiBPbmx5IDFQUFMgKHBlcmlvZCA9IDFzKSBpcyBzdXBwb3J0ZWQuXG4mIzQzOyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xuJiM0MzsgKiBhcyB0aGUgc2lnbmFsIGlzIG5vdCBkaXNhYmxlZC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaWR4O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKHJxLVx1MDAzZXR5cGUgIT0gUFRQX0NMS19SRVFfUEVST1VUKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZHggPSBycS1cdTAwM2VwZXJvdXQuaW5kZXg7XG4mIzQzO1x0aWYgKGlkeCBcdTAwM2U9IGluZm8tXHUwMDNlbl9wZXJfb3V0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXG4mIzQzO1x0ICogaXMgYSBuby1vcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW9uKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXG4mIzQzO1x0aWYgKHJxLVx1MDAzZXBlcm91dC5wZXJpb2Quc2VjICE9IDEgfHwgcnEtXHUwMDNlcGVyb3V0LnBlcmlvZC5uc2VjICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcbiYjNDM7XHRpZiAoIXBpbikge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXG4mIzQzO1x0aWYgKHpsMzA3M3hfZGV2X291dHB1dF9waW5fZnJlcV9nZXQoemxkcGxsLVx1MDAzZWRldiwgcGluLVx1MDAzZWlkKSA9PSAxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHRkcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbi1cdTAwM2VkcGxsX3Bpbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XG4mIzQzO1x0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4mIzQzO1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuJiM0MztcdC5nZXR0aW1leDY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCxcbiYjNDM7XHQuc2V0dGltZTY0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxuJiM0MztcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbiYjNDM7XHQuYWRqZmluZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUsXG4mIzQzO1x0LmFkanBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXG4mIzQzO1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4mIzQzO1x0LmVuYWJsZVx0XHQ9IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4mIzQzOyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xuJiM0MztcbiYjNDM7XHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbiYjNDM7XHRcdCBcJiMzNDt6bDMwNzN4LWRwbGwldVwmIzM0OywgemxkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNnpsZHBsbC1cdTAwM2VwdHBfaW5mbywgemxkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBEUExMJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHpsZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwdHBfY2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcbiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiYjNDM7e1xuJiM0MztcdGlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLVx1MDAzZXB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdHB0cF9jbG9ja191bnJlZ2lzdGVyKHpsZHBsbC1cdTAwM2VwdHBfY2xvY2spO1xuJiM0MztcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4mIzQzO1x0fVxuIH1cbiBcbiAvKipcbkBAIC0yNDAzLDYgJiM0MzsyODYzLDQ4IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRlcyBEUExMIGRldmljZSBzdHJ1Y3R1cmUgZm9yIGdpdmVuIERQTEwgY2hhbm5lbC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4mIzQzO1xuJiM0MztcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xuJiM0MztcdGlmICghemxkcGxsKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbiYjNDM7XHR6bGRwbGwtXHUwMDNlaWQgPSBjaDtcbiYjNDM7XHR6bGRwbGwtXHUwMDNlcHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2emxkcGxsLVx1MDAzZXBpbnMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gemxkcGxsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4mIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBEZWFsbG9jYXRlcyBnaXZlbiBEUExMIGRldmljZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBAemwzMDczeF9kcGxsX2FsbG9jLlxuJiM0MzsgKi9cbiYjNDM7dm9pZFxuJiM0Mzt6bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4mIzQzO3tcbiYjNDM7XHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCYjMzQ7RFBMTCBkZXZpY2UgaXMgc3RpbGwgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdGtmcmVlKHpsZHBsbCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogemwzMDczeF9kcGxsX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2UgYW5kIGFsbCBpdHMgcGluc1xuICAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuQEAgLTI0MzMsNiAmIzQzOzI5MzUsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuJiM0MztcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xuJiM0MztcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQ2LDcgJiM0MzsyOTU1LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiB2b2lkXG4gemwzMDczeF9kcGxsX3VucmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHtcbi1cdC8qIFVucmVnaXN0ZXIgYWxsIHBpbnMgYW5kIGRwbGwgKi9cbiYjNDM7XHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbiBcdHpsMzA3M3hfZHBsbF9kZXZpY2VfdW5yZWdpc3Rlcih6bGRwbGwpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbmluZGV4IGZhZWJjNDAyYmExYjcwLi45YjVmNzJjMzM4NDljZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5AQCAtNSw2ICYjNDM7NSw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHBsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Y29yZS5oXCYjMzQ7XG4gXG5AQCAtMjIsNiAmIzQzOzI0LDggQEBcbiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKVxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXG4gICogQHBpbnM6IGxpc3Qgb2YgcGluc1xuJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4mIzQzOyAqIEBwdHBfY2xvY2s6IHJlZ2lzdGVyZWQgUFRQIGNsb2NrIChvciBOVUxMKVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRsaXN0O1xuQEAgLTM2LDYgJiM0Mzs0MCw4IEBAIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xuIFx0ZW51bSBkcGxsX3R5cGVcdFx0XHR0eXBlO1xuIFx0ZW51bSBkcGxsX2xvY2tfc3RhdHVzXHRcdGxvY2tfc3RhdHVzO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0XHRwaW5zO1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcHRwX2Nsb2NrXHRcdCpwdHBfY2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgemwzMDczeF9kcGxsICp6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuaW5kZXggYjcwZWFkN2Q0NDk1YjIuLjQ0Nzc1N2U5OTg0NWQ4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbkBAIC0xNzksNiAmIzQzOzE3OSwyMCBAQFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRFx0XHRcdEdFTk1BU0soMiwgMClcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0lcdFx0NFxuIFxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUFx0XHRcdEdFTk1BU0soMiwgMClcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSXHRcdFx0NFxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfQ1RSTF9NQVNLXHRcdFpMX1JFRyg1LCAweDMxLCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSlcbiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVx0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXHQxXG4mIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVFx0OFxuJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4mIzQzO1xuICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMXHRcdFx0WkxfUkVHKDUsIDB4NTAsIDEpXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlx0XHRHRU5NQVNLKDcsIDQpXG5AQCAtMTkzLDYgJiM0MzsyMDcsOSBAQFxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICogUmVnaXN0ZXIgUGFnZXMgNi03LCBEUExMIERhdGFcbiYjNDM7ICpcbiYjNDM7ICogUGVyLWNoYW5uZWwgcmVnaXN0ZXJzIHdpdGggc3RyaWRlIDB4MjAuIENoYW5uZWxzIDAtMyByZXNpZGUgb24gcGFnZSA2LFxuJiM0MzsgKiBjaGFubmVsIDQgb24gcGFnZSA3LlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuICNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5AQCAtMjAyLDYgJiM0MzsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuJiM0MztcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwQywgNiwgNCwgMHgyMClcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9USUVfREFUQV80KVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDEyLCA2LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUMoX2lkeClcdFx0XHRcdFx0XFxcbiYjNDM7XHQoKF9pZHgpIFx1MDAzYyA0ID8gWkxfUkVHX0RQTExfVE9EX1NFQ18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9TRUNfNClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxuJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4mIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXHRcdFx0XHRcdFxcXG4mIzQzO1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxuJiM0MztcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgJiM0MzsyNTYsOCBAQFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX1NZTlRIX1NFTFx0XHRHRU5NQVNLKDYsIDQpXG4gXG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTS1x0XHRaTF9SRUcoOSwgMHgzNiwgMilcbiYjNDM7XG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTMxNiw2ICYjNDM7MzUzLDI1IEBAXG4gI2RlZmluZSBaTF9SRUdfT1VUUFVUX0VTWU5DX1dJRFRIXHRcdFpMX1JFRygxNCwgMHgxOCwgNClcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfUEhBU0VfQ09NUFx0XHRaTF9SRUcoMTQsIDB4MjAsIDQpXG4gXG4mIzQzOy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuJiM0MzsgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwXG4mIzQzOyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMXHRcdEdFTk1BU0soNiwgNClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXHRCSVQoMylcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcdDBcbiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFU0VUXHQxXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4mIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVx0M1xuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1x0XHRaTF9SRUcoOSwgMHgzYSwgMilcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEFcdFx0WkxfUkVHKDksIDB4M2MsIDQpXG4mIzQzO1xuIC8qXG4gICogUmVnaXN0ZXIgUGFnZSAyNTUgLSBIVyByZWdpc3RlcnMgYWNjZXNzXG4gICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgSTJDL1NQSSBkcml2ZXIuIER1cmluZyBpbml0aWFsaXphdGlvbiAoemwzMDczeF9kZXZfcHJvYmUpLCB0aGUgZHJpdmVyIHN0cmljdGx5IHJlYWRzIGFuZCB2ZXJpZmllcyB0aGUgaGFyZHdhcmUgY2hpcCBJRCAoWkxfUkVHX0lEKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gdGhlIGtlcm5lbCwgYW5kIGdlbmVyaWMgSTJDIG1vY2tzIGxpa2UgaTJjLXN0dWIgZG8gbm90IHN1cHBvcnQgdGhlIDE2LWJpdCByZWdpc3RlciBhZGRyZXNzaW5nIHJlcXVpcmVkIGJ5IHRoaXMgZHJpdmVyLCB0aGUgcHJvYmUgZnVuY3Rpb24gd2lsbCBhbHdheXMgZmFpbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgRFBMTCBhbmQgUFRQIGRldmljZXMgd2lsbCBuZXZlciBiZSByZWdpc3RlcmVkLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVhNjAwYTFiZDY1YTIxZjQ3NGRiZWNmOWVlNmQ5ZGI3M2ViODI4MDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAxMzozNjo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCmluZGV4IDViYmNhMTQwMDU4MTMxLi5kMDU3NGFkNTcxZDNmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnCkBAIC0yLDcgJiM0MzsyLDcgQEAKIAogY29uZmlnIFpMMzA3M1gKIAl0cmlzdGF0ZSAmIzM0O01pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXMmIzM0OyBpZiBDT01QSUxFX1RFU1QKLQlkZXBlbmRzIG9uIE5FVAomIzQzOwlkZXBlbmRzIG9uIE5FVCAmYW1wOyZhbXA7IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMCiAJc2VsZWN0IERQTEwKIAlzZWxlY3QgTkVUX0RFVkxJTksKIAlzZWxlY3QgUkVHTUFQCkBAIC0xNiw3ICYjNDM7MTYsNyBAQCBjb25maWcgWkwzMDczWAogCiBjb25maWcgWkwzMDczWF9JMkMKIAl0cmlzdGF0ZSAmIzM0O0kyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXMmIzM0OwotCWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUCiYjNDM7CWRlcGVuZHMgb24gSTJDICZhbXA7JmFtcDsgTkVUICZhbXA7JmFtcDsgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUwKIAlzZWxlY3QgUkVHTUFQX0kyQwogCXNlbGVjdCBaTDMwNzNYCiAJaGVscApAQCAtMjgsNyAmIzQzOzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDCiAKIGNvbmZpZyBaTDMwNzNYX1NQSQogCXRyaXN0YXRlICYjMzQ7U1BJIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlcyYjMzQ7Ci0JZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkKJiM0MzsJZGVwZW5kcyBvbiBORVQgJmFtcDsmYW1wOyBTUEkgJmFtcDsmYW1wOyBQVFBfMTU4OF9DTE9DS19PUFRJT05BTAogCXNlbGVjdCBSRUdNQVBfU1BJCiAJc2VsZWN0IFpMMzA3M1gKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKaW5kZXggNGVjMmNmNTNkYWQ0NjguLjUzMDMyZTc4MmZkNGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCkBAIC0yMDIsNiAmIzQzOzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KQogCQl6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSwKIAkJemwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTsKIAomIzQzOwlyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0ssCiYjNDM7CQkJICAgICAgJmFtcDtjaGFuLSZndDtvdXRfc3RlcF90aW1lX21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O211bHRpb3BfbG9jayk7CiAKIAkvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi8KQEAgLTIzNCw2ICYjNDM7MjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsCiAJcmV0dXJuICZhbXA7emxkZXYtJmd0O2NoYW5baW5kZXhdOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhcgomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICoKJiM0MzsgKiBQb2xscyB0aGUgVG9EIGNvbnRyb2wgcmVnaXN0ZXIgdW50aWwgdGhlIHNlbWFwaG9yZSBiaXQgaXMgY2xlYXJlZCwKJiM0MzsgKiBpbmRpY2F0aW5nIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgcHJldmlvdXMgVG9EIG9wZXJhdGlvbi4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUJVU1kgaWYgc2VtYXBob3JlIG5vdCBjbGVhcmVkLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiYjNDM7CXU4IHRvZF9jdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksICZhbXA7dG9kX2N0cmwpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHsKJiM0MzsJY2FzZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWjoKJiM0MzsJCXRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQl0aW1lb3V0ID0gWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VUzsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwKJiM0MzsJCQkJICBaTF9EUExMX1RPRF9DVFJMX1NFTSwgdGltZW91dCk7CiYjNDM7CiYjNDM7CXJldHVybiByYyA9PSAtRVRJTUVET1VUID8gLUVCVVNZIDogcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKiBXcml0ZXMgdGhlIHNlbWFwaG9yZSBhbmQgY29tbWFuZCB0byBkcGxsX3RvZF9jdHJsLiBUaGUgY2FsbGVyIG11c3QKJiM0MzsgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmQKJiM0MzsgKiBtdXN0IHdhaXQgZm9yIGNvbXBsZXRpb24gaWYgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHU4IGNtZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksCiYjNDM7CQkJCVpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kCiYjNDM7ICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlCiYjNDM7ICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudAomIzQzOyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdAomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJdTMyIG5zZWM7CiYjNDM7CXU2NCBzZWM7CiYjNDM7CXU4IGNtZDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAobmV4dF9oeikKJiM0MzsJCWNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaOwomIzQzOwllbHNlCiYjNDM7CQljbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgVG9EIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpOwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsIGNtZCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksICZhbXA7c2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovCiYjNDM7CXJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgJmFtcDtuc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl0cy0mZ3Q7dHZfc2VjID0gc2VjOwomIzQzOwl0cy0mZ3Q7dHZfbnNlYyA9IG5zZWM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQHRzOiB0aW1lIHRvIHNldAomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cykKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWR5X3dhaXQoemxkZXYsIGNoKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTMyKHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfTlMoY2gpLCB0cy50dl9uc2VjKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwKJiM0MzsJCQkJICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmQKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5CiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lCiYjNDM7ICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLgomIzQzOyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZQomIzQzOyAqIG5leHQtSHogc2Vjb25kcyBieSBvbmUuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS4KJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWM2NCB0c19uZXh0LCB0c19jdXIsIGRpZmY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJLyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgJmFtcDt0c19uZXh0LCBOVUxMKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovCiYjNDM7CXJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgZmFsc2UsICZhbXA7dHNfY3VyLCBOVUxMKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBJZiB0b28gY2xvc2UgdG8gKG9yIHBhc3QpIHRoZSBuZXh0IHJvbGxvdmVyLCB3YWl0IGl0IG91dCAqLwomIzQzOwlkaWZmID0gdGltZXNwZWM2NF9zdWIodHNfbmV4dCwgdHNfY3VyKTsKJiM0MzsJaWYgKGRpZmYudHZfc2VjICZsdDsgMCB8fCAoIWRpZmYudHZfc2VjICZhbXA7JmFtcDsgZGlmZi50dl9uc2VjICZsdDsgdGhyZXNob2xkX25zKSkgewomIzQzOwkJaWYgKCFkaWZmLnR2X3NlYyAmYW1wOyZhbXA7IGRpZmYudHZfbnNlYykKJiM0MzsJCQlmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyAmIzQzOyAxKTsKJiM0MzsJCXRzX25leHQudHZfc2VjJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi8KJiM0MzsJdHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTsKJiM0MzsJaWYgKCF0aW1lc3BlYzY0X3ZhbGlkKCZhbXA7dHNfbmV4dCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogV3JpdGUgYWRqdXN0ZWQgVG9EIGJhY2sgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KJiM0MzsJcmMgPSB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZGV2LCBjaCwgdHNfbmV4dCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmUKJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHMKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTsKJiM0MzsJaWYgKCFyYykKJiM0MzsJCXpsZGV2LSZndDtjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3RpZV93cml0ZSAtIGFkanVzdCBEUExMIHBoYXNlIHVzaW5nIFRJRSB3cml0ZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4CiYjNDM7ICogQGRlbHRhX25zOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAmIzQzOy0xcykKJiM0MzsgKgomIzQzOyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YQomIzQzOyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpCiYjNDM7ewomIzQzOwlzNjQgdGllX2RhdGE7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkZXYtJmd0O3RpZV9sb2NrKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsCiYjNDM7CQkJCSAgWkxfRFBMTF9USUVfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwkvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqLwomIzQzOwl0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSywgQklUKGNoKSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLAomIzQzOwkJCQlaTF9EUExMX1RJRV9DVFJMX09QX1dSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb24KJiM0MzsgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2UKJiM0MzsgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleAomIzQzOyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXAKJiM0MzsgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzCiYjNDM7ICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyCiYjNDM7ICoKJiM0MzsgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZQomIzQzOyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsCiYjNDM7CQkJICAgIGJvb2wgdG9kX3N0ZXApCiYjNDM7ewomIzQzOwl1OCBjdHJsOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZGV2LSZndDtwaGFzZV9zdGVwX2xvY2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KJiM0MzsJcmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsCiYjNDM7CQkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCwKJiM0MzsJCQkJICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsCiYjNDM7CQkJICAgICAgIHN0ZXBfY3ljbGVzKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwlyYyA9IHpsMzA3M3hfd3JpdGVfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSywgb3V0X21hc2spOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJY3RybCA9IEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMLCBjaCkgfAomIzQzOwkgICAgICAgRklFTERfUFJFUChaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLAomIzQzOwkJCSAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURSk7CiYjNDM7CWlmICh0b2Rfc3RlcCkKJiM0MzsJCWN0cmwgfD0gWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUDsKJiM0MzsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQgLSBjb21taXQgRFBMTCBjaGFubmVsIHN0YXRlIGNoYW5nZXMgdG8gaGFyZHdhcmUKICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAppbmRleCBkYzljNmQ5NWJkZWU3NS4uOWRjNWEzZjE5OTFmMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmgKQEAgLTUsMTAgJiM0Mzs1LDEyIEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0ZGRlZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3JlZ3MuaCYjMzQ7CiAKJiM0MztzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7CiBzdHJ1Y3QgemwzMDczeF9kZXY7CiAKIC8qKgpAQCAtMTYsNiAmIzQzOzE4LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2OwogICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZQogICogQG1vZGVfcmVmc2VsOiBtb2RlIGFuZCByZWZlcmVuY2Ugc2VsZWN0aW9uIHJlZ2lzdGVyIHZhbHVlCiAgKiBAcmVmX3ByaW86IHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgKDQgYml0cyBwZXIgcmVmLCBQL04gcGFja2VkKQomIzQzOyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFzawogICogQG1vbl9zdGF0dXM6IG1vbml0b3Igc3RhdHVzIHJlZ2lzdGVyIHZhbHVlCiAgKiBAcmVmc2VsX3N0YXR1czogcmVmZXJlbmNlIHNlbGVjdGlvbiBzdGF0dXMgcmVnaXN0ZXIgdmFsdWUKICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHMKQEAgLTI2LDYgJiM0MzsyOSw5IEBAIHN0cnVjdCB6bDMwNzN4X2NoYW4gewogCQl1OAltb2RlX3JlZnNlbDsKIAkJdTgJcmVmX3ByaW9bWkwzMDczWF9OVU1fUkVGUyAvIDJdOwogCSk7CiYjNDM7CXN0cnVjdF9ncm91cChpbnYsIC8qIEludmFyaWFudHMgKi8KJiM0MzsJCXUxNglvdXRfc3RlcF90aW1lX21hc2s7CiYjNDM7CSk7CiAJc3RydWN0X2dyb3VwKHN0YXQsCiAJCXU4CW1vbl9zdGF0dXM7CiAJCXU4CXJlZnNlbF9zdGF0dXM7CkBAIC00Miw2ICYjNDM7NDgsMjAgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsCiBpbnQgemwzMDczeF9jaGFuX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7CiAKJiM0MztpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLAomIzQzOwkJCSAgYm9vbCBuZXh0X2h6LCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsCiYjNDM7CQkJICAgc3RydWN0IHRpbWVzcGVjNjQgdHMpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwKJiM0MzsJCQkgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApOwomIzQzOwomIzQzO2ludCB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IG9mZnNldCk7CiYjNDM7CiYjNDM7aW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucyk7CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UKICAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGUKQEAgLTIwMCw2ICYjNDM7MjIwLDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pCiAJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSzsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZSAtIGNoZWNrIGlmIGNoYW5uZWwgbW9kZSBzdXBwb3J0cyBUSUUgd3JpdGUKJiM0MzsgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlCiYjNDM7ICoKJiM0MzsgKiBUSUUgd3JpdGUgaXMgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMgcmVnYXJkbGVzcyBvZiBsb2NrIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKQomIzQzO3sKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHwKJiM0MzsJCXpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeQogICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQpAQCAtMjMzLDQgJiM0MzsyNjgsMTcgQEAgc3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbikKIAlyZXR1cm4gRklFTERfR0VUKFpMX0RQTExfUkVGU0VMX1NUQVRVU19SRUZTRUwsIGNoYW4tJmd0O3JlZnNlbF9zdGF0dXMpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkIC0gY2hlY2sgaWYgb3V0cHV0IGlzIGluIHN0ZXAtdGltZSBtYXNrCiYjNDM7ICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZQomIzQzOyAqIEBvdXQ6IG91dHB1dCBpbmRleAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIG91dHB1dCBpcyBhZmZlY3RlZCBieSBzdGVwLXRpbWUgb3BlcmF0aW9ucwomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbAomIzQzO3psMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuLCB1OCBvdXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gISEoY2hhbi0mZ3Q7b3V0X3N0ZXBfdGltZV9tYXNrICZhbXA7IEJJVChvdXQpKTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYgLyogX1pMMzA3M1hfQ0hBTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKaW5kZXggN2Y1YWZhYWFlNjM0MmYuLmIyZjlmYzk3ZmQxYjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jCkBAIC0xMDMzLDYgJiM0MzsxMDMzLDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCSAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LgogCSAqLwogCXJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LSZndDtkZXYsICZhbXA7emxkZXYtJmd0O211bHRpb3BfbG9jayk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LSZndDtkZXYsIHJjLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKJiM0MzsJcmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtJmd0O2RldiwgJmFtcDt6bGRldi0mZ3Q7cGhhc2Vfc3RlcF9sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtJmd0O2RldiwgcmMsCiYjNDM7CQkJCSAgICAgJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtdXRleFxuJiMzNDspOwomIzQzOwlyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi0mZ3Q7ZGV2LCAmYW1wO3psZGV2LSZndDt0aWVfbG9jayk7CiAJaWYgKHJjKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi0mZ3Q7ZGV2LCByYywKIAkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAppbmRleCA3OGRjMjA4ZjNlZWEyYS4uMmRjODM2ZDBjOGY2YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgKQEAgLTI2LDYgJiM0MzsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsOwogI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVMJKDUwICogVVNFQ19QRVJfTVNFQykKICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTCQkoMzAgKiBVU0VDX1BFUl9NU0VDKQogI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTCSg1MCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUwkoMzAwMCAqIFVTRUNfUEVSX01TRUMpCiYjNDM7I2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTCSgxMDAwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVMJKDMwICogVVNFQ19QRVJfTVNFQykKJiM0MzsjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVMJKDEwMDAgKiBVU0VDX1BFUl9NU0VDKQogCiBlbnVtIHpsMzA3M3hfZmxhZ3MgewogCVpMMzA3M1hfRkxBR19SRUZfUEhBU0VfQ09NUF8zMl9CSVQsCkBAIC01NSw2ICYjNDM7NTksOCBAQCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm8gewogICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzCiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvCiAgKiBAbXVsdGlvcF9sb2NrOiB0byBzZXJpYWxpemUgbXVsdGlwbGUgcmVnaXN0ZXIgb3BlcmF0aW9ucwomIzQzOyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zCiYjNDM7ICogQHBoYXNlX3N0ZXBfbG9jazogdG8gc2VyaWFsaXplIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvbnMKICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMmIzM5OyBpbnZhcmlhbnRzCiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJiMzOTsgaW52YXJpYW50cwogICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMmIzM5OyBpbnZhcmlhbnRzCkBAIC03MSw2ICYjNDM7NzcsOCBAQCBzdHJ1Y3QgemwzMDczeF9kZXYgewogCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOwogCWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbwkqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXgJCQltdWx0aW9wX2xvY2s7CiYjNDM7CXN0cnVjdCBtdXRleAkJCXRpZV9sb2NrOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwaGFzZV9zdGVwX2xvY2s7CiAKIAkvKiBJbnZhcmlhbnRzICovCiAJc3RydWN0IHpsMzA3M3hfcmVmCXJlZltaTDMwNzNYX05VTV9SRUZTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwppbmRleCBkOTFmNTJiNThlYWUzNC4uN2MxMWRlMzU4MjFhZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZfcHJpbnRrLmgmZ3Q7CkBAIC0xNCw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKIApAQCAtNDIsNiAmIzQzOzQ0LDcgQEAKICAqIEBwaGFzZV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgcGluIHBoYXNlIG9mZnNldAogICogQGZyZXFfb2Zmc2V0OiBsYXN0IHNhdmVkIGZyYWN0aW9uYWwgZnJlcXVlbmN5IG9mZnNldAogICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5CiYjNDM7ICogQHBlcm91dF9pZHg6IFBUUCBwZXJvdXQgY2hhbm5lbCBpbmRleCwgb3IgLTEgaWYgbm90IHBlcm91dC1lbGlnaWJsZQogICovCiBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwpAQCAtNTksNiAmIzQzOzYyLDcgQEAgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gewogCXM2NAkJCXBoYXNlX29mZnNldDsKIAlzNjQJCQlmcmVxX29mZnNldDsKIAl1MzIJCQltZWFzdXJlZF9mcmVxOwomIzQzOwlzOAkJCXBlcm91dF9pZHg7CiB9OwogCiAvKgpAQCAtOTM2LDIxICYjNDM7OTQwLDE3IEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKIH0KIAogc3RhdGljIGludAotemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAotCQkJCSAgICAgIHZvaWQgKnBpbl9wcml2LAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwKLQkJCQkgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksCi0JCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO19femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsCiYjNDM7CQkJCQlzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLAomIzQzOwkJCQkJdTY0IGZyZXF1ZW5jeSkKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBkcGxsX3ByaXY7CiAJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwotCXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4gPSBwaW5fcHJpdjsKIAljb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7CiAJdTMyIG5ld19kaXYsIHN5bnRoX2ZyZXE7CiAJc3RydWN0IHpsMzA3M3hfb3V0IG91dDsKIAl1OCBvdXRfaWQ7CiAKLQlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAogCW91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi0mZ3Q7aWQpOwogCW91dCA9ICp6bDMwNzN4X291dF9zdGF0ZV9nZXQoemxkZXYsIG91dF9pZCk7CkBAIC0xMDExLDYgJiM0MzsxMDExLDIxIEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKIAlyZXR1cm4gemwzMDczeF9vdXRfc3RhdGVfc2V0KHpsZGV2LCBvdXRfaWQsICZhbXA7b3V0KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQKJiM0Mzt6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCiYjNDM7CQkJCSAgICAgIHZvaWQgKnBpbl9wcml2LAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsCiYjNDM7CQkJCSAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHpsZHBsbCwgcGluX3ByaXYsCiYjNDM7CQkJCQkJICAgICAgIGZyZXF1ZW5jeSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludAogemwzMDczeF9kcGxsX291dHB1dF9waW5fcGhhc2VfYWRqdXN0X2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAogCQkJCQkgdm9pZCAqcGluX3ByaXYsCkBAIC0xNjA4LDYgJiM0MzsxNjIzLDcgQEAgemwzMDczeF9kcGxsX3Bpbl9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpciwKIAlwaW4tJmd0O2RwbGwgPSB6bGRwbGw7CiAJcGluLSZndDtkaXIgPSBkaXI7CiAJcGluLSZndDtpZCA9IGlkOwomIzQzOwlwaW4tJmd0O3Blcm91dF9pZHggPSAtMTsKIAogCXJldHVybiBwaW47CiB9CkBAIC0xNjI2LDYgJiM0MzsxNjQyLDQ0IEBAIHpsMzA3M3hfZHBsbF9waW5fZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluKQogCWtmcmVlKHBpbik7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dCAtIGNoZWNrIGlmIG91dHB1dCBwaW4gaXMgcGVyb3V0LWVsaWdpYmxlCiYjNDM7ICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2sKJiM0MzsgKiBAcHJvcHM6IHBpbiBwcm9wZXJ0aWVzIChhbHJlYWR5IGZldGNoZWQgYnkgY2FsbGVyKQomIzQzOyAqCiYjNDM7ICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWQKJiM0MzsgKiAobm90IGRpZmZlcmVudGlhbCkgYW5kIHN1cHBvcnRzIDEgSHogaW4gaXRzIGZyZXF1ZW5jeSBsaXN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbAomIzQzO3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sCiYjNDM7CQkJICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfcGluX3Byb3BzICpwcm9wcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IHBpbi0mZ3Q7ZHBsbDsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJdTggb3V0X2lkOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKHpsMzA3M3hfZHBsbF9pc19pbnB1dF9waW4ocGluKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJb3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLSZndDtpZCk7CiYjNDM7CWlmICh6bDMwNzN4X2Rldl9vdXRfaXNfZGlmZih6bGRwbGwtJmd0O2Rldiwgb3V0X2lkKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcHJvcHMtJmd0O2RwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHByb3BzLSZndDtkcGxsX3Byb3BzLmZyZXFfc3VwcG9ydGVkW2ldLm1pbiA9PSAxKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIHBpbgogICogQHBpbjogcG9pbnRlciB0byBEUExMIHBpbgpAQCAtMTY2Nyw2ICYjNDM7MTcyMSw4IEBAIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwgdTMyIGluZGV4KQogCQlpZiAocGluLSZndDtwcmlvID09IFpMX0RQTExfUkVGX1BSSU9fTk9ORSkKIAkJCS8qIENsYW1wIHByaW8gdG8gbWF4IHZhbHVlICovCiAJCQlwaW4tJmd0O3ByaW8gPSBaTF9EUExMX1JFRl9QUklPX01BWDsKJiM0MzsJfSBlbHNlIGlmICh6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dChwaW4sIHByb3BzKSkgewomIzQzOwkJcGluLSZndDtwZXJvdXRfaWR4ID0gemxkcGxsLSZndDtwdHBfaW5mby5uX3Blcl9vdXQmIzQzOyYjNDM7OwogCX0KIAogCS8qIENyZWF0ZSBvciBnZXQgZXhpc3RpbmcgRFBMTCBwaW4gKi8KQEAgLTE4OTcsNiAmIzQzOzE5NTMsOCBAQCB6bDMwNzN4X2RwbGxfcGluc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJdTggaWQsIGluZGV4OwogCWludCByYzsKIAomIzQzOwl6bGRwbGwtJmd0O3B0cF9pbmZvLm5fcGVyX291dCA9IDA7CiYjNDM7CiAJLyogUHJvY2VzcyBpbnB1dCBwaW5zICovCiAJZm9yIChpbmRleCA9IDA7IGluZGV4ICZsdDsgWkwzMDczWF9OVU1fUElOUzsgaW5kZXgmIzQzOyYjNDM7KSB7CiAJCS8qIEZpcnN0IGlucHV0IHBpbnMgYW5kIHRoZW4gb3V0cHV0IHBpbnMgKi8KQEAgLTIyODAsNDUgJiM0MzsyMzM4LDQ0NyBAQCB6bDMwNzN4X2RwbGxfaW5pdF9maW5lX3BoYXNlX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KQogCXJldHVybiByYzsKIH0KIAomIzQzOy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICYjNDM7LTElIG9mIG5vbWluYWwgaW4gcHBiICovCiYjNDM7I2RlZmluZSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREoJMTAwMDAwMDAKJiM0MzsKIC8qKgotICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2UKLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQotICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0IC0gcmVhZCBjdXJyZW50IHRpbWUgZnJvbSBUb0QgY291bnRlcnMKJiM0MzsgKiBAaW5mbzogUFRQIGNsb2NrIGluZm8KJiM0MzsgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZQomIzQzOyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nCiAgKgotICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQomIzQzO3sKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZHBsbC0mZ3Q7ZGV2LCB6bGRwbGwtJmd0O2lkLCBmYWxzZSwgdHMsIHN0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHRzOiB0aW1lc3BlYyB3aXRoIHRpbWUgdG8gc2V0CiAgKgotICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJmx0OzAgb24gZXJyb3IKICAqLwotc3RydWN0IHpsMzA3M3hfZHBsbCAqCi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIHsKLQlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKIAotCXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwotCWlmICghemxkcGxsKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKIAotCXpsZHBsbC0mZ3Q7ZGV2ID0gemxkZXY7Ci0JemxkcGxsLSZndDtpZCA9IGNoOwotCW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7emxkcGxsLSZndDtwaW5zKTsKJiM0MzsJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsICp0cyk7CiYjNDM7fQogCi0JcmV0dXJuIHpsZHBsbDsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCAtIGFkanVzdCBzdWItc2Vjb25kIHRpbWUgdmlhIHBoYXNlIHN0ZXAKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsCiYjNDM7ICogICAgICAgICBOU0VDX1BFUl9TRUMpKQomIzQzOyAqCiYjNDM7ICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aAomIzQzOyAqIHRoZSBvdXRwdXQgY2xvY2sgcGhhc2UgYW5kIHRoZSBUb0QgY291bnRlciBzaW11bHRhbmVvdXNseS4gVGhpcyBrZWVwcwomIzQzOyAqIG91dHB1dHMgYW5kIFRvRCBjb2hlcmVudC4gT25seSB2YWxpZCBmb3IgTkNPLgomIzQzOyAqCiYjNDM7ICogT3V0cHV0cyBhcmUgZ3JvdXBlZCBieSBzeW50aGVzaXplciBzaW5jZSB0aGUgcGhhc2Ugc3RlcCB2YWx1ZSBpcyBpbgomIzQzOyAqIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy4gVGhlIGZpcnN0IHN5bnRoIGdyb3VwIHdpdGggZW5hYmxlZCBvdXRwdXRzCiYjNDM7ICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZwomIzQzOyAqIGdyb3VwcyBzdGVwIG91dHB1dHMgb25seS4gSWYgbm8gc3ludGggaGFzIGVuYWJsZWQgb3V0cHV0cywgdGhlIFRvRAomIzQzOyAqIGNvdW50ZXIgaXMgc3RlcHBlZCBhbG9uZSB1c2luZyBhbiBlbXB0eSBvdXRwdXQgbWFzayAodGhlIEZXIHVzZXMgdGhlCiYjNDM7ICogbG93ZXN0LUlEIHN5bnRoJiMzOTtzIHBlcmlvZCBmb3IgdGhlIGNvbnZlcnNpb24pLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG5vIHN5bnRocyBhdmFpbGFibGUsICZsdDswIG9uIGVycm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsCiYjNDM7CQkJCQkgICAgICAgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJdTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9OwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDsKJiM0MzsJY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjsKJiM0MzsJdTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwOwomIzQzOwlib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7CiYjNDM7CXMzMiBzdGVwX2N5Y2xlczsKJiM0MzsJdTMyIHN5bnRoX2ZyZXE7CiYjNDM7CWludCByYzsKJiM0MzsJdTggaTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwkvKiBCdWlsZCBwZXItc3ludGggb3V0cHV0IG1hc2tzIGZyb20gcmVnaXN0ZXJlZCBvdXRwdXQgcGlucyAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBpbiwgJmFtcDt6bGRwbGwtJmd0O3BpbnMsIGxpc3QpIHsKJiM0MzsJCXU4IG91dF9pZCwgc3ludGhfaWQ7CiYjNDM7CiYjNDM7CQlpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJb3V0X2lkID0gemwzMDczeF9vdXRwdXRfcGluX291dF9nZXQocGluLSZndDtpZCk7CiYjNDM7CiYjNDM7CQlpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfaWQgPSB6bDMwNzN4X2Rldl9vdXRfc3ludGhfZ2V0KHpsZGV2LCBvdXRfaWQpOwomIzQzOwkJaWYgKHN5bnRoX2lkICZndDs9IFpMMzA3M1hfTlVNX1NZTlRIUykgewomIzQzOwkJCWRldl93YXJuKHpsZGV2LSZndDtkZXYsICYjMzQ7VW5leHBlY3RlZCBzeW50aCBpZCBmb3IgT1VUJXVcbiYjMzQ7LAomIzQzOwkJCQkgb3V0X2lkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCXN5bnRoX21hc2tbc3ludGhfaWRdIHw9IEJJVChvdXRfaWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWkwzMDczWF9OVU1fU1lOVEhTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7CiYjNDM7CQlpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHwKJiM0MzsJCSAgICB6bDMwNzN4X3N5bnRoX2RwbGxfZ2V0KHN5bnRoKSAhPSB6bGRwbGwtJmd0O2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpOwomIzQzOwomIzQzOwkJLyogUmVtZW1iZXIgbG93ZXN0LUlEIHN5bnRoIGZyZXEgZm9yIFRvRC1vbmx5IGZhbGxiYWNrICovCiYjNDM7CQlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQkJZmlyc3Rfc3ludGhfZnJlcSA9IHN5bnRoX2ZyZXE7CiYjNDM7CiYjNDM7CQlpZiAoIXN5bnRoX21hc2tbaV0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi8KJiM0MzsJCXN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIHN5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7CiYjNDM7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICBzeW50aF9tYXNrW2ldLCBzdGVwX2N5Y2xlcywKJiM0MzsJCQkJCSAgICAgIXRvZF9zdGVwcGVkKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCWlmICh0b2Rfc3RlcHBlZCkgewomIzQzOwkJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7UGFydGlhbCBwaGFzZSBzdGVwIGZhaWx1cmVcbiYjMzQ7KTsKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJfQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJCXRvZF9zdGVwcGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CS8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZQomIzQzOwkgKiBsb3dlc3QtSUQgc3ludGgmIzM5O3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXRvZF9zdGVwcGVkKSB7CiYjNDM7CQlzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBmaXJzdF9zeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpOwomIzQzOwkJcmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCAwLAomIzQzOwkJCQkJICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2UKLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZQomIzQzOyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mbwomIzQzOyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzCiAgKgotICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKiBGb3IgTkNPLCBsYXJnZSBkZWx0YXMgKCZndDs9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRAomIzQzOyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3IKJiM0MzsgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LAomIzQzOyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS4KJiM0MzsgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0QKJiM0MzsgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZAomIzQzOyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgogICovCi12b2lkCi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7c3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBzNjQgZGVsdGEpCiB7Ci0JV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsCiYjNDM7CQkJCQkJICAgcHRwX2luZm8pOwomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CWJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzOwomIzQzOwlpbnQgcmM7CiAKLQltdXRleF9kZXN0cm95KCZhbXA7emxkcGxsLSZndDtsb2NrKTsKLQlrZnJlZSh6bGRwbGwpOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CS8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi8KJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKQomIzQzOwkJcmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkJICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZAomIzQzOwkgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbQomIzQzOwkgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGFicyhkZWx0YSkgJmd0Oz0gTlNFQ19QRVJfU0VDKSB7CiYjNDM7CQlzMzIgcmVtYWluZGVyOwomIzQzOwomIzQzOwkJdHMudHZfc2VjID0gZGl2X3M2NF9yZW0oZGVsdGEsIE5TRUNfUEVSX1NFQywgJmFtcDtyZW1haW5kZXIpOwomIzQzOwkJdHMudHZfbnNlYyA9IDA7CiYjNDM7CQlkZWx0YSA9IHJlbWFpbmRlcjsKJiM0MzsKJiM0MzsJCXJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIHRzKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CQlzZWNfYWRqdXN0ZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJLyogTm8gc3ViLXNlY29uZCByZW1haW5kZXIsIGRvbmUgKi8KJiM0MzsJCWlmICghZGVsdGEpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi8KJiM0MzsJaWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkgewomIzQzOwkJcmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsIGRlbHRhKTsKJiM0MzsJCWlmICghcmMpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUgZmFpbGVkLCBmYWxsIGJhY2sgdG8gVG9EIGFkanVzdCAqLwomIzQzOwlyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtJmd0O2lkLAomIzQzOwkJCQkgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTsKJiM0MzsKJiM0MzsJLyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2sKJiM0MzsJICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuCiYjNDM7CSAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kCiYjNDM7CSAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0CiYjNDM7CSAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZhbXA7JmFtcDsgc2VjX2FkanVzdGVkKSB7CiYjNDM7CQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O1N1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5CiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CWNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47CiYjNDM7CXM2NCBvZmZzZXQ7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42CiYjNDM7CSAqCiYjNDM7CSAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OgomIzQzOwkgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42CiYjNDM7CSAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjUKJiM0MzsJICovCiYjNDM7CW9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJY2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwlpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkKJiM0MzsJCXJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwOwomIzQzOwlpZiAob2Zmc2V0ID09IGNoYW4tJmd0O2RmX29mZnNldCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLSZndDtkZXYsIHpsZHBsbC0mZ3Q7aWQsIG9mZnNldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UgLSBhZGp1c3QgUFRQIGNsb2NrIHBoYXNlCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzCiYjNDM7ICoKJiM0MzsgKiBPbmx5IHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzLiBVc2VzIFRJRSB3cml0ZSBmb3IKJiM0MzsgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBtb2RlIGRvZXNuJiMzOTt0IHN1cHBvcnQgVElFLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgemwzMDczeF9kcGxsLAomIzQzOwkJCQkJCSAgIHB0cF9pbmZvKTsKJiM0MzsJc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC0mZ3Q7ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuOwomIzQzOwomIzQzOwlpZiAoIWRlbHRhKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtJmd0O2lkKTsKJiM0MzsKJiM0MzsJaWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUoY2hhbikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtJmd0O2lkLCBkZWx0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzMzIKJiM0Mzt6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpCiYjNDM7ewomIzQzOwkvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICYjNDM7LTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXCiYjNDM7CSAqIGxpbWl0IGFuZCBsZXQgYWRqcGhhc2UgaGFuZGxlIG1vZGUtc3BlY2lmaWMgY2hlY2tzLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluIC0gZmluZCBwaW4gYnkgcGVyb3V0IGNoYW5uZWwgaW5kZXgKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwKJiM0MzsgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmQKJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKgomIzQzO3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmYW1wO3psZHBsbC0mZ3Q7cGlucywgbGlzdCkgewomIzQzOwkJaWYgKHBpbi0mZ3Q7cGVyb3V0X2lkeCA9PSBpZHgpCiYjNDM7CQkJcmV0dXJuIHBpbjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogemwzMDczeF9kcGxsX3B0cF9lbmFibGUgLSBlbmFibGUvZGlzYWJsZSBQVFAgY2xvY2sgZnVuY3Rpb25zCiYjNDM7ICogQGluZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHJxOiB0aGUgcmVxdWVzdGVkIGNsb2NrIGZ1bmN0aW9uIGFuZCBwYXJhbWV0ZXJzCiYjNDM7ICogQG9uOiB0cnVlIHRvIGVuYWJsZSwgZmFsc2UgdG8gZGlzYWJsZQomIzQzOyAqCiYjNDM7ICogSGFuZGxlcyBQVFBfQ0xLX1JFUV9QRVJPVVQgcmVxdWVzdHMuIE9ubHkgMVBQUyAocGVyaW9kID0gMXMpIGlzIHN1cHBvcnRlZC4KJiM0MzsgKiBPbiBlbmFibGUsIGNvbmZpZ3VyZXMgdGhlIG91dHB1dCBkaXZpZGVyIGZvciAxIEh6LiBPbiBkaXNhYmxlLCBkb2VzIG5vdGhpbmcKJiM0MzsgKiBhcyB0aGUgc2lnbmFsIGlzIG5vdCBkaXNhYmxlZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLAomIzQzOwkJCQkgICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJxLCBpbnQgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCwKJiM0MzsJCQkJCQkgICBwdHBfaW5mbyk7CiYjNDM7CXN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW47CiYjNDM7CXVuc2lnbmVkIGludCBpZHg7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKHJxLSZndDt0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWR4ID0gcnEtJmd0O3Blcm91dC5pbmRleDsKJiM0MzsJaWYgKGlkeCAmZ3Q7PSBpbmZvLSZndDtuX3Blcl9vdXQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogVG9nZ2xpbmcgb3V0cHV0IHBpbnMgY2FuIHByb2R1Y2UgcnVudCBwdWxzZXMsIHNvIGRpc2FibGUKJiM0MzsJICogaXMgYSBuby1vcC4KJiM0MzsJICovCiYjNDM7CWlmICghb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogT25seSBhY2NlcHQgZXhhY3RseSAxUFBTIChwZXJpb2Quc2VjID09IDEsIG5zZWMgPT0gMCkgKi8KJiM0MzsJaWYgKHJxLSZndDtwZXJvdXQucGVyaW9kLnNlYyAhPSAxIHx8IHJxLSZndDtwZXJvdXQucGVyaW9kLm5zZWMgIT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcGluID0gemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oemxkcGxsLCBpZHgpOwomIzQzOwlpZiAoIXBpbikgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFscmVhZHkgYXQgMSBIeiwgbm90aGluZyB0byBkbyAqLwomIzQzOwlpZiAoemwzMDczeF9kZXZfb3V0cHV0X3Bpbl9mcmVxX2dldCh6bGRwbGwtJmd0O2RldiwgcGluLSZndDtpZCkgPT0gMSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gX196bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KHpsZHBsbCwgcGluLCAxKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFyYykKJiM0MzsJCWRwbGxfcGluX2NoYW5nZV9udGYocGluLSZndDtkcGxsX3Bpbik7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7CiYjNDM7CS5vd25lcgkJPSBUSElTX01PRFVMRSwKJiM0MzsJLm1heF9hZGoJPSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosCiYjNDM7CS5nZXR0aW1leDY0CT0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LAomIzQzOwkuc2V0dGltZTY0CT0gemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQsCiYjNDM7CS5hZGp0aW1lCT0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLAomIzQzOwkuYWRqZmluZQk9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSwKJiM0MzsJLmFkanBoYXNlCT0gemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSwKJiM0MzsJLmdldG1heHBoYXNlCT0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSwKJiM0MzsJLmVuYWJsZQkJPSB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIgLSByZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsCiYjNDM7ICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAmbHQ7MCBvbiBlcnJvcgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jazsKJiM0MzsKJiM0MzsJc25wcmludGYoemxkcGxsLSZndDtwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLSZndDtwdHBfaW5mby5uYW1lKSwKJiM0MzsJCSAmIzM0O3psMzA3M3gtZHBsbCV1JiMzNDssIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwomIzQzOwlwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDt6bGRwbGwtJmd0O3B0cF9pbmZvLCB6bGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwdHBfY2xvY2spKSB7CiYjNDM7CQlkZXZfZXJyKHpsZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XG4mIzM0OywKJiM0MzsJCQl6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJemxkcGxsLSZndDtwdHBfY2xvY2sgPSBwdHBfY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWwKJiM0MzsgKiBAemxkcGxsOiBEUExMIGNoYW5uZWwgdG8gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoemxkcGxsLSZndDtwdHBfY2xvY2spKSB7CiYjNDM7CQlwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtJmd0O3B0cF9jbG9jayk7CiYjNDM7CQl6bGRwbGwtJmd0O3B0cF9jbG9jayA9IE5VTEw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0yNDAzLDYgJiM0MzsyODYzLDQ4IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZQomIzQzOyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlcgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3IKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgemwzMDczeF9kcGxsICoKJiM0Mzt6bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7CiYjNDM7CiYjNDM7CXpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpOwomIzQzOwlpZiAoIXpsZHBsbCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwl6bGRwbGwtJmd0O2RldiA9IHpsZGV2OwomIzQzOwl6bGRwbGwtJmd0O2lkID0gY2g7CiYjNDM7CXpsZHBsbC0mZ3Q7cHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87CiYjNDM7CW11dGV4X2luaXQoJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3psZHBsbC0mZ3Q7cGlucyk7CiYjNDM7CiYjNDM7CXJldHVybiB6bGRwbGw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZQomIzQzOyAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy4KJiM0MzsgKi8KJiM0Mzt2b2lkCiYjNDM7emwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKQomIzQzO3sKJiM0MzsJV0FSTih6bGRwbGwtJmd0O2RwbGxfZGV2LCAmIzM0O0RQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHpsZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zCiAgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmUKQEAgLTI0MzMsNiAmIzQzOzI5MzUsMTMgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIAkJcmV0dXJuIHJjOwogCX0KIAomIzQzOwlyYyA9IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQl6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7CiYjNDM7CQl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yNDQ2LDcgJiM0MzsyOTU1LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHZvaWQKIHpsMzA3M3hfZHBsbF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCkKIHsKLQkvKiBVbnJlZ2lzdGVyIGFsbCBwaW5zIGFuZCBkcGxsICovCiYjNDM7CXpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3Rlcih6bGRwbGwpOwogCXpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTsKIAl6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAppbmRleCBmYWViYzQwMmJhMWI3MC4uOWI1ZjcyYzMzODQ5Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmgKQEAgLTUsNiAmIzQzOzUsOCBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NvcmUuaCYjMzQ7CiAKQEAgLTIyLDYgJiM0MzsyNCw4IEBACiAgKiBAdHlwZTogRFBMTCB0eXBlIChQUFMgb3IgRUVDKQogICogQGxvY2tfc3RhdHVzOiBsYXN0IHNhdmVkIERQTEwgbG9jayBzdGF0dXMKICAqIEBwaW5zOiBsaXN0IG9mIHBpbnMKJiM0MzsgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvCiYjNDM7ICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpCiAgKi8KIHN0cnVjdCB6bDMwNzN4X2RwbGwgewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CkBAIC0zNiw2ICYjNDM7NDAsOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHsKIAllbnVtIGRwbGxfdHlwZQkJCXR5cGU7CiAJZW51bSBkcGxsX2xvY2tfc3RhdHVzCQlsb2NrX3N0YXR1czsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlwaW5zOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8JCXB0cF9pbmZvOwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrCQkqcHRwX2Nsb2NrOwogfTsKIAogc3RydWN0IHpsMzA3M3hfZHBsbCAqemwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAppbmRleCBiNzBlYWQ3ZDQ0OTViMi4uNDQ3NzU3ZTk5ODQ1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgKQEAgLTE3OSw2ICYjNDM7MTc5LDIwIEBACiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTUQJCQlHRU5NQVNLKDIsIDApCiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURfQUNDX0kJCTQKIAomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkwJCQlaTF9SRUcoNSwgMHgzMCwgMSkKJiM0MzsjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1AJCQlHRU5NQVNLKDIsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QX1dSCQkJNAomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxfTUFTSwkJWkxfUkVHKDUsIDB4MzEsIDEpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KQkJCQkJXAomIzQzOwlaTF9SRUdfSURYKF9pZHgsIDUsIDB4MzgsIDEsIDgsIDEpCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTUQJCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWgkxCiYjNDM7I2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UCTgKJiM0MzsjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaCTkKJiM0MzsKICNkZWZpbmUgWkxfUkVHX0RQTExfTUVBU19DVFJMCQkJWkxfUkVHKDUsIDB4NTAsIDEpCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOCQkJQklUKDApCiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0FWR19GQUNUT1IJCUdFTk1BU0soNywgNCkKQEAgLTE5Myw2ICYjNDM7MjA3LDkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhCiYjNDM7ICoKJiM0MzsgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsCiYjNDM7ICogY2hhbm5lbCA0IG9uIHBhZ2UgNy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KQkJCQkJXApAQCAtMjAyLDYgJiM0MzsyMTksMjQgQEAKIAkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KSA6IFpMX1JFR19EUExMX0RGX09GRlNFVF80KQogI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOCVM2NF9NSU4KIAomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEFfNAkJCVpMX1JFRyg3LCAweDBDLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0RBVEEoX2lkeCkJCQkJCVwKJiM0MzsJKChfaWR4KSAmbHQ7IDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzAzKF9pZHgpCQkJCQlcCiYjNDM7CVpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNAkJCVpMX1JFRyg3LCAweDEyLCA2KQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkJCQkJCVwKJiM0MzsJWkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKQomIzQzOyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TXzQJCQlaTF9SRUcoNywgMHgxOCwgNCkKJiM0MzsjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OUyhfaWR4KQkJCQkJXAomIzQzOwkoKF9pZHgpICZsdDsgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyMSw2ICYjNDM7MjU2LDggQEAKICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU4JCQlCSVQoMCkKICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMCQlHRU5NQVNLKDYsIDQpCiAKJiM0MzsjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0sJCVpMX1JFRyg5LCAweDM2LCAyKQomIzQzOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJlZ2lzdGVyIFBhZ2UgMTAsIFJlZiBNYWlsYm94CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMxNiw2ICYjNDM7MzUzLDI1IEBACiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfRVNZTkNfV0lEVEgJCVpMX1JFRygxNCwgMHgxOCwgNCkKICNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9DT01QCQlaTF9SRUcoMTQsIDB4MjAsIDQpCiAKJiM0MzsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKJiM0MzsgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwCiYjNDM7ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwJCVpMX1JFRyg5LCAweDM4LCAxKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9EUExMCQlHRU5NQVNLKDYsIDQpCiYjNDM7I2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQCUJJVCgzKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUAkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9OT05FCTAKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfUkVTRVQJMQomIzQzOyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFECTIKJiM0MzsjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfV1JJVEUJMwomIzQzOwomIzQzOyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUgkJWkxfUkVHKDksIDB4MzksIDEpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTSwkJWkxfUkVHKDksIDB4M2EsIDIpCiYjNDM7CiYjNDM7I2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQQkJWkxfUkVHKDksIDB4M2MsIDQpCiYjNDM7CiAvKgogICogUmVnaXN0ZXIgUGFnZSAyNTUgLSBIVyByZWdpc3RlcnMgYWNjZXNzCiAgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMzcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhpbmVzcyBvZiBGdXp6aW5nIHRoZSBBenVyaXRlIERQTEwgRHJpdmVyKioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0b3VjaGluZyB0aGUgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AgZGlyZWN0b3J5LCB3aGljaCBpbmRpY2F0ZXMgUFRQIGNsb2NrIHN1cHBvcnQgaXMgYmVpbmcgYWRkZWQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyLiBUaGlzIGxvb2tzIGludGVyZXN0aW5nOyBpdCBpbnZvbHZlcyBuZXcgZmVhdHVyZXMgYW5kIGxpa2VseSBuZXcgY29kZSBwYXRocy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgIGRlcGVuZGVuY3ksIHJlZ2lzdGVycyBhIFBUUCBjbG9jaywgYW5kIGltcGxlbWVudHMgdGhlIG5lY2Vzc2FyeSBQVFAgY2xvY2sgb3BlcmF0aW9ucyDigJMgYGdldHRpbWV4NjRgLCBgc2V0dGltZTY0YCwgYWRqdXN0bWVudCBmdW5jdGlvbnMgYW5kIGVuYWJsaW5nL2Rpc2FibGluZyBvZiB0aGUgY2xvY2suIFRoaXMgbWVhbnMgaXQgY3JlYXRlcyBgL2Rldi9wdHBYYCBkZXZpY2VzIHRoYXQgY2FuIGJlIGZ1enplZCB0aHJvdWdoIGlvY3RscywgcGx1cywgdGhlIGRyaXZlciBleHBvc2VzIGEgRFBMTCBkZXZpY2UgdmlhIG5ldGxpbmsuIFRoZSBkcml2ZXIgdXNlcyBJMkMgYW5kIFNQSSwgd2hpY2ggbWFrZXMgbWUgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGRpZmZpY3VsdHkgb2YgaW5zdGFudGlhdGlvbiBpbiBhIGZ1enppbmcgY29udGV4dC4KCkNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZT8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBrbm93IHN5emthbGxlciBjYW4gaGl0IFBUUCBpb2N0bHMgYW5kIERQTEwgbmV0bGluaywgd2hpY2ggaXMgcHJvbWlzaW5nLiBCdXQgSTJDL1NQSSBkZXZpY2VzIGFyZSB1c3VhbGx5IGEgcGFpbi4gVHlwaWNhbGx5LCB0aGV5IHJlcXVpcmUgZGV2aWNlIHRyZWUsIEFDUEksIG9yIHNwZWNpZmljIGJvYXJkIGNvZGUgdG8gYmUgaW5pdGlhbGl6ZWQuIENhbiBzeXprYWxsZXIgaW5zdGFudGlhdGUgdGhlIGB6bDMwNzN4YCBkZXZpY2Ugc29tZWhvdz8gRG9lcyBpdCBoYXZlIGEgbWVjaGFuaXNtIGxpa2UgYGkyY19uZXdfY2xpZW50X2RldmljZWAgb3IgYW55dGhpbmcgbmV0bGluay9zeXNmcy1yZWxhdGVkIGZvciBjcmVhdGluZyBhbiBJMkMgb3IgU1BJIGNsaWVudD8gTG9va2luZyBhdCB0aGUgdG9vbGluZywgaXQgc2VlbXMgbGlrZSB0aGVyZSBpcyBubyBzcGVjaWZpYyBgc3l6X2kyY19zZXR1cGAgZXF1aXZhbGVudC4KCkJ1dCB3YWl0LCB0aGUgZGlyZWN0aXZlIHdlIGFyZSB3b3JraW5nIHdpdGggaXMgYWJvdXQgKnJlYWNoYWJsZSogY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGUgY3JpdGljYWwgcG9pbnQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aGVyZSB3ZSBjYW4gZW5hYmxlIHRoZSBjb25maWcsIHJpZ2h0PyBTbyBldmVuIGlmIGl0JiMzOTtzIGFuIEkyQy9TUEkgZHJpdmVyLCBpZiBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBpdCYjMzk7cyBvZnRlbiB3b3J0aCBmdXp6aW5nIGlmIHdlIGNhbiBlbmFibGUgdGhlIGNvbmZpZyBvcHRpb24uIFRoZSBtYWluIGNhdmVhdCBpcyB2aXJ0dWFsaXphdGlvbi4gQ2FuIHdlIHJlYWNoIHRoaXMgY29kZSBwYXRoIGluIEdDRSBvciBRRU1VPyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzICpub3QqIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdGhvc2UgZW52aXJvbm1lbnRzLiBXZSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgYHpsMzA3M3hgIGRldmljZSBpcyBwcm9iZWQgdG8gc2VlIGlmIGl0JiMzOTtzIHJlYWNoYWJsZS4gV2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiBpdCBkZXBlbmRzIG9uIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiB0aGF0IGlzIHVuYXZhaWxhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgbm90LCB0aGUgY2hhbmdlIGlzIFdvcnRoRnV6emluZz10cnVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3hfaTJjX3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTEwLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6MTE6c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMTIte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTQ4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB6bDMwNzN4X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTItXHR9LFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTM6XHQucHJvYmUgPSB6bDMwNzN4X2kyY19wcm9iZSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU0LVx0LmlkX3RhYmxlID0gemwzMDczeF9pMmNfaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXBwcm9hY2ggdG8gUHJvYmluZyB0aGUgSTJDIERldmljZSoqCgpPa2F5LCBsZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBNeSBnb2FsIGlzIHRvIHNlZSBpZiBJIGNhbiB0cmlnZ2VyIHRoaXMgcHJvYmUgc29tZWhvdy4gTXkgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZXNlIHR5cGVzIG9mIGludmVzdGlnYXRpb25zIHdpdGggSTJDIGRldmljZXMgaXMgdGhlIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC9uZXdfZGV2aWNlYCBpbnRlcmZhY2UuIElmIHN5emthbGxlciBoYXMgdGhlIG5lY2Vzc2FyeSBhY2Nlc3MgdG8gc3lzZnMg4oCTIHdoaWNoLCBrbm93aW5nIGl0LCBpdCBsaWtlbHkgZG9lcyDigJMgdGhlbiBJIGNhbiBwcm9iYWJseSB3cml0ZSB0byBgbmV3X2RldmljZWAgdG8gZWZmZWN0aXZlbHkgaW5zdGFudGlhdGUgdGhlIEkyQyBkZXZpY2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBob29rIHRvIHRyaWdnZXIgdGhlIHByb2JlIGFuZCBvYnNlcnZlIGl0cyBiZWhhdmlvci4gTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGlmIHRoZSBgemwzMDczeGAgZGV2aWNlIGhhcyBhbiBJMkMgSUQgdGFibGUuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bDMwNzN4X2kyY19pZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz0xMT1zdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoyODpzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI5LVx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzFcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0zNS19O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6MzY6TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHpsMzA3M3hfaTJjX2lkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTM3LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTQ4PXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB6bDMwNzN4X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTMtXHQucHJvYmUgPSB6bDMwNzN4X2kyY19wcm9iZSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjU0Olx0LmlkX3RhYmxlID0gemwzMDczeF9pMmNfaWQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjMyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHpsMzA3MzFgIERldmljZSBJbnN0YW50aWF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gdGhlIGRldmljZSBuYW1lIGlzIGRlZmluaXRlbHkgJiMzNDt6bDMwNzMxJiMzNDsuIFN5emthbGxlciBjYW4gd3JpdGUgJiMzNDt6bDMwNzMxIDB4MjAmIzM0OyB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAgdG8gdHJpZ2dlciBpdHMgY3JlYXRpb24uIFN0YW5kYXJkIHByb2NlZHVyZSwgdW5kZXJzdG9vZC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGluc3RhbnRpYXRpb24gKnJlcXVpcmUqIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHRvIHN1Y2NlZWQ/IEkgbmVlZCB0byBiZSBzdXJlIHRoZSBwcm9iZSBkb2VzbiYjMzk7dCByZWx5IG9uIHNvbWUgdW5kb2N1bWVudGVkIHJlZ2lzdGVyIG9yIGV4dGVybmFsIHNpZ25hbC4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgcHJvYmUgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgemwzMDczeF9pMmNfcHJvYmVgIGFuZCBgemwzMDczeF9kZXZfcHJvYmVgLiBUaG9zZSBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBoYXJkd2FyZSBwcmVjb25kaXRpb25zIGZvciB0aGUgYHpsMzA3MzFgIHRvIGluaXRpYWxpemUgY29ycmVjdGx5LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBsb2dpYyByZXNpZGVzLiBVbmRlcnN0YW5kaW5nIHRob3NlIHJvdXRpbmVzIHdpbGwgZGV0ZXJtaW5lIGlmIHRoaXMgaW5zdGFudGlhdGlvbiBpcyB0cnVseSBjbGVhbiwgb3IgaWYgdGhlcmUgYXJlIHBvdGVudGlhbCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMTpcdHN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiAgMTI6XHR7XG4gIDEzOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZjbGllbnQtXHUwMDNlZGV2O1xuICAxNDpcdFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldjtcbiAgMTU6XHRcbiAgMTY6XHRcdHpsZGV2ID0gemwzMDczeF9kZXZtX2FsbG9jKGRldik7XG4gIDE3Olx0XHRpZiAoSVNfRVJSKHpsZGV2KSlcbiAgMTg6XHRcdFx0cmV0dXJuIFBUUl9FUlIoemxkZXYpO1xuICAxOTpcdFxuICAyMDpcdFx0emxkZXYtXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCBcdTAwMjZ6bDMwNzN4X3JlZ21hcF9jb25maWcpO1xuICAyMTpcdFx0aWYgKElTX0VSUih6bGRldi1cdTAwM2VyZWdtYXApKVxuICAyMjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoemxkZXYtXHUwMDNlcmVnbWFwKSxcbiAgMjM6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXFxuXCYjMzQ7KTtcbiAgMjQ6XHRcbiAgMjU6XHRcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XG4gIDI2Olx0fVxuICAyNzpcdFxuICAyODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB6bDMwNzN4X2kyY19pZFtdID0ge1xuICAyOTpcdFx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzFcJiMzNDsgfSxcbiAgMzA6XHRcdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzMyXCYjMzQ7IH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5NzAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSB6bDMwNzN4IERyaXZlcioqCgpSaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhpcyBzcGVjaWZpYyBEUExMLCBhbmQgdGhhdCYjMzk7cyB0aGUgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBUaGlzIGlzIHByb2JhYmx5IGluIHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jYCBmaWxlLCB3aGVyZSB0aGUgY29yZSBkZXZpY2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcHJvYmUgZnVuY3Rpb24gYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkcml2ZXIgaXMgZmlyc3Qgc2V0dGluZyB0aGluZ3MgdXAgd2hlbiB0aGUgaGFyZHdhcmUgaXMgZGV0ZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSByZWdpc3RlciBtYXAgYW5kIGlmIHRoZXJlIGFueSBvYnZpb3VzIGdvdGNoYXMgaW4gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLWRvY3VtZW50ZWQsIGJ1dCBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgaXMgbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgdGhlIGxvdyBsZXZlbCBkZXRhaWxzLCBhbmQgZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBjbG9jayBjb25maWd1cmF0aW9ucywgb3IgZXJyYXRhIGhhbmRsaW5nIHRoYXQgY291bGQgYml0ZSBtZSBsYXRlciBvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB6bDMwNzN4X2Rldl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9OTI1PXpsMzA3M3hfZGV2bV9kcGxsX2luaXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTc5LSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk4MDppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODEte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaD0xMDQ9c3RydWN0IHpsMzA3M3hfZGV2ICp6bDMwNzN4X2Rldm1fYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaDoxMDU6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTEwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MzMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYHpsMzA3M3hfZGV2X3Byb2JlYCwgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipBbmFseXppbmcgdGhlIGB6bDMwNzN4X2Rldl9wcm9iZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIHdlJiMzOTtyZSBsb29raW5nIGF0IGB6bDMwNzN4X2Rldl9wcm9iZWAuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGluIHRoZSByZWFsbSBvZiBkZXZpY2UgcHJvYmluZywgYW5kIGl0JiMzOTtzIHNwZWNpZmljYWxseSBmb3IgYSBgemwzMDczeGAgZGV2aWNlLCB3aGljaCBJJiMzOTttIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgb2YuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBhdHRlbXB0cyB0byBpZGVudGlmeSwgaW5pdGlhbGl6ZSwgYW5kIHJlZ2lzdGVyIGEgbmV3IGB6bDMwNzN4YCBkZXZpY2UgdGhhdCYjMzk7cyBiZWVuIHBsdWdnZWQgaW4gb3IgaXMgb3RoZXJ3aXNlIGJlY29taW5nIGF2YWlsYWJsZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uKio6IEhvdyBhcmUgdGhleSBnZXR0aW5nIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzLCBsaWtlIG1lbW9yeSByZWdpb25zLCBJUlFzLCBJMkMgb3IgU1BJIGJ1c2VzLCBldGMuPyBJIHdhbnQgdG8gc2VlIGlmIHRoZXkgYXJlIHVzaW5nIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBtZWNoYW5pc21zIG9yIGlmIHRoZXJlJiMzOTtzIGEgbW9yZSBnZW5lcmljIGFwcHJvYWNoLiBBbnkgdW51c3VhbCBhcHByb2FjaGVzIGhlcmUgd291bGQgYmUgaW50ZXJlc3RpbmcuCiogICAqKkRldmljZSBpZGVudGlmaWNhdGlvbioqOiBIb3cgaXMgdGhlIGRyaXZlciB2ZXJpZnlpbmcgdGhlIGRldmljZSBpcyAqYWN0dWFsbHkqIGEgYHpsMzA3M3hgPyBBcmUgdGhleSBjaGVja2luZyBhIGRldmljZSBJRCByZWdpc3Rlcj8gVmVuZG9yLXNwZWNpZmljIG1hZ2ljPyBJJiMzOTttIGtlZW4gdG8gc2VlIHRoZSBhcHByb2FjaCBhbmQgYW55IHBvdGVudGlhbCBmb3Igcm9idXN0bmVzcyBpc3N1ZXMuCiogICAqKkluaXRpYWxpemF0aW9uIHNlcXVlbmNlKio6IFdoYXQgc3RlcHMgYXJlIHRha2VuIHRvIGdldCB0aGUgZGV2aWNlIHJlYWR5IGZvciB1c2U/IFRoaXMgY291bGQgaW5jbHVkZSBwb3dlci11cCBzZXF1ZW5jZXMsIHJlZ2lzdGVyIHdyaXRlcywgY2xvY2sgY29uZmlndXJhdGlvbiwgYW5kIHBvc3NpYmx5IGZpcm13YXJlIGxvYWRpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIHRpbWluZyBjb25zdHJhaW50cy4KKiAgICoqRHJpdmVyIHJlZ2lzdHJhdGlvbioqOiBPbmNlIHRoZSBkZXZpY2UgaXMgcmVhZHksIEkmIzM5O2xsIGJlIHdhdGNoaW5nIHRvIHNlZSBob3cgdGhlIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIHdpdGggdGhlIGtlcm5lbC4gSXMgaXQgdXNpbmcgdGhlIHN0YW5kYXJkIGRldmljZSBkcml2ZXIgbW9kZWw/IEFyZSB0aGVyZSBhbnkgY3VzdG9tIGNhbGxiYWNrcyBvciBzdHJ1Y3R1cmVzPyBBbnkgY3VzdG9tIGRhdGEgc3RydWN0dXJlcyBvciBpbnRlcmFjdGlvbnMgd2lsbCBiZSBvZiBpbnRlcmVzdC4KKiAgICoqRXJyb3IgaGFuZGxpbmcqKjogV2hlcmUgYXJlIHRoZSBlcnJvciBjaGVja3M/IFdoYXQgaGFwcGVucyBpZiBhbnkgb2YgdGhlIGNyaXRpY2FsIHN0ZXBzIGZhaWw/IEkgd2FudCB0byBhc3Nlc3MgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHByb2JlIGZ1bmN0aW9uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHdlYWtuZXNzZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRob3JvdWdoIGVycm9yIGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBoYXJkd2FyZS4KKiAgICoqQ29uY3VycmVuY3kqKjogSSYjMzk7bGwgYWxzbyBnbGFuY2UgdG8gc2VlIGlmIGFueXRoaW5nIGhlcmUgaXMgc3VzY2VwdGlibGUgdG8gY29uY3VycmVuY3kgaXNzdWVzIGFzIEkga25vdyBoYXJkd2FyZSBwcm9iaW5nIGNhbiBvZnRlbiBoYXZlIHNoYXJlZCByZXNvdXJjZXMuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGdhdGV3YXkuIEl0IHNob3VsZCBiZSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgdGhlIGRldmljZSB3ZSYjMzk7cmUgZXhwZWN0aW5nLCBhbmQgdGhlbiBnZXR0aW5nIGl0IHJlYWR5IHRvIGJlIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgZG9uZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRpbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbiA5ODE6XHR7XG4gOTgyOlx0XHR1MTYgaWQsIHJldmlzaW9uLCBmd192ZXI7XG4gOTgzOlx0XHR1bnNpZ25lZCBpbnQgaTtcbiA5ODQ6XHRcdHUzMiBjZmdfdmVyO1xuIDk4NTpcdFx0aW50IHJjO1xuIDk4NjpcdFxuIDk4NzpcdFx0LyogUmVhZCBjaGlwIElEICovXG4gOTg4Olx0XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19JRCwgXHUwMDI2aWQpO1xuIDk4OTpcdFx0aWYgKHJjKVxuIDk5MDpcdFx0XHRyZXR1cm4gcmM7XG4gOTkxOlx0XG4gOTkyOlx0XHQvKiBEZXRlY3QgY2hpcCB2YXJpYW50ICovXG4gOTkzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpJiM0MzsmIzQzOykge1xuIDk5NDpcdFx0XHRpZiAoemwzMDczeF9jaGlwX2lkc1tpXS5pZCA9PSBpZClcbiA5OTU6XHRcdFx0XHRicmVhaztcbiA5OTY6XHRcdH1cbiA5OTc6XHRcbiA5OTg6XHRcdGlmIChpID09IEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcykpXG4gOTk5Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgLUVOT0RFVixcbjEwMDA6XHRcdFx0XHRcdCAgICAgXCYjMzQ7VW5rbm93biBjaGlwIElEOiAweCUwNHhcXG5cJiMzNDssIGlkKTtcbjEwMDE6XHRcbjEwMDI6XHRcdHpsZGV2LVx1MDAzZWluZm8gPSBcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xuMTAwMzpcdFxuMTAwNDpcdFx0LyogUmVhZCByZXZpc2lvbiwgZmlybXdhcmUgdmVyc2lvbiBhbmQgY3VzdG9tIGNvbmZpZyB2ZXJzaW9uICovXG4xMDA1Olx0XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRVZJU0lPTiwgXHUwMDI2cmV2aXNpb24pO1xuMTAwNjpcdFx0aWYgKHJjKVxuMTAwNzpcdFx0XHRyZXR1cm4gcmM7XG4xMDA4Olx0XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFx1MDAyNmZ3X3Zlcik7XG4xMDA5Olx0XHRpZiAocmMpXG4xMDEwOlx0XHRcdHJldHVybiByYztcbjEwMTE6XHRcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0NVU1RPTV9DT05GSUdfVkVSLCBcdTAwMjZjZmdfdmVyKTtcbjEwMTI6XHRcdGlmIChyYylcbjEwMTM6XHRcdFx0cmV0dXJuIHJjO1xuMTAxNDpcdFxuMTAxNTpcdFx0ZGV2X2RiZyh6bGRldi1cdTAwM2VkZXYsIFwmIzM0O0NoaXBJRCglWCksIENoaXBSZXYoJVgpLCBGd1ZlcigldSlcXG5cJiMzNDssIGlkLFxuMTAxNjpcdFx0XHRyZXZpc2lvbiwgZndfdmVyKTtcbjEwMTc6XHRcdGRldl9kYmcoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtDdXN0b20gY29uZmlnIHZlcnNpb246ICVsdS4lbHUuJWx1LiVsdVxcblwmIzM0OyxcbjEwMTg6XHRcdFx0RklFTERfR0VUKEdFTk1BU0soMzEsIDI0KSwgY2ZnX3ZlciksXG4xMDE5Olx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDIzLCAxNiksIGNmZ192ZXIpLFxuMTAyMDpcdFx0XHRGSUVMRF9HRVQoR0VOTUFTSygxNSwgOCksIGNmZ192ZXIpLFxuMTAyMTpcdFx0XHRGSUVMRF9HRVQoR0VOTUFTSyg3LCAwKSwgY2ZnX3ZlcikpO1xuMTAyMjpcdFxuMTAyMzpcdFx0LyogR2VuZXJhdGUgcmFuZG9tIGNsb2NrIElEIGFzIHRoZSBkZXZpY2UgaGFzIG5vdCBzdWNoIHByb3BlcnR5IHRoYXRcbjEwMjQ6XHRcdCAqIGNvdWxkIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4gQSB1c2VyIGNhbiBsYXRlciBjaGFuZ2UgdGhpcyB2YWx1ZVxuMTAyNTpcdFx0ICogdXNpbmcgZGV2bGluay5cbjEwMjY6XHRcdCAqL1xuMTAyNzpcdFx0emxkZXYtXHUwMDNlY2xvY2tfaWQgPSBnZXRfcmFuZG9tX3U2NCgpO1xuMTAyODpcdFxuMTAyOTpcdFx0LyogRGVmYXVsdCBwaGFzZSBvZmZzZXQgYXZlcmFnaW5nIGZhY3RvciAqL1xuMTAzMDpcdFx0emxkZXYtXHUwMDNlcGhhc2VfYXZnX2ZhY3RvciA9IDI7XG4xMDMxOlx0XG4xMDMyOlx0XHQvKiBJbml0aWFsaXplIG11dGV4IGZvciBvcGVyYXRpb25zIHdoZXJlIG11bHRpcGxlIHJlYWRzLCB3cml0ZXNcbjEwMzM6XHRcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxuMTAzNDpcdFx0ICovXG4xMDM1Olx0XHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cdTAwM2VkZXYsIFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4xMDM2Olx0XHRpZiAocmMpXG4xMDM3Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4xMDM4Olx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbjEwMzk6XHRcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcbjEwNDA6XHRcdGlmIChyYylcbjEwNDE6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwNDI6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuMTA0MzpcdFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4xMDQ0Olx0XHRpZiAocmMpXG4xMDQ1Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4xMDQ2Olx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCYjMzQ7KTtcbjEwNDc6XHRcbjEwNDg6XHRcdC8qIFJlZ2lzdGVyIERQTEwgY2hhbm5lbHMgKi9cbjEwNDk6XHRcdHJjID0gemwzMDczeF9kZXZtX2RwbGxfaW5pdCh6bGRldik7XG4xMDUwOlx0XHRpZiAocmMpXG4xMDUxOlx0XHRcdHJldHVybiByYztcbjEwNTI6XHRcbjEwNTM6XHRcdC8qIFJlZ2lzdGVyIHRoZSBkZXZsaW5rIGluc3RhbmNlIGFuZCBwYXJhbWV0ZXJzICovXG4xMDU0Olx0XHRyYyA9IHpsMzA3M3hfZGV2bGlua19yZWdpc3Rlcih6bGRldik7XG4xMDU1Olx0XHRpZiAocmMpXG4xMDU2Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4xMDU3Olx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBkZXZsaW5rIGluc3RhbmNlXFxuXCYjMzQ7KTtcbjEwNTg6XHRcbjEwNTk6XHRcdHJldHVybiAwO1xuMTA2MDpcdH1cbjEwNjE6XHRFWFBPUlRfU1lNQk9MX05TX0dQTCh6bDMwNzN4X2Rldl9wcm9iZSwgXCYjMzQ7WkwzMDczWFwmIzM0Oyk7XG4xMDYyOlx0XG4xMDYzOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtJdmFuIFZlY2VyYSBcdTAwM2NpdmVjZXJhQHJlZGhhdC5jb21cdTAwM2VcJiMzNDspO1xuMTA2NDpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNaWNyb2NoaXAgWkwzMDczeCBjb3JlIGRyaXZlclwmIzM0Oyk7XG4xMDY1Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2NTcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgUHJvYmUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwcm9iZSBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgZ3JhYmJpbmcgdGhlIGBaTF9SRUdfSURgIGFuZCBjb21wYXJpbmcgaXQgdG8gdGhlIGtub3duIGB6bDMwNzN4X2NoaXBfaWRzYC4gVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCBpcyB0aGF0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSB0aGUgb25lIHN5emthbGxlciB1c2VzLCB0aGVzZSBJMkMgcmVhZHMgYXJlIGhpZ2hseSBsaWtlbHkgdG8gZmFpbCBvciByZXR1cm4gZ2FyYmFnZS4gVGhhdCBtZWFucyBhIGAtRU5PREVWYCBlcnJvciwgYW5kIHRoZSBwcm9iZSBqdXN0IGRpZXMuCgpXYWl0IGEgc2Vjb25kLCBkb2VzbuKAmXQgc3l6a2FsbGVyIGhhdmUgKnNvbWUqIG1lY2hhbmlzbSB0byBtb2NrIEkyQyBkZXZpY2VzPyBJIGtub3cgaXQgbW9ja3Mgb3RoZXIgaGFyZHdhcmUgaW50ZXJmYWNlcy4gTm8sIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBoYXZlIGEgZ2VuZXJpYyBJMkMgbW9jaywgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZSBjb21tZW50cyBpbiB0aGUgY29kZSBhcmUgcG9pbnRpbmcgbWUgdG93YXJkcyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGNhbGxpbmcgb3V0IHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLgoKU28gdGhlIHByb2JlICp3aWxsKiBmYWlsIGJlY2F1c2UgaXQmIzM5O3MgZXhwZWN0aW5nIGEgc3BlY2lmaWMgY2hpcCBJRCB0byBjb21lIGJhY2sgZnJvbSB0aGUgSTJDIGJ1cy4gQnV0LCBob2xkIG9uIGEgbWludXRlISBTeXprYWxsZXIgaGFzIGFsbCB0aGVzZSBkaWZmZXJlbnQgc2ltdWxhdG9ycyDigJMgYHZoY2lgLCBgbWFjODAyMTFfaHdzaW1gLCBgdmttc2AsIGB2Y2FuYCwgYHVpbnB1dGAsIGBzbmQtZHVtbXlgLCBgbmV0ZGV2c2ltYCwgYW5kIG1vcmUuIERvIHRoZXkgaGF2ZSBhbiBJMkMgZXF1aXZhbGVudD8KCkFoYSEgVGhlcmUgKmlzKiBgaTJjLXN0dWJgISBJIGNhbiB1c2UgaXQgdG8gbW9jayBJMkMgZGV2aWNlcyEgTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGBpMmMtc3R1YmAgY2FuIGFjdHVhbGx5IHNpbXVsYXRlIHRoaXMgc3BlY2lmaWMgZGV2aWNlLgoKT2theSwgc28gYGkyYy1zdHViYCBsZXRzIHlvdSBzcGVjaWZ5IGNoaXAgYWRkcmVzc2VzIGFuZCBpdOKAmWxsIGFjdCBhcyBhIGR1bW15IEkyQyBkZXZpY2UgdGhhdCBzdG9yZXMgYW5kIHJldHVybnMgd2hhdGV2ZXIgYnl0ZXMgYXJlIHdyaXR0ZW4gdG8gaXQuIEJ1dOKApiB3YWl0IGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjaGVjayBob3cgYHpsMzA3M3hgIGludGVyYWN0cyB3aXRoIHRoZSByZWdpc3RlcnMsIGJlY2F1c2UgaWYgaXQgdXNlcyBgcmVnbWFwYCBpdCBjb3VsZCBiZSByZWFkaW5nIDE2LWJpdCBvciAzMi1iaXQgcmVnaXN0ZXJzLiBJIG5lZWQgdG8gY2hlY2sgYHpsMzA3M3hfcmVhZF91MTZgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgemwzMDczeF9yZWFkX3UxNiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9MTc4PWludCB6bDMwNzN4X3dyaXRlX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4IHZhbClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTkyLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjE5MzppbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xOTQte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaD0xNDc9aW50IHpsMzA3M3hfcmVhZF91OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1OCAqdmFsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaDoxNDg6aW50IHpsMzA3M3hfcmVhZF91MTYoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTE2ICp2YWwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTE0OS1pbnQgemwzMDczeF9yZWFkX3UzMihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgKnZhbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODg2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIHpsMzA3M3hfcmVhZF91MTYgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHpsMzA3M3hfcmVhZF91MTZgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG93LWxldmVsIGJlaGF2aW9yLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBkaXNzZWN0IHRoZSBjcml0aWNhbCBwYXRoOyB1bmRlcnN0YW5kIGhvdyB0aGUgZnVuY3Rpb24gaXMgdXNpbmcgdGhlIGhhcmR3YXJlLiBJIGtub3cgdGhlc2UgZGV2aWNlcyBwcmV0dHkgd2VsbCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVnaXN0ZXJzIGFuZCB0aGUgdW5kZXJseWluZyBidXMgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMg4oCTIHByb2JhYmx5IEkyQywgU1BJLCBvciBwb3RlbnRpYWxseSBzb21lIHByb3ByaWV0YXJ5IGJ1cy4gVGhlIGtleSBpcyBpbiBmaWd1cmluZyBvdXQgaG93IHRoZSAxNi1iaXQgdmFsdWUgaXMgYmVpbmcgZmV0Y2hlZC4gQXJlIHRoZXkgdXNpbmcgYSByZWFkIHRyYW5zYWN0aW9uIHdpdGggYSByZWdpc3RlciBhZGRyZXNzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIGRhdGEgc2hlZXQgbGF0ZW5jeSBhbmQgdGltaW5nIHJlcXVpcmVtZW50cz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXRvbWljaXR5IG9yIGNvbmN1cnJlbmN5PyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IGhvdyB0aGUgYWRkcmVzcyBpcyB0cmFuc2xhdGVkIHRvIGFuIEkyQyBvciBTUEkgd3JpdGUuIFRoZW4gZm9sbG93IHRoZSB0cmFuc2FjdGlvbiB0byB0aGUgcmVhZCBzaWRlIHRvIGNvbmZpcm0uIEFyZSB0aGVyZSBhbnkgZXJyb3IgaGFuZGxpbmcgcm91dGluZXM/IFRob3NlIGFyZSBpbXBvcnRhbnQsIHRvbywgZm9yIHVuZGVyc3RhbmRpbmcgcm9idXN0bmVzcy4gVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBwZXJmb3JtcyBhIHNpbXBsZSByZWFkIG9mIGEgMTYtYml0IHZhbHVlIGZyb20gYSBzcGVjaWZpYyBhZGRyZXNzIG9yIGlmIGl0JiMzOTtzIG1vcmUgY29tcGxleCB0aGFuIHRoYXQuIEFyZSB0aGVyZSBhbnkgaGFyZHdhcmUgb3IgYnVzIGNvbnN0cmFpbnRzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkzOlx0aW50IHpsMzA3M3hfcmVhZF91MTYoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTE2ICp2YWwpXG4gMTk0Olx0e1xuIDE5NTpcdFx0aW50IHJjO1xuIDE5NjpcdFxuIDE5NzpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfcmVnKHpsZGV2LCByZWcsIHZhbCwgc2l6ZW9mKCp2YWwpKTtcbiAxOTg6XHRcdGlmICghcmMpXG4gMTk5Olx0XHRcdGJlMTZfdG9fY3B1cyh2YWwpO1xuIDIwMDpcdFxuIDIwMTpcdFx0cmV0dXJuIHJjO1xuIDIwMjpcdH1cbiAyMDM6XHRcbiAyMDQ6XHQvKipcbiAyMDU6XHQgKiB6bDMwNzN4X3dyaXRlX3UxNiAtIHdyaXRlIHZhbHVlIHRvIDE2Yml0IHJlZ2lzdGVyXG4gMjA2Olx0ICogQHpsZGV2OiB6bDMwNzN4IGRldmljZSBwb2ludGVyXG4gMjA3Olx0ICogQHJlZzogcmVnaXN0ZXIgdG8gd3JpdGUgdG9cbiAyMDg6XHQgKiBAdmFsOiB2YWx1ZSB0byB3cml0ZVxuIDIwOTpcdCAqXG4gMjEwOlx0ICogV3JpdGVzIHZhbHVlIGludG8gZ2l2ZW4gMTZiaXQgcmVnaXN0ZXIuXG4gMjExOlx0ICpcbiAyMTI6XHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1NDUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSByZXF1ZXN0ZWQsIHNwZWFraW5nIGFzIGlmIHRoZXNlIGFyZSBteSBvd24gdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgQ29kZSAtIHpsMzA3M3hfcmVhZF9yZWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGNvZGUmIzM5O3MgdXNpbmcgYHpsMzA3M3hfcmVhZF9yZWdgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW50ZXJhY3Rpbmcgd2l0aCBhIFpMMzA3M3ggZGV2aWNlLCBsaWtlbHkgYSB0aW1pbmcgY2hpcCBvciBzaW1pbGFyLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lLCBgX3JlYWRfcmVnYCwgc3Ryb25nbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIHJlYWRpbmcgYSByZWdpc3RlciBmcm9tIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHJlZ2lzdGVyIG1hcCBvZiB0aGUgWkwzMDczeC4gSSYjMzk7bGwgbmVlZCB0aGF0IHRvIHVuZGVyc3RhbmQgKndoYXQqIGRhdGEgaXMgYmVpbmcgcmVxdWVzdGVkIGFuZCB3aHkuIEtub3dpbmcgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIGFkZHJlc3NlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb2RlJiMzOTtzIGludGVudC4gSXMgaXQgcmVhZGluZyBzdGF0dXMgZmxhZ3M/IENvbmZpZ3VyYXRpb24gdmFsdWVzPyBPciBwZXJoYXBzIGRpYWdub3N0aWMgaW5mb3JtYXRpb24/IFRoZSBjb250ZXh0IG9mIHdoZXJlIHRoaXMgYHpsMzA3M3hfcmVhZF9yZWdgIGNhbGwgYXBwZWFycyBpbiB0aGUgbGFyZ2VyIGNvZGUgc3RydWN0dXJlIGlzIHZpdGFsIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgd2UgaW5pdGlhbGl6aW5nIHRoZSBkZXZpY2UsIHBvbGxpbmcgZm9yIGFuIGV2ZW50LCBvciByZXNwb25kaW5nIHRvIGFuIGludGVycnVwdD8gTm93IEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNvbW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XHQvKiBNYXAgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgdG8gdmlydHVhbCByYW5nZSAqL1xuIDE0MTpcdFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSAmIzQzOyBaTF9SQU5HRV9PRkZTRVQ7XG4gMTQyOlx0XG4gMTQzOlx0XHRyYyA9IHJlZ21hcF9idWxrX3dyaXRlKHpsZGV2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsIHNpemUpO1xuIDE0NDpcdFx0aWYgKHJjKSB7XG4gMTQ1Olx0XHRcdGRldl9lcnIoemxkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgcmVnIDB4JTA0eDogJXBlXFxuXCYjMzQ7LCByZWcsXG4gMTQ2Olx0XHRcdFx0RVJSX1BUUihyYykpO1xuIDE0NzpcdFx0XHRyZXR1cm4gcmM7XG4gMTQ4Olx0XHR9XG4gMTQ5Olx0XG4gMTUwOlx0XHRyZXR1cm4gMDtcbiAxNTE6XHR9XG4gMTUyOlx0XG4gMTUzOlx0LyoqXG4gMTU0Olx0ICogemwzMDczeF9yZWFkX3U4IC0gcmVhZCB2YWx1ZSBmcm9tIDhiaXQgcmVnaXN0ZXJcbiAxNTU6XHQgKiBAemxkZXY6IHpsMzA3M3ggZGV2aWNlIHBvaW50ZXJcbiAxNTY6XHQgKiBAcmVnOiByZWdpc3RlciB0byB3cml0ZSB0b1xuIDE1NzpcdCAqIEB2YWw6IHZhbHVlIHRvIHdyaXRlXG4gMTU4Olx0ICpcbiAxNTk6XHQgKiBSZWFkcyB2YWx1ZSBmcm9tIGdpdmVuIDhiaXQgcmVnaXN0ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTc0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb2RlIEZsb3cqKgoKSG1tLCBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljLCBhbmQgSSBzZWUgYSBjYWxsIHRvIGB6bDMwNzN4X3JlYWRfcmVnYC4gT2theSwgbm93IEkmIzM5O3ZlIG5vdGljZWQgaXQmIzM5O3MgcG9zaXRpb25lZCBhYm92ZSB0aGUgY3VycmVudCBsaW5lIEkmIzM5O20gZXhhbWluaW5nLiBJJiMzOTttIHRha2luZyBhIG1vbWVudCB0byByZWdpc3RlciB0aGF0LCBhbmQgaG93IHRoYXQgcHJlY2VkaW5nIGZ1bmN0aW9uIHJlbGF0ZXMgdG8gdGhlIHN1YnNlcXVlbnQgc3RlcHMuIFRoaXMgcGxhY2VtZW50IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGRhdGEgZGVwZW5kZW5jaWVzIG9yIHBlcmhhcHMgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCByZWxhdGl2ZSBvcmRlcmluZyBhcyBJIGV4YW1pbmUgc3Vic2VxdWVudCBsb2dpYywgYW5kIHVuZGVyc3RhbmQgaG93IHZhbHVlcyByZWFkIGZyb20gcmVnaXN0ZXJzIGJ5IGB6bDMwNzN4X3JlYWRfcmVnYCBhcmUgdGhlbiB1c2VkLiBJdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiB0aGF0IGRpcmVjdHMgbXkgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdGlmIChaTF9SRUdfU0laRShyZWcpICE9IHNpemUpIHtcbiAxMDE6XHRcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwmIzM0O0ludmFsaWQgc2l6ZSAlenUgZm9yIHJlZyAweCUwNGx4XFxuXCYjMzQ7LFxuIDEwMjpcdFx0XHRcdHNpemUsIFpMX1JFR19BRERSKHJlZykpO1xuIDEwMzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTA0Olx0XHR9XG4gMTA1Olx0XG4gMTA2Olx0XHRyZXR1cm4gdHJ1ZTtcbiAxMDc6XHR9XG4gMTA4Olx0XG4gMTA5Olx0c3RhdGljIGludFxuIDExMDpcdHpsMzA3M3hfcmVhZF9yZWcoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdm9pZCAqdmFsLFxuIDExMTpcdFx0XHQgc2l6ZV90IHNpemUpXG4gMTEyOlx0e1xuIDExMzpcdFx0aW50IHJjO1xuIDExNDpcdFxuIDExNTpcdFx0aWYgKCF6bDMwNzN4X2NoZWNrX3JlZyh6bGRldiwgcmVnLCBzaXplKSlcbiAxMTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTE3Olx0XG4gMTE4Olx0XHQvKiBNYXAgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgdG8gdmlydHVhbCByYW5nZSAqL1xuIDExOTpcdFx0cmVnID0gWkxfUkVHX0FERFIocmVnKSAmIzQzOyBaTF9SQU5HRV9PRkZTRVQ7XG4gMTIwOlx0XG4gMTIxOlx0XHRyYyA9IHJlZ21hcF9idWxrX3JlYWQoemxkZXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCwgc2l6ZSk7XG4gMTIyOlx0XHRpZiAocmMpIHtcbiAxMjM6XHRcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWFkIHJlZyAweCUwNHg6ICVwZVxcblwmIzM0OywgcmVnLFxuIDEyNDpcdFx0XHRcdEVSUl9QVFIocmMpKTtcbiAxMjU6XHRcdFx0cmV0dXJuIHJjO1xuIDEyNjpcdFx0fVxuIDEyNzpcdFxuIDEyODpcdFx0cmV0dXJuIDA7XG4gMTI5Olx0fVxuIDEzMDpcdFxuIDEzMTpcdHN0YXRpYyBpbnRcbiAxMzI6XHR6bDMwNzN4X3dyaXRlX3JlZyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCBjb25zdCB2b2lkICp2YWwsXG4gMTMzOlx0XHRcdCAgc2l6ZV90IHNpemUpXG4gMTM0Olx0e1xuIDEzNTpcdFx0aW50IHJjO1xuIDEzNjpcdFxuIDEzNzpcdFx0aWYgKCF6bDMwNzN4X2NoZWNrX3JlZyh6bGRldiwgcmVnLCBzaXplKSlcbiAxMzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTg5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9iZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcHJvYmUgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBsb29raW5nIGZvciBgWkxfUkVHX0lEYC4gTmF0dXJhbGx5LCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHRvIHNvbWV0aGluZyBkZWZpbmVkIHdpdGhpbiBgemwzMDczeF9jaGlwX2lkc2AuIE15IG1pbmQmIzM5O3Mgbm93IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG9zc2libGUgY2hpcCBJRHMuIExldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgd2hhdCB0aGlzIGB6bDMwNzN4X2NoaXBfaWRzYCBhY3R1YWxseSBjb250YWlucy4gVGltZSB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoLiBVbmRlcnN0YW5kaW5nIHRob3NlIElEcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBleHBlY3RlZCBoYXJkd2FyZSB0aGlzIHByb2JlIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9jaGlwX2lkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MjY6c3RhdGljIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB6bDMwNzN4X2NoaXBfaWRzW10gPSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjctXHRaTF9DSElQX0lORk8oMHgwRTMwLCAyLCBaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzIpLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODA9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk5Mi1cdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk5NDpcdFx0aWYgKHpsMzA3M3hfY2hpcF9pZHNbaV0uaWQgPT0gaWQpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk1LVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTctXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk4Olx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTktXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgLUVOT0RFVixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwMS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDAyOlx0emxkZXYtXHUwMDNlaW5mbyA9IFx1MDAyNnpsMzA3M3hfY2hpcF9pZHNbaV07XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MjUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgemwzMDczeCBEcml2ZXI6IEEgU3l6a2FsbGVyIENoYWxsZW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhlIGB6bDMwNzN4YCBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc2ltdWxhdGUgaXRzIGhhcmR3YXJlIGRlcGVuZGVuY2llcyB3aXRoaW4gU3l6a2FsbGVyLiBUaGUgY2hpcCBJRCwgbGV0JiMzOTtzIHNheSBgMHgwRTMwYCwgaXMgdGhlIGtleS4gQ2FuIEkgZ2V0IFN5emthbGxlciB0byBtb2NrIHRoaXMgSTJDIGludGVyYWN0aW9uPwoKVGhlIGltbWVkaWF0ZSBwcm9ibGVtIGlzIHRoYXQgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBidWlsdC1pbiwgZmluZS1ncmFpbmVkIEkyQyBtb2NrIHRoYXQgY2FuIHJldHVybiBzcGVjaWZpYyB2YWx1ZXMgZm9yIHNwZWNpZmljIHJlZ2lzdGVycy4gSSBrbm93IGl0ICpkb2VzKiBoYXZlIHNvbWUgYmFzaWMgYC9kZXYvaTJjLVhgIGZ1enppbmcsIGJ1dCB0aGF0JiMzOTtzIHJlYWxseSBmb3IgdXNlcnNwYWNlIHRvICp0YWxrKiB0byBJMkMgZGV2aWNlcywgbm90IGZvciAqZW11bGF0aW5nKiB0aGUgZGV2aWNlcyB0aGVtc2VsdmVzLiBJZiBJIHRyeSB0byB0cmlnZ2VyIHRoZSBkZXZpY2UgaW5zdGFudGlhdGlvbiB0aHJvdWdoIHN5c2ZzJiMzOTtzIGBuZXdfZGV2aWNlYCwgdGhlIGtlcm5lbCBwcm9iZSB3aWxsIHJ1biBJMkMgcmVhZHMsIGFuZCB3aXRob3V0IGEgcmVhbCBkZXZpY2UsIHRob3NlIHJlYWRzIHdpbGwgZmFpbC4gU28gSSBuZWVkIGEgd2F5IHRvIG1ha2UgdGhvc2UgcmVhZHMgcmV0dXJuIHdoYXQgSSB3YW50LiBJZGVhbGx5LCB0aGVyZSYjMzk7ZCBiZSBhIGdlbmVyaWMgc29mdHdhcmUgSTJDIGFkYXB0ZXIgdW5kZXIgU3l6a2FsbGVyJiMzOTtzIGNvbnRyb2wuCgpUaGVuIEkgcmVjYWxsZWQgYGkyYy1zdHViYC4gVGhhdCYjMzk7cyBhIGtlcm5lbCBtb2R1bGUgdGhhdCBtYWtlcyBmYWtlIEkyQyBhZGFwdGVyIGFuZCBkZXZpY2VzLiBMZXQgbWUgY2hlY2sgaWYgU3l6a2FsbGVyIGVuYWJsZXMgaXQuIFVzdWFsbHksIGBDT05GSUdfSTJDX1NUVUJgIGlzIGVuYWJsZWQuIEJ1dCBJIHJlYWxpemVkIGBpMmMtc3R1YmAgb25seSBzdXBwb3J0cyBTTUJ1cyBjb21tYW5kcyBhbmQgYHpsMzA3M3hgIHVzZXMgcmVnbWFwIG92ZXIgSTJDLiBBbmQsIGlmIGBpMmMtc3R1YmAgaXMgdXNlZCwgY291bGQgSSBsb2FkIGl0IHdpdGggYGNoaXBfYWRkcj0weDIwYCBhbmQgdGhlbiBwcm9ncmFtIHRoZSByZWdpc3RlcnMgdmlhIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC8wLTAwMjAvYD8gTm8sIGBpMmMtc3R1YmAgZG9lc24mIzM5O3QgZXhwb3NlIHJlZ2lzdGVycyB2aWEgc3lzZnMuIEFoLCBidXQgd2FpdCBhIHNlY29uZC4KClN5emthbGxlciAqY2FuKiB3cml0ZSB0byBgL2Rldi9pMmMtWGAhIEkgY291bGQgdXNlIGAvZGV2L2kyYy1YYCB0byBwcm9ncmFtIHRoZSBgaTJjLXN0dWJgIHJlZ2lzdGVycy4gQW5kLCBpZiB1c2Vyc3BhY2Ugd3JpdGVzIHRvIGAvZGV2L2kyYy1YYCAodGhlIGZha2UgYWRhcHRlciksIGl0IGNhbiB3cml0ZSB0byB0aGUgZmFrZSBkZXZpY2UmIzM5O3MgcmVnaXN0ZXJzLiBUaGVuLCBpZiB1c2Vyc3BhY2UgaW5zdGFudGlhdGVzIGB6bDMwNzN4YCBvbiB0aGUgc2FtZSBmYWtlIGFkYXB0ZXIgYXQgdGhlIHNhbWUgYWRkcmVzcywgdGhlIGB6bDMwNzN4YCBkcml2ZXIgKnNob3VsZCogcmVhZCB0aGUgcmVnaXN0ZXJzIEkganVzdCBwcm9ncmFtbWVkLiBCcmlsbGlhbnQhCgpOb3csIGRvZXMgU3l6a2FsbGVyICphY3R1YWxseSogZG8gdGhpcz8gSSYjMzk7bSBub3QgZmFtaWxpYXIgd2l0aCBhbnkgc3BlY2lmaWMgZXhhbXBsZXMsIGFuZCBJIGNhbiYjMzk7dCB0aGluayBvZiBhbnl0aGluZyBsaWtlIGBzeXpfaTJjX3NldHVwYC4gSSYjMzk7bGwgaGF2ZSB0byBjaGVjayB0aGUgU3l6a2FsbGVyIHNvdXJjZS4gSG1tLCBJIGp1c3QgcmVtZW1iZXJlZCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X3VzYl9jb25uZWN0YCwgYHN5el84MDIxMV9qb2luX2lic3NgLCBhbmQgc28gb24sIGJ1dCBubyBgc3l6X2kyY19zZXR1cGAuIExldCBtZSBqdXN0IGFzc3VtZSBpdCBkb2VzbiYjMzk7dCBkbyBpdCBkaXJlY3RseS4KCk9rYXksIGFyZSB0aGVyZSAqb3RoZXIqIHBhdGhzIHRvIHJlYWNoIHRoaXMgY29kZT8gV2hhdCBhYm91dCBTUEk/IFRoZSBkcml2ZXIgaGFzIGEgYHpsMzA3M3hfc3BpX3Byb2JlYCBmdW5jdGlvbi4gSSBhbSBub3QgZmFtaWxpYXIgd2l0aCBTeXprYWxsZXImIzM5O3MgU1BJIGNhcGFiaWxpdGllcyBidXQgSSByZW1lbWJlciBpdCBkb2VzbiYjMzk7dCBoYXZlIGEgU1BJIG1vY2sgZWl0aGVyLgoKTm93LCBJIGhhdmUgYSBiaWdnZXIgcHJvYmxlbS4gSSYjMzk7bSBvcGVyYXRpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQXJlIHRoZXNlIGtpbmRzIG9mIEkyQy9TUEkgZHJpdmVycyBldmVuIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQ/ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuJiMzNDsgSXQmIzM5O3MgZ2VuZXJhbGx5IGltcG9zc2libGUgdG8gc3VjY2Vzc2Z1bGx5IHJlYWNoIHRoZSBwcm9iZSBmdW5jdGlvbiB3aXRob3V0IGEgcmVhbC1pc2ggaGFyZHdhcmUgc2V0dXAgb3IgYSByZWFsbHkgY2xldmVyIGVtdWxhdG9yLiBQcm9iZXMgYWx3YXlzIGNoZWNrIGNoaXAgSURzLgoKSSBndWVzcyBJIHNob3VsZCBjaGVjayBvbmUgbGFzdCB0aGluZzogaXMgdGhlcmUgYW55IGV4aXN0aW5nIHRlc3QgbW9jayBmb3IgYHpsMzA3M3hgPyBJZiBub3QsIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBhIG5vbi10cml2aWFsIGFtb3VudCBvZiB3b3JrIHRvIGdldCB0aGlzIGZ1enplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bDMwNzN4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTMxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBsaW5lIG9mIHRob3VnaHQsIHRoaW5raW5nIGFzIGEgc2Vhc29uZWQgZW5naW5lZXI6CgoqKkNoZWNraW5nIGZvciBUZXN0IE1vY2tzIGluIHRoZSBEUExMIERyaXZlciBEaXJlY3RvcnkqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBoZWF2eS1kdXR5IGRlYnVnZ2luZyBvciBmZWF0dXJlIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGF0IGBkcml2ZXJzL2RwbGwvemwzMDczeC9gIGRpcmVjdG9yeSwgSSBhbHdheXMgc3RhcnQgd2l0aCBhIHNhbml0eSBjaGVjay4gTGV0JiMzOTtzIHNlZSBpZiB3ZSYjMzk7dmUgYmVlbiBkaWxpZ2VudCB3aXRoIG91ciB0ZXN0aW5nIHN0cmF0ZWd5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJiMzOTtzIGEgdGVzdCBtb2NrIGF2YWlsYWJsZS4gSGF2aW5nIGEgbW9jayBmb3IgdGhhdCBEUExMIG1vZHVsZSDigJMgdGhlIFpMMzA3M3gg4oCTIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgZWZmaWNpZW50IGRldmVsb3BtZW50IGFuZCByZWdyZXNzaW9uIHRlc3RpbmcuIEl0IGFsbG93cyBmb3IgY29udHJvbGxlZCBleHBlcmltZW50YXRpb24gYW5kIGlzb2xhdGlvbiBvZiB0aGUgbW9kdWxlIGZyb20gcG90ZW50aWFsbHkgY29tcGxleCBoYXJkd2FyZSBpbnRlcmFjdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBGaW5kaW5nIGEgZ29vZCBtb2NrIHdpbGwgc2F2ZSBhIGxvdCBvZiB0aW1lIGFuZCBlZmZvcnQgZG93biB0aGUgbGluZS4gSXQgYXZvaWRzIHRoZSBuZWVkIHRvIHJlcGVhdGVkbHkgYm9vdCB0aGUgc3lzdGVtIGluIHZhcmlvdXMgY29uZmlndXJhdGlvbnMganVzdCB0byB0ZXN0IGEgc21hbGwgY29kZSBjaGFuZ2UuIFBsdXMsIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgY3JlYXRpbmcgc3RhYmxlIHVuaXQgdGVzdHMuIElmIHRoZXJlIGlzbiYjMzk7dCBhIG1vY2ssIHRoZW4gaXQmIzM5O3MgdGltZSB0byBjcmVhdGUgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2NoYW4uYyYjMzQ7LAogICAgJiMzNDtjaGFuLmgmIzM0OywKICAgICYjMzQ7Y29yZS5jJiMzNDssCiAgICAmIzM0O2NvcmUuaCYjMzQ7LAogICAgJiMzNDtkZXZsaW5rLmMmIzM0OywKICAgICYjMzQ7ZGV2bGluay5oJiMzNDssCiAgICAmIzM0O2RwbGwuYyYjMzQ7LAogICAgJiMzNDtkcGxsLmgmIzM0OywKICAgICYjMzQ7Zmxhc2guYyYjMzQ7LAogICAgJiMzNDtmbGFzaC5oJiMzNDssCiAgICAmIzM0O2Z3LmMmIzM0OywKICAgICYjMzQ7ZncuaCYjMzQ7LAogICAgJiMzNDtpMmMuYyYjMzQ7LAogICAgJiMzNDtvdXQuYyYjMzQ7LAogICAgJiMzNDtvdXQuaCYjMzQ7LAogICAgJiMzNDtwcm9wLmMmIzM0OywKICAgICYjMzQ7cHJvcC5oJiMzNDssCiAgICAmIzM0O3JlZi5jJiMzNDssCiAgICAmIzM0O3JlZi5oJiMzNDssCiAgICAmIzM0O3JlZ3MuaCYjMzQ7LAogICAgJiMzNDtzcGkuYyYjMzQ7LAogICAgJiMzNDtzeW50aC5jJiMzNDssCiAgICAmIzM0O3N5bnRoLmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFRhcmdldCBDb2RlOiBBIEZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHpsMzA3M3hgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZnV6emFibGUgd2l0aCBzeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtObyB0ZXN0IG1vY2tzLiYjMzQ7IFNpbmNlIHN5emthbGxlciBydW5zIGluIGVudmlyb25tZW50cyB3aXRob3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgdGhpcyBgemwzMDczeGAgZGV2aWNlJiMzOTtzIHByb2JlIGZ1bmN0aW9uIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBmYWlsLiBJdCBleHBsaWNpdGx5IGNoZWNrcyB0aGUgY2hpcCBJRCwgYW5kIGlmIHRoYXQgZG9lc24mIzM5O3QgbWF0Y2gsIGl0IHJldHVybnMgYC1FTk9ERVZgLiBJIHF1aWNrbHkgZGlzbWlzc2VkIHRoZSBieXBhc3MsIGFzIHRoZSBjb2RlIGRpcmVjdGx5IHByZXZlbnRzIHRoYXQuCgpUaGVuLCBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgYGkyYy1zdHViYCwgY291bGQgc3l6a2FsbGVyIGxldmVyYWdlIHRoYXQgdG8gZW11bGF0ZSB0aGUgZGV2aWNlPyBCdXQsIHdhaXQsIGBpMmMtc3R1YmAgb25seSBzdXBwb3J0cyA4LWJpdCByZWdpc3RlciBhZGRyZXNzZXMsIHdoZXJlYXMgYHpsMzA3M3hgIHVzZXMgMTYtYml0IHJlZ2lzdGVycy4gTXkgaW1tZWRpYXRlIGNvbmNsdXNpb24sIHRoZW4sIHdhcyB0aGF0IGl0IHdhcyBpbXBvc3NpYmxlLiBObyBvdGhlciBJMkMgbW9ja3MgYXJlIGF2YWlsYWJsZSwgbm90IGV2ZW4gYW4gYGkyYy1tb2NrYC4gVGhlIHNhbWUgZ29lcyBmb3IgU1BJIOKAkyBubyBgc3BpLW1vY2tgIGV4aXN0cy4KClNvLCB0aGUgcHJvYmUgZmFpbHMsIG1ha2luZyB0aGUgZHJpdmVyIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgc2V0dXAuIFRoZSB0YXJnZXQgY29kZSBsaWVzIHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgemwzMDczeF9jaGFuX3RvZF9yZWFkYCwgYHpsMzA3M3hfY2hhbl90b2Rfd3JpdGVgLCBldGMuLCBhbGwgb2Ygd2hpY2ggYXJlIFBUUCBjbG9jayBvcGVyYXRpb25zLiBUaGVzZSBhcmUgb25seSByZWdpc3RlcmVkIGlmIGB6bDMwNzN4X2RwbGxfcmVnaXN0ZXJgIHN1Y2NlZWRzLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgemwzMDczeF9kZXZfcHJvYmVgLiBTaW5jZSB0aGF0IHByb2JlIHdpbGwgZmFpbCwgdGhvc2UgZnVuY3Rpb25zIHdpbGwgbmV2ZXIgZ2V0IGV4ZWN1dGVkLiBUaHVzLCB0aGlzIGNvZGUgcGF0aCwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXMgbm90IHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIG1lYW5zLgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrLiBTeXprYWxsZXIgdXN1YWxseSBoYXMgb3B0aW9ucywgcmlnaHQ/IElzIHRoZXJlIGFueXRoaW5nIHRoYXQgY291bGQgYmUgY29uZmlndXJlZCB0byBlbXVsYXRlIEkyQz8gSSBsb29rZWQgZm9yIGFueSBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zLCBidXQsIG5vLCBpdCByZWxpZXMgb24gc3RyaWN0IGNoaXAgSUQgdmFsaWRhdGlvbi4gV2FpdCwgSSBoYWQgYW5vdGhlciB0aG91Z2h0OiB3aGF0IGFib3V0IGB2aGNpYCBmb3IgVVNCLUkyQyBhZGFwdGVyISBJIGNhbiB1c2UgYHN5el91c2JfY29ubmVjdGAgdG8gZmFrZSBhbiBgaTJjLXRpbnktdXNiYCBkZXZpY2UuIFRoYXQgd2F5LCBzeXprYWxsZXIgY291bGQgaW50ZXJjZXB0IHRoZSBJMkMgcmVxdWVzdHMgYW5kIHJldHVybiB0aGUgZXhwZWN0ZWQgY2hpcCBJRCB3aGVuIHJlcXVlc3RlZC4KClllcyEgSSBjYW4gc2VlIHRoYXQgYHN5el91c2JfY29ubmVjdGAgaGFzIHRoYXQgY2FwYWJpbGl0eSEgVGhlIGtlcm5lbCB3b3VsZCB0aGVuIHJlcXVlc3QgYW4gSTJDIHJlYWQsIHRoZSBVU0ItSTJDIGFkYXB0ZXIgd291bGQgcHJvY2VzcyB0aGF0LCBhbmQgc3l6a2FsbGVyIGNvdWxkIHByb3ZpZGUgdGhlIHJpZ2h0IGNoaXAgSUQgYDB4MEUzMGAgaW4gaXRzIHJlc3BvbnNlISBUaGUgcHJvYmFiaWxpdHkgb2Ygc3l6a2FsbGVyIGdlbmVyYXRpbmcgdGhlIGNvcnJlY3QgMTYtYml0IGNoaXAgSUQgcmFuZG9tbHkgaXMsIG9mIGNvdXJzZSwgdmVyeSBsb3c6IDEvNjU1MzYuIEJ1dCwgd2FpdCwgc3l6a2FsbGVyIHVzZXMgY292ZXJhZ2UtZ3VpZGVkIGZ1enppbmcsIHNvIGl0ICpjb3VsZCogZGV0ZWN0IHRoZSBjb21wYXJpc29uIGFuZCBldmVudHVhbGx5IGZpbmQgdGhlIGNoaXAgSUQhCgpTbywgdGhlIEkyQyByZWFkIGdvZXMgdGhyb3VnaCBgcmVnbWFwYCwgdGhlbiBgaTJjYCwgdGhlbiBVU0IgdG8gc3l6a2FsbGVyLiBTeXprYWxsZXImIzM5O3MgVVNCIGZ1enplciByZWNlaXZlcyBhIHN0cmVhbSBvZiBieXRlcyBmb3IgVVNCIGVuZHBvaW50cy4gSWYgSSBjYW4gcHJvdmlkZSBgMHgwRTMwYCwgdGhlIHByb2JlIGNvdWxkIGNvbnRpbnVlLiBUaGUgZHJpdmVyIHdvdWxkIHRoZW4gcmVhZCBgUkVWSVNJT05gLCBgRldfVkVSYCwgYENVU1RPTV9DT05GSUdfVkVSYC4gSXQgd291bGQgdGhlbiByZWdpc3RlciBEUExMIGNoYW5uZWxzLgoKSXMgdGhpcyBwcmFjdGljYWxseSBhY2hpZXZhYmxlLCB0aG91Z2g/IFVzdWFsbHksIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMgYXJlIGNvbnNpZGVyZWQgaGFyZCB0byByZWFjaCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gQnV0LCBpZiBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyLCB3ZSBzdGlsbCB3YW50IHRvIGZ1enogaXQuIFRoZSBpbnN0cnVjdGlvbnMgc3RhdGUgY2xlYXJseSB0byBleGNsdWRlIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEJ1dCBpcyB0aGlzIHJlYWxseSBpbXBvc3NpYmxlPwoKU3l6a2FsbGVyIGNhbiBjcmVhdGUgYW4gSTJDIGJ1cyB2aWEgYGkyYy10aW55LXVzYmAgb3IgYGkyYy1zdHViYCBvciBgaTJjLWdwaW9gLiBCdXQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYW4gSTJDIGRldmljZSBmdXp6ZXIgZm9yIGF1dG9tYXRpY2FsbHkgaW5zdGFudGlhdGluZyBhbGwgSTJDIGRyaXZlcnMgYW5kIG1vY2tpbmcgdGhlaXIgcmVnaXN0ZXJzLiBTeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3IgYGkyY19kZXZgLCBidXQgbm90aGluZyBmb3IgbW9ja2luZyBJMkMgZGV2aWNlcy4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgYHpsMzA3M3hgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bDMwNzN4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDM2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIGZvciBFeGlzdGluZyBTeXprYWxsZXIgQ292ZXJhZ2UqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzY2FuLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7RG8gd2UgYWxyZWFkeSBoYXZlIHNvbWUgU3l6a2FsbGVyIGNvdmVyYWdlIGZvciB0aGlzIGBkcGxsYCB0aGluZz8mIzM0OyBUaGUgZ29hbCBoZXJlIGlzIGVmZmljaWVuY3k7IHRoZXJlJiMzOTtzIG5vIHNlbnNlIGluIHJlaW52ZW50aW5nIHRoZSB3aGVlbCBpZiBzb21lb25lJiMzOTtzIGFscmVhZHkgZG9uZSB0aGUgZ3JvdW5kd29yay4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBmb3IgbWUgLSBxdWlja2x5IHZlcmlmeWluZyBpZiBleGlzdGluZyBmdXp6aW5nIGluZnJhc3RydWN0dXJlIGhhbmRsZXMgYSB0YXJnZXQuIFNvLCBsZXQmIzM5O3MgY2hlY2sgZm9yIGFueSBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb25zLiBJdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgdG9vbCB0byBoYXZlIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHBsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjM0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogRFBMTCBMb2NhdGlvbioqCgpIbW0sIGxldCYjMzk7cyBzZWUuLi4gKmRwbGwqLi4uIHdoZXJlJiMzOTtzIHRoYXQgaGlkaW5nPyBSaWdodCwgSSBzaG91bGQgYmUgZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGUgYmFzZS4gT2theSwgd2FpdCBhIG1pbnV0ZSwgSSByZW1lbWJlciBub3cuIFRoYXQgbW9kdWxlLCB0aGF0IHNwZWNpZmljIGluc3RhbmNlIG9mIERQTEwsIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgcmVzaWRpbmcgaW4gYGRyaXZlcnMvZHBsbGAuIFllcywgdGhhdCBsb2NhdGlvbiBtYWtlcyBzZW5zZSBnaXZlbiBpdHMgZnVuY3Rpb24gd2l0aGluIHRoZSB3aWRlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ2NDcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvZHBsbC9LY29uZmlnPTExPWNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXG4tLVxuZHJpdmVycy9kcGxsL0tjb25maWctMjAtXHQgIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBleHBvc2VkIHZpYSBkZWJ1Z2ZzIGF0OlxuZHJpdmVycy9kcGxsL0tjb25maWc6MjE6XHQgICAgL3N5cy9rZXJuZWwvZGVidWcvcmVmX3RyYWNrZXIvZHBsbF9kZXZpY2VfKlxuZHJpdmVycy9kcGxsL0tjb25maWc6MjI6XHQgICAgL3N5cy9rZXJuZWwvZGVidWcvcmVmX3RyYWNrZXIvZHBsbF9waW5fKlxuZHJpdmVycy9kcGxsL0tjb25maWctMjMtXG4tLVxuZHJpdmVycy9kcGxsL0tjb25maWctMjUtXG5kcml2ZXJzL2RwbGwvS2NvbmZpZzoyNjpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9kcGxsL0tjb25maWctMjctXG4tLVxuZHJpdmVycy9kcGxsL01ha2VmaWxlLTUtXG5kcml2ZXJzL2RwbGwvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRFBMTCkgICAgICAmIzQzOz0gZHBsbC5vXG5kcml2ZXJzL2RwbGwvTWFrZWZpbGU6NzpkcGxsLXkgICAgICAgICAgICAgICAgICAmIzQzOz0gZHBsbF9jb3JlLm9cbmRyaXZlcnMvZHBsbC9NYWtlZmlsZTo4OmRwbGwteSAgICAgICAgICAgICAgICAgICYjNDM7PSBkcGxsX25ldGxpbmsub1xuZHJpdmVycy9kcGxsL01ha2VmaWxlOjk6ZHBsbC15ICAgICAgICAgICAgICAgICAgJiM0Mzs9IGRwbGxfbmwub1xuZHJpdmVycy9kcGxsL01ha2VmaWxlLTEwLVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yLS8qXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzogKiAgZHBsbF9jb3JlLmMgLSBEUExMIHN1YnN5c3RlbSBrZXJuZWwtc3BhY2UgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uLlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQtICpcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTgtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTk6I2luY2x1ZGUgXCYjMzQ7ZHBsbF9jb3JlLmhcJiMzNDtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyMDojaW5jbHVkZSBcJiMzNDtkcGxsX25ldGxpbmsuaFwmIzM0O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIxLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIyLS8qIE11dGV4IGxvY2sgdG8gcHJvdGVjdCBEUExMIHN1YnN5c3RlbSBkZXZpY2VzIGFuZCBwaW5zICovXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjM6REVGSU5FX01VVEVYKGRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjQtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjU6REVGSU5FX1hBUlJBWV9GTEFHUyhkcGxsX2RldmljZV94YSwgWEFfRkxBR1NfQUxMT0MpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI2OkRFRklORV9YQVJSQVlfRkxBR1MoZHBsbF9waW5feGEsIFhBX0ZMQUdTX0FMTE9DKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNy1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyODpzdGF0aWMgUkFXX05PVElGSUVSX0hFQUQoZHBsbF9ub3RpZmllcl9jaGFpbik7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mjk6c3RhdGljIERFRklORV9JREEoZHBsbF9waW5faWR4X2lkYSk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzAtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzE6c3RhdGljIHUzMiBkcGxsX2RldmljZV94YV9pZDtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMjpzdGF0aWMgdTMyIGRwbGxfcGluX3hhX2lkO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM0LSNkZWZpbmUgQVNTRVJUX0RQTExfUkVHSVNURVJFRChkKVx0XFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNTpcdFdBUk5fT05fT05DRSgheGFfZ2V0X21hcmsoXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIChkKS1cdTAwM2VpZCwgRFBMTF9SRUdJU1RFUkVEKSlcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNi0jZGVmaW5lIEFTU0VSVF9EUExMX05PVF9SRUdJU1RFUkVEKGQpXHRcXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM3Olx0V0FSTl9PTl9PTkNFKHhhX2dldF9tYXJrKFx1MDAyNmRwbGxfZGV2aWNlX3hhLCAoZCktXHUwMDNlaWQsIERQTExfUkVHSVNURVJFRCkpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzgtI2RlZmluZSBBU1NFUlRfRFBMTF9QSU5fUkVHSVNURVJFRChwKSBcXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM5Olx0V0FSTl9PTl9PTkNFKCF4YV9nZXRfbWFyayhcdTAwMjZkcGxsX3Bpbl94YSwgKHApLVx1MDAzZWlkLCBEUExMX1JFR0lTVEVSRUQpKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQwLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQxOnN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24ge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQyLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQzOlx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ0LVx0dm9pZCAqcHJpdjtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NTpcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2LX07XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDctXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDg6c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDktXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTA6XHRjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHM7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTEtXHR2b2lkICpwcml2O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUyLVx0dm9pZCAqY29va2llO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzOlx0ZHBsbF90cmFja2VyIHRyYWNrZXI7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTQtfTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NjpzdGF0aWMgaW50IGNhbGxfZHBsbF9ub3RpZmllcnModW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmluZm8pXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTcte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU4Olx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkcGxsX2xvY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU5Olx0cmV0dXJuIHJhd19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNmRwbGxfbm90aWZpZXJfY2hhaW4sIGFjdGlvbiwgaW5mbyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjAtfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTYxLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYyOnZvaWQgZHBsbF9kZXZpY2Vfbm90aWZ5KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdW5zaWduZWQgbG9uZyBhY3Rpb24pXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjMte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY0Olx0c3RydWN0IGRwbGxfZGV2aWNlX25vdGlmaWVyX2luZm8gaW5mbyA9IHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NTpcdFx0LmRwbGwgPSBkcGxsLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY2Olx0XHQuaWQgPSBkcGxsLVx1MDAzZWlkLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3Olx0XHQuaWR4ID0gZHBsbC1cdTAwM2VkZXZpY2VfaWR4LFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY4Olx0XHQuY2xvY2tfaWQgPSBkcGxsLVx1MDAzZWNsb2NrX2lkLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY5Olx0XHQudHlwZSA9IGRwbGwtXHUwMDNldHlwZSxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03MC1cdH07XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzEtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NzI6XHRjYWxsX2RwbGxfbm90aWZpZXJzKGFjdGlvbiwgXHUwMDI2aW5mbyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzMtfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc0LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjc1OnZvaWQgZHBsbF9waW5fbm90aWZ5KHN0cnVjdCBkcGxsX3BpbiAqcGluLCB1NjQgc3JjX2Nsb2NrX2lkLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc2LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc3LXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3ODpcdHN0cnVjdCBkcGxsX3Bpbl9ub3RpZmllcl9pbmZvIGluZm8gPSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzktXHRcdC5waW4gPSBwaW4sXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTg3LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjg4Olx0Y2FsbF9kcGxsX25vdGlmaWVycyhhY3Rpb24sIFx1MDAyNmluZm8pO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTg5LX1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy05MC1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo5MTpzdGF0aWMgdm9pZCBkcGxsX2RldmljZV90cmFja2VyX2FsbG9jKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo5MjpcdFx0XHRcdCAgICAgIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy05My17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTQtI2lmZGVmIENPTkZJR19EUExMX1JFRkNOVF9UUkFDS0VSXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6OTU6XHRyZWZfdHJhY2tlcl9hbGxvYyhcdTAwMjZkcGxsLVx1MDAzZXJlZmNudF90cmFja2VyLCB0cmFja2VyLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy05Ni0jZW5kaWZcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTgtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6OTk6c3RhdGljIHZvaWQgZHBsbF9kZXZpY2VfdHJhY2tlcl9mcmVlKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDA6XHRcdFx0XHQgICAgIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMDEte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwMi0jaWZkZWYgQ09ORklHX0RQTExfUkVGQ05UX1RSQUNLRVJcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDM6XHRyZWZfdHJhY2tlcl9mcmVlKFx1MDAyNmRwbGwtXHUwMDNlcmVmY250X3RyYWNrZXIsIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwNC0jZW5kaWZcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTA2LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEwNzpzdGF0aWMgdm9pZCBfX2RwbGxfZGV2aWNlX2hvbGQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTA4LXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDk6XHRkcGxsX2RldmljZV90cmFja2VyX2FsbG9jKGRwbGwsIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExMDpcdHJlZmNvdW50X2luYyhcdTAwMjZkcGxsLVx1MDAzZXJlZmNvdW50KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMTEtfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTExMi1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTM6c3RhdGljIHZvaWQgX19kcGxsX2RldmljZV9wdXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTE0LXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTU6XHRkcGxsX2RldmljZV90cmFja2VyX2ZyZWUoZHBsbCwgdHJhY2tlcik7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE2Olx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZkcGxsLVx1MDAzZXJlZmNvdW50KSkge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExNzpcdFx0QVNTRVJUX0RQTExfTk9UX1JFR0lTVEVSRUQoZHBsbCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE4Olx0XHRXQVJOX09OX09OQ0UoIXhhX2VtcHR5KFx1MDAyNmRwbGwtXHUwMDNlcGluX3JlZnMpKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTk6XHRcdHhhX2Rlc3Ryb3koXHUwMDI2ZHBsbC1cdTAwM2VwaW5fcmVmcyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTIwOlx0XHR4YV9lcmFzZShcdTAwMjZkcGxsX2RldmljZV94YSwgZHBsbC1cdTAwM2VpZCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTIxOlx0XHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMjI6XHRcdHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNmRwbGwtXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEyMzpcdFx0a2ZyZWUoZHBsbCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTI0LVx0fVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMjYtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTI3OnN0YXRpYyB2b2lkIGRwbGxfcGluX3RyYWNrZXJfYWxsb2Moc3RydWN0IGRwbGxfcGluICpwaW4sIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMjgte1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMzMtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTM0OnN0YXRpYyB2b2lkIGRwbGxfcGluX3RyYWNrZXJfZnJlZShzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgZHBsbF90cmFja2VyICp0cmFja2VyKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEzNS17XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0MC1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNDE6c3RhdGljIHZvaWQgX19kcGxsX3Bpbl9ob2xkKHN0cnVjdCBkcGxsX3BpbiAqcGluLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTQyLXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNDM6XHRkcGxsX3Bpbl90cmFja2VyX2FsbG9jKHBpbiwgdHJhY2tlcik7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTQ0LVx0cmVmY291bnRfaW5jKFx1MDAyNnBpbi1cdTAwM2VyZWZjb3VudCk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0Ni1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNDc6c3RhdGljIHZvaWQgZHBsbF9waW5faWR4X2ZyZWUodTMyIHBpbl9pZHgpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE0ODpzdGF0aWMgdm9pZCBkcGxsX3Bpbl9wcm9wX2ZyZWUoc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3ApO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0OS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNTA6c3RhdGljIHZvaWQgX19kcGxsX3Bpbl9wdXQoc3RydWN0IGRwbGxfcGluICpwaW4sIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNTEte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE1MjpcdGRwbGxfcGluX3RyYWNrZXJfZnJlZShwaW4sIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1My1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cGluLVx1MDAzZXJlZmNvdW50KSkge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE1NDpcdFx0eGFfZXJhc2UoXHUwMDI2ZHBsbF9waW5feGEsIHBpbi1cdTAwM2VpZCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTU1Olx0XHR4YV9kZXN0cm95KFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1Ni1cdFx0eGFfZGVzdHJveShcdTAwMjZwaW4tXHUwMDNlcGFyZW50X3JlZnMpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1Ny1cdFx0eGFfZGVzdHJveShcdTAwMjZwaW4tXHUwMDNlcmVmX3N5bmNfcGlucyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTU4Olx0XHRkcGxsX3Bpbl9wcm9wX2ZyZWUoXHUwMDI2cGluLVx1MDAzZXByb3ApO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1OS1cdFx0Zndub2RlX2hhbmRsZV9wdXQocGluLVx1MDAzZWZ3bm9kZSk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTYwOlx0XHRkcGxsX3Bpbl9pZHhfZnJlZShwaW4tXHUwMDNlcGluX2lkeCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTYxLVx0XHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZwaW4tXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNjUtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTY2OnN0cnVjdCBkcGxsX2RldmljZSAqZHBsbF9kZXZpY2VfZ2V0X2J5X2lkKGludCBpZClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNjcte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE2ODpcdGlmICh4YV9nZXRfbWFyayhcdTAwMjZkcGxsX2RldmljZV94YSwgaWQsIERQTExfUkVHSVNURVJFRCkpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTY5Olx0XHRyZXR1cm4geGFfbG9hZChcdTAwMjZkcGxsX2RldmljZV94YSwgaWQpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE3MC1cbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTczLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE3NDpzdGF0aWMgc3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiAqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTc1OmRwbGxfcGluX3JlZ2lzdHJhdGlvbl9maW5kKHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzY6XHRcdFx0ICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2LFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE3Ny1cdFx0XHQgICB2b2lkICpjb29raWUpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTc4LXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzk6XHRzdHJ1Y3QgZHBsbF9waW5fcmVnaXN0cmF0aW9uICpyZWc7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTgwLVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz0xODk9c3RhdGljIGludFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE5MDpkcGxsX3hhX3JlZl9waW5fYWRkKHN0cnVjdCB4YXJyYXkgKnhhX3BpbnMsIHN0cnVjdCBkcGxsX3BpbiAqcGluLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE5MTpcdFx0ICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xOTItXHRcdCAgICB2b2lkICpjb29raWUpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTkzLXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxOTQ6XHRzdHJ1Y3QgZHBsbF9waW5fcmVnaXN0cmF0aW9uICpyZWc7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTk1Olx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE5Ni1cdGJvb2wgcmVmX2V4aXN0cyA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yMDItXHRcdFx0Y29udGludWU7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjAzOlx0XHRyZWcgPSBkcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmluZChyZWYsIG9wcywgcHJpdiwgY29va2llKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yMDQtXHRcdGlmIChyZWcpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIzNC1cdHJlZy1cdTAwM2Vjb29raWUgPSBjb29raWU7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjM1Olx0X19kcGxsX3Bpbl9ob2xkKHBpbiwgXHUwMDI2cmVnLVx1MDAzZXRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIzNi1cdGlmIChyZWZfZXhpc3RzKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNDItXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjQzOnN0YXRpYyBpbnQgZHBsbF94YV9yZWZfcGluX2RlbChzdHJ1Y3QgeGFycmF5ICp4YV9waW5zLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNDQ6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNDUtXHRcdFx0ICAgICAgIHZvaWQgKmNvb2tpZSlcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNDYte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI0NzpcdHN0cnVjdCBkcGxsX3Bpbl9yZWdpc3RyYXRpb24gKnJlZztcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNDg6XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjQ5LVx0dW5zaWduZWQgbG9uZyBpO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNTMtXHRcdFx0Y29udGludWU7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjU0Olx0XHRyZWcgPSBkcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmluZChyZWYsIG9wcywgcHJpdiwgY29va2llKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNTUtXHRcdGlmIChXQVJOX09OKCFyZWcpKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNTctXHRcdGxpc3RfZGVsKFx1MDAyNnJlZy1cdTAwM2VsaXN0KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNTg6XHRcdF9fZHBsbF9waW5fcHV0KHBpbiwgXHUwMDI2cmVnLVx1MDAzZXRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI1OS1cdFx0a2ZyZWUocmVnKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MjcxPXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNzI6ZHBsbF94YV9yZWZfZHBsbF9hZGQoc3RydWN0IHhhcnJheSAqeGFfZHBsbHMsIHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNzM6XHRcdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2LCB2b2lkICpjb29raWUpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjc0LXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNzU6XHRzdHJ1Y3QgZHBsbF9waW5fcmVnaXN0cmF0aW9uICpyZWc7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mjc2Olx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI3Ny1cdGJvb2wgcmVmX2V4aXN0cyA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yODAtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjgxOlx0eGFfZm9yX2VhY2goeGFfZHBsbHMsIGksIHJlZikge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI4MjpcdFx0aWYgKHJlZi1cdTAwM2VkcGxsICE9IGRwbGwpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjgzLVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI4NDpcdFx0cmVnID0gZHBsbF9waW5fcmVnaXN0cmF0aW9uX2ZpbmQocmVmLCBvcHMsIHByaXYsIGNvb2tpZSk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjg1LVx0XHRpZiAocmVnKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yOTQtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mjk1Olx0XHRyZWYtXHUwMDNlZHBsbCA9IGRwbGw7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjk2LVx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZyZWYtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI5NzpcdFx0cmV0ID0geGFfaW5zZXJ0KHhhX2RwbGxzLCBkcGxsLVx1MDAzZWlkLCByZWYsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI5OC1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMDctXHRcdGlmICghcmVmX2V4aXN0cykge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMwODpcdFx0XHR4YV9lcmFzZSh4YV9kcGxscywgZHBsbC1cdTAwM2VpZCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzA5LVx0XHRcdGtmcmVlKHJlZik7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMxNS1cdHJlZy1cdTAwM2Vjb29raWUgPSBjb29raWU7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzE2Olx0X19kcGxsX2RldmljZV9ob2xkKGRwbGwsIFx1MDAyNnJlZy1cdTAwM2V0cmFja2VyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMTctXHRpZiAocmVmX2V4aXN0cylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MzI0PXN0YXRpYyB2b2lkXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzI1OmRwbGxfeGFfcmVmX2RwbGxfZGVsKHN0cnVjdCB4YXJyYXkgKnhhX2RwbGxzLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzI2Olx0XHQgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdiwgdm9pZCAqY29va2llKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMyNy17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzI4Olx0c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiAqcmVnO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMyOTpcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMzAtXHR1bnNpZ25lZCBsb25nIGk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzMxLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMzMjpcdHhhX2Zvcl9lYWNoKHhhX2RwbGxzLCBpLCByZWYpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMzM6XHRcdGlmIChyZWYtXHUwMDNlZHBsbCAhPSBkcGxsKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzNC1cdFx0XHRjb250aW51ZTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMzU6XHRcdHJlZyA9IGRwbGxfcGluX3JlZ2lzdHJhdGlvbl9maW5kKHJlZiwgb3BzLCBwcml2LCBjb29raWUpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzNi1cdFx0aWYgKFdBUk5fT04oIXJlZykpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzOC1cdFx0bGlzdF9kZWwoXHUwMDI2cmVnLVx1MDAzZWxpc3QpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMzOTpcdFx0X19kcGxsX2RldmljZV9wdXQoZHBsbCwgXHUwMDI2cmVnLVx1MDAzZXRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM0MC1cdFx0a2ZyZWUocmVnKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNDEtXHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cmVmLVx1MDAzZXJlZmNvdW50KSkge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM0MjpcdFx0XHR4YV9lcmFzZSh4YV9kcGxscywgaSk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzQzLVx0XHRcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2cmVmLVx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0KSk7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM0OS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNTA6c3RydWN0IGRwbGxfcGluX3JlZiAqZHBsbF94YV9yZWZfZHBsbF9maXJzdChzdHJ1Y3QgeGFycmF5ICp4YV9yZWZzKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM1MS17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzUyOlx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM1My1cdHVuc2lnbmVkIGxvbmcgaSA9IDA7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM1OS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNjA6c3RhdGljIHN0cnVjdCBkcGxsX2RldmljZSAqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzYxOmRwbGxfZGV2aWNlX2FsbG9jKGNvbnN0IHU2NCBjbG9ja19pZCwgdTMyIGRldmljZV9pZHgsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNjIte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM2MzpcdHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNjQtXHRpbnQgcmV0O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM2NS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNjY6XHRkcGxsID0ga3phbGxvY19vYmooKmRwbGwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM2NzpcdGlmICghZHBsbClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNjgtXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM2OTpcdHJlZmNvdW50X3NldChcdTAwMjZkcGxsLVx1MDAzZXJlZmNvdW50LCAxKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzA6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZkcGxsLVx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzE6XHRkcGxsLVx1MDAzZWRldmljZV9pZHggPSBkZXZpY2VfaWR4O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM3MjpcdGRwbGwtXHUwMDNlY2xvY2tfaWQgPSBjbG9ja19pZDtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzM6XHRkcGxsLVx1MDAzZW1vZHVsZSA9IG1vZHVsZTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzQ6XHRyZXQgPSB4YV9hbGxvY19jeWNsaWMoXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIFx1MDAyNmRwbGwtXHUwMDNlaWQsIGRwbGwsIHhhX2xpbWl0XzMyYixcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzU6XHRcdFx0ICAgICAgXHUwMDI2ZHBsbF9kZXZpY2VfeGFfaWQsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM3Ni1cdGlmIChyZXQgXHUwMDNjIDApIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzc6XHRcdGtmcmVlKGRwbGwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM3OC1cdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNzktXHR9XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzgwOlx0eGFfaW5pdF9mbGFncyhcdTAwMjZkcGxsLVx1MDAzZXBpbl9yZWZzLCBYQV9GTEFHU19BTExPQyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzgxOlx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXHUwMDI2ZHBsbC1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcJiMzNDtkcGxsX2RldmljZVwmIzM0Oyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzgyLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM4MzpcdHJldHVybiBkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM4NC19XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM4Ni0vKipcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozODc6ICogZHBsbF9kZXZpY2VfZ2V0IC0gZmluZCBleGlzdGluZyBvciBjcmVhdGUgbmV3IGRwbGwgZGV2aWNlXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzg4LSAqIEBjbG9ja19pZDogY2xvY2tfaWQgb2YgY3JlYXRvclxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zOTItICpcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozOTM6ICogR2V0IGV4aXN0aW5nIG9iamVjdCBvZiBhIGRwbGwgZGV2aWNlLCB1bmlxdWUgZm9yIGdpdmVuIGFyZ3VtZW50cy5cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zOTQtICogQ3JlYXRlIG5ldyBpZiBkb2VzbiYjMzk7dCBleGlzdCB5ZXQuXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzk1LSAqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mzk2OiAqIENvbnRleHQ6IEFjcXVpcmVzIGEgbG9jayAoZHBsbF9sb2NrKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM5Ny0gKiBSZXR1cm46XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mzk4OiAqICogdmFsaWQgZHBsbF9kZXZpY2Ugc3RydWN0IHBvaW50ZXIgaWYgc3VjY2VlZGVkXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzk5LSAqICogRVJSX1BUUihYKSAtIGVycm9yXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDAwLSAqL1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQwMTpzdHJ1Y3QgZHBsbF9kZXZpY2UgKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQwMjpkcGxsX2RldmljZV9nZXQodTY0IGNsb2NrX2lkLCB1MzIgZGV2aWNlX2lkeCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQwMzpcdFx0ZHBsbF90cmFja2VyICp0cmFja2VyKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQwNC17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDA1Olx0c3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCAqcmV0ID0gTlVMTDtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MDYtXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQwNy1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MDg6XHRtdXRleF9sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDA5Olx0eGFfZm9yX2VhY2goXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIGluZGV4LCBkcGxsKSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDEwOlx0XHRpZiAoZHBsbC1cdTAwM2VjbG9ja19pZCA9PSBjbG9ja19pZCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTE6XHRcdCAgICBkcGxsLVx1MDAzZWRldmljZV9pZHggPT0gZGV2aWNlX2lkeCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTI6XHRcdCAgICBkcGxsLVx1MDAzZW1vZHVsZSA9PSBtb2R1bGUpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTM6XHRcdFx0X19kcGxsX2RldmljZV9ob2xkKGRwbGwsIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQxNDpcdFx0XHRyZXQgPSBkcGxsO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQxNS1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDE4LVx0aWYgKCFyZXQpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTk6XHRcdHJldCA9IGRwbGxfZGV2aWNlX2FsbG9jKGNsb2NrX2lkLCBkZXZpY2VfaWR4LCBtb2R1bGUpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQyMC1cdFx0aWYgKCFJU19FUlIocmV0KSlcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MjE6XHRcdFx0ZHBsbF9kZXZpY2VfdHJhY2tlcl9hbGxvYyhyZXQsIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQyMi1cdH1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MjMtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDI0Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDI1LVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MjctfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQyODpFWFBPUlRfU1lNQk9MX0dQTChkcGxsX2RldmljZV9nZXQpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQyOS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MzAtLyoqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDMxOiAqIGRwbGxfZGV2aWNlX3B1dCAtIGRlY3JlYXNlIHRoZSByZWZjb3VudCBhbmQgZnJlZSBtZW1vcnkgaWYgcG9zc2libGVcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzI6ICogQGRwbGw6IGRwbGxfZGV2aWNlIHN0cnVjdCBwb2ludGVyXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDMzLSAqIEB0cmFja2VyOiB0cmFja2luZyBvYmplY3QgZm9yIHRoZSBhY3F1aXJlZCByZWZlcmVuY2VcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MzQtICpcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzU6ICogQ29udGV4dDogQWNxdWlyZXMgYSBsb2NrIChkcGxsX2xvY2spXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDM2OiAqIERyb3AgcmVmZXJlbmNlIGZvciBhIGRwbGwgZGV2aWNlLCBpZiBhbGwgcmVmZXJlbmNlcyBhcmUgZ29uZSwgZGVsZXRlXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDM3OiAqIGRwbGwgZGV2aWNlIG9iamVjdC5cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MzgtICovXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDM5OnZvaWQgZHBsbF9kZXZpY2VfcHV0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZHBsbF90cmFja2VyICp0cmFja2VyKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ0MC17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQxOlx0bXV0ZXhfbG9jayhcdTAwMjZkcGxsX2xvY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ0MjpcdF9fZHBsbF9kZXZpY2VfcHV0KGRwbGwsIHRyYWNrZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ0MzpcdG11dGV4X3VubG9jayhcdTAwMjZkcGxsX2xvY2spO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ0NC19XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ1OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3B1dCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDQ2LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ0NzpzdGF0aWMgc3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ4OmRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maW5kKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NDk6XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ1MC17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDUxOlx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ1Mi1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NTM6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgXHUwMDI2ZHBsbC1cdTAwM2VyZWdpc3RyYXRpb25fbGlzdCwgbGlzdCkge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ1NC1cdFx0aWYgKHJlZy1cdTAwM2VvcHMgPT0gb3BzIFx1MDAyNlx1MDAyNiByZWctXHUwMDNlcHJpdiA9PSBwcml2KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjAtLyoqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDYxOiAqIGRwbGxfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdGhlIGRwbGwgZGV2aWNlIGluIHRoZSBzdWJzeXN0ZW1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NjI6ICogQGRwbGw6IHBvaW50ZXIgdG8gYSBkcGxsXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDYzOiAqIEB0eXBlOiB0eXBlIG9mIGEgZHBsbFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2NDogKiBAb3BzOiBvcHMgZm9yIGEgZHBsbCBkZXZpY2VcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjUtICogQHByaXY6IHBvaW50ZXIgdG8gcHJpdmF0ZSBpbmZvcm1hdGlvbiBvZiBvd25lclxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2Ni0gKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2NzogKiBNYWtlIGRwbGwgZGV2aWNlIGF2YWlsYWJsZSBmb3IgdXNlciBzcGFjZS5cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjgtICpcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0Njk6ICogQ29udGV4dDogQWNxdWlyZXMgYSBsb2NrIChkcGxsX2xvY2spXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDcwLSAqIFJldHVybjpcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDczLSAqL1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ3NDppbnQgZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBlbnVtIGRwbGxfdHlwZSB0eXBlLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ3NTpcdFx0XHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3Ni17XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDc3Olx0c3RydWN0IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbiAqcmVnO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3OC1cdGJvb2wgZmlyc3RfcmVnaXN0cmF0aW9uID0gZmFsc2U7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ4OC1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0ODk6XHRtdXRleF9sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDkwOlx0cmVnID0gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpbmQoZHBsbCwgb3BzLCBwcml2KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00OTEtXHRpZiAocmVnKSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDkyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00OTMtXHRcdHJldHVybiAtRUVYSVNUO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00OTctXHRpZiAoIXJlZykge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ5ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDk5LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTAyLVx0cmVnLVx1MDAzZXByaXYgPSBwcml2O1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUwMzpcdGRwbGwtXHUwMDNldHlwZSA9IHR5cGU7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTA0Olx0X19kcGxsX2RldmljZV9ob2xkKGRwbGwsIFx1MDAyNnJlZy1cdTAwM2V0cmFja2VyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MDU6XHRmaXJzdF9yZWdpc3RyYXRpb24gPSBsaXN0X2VtcHR5KFx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUwNjpcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cmVnLVx1MDAzZWxpc3QsIFx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUwNy1cdGlmICghZmlyc3RfcmVnaXN0cmF0aW9uKSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTA4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MDktXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTEtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTEyOlx0eGFfc2V0X21hcmsoXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIGRwbGwtXHUwMDNlaWQsIERQTExfUkVHSVNURVJFRCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTEzOlx0ZHBsbF9kZXZpY2VfY3JlYXRlX250ZihkcGxsKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MTQ6XHRtdXRleF91bmxvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTUtXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxNy19XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTE4OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTktXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTIwLS8qKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyMTogKiBkcGxsX2RldmljZV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBkcGxsIGRldmljZVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyMjogKiBAZHBsbDogcmVnaXN0ZXJlZCBkcGxsIHBvaW50ZXJcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MjM6ICogQG9wczogb3BzIGZvciBhIGRwbGwgZGV2aWNlXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTI0LSAqIEBwcml2OiBwb2ludGVyIHRvIHByaXZhdGUgaW5mb3JtYXRpb24gb2Ygb3duZXJcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTI3LSAqIE5vdGU6IEl0IGRvZXMgbm90IGZyZWUgdGhlIG1lbW9yeVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyODogKiBDb250ZXh0OiBBY3F1aXJlcyBhIGxvY2sgKGRwbGxfbG9jaylcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MjktICovXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTMwOnZvaWQgZHBsbF9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTMxOlx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTMyLXtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MzM6XHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTM0LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzNTpcdG11dGV4X2xvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MzY6XHRBU1NFUlRfRFBMTF9SRUdJU1RFUkVEKGRwbGwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzNzpcdGRwbGxfZGV2aWNlX2RlbGV0ZV9udGYoZHBsbCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTM4Olx0cmVnID0gZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpbmQoZHBsbCwgb3BzLCBwcml2KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MzktXHRpZiAoV0FSTl9PTighcmVnKSkge1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU0MDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTQxLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU0My1cdGxpc3RfZGVsKFx1MDAyNnJlZy1cdTAwM2VsaXN0KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NDQ6XHRfX2RwbGxfZGV2aWNlX3B1dChkcGxsLCBcdTAwMjZyZWctXHUwMDNldHJhY2tlcik7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTQ1LVx0a2ZyZWUocmVnKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NDYtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTQ3Olx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRwbGwtXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpKSB7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTQ4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NDktXHRcdHJldHVybjtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NTAtXHR9XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTUxOlx0eGFfY2xlYXJfbWFyayhcdTAwMjZkcGxsX2RldmljZV94YSwgZHBsbC1cdTAwM2VpZCwgRFBMTF9SRUdJU1RFUkVEKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NTI6XHRtdXRleF91bmxvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NTMtfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU1NDpFWFBPUlRfU1lNQk9MX0dQTChkcGxsX2RldmljZV91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NTUtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTU2OnN0YXRpYyBpbnQgZHBsbF9waW5faWR4X2FsbG9jKHUzMiAqcGluX2lkeClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NTcte1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NjMtXHQvKiBBbGxvYyB1bmlxdWUgbnVtYmVyIGZyb20gSURBLiBOdW1iZXIgYmVsb25ncyB0byBcdTAwM2MwLCBJTlRfTUFYXHUwMDNlIHJhbmdlICovXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTY0Olx0cmV0ID0gaWRhX2FsbG9jKFx1MDAyNmRwbGxfcGluX2lkeF9pZGEsIEdGUF9LRVJORUwpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU2NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU3My1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NzQ6c3RhdGljIHZvaWQgZHBsbF9waW5faWR4X2ZyZWUodTMyIHBpbl9pZHgpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTc1LXtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTgyLVx0cGluX2lkeCAtPSAodTMyKUlOVF9NQVggJiM0MzsgMTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1ODM6XHRpZGFfZnJlZShcdTAwMjZkcGxsX3Bpbl9pZHhfaWRhLCBwaW5faWR4KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01ODQtfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU4NS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1ODY6c3RhdGljIHZvaWQgZHBsbF9waW5fcHJvcF9mcmVlKHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpwcm9wKVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU4Ny17XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU5My1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1OTQ6c3RhdGljIGludCBkcGxsX3Bpbl9wcm9wX2R1cChjb25zdCBzdHJ1Y3QgZHBsbF9waW5fcHJvcGVydGllcyAqc3JjLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU5NTpcdFx0XHQgICAgIHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpkc3QpXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTk2LXtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjM1LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYzNjpzdGF0aWMgc3RydWN0IGRwbGxfcGluICpcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2Mzc6ZHBsbF9waW5fYWxsb2ModTY0IGNsb2NrX2lkLCB1MzIgcGluX2lkeCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYzODpcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fcHJvcGVydGllcyAqcHJvcClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02Mzkte1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY0MDpcdHN0cnVjdCBkcGxsX3BpbiAqcGluO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY0MS1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY0My1cdGlmIChwaW5faWR4ID09IERQTExfUElOX0lEWF9VTlNQRUMpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NDQ6XHRcdHJldCA9IGRwbGxfcGluX2lkeF9hbGxvYyhcdTAwMjZwaW5faWR4KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NDUtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY2My1cdH1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NjQ6XHRyZXQgPSBkcGxsX3Bpbl9wcm9wX2R1cChwcm9wLCBcdTAwMjZwaW4tXHUwMDNlcHJvcCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjY1LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjY3LVx0cmVmY291bnRfc2V0KFx1MDAyNnBpbi1cdTAwM2VyZWZjb3VudCwgMSk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NjY4Olx0eGFfaW5pdF9mbGFncyhcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBYQV9GTEFHU19BTExPQyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjY5LVx0eGFfaW5pdF9mbGFncyhcdTAwMjZwaW4tXHUwMDNlcGFyZW50X3JlZnMsIFhBX0ZMQUdTX0FMTE9DKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzAtXHR4YV9pbml0X2ZsYWdzKFx1MDAyNnBpbi1cdTAwM2VyZWZfc3luY19waW5zLCBYQV9GTEFHU19BTExPQyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NjcxOlx0cmV0ID0geGFfYWxsb2NfY3ljbGljKFx1MDAyNmRwbGxfcGluX3hhLCBcdTAwMjZwaW4tXHUwMDNlaWQsIHBpbiwgeGFfbGltaXRfMzJiLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3MjpcdFx0XHQgICAgICBcdTAwMjZkcGxsX3Bpbl94YV9pZCwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjczLVx0aWYgKHJldCBcdTAwM2MgMClcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzQtXHRcdGdvdG8gZXJyX3hhX2FsbG9jO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3NTpcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNnBpbi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcJiMzNDtkcGxsX3BpblwmIzM0Oyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjc2LVx0cmV0dXJuIHBpbjtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzctZXJyX3hhX2FsbG9jOlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3ODpcdHhhX2Rlc3Ryb3koXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcyk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjc5LVx0eGFfZGVzdHJveShcdTAwMjZwaW4tXHUwMDNlcGFyZW50X3JlZnMpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY4MC1cdHhhX2Rlc3Ryb3koXHUwMDI2cGluLVx1MDAzZXJlZl9zeW5jX3BpbnMpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY4MTpcdGRwbGxfcGluX3Byb3BfZnJlZShcdTAwMjZwaW4tXHUwMDNlcHJvcCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjgyLWVycl9waW5fcHJvcDpcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjg0LWVycl9waW5fYWxsb2M6XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Njg1Olx0ZHBsbF9waW5faWR4X2ZyZWUocGluX2lkeCk7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjg2LVx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjg4LVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY4OTpzdGF0aWMgdm9pZCBkcGxsX25ldGRldl9waW5fYXNzaWduKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4pXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5NzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBEUExMIE5ldGxpbmsgU3VwcG9ydCBpbiBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBkcGxsYCB0aGluZy4gUmlnaHQsIGBkcGxsYCBpcyBhIHN1YnN5c3RlbSwgYW5kIEkgcmVjYWxsIHNlZWluZyB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBpbiBgZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBkb2VzIFN5emthbGxlciBoYXZlIGFueSBkZXNjcmlwdGlvbnMgZm9yIGBkcGxsYCBuZXRsaW5rIGZ1bmN0aW9uYWxpdHk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGFscmVhZHkgY292ZXJlZC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHR5cGljYWwgcGxhY2VzLiBMZXQmIzM5O3Mgc2VlLCBtYXliZSBpdCYjMzk7cyBpbiBgbmV0L2RwbGxgIG9yIHBvc3NpYmx5IGBkcml2ZXJzL2RwbGwvZHBsbF9ubC5jYC4gQWhhISBGb3VuZCBgZHBsbF9ubC5jYCwgdGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBTeXprYWxsZXIgaW5mcmFzdHJ1Y3R1cmUuIERvZXMgU3l6a2FsbGVyIGtub3cgYWJvdXQgdGhpcyBgZHBsbGAgbmV0bGluayBpbnRlcmZhY2U/IEkmIzM5O2xsIHNlYXJjaCB0aGUgYHN5cy9saW51eC9gIGRpcmVjdG9yeSB3aXRoaW4gU3l6a2FsbGVyIGZvciBhbnkgcmVsZXZhbnQgZGVmaW5pdGlvbnMsIGxvb2tpbmcgZm9yIGFueXRoaW5nIG5hbWVkIGBkcGxsYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzgxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFBMTCBGdXp6aW5nIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBJIG5lZWQgdG8gcmVjYWxpYnJhdGUgaGVyZS4gSSYjMzk7bSBkZWVwIGluIHRoZSBrZXJuZWwgdHJlZSwgbm90IHRoZSBzeXprYWxsZXIgcmVwb3NpdG9yeS4gVGhhdCBjaGFuZ2VzIHRoaW5nczsgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHN5emthbGxlciYjMzk7cyBpbnRlcm5hbHMgcmlnaHQgbm93LiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHNlZSBpZiB0aGUgYGRwbGxgIG5ldGxpbmsgZmFtaWx5IGlzIGV2ZW4gdGFyZ2V0ZWQuIEkgY2FuIGNoZWNrIHRoaXMgYnkgdmVyaWZ5aW5nIHRoZSBleGlzdGVuY2Ugb2YgYSBgZ2VubF9mYW1pbHlgIGVudHJ5IGZvciBgZHBsbGAuIFl1cCwgaXQmIzM5O3MgYSBHZW5lcmljIE5ldGxpbmsgZmFtaWx5LCB3aGljaCBtZWFucyBzeXprYWxsZXImIzM5O3MgYGdlbmV0bGlua2AgZnV6emVyICpzaG91bGQqIGF1dG9tYXRpY2FsbHkgcGljayBpdCB1cCwgcHJvdmlkZWQgaXQmIzM5O3MgcmVnaXN0ZXJlZC4KClRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGB6bDMwNzN4YCAqZHJpdmVyKiBpcyByZWFjaGFibGUsIHdoaWNoIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZS4gSWYgdGhlIGRyaXZlciBmYWlscyB0byBwcm9iZSBzdWNjZXNzZnVsbHksIHRoZSBEUExMIGRldmljZSBhbmQgdGhlIFBUUCBjbG9jayB3b24mIzM5O3QgZ2V0IHJlZ2lzdGVyZWQuIFRoYXQgbWVhbnMgdGhlIG5ldGxpbmsgYW5kIFBUUCBpb2N0bHMgd29uJiMzOTt0IGV2ZW4gbWFrZSBpdCB0byB0aGUgZHJpdmVyJiMzOTtzIGNvZGUsIHNvIG5vIGZ1enppbmcgc3VjY2Vzcy4KCkFuZCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgdHJpY2t5LiBUaGF0IGRyaXZlciBpcyBoYXJkd2FyZS1zcGVjaWZpYywgcmVxdWlyaW5nIHNwZWNpZmljIEkyQy9TUEkgaGFyZHdhcmUuIEl0IGNoZWNrcyB0aGUgY2hpcCBJRCwgd2hpY2ggbWVhbnMgaXQgY2Fubm90IGJlIGVtdWxhdGVkIGVhc2lseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBTbyBmYXIsIG5vIGRpY2UuCgpXYWl0LCBpcyB0aGVyZSAqYW55KiByZW1vdGUgY2hhbmNlIHRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCB1c2luZyBgaTJjLXN0dWJgPyBQcmV2aW91c2x5LCBJIG5vdGVkIHRoYXQgYGkyYy1zdHViYCBvbmx5IGRlYWxzIHdpdGggOC1iaXQgcmVnaXN0ZXIgYWRkcmVzc2VzLCB3aGlsZSBgemwzMDczeGAgdXNlcyAxNi1iaXQgcmVnaXN0ZXJzLiBGb3JnZXQgYGkyYy1zdHViYC4KCkJ1dCB3YWl0LCBob2xkIG9uLiBJcyBgaTJjLXN0dWJgIHRoZSBvbmx5IG9wdGlvbj8gV2hhdCBhYm91dCBvdGhlciBwb3NzaWJpbGl0aWVzPyBUaGVyZSBhcmUgbm8gYGkyYy1tb2NrYCBvciBgc3BpLW1vY2tgIGluIHRoZSB1cHN0cmVhbSBrZXJuZWwuIGB2a21zYCBpcyBmb3IgRFJNOyB3cm9uZyBkb21haW4uIGBtYWM4MDIxMV9od3NpbWAgaXMgZm9yIFdpRmksIGlycmVsZXZhbnQuIEFuZCBgbmV0ZGV2c2ltYCBpcyBmb3IgbmV0d29ya2luZywgYWxzbyBub3QgcmVsZXZhbnQuCgpXaGF0IGFib3V0IGBkcGxsYCBpdHNlbGY/IERvZXMgdGhlIGBkcGxsYCBwYXJ0IGhhdmUgYW55IGtpbmQgb2Ygc2ltdWxhdG9yIG9yIG1vY2tpbmcgY2FwYWJpbGl0eT8gTGV0JiMzOTtzIGludmVzdGlnYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIERQTEwgc2ltdWxhdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsLipzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTU3NT1mb3IgZWFjaCBjYWxsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzIG9ubHkgdGhlIG9iamVjdCByZWZjb3VudFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0OjU3NjppbmNyZWFzZXMuIEFsc28gZHBsbF9waW5fcHV0KCkgd29ya3Mgc2ltaWxhcmx5IHRvIGRwbGxfZGV2aWNlX3B1dCgpLlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzNzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVbnJlYWNoYWJsZSBDb2RlIFBhdGgqKgoKT2theSwgc28gdGhlcmUmIzM5O3Mgbm8gRFBMTCBzaW11bGF0b3IgYXZhaWxhYmxlLCB3aGljaCBpcyBpbW1lZGlhdGVseSBhIHJvYWRibG9jay4gVGhpcyBgemwzMDczeGAgZHJpdmVyIGlzIGNsZWFybHkgaGFyZHdhcmUtc3BlY2lmaWMsIG1lYW5pbmcgSSYjMzk7bSBub3QgZ29pbmcgdG8gZ2V0IGFueXdoZXJlIHdpdGggcHJvYmluZyBpdCB3aXRob3V0IHRoZSBhY3R1YWwgc2lsaWNvbiBvciBhIGhpZ2hseSBzcGVjaWZpYyBlbXVsYXRvci4gSXQmIzM5O3MgYSBkZWFkIGVuZCBpbiBlbnZpcm9ubWVudHMgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBsaW1pdGF0aW9uIGZvciB0ZXN0aW5nIHRoZXNlIG1vZGlmaWNhdGlvbnMuCgpOb3csIGhvbGQgb24uLi4gaXMgdGhlcmUgZXZlbiBhICpyZW1vdGUqIGNoYW5jZSB0aGF0IHRoZSBkcml2ZXImIzM5O3MgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZGlyZWN0bHkgYnkgc29tZXRoaW5nIGVsc2UsIHNvbWUgb3RoZXIgcGllY2Ugb2YgY29kZSB0aGF0ICppcyogcmVhY2hhYmxlPyBObywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIGl04oCZcyBhIHN0YW5kYWxvbmUgZHJpdmVyLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IG1lY2hhbmlzbSwgZXZlbiBvYnNjdXJlLCB0byBieXBhc3MgdGhhdCBkYW1uIGNoaXAgSUQgY2hlY2suIFBlcmhhcHMgdGhlcmUmIzM5O3MgYSBtb2R1bGUgcGFyYW1ldGVyIGhpZGRlbiBzb21ld2hlcmUgdGhhdCBmb3JjZXMgdGhlIGRyaXZlciB0byBsb2FkIHJlZ2FyZGxlc3MuIEdvdHRhIGludmVzdGlnYXRlIHRoYXQgcG9zc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BhcmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTc0NgoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiA4MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFuYWx5c2lzIC0gQXp1cml0ZSBEUExMIERyaXZlcioqCgpPa2F5LCBubyBtb2R1bGUgcGFyYW1ldGVycyB0byBtYW5pcHVsYXRlIHRoaW5ncyBoZXJlLiBJcyB0aGVyZSBldmVuIGEgZGVidWdmcyBpbnRlcmZhY2UsIGFueXRoaW5nLCB0byBpbmplY3QgYSBmYWtlIGNoaXAgSUQ/IE5vcGUuIFNvLCB0aGUgcHJvYmUgd2lsbCBkZWZpbml0ZWx5IGZhaWwgaWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LgoKV2FpdCwgdGhlIHByb21wdOKApiByaWdodCwgaXQgc2F5cyAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIGl0JiMzOTtzIGp1c3QgZG9jcywgS2NvbmZpZywgY29tbWVudHMsIGxvZ2dpbmcsIGRlY29yYXRpdmUgY2hhbmdlcywgb3IgbnVtZXJpYyBjb25zdGFudHMgdGhhdCBkb24mIzM5O3QgY2hhbmdlIGZsb3csIG9y4oCmIGFuZCB0aGlzIGlzIGtleeKApiAqY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyouCgpUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBNaWNyb2NoaXAmIzM5O3MgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzLCB1c2luZyBJMkMvU1BJLiBJdCAqc3RyaWN0bHkqIGNoZWNrcyB0aGUgY2hpcCBJRCBkdXJpbmcgdGhlIHByb2JlLiBUaGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSB0aGF0IEkga25vdyBvZiwgdW5saWtlLCBzYXksIHRoZSBtYWM4MDIxMSBzdHVmZi4gR2VuZXJpYyBJMkMgbW9ja3MgY2FuJiMzOTt0IHNpbXVsYXRlIHRoZSByZWdpc3RlciBhZGRyZXNzaW5nIGVpdGhlci4gU28sIGl0JiMzOTtzICppbXBvc3NpYmxlKiB0byByZWFjaCB0aGlzIGNvZGUgaW4gUUVNVSwgR0NFLCBvciBhbnl0aGluZyBsaWtlIHRoYXQuIFRoZSBwcm9iZSAqd2lsbCogZmFpbC4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgZGVmaW5pdGUgV29ydGhGdXp6aW5nPWZhbHNlIHNpdHVhdGlvbi4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgdGhvdWdoLiBJcyB0aGVyZSAqYW55KiBvdGhlciB3YXkgdG8gZ2V0IHRvIHRoaXM/IENvdWxkIHRoZSBQVFAgY2xvY2sgc29tZWhvdyBiZSByZWdpc3RlcmVkICp3aXRob3V0KiB0aGUgcHJvYmUgc3VjY2VlZGluZz8gTm8uIGB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyYCBpcyBjYWxsZWQgZnJvbSBgemwzMDczeF9kcGxsX3JlZ2lzdGVyYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHpsMzA3M3hfZGV2bV9kcGxsX2luaXRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgemwzMDczeF9kZXZfcHJvYmVgLiBIbW0uIENvdWxkIGB6bDMwNzN4X2Rldl9wcm9iZWAgYmUgY2FsbGVkIGZyb20gKnNvbWV3aGVyZSBlbHNlKj8gQWgsIGl0JiMzOTtzIGV4cG9ydGVkIGFzIGB6bDMwNzN4X2Rldl9wcm9iZWAsIGJ1dCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBieSBgemwzMDczeF9pMmNfcHJvYmVgIGFuZCBgemwzMDczeF9zcGlfcHJvYmVgLiBTbyBpdCYjMzk7cyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgY29udGV4dC4KCk9rYXksIGxldCBtZSBxdWlja2x5IG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIHNuZWFreSBsaXR0bGUgY2FsbCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uCgpGaWxlcyBtb2RpZmllZDoKYGRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhgCmBkcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhgCkFsbCBvZiB0aGVtIGFyZSBpbnNpZGUgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2AuIEdvb2QsIGFsbCBuZWF0bHkgY29udGFpbmVkIHdpdGhpbiB0aGF0IGRyaXZlci4KCkFscmlnaHQsIEkmIzM5O20gc2V0dGluZyBXb3J0aEZ1enppbmc9ZmFsc2UgYW5kIGNyYWZ0aW5nIGEgc29saWQgcmVhc29uaW5nIHN0YXRlbWVudC4KClRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoYHpsMzA3M3hgKS4gSXQmIzM5O3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBJMkMvU1BJIGRyaXZlci4gRHVyaW5nIGluaXRpYWxpemF0aW9uIChgemwzMDczeF9kZXZfcHJvYmVgKSwgdGhlIGRyaXZlciBzdHJpY3RseSByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIGhhcmR3YXJlIGNoaXAgSUQgKGBaTF9SRUdfSURgKS4gU2luY2UgdGhlcmUmIzM5O3MgKm5vKiBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiB0aGUga2VybmVsLCBhbmQgdGhlIGdlbmVyaWMgSTJDIG1vY2tzIGRvbiYjMzk7dCBzdXBwb3J0IHRoZSAxNi1iaXQgYWRkcmVzc2luZywgdGhlIHByb2JlIHdpbGwgKmFsd2F5cyogZmFpbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgYW5kIFBUUCBkZXZpY2VzIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZC4gSXQmIzM5O3MgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiB0aGUgbW9kaWZpZWQgY29kZS4KCk5vdyB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgSTJDL1NQSSBkcml2ZXIuIER1cmluZyBpbml0aWFsaXphdGlvbiAoemwzMDczeF9kZXZfcHJvYmUpLCB0aGUgZHJpdmVyIHN0cmljdGx5IHJlYWRzIGFuZCB2ZXJpZmllcyB0aGUgaGFyZHdhcmUgY2hpcCBJRCAoWkxfUkVHX0lEKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gdGhlIGtlcm5lbCwgYW5kIGdlbmVyaWMgSTJDIG1vY2tzIGxpa2UgaTJjLXN0dWIgZG8gbm90IHN1cHBvcnQgdGhlIDE2LWJpdCByZWdpc3RlciBhZGRyZXNzaW5nIHJlcXVpcmVkIGJ5IHRoaXMgZHJpdmVyLCB0aGUgcHJvYmUgZnVuY3Rpb24gd2lsbCBhbHdheXMgZmFpbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgRFBMTCBhbmQgUFRQIGRldmljZXMgd2lsbCBuZXZlciBiZSByZWdpc3RlcmVkLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIEkyQy9TUEkgZHJpdmVyLiBEdXJpbmcgaW5pdGlhbGl6YXRpb24gKHpsMzA3M3hfZGV2X3Byb2JlKSwgdGhlIGRyaXZlciBzdHJpY3RseSByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIGhhcmR3YXJlIGNoaXAgSUQgKFpMX1JFR19JRCkuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIHRoZSBrZXJuZWwsIGFuZCBnZW5lcmljIEkyQyBtb2NrcyBsaWtlIGkyYy1zdHViIGRvIG5vdCBzdXBwb3J0IHRoZSAxNi1iaXQgcmVnaXN0ZXIgYWRkcmVzc2luZyByZXF1aXJlZCBieSB0aGlzIGRyaXZlciwgdGhlIHByb2JlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGZhaWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgYW5kIFBUUCBkZXZpY2VzIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NTguNjY1NzA4MjQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNjA0MDE4MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBJMkMvU1BJIGRyaXZlci4gRHVyaW5nIGluaXRpYWxpemF0aW9uICh6bDMwNzN4X2Rldl9wcm9iZSksIHRoZSBkcml2ZXIgc3RyaWN0bHkgcmVhZHMgYW5kIHZlcmlmaWVzIHRoZSBoYXJkd2FyZSBjaGlwIElEIChaTF9SRUdfSUQpLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiB0aGUga2VybmVsLCBhbmQgZ2VuZXJpYyBJMkMgbW9ja3MgbGlrZSBpMmMtc3R1YiBkbyBub3Qgc3VwcG9ydCB0aGUgMTYtYml0IHJlZ2lzdGVyIGFkZHJlc3NpbmcgcmVxdWlyZWQgYnkgdGhpcyBkcml2ZXIsIHRoZSBwcm9iZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyBmYWlsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIGFuZCBQVFAgZGV2aWNlcyB3aWxsIG5ldmVyIGJlIHJlZ2lzdGVyZWQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NTguNjY1NzE0OTQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjUyNDg4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YTYwMGExYmQ2NWEyMWY0NzRkYmVjZjllZTZkOWRiNzNlYjgyODA4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDEzIDEzOjM2OjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWcgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuaW5kZXggNWJiY2ExNDAwNTgxMzEuLmQwNTc0YWQ1NzFkM2ZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnXFxuQEAgLTIsNyArMiw3IEBAXFxuIFxcbiBjb25maWcgWkwzMDczWFxcbiBcXHR0cmlzdGF0ZSBcXFwiTWljcm9jaGlwIEF6dXJpdGUgRFBMTC9QVFAvU3luY0UgZGV2aWNlc1xcXCIgaWYgQ09NUElMRV9URVNUXFxuLVxcdGRlcGVuZHMgb24gTkVUXFxuK1xcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuIFxcdHNlbGVjdCBEUExMXFxuIFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiBcXHRzZWxlY3QgUkVHTUFQXFxuQEAgLTE2LDcgKzE2LDcgQEAgY29uZmlnIFpMMzA3M1hcXG4gXFxuIGNvbmZpZyBaTDMwNzNYX0kyQ1xcbiBcXHR0cmlzdGF0ZSBcXFwiSTJDIGJ1cyBpbXBsZW1lbnRhdGlvbiBmb3IgTWljcm9jaGlwIEF6dXJpdGUgZGV2aWNlc1xcXCJcXG4tXFx0ZGVwZW5kcyBvbiBJMkMgXFx1MDAyNlxcdTAwMjYgTkVUXFxuK1xcdGRlcGVuZHMgb24gSTJDIFxcdTAwMjZcXHUwMDI2IE5FVCBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiBcXHRzZWxlY3QgUkVHTUFQX0kyQ1xcbiBcXHRzZWxlY3QgWkwzMDczWFxcbiBcXHRoZWxwXFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXFxuIFxcbiBjb25maWcgWkwzMDczWF9TUElcXG4gXFx0dHJpc3RhdGUgXFxcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcXFwiXFxuLVxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IFNQSVxcbitcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBTUEkgXFx1MDAyNlxcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gXFx0c2VsZWN0IFJFR01BUF9TUElcXG4gXFx0c2VsZWN0IFpMMzA3M1hcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcXG5pbmRleCA0ZWMyY2Y1M2RhZDQ2OC4uNTMwMzJlNzgyZmQ0YWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG5AQCAtMjAyLDYgKzIwMywxMSBAQCBpbnQgemwzMDczeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbiBcXHRcXHR6bDMwNzN4X2NoYW5fcmVmc2VsX3N0YXRlX2dldChjaGFuKSxcXG4gXFx0XFx0emwzMDczeF9jaGFuX3JlZnNlbF9yZWZfZ2V0KGNoYW4pKTtcXG4gXFxuK1xcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9TVEVQX1RJTUVfTUFTSyxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmNoYW4tXFx1MDAzZW91dF9zdGVwX3RpbWVfbWFzayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4gXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4gXFxuIFxcdC8qIFJlYWQgRFBMTCBjb25maWd1cmF0aW9uIGZyb20gbWFpbGJveCAqL1xcbkBAIC0yMzQsNiArMjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXFxuIFxcdHJldHVybiBcXHUwMDI2emxkZXYtXFx1MDAzZWNoYW5baW5kZXhdO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0IC0gd2FpdCBmb3IgVG9EIHNlbWFwaG9yZSB0byBjbGVhclxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICpcXG4rICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXFxuKyAqIGluZGljYXRpbmcgdGhlIGRldmljZSBoYXMgY29tcGxldGVkIHRoZSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xcbitcXHR1OCB0b2RfY3RybDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSwgXFx1MDAyNnRvZF9jdHJsKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRzd2l0Y2ggKEZJRUxEX0dFVChaTF9EUExMX1RPRF9DVFJMX0NNRCwgdG9kX2N0cmwpKSB7XFxuK1xcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XFxuK1xcdFxcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0dGltZW91dCA9IFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfcG9sbF96ZXJvX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xcbitcXG4rXFx0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfY3RybCAtIGlzc3VlIFRvRCBjb21tYW5kXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAY21kOiBUb0QgY29tbWFuZCB0byBleGVjdXRlXFxuKyAqXFxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxcbisgKiBlbnN1cmUgdGhlIGRldmljZSBpcyByZWFkeSAoc2VtYXBob3JlIGNsZWFyKSBiZWZvcmUgY2FsbGluZyBhbmRcXG4rICogbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uIGlmIG5lZWRlZC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfY2hhbl90b2RfY3RybChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgdTggY21kKVxcbit7XFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfQ1RSTChjaCksXFxuK1xcdFxcdFxcdFxcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZCAtIHJlYWQgVG9EIHJlZ2lzdGVycyBhZnRlciBpc3N1aW5nIGEgY29tbWFuZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG5leHRfaHo6IGlmIHRydWUsIHJlYWQgcHJlZGljdGVkIFRvRCBhdCBuZXh0IDEgSHo7IG90aGVyd2lzZSByZWFkIGN1cnJlbnRcXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSB0aGUgcmVzdWx0XFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4re1xcbitcXHR1MzIgbnNlYztcXG4rXFx0dTY0IHNlYztcXG4rXFx0dTggY21kO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAobmV4dF9oeilcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFo7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y21kID0gWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfQ1VSUkVOVDtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3ByZXRzKHN0cyk7XFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9jdHJsKHpsZGV2LCBjaCwgY21kKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0cHRwX3JlYWRfc3lzdGVtX3Bvc3R0cyhzdHMpO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3JlYWRfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgXFx1MDAyNnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogSFcgbmFub3NlY29uZHMgYXJlIGFsd2F5cyBpbiBbMCwgTlNFQ19QRVJfU0VDKSByYW5nZSAqL1xcbitcXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFxcdTAwMjZuc2VjKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHR0cy1cXHUwMDNldHZfc2VjID0gc2VjO1xcbitcXHR0cy1cXHUwMDNldHZfbnNlYyA9IG5zZWM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUgLSB3cml0ZSBUb0QgcmVnaXN0ZXJzIGFuZCB0cmlnZ2VyIDEgSHogdXBkYXRlXFxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxcbisgKiBAdHM6IHRpbWUgdG8gc2V0XFxuKyAqXFxuKyAqIENvbnRleHQ6IENhbGxlciBtdXN0IHNlcmlhbGl6ZSBhbGwgemwzMDczeF9jaGFuX3RvZF8qIGNhbGxzIGV4dGVybmFsbHkuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxcbit7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX1NFQyhjaCksIHRzLnR2X3NlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfY3RybCh6bGRldiwgY2gsXFxuK1xcdFxcdFxcdFxcdCAgICBaTF9EUExMX1RPRF9DVFJMX0NNRF9XUl9ORVhUXzFIWik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCAtIGF0b21pYyBUb0QgcmVhZC1tb2RpZnktd3JpdGUgd2l0aCByb2xsb3ZlciBndWFyZFxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgdG8gYXBwbHlcXG4rICpcXG4rICogUmVhZHMgdGhlIG5leHQtSHogVG9EIGFuZCBjdXJyZW50IFRvRCwgdGhlbiBjaGVja3Mgd2hldGhlciBlbm91Z2ggdGltZVxcbisgKiByZW1haW5zIGJlZm9yZSB0aGUgbmV4dCAxIEh6IHJvbGxvdmVyIHRvIHNhZmVseSBjb21wbGV0ZSB0aGUgd3JpdGUuXFxuKyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxcbisgKiBuZXh0LUh6IHNlY29uZHMgYnkgb25lLiBBcHBsaWVzIEBkZWx0YSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjay5cXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YSlcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgbG9uZyB0aHJlc2hvbGRfbnMgPSAyMCAqIE5TRUNfUEVSX01TRUM7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzX25leHQsIHRzX2N1ciwgZGlmZjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkKHpsZGV2LCBjaCwgdHJ1ZSwgXFx1MDAyNnRzX25leHQsIE5VTEwpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdC8qIFJlYWQgY3VycmVudCBUb0QgdG8gZGV0ZXJtaW5lIHJlbWFpbmluZyBtYXJnaW4gKi9cXG4rXFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkZXYsIGNoLCBmYWxzZSwgXFx1MDAyNnRzX2N1ciwgTlVMTCk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0LyogSWYgdG9vIGNsb3NlIHRvIChvciBwYXN0KSB0aGUgbmV4dCByb2xsb3Zlciwgd2FpdCBpdCBvdXQgKi9cXG4rXFx0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XFxuK1xcdGlmIChkaWZmLnR2X3NlYyBcXHUwMDNjIDAgfHwgKCFkaWZmLnR2X3NlYyBcXHUwMDI2XFx1MDAyNiBkaWZmLnR2X25zZWMgXFx1MDAzYyB0aHJlc2hvbGRfbnMpKSB7XFxuK1xcdFxcdGlmICghZGlmZi50dl9zZWMgXFx1MDAyNlxcdTAwMjYgZGlmZi50dl9uc2VjKVxcbitcXHRcXHRcXHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyArIDEpO1xcbitcXHRcXHR0c19uZXh0LnR2X3NlYysrO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBcHBseSBkZWx0YSB0byB0aGUgbmV4dC1IeiBUb0QgKi9cXG4rXFx0dHNfbmV4dCA9IHRpbWVzcGVjNjRfYWRkKHRzX25leHQsIGRlbHRhKTtcXG4rXFx0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFxcdTAwMjZ0c19uZXh0KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBXcml0ZSBhZGp1c3RlZCBUb0QgYmFjayBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xcbitcXHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3U0OCh6bGRldiwgWkxfUkVHX0RQTExfREZfT0ZGU0VUKGNoKSwgb2Zmc2V0KTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0emxkZXYtXFx1MDAzZWNoYW5bY2hdLmRmX29mZnNldCA9IG9mZnNldDtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKy0xcylcXG4rICpcXG4rICogQ29udmVydHMgbmFub3NlY29uZHMgdG8gVElFIHVuaXRzICgwLjAxIHBzKSBhbmQgd3JpdGVzIFRJRSBkYXRhXFxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitpbnQgemwzMDczeF9jaGFuX3RpZV93cml0ZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCwgczY0IGRlbHRhX25zKVxcbit7XFxuK1xcdHM2NCB0aWVfZGF0YTtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRldi1cXHUwMDNldGllX2xvY2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfRFBMTF9USUVfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHQvKiBDb252ZXJ0IG5zIHRvIFRJRSB1bml0cyAoMC4wMSBwcyA9IDEwXi0xNCBzKSAqL1xcbitcXHR0aWVfZGF0YSA9IGRlbHRhX25zICogMTAwMDAwTEw7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfREFUQShjaCksIHRpZV9kYXRhKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X3dyaXRlX3U4KHpsZGV2LCBaTF9SRUdfRFBMTF9USUVfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0WkxfRFBMTF9USUVfQ1RSTF9PUF9XUik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCAtIGV4ZWN1dGUgb25lIG91dHB1dCBwaGFzZSBzdGVwIG9wZXJhdGlvblxcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcXG4rICogQG91dF9tYXNrOiBiaXRtYXNrIG9mIG91dHB1dHMgdG8gc3RlcFxcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXFxuKyAqIEB0b2Rfc3RlcDogYWxzbyBzdGVwIHRoZSBUb0QgY291bnRlclxcbisgKlxcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxcbisgKiB0aGUgc3RlcCB2YWx1ZSBpcyBpbiBzeW50aGVzaXplciBjbG9jayBjeWNsZXMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdCAgICBib29sIHRvZF9zdGVwKVxcbit7XFxuK1xcdHU4IGN0cmw7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cXG4rXFx0cmMgPSB6bDMwNzN4X3BvbGxfemVyb191OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0XFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0RBVEEsXFxuK1xcdFxcdFxcdCAgICAgICBzdGVwX2N5Y2xlcyk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0cmMgPSB6bDMwNzN4X3dyaXRlX3UxNih6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0ssIG91dF9tYXNrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9OVU1CRVIsIDEpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcXG4rXFx0ICAgICAgIEZJRUxEX1BSRVAoWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUCxcXG4rXFx0XFx0XFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcXG4rXFx0aWYgKHRvZF9zdGVwKVxcbitcXHRcXHRjdHJsIHw9IFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfVE9EX1NURVA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkwsIGN0cmwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxcbiAgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeF9kZXYgc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxcbmluZGV4IGRjOWM2ZDk1YmRlZTc1Li45ZGM1YTNmMTk5MWYxMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcXG5AQCAtNSwxMCArNSwxMiBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGRkZWYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWU2NC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJyZWdzLmhcXFwiXFxuIFxcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XFxuIHN0cnVjdCB6bDMwNzN4X2RldjtcXG4gXFxuIC8qKlxcbkBAIC0xNiw2ICsxOCw3IEBAIHN0cnVjdCB6bDMwNzN4X2RldjtcXG4gICogQGN0cmw6IERQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZVxcbiAgKiBAbW9kZV9yZWZzZWw6IG1vZGUgYW5kIHJlZmVyZW5jZSBzZWxlY3Rpb24gcmVnaXN0ZXIgdmFsdWVcXG4gICogQHJlZl9wcmlvOiByZWZlcmVuY2UgcHJpb3JpdHkgcmVnaXN0ZXJzICg0IGJpdHMgcGVyIHJlZiwgUC9OIHBhY2tlZClcXG4rICogQG91dF9zdGVwX3RpbWVfbWFzazogb3V0cHV0IHN0ZXAtdGltZSBtYXNrXFxuICAqIEBtb25fc3RhdHVzOiBtb25pdG9yIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxcbiAgKiBAcmVmc2VsX3N0YXR1czogcmVmZXJlbmNlIHNlbGVjdGlvbiBzdGF0dXMgcmVnaXN0ZXIgdmFsdWVcXG4gICogQGRmX29mZnNldDogZnJlcXVlbmN5IG9mZnNldCB2cyB0cmFja2VkIHJlZmVyZW5jZSBpbiAyXi00OCBzdGVwc1xcbkBAIC0yNiw2ICsyOSw5IEBAIHN0cnVjdCB6bDMwNzN4X2NoYW4ge1xcbiBcXHRcXHR1OFxcdG1vZGVfcmVmc2VsO1xcbiBcXHRcXHR1OFxcdHJlZl9wcmlvW1pMMzA3M1hfTlVNX1JFRlMgLyAyXTtcXG4gXFx0KTtcXG4rXFx0c3RydWN0X2dyb3VwKGludiwgLyogSW52YXJpYW50cyAqL1xcbitcXHRcXHR1MTZcXHRvdXRfc3RlcF90aW1lX21hc2s7XFxuK1xcdCk7XFxuIFxcdHN0cnVjdF9ncm91cChzdGF0LFxcbiBcXHRcXHR1OFxcdG1vbl9zdGF0dXM7XFxuIFxcdFxcdHU4XFx0cmVmc2VsX3N0YXR1cztcXG5AQCAtNDIsNiArNDgsMjAgQEAgaW50IHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgsXFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcXG4gaW50IHpsMzA3M3hfY2hhbl9uY29fbW9kZV9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpO1xcbiBcXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICBib29sIG5leHRfaHosIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgdGltZXNwZWM2NCB0cyk7XFxuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxcbitcXHRcXHRcXHQgICAgdTE2IG91dF9tYXNrLCBzMzIgc3RlcF9jeWNsZXMsIGJvb2wgdG9kX3N0ZXApO1xcbitcXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KTtcXG4rXFxuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcXG4gICogQGNoYW46IHBvaW50ZXIgdG8gY2hhbm5lbCBzdGF0ZVxcbkBAIC0yMDAsNiArMjIwLDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6bDMwNzN4X2NoYW5fbW9kZV9pc19yZWZsb2NrKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXFxuIFxcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9nZXQoY2hhbikgPT0gWkxfRFBMTF9NT0RFX1JFRlNFTF9NT0RFX1JFRkxPQ0s7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB6bDMwNzN4X2NoYW5fbW9kZV9zdXBwb3J0c190aWUgLSBjaGVjayBpZiBjaGFubmVsIG1vZGUgc3VwcG9ydHMgVElFIHdyaXRlXFxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcXG4rICpcXG4rICogVElFIHdyaXRlIGlzIHN1cHBvcnRlZCBpbiBBVVRPIGFuZCBSRUZMT0NLIG1vZGVzIHJlZ2FyZGxlc3Mgb2YgbG9jayBzdGF0ZS5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZVxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sXFxuK3psMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxcbit7XFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fbW9kZV9pc19hdXRvKGNoYW4pIHx8XFxuK1xcdFxcdHpsMzA3M3hfY2hhbl9tb2RlX2lzX3JlZmxvY2soY2hhbik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2NoYW5faXNfaG9fcmVhZHkgLSBjaGVjayBpZiBob2xkb3ZlciBpcyByZWFkeVxcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuQEAgLTIzMyw0ICsyNjgsMTcgQEAgc3RhdGljIGlubGluZSB1OCB6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbilcXG4gXFx0cmV0dXJuIEZJRUxEX0dFVChaTF9EUExMX1JFRlNFTF9TVEFUVVNfUkVGU0VMLCBjaGFuLVxcdTAwM2VyZWZzZWxfc3RhdHVzKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZCAtIGNoZWNrIGlmIG91dHB1dCBpcyBpbiBzdGVwLXRpbWUgbWFza1xcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXFxuKyAqIEBvdXQ6IG91dHB1dCBpbmRleFxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4remwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG91dClcXG4re1xcbitcXHRyZXR1cm4gISEoY2hhbi1cXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrIFxcdTAwMjYgQklUKG91dCkpO1xcbit9XFxuK1xcbiAjZW5kaWYgLyogX1pMMzA3M1hfQ0hBTl9IICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xcbmluZGV4IDdmNWFmYWFhZTYzNDJmLi5iMmY5ZmM5N2ZkMWI2OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcXG5AQCAtMTAzMyw2ICsxMDMzLDE0IEBAIGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiBcXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cXG4gXFx0ICovXFxuIFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbitcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4rXFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXFxuaW5kZXggNzhkYzIwOGYzZWVhMmEuLjJkYzgzNmQwYzhmNmIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxcbkBAIC0yNiw2ICsyNiwxMCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsO1xcbiAjZGVmaW5lIFpMX1BPTExfSFdSRUdfVElNRU9VVF9VU1xcdCg1MCAqIFVTRUNfUEVSX01TRUMpXFxuICNkZWZpbmUgWkxfUE9MTF9NQl9USU1FT1VUX1VTXFx0XFx0KDMwICogVVNFQ19QRVJfTVNFQylcXG4gI2RlZmluZSBaTF9QT0xMX1BIQVNFX0VSUl9USU1FT1VUX1VTXFx0KDUwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1xcdCgzMDAwICogVVNFQ19QRVJfTVNFQylcXG4rI2RlZmluZSBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTXFx0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1JEX1RJTUVPVVRfVVNcXHQoMzAgKiBVU0VDX1BFUl9NU0VDKVxcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcXHQoMTAwMCAqIFVTRUNfUEVSX01TRUMpXFxuIFxcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xcbiBcXHRaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzJfQklULFxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XFxuICAqIEByZWdtYXA6IHJlZ21hcCB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVyc1xcbiAgKiBAaW5mbzogZGV0ZWN0ZWQgY2hpcCBpbmZvXFxuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXFxuKyAqIEB0aWVfbG9jazogdG8gc2VyaWFsaXplIFRJRSB3cml0ZSBvcGVyYXRpb25zXFxuKyAqIEBwaGFzZV9zdGVwX2xvY2s6IHRvIHNlcmlhbGl6ZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25zXFxuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcXG4gICogQG91dDogYXJyYXkgb2Ygb3V0cycgaW52YXJpYW50c1xcbiAgKiBAc3ludGg6IGFycmF5IG9mIHN5bnRocycgaW52YXJpYW50c1xcbkBAIC03MSw2ICs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHRcXHQqcmVnbWFwO1xcbiBcXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGlwX2luZm9cXHQqaW5mbztcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0bXVsdGlvcF9sb2NrO1xcbitcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRcXHR0aWVfbG9jaztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0cGhhc2Vfc3RlcF9sb2NrO1xcbiBcXG4gXFx0LyogSW52YXJpYW50cyAqL1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWZcXHRyZWZbWkwzMDczWF9OVU1fUkVGU107XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xcbmluZGV4IGQ5MWY1MmI1OGVhZTM0Li43YzExZGUzNTgyMWFlYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG5AQCAtMTQsNiArMTUsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3ByaW50Zi5oXFx1MDAzZVxcbiBcXG5AQCAtNDIsNiArNDQsNyBAQFxcbiAgKiBAcGhhc2Vfb2Zmc2V0OiBsYXN0IHNhdmVkIHBpbiBwaGFzZSBvZmZzZXRcXG4gICogQGZyZXFfb2Zmc2V0OiBsYXN0IHNhdmVkIGZyYWN0aW9uYWwgZnJlcXVlbmN5IG9mZnNldFxcbiAgKiBAbWVhc3VyZWRfZnJlcTogbGFzdCBzYXZlZCBtZWFzdXJlZCBmcmVxdWVuY3lcXG4rICogQHBlcm91dF9pZHg6IFBUUCBwZXJvdXQgY2hhbm5lbCBpbmRleCwgb3IgLTEgaWYgbm90IHBlcm91dC1lbGlnaWJsZVxcbiAgKi9cXG4gc3RydWN0IHpsMzA3M3hfZHBsbF9waW4ge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG5AQCAtNTksNiArNjIsNyBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7XFxuIFxcdHM2NFxcdFxcdFxcdHBoYXNlX29mZnNldDtcXG4gXFx0czY0XFx0XFx0XFx0ZnJlcV9vZmZzZXQ7XFxuIFxcdHUzMlxcdFxcdFxcdG1lYXN1cmVkX2ZyZXE7XFxuK1xcdHM4XFx0XFx0XFx0cGVyb3V0X2lkeDtcXG4gfTtcXG4gXFxuIC8qXFxuQEAgLTkzNiwyMSArOTQwLDE3IEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4gfVxcbiBcXG4gc3RhdGljIGludFxcbi16bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuLVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxcbi1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRwbGxfcHJpdiwgdTY0IGZyZXF1ZW5jeSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbitfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgZnJlcXVlbmN5KVxcbiB7XFxuLVxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCA9IGRwbGxfcHJpdjtcXG4gXFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cXHUwMDNlZGV2O1xcbi1cXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XFxuIFxcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcXG4gXFx0dTMyIG5ld19kaXYsIHN5bnRoX2ZyZXE7XFxuIFxcdHN0cnVjdCB6bDMwNzN4X291dCBvdXQ7XFxuIFxcdHU4IG91dF9pZDtcXG4gXFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cXHUwMDNlaWQpO1xcbiBcXHRvdXQgPSAqemwzMDczeF9vdXRfc3RhdGVfZ2V0KHpsZGV2LCBvdXRfaWQpO1xcbkBAIC0xMDExLDYgKzEwMTEsMjEgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbiBcXHRyZXR1cm4gemwzMDczeF9vdXRfc3RhdGVfc2V0KHpsZGV2LCBvdXRfaWQsIFxcdTAwMjZvdXQpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50XFxuK3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbl9wcml2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZnJlcXVlbmN5KTtcXG4rfVxcbitcXG4gc3RhdGljIGludFxcbiB6bDMwNzN4X2RwbGxfb3V0cHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXFxuIFxcdFxcdFxcdFxcdFxcdCB2b2lkICpwaW5fcHJpdixcXG5AQCAtMTYwOCw2ICsxNjIzLDcgQEAgemwzMDczeF9kcGxsX3Bpbl9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcixcXG4gXFx0cGluLVxcdTAwM2VkcGxsID0gemxkcGxsO1xcbiBcXHRwaW4tXFx1MDAzZWRpciA9IGRpcjtcXG4gXFx0cGluLVxcdTAwM2VpZCA9IGlkO1xcbitcXHRwaW4tXFx1MDAzZXBlcm91dF9pZHggPSAtMTtcXG4gXFxuIFxcdHJldHVybiBwaW47XFxuIH1cXG5AQCAtMTYyNiw2ICsxNjQyLDQ0IEBAIHpsMzA3M3hfZHBsbF9waW5fZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluKVxcbiBcXHRrZnJlZShwaW4pO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQgLSBjaGVjayBpZiBvdXRwdXQgcGluIGlzIHBlcm91dC1lbGlnaWJsZVxcbisgKiBAcGluOiBEUExMIHBpbiB0byBjaGVja1xcbisgKiBAcHJvcHM6IHBpbiBwcm9wZXJ0aWVzIChhbHJlYWR5IGZldGNoZWQgYnkgY2FsbGVyKVxcbisgKlxcbisgKiBBbiBvdXRwdXQgcGluIGlzIGVsaWdpYmxlIGZvciBQVFAgcGVyaW9kaWMgb3V0cHV0IGlmIGl0IGlzIHNpbmdsZS1lbmRlZFxcbisgKiAobm90IGRpZmZlcmVudGlhbCkgYW5kIHN1cHBvcnRzIDEgSHogaW4gaXRzIGZyZXF1ZW5jeSBsaXN0LlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgZWxpZ2libGUsIGZhbHNlIG90aGVyd2lzZVxcbisgKi9cXG4rc3RhdGljIGJvb2xcXG4remwzMDczeF9kcGxsX3Bpbl9pc19wZXJvdXQoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbixcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfcGluX3Byb3BzICpwcm9wcylcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBwaW4tXFx1MDAzZWRwbGw7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdHU4IG91dF9pZDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXFx1MDAzZWlkKTtcXG4rXFx0aWYgKHpsMzA3M3hfZGV2X291dF9pc19kaWZmKHpsZHBsbC1cXHUwMDNlZGV2LCBvdXRfaWQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRwbGwtXFx1MDAzZWRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdGlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9wcy1cXHUwMDNlZHBsbF9wcm9wcy5mcmVxX3N1cHBvcnRlZF9udW07IGkrKykge1xcbitcXHRcXHRpZiAocHJvcHMtXFx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRbaV0ubWluID09IDEpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBwaW5cXG4gICogQHBpbjogcG9pbnRlciB0byBEUExMIHBpblxcbkBAIC0xNjY3LDYgKzE3MjEsOCBAQCB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sIHUzMiBpbmRleClcXG4gXFx0XFx0aWYgKHBpbi1cXHUwMDNlcHJpbyA9PSBaTF9EUExMX1JFRl9QUklPX05PTkUpXFxuIFxcdFxcdFxcdC8qIENsYW1wIHByaW8gdG8gbWF4IHZhbHVlICovXFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlcHJpbyA9IFpMX0RQTExfUkVGX1BSSU9fTUFYO1xcbitcXHR9IGVsc2UgaWYgKHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHBpbiwgcHJvcHMpKSB7XFxuK1xcdFxcdHBpbi1cXHUwMDNlcGVyb3V0X2lkeCA9IHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubl9wZXJfb3V0Kys7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIENyZWF0ZSBvciBnZXQgZXhpc3RpbmcgRFBMTCBwaW4gKi9cXG5AQCAtMTg5Nyw2ICsxOTUzLDggQEAgemwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHR1OCBpZCwgaW5kZXg7XFxuIFxcdGludCByYztcXG4gXFxuK1xcdHpsZHBsbC1cXHUwMDNlcHRwX2luZm8ubl9wZXJfb3V0ID0gMDtcXG4rXFxuIFxcdC8qIFByb2Nlc3MgaW5wdXQgcGlucyAqL1xcbiBcXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXFx1MDAzYyBaTDMwNzNYX05VTV9QSU5TOyBpbmRleCsrKSB7XFxuIFxcdFxcdC8qIEZpcnN0IGlucHV0IHBpbnMgYW5kIHRoZW4gb3V0cHV0IHBpbnMgKi9cXG5AQCAtMjI4MCw0NSArMjMzOCw0NDcgQEAgemwzMDczeF9kcGxsX2luaXRfZmluZV9waGFzZV9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbisvKiBNYXhpbXVtIGZyZXF1ZW5jeSBhZGp1c3RtZW50OiArLTElIG9mIG5vbWluYWwgaW4gcHBiICovXFxuKyNkZWZpbmUgWkwzMDczWF9EUExMX1BUUF9NQVhfQURKXFx0MTAwMDAwMDBcXG4rXFxuIC8qKlxcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxcbi0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4tICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAdHM6IHRpbWVzcGVjIHRvIHN0b3JlIGN1cnJlbnQgdGltZVxcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xcbiAgKlxcbi0gKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3JlYWQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0IC0gc2V0IFRvRCBjb3VudGVycyB0byBnaXZlbiB0aW1lXFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcXG4gICpcXG4tICogUmV0dXJuOiBwb2ludGVyIHRvIERQTEwgZGV2aWNlIG9uIHN1Y2Nlc3MsIGVycm9yIHBvaW50ZXIgb24gZXJyb3JcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuICAqL1xcbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcXG4temwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbiB7XFxuLVxcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4gXFxuLVxcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xcbi1cXHRpZiAoIXpsZHBsbClcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdHpsZHBsbC1cXHUwMDNlZGV2ID0gemxkZXY7XFxuLVxcdHpsZHBsbC1cXHUwMDNlaWQgPSBjaDtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlcGlucyk7XFxuK1xcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCAqdHMpO1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gemxkcGxsO1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lX3BoYXNlX3N0ZXAgLSBhZGp1c3Qgc3ViLXNlY29uZCB0aW1lIHZpYSBwaGFzZSBzdGVwXFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxcbisgKiBAZGVsdGE6IHRpbWUgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKC1OU0VDX1BFUl9TRUMsXFxuKyAqICAgICAgICAgTlNFQ19QRVJfU0VDKSlcXG4rICpcXG4rICogVXNlcyB0aGUgb3V0cHV0IHBoYXNlIHN0ZXAgbWVjaGFuaXNtIHdpdGggdG9kX3N0ZXA9MSB0byBhZGp1c3QgYm90aFxcbisgKiB0aGUgb3V0cHV0IGNsb2NrIHBoYXNlIGFuZCB0aGUgVG9EIGNvdW50ZXIgc2ltdWx0YW5lb3VzbHkuIFRoaXMga2VlcHNcXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXFxuKyAqXFxuKyAqIE91dHB1dHMgYXJlIGdyb3VwZWQgYnkgc3ludGhlc2l6ZXIgc2luY2UgdGhlIHBoYXNlIHN0ZXAgdmFsdWUgaXMgaW5cXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcXG4rICogdXNlcyB0b2Rfc3RlcCB0byBhZGp1c3QgYm90aCBvdXRwdXRzIGFuZCB0aGUgVG9EIGNvdW50ZXIuIFJlbWFpbmluZ1xcbisgKiBncm91cHMgc3RlcCBvdXRwdXRzIG9ubHkuIElmIG5vIHN5bnRoIGhhcyBlbmFibGVkIG91dHB1dHMsIHRoZSBUb0RcXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGVcXG4rICogbG93ZXN0LUlEIHN5bnRoJ3MgcGVyaW9kIGZvciB0aGUgY29udmVyc2lvbikuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBubyBzeW50aHMgYXZhaWxhYmxlLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzNjQgZGVsdGEpXFxuK3tcXG4rXFx0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X3N5bnRoICpzeW50aDtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcXG4rXFx0dTMyIGZpcnN0X3N5bnRoX2ZyZXEgPSAwO1xcbitcXHRib29sIHRvZF9zdGVwcGVkID0gZmFsc2U7XFxuK1xcdHMzMiBzdGVwX2N5Y2xlcztcXG4rXFx0dTMyIHN5bnRoX2ZyZXE7XFxuK1xcdGludCByYztcXG4rXFx0dTggaTtcXG4rXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdC8qIEJ1aWxkIHBlci1zeW50aCBvdXRwdXQgbWFza3MgZnJvbSByZWdpc3RlcmVkIG91dHB1dCBwaW5zICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zLCBsaXN0KSB7XFxuK1xcdFxcdHU4IG91dF9pZCwgc3ludGhfaWQ7XFxuK1xcbitcXHRcXHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cXHUwMDNlaWQpO1xcbitcXG4rXFx0XFx0aWYgKCF6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQoY2hhbiwgb3V0X2lkKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XFxuK1xcdFxcdGlmIChzeW50aF9pZCBcXHUwMDNlPSBaTDMwNzNYX05VTV9TWU5USFMpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oemxkZXYtXFx1MDAzZWRldiwgXFxcIlVuZXhwZWN0ZWQgc3ludGggaWQgZm9yIE9VVCV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgb3V0X2lkKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFByb2Nlc3MgZWFjaCBzeW50aCBncm91cCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgWkwzMDczWF9OVU1fU1lOVEhTOyBpKyspIHtcXG4rXFx0XFx0c3ludGggPSB6bDMwNzN4X3N5bnRoX3N0YXRlX2dldCh6bGRldiwgaSk7XFxuK1xcdFxcdGlmICghemwzMDczeF9zeW50aF9pc19lbmFibGVkKHN5bnRoKSB8fFxcbitcXHRcXHQgICAgemwzMDczeF9zeW50aF9kcGxsX2dldChzeW50aCkgIT0gemxkcGxsLVxcdTAwM2VpZClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzeW50aF9mcmVxID0gemwzMDczeF9zeW50aF9mcmVxX2dldChzeW50aCk7XFxuK1xcbitcXHRcXHQvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cXG4rXFx0XFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRcXHRmaXJzdF9zeW50aF9mcmVxID0gc3ludGhfZnJlcTtcXG4rXFxuK1xcdFxcdGlmICghc3ludGhfbWFza1tpXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBTYWZlIGZvciBzMzI6IG1heCBzeW50aCBmcmVxIGlzIDc1MCBNSHogKi9cXG4rXFx0XFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcXG4rXFxuK1xcdFxcdHJjID0gemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIXRvZF9zdGVwcGVkKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdGlmICh0b2Rfc3RlcHBlZCkge1xcbitcXHRcXHRcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHR9XFxuK1xcdFxcdHRvZF9zdGVwcGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKiBObyBlbmFibGVkIG91dHB1dHMgZm91bmQ7IHN0ZXAgVG9EIGNvdW50ZXIgb25seSB1c2luZyB0aGVcXG4rXFx0ICogbG93ZXN0LUlEIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXRvZF9zdGVwcGVkKSB7XFxuK1xcdFxcdHN0ZXBfY3ljbGVzID0gZGl2X3M2NChkZWx0YSAqIGZpcnN0X3N5bnRoX2ZyZXEsIE5TRUNfUEVSX1NFQyk7XFxuK1xcdFxcdHJldHVybiB6bDMwNzN4X2NoYW5fcGhhc2Vfc3RlcCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0ZXBfY3ljbGVzLCB0cnVlKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbi0gKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSAtIGFkanVzdCBQVFAgY2xvY2sgdGltZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcXG4gICpcXG4tICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcXHUwMDNlPSAxIHNlY29uZCkgYXJlIHNwbGl0IGludG8gYSBUb0RcXG4rICogcmVhZC1tb2RpZnktd3JpdGUgZm9yIHRoZSBzZWNvbmRzIHBhcnQgYW5kIGFuIG91dHB1dCBwaGFzZSBzdGVwIGZvclxcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxcbisgKiBmYWxsaW5nIGJhY2sgdG8gVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIGlmIHBoYXNlIHN0ZXAgaXMgdW5hdmFpbGFibGUuXFxuKyAqIEluIEFVVE8vUkVGTE9DSyBtb2RlcywgbGFyZ2UgZGVsdGFzIGFyZSBzcGxpdCBpbnRvIFRvRFxcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxcbisgKiByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBUSUUgd3JpdGUgZGlyZWN0bHkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcbiAgKi9cXG4tdm9pZFxcbi16bDMwNzN4X2RwbGxfZnJlZShzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbywgczY0IGRlbHRhKVxcbiB7XFxuLVxcdFdBUk4oemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgXFxcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXFxcblxcXCIpO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcdGJvb2wgc2VjX2FkanVzdGVkID0gZmFsc2U7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xcbitcXHRpbnQgcmM7XFxuIFxcbi1cXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbi1cXHRrZnJlZSh6bGRwbGwpO1xcbitcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdC8qIE1vZGVzIHdpdGhvdXQgcGhhc2Ugc3RlcCBvciBUSUUgdXNlIHBsYWluIFRvRCBhZGp1c3QgKi9cXG4rXFx0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXpsMzA3M3hfY2hhbl9tb2RlX3N1cHBvcnRzX3RpZShjaGFuKSlcXG4rXFx0XFx0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogU3BsaXQgb2ZmIHNlY29uZHMgdmlhIFRvRCByZWFkLW1vZGlmeS13cml0ZSBzbyB0aGUgc3ViLXNlY29uZFxcbitcXHQgKiByZW1haW5kZXIgY2FuIGJlIGFwcGxpZWQgdGhyb3VnaCB0aGUgb3V0cHV0LWNvaGVyZW50IG1lY2hhbmlzbVxcbitcXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxcbitcXHQgKi9cXG4rXFx0aWYgKGFicyhkZWx0YSkgXFx1MDAzZT0gTlNFQ19QRVJfU0VDKSB7XFxuK1xcdFxcdHMzMiByZW1haW5kZXI7XFxuK1xcbitcXHRcXHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcXHUwMDI2cmVtYWluZGVyKTtcXG4rXFx0XFx0dHMudHZfbnNlYyA9IDA7XFxuK1xcdFxcdGRlbHRhID0gcmVtYWluZGVyO1xcbitcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgdHMpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdFxcdHNlY19hZGp1c3RlZCA9IHRydWU7XFxuK1xcbitcXHRcXHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xcbitcXHRcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cXG4rXFx0aWYgKHpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSkge1xcbitcXHRcXHRyYyA9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwKHpsZHBsbCwgZGVsdGEpO1xcbitcXHRcXHRpZiAoIXJjKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmMgPSB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBkZWx0YSk7XFxuK1xcdFxcdGlmICghcmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXFxuK1xcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgbnNfdG9fdGltZXNwZWM2NChkZWx0YSkpO1xcbitcXG4rXFx0LyogSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYm90aCBwaGFzZSBzdGVwL1RJRSB3cml0ZSBhbmQgZmFsbGJhY2tcXG4rXFx0ICogVG9EIGFkanVzdCBmYWlsIGFmdGVyIHNlY29uZHMgd2VyZSBhbHJlYWR5IGNvbW1pdHRlZCwgcmV0dXJuXFxuK1xcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXFxuK1xcdCAqIGFwcGx5aW5nIHNlY29uZHMgYWdhaW4uIFRoZSBzdWItc2Vjb25kIHJlc2lkdWFsIHdpbGwgc2VsZi1jb3JyZWN0XFxuK1xcdCAqIGluIHRoZSBuZXh0IHNlcnZvIGN5Y2xlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHNlY19hZGp1c3RlZCkge1xcbitcXHRcXHRkZXZfd2Fybih6bGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIlN1Yi1zZWNvbmQgYWRqdXN0bWVudCBmYWlsZWQgYWZ0ZXIgc2Vjb25kcyBhcHBsaWVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XFxuKyAqIEBpbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAc2NhbGVkX3BwbTogZnJlcXVlbmN5IGFkanVzdG1lbnQgaW4gc2NhbGVkIHBwbSAocHBtICogMl4xNilcXG4rICpcXG4rICogT25seSBzdXBwb3J0ZWQgZm9yIE5DTy4gV3JpdGVzIHRoZSBkZWx0YSBmcmVxdWVuY3kgb2Zmc2V0IHJlZ2lzdGVyLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkLCBcXHUwMDNjMCBvbiBlcnJvclxcbisgKi9cXG4rc3RhdGljIGludFxcbit6bDMwNzN4X2RwbGxfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBsb25nIHNjYWxlZF9wcG0pXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHpsMzA3M3hfY2hhbiAqY2hhbjtcXG4rXFx0czY0IG9mZnNldDtcXG4rXFxuK1xcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogMl4zMikgLyAxMF42XFxuK1xcdCAqXFxuK1xcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxcbitcXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMjYpIC8gNV42XFxuK1xcdCAqICAgZGZfb2Zmc2V0ID0gLShzY2FsZWRfcHBtICogNjcxMDg4NjQpIC8gMTU2MjVcXG4rXFx0ICovXFxuK1xcdG9mZnNldCA9IC1kaXZfczY0KChzNjQpc2NhbGVkX3BwbSAqIDY3MTA4ODY0TEwsIDE1NjI1KTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZHBsbC1cXHUwMDNlZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0aWYgKCF6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpXFxuK1xcdFxcdHJldHVybiBzY2FsZWRfcHBtID8gLUVPUE5PVFNVUFAgOiAwO1xcbitcXHRpZiAob2Zmc2V0ID09IGNoYW4tXFx1MDAzZWRmX29mZnNldClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoemxkcGxsLVxcdTAwM2VkZXYsIHpsZHBsbC1cXHUwMDNlaWQsIG9mZnNldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlIC0gYWRqdXN0IFBUUCBjbG9jayBwaGFzZVxcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQGRlbHRhOiBwaGFzZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzXFxuKyAqXFxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxcbisgKiBuYW5vc2Vjb25kIHJlc29sdXRpb24gcGhhc2UgYWRqdXN0bWVudC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24ndCBzdXBwb3J0IFRJRSwgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcXG4re1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHRwX2luZm8pO1xcbitcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVxcdTAwM2VkZXY7XFxuK1xcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XFxuK1xcbitcXHRpZiAoIWRlbHRhKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCwgZGVsdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgczMyXFxuK3psMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2Uoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvIF9fYWx3YXlzX3VudXNlZClcXG4re1xcbitcXHQvKiBIVyBsaW1pdHMgVElFIHdyaXRlIHRvICstMSBzZWNvbmQuIFJldHVybiB0aGUgY29uc3RhbnQgSFdcXG4rXFx0ICogbGltaXQgYW5kIGxldCBhZGpwaGFzZSBoYW5kbGUgbW9kZS1zcGVjaWZpYyBjaGVja3MuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gTlNFQ19QRVJfU0VDIC0gMTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluIC0gZmluZCBwaW4gYnkgcGVyb3V0IGNoYW5uZWwgaW5kZXhcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsXFxuKyAqIEBpZHg6IHBlcm91dCBjaGFubmVsIGluZGV4IHRvIGZpbmRcXG4rICpcXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBwaW4sIG9yIE5VTEwgaWYgbm90IGZvdW5kXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKlxcbit6bDMwNzN4X2RwbGxfcHRwX3Blcm91dF9maW5kX3BpbihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGludCBpZHgpXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcXHUwMDI2emxkcGxsLVxcdTAwM2VwaW5zLCBsaXN0KSB7XFxuK1xcdFxcdGlmIChwaW4tXFx1MDAzZXBlcm91dF9pZHggPT0gaWR4KVxcbitcXHRcXHRcXHRyZXR1cm4gcGluO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlIC0gZW5hYmxlL2Rpc2FibGUgUFRQIGNsb2NrIGZ1bmN0aW9uc1xcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cXG4rICogQHJxOiB0aGUgcmVxdWVzdGVkIGNsb2NrIGZ1bmN0aW9uIGFuZCBwYXJhbWV0ZXJzXFxuKyAqIEBvbjogdHJ1ZSB0byBlbmFibGUsIGZhbHNlIHRvIGRpc2FibGVcXG4rICpcXG4rICogSGFuZGxlcyBQVFBfQ0xLX1JFUV9QRVJPVVQgcmVxdWVzdHMuIE9ubHkgMVBQUyAocGVyaW9kID0gMXMpIGlzIHN1cHBvcnRlZC5cXG4rICogT24gZW5hYmxlLCBjb25maWd1cmVzIHRoZSBvdXRwdXQgZGl2aWRlciBmb3IgMSBIei4gT24gZGlzYWJsZSwgZG9lcyBub3RoaW5nXFxuKyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4rICovXFxuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJxLCBpbnQgb24pXFxuK3tcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cF9pbmZvKTtcXG4rXFx0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcXG4rXFx0dW5zaWduZWQgaW50IGlkeDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0aWYgKHJxLVxcdTAwM2V0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWR4ID0gcnEtXFx1MDAzZXBlcm91dC5pbmRleDtcXG4rXFx0aWYgKGlkeCBcXHUwMDNlPSBpbmZvLVxcdTAwM2VuX3Blcl9vdXQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogVG9nZ2xpbmcgb3V0cHV0IHBpbnMgY2FuIHByb2R1Y2UgcnVudCBwdWxzZXMsIHNvIGRpc2FibGVcXG4rXFx0ICogaXMgYSBuby1vcC5cXG4rXFx0ICovXFxuK1xcdGlmICghb24pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogT25seSBhY2NlcHQgZXhhY3RseSAxUFBTIChwZXJpb2Quc2VjID09IDEsIG5zZWMgPT0gMCkgKi9cXG4rXFx0aWYgKHJxLVxcdTAwM2VwZXJvdXQucGVyaW9kLnNlYyAhPSAxIHx8IHJxLVxcdTAwM2VwZXJvdXQucGVyaW9kLm5zZWMgIT0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cGluID0gemwzMDczeF9kcGxsX3B0cF9wZXJvdXRfZmluZF9waW4oemxkcGxsLCBpZHgpO1xcbitcXHRpZiAoIXBpbikge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbHJlYWR5IGF0IDEgSHosIG5vdGhpbmcgdG8gZG8gKi9cXG4rXFx0aWYgKHpsMzA3M3hfZGV2X291dHB1dF9waW5fZnJlcV9nZXQoemxkcGxsLVxcdTAwM2VkZXYsIHBpbi1cXHUwMDNlaWQpID09IDEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW4sIDEpO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0ZHBsbF9waW5fY2hhbmdlX250ZihwaW4tXFx1MDAzZWRwbGxfcGluKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm8gPSB7XFxuK1xcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuK1xcdC5tYXhfYWRqXFx0PSBaTDMwNzNYX0RQTExfUFRQX01BWF9BREosXFxuK1xcdC5nZXR0aW1leDY0XFx0PSB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQsXFxuK1xcdC5zZXR0aW1lNjRcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfc2V0dGltZTY0LFxcbitcXHQuYWRqdGltZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lLFxcbitcXHQuYWRqZmluZVxcdD0gemwzMDczeF9kcGxsX3B0cF9hZGpmaW5lLFxcbitcXHQuYWRqcGhhc2VcXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqcGhhc2UsXFxuK1xcdC5nZXRtYXhwaGFzZVxcdD0gemwzMDczeF9kcGxsX3B0cF9nZXRtYXhwaGFzZSxcXG4rXFx0LmVuYWJsZVxcdFxcdD0gemwzMDczeF9kcGxsX3B0cF9lbmFibGUsXFxuK307XFxuK1xcbisvKipcXG4rICogemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlciAtIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3JcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MwIG9uIGVycm9yXFxuKyAqL1xcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYgPSB6bGRwbGwtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xcbitcXG4rXFx0c25wcmludGYoemxkcGxsLVxcdTAwM2VwdHBfaW5mby5uYW1lLCBzaXplb2YoemxkcGxsLVxcdTAwM2VwdHBfaW5mby5uYW1lKSxcXG4rXFx0XFx0IFxcXCJ6bDMwNzN4LWRwbGwldVxcXCIsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbitcXG4rXFx0cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXB0cF9pbmZvLCB6bGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKElTX0VSUihwdHBfY2xvY2spKSB7XFxuK1xcdFxcdGRldl9lcnIoemxkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yIERQTEwldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0emxkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHB0cF9jbG9jayk7XFxuK1xcdH1cXG4rXFxuK1xcdHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrID0gcHRwX2Nsb2NrO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgYSBEUExMIGNoYW5uZWxcXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxcbisgKi9cXG4rc3RhdGljIHZvaWQgemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4re1xcbitcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrKSkge1xcbitcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXFx1MDAzZXB0cF9jbG9jayk7XFxuK1xcdFxcdHpsZHBsbC1cXHUwMDNlcHRwX2Nsb2NrID0gTlVMTDtcXG4rXFx0fVxcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjQwMyw2ICsyODYzLDQ4IEBAIHpsMzA3M3hfZHBsbF9yZWZfc3luY19wYWlyc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogemwzMDczeF9kcGxsX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBkZXZpY2VcXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuKyAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxcbisgKlxcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXFxuKyAqXFxuKyAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXFxuKyAqL1xcbitzdHJ1Y3QgemwzMDczeF9kcGxsICpcXG4remwzMDczeF9kcGxsX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxcbit7XFxuK1xcdHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbDtcXG4rXFxuK1xcdHpsZHBsbCA9IGt6YWxsb2Nfb2JqKCp6bGRwbGwpO1xcbitcXHRpZiAoIXpsZHBsbClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcbitcXHR6bGRwbGwtXFx1MDAzZWRldiA9IHpsZGV2O1xcbitcXHR6bGRwbGwtXFx1MDAzZWlkID0gY2g7XFxuK1xcdHpsZHBsbC1cXHUwMDNlcHRwX2luZm8gPSB6bDMwNzN4X2RwbGxfcHRwX2Nsb2NrX2luZm87XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZXBpbnMpO1xcbitcXG4rXFx0cmV0dXJuIHpsZHBsbDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpsMzA3M3hfZHBsbF9mcmVlIC0gZnJlZSBEUExMIGRldmljZVxcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogRGVhbGxvY2F0ZXMgZ2l2ZW4gRFBMTCBkZXZpY2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9hbGxvYy5cXG4rICovXFxuK3ZvaWRcXG4remwzMDczeF9kcGxsX2ZyZWUoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbit7XFxuK1xcdFdBUk4oemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgXFxcIkRQTEwgZGV2aWNlIGlzIHN0aWxsIHJlZ2lzdGVyZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0a2ZyZWUoemxkcGxsKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHpsMzA3M3hfZHBsbF9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlIGFuZCBhbGwgaXRzIHBpbnNcXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuQEAgLTI0MzMsNiArMjkzNSwxMyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdH1cXG4gXFxuK1xcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbitcXHRcXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjQ0Niw3ICsyOTU1LDcgQEAgemwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4gdm9pZFxcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuIHtcXG4tXFx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xcbitcXHR6bDMwNzN4X2RwbGxfcHRwX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gXFx0emwzMDczeF9kcGxsX3BpbnNfdW5yZWdpc3Rlcih6bGRwbGwpO1xcbiBcXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcXG5pbmRleCBmYWViYzQwMmJhMWI3MC4uOWI1ZjcyYzMzODQ5Y2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXFxuQEAgLTUsNiArNSw4IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZHBsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuIFxcbkBAIC0yMiw2ICsyNCw4IEBAXFxuICAqIEB0eXBlOiBEUExMIHR5cGUgKFBQUyBvciBFRUMpXFxuICAqIEBsb2NrX3N0YXR1czogbGFzdCBzYXZlZCBEUExMIGxvY2sgc3RhdHVzXFxuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcXG4rICogQHB0cF9pbmZvOiBQVFAgY2xvY2sgaW5mb1xcbisgKiBAcHRwX2Nsb2NrOiByZWdpc3RlcmVkIFBUUCBjbG9jayAob3IgTlVMTClcXG4gICovXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0XFx0bGlzdDtcXG5AQCAtMzYsNiArNDAsOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcXG4gXFx0ZW51bSBkcGxsX3R5cGVcXHRcXHRcXHR0eXBlO1xcbiBcXHRlbnVtIGRwbGxfbG9ja19zdGF0dXNcXHRcXHRsb2NrX3N0YXR1cztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdHBpbnM7XFxuK1xcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1xcdFxcdHB0cF9pbmZvO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrXFx0XFx0KnB0cF9jbG9jaztcXG4gfTtcXG4gXFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaCBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxcbmluZGV4IGI3MGVhZDdkNDQ5NWIyLi40NDc3NTdlOTk4NDVkOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcXG5AQCAtMTc5LDYgKzE3OSwyMCBAQFxcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcXHRcXHRcXHRHRU5NQVNLKDIsIDApXFxuICNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX0NNRF9BQ0NfSVxcdFxcdDRcXG4gXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVElFX0NUUkxcXHRcXHRcXHRaTF9SRUcoNSwgMHgzMCwgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXFx0XFx0XFx0R0VOTUFTSygyLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVElFX0NUUkxfT1BfV1JcXHRcXHRcXHQ0XFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcXHRcXHRaTF9SRUcoNSwgMHgzMSwgMSlcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX0NUUkwoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgzOCwgMSwgOCwgMSlcXG4rI2RlZmluZSBaTF9EUExMX1RPRF9DVFJMX1NFTVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXFx0XFx0XFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaXFx0MVxcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcXHQ4XFxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfUkRfTkVYVF8xSFpcXHQ5XFxuK1xcbiAjZGVmaW5lIFpMX1JFR19EUExMX01FQVNfQ1RSTFxcdFxcdFxcdFpMX1JFRyg1LCAweDUwLCAxKVxcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfRFBMTF9NRUFTX0NUUkxfQVZHX0ZBQ1RPUlxcdFxcdEdFTk1BU0soNywgNClcXG5AQCAtMTkzLDYgKzIwNyw5IEBAXFxuIFxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlcyA2LTcsIERQTEwgRGF0YVxcbisgKlxcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXFxuKyAqIGNoYW5uZWwgNCBvbiBwYWdlIDcuXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcXG4gXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcXG4gI2RlZmluZSBaTF9EUExMX0RGX09GRlNFVF9VTktOT1dOXFx0UzY0X01JTlxcbiBcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDBDLCA2LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgwQywgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0KChfaWR4KSBcXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9USUVfREFUQV8wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RJRV9EQVRBXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDXzRcXHRcXHRcXHRaTF9SRUcoNywgMHgxMiwgNilcXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfU0VDKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXFxuK1xcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDE4LCA0LCA0LCAweDIwKVxcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XFx0XFx0XFx0WkxfUkVHKDcsIDB4MTgsIDQpXFxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX05TKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKF9pZHgpIFxcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9OU18wMyhfaWR4KSA6IFpMX1JFR19EUExMX1RPRF9OU180KVxcbitcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICAqIFJlZ2lzdGVyIFBhZ2UgOSwgU3ludGggYW5kIE91dHB1dFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuQEAgLTIyMSw2ICsyNTYsOCBAQFxcbiAjZGVmaW5lIFpMX09VVFBVVF9DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXFx0XFx0R0VOTUFTSyg2LCA0KVxcbiBcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLXFx0XFx0WkxfUkVHKDksIDB4MzYsIDIpXFxuK1xcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5AQCAtMzE2LDYgKzM1MywyNSBAQFxcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfRVNZTkNfV0lEVEhcXHRcXHRaTF9SRUcoMTQsIDB4MTgsIDQpXFxuICNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9DT01QXFx0XFx0WkxfUkVHKDE0LCAweDIwLCA0KVxcbiBcXG4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuKyAqIFJlZ2lzdGVyIFBhZ2UgOSwgT3V0cHV0IFBoYXNlIFN0ZXBcXG4rICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTFxcdFxcdFpMX1JFRyg5LCAweDM4LCAxKVxcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTFxcdFxcdEdFTk1BU0soNiwgNClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQXFx0QklUKDMpXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX05PTkVcXHQwXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFxcdDFcXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1JFQURcXHQyXFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9XUklURVxcdDNcXG4rXFxuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUlxcdFxcdFpMX1JFRyg5LCAweDM5LCAxKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTUFTS1xcdFxcdFpMX1JFRyg5LCAweDNhLCAyKVxcbitcXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVxcdFxcdFpMX1JFRyg5LCAweDNjLCA0KVxcbitcXG4gLypcXG4gICogUmVnaXN0ZXIgUGFnZSAyNTUgLSBIVyByZWdpc3RlcnMgYWNjZXNzXFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNjo1OS4yOTIxNDE1OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5MTk3NzU3Njc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKHpsMzA3M3gpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgSTJDL1NQSSBkcml2ZXIuIER1cmluZyBpbml0aWFsaXphdGlvbiAoemwzMDczeF9kZXZfcHJvYmUpLCB0aGUgZHJpdmVyIHN0cmljdGx5IHJlYWRzIGFuZCB2ZXJpZmllcyB0aGUgaGFyZHdhcmUgY2hpcCBJRCAoWkxfUkVHX0lEKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaW4gdGhlIGtlcm5lbCwgYW5kIGdlbmVyaWMgSTJDIG1vY2tzIGxpa2UgaTJjLXN0dWIgZG8gbm90IHN1cHBvcnQgdGhlIDE2LWJpdCByZWdpc3RlciBhZGRyZXNzaW5nIHJlcXVpcmVkIGJ5IHRoaXMgZHJpdmVyLCB0aGUgcHJvYmUgZnVuY3Rpb24gd2lsbCBhbHdheXMgZmFpbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gQ29uc2VxdWVudGx5LCB0aGUgRFBMTCBhbmQgUFRQIGRldmljZXMgd2lsbCBuZXZlciBiZSByZWdpc3RlcmVkLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWE2MDBhMWJkNjVhMjFmNDc0ZGJlY2Y5ZWU2ZDlkYjczZWI4MjgwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDEzOjM2OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbmluZGV4IDViYmNhMTQwMDU4MTMxLi5kMDU3NGFkNTcxZDNmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWdcbkBAIC0yLDcgKzIsNyBAQFxuIFxuIGNvbmZpZyBaTDMwNzNYXG4gXHR0cmlzdGF0ZSBcIk1pY3JvY2hpcCBBenVyaXRlIERQTEwvUFRQL1N5bmNFIGRldmljZXNcIiBpZiBDT01QSUxFX1RFU1Rcbi1cdGRlcGVuZHMgb24gTkVUXG4rXHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBEUExMXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiBcdHNlbGVjdCBSRUdNQVBcbkBAIC0xNiw3ICsxNiw3IEBAIGNvbmZpZyBaTDMwNzNYXG4gXG4gY29uZmlnIFpMMzA3M1hfSTJDXG4gXHR0cmlzdGF0ZSBcIkkyQyBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVFxuK1x0ZGVwZW5kcyBvbiBJMkMgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBSRUdNQVBfSTJDXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuQEAgLTI4LDcgKzI4LDcgQEAgY29uZmlnIFpMMzA3M1hfSTJDXG4gXG4gY29uZmlnIFpMMzA3M1hfU1BJXG4gXHR0cmlzdGF0ZSBcIlNQSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1pY3JvY2hpcCBBenVyaXRlIGRldmljZXNcIlxuLVx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSVxuK1x0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFNQSSBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiBcdHNlbGVjdCBSRUdNQVBfU1BJXG4gXHRzZWxlY3QgWkwzMDczWFxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uY1xuaW5kZXggNGVjMmNmNTNkYWQ0NjguLjUzMDMyZTc4MmZkNGFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNcbkBAIC0zLDYgKzMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbkBAIC0yMDIsNiArMjAzLDExIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4gXHRcdHpsMzA3M3hfY2hhbl9yZWZzZWxfc3RhdGVfZ2V0KGNoYW4pLFxuIFx0XHR6bDMwNzN4X2NoYW5fcmVmc2VsX3JlZl9nZXQoY2hhbikpO1xuIFxuK1x0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfT1VUUFVUX1NURVBfVElNRV9NQVNLLFxuK1x0XHRcdCAgICAgIFx1MDAyNmNoYW4tXHUwMDNlb3V0X3N0ZXBfdGltZV9tYXNrKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuIFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZW11bHRpb3BfbG9jayk7XG4gXG4gXHQvKiBSZWFkIERQTEwgY29uZmlndXJhdGlvbiBmcm9tIG1haWxib3ggKi9cbkBAIC0yMzQsNiArMjQwLDMwNyBAQCBjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsXG4gXHRyZXR1cm4gXHUwMDI2emxkZXYtXHUwMDNlY2hhbltpbmRleF07XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCAtIHdhaXQgZm9yIFRvRCBzZW1hcGhvcmUgdG8gY2xlYXJcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqXG4rICogUG9sbHMgdGhlIFRvRCBjb250cm9sIHJlZ2lzdGVyIHVudGlsIHRoZSBzZW1hcGhvcmUgYml0IGlzIGNsZWFyZWQsXG4rICogaW5kaWNhdGluZyB0aGUgZGV2aWNlIGhhcyBjb21wbGV0ZWQgdGhlIHByZXZpb3VzIFRvRCBvcGVyYXRpb24uXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHNlbWFwaG9yZSBub3QgY2xlYXJlZCwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoKVxuK3tcbitcdHVuc2lnbmVkIGludCB0aW1lb3V0O1xuK1x0dTggdG9kX2N0cmw7XG4rXHRpbnQgcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91OCh6bGRldiwgWkxfUkVHX0RQTExfVE9EX0NUUkwoY2gpLCBcdTAwMjZ0b2RfY3RybCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHN3aXRjaCAoRklFTERfR0VUKFpMX0RQTExfVE9EX0NUUkxfQ01ELCB0b2RfY3RybCkpIHtcbitcdGNhc2UgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFo6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9XUl9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHRpbWVvdXQgPSBaTF9QT0xMX1RPRF9SRF9USU1FT1VUX1VTO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdCAgWkxfRFBMTF9UT0RfQ1RSTF9TRU0sIHRpbWVvdXQpO1xuK1xuK1x0cmV0dXJuIHJjID09IC1FVElNRURPVVQgPyAtRUJVU1kgOiByYztcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9jdHJsIC0gaXNzdWUgVG9EIGNvbW1hbmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBjbWQ6IFRvRCBjb21tYW5kIHRvIGV4ZWN1dGVcbisgKlxuKyAqIFdyaXRlcyB0aGUgc2VtYXBob3JlIGFuZCBjb21tYW5kIHRvIGRwbGxfdG9kX2N0cmwuIFRoZSBjYWxsZXIgbXVzdFxuKyAqIGVuc3VyZSB0aGUgZGV2aWNlIGlzIHJlYWR5IChzZW1hcGhvcmUgY2xlYXIpIGJlZm9yZSBjYWxsaW5nIGFuZFxuKyAqIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbiBpZiBuZWVkZWQuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9jaGFuX3RvZF9jdHJsKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCB1OCBjbWQpXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9DVFJMKGNoKSxcbitcdFx0XHRcdFpMX0RQTExfVE9EX0NUUkxfU0VNIHwgY21kKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9yZWFkIC0gcmVhZCBUb0QgcmVnaXN0ZXJzIGFmdGVyIGlzc3VpbmcgYSBjb21tYW5kXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgaW5kZXhcbisgKiBAbmV4dF9oejogaWYgdHJ1ZSwgcmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIejsgb3RoZXJ3aXNlIHJlYWQgY3VycmVudFxuKyAqIEB0czogdGltZXNwZWMgdG8gc3RvcmUgdGhlIHJlc3VsdFxuKyAqIEBzdHM6IG9wdGlvbmFsIHN5c3RlbSB0aW1lc3RhbXAgcGFpciBmb3IgY3Jvc3MtdGltZXN0YW1waW5nXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBzZXJpYWxpemUgYWxsIHpsMzA3M3hfY2hhbl90b2RfKiBjYWxscyBleHRlcm5hbGx5LlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4re1xuK1x0dTMyIG5zZWM7XG4rXHR1NjQgc2VjO1xuK1x0dTggY21kO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG5leHRfaHopXG4rXHRcdGNtZCA9IFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaO1xuK1x0ZWxzZVxuK1x0XHRjbWQgPSBaTF9EUExMX1RPRF9DVFJMX0NNRF9SRF9DVVJSRU5UO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRvRCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9jaGFuX3RvZF9yZWFkeV93YWl0KHpsZGV2LCBjaCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhzdHMpO1xuK1x0cmMgPSB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLCBjbWQpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHN0cyk7XG4rXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91NDgoemxkZXYsIFpMX1JFR19EUExMX1RPRF9TRUMoY2gpLCBcdTAwMjZzZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBIVyBuYW5vc2Vjb25kcyBhcmUgYWx3YXlzIGluIFswLCBOU0VDX1BFUl9TRUMpIHJhbmdlICovXG4rXHRyYyA9IHpsMzA3M3hfcmVhZF91MzIoemxkZXYsIFpMX1JFR19EUExMX1RPRF9OUyhjaCksIFx1MDAyNm5zZWMpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR0cy1cdTAwM2V0dl9zZWMgPSBzZWM7XG4rXHR0cy1cdTAwM2V0dl9uc2VjID0gbnNlYztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlIC0gd3JpdGUgVG9EIHJlZ2lzdGVycyBhbmQgdHJpZ2dlciAxIEh6IHVwZGF0ZVxuKyAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuKyAqIEBjaDogRFBMTCBjaGFubmVsIGluZGV4XG4rICogQHRzOiB0aW1lIHRvIHNldFxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKVxuK3tcbitcdGludCByYztcbitcbitcdC8qIFdhaXQgZm9yIGFueSBwcmV2aW91cyBUb0Qgb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTQ4KHpsZGV2LCBaTF9SRUdfRFBMTF9UT0RfU0VDKGNoKSwgdHMudHZfc2VjKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmMgPSB6bDMwNzN4X3dyaXRlX3UzMih6bGRldiwgWkxfUkVHX0RQTExfVE9EX05TKGNoKSwgdHMudHZfbnNlYyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX2N0cmwoemxkZXYsIGNoLFxuK1x0XHRcdFx0ICAgIFpMX0RQTExfVE9EX0NUUkxfQ01EX1dSX05FWFRfMUhaKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3RvZF9hZGp1c3QgLSBhdG9taWMgVG9EIHJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggcm9sbG92ZXIgZ3VhcmRcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IHRvIGFwcGx5XG4rICpcbisgKiBSZWFkcyB0aGUgbmV4dC1IeiBUb0QgYW5kIGN1cnJlbnQgVG9ELCB0aGVuIGNoZWNrcyB3aGV0aGVyIGVub3VnaCB0aW1lXG4rICogcmVtYWlucyBiZWZvcmUgdGhlIG5leHQgMSBIeiByb2xsb3ZlciB0byBzYWZlbHkgY29tcGxldGUgdGhlIHdyaXRlLlxuKyAqIElmIGxlc3MgdGhhbiAyMCBtcyByZW1haW5zLCB3YWl0cyBmb3IgdGhlIHJvbGxvdmVyIGFuZCBpbmNyZW1lbnRzIHRoZVxuKyAqIG5leHQtSHogc2Vjb25kcyBieSBvbmUuIEFwcGxpZXMgQGRlbHRhIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrLlxuKyAqXG4rICogQ29udGV4dDogQ2FsbGVyIG11c3Qgc2VyaWFsaXplIGFsbCB6bDMwNzN4X2NoYW5fdG9kXyogY2FsbHMgZXh0ZXJuYWxseS5cbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX2FkanVzdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgZGVsdGEpXG4re1xuK1x0c3RhdGljIGNvbnN0IGxvbmcgdGhyZXNob2xkX25zID0gMjAgKiBOU0VDX1BFUl9NU0VDO1xuK1x0c3RydWN0IHRpbWVzcGVjNjQgdHNfbmV4dCwgdHNfY3VyLCBkaWZmO1xuK1x0aW50IHJjO1xuK1xuK1x0LyogUmVhZCBwcmVkaWN0ZWQgVG9EIGF0IG5leHQgMSBIeiB0aWNrICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIHRydWUsIFx1MDAyNnRzX25leHQsIE5VTEwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBSZWFkIGN1cnJlbnQgVG9EIHRvIGRldGVybWluZSByZW1haW5pbmcgbWFyZ2luICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRldiwgY2gsIGZhbHNlLCBcdTAwMjZ0c19jdXIsIE5VTEwpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHQvKiBJZiB0b28gY2xvc2UgdG8gKG9yIHBhc3QpIHRoZSBuZXh0IHJvbGxvdmVyLCB3YWl0IGl0IG91dCAqL1xuK1x0ZGlmZiA9IHRpbWVzcGVjNjRfc3ViKHRzX25leHQsIHRzX2N1cik7XG4rXHRpZiAoZGlmZi50dl9zZWMgXHUwMDNjIDAgfHwgKCFkaWZmLnR2X3NlYyBcdTAwMjZcdTAwMjYgZGlmZi50dl9uc2VjIFx1MDAzYyB0aHJlc2hvbGRfbnMpKSB7XG4rXHRcdGlmICghZGlmZi50dl9zZWMgXHUwMDI2XHUwMDI2IGRpZmYudHZfbnNlYylcbitcdFx0XHRmc2xlZXAoKHVuc2lnbmVkIGxvbmcpZGlmZi50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyArIDEpO1xuK1x0XHR0c19uZXh0LnR2X3NlYysrO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgZGVsdGEgdG8gdGhlIG5leHQtSHogVG9EICovXG4rXHR0c19uZXh0ID0gdGltZXNwZWM2NF9hZGQodHNfbmV4dCwgZGVsdGEpO1xuK1x0aWYgKCF0aW1lc3BlYzY0X3ZhbGlkKFx1MDAyNnRzX25leHQpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIFdyaXRlIGFkanVzdGVkIFRvRCBiYWNrIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2Rfd3JpdGUoemxkZXYsIGNoLCB0c19uZXh0KTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZHlfd2FpdCh6bGRldiwgY2gpO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2NoYW5fZGZfb2Zmc2V0X3NldCAtIHdyaXRlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgdG8gaGFyZHdhcmVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgaW4gMl4tNDggc3RlcHNcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgb2Zmc2V0KVxuK3tcbitcdGludCByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX0RGX09GRlNFVChjaCksIG9mZnNldCk7XG4rXHRpZiAoIXJjKVxuK1x0XHR6bGRldi1cdTAwM2VjaGFuW2NoXS5kZl9vZmZzZXQgPSBvZmZzZXQ7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfY2hhbl90aWVfd3JpdGUgLSBhZGp1c3QgRFBMTCBwaGFzZSB1c2luZyBUSUUgd3JpdGVcbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBkZWx0YV9uczogcGhhc2UgYWRqdXN0bWVudCBpbiBuYW5vc2Vjb25kcyAobXVzdCBiZSB3aXRoaW4gKy0xcylcbisgKlxuKyAqIENvbnZlcnRzIG5hbm9zZWNvbmRzIHRvIFRJRSB1bml0cyAoMC4wMSBwcykgYW5kIHdyaXRlcyBUSUUgZGF0YVxuKyAqIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl90aWVfd3JpdGUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBkZWx0YV9ucylcbit7XG4rXHRzNjQgdGllX2RhdGE7XG4rXHRpbnQgcmM7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkZXYtXHUwMDNldGllX2xvY2spO1xuK1xuK1x0LyogV2FpdCBmb3IgYW55IHByZXZpb3VzIFRJRSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMLFxuK1x0XHRcdFx0ICBaTF9EUExMX1RJRV9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1RJRV9XUl9USU1FT1VUX1VTKTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0LyogQ29udmVydCBucyB0byBUSUUgdW5pdHMgKDAuMDEgcHMgPSAxMF4tMTQgcykgKi9cbitcdHRpZV9kYXRhID0gZGVsdGFfbnMgKiAxMDAwMDBMTDtcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91NDgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9EQVRBKGNoKSwgdGllX2RhdGEpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyYyA9IHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0ssIEJJVChjaCkpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRyZXR1cm4gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX0RQTExfVElFX0NUUkwsXG4rXHRcdFx0XHRaTF9EUExMX1RJRV9DVFJMX09QX1dSKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAgLSBleGVjdXRlIG9uZSBvdXRwdXQgcGhhc2Ugc3RlcCBvcGVyYXRpb25cbisgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcbisgKiBAY2g6IERQTEwgY2hhbm5lbCBpbmRleFxuKyAqIEBvdXRfbWFzazogYml0bWFzayBvZiBvdXRwdXRzIHRvIHN0ZXBcbisgKiBAc3RlcF9jeWNsZXM6IHBoYXNlIHN0ZXAgaW4gc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzXG4rICogQHRvZF9zdGVwOiBhbHNvIHN0ZXAgdGhlIFRvRCBjb3VudGVyXG4rICpcbisgKiBBbGwgbWFza2VkIG91dHB1dHMgbXVzdCB1c2Ugc3ludGhlc2l6ZXJzIG9mIHRoZSBzYW1lIGZyZXF1ZW5jeSBzaW5jZVxuKyAqIHRoZSBzdGVwIHZhbHVlIGlzIGluIHN5bnRoZXNpemVyIGNsb2NrIGN5Y2xlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4raW50IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgICB1MTYgb3V0X21hc2ssIHMzMiBzdGVwX2N5Y2xlcyxcbitcdFx0XHQgICAgYm9vbCB0b2Rfc3RlcClcbit7XG4rXHR1OCBjdHJsO1xuK1x0aW50IHJjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZGV2LVx1MDAzZXBoYXNlX3N0ZXBfbG9jayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcHJldmlvdXMgcGhhc2Ugc3RlcCBvcGVyYXRpb24gdG8gY29tcGxldGUgKi9cbitcdHJjID0gemwzMDczeF9wb2xsX3plcm9fdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLFxuK1x0XHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QLFxuK1x0XHRcdFx0ICBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VUyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MzIoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9EQVRBLFxuK1x0XHRcdCAgICAgICBzdGVwX2N5Y2xlcyk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91MTYoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9NQVNLLCBvdXRfbWFzayk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHJjID0gemwzMDczeF93cml0ZV91OCh6bGRldiwgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX05VTUJFUiwgMSk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfRFBMTCwgY2gpIHxcbitcdCAgICAgICBGSUVMRF9QUkVQKFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1AsXG4rXHRcdFx0ICBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFKTtcbitcdGlmICh0b2Rfc3RlcClcbitcdFx0Y3RybCB8PSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX1RPRF9TVEVQO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfd3JpdGVfdTgoemxkZXYsIFpMX1JFR19PVVRQVVRfUEhBU0VfU1RFUF9DVFJMLCBjdHJsKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX3N0YXRlX3NldCAtIGNvbW1pdCBEUExMIGNoYW5uZWwgc3RhdGUgY2hhbmdlcyB0byBoYXJkd2FyZVxuICAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4X2RldiBzdHJ1Y3R1cmVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmggYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmhcbmluZGV4IGRjOWM2ZDk1YmRlZTc1Li45ZGM1YTNmMTk5MWYxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NoYW4uaFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oXG5AQCAtNSwxMCArNSwxMiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdGRkZWYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicmVncy5oXCJcbiBcbitzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXA7XG4gc3RydWN0IHpsMzA3M3hfZGV2O1xuIFxuIC8qKlxuQEAgLTE2LDYgKzE4LDcgQEAgc3RydWN0IHpsMzA3M3hfZGV2O1xuICAqIEBjdHJsOiBEUExMIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVcbiAgKiBAbW9kZV9yZWZzZWw6IG1vZGUgYW5kIHJlZmVyZW5jZSBzZWxlY3Rpb24gcmVnaXN0ZXIgdmFsdWVcbiAgKiBAcmVmX3ByaW86IHJlZmVyZW5jZSBwcmlvcml0eSByZWdpc3RlcnMgKDQgYml0cyBwZXIgcmVmLCBQL04gcGFja2VkKVxuKyAqIEBvdXRfc3RlcF90aW1lX21hc2s6IG91dHB1dCBzdGVwLXRpbWUgbWFza1xuICAqIEBtb25fc3RhdHVzOiBtb25pdG9yIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEByZWZzZWxfc3RhdHVzOiByZWZlcmVuY2Ugc2VsZWN0aW9uIHN0YXR1cyByZWdpc3RlciB2YWx1ZVxuICAqIEBkZl9vZmZzZXQ6IGZyZXF1ZW5jeSBvZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2UgaW4gMl4tNDggc3RlcHNcbkBAIC0yNiw2ICsyOSw5IEBAIHN0cnVjdCB6bDMwNzN4X2NoYW4ge1xuIFx0XHR1OFx0bW9kZV9yZWZzZWw7XG4gXHRcdHU4XHRyZWZfcHJpb1taTDMwNzNYX05VTV9SRUZTIC8gMl07XG4gXHQpO1xuK1x0c3RydWN0X2dyb3VwKGludiwgLyogSW52YXJpYW50cyAqL1xuK1x0XHR1MTZcdG91dF9zdGVwX3RpbWVfbWFzaztcbitcdCk7XG4gXHRzdHJ1Y3RfZ3JvdXAoc3RhdCxcbiBcdFx0dThcdG1vbl9zdGF0dXM7XG4gXHRcdHU4XHRyZWZzZWxfc3RhdHVzO1xuQEAgLTQyLDYgKzQ4LDIwIEBAIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4LFxuIGludCB6bDMwNzN4X2NoYW5fc3RhdGVfdXBkYXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KTtcbiBpbnQgemwzMDczeF9jaGFuX25jb19tb2RlX3NldChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleCk7XG4gXG4raW50IHpsMzA3M3hfY2hhbl90b2RfcmVhZChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCxcbitcdFx0XHQgIGJvb2wgbmV4dF9oeiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuK1x0XHRcdCAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuK2ludCB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLFxuK1x0XHRcdCAgIHN0cnVjdCB0aW1lc3BlYzY0IHRzKTtcbitpbnQgemwzMDczeF9jaGFuX3RvZF9hZGp1c3Qoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhKTtcbitpbnQgemwzMDczeF9jaGFuX3BoYXNlX3N0ZXAoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsXG4rXHRcdFx0ICAgIHUxNiBvdXRfbWFzaywgczMyIHN0ZXBfY3ljbGVzLCBib29sIHRvZF9zdGVwKTtcbitcbitpbnQgemwzMDczeF9jaGFuX2RmX29mZnNldF9zZXQoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gsIHM2NCBvZmZzZXQpO1xuK1xuK2ludCB6bDMwNzN4X2NoYW5fdGllX3dyaXRlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGNoLCBzNjQgZGVsdGFfbnMpO1xuK1xuIC8qKlxuICAqIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfZ2V0IC0gZ2V0IGNhY2hlZCBkZl9vZmZzZXQgdnMgdHJhY2tlZCByZWZlcmVuY2VcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjAwLDYgKzIyMCwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgemwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2dldChjaGFuKSA9PSBaTF9EUExMX01PREVfUkVGU0VMX01PREVfUkVGTE9DSztcbiB9XG4gXG4rLyoqXG4rICogemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllIC0gY2hlY2sgaWYgY2hhbm5lbCBtb2RlIHN1cHBvcnRzIFRJRSB3cml0ZVxuKyAqIEBjaGFuOiBwb2ludGVyIHRvIGNoYW5uZWwgc3RhdGVcbisgKlxuKyAqIFRJRSB3cml0ZSBpcyBzdXBwb3J0ZWQgaW4gQVVUTyBhbmQgUkVGTE9DSyBtb2RlcyByZWdhcmRsZXNzIG9mIGxvY2sgc3RhdGUuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgVElFIHdyaXRlIGlzIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4pXG4re1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9tb2RlX2lzX2F1dG8oY2hhbikgfHxcbitcdFx0emwzMDczeF9jaGFuX21vZGVfaXNfcmVmbG9jayhjaGFuKTtcbit9XG4rXG4gLyoqXG4gICogemwzMDczeF9jaGFuX2lzX2hvX3JlYWR5IC0gY2hlY2sgaWYgaG9sZG92ZXIgaXMgcmVhZHlcbiAgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG5AQCAtMjMzLDQgKzI2OCwxNyBAQCBzdGF0aWMgaW5saW5lIHU4IHpsMzA3M3hfY2hhbl9yZWZzZWxfcmVmX2dldChjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuKVxuIFx0cmV0dXJuIEZJRUxEX0dFVChaTF9EUExMX1JFRlNFTF9TVEFUVVNfUkVGU0VMLCBjaGFuLVx1MDAzZXJlZnNlbF9zdGF0dXMpO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2NoYW5faXNfb3V0X3N0ZXBwZWQgLSBjaGVjayBpZiBvdXRwdXQgaXMgaW4gc3RlcC10aW1lIG1hc2tcbisgKiBAY2hhbjogcG9pbnRlciB0byBjaGFubmVsIHN0YXRlXG4rICogQG91dDogb3V0cHV0IGluZGV4XG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgb3V0cHV0IGlzIGFmZmVjdGVkIGJ5IHN0ZXAtdGltZSBvcGVyYXRpb25zXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4remwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW4sIHU4IG91dClcbit7XG4rXHRyZXR1cm4gISEoY2hhbi1cdTAwM2VvdXRfc3RlcF90aW1lX21hc2sgXHUwMDI2IEJJVChvdXQpKTtcbit9XG4rXG4gI2VuZGlmIC8qIF9aTDMwNzNYX0NIQU5fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1xuaW5kZXggN2Y1YWZhYWFlNjM0MmYuLmIyZjlmYzk3ZmQxYjY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcbkBAIC0xMDMzLDYgKzEwMzMsMTQgQEAgaW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHQgKiBhbmQvb3IgcG9sbHMgYXJlIHJlcXVpcmVkIHRvIGJlIGRvbmUgYXRvbWljYWxseS5cbiBcdCAqL1xuIFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VtdWx0aW9wX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2VwaGFzZV9zdGVwX2xvY2spO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIHJjLFxuK1x0XHRcdFx0ICAgICBcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxuXCIpO1xuK1x0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXHUwMDNlZGV2LCBcdTAwMjZ6bGRldi1cdTAwM2V0aWVfbG9jayk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVx1MDAzZWRldiwgcmMsXG4gXHRcdFx0XHQgICAgIFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oXG5pbmRleCA3OGRjMjA4ZjNlZWEyYS4uMmRjODM2ZDBjOGY2YjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaFxuQEAgLTI2LDYgKzI2LDEwIEBAIHN0cnVjdCB6bDMwNzN4X2RwbGw7XG4gI2RlZmluZSBaTF9QT0xMX0hXUkVHX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4gI2RlZmluZSBaTF9QT0xMX01CX1RJTUVPVVRfVVNcdFx0KDMwICogVVNFQ19QRVJfTVNFQylcbiAjZGVmaW5lIFpMX1BPTExfUEhBU0VfRVJSX1RJTUVPVVRfVVNcdCg1MCAqIFVTRUNfUEVSX01TRUMpXG4rI2RlZmluZSBaTF9QT0xMX1BIQVNFX1NURVBfVElNRU9VVF9VU1x0KDMwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9USUVfV1JfVElNRU9VVF9VU1x0KDEwMDAgKiBVU0VDX1BFUl9NU0VDKVxuKyNkZWZpbmUgWkxfUE9MTF9UT0RfUkRfVElNRU9VVF9VU1x0KDMwICogVVNFQ19QRVJfTVNFQylcbisjZGVmaW5lIFpMX1BPTExfVE9EX1dSX1RJTUVPVVRfVVNcdCgxMDAwICogVVNFQ19QRVJfTVNFQylcbiBcbiBlbnVtIHpsMzA3M3hfZmxhZ3Mge1xuIFx0WkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyX0JJVCxcbkBAIC01NSw2ICs1OSw4IEBAIHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB7XG4gICogQHJlZ21hcDogcmVnbWFwIHRvIGFjY2VzcyBkZXZpY2UgcmVnaXN0ZXJzXG4gICogQGluZm86IGRldGVjdGVkIGNoaXAgaW5mb1xuICAqIEBtdWx0aW9wX2xvY2s6IHRvIHNlcmlhbGl6ZSBtdWx0aXBsZSByZWdpc3RlciBvcGVyYXRpb25zXG4rICogQHRpZV9sb2NrOiB0byBzZXJpYWxpemUgVElFIHdyaXRlIG9wZXJhdGlvbnNcbisgKiBAcGhhc2Vfc3RlcF9sb2NrOiB0byBzZXJpYWxpemUgb3V0cHV0IHBoYXNlIHN0ZXAgb3BlcmF0aW9uc1xuICAqIEByZWY6IGFycmF5IG9mIGlucHV0IHJlZmVyZW5jZXMnIGludmFyaWFudHNcbiAgKiBAb3V0OiBhcnJheSBvZiBvdXRzJyBpbnZhcmlhbnRzXG4gICogQHN5bnRoOiBhcnJheSBvZiBzeW50aHMnIGludmFyaWFudHNcbkBAIC03MSw2ICs3Nyw4IEBAIHN0cnVjdCB6bDMwNzN4X2RldiB7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdFx0KnJlZ21hcDtcbiBcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mb1x0KmluZm87XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRtdWx0aW9wX2xvY2s7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHR0aWVfbG9jaztcbitcdHN0cnVjdCBtdXRleFx0XHRcdHBoYXNlX3N0ZXBfbG9jaztcbiBcbiBcdC8qIEludmFyaWFudHMgKi9cbiBcdHN0cnVjdCB6bDMwNzN4X3JlZlx0cmVmW1pMMzA3M1hfTlVNX1JFRlNdO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuaW5kZXggZDkxZjUyYjU4ZWFlMzQuLjdjMTFkZTM1ODIxYWVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yLDYgKzIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5AQCAtMTQsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuIFxuQEAgLTQyLDYgKzQ0LDcgQEBcbiAgKiBAcGhhc2Vfb2Zmc2V0OiBsYXN0IHNhdmVkIHBpbiBwaGFzZSBvZmZzZXRcbiAgKiBAZnJlcV9vZmZzZXQ6IGxhc3Qgc2F2ZWQgZnJhY3Rpb25hbCBmcmVxdWVuY3kgb2Zmc2V0XG4gICogQG1lYXN1cmVkX2ZyZXE6IGxhc3Qgc2F2ZWQgbWVhc3VyZWQgZnJlcXVlbmN5XG4rICogQHBlcm91dF9pZHg6IFBUUCBwZXJvdXQgY2hhbm5lbCBpbmRleCwgb3IgLTEgaWYgbm90IHBlcm91dC1lbGlnaWJsZVxuICAqL1xuIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG5AQCAtNTksNiArNjIsNyBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiB7XG4gXHRzNjRcdFx0XHRwaGFzZV9vZmZzZXQ7XG4gXHRzNjRcdFx0XHRmcmVxX29mZnNldDtcbiBcdHUzMlx0XHRcdG1lYXN1cmVkX2ZyZXE7XG4rXHRzOFx0XHRcdHBlcm91dF9pZHg7XG4gfTtcbiBcbiAvKlxuQEAgLTkzNiwyMSArOTQwLDE3IEBAIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiB9XG4gXG4gc3RhdGljIGludFxuLXpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi1cdFx0XHRcdCAgICAgIHZvaWQgKnBpbl9wcml2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLVx0XHRcdFx0ICAgICAgdm9pZCAqZHBsbF9wcml2LCB1NjQgZnJlcXVlbmN5LFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK19femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4rXHRcdFx0XHRcdHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4rXHRcdFx0XHRcdHU2NCBmcmVxdWVuY3kpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuIFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4tXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluID0gcGluX3ByaXY7XG4gXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4gXHR1MzIgbmV3X2Rpdiwgc3ludGhfZnJlcTtcbiBcdHN0cnVjdCB6bDMwNzN4X291dCBvdXQ7XG4gXHR1OCBvdXRfaWQ7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXG4gXHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuIFx0b3V0ID0gKnpsMzA3M3hfb3V0X3N0YXRlX2dldCh6bGRldiwgb3V0X2lkKTtcbkBAIC0xMDExLDYgKzEwMTEsMjEgQEAgemwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuIFx0cmV0dXJuIHpsMzA3M3hfb3V0X3N0YXRlX3NldCh6bGRldiwgb3V0X2lkLCBcdTAwMjZvdXQpO1xuIH1cbiBcbitzdGF0aWMgaW50XG4remwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxuK1x0XHRcdFx0ICAgICAgdm9pZCAqcGluX3ByaXYsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4rXHRcdFx0XHQgICAgICB2b2lkICpkcGxsX3ByaXYsIHU2NCBmcmVxdWVuY3ksXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gZHBsbF9wcml2O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBfX3psMzA3M3hfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQoemxkcGxsLCBwaW5fcHJpdixcbitcdFx0XHRcdFx0XHQgICAgICAgZnJlcXVlbmN5KTtcbit9XG4rXG4gc3RhdGljIGludFxuIHpsMzA3M3hfZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdFx0XHRcdFx0IHZvaWQgKnBpbl9wcml2LFxuQEAgLTE2MDgsNiArMTYyMyw3IEBAIHpsMzA3M3hfZHBsbF9waW5fYWxsb2Moc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCBlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXIsXG4gXHRwaW4tXHUwMDNlZHBsbCA9IHpsZHBsbDtcbiBcdHBpbi1cdTAwM2VkaXIgPSBkaXI7XG4gXHRwaW4tXHUwMDNlaWQgPSBpZDtcbitcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gLTE7XG4gXG4gXHRyZXR1cm4gcGluO1xuIH1cbkBAIC0xNjI2LDYgKzE2NDIsNDQgQEAgemwzMDczeF9kcGxsX3Bpbl9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4pXG4gXHRrZnJlZShwaW4pO1xuIH1cbiBcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcGluX2lzX3Blcm91dCAtIGNoZWNrIGlmIG91dHB1dCBwaW4gaXMgcGVyb3V0LWVsaWdpYmxlXG4rICogQHBpbjogRFBMTCBwaW4gdG8gY2hlY2tcbisgKiBAcHJvcHM6IHBpbiBwcm9wZXJ0aWVzIChhbHJlYWR5IGZldGNoZWQgYnkgY2FsbGVyKVxuKyAqXG4rICogQW4gb3V0cHV0IHBpbiBpcyBlbGlnaWJsZSBmb3IgUFRQIHBlcmlvZGljIG91dHB1dCBpZiBpdCBpcyBzaW5nbGUtZW5kZWRcbisgKiAobm90IGRpZmZlcmVudGlhbCkgYW5kIHN1cHBvcnRzIDEgSHogaW4gaXRzIGZyZXF1ZW5jeSBsaXN0LlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIGVsaWdpYmxlLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgYm9vbFxuK3psMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IHpsMzA3M3hfcGluX3Byb3BzICpwcm9wcylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBwaW4tXHUwMDNlZHBsbDtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXHR1OCBvdXRfaWQ7XG4rXHRpbnQgaTtcbitcbitcdGlmICh6bDMwNzN4X2RwbGxfaXNfaW5wdXRfcGluKHBpbikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG91dF9pZCA9IHpsMzA3M3hfb3V0cHV0X3Bpbl9vdXRfZ2V0KHBpbi1cdTAwM2VpZCk7XG4rXHRpZiAoemwzMDczeF9kZXZfb3V0X2lzX2RpZmYoemxkcGxsLVx1MDAzZWRldiwgb3V0X2lkKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX2lzX291dF9zdGVwcGVkKGNoYW4sIG91dF9pZCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRfbnVtOyBpKyspIHtcbitcdFx0aWYgKHByb3BzLVx1MDAzZWRwbGxfcHJvcHMuZnJlcV9zdXBwb3J0ZWRbaV0ubWluID09IDEpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qKlxuICAqIHpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIHBpblxuICAqIEBwaW46IHBvaW50ZXIgdG8gRFBMTCBwaW5cbkBAIC0xNjY3LDYgKzE3MjEsOCBAQCB6bDMwNzN4X2RwbGxfcGluX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpwaW4sIHUzMiBpbmRleClcbiBcdFx0aWYgKHBpbi1cdTAwM2VwcmlvID09IFpMX0RQTExfUkVGX1BSSU9fTk9ORSlcbiBcdFx0XHQvKiBDbGFtcCBwcmlvIHRvIG1heCB2YWx1ZSAqL1xuIFx0XHRcdHBpbi1cdTAwM2VwcmlvID0gWkxfRFBMTF9SRUZfUFJJT19NQVg7XG4rXHR9IGVsc2UgaWYgKHpsMzA3M3hfZHBsbF9waW5faXNfcGVyb3V0KHBpbiwgcHJvcHMpKSB7XG4rXHRcdHBpbi1cdTAwM2VwZXJvdXRfaWR4ID0gemxkcGxsLVx1MDAzZXB0cF9pbmZvLm5fcGVyX291dCsrO1xuIFx0fVxuIFxuIFx0LyogQ3JlYXRlIG9yIGdldCBleGlzdGluZyBEUExMIHBpbiAqL1xuQEAgLTE4OTcsNiArMTk1Myw4IEBAIHpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbiBcdHU4IGlkLCBpbmRleDtcbiBcdGludCByYztcbiBcbitcdHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uX3Blcl9vdXQgPSAwO1xuK1xuIFx0LyogUHJvY2VzcyBpbnB1dCBwaW5zICovXG4gXHRmb3IgKGluZGV4ID0gMDsgaW5kZXggXHUwMDNjIFpMMzA3M1hfTlVNX1BJTlM7IGluZGV4KyspIHtcbiBcdFx0LyogRmlyc3QgaW5wdXQgcGlucyBhbmQgdGhlbiBvdXRwdXQgcGlucyAqL1xuQEAgLTIyODAsNDUgKzIzMzgsNDQ3IEBAIHpsMzA3M3hfZHBsbF9pbml0X2ZpbmVfcGhhc2VfYWRqdXN0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuKy8qIE1heGltdW0gZnJlcXVlbmN5IGFkanVzdG1lbnQ6ICstMSUgb2Ygbm9taW5hbCBpbiBwcGIgKi9cbisjZGVmaW5lIFpMMzA3M1hfRFBMTF9QVFBfTUFYX0FESlx0MTAwMDAwMDBcbitcbiAvKipcbi0gKiB6bDMwNzN4X2RwbGxfYWxsb2MgLSBhbGxvY2F0ZSBEUExMIGRldmljZVxuLSAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuLSAqIEBjaDogRFBMTCBjaGFubmVsIG51bWJlclxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfZ2V0dGltZXg2NCAtIHJlYWQgY3VycmVudCB0aW1lIGZyb20gVG9EIGNvdW50ZXJzXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHRzOiB0aW1lc3BlYyB0byBzdG9yZSBjdXJyZW50IHRpbWVcbisgKiBAc3RzOiBvcHRpb25hbCBzeXN0ZW0gdGltZXN0YW1wIHBhaXIgZm9yIGNyb3NzLXRpbWVzdGFtcGluZ1xuICAqXG4tICogQWxsb2NhdGVzIERQTEwgZGV2aWNlIHN0cnVjdHVyZSBmb3IgZ2l2ZW4gRFBMTCBjaGFubmVsLlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2dldHRpbWV4NjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl90b2RfcmVhZCh6bGRwbGwtXHUwMDNlZGV2LCB6bGRwbGwtXHUwMDNlaWQsIGZhbHNlLCB0cywgc3RzKTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9zZXR0aW1lNjQgLSBzZXQgVG9EIGNvdW50ZXJzIHRvIGdpdmVuIHRpbWVcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAdHM6IHRpbWVzcGVjIHdpdGggdGltZSB0byBzZXRcbiAgKlxuLSAqIFJldHVybjogcG9pbnRlciB0byBEUExMIGRldmljZSBvbiBzdWNjZXNzLCBlcnJvciBwb2ludGVyIG9uIGVycm9yXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbiAgKi9cbi1zdHJ1Y3QgemwzMDczeF9kcGxsICpcbi16bDMwNzN4X2RwbGxfYWxsb2Moc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggY2gpXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4ge1xuLVx0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuIFxuLVx0emxkcGxsID0ga3phbGxvY19vYmooKnpsZHBsbCk7XG4tXHRpZiAoIXpsZHBsbClcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuLVx0emxkcGxsLVx1MDAzZWRldiA9IHpsZGV2O1xuLVx0emxkcGxsLVx1MDAzZWlkID0gY2g7XG4tXHRtdXRleF9pbml0KFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zKTtcbitcdHJldHVybiB6bDMwNzN4X2NoYW5fdG9kX3dyaXRlKHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgKnRzKTtcbit9XG4gXG4tXHRyZXR1cm4gemxkcGxsO1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZV9waGFzZV9zdGVwIC0gYWRqdXN0IHN1Yi1zZWNvbmQgdGltZSB2aWEgcGhhc2Ugc3RlcFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbFxuKyAqIEBkZWx0YTogdGltZSBhZGp1c3RtZW50IGluIG5hbm9zZWNvbmRzIChtdXN0IGJlIHdpdGhpbiAoLU5TRUNfUEVSX1NFQyxcbisgKiAgICAgICAgIE5TRUNfUEVSX1NFQykpXG4rICpcbisgKiBVc2VzIHRoZSBvdXRwdXQgcGhhc2Ugc3RlcCBtZWNoYW5pc20gd2l0aCB0b2Rfc3RlcD0xIHRvIGFkanVzdCBib3RoXG4rICogdGhlIG91dHB1dCBjbG9jayBwaGFzZSBhbmQgdGhlIFRvRCBjb3VudGVyIHNpbXVsdGFuZW91c2x5LiBUaGlzIGtlZXBzXG4rICogb3V0cHV0cyBhbmQgVG9EIGNvaGVyZW50LiBPbmx5IHZhbGlkIGZvciBOQ08uXG4rICpcbisgKiBPdXRwdXRzIGFyZSBncm91cGVkIGJ5IHN5bnRoZXNpemVyIHNpbmNlIHRoZSBwaGFzZSBzdGVwIHZhbHVlIGlzIGluXG4rICogc3ludGhlc2l6ZXIgY2xvY2sgY3ljbGVzLiBUaGUgZmlyc3Qgc3ludGggZ3JvdXAgd2l0aCBlbmFibGVkIG91dHB1dHNcbisgKiB1c2VzIHRvZF9zdGVwIHRvIGFkanVzdCBib3RoIG91dHB1dHMgYW5kIHRoZSBUb0QgY291bnRlci4gUmVtYWluaW5nXG4rICogZ3JvdXBzIHN0ZXAgb3V0cHV0cyBvbmx5LiBJZiBubyBzeW50aCBoYXMgZW5hYmxlZCBvdXRwdXRzLCB0aGUgVG9EXG4rICogY291bnRlciBpcyBzdGVwcGVkIGFsb25lIHVzaW5nIGFuIGVtcHR5IG91dHB1dCBtYXNrICh0aGUgRlcgdXNlcyB0aGVcbisgKiBsb3dlc3QtSUQgc3ludGgncyBwZXJpb2QgZm9yIHRoZSBjb252ZXJzaW9uKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBubyBzeW50aHMgYXZhaWxhYmxlLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludCB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcChzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsXG4rXHRcdFx0XHRcdCAgICAgICBzNjQgZGVsdGEpXG4re1xuK1x0dTE2IHN5bnRoX21hc2tbWkwzMDczWF9OVU1fU1lOVEhTXSA9IHt9O1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9zeW50aCAqc3ludGg7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbjtcbitcdHUzMiBmaXJzdF9zeW50aF9mcmVxID0gMDtcbitcdGJvb2wgdG9kX3N0ZXBwZWQgPSBmYWxzZTtcbitcdHMzMiBzdGVwX2N5Y2xlcztcbitcdHUzMiBzeW50aF9mcmVxO1xuK1x0aW50IHJjO1xuK1x0dTggaTtcbitcbitcdGNoYW4gPSB6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuK1xuK1x0LyogQnVpbGQgcGVyLXN5bnRoIG91dHB1dCBtYXNrcyBmcm9tIHJlZ2lzdGVyZWQgb3V0cHV0IHBpbnMgKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnkocGluLCBcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucywgbGlzdCkge1xuK1x0XHR1OCBvdXRfaWQsIHN5bnRoX2lkO1xuK1xuK1x0XHRpZiAoemwzMDczeF9kcGxsX2lzX2lucHV0X3BpbihwaW4pKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRvdXRfaWQgPSB6bDMwNzN4X291dHB1dF9waW5fb3V0X2dldChwaW4tXHUwMDNlaWQpO1xuK1xuK1x0XHRpZiAoIXpsMzA3M3hfY2hhbl9pc19vdXRfc3RlcHBlZChjaGFuLCBvdXRfaWQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzeW50aF9pZCA9IHpsMzA3M3hfZGV2X291dF9zeW50aF9nZXQoemxkZXYsIG91dF9pZCk7XG4rXHRcdGlmIChzeW50aF9pZCBcdTAwM2U9IFpMMzA3M1hfTlVNX1NZTlRIUykge1xuK1x0XHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldiwgXCJVbmV4cGVjdGVkIHN5bnRoIGlkIGZvciBPVVQldVxcblwiLFxuK1x0XHRcdFx0IG91dF9pZCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0c3ludGhfbWFza1tzeW50aF9pZF0gfD0gQklUKG91dF9pZCk7XG4rXHR9XG4rXG4rXHQvKiBQcm9jZXNzIGVhY2ggc3ludGggZ3JvdXAgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFpMMzA3M1hfTlVNX1NZTlRIUzsgaSsrKSB7XG4rXHRcdHN5bnRoID0gemwzMDczeF9zeW50aF9zdGF0ZV9nZXQoemxkZXYsIGkpO1xuK1x0XHRpZiAoIXpsMzA3M3hfc3ludGhfaXNfZW5hYmxlZChzeW50aCkgfHxcbitcdFx0ICAgIHpsMzA3M3hfc3ludGhfZHBsbF9nZXQoc3ludGgpICE9IHpsZHBsbC1cdTAwM2VpZClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c3ludGhfZnJlcSA9IHpsMzA3M3hfc3ludGhfZnJlcV9nZXQoc3ludGgpO1xuK1xuK1x0XHQvKiBSZW1lbWJlciBsb3dlc3QtSUQgc3ludGggZnJlcSBmb3IgVG9ELW9ubHkgZmFsbGJhY2sgKi9cbitcdFx0aWYgKCFmaXJzdF9zeW50aF9mcmVxKVxuK1x0XHRcdGZpcnN0X3N5bnRoX2ZyZXEgPSBzeW50aF9mcmVxO1xuK1xuK1x0XHRpZiAoIXN5bnRoX21hc2tbaV0pXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIFNhZmUgZm9yIHMzMjogbWF4IHN5bnRoIGZyZXEgaXMgNzUwIE1IeiAqL1xuK1x0XHRzdGVwX2N5Y2xlcyA9IGRpdl9zNjQoZGVsdGEgKiBzeW50aF9mcmVxLCBOU0VDX1BFUl9TRUMpO1xuK1xuK1x0XHRyYyA9IHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHRcdCAgICAgc3ludGhfbWFza1tpXSwgc3RlcF9jeWNsZXMsXG4rXHRcdFx0XHRcdCAgICAgIXRvZF9zdGVwcGVkKTtcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0aWYgKHRvZF9zdGVwcGVkKSB7XG4rXHRcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCBcIlBhcnRpYWwgcGhhc2Ugc3RlcCBmYWlsdXJlXFxuXCIpO1xuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0fVxuK1x0XHRcdHJldHVybiByYztcbitcdFx0fVxuK1x0XHR0b2Rfc3RlcHBlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoIWZpcnN0X3N5bnRoX2ZyZXEpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qIE5vIGVuYWJsZWQgb3V0cHV0cyBmb3VuZDsgc3RlcCBUb0QgY291bnRlciBvbmx5IHVzaW5nIHRoZVxuK1x0ICogbG93ZXN0LUlEIHN5bnRoJ3MgcGVyaW9kIChlbXB0eSBvdXRwdXQgbWFzaykuXG4rXHQgKi9cbitcdGlmICghdG9kX3N0ZXBwZWQpIHtcbitcdFx0c3RlcF9jeWNsZXMgPSBkaXZfczY0KGRlbHRhICogZmlyc3Rfc3ludGhfZnJlcSwgTlNFQ19QRVJfU0VDKTtcbitcdFx0cmV0dXJuIHpsMzA3M3hfY2hhbl9waGFzZV9zdGVwKHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBzdGVwX2N5Y2xlcywgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG4tICogemwzMDczeF9kcGxsX2ZyZWUgLSBmcmVlIERQTEwgZGV2aWNlXG4tICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGp0aW1lIC0gYWRqdXN0IFBUUCBjbG9jayB0aW1lXG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQGRlbHRhOiB0aW1lIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbiAgKlxuLSAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICogRm9yIE5DTywgbGFyZ2UgZGVsdGFzIChcdTAwM2U9IDEgc2Vjb25kKSBhcmUgc3BsaXQgaW50byBhIFRvRFxuKyAqIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciB0aGUgc2Vjb25kcyBwYXJ0IGFuZCBhbiBvdXRwdXQgcGhhc2Ugc3RlcCBmb3JcbisgKiB0aGUgc3ViLXNlY29uZCByZW1haW5kZXIuIFN1Yi1zZWNvbmQgZGVsdGFzIHVzZSBwaGFzZSBzdGVwIGRpcmVjdGx5LFxuKyAqIGZhbGxpbmcgYmFjayB0byBUb0QgcmVhZC1tb2RpZnktd3JpdGUgaWYgcGhhc2Ugc3RlcCBpcyB1bmF2YWlsYWJsZS5cbisgKiBJbiBBVVRPL1JFRkxPQ0sgbW9kZXMsIGxhcmdlIGRlbHRhcyBhcmUgc3BsaXQgaW50byBUb0RcbisgKiByZWFkLW1vZGlmeS13cml0ZSBmb3Igc2Vjb25kcyBhbmQgVElFIHdyaXRlIGZvciB0aGUgc3ViLXNlY29uZFxuKyAqIHJlbWFpbmRlci4gU3ViLXNlY29uZCBkZWx0YXMgdXNlIFRJRSB3cml0ZSBkaXJlY3RseS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBcdTAwM2MwIG9uIGVycm9yXG4gICovXG4tdm9pZFxuLXpsMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHM2NCBkZWx0YSlcbiB7XG4tXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1x0c3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCB6bDMwNzN4X2RwbGwsXG4rXHRcdFx0XHRcdFx0ICAgcHRwX2luZm8pO1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0Ym9vbCBzZWNfYWRqdXN0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuK1x0aW50IHJjO1xuIFxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4tXHRrZnJlZSh6bGRwbGwpO1xuK1x0aWYgKCFkZWx0YSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0LyogTW9kZXMgd2l0aG91dCBwaGFzZSBzdGVwIG9yIFRJRSB1c2UgcGxhaW4gVG9EIGFkanVzdCAqL1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRpZiAoIXpsMzA3M3hfY2hhbl9tb2RlX2lzX25jbyhjaGFuKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCxcbitcdFx0XHRcdFx0ICAgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIFNwbGl0IG9mZiBzZWNvbmRzIHZpYSBUb0QgcmVhZC1tb2RpZnktd3JpdGUgc28gdGhlIHN1Yi1zZWNvbmRcbitcdCAqIHJlbWFpbmRlciBjYW4gYmUgYXBwbGllZCB0aHJvdWdoIHRoZSBvdXRwdXQtY29oZXJlbnQgbWVjaGFuaXNtXG4rXHQgKiAocGhhc2Ugc3RlcCBvciBUSUUgd3JpdGUpLlxuK1x0ICovXG4rXHRpZiAoYWJzKGRlbHRhKSBcdTAwM2U9IE5TRUNfUEVSX1NFQykge1xuK1x0XHRzMzIgcmVtYWluZGVyO1xuK1xuK1x0XHR0cy50dl9zZWMgPSBkaXZfczY0X3JlbShkZWx0YSwgTlNFQ19QRVJfU0VDLCBcdTAwMjZyZW1haW5kZXIpO1xuK1x0XHR0cy50dl9uc2VjID0gMDtcbitcdFx0ZGVsdGEgPSByZW1haW5kZXI7XG4rXG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RvZF9hZGp1c3QoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCwgdHMpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1xuK1x0XHRzZWNfYWRqdXN0ZWQgPSB0cnVlO1xuK1xuK1x0XHQvKiBObyBzdWItc2Vjb25kIHJlbWFpbmRlciwgZG9uZSAqL1xuK1x0XHRpZiAoIWRlbHRhKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0LyogQXBwbHkgc3ViLXNlY29uZCBkZWx0YSB2aWEgcGhhc2Ugc3RlcCAoTkNPKSBvciBUSUUgd3JpdGUgKi9cbitcdGlmICh6bDMwNzN4X2NoYW5fbW9kZV9pc19uY28oY2hhbikpIHtcbitcdFx0cmMgPSB6bDMwNzN4X2RwbGxfcHRwX2FkanRpbWVfcGhhc2Vfc3RlcCh6bGRwbGwsIGRlbHRhKTtcbitcdFx0aWYgKCFyYylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBQaGFzZSBzdGVwIG9yIFRJRSB3cml0ZSBmYWlsZWQsIGZhbGwgYmFjayB0byBUb0QgYWRqdXN0ICovXG4rXHRyYyA9IHpsMzA3M3hfY2hhbl90b2RfYWRqdXN0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsXG4rXHRcdFx0XHQgICAgIG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpKTtcbitcbitcdC8qIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IGJvdGggcGhhc2Ugc3RlcC9USUUgd3JpdGUgYW5kIGZhbGxiYWNrXG4rXHQgKiBUb0QgYWRqdXN0IGZhaWwgYWZ0ZXIgc2Vjb25kcyB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCByZXR1cm5cbitcdCAqIHN1Y2Nlc3MgdG8gcHJldmVudCB0aGUgUFRQIHNlcnZvIGZyb20gcmV0cnlpbmcgdGhlIGZ1bGwgZGVsdGEgYW5kXG4rXHQgKiBhcHBseWluZyBzZWNvbmRzIGFnYWluLiBUaGUgc3ViLXNlY29uZCByZXNpZHVhbCB3aWxsIHNlbGYtY29ycmVjdFxuK1x0ICogaW4gdGhlIG5leHQgc2Vydm8gY3ljbGUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwMjZcdTAwMjYgc2VjX2FkanVzdGVkKSB7XG4rXHRcdGRldl93YXJuKHpsZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTdWItc2Vjb25kIGFkanVzdG1lbnQgZmFpbGVkIGFmdGVyIHNlY29uZHMgYXBwbGllZFxcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSAtIGFkanVzdCBQVFAgY2xvY2sgZnJlcXVlbmN5XG4rICogQGluZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHNjYWxlZF9wcG06IGZyZXF1ZW5jeSBhZGp1c3RtZW50IGluIHNjYWxlZCBwcG0gKHBwbSAqIDJeMTYpXG4rICpcbisgKiBPbmx5IHN1cHBvcnRlZCBmb3IgTkNPLiBXcml0ZXMgdGhlIGRlbHRhIGZyZXF1ZW5jeSBvZmZzZXQgcmVnaXN0ZXIuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgTkNPIHBpbiBpcyBub3QgY29ubmVjdGVkLCBcdTAwM2MwIG9uIGVycm9yXG4rICovXG4rc3RhdGljIGludFxuK3psMzA3M3hfZHBsbF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGxvbmcgc2NhbGVkX3BwbSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRjb25zdCBzdHJ1Y3QgemwzMDczeF9jaGFuICpjaGFuO1xuK1x0czY0IG9mZnNldDtcbitcbitcdC8qIENvbnZlcnQgc2NhbGVkX3BwbSB0byBkZl9vZmZzZXQgaW4gMl4tNDggc3RlcHM6XG4rXHQgKiAgIGRmX29mZnNldCA9IC0oc2NhbGVkX3BwbSAqIDJeMzIpIC8gMTBeNlxuK1x0ICpcbitcdCAqIFNpbXBsaWZ5IHRvIGF2b2lkIG92ZXJmbG93OlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiAyXjI2KSAvIDVeNlxuK1x0ICogICBkZl9vZmZzZXQgPSAtKHNjYWxlZF9wcG0gKiA2NzEwODg2NCkgLyAxNTYyNVxuK1x0ICovXG4rXHRvZmZzZXQgPSAtZGl2X3M2NCgoczY0KXNjYWxlZF9wcG0gKiA2NzEwODg2NExMLCAxNTYyNSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0Y2hhbiA9IHpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkcGxsLVx1MDAzZWRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfaXNfbmNvKGNoYW4pKVxuK1x0XHRyZXR1cm4gc2NhbGVkX3BwbSA/IC1FT1BOT1RTVVBQIDogMDtcbitcdGlmIChvZmZzZXQgPT0gY2hhbi1cdTAwM2VkZl9vZmZzZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHpsMzA3M3hfY2hhbl9kZl9vZmZzZXRfc2V0KHpsZHBsbC1cdTAwM2VkZXYsIHpsZHBsbC1cdTAwM2VpZCwgb2Zmc2V0KTtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZSAtIGFkanVzdCBQVFAgY2xvY2sgcGhhc2VcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAZGVsdGE6IHBoYXNlIGFkanVzdG1lbnQgaW4gbmFub3NlY29uZHNcbisgKlxuKyAqIE9ubHkgc3VwcG9ydGVkIGluIEFVVE8gYW5kIFJFRkxPQ0sgbW9kZXMuIFVzZXMgVElFIHdyaXRlIGZvclxuKyAqIG5hbm9zZWNvbmQgcmVzb2x1dGlvbiBwaGFzZSBhZGp1c3RtZW50LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FT1BOT1RTVVBQIGlmIG1vZGUgZG9lc24ndCBzdXBwb3J0IFRJRSwgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9hZGpwaGFzZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIHMzMiBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2ID0gemxkcGxsLVx1MDAzZWRldjtcbitcdGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoYW4gKmNoYW47XG4rXG4rXHRpZiAoIWRlbHRhKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXG4rXHRjaGFuID0gemwzMDczeF9jaGFuX3N0YXRlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdGlmICghemwzMDczeF9jaGFuX21vZGVfc3VwcG9ydHNfdGllKGNoYW4pKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gemwzMDczeF9jaGFuX3RpZV93cml0ZSh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBkZWx0YSk7XG4rfVxuK1xuK3N0YXRpYyBzMzJcbit6bDMwNzN4X2RwbGxfcHRwX2dldG1heHBoYXNlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyBfX2Fsd2F5c191bnVzZWQpXG4re1xuK1x0LyogSFcgbGltaXRzIFRJRSB3cml0ZSB0byArLTEgc2Vjb25kLiBSZXR1cm4gdGhlIGNvbnN0YW50IEhXXG4rXHQgKiBsaW1pdCBhbmQgbGV0IGFkanBoYXNlIGhhbmRsZSBtb2RlLXNwZWNpZmljIGNoZWNrcy5cbitcdCAqL1xuK1x0cmV0dXJuIE5TRUNfUEVSX1NFQyAtIDE7XG4rfVxuK1xuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluIC0gZmluZCBwaW4gYnkgcGVyb3V0IGNoYW5uZWwgaW5kZXhcbisgKiBAemxkcGxsOiBEUExMIGNoYW5uZWxcbisgKiBAaWR4OiBwZXJvdXQgY2hhbm5lbCBpbmRleCB0byBmaW5kXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIHBpbiwgb3IgTlVMTCBpZiBub3QgZm91bmRcbisgKi9cbitzdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKlxuK3psMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgaW50IGlkeClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwaW4sIFx1MDAyNnpsZHBsbC1cdTAwM2VwaW5zLCBsaXN0KSB7XG4rXHRcdGlmIChwaW4tXHUwMDNlcGVyb3V0X2lkeCA9PSBpZHgpXG4rXHRcdFx0cmV0dXJuIHBpbjtcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIFBUUCBjbG9jayBmdW5jdGlvbnNcbisgKiBAaW5mbzogUFRQIGNsb2NrIGluZm9cbisgKiBAcnE6IHRoZSByZXF1ZXN0ZWQgY2xvY2sgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnNcbisgKiBAb246IHRydWUgdG8gZW5hYmxlLCBmYWxzZSB0byBkaXNhYmxlXG4rICpcbisgKiBIYW5kbGVzIFBUUF9DTEtfUkVRX1BFUk9VVCByZXF1ZXN0cy4gT25seSAxUFBTIChwZXJpb2QgPSAxcykgaXMgc3VwcG9ydGVkLlxuKyAqIE9uIGVuYWJsZSwgY29uZmlndXJlcyB0aGUgb3V0cHV0IGRpdmlkZXIgZm9yIDEgSHouIE9uIGRpc2FibGUsIGRvZXMgbm90aGluZ1xuKyAqIGFzIHRoZSBzaWduYWwgaXMgbm90IGRpc2FibGVkLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYzAgb24gZXJyb3JcbisgKi9cbitzdGF0aWMgaW50IHpsMzA3M3hfZHBsbF9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyxcbitcdFx0XHRcdCAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwgPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IHpsMzA3M3hfZHBsbCxcbitcdFx0XHRcdFx0XHQgICBwdHBfaW5mbyk7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluO1xuK1x0dW5zaWduZWQgaW50IGlkeDtcbitcdGludCByYztcbitcbitcdGlmIChycS1cdTAwM2V0eXBlICE9IFBUUF9DTEtfUkVRX1BFUk9VVClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0aWR4ID0gcnEtXHUwMDNlcGVyb3V0LmluZGV4O1xuK1x0aWYgKGlkeCBcdTAwM2U9IGluZm8tXHUwMDNlbl9wZXJfb3V0KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qIFRvZ2dsaW5nIG91dHB1dCBwaW5zIGNhbiBwcm9kdWNlIHJ1bnQgcHVsc2VzLCBzbyBkaXNhYmxlXG4rXHQgKiBpcyBhIG5vLW9wLlxuK1x0ICovXG4rXHRpZiAoIW9uKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIE9ubHkgYWNjZXB0IGV4YWN0bHkgMVBQUyAocGVyaW9kLnNlYyA9PSAxLCBuc2VjID09IDApICovXG4rXHRpZiAocnEtXHUwMDNlcGVyb3V0LnBlcmlvZC5zZWMgIT0gMSB8fCBycS1cdTAwM2VwZXJvdXQucGVyaW9kLm5zZWMgIT0gMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcbitcdHBpbiA9IHpsMzA3M3hfZHBsbF9wdHBfcGVyb3V0X2ZpbmRfcGluKHpsZHBsbCwgaWR4KTtcbitcdGlmICghcGluKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogQWxyZWFkeSBhdCAxIEh6LCBub3RoaW5nIHRvIGRvICovXG4rXHRpZiAoemwzMDczeF9kZXZfb3V0cHV0X3Bpbl9mcmVxX2dldCh6bGRwbGwtXHUwMDNlZGV2LCBwaW4tXHUwMDNlaWQpID09IDEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyYyA9IF9femwzMDczeF9kcGxsX291dHB1dF9waW5fZnJlcXVlbmN5X3NldCh6bGRwbGwsIHBpbiwgMSk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKCFyYylcbitcdFx0ZHBsbF9waW5fY2hhbmdlX250ZihwaW4tXHUwMDNlZHBsbF9waW4pO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHB0cF9jbG9ja19pbmZvIHpsMzA3M3hfZHBsbF9wdHBfY2xvY2tfaW5mbyA9IHtcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK1x0Lm1heF9hZGpcdD0gWkwzMDczWF9EUExMX1BUUF9NQVhfQURKLFxuK1x0LmdldHRpbWV4NjRcdD0gemwzMDczeF9kcGxsX3B0cF9nZXR0aW1leDY0LFxuK1x0LnNldHRpbWU2NFx0PSB6bDMwNzN4X2RwbGxfcHRwX3NldHRpbWU2NCxcbitcdC5hZGp0aW1lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqdGltZSxcbitcdC5hZGpmaW5lXHQ9IHpsMzA3M3hfZHBsbF9wdHBfYWRqZmluZSxcbitcdC5hZGpwaGFzZVx0PSB6bDMwNzN4X2RwbGxfcHRwX2FkanBoYXNlLFxuK1x0LmdldG1heHBoYXNlXHQ9IHpsMzA3M3hfZHBsbF9wdHBfZ2V0bWF4cGhhc2UsXG4rXHQuZW5hYmxlXHRcdD0gemwzMDczeF9kcGxsX3B0cF9lbmFibGUsXG4rfTtcbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfcHRwX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgUFRQIGNsb2NrIGZvciBhIERQTEwgY2hhbm5lbFxuKyAqIEB6bGRwbGw6IERQTEwgY2hhbm5lbCB0byByZWdpc3RlciBQVFAgY2xvY2sgZm9yXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuKyAqL1xuK3N0YXRpYyBpbnQgemwzMDczeF9kcGxsX3B0cF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiA9IHpsZHBsbC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XG4rXG4rXHRzbnByaW50Zih6bGRwbGwtXHUwMDNlcHRwX2luZm8ubmFtZSwgc2l6ZW9mKHpsZHBsbC1cdTAwM2VwdHBfaW5mby5uYW1lKSxcbitcdFx0IFwiemwzMDczeC1kcGxsJXVcIiwgemxkcGxsLVx1MDAzZWlkKTtcbitcbitcdHB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZ6bGRwbGwtXHUwMDNlcHRwX2luZm8sIHpsZGV2LVx1MDAzZWRldik7XG4rXHRpZiAoSVNfRVJSKHB0cF9jbG9jaykpIHtcbitcdFx0ZGV2X2Vycih6bGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jayBmb3IgRFBMTCV1XFxuXCIsXG4rXHRcdFx0emxkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHRwX2Nsb2NrKTtcbitcdH1cbitcbitcdHpsZHBsbC1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2s7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogemwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQVFAgY2xvY2sgZm9yIGEgRFBMTCBjaGFubmVsXG4rICogQHpsZHBsbDogRFBMTCBjaGFubmVsIHRvIHVucmVnaXN0ZXIgUFRQIGNsb2NrIGZvclxuKyAqL1xuK3N0YXRpYyB2b2lkIHpsMzA3M3hfZHBsbF9wdHBfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4re1xuK1x0aWYgKCFJU19FUlJfT1JfTlVMTCh6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih6bGRwbGwtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdFx0emxkcGxsLVx1MDAzZXB0cF9jbG9jayA9IE5VTEw7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTI0MDMsNiArMjg2Myw0OCBAQCB6bDMwNzN4X2RwbGxfcmVmX3N5bmNfcGFpcnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIHpsMzA3M3hfZHBsbF9hbGxvYyAtIGFsbG9jYXRlIERQTEwgZGV2aWNlXG4rICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXG4rICogQGNoOiBEUExMIGNoYW5uZWwgbnVtYmVyXG4rICpcbisgKiBBbGxvY2F0ZXMgRFBMTCBkZXZpY2Ugc3RydWN0dXJlIGZvciBnaXZlbiBEUExMIGNoYW5uZWwuXG4rICpcbisgKiBSZXR1cm46IHBvaW50ZXIgdG8gRFBMTCBkZXZpY2Ugb24gc3VjY2VzcywgZXJyb3IgcG9pbnRlciBvbiBlcnJvclxuKyAqL1xuK3N0cnVjdCB6bDMwNzN4X2RwbGwgKlxuK3psMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaClcbit7XG4rXHRzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGw7XG4rXG4rXHR6bGRwbGwgPSBremFsbG9jX29iaigqemxkcGxsKTtcbitcdGlmICghemxkcGxsKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHpsZHBsbC1cdTAwM2VkZXYgPSB6bGRldjtcbitcdHpsZHBsbC1cdTAwM2VpZCA9IGNoO1xuK1x0emxkcGxsLVx1MDAzZXB0cF9pbmZvID0gemwzMDczeF9kcGxsX3B0cF9jbG9ja19pbmZvO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ6bGRwbGwtXHUwMDNlcGlucyk7XG4rXG4rXHRyZXR1cm4gemxkcGxsO1xuK31cbitcbisvKipcbisgKiB6bDMwNzN4X2RwbGxfZnJlZSAtIGZyZWUgRFBMTCBkZXZpY2VcbisgKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbisgKlxuKyAqIERlYWxsb2NhdGVzIGdpdmVuIERQTEwgZGV2aWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfYWxsb2MuXG4rICovXG4rdm9pZFxuK3psMzA3M3hfZHBsbF9mcmVlKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbit7XG4rXHRXQVJOKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgXCJEUExMIGRldmljZSBpcyBzdGlsbCByZWdpc3RlcmVkXFxuXCIpO1xuK1xuK1x0bXV0ZXhfZGVzdHJveShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRrZnJlZSh6bGRwbGwpO1xuK31cbitcbiAvKipcbiAgKiB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZSBhbmQgYWxsIGl0cyBwaW5zXG4gICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG5AQCAtMjQzMyw2ICsyOTM1LDEzIEBAIHpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHJjID0gemwzMDczeF9kcGxsX3B0cF9yZWdpc3Rlcih6bGRwbGwpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHpsMzA3M3hfZHBsbF9waW5zX3VucmVnaXN0ZXIoemxkcGxsKTtcbitcdFx0emwzMDczeF9kcGxsX2RldmljZV91bnJlZ2lzdGVyKHpsZHBsbCk7XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yNDQ2LDcgKzI5NTUsNyBAQCB6bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuIHZvaWRcbiB6bDMwNzN4X2RwbGxfdW5yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4ge1xuLVx0LyogVW5yZWdpc3RlciBhbGwgcGlucyBhbmQgZHBsbCAqL1xuK1x0emwzMDczeF9kcGxsX3B0cF91bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfcGluc191bnJlZ2lzdGVyKHpsZHBsbCk7XG4gXHR6bDMwNzN4X2RwbGxfZGV2aWNlX3VucmVnaXN0ZXIoemxkcGxsKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5oXG5pbmRleCBmYWViYzQwMmJhMWI3MC4uOWI1ZjcyYzMzODQ5Y2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaFxuQEAgLTUsNiArNSw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZHBsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY29yZS5oXCJcbiBcbkBAIC0yMiw2ICsyNCw4IEBAXG4gICogQHR5cGU6IERQTEwgdHlwZSAoUFBTIG9yIEVFQylcbiAgKiBAbG9ja19zdGF0dXM6IGxhc3Qgc2F2ZWQgRFBMTCBsb2NrIHN0YXR1c1xuICAqIEBwaW5zOiBsaXN0IG9mIHBpbnNcbisgKiBAcHRwX2luZm86IFBUUCBjbG9jayBpbmZvXG4rICogQHB0cF9jbG9jazogcmVnaXN0ZXJlZCBQVFAgY2xvY2sgKG9yIE5VTEwpXG4gICovXG4gc3RydWN0IHpsMzA3M3hfZHBsbCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGxpc3Q7XG5AQCAtMzYsNiArNDAsOCBAQCBzdHJ1Y3QgemwzMDczeF9kcGxsIHtcbiBcdGVudW0gZHBsbF90eXBlXHRcdFx0dHlwZTtcbiBcdGVudW0gZHBsbF9sb2NrX3N0YXR1c1x0XHRsb2NrX3N0YXR1cztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdFx0cGlucztcbitcdHN0cnVjdCBwdHBfY2xvY2tfaW5mb1x0XHRwdHBfaW5mbztcbitcdHN0cnVjdCBwdHBfY2xvY2tcdFx0KnB0cF9jbG9jaztcbiB9O1xuIFxuIHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsMzA3M3hfZHBsbF9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBjaCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oXG5pbmRleCBiNzBlYWQ3ZDQ0OTViMi4uNDQ3NzU3ZTk5ODQ1ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhcbisrKyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaFxuQEAgLTE3OSw2ICsxNzksMjAgQEBcbiAjZGVmaW5lIFpMX0RQTExfREZfUkVBRF9DTURcdFx0XHRHRU5NQVNLKDIsIDApXG4gI2RlZmluZSBaTF9EUExMX0RGX1JFQURfQ01EX0FDQ19JXHRcdDRcbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMXHRcdFx0WkxfUkVHKDUsIDB4MzAsIDEpXG4rI2RlZmluZSBaTF9EUExMX1RJRV9DVFJMX09QXHRcdFx0R0VOTUFTSygyLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9USUVfQ1RSTF9PUF9XUlx0XHRcdDRcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9DVFJMX01BU0tcdFx0WkxfUkVHKDUsIDB4MzEsIDEpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfQ1RSTChfaWR4KVx0XHRcdFx0XHRcXFxuK1x0WkxfUkVHX0lEWChfaWR4LCA1LCAweDM4LCAxLCA4LCAxKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9TRU1cdFx0XHRCSVQoNClcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EXHRcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgWkxfRFBMTF9UT0RfQ1RSTF9DTURfV1JfTkVYVF8xSFpcdDFcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX0NVUlJFTlRcdDhcbisjZGVmaW5lIFpMX0RQTExfVE9EX0NUUkxfQ01EX1JEX05FWFRfMUhaXHQ5XG4rXG4gI2RlZmluZSBaTF9SRUdfRFBMTF9NRUFTX0NUUkxcdFx0XHRaTF9SRUcoNSwgMHg1MCwgMSlcbiAjZGVmaW5lIFpMX0RQTExfTUVBU19DVFJMX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBaTF9EUExMX01FQVNfQ1RSTF9BVkdfRkFDVE9SXHRcdEdFTk1BU0soNywgNClcbkBAIC0xOTMsNiArMjA3LDkgQEBcbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAqIFJlZ2lzdGVyIFBhZ2VzIDYtNywgRFBMTCBEYXRhXG4rICpcbisgKiBQZXItY2hhbm5lbCByZWdpc3RlcnMgd2l0aCBzdHJpZGUgMHgyMC4gQ2hhbm5lbHMgMC0zIHJlc2lkZSBvbiBwYWdlIDYsXG4rICogY2hhbm5lbCA0IG9uIHBhZ2UgNy5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAjZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVx0XHRcdFx0XHRcXFxuQEAgLTIwMiw2ICsyMTksMjQgQEBcbiBcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9ERl9PRkZTRVRfNClcbiAjZGVmaW5lIFpMX0RQTExfREZfT0ZGU0VUX1VOS05PV05cdFM2NF9NSU5cbiBcbisjZGVmaW5lIFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG4rXHRaTF9SRUdfSURYKF9pZHgsIDYsIDB4MEMsIDYsIDQsIDB4MjApXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQV80XHRcdFx0WkxfUkVHKDcsIDB4MEMsIDYpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9USUVfREFUQShfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RJRV9EQVRBXzAzKF9pZHgpIDogWkxfUkVHX0RQTExfVElFX0RBVEFfNClcbitcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxMiwgNiwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9TRUNfNFx0XHRcdFpMX1JFRyg3LCAweDEyLCA2KVxuKyNkZWZpbmUgWkxfUkVHX0RQTExfVE9EX1NFQyhfaWR4KVx0XHRcdFx0XHRcXFxuK1x0KChfaWR4KSBcdTAwM2MgNCA/IFpMX1JFR19EUExMX1RPRF9TRUNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfU0VDXzQpXG4rXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeClcdFx0XHRcdFx0XFxcbitcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgxOCwgNCwgNCwgMHgyMClcbisjZGVmaW5lIFpMX1JFR19EUExMX1RPRF9OU180XHRcdFx0WkxfUkVHKDcsIDB4MTgsIDQpXG4rI2RlZmluZSBaTF9SRUdfRFBMTF9UT0RfTlMoX2lkeClcdFx0XHRcdFx0XFxcbitcdCgoX2lkeCkgXHUwMDNjIDQgPyBaTF9SRUdfRFBMTF9UT0RfTlNfMDMoX2lkeCkgOiBaTF9SRUdfRFBMTF9UT0RfTlNfNClcbitcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDksIFN5bnRoIGFuZCBPdXRwdXRcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5AQCAtMjIxLDYgKzI1Niw4IEBAXG4gI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfU1lOVEhfU0VMXHRcdEdFTk1BU0soNiwgNClcbiBcbisjZGVmaW5lIFpMX1JFR19PVVRQVVRfU1RFUF9USU1FX01BU0tcdFx0WkxfUkVHKDksIDB4MzYsIDIpXG4rXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgKiBSZWdpc3RlciBQYWdlIDEwLCBSZWYgTWFpbGJveFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQEAgLTMxNiw2ICszNTMsMjUgQEBcbiAjZGVmaW5lIFpMX1JFR19PVVRQVVRfRVNZTkNfV0lEVEhcdFx0WkxfUkVHKDE0LCAweDE4LCA0KVxuICNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9DT01QXHRcdFpMX1JFRygxNCwgMHgyMCwgNClcbiBcbisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbisgKiBSZWdpc3RlciBQYWdlIDksIE91dHB1dCBQaGFzZSBTdGVwXG4rICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxcdFx0WkxfUkVHKDksIDB4MzgsIDEpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX0RQTExcdFx0R0VOTUFTSyg2LCA0KVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9UT0RfU1RFUFx0QklUKDMpXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIFpMX09VVFBVVF9QSEFTRV9TVEVQX0NUUkxfT1BfTk9ORVx0MFxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRVNFVFx0MVxuKyNkZWZpbmUgWkxfT1VUUFVUX1BIQVNFX1NURVBfQ1RSTF9PUF9SRUFEXHQyXG4rI2RlZmluZSBaTF9PVVRQVVRfUEhBU0VfU1RFUF9DVFJMX09QX1dSSVRFXHQzXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfTlVNQkVSXHRcdFpMX1JFRyg5LCAweDM5LCAxKVxuK1xuKyNkZWZpbmUgWkxfUkVHX09VVFBVVF9QSEFTRV9TVEVQX01BU0tcdFx0WkxfUkVHKDksIDB4M2EsIDIpXG4rXG4rI2RlZmluZSBaTF9SRUdfT1VUUFVUX1BIQVNFX1NURVBfREFUQVx0XHRaTF9SRUcoOSwgMHgzYywgNClcbitcbiAvKlxuICAqIFJlZ2lzdGVyIFBhZ2UgMjU1IC0gSFcgcmVnaXN0ZXJzIGFjY2Vzc1xuICAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NTkuMjkyMTQ0MzU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxNjcxNjQ2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhpbmVzcyBvZiBGdXp6aW5nIHRoZSBBenVyaXRlIERQTEwgRHJpdmVyKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRvdWNoaW5nIHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvYCBkaXJlY3RvcnksIHdoaWNoIGluZGljYXRlcyBQVFAgY2xvY2sgc3VwcG9ydCBpcyBiZWluZyBhZGRlZCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIuIFRoaXMgbG9va3MgaW50ZXJlc3Rpbmc7IGl0IGludm9sdmVzIG5ldyBmZWF0dXJlcyBhbmQgbGlrZWx5IG5ldyBjb2RlIHBhdGhzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAgZGVwZW5kZW5jeSwgcmVnaXN0ZXJzIGEgUFRQIGNsb2NrLCBhbmQgaW1wbGVtZW50cyB0aGUgbmVjZXNzYXJ5IFBUUCBjbG9jayBvcGVyYXRpb25zIOKAkyBgZ2V0dGltZXg2NGAsIGBzZXR0aW1lNjRgLCBhZGp1c3RtZW50IGZ1bmN0aW9ucyBhbmQgZW5hYmxpbmcvZGlzYWJsaW5nIG9mIHRoZSBjbG9jay4gVGhpcyBtZWFucyBpdCBjcmVhdGVzIGAvZGV2L3B0cFhgIGRldmljZXMgdGhhdCBjYW4gYmUgZnV6emVkIHRocm91Z2ggaW9jdGxzLCBwbHVzLCB0aGUgZHJpdmVyIGV4cG9zZXMgYSBEUExMIGRldmljZSB2aWEgbmV0bGluay4gVGhlIGRyaXZlciB1c2VzIEkyQyBhbmQgU1BJLCB3aGljaCBtYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgZGlmZmljdWx0eSBvZiBpbnN0YW50aWF0aW9uIGluIGEgZnV6emluZyBjb250ZXh0LlxuXG5DYW4gd2UgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGU/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBrbm93IHN5emthbGxlciBjYW4gaGl0IFBUUCBpb2N0bHMgYW5kIERQTEwgbmV0bGluaywgd2hpY2ggaXMgcHJvbWlzaW5nLiBCdXQgSTJDL1NQSSBkZXZpY2VzIGFyZSB1c3VhbGx5IGEgcGFpbi4gVHlwaWNhbGx5LCB0aGV5IHJlcXVpcmUgZGV2aWNlIHRyZWUsIEFDUEksIG9yIHNwZWNpZmljIGJvYXJkIGNvZGUgdG8gYmUgaW5pdGlhbGl6ZWQuIENhbiBzeXprYWxsZXIgaW5zdGFudGlhdGUgdGhlIGB6bDMwNzN4YCBkZXZpY2Ugc29tZWhvdz8gRG9lcyBpdCBoYXZlIGEgbWVjaGFuaXNtIGxpa2UgYGkyY19uZXdfY2xpZW50X2RldmljZWAgb3IgYW55dGhpbmcgbmV0bGluay9zeXNmcy1yZWxhdGVkIGZvciBjcmVhdGluZyBhbiBJMkMgb3IgU1BJIGNsaWVudD8gTG9va2luZyBhdCB0aGUgdG9vbGluZywgaXQgc2VlbXMgbGlrZSB0aGVyZSBpcyBubyBzcGVjaWZpYyBgc3l6X2kyY19zZXR1cGAgZXF1aXZhbGVudC5cblxuQnV0IHdhaXQsIHRoZSBkaXJlY3RpdmUgd2UgYXJlIHdvcmtpbmcgd2l0aCBpcyBhYm91dCAqcmVhY2hhYmxlKiBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIHRoZSBjcml0aWNhbCBwb2ludCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdoZXJlIHdlIGNhbiBlbmFibGUgdGhlIGNvbmZpZywgcmlnaHQ/IFNvIGV2ZW4gaWYgaXQncyBhbiBJMkMvU1BJIGRyaXZlciwgaWYgaXQncyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uLCBpdCdzIG9mdGVuIHdvcnRoIGZ1enppbmcgaWYgd2UgY2FuIGVuYWJsZSB0aGUgY29uZmlnIG9wdGlvbi4gVGhlIG1haW4gY2F2ZWF0IGlzIHZpcnR1YWxpemF0aW9uLiBDYW4gd2UgcmVhY2ggdGhpcyBjb2RlIHBhdGggaW4gR0NFIG9yIFFFTVU/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQncyAqbm90KiBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHRob3NlIGVudmlyb25tZW50cy4gV2UgbmVlZCB0byBjaGVjayBob3cgdGhlIGB6bDMwNzN4YCBkZXZpY2UgaXMgcHJvYmVkIHRvIHNlZSBpZiBpdCdzIHJlYWNoYWJsZS4gV2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiBpdCBkZXBlbmRzIG9uIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiB0aGF0IGlzIHVuYXZhaWxhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgbm90LCB0aGUgY2hhbmdlIGlzIFdvcnRoRnV6emluZz10cnVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEzNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM3OjA5LjQ1OTMxMjA2OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkxMDMzMDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfaTJjX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTEwLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjExOnN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0xMi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz00OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTItXFx0fSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzo1MzpcXHQucHJvYmUgPSB6bDMwNzN4X2kyY19wcm9iZSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01NC1cXHQuaWRfdGFibGUgPSB6bDMwNzN4X2kyY19pZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MTQuOTUwMzU2OTMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM1NjQzNjY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBcHByb2FjaCB0byBQcm9iaW5nIHRoZSBJMkMgRGV2aWNlKipcblxuT2theSwgbGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBNeSBnb2FsIGlzIHRvIHNlZSBpZiBJIGNhbiB0cmlnZ2VyIHRoaXMgcHJvYmUgc29tZWhvdy4gTXkgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZXNlIHR5cGVzIG9mIGludmVzdGlnYXRpb25zIHdpdGggSTJDIGRldmljZXMgaXMgdGhlIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC9uZXdfZGV2aWNlYCBpbnRlcmZhY2UuIElmIHN5emthbGxlciBoYXMgdGhlIG5lY2Vzc2FyeSBhY2Nlc3MgdG8gc3lzZnMg4oCTIHdoaWNoLCBrbm93aW5nIGl0LCBpdCBsaWtlbHkgZG9lcyDigJMgdGhlbiBJIGNhbiBwcm9iYWJseSB3cml0ZSB0byBgbmV3X2RldmljZWAgdG8gZWZmZWN0aXZlbHkgaW5zdGFudGlhdGUgdGhlIEkyQyBkZXZpY2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBob29rIHRvIHRyaWdnZXIgdGhlIHByb2JlIGFuZCBvYnNlcnZlIGl0cyBiZWhhdmlvci4gTm93LCBsZXQncyBkb3VibGUtY2hlY2sgaWYgdGhlIGB6bDMwNzN4YCBkZXZpY2UgaGFzIGFuIEkyQyBJRCB0YWJsZS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUxOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzoyMC4zMDY3OTYyNjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg1MDY4NjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bDMwNzN4X2kyY19pZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz0xMT1zdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yNy1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoyODpzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yOS1cXHR7IC5uYW1lID0gXFxcInpsMzA3MzFcXFwiIH0sXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0zNS19O1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjM2Ok1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB6bDMwNzN4X2kyY19pZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMzctXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz00OD1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgemwzMDczeF9pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTMtXFx0LnByb2JlID0gemwzMDczeF9pMmNfcHJvYmUsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTQ6XFx0LmlkX3RhYmxlID0gemwzMDczeF9pMmNfaWQsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNTUtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MjQuMTU3NDg4NDgyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDQ1MDc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB6bDMwNzMxYCBEZXZpY2UgSW5zdGFudGlhdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gdGhlIGRldmljZSBuYW1lIGlzIGRlZmluaXRlbHkgXCJ6bDMwNzMxXCIuIFN5emthbGxlciBjYW4gd3JpdGUgXCJ6bDMwNzMxIDB4MjBcIiB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAgdG8gdHJpZ2dlciBpdHMgY3JlYXRpb24uIFN0YW5kYXJkIHByb2NlZHVyZSwgdW5kZXJzdG9vZC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGluc3RhbnRpYXRpb24gKnJlcXVpcmUqIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHRvIHN1Y2NlZWQ/IEkgbmVlZCB0byBiZSBzdXJlIHRoZSBwcm9iZSBkb2Vzbid0IHJlbHkgb24gc29tZSB1bmRvY3VtZW50ZWQgcmVnaXN0ZXIgb3IgZXh0ZXJuYWwgc2lnbmFsLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaXZlIGludG8gdGhlIHByb2JlIGZ1bmN0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBgemwzMDczeF9pMmNfcHJvYmVgIGFuZCBgemwzMDczeF9kZXZfcHJvYmVgLiBUaG9zZSBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSBoYXJkd2FyZSBwcmVjb25kaXRpb25zIGZvciB0aGUgYHpsMzA3MzFgIHRvIGluaXRpYWxpemUgY29ycmVjdGx5LiBUaGF0J3Mgd2hlcmUgdGhlIGNyaXRpY2FsIGxvZ2ljIHJlc2lkZXMuIFVuZGVyc3RhbmRpbmcgdGhvc2Ugcm91dGluZXMgd2lsbCBkZXRlcm1pbmUgaWYgdGhpcyBpbnN0YW50aWF0aW9uIGlzIHRydWx5IGNsZWFuLCBvciBpZiB0aGVyZSBhcmUgcG90ZW50aWFsIGhhcmR3YXJlIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIzMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzoyOC4zMjE5NDE5MTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMTpcXHRzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuICAxMjpcXHR7XFxuICAxMzpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXY7XFxuICAxNDpcXHRcXHRzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2O1xcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHR6bGRldiA9IHpsMzA3M3hfZGV2bV9hbGxvYyhkZXYpO1xcbiAgMTc6XFx0XFx0aWYgKElTX0VSUih6bGRldikpXFxuICAxODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUih6bGRldik7XFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdHpsZGV2LVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFxcdTAwMjZ6bDMwNzN4X3JlZ21hcF9jb25maWcpO1xcbiAgMjE6XFx0XFx0aWYgKElTX0VSUih6bGRldi1cXHUwMDNlcmVnbWFwKSlcXG4gIDIyOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUih6bGRldi1cXHUwMDNlcmVnbWFwKSxcXG4gIDIzOlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcFxcXFxuXFxcIik7XFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XFxuICAyNjpcXHR9XFxuICAyNzpcXHRcXG4gIDI4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB6bDMwNzN4X2kyY19pZFtdID0ge1xcbiAgMjk6XFx0XFx0eyAubmFtZSA9IFxcXCJ6bDMwNzMxXFxcIiB9LFxcbiAgMzA6XFx0XFx0eyAubmFtZSA9IFxcXCJ6bDMwNzMyXFxcIiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzoyOC4zMjIwMjk1OTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc5NjE4NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIHpsMzA3M3ggRHJpdmVyKipcblxuUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGB6bDMwNzN4X2Rldl9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoaXMgc3BlY2lmaWMgRFBMTCwgYW5kIHRoYXQncyB0aGUgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBUaGlzIGlzIHByb2JhYmx5IGluIHRoZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jYCBmaWxlLCB3aGVyZSB0aGUgY29yZSBkZXZpY2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBwcm9iZSBmdW5jdGlvbiBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgZHJpdmVyIGlzIGZpcnN0IHNldHRpbmcgdGhpbmdzIHVwIHdoZW4gdGhlIGhhcmR3YXJlIGlzIGRldGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSByZWdpc3RlciBtYXAgYW5kIGlmIHRoZXJlIGFueSBvYnZpb3VzIGdvdGNoYXMgaW4gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbi4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtZG9jdW1lbnRlZCwgYnV0IGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBpcyBuZWNlc3NhcnkgdG8gdW5kZXJzdGFuZCB0aGUgbG93IGxldmVsIGRldGFpbHMsIGFuZCBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggY2xvY2sgY29uZmlndXJhdGlvbnMsIG9yIGVycmF0YSBoYW5kbGluZyB0aGF0IGNvdWxkIGJpdGUgbWUgbGF0ZXIgb24uIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NzAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM3OjMyLjYwMTY1MDYzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NjQwNDYzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgemwzMDczeF9kZXZfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTkyNT16bDMwNzN4X2Rldm1fZHBsbF9pbml0KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTc5LSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODA6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk4MS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9MTA0PXN0cnVjdCB6bDMwNzN4X2RldiAqemwzMDczeF9kZXZtX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjEwNTppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTEwNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MzcuMDU4MDYzMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2NTUzMzM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGB6bDMwNzN4X2Rldl9wcm9iZWAsIGFzIEkgdW5kZXJzdGFuZCBpdDpcblxuKipBbmFseXppbmcgdGhlIGB6bDMwNzN4X2Rldl9wcm9iZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgd2UncmUgbG9va2luZyBhdCBgemwzMDczeF9kZXZfcHJvYmVgLiBUaGF0IG1lYW5zIHdlJ3JlIGluIHRoZSByZWFsbSBvZiBkZXZpY2UgcHJvYmluZywgYW5kIGl0J3Mgc3BlY2lmaWNhbGx5IGZvciBhIGB6bDMwNzN4YCBkZXZpY2UsIHdoaWNoIEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGdlbmVyYWwgYXJjaGl0ZWN0dXJlIG9mLiBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBhdHRlbXB0cyB0byBpZGVudGlmeSwgaW5pdGlhbGl6ZSwgYW5kIHJlZ2lzdGVyIGEgbmV3IGB6bDMwNzN4YCBkZXZpY2UgdGhhdCdzIGJlZW4gcGx1Z2dlZCBpbiBvciBpcyBvdGhlcndpc2UgYmVjb21pbmcgYXZhaWxhYmxlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uKio6IEhvdyBhcmUgdGhleSBnZXR0aW5nIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzLCBsaWtlIG1lbW9yeSByZWdpb25zLCBJUlFzLCBJMkMgb3IgU1BJIGJ1c2VzLCBldGMuPyBJIHdhbnQgdG8gc2VlIGlmIHRoZXkgYXJlIHVzaW5nIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBtZWNoYW5pc21zIG9yIGlmIHRoZXJlJ3MgYSBtb3JlIGdlbmVyaWMgYXBwcm9hY2guIEFueSB1bnVzdWFsIGFwcHJvYWNoZXMgaGVyZSB3b3VsZCBiZSBpbnRlcmVzdGluZy5cbiogICAqKkRldmljZSBpZGVudGlmaWNhdGlvbioqOiBIb3cgaXMgdGhlIGRyaXZlciB2ZXJpZnlpbmcgdGhlIGRldmljZSBpcyAqYWN0dWFsbHkqIGEgYHpsMzA3M3hgPyBBcmUgdGhleSBjaGVja2luZyBhIGRldmljZSBJRCByZWdpc3Rlcj8gVmVuZG9yLXNwZWNpZmljIG1hZ2ljPyBJJ20ga2VlbiB0byBzZWUgdGhlIGFwcHJvYWNoIGFuZCBhbnkgcG90ZW50aWFsIGZvciByb2J1c3RuZXNzIGlzc3Vlcy5cbiogICAqKkluaXRpYWxpemF0aW9uIHNlcXVlbmNlKio6IFdoYXQgc3RlcHMgYXJlIHRha2VuIHRvIGdldCB0aGUgZGV2aWNlIHJlYWR5IGZvciB1c2U/IFRoaXMgY291bGQgaW5jbHVkZSBwb3dlci11cCBzZXF1ZW5jZXMsIHJlZ2lzdGVyIHdyaXRlcywgY2xvY2sgY29uZmlndXJhdGlvbiwgYW5kIHBvc3NpYmx5IGZpcm13YXJlIGxvYWRpbmcuIEknbGwgYmUgbG9va2luZyBhdCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgcGF5aW5nIGF0dGVudGlvbiB0byBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgdGltaW5nIGNvbnN0cmFpbnRzLlxuKiAgICoqRHJpdmVyIHJlZ2lzdHJhdGlvbioqOiBPbmNlIHRoZSBkZXZpY2UgaXMgcmVhZHksIEknbGwgYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUga2VybmVsLiBJcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQgZGV2aWNlIGRyaXZlciBtb2RlbD8gQXJlIHRoZXJlIGFueSBjdXN0b20gY2FsbGJhY2tzIG9yIHN0cnVjdHVyZXM/IEFueSBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIG9yIGludGVyYWN0aW9ucyB3aWxsIGJlIG9mIGludGVyZXN0LlxuKiAgICoqRXJyb3IgaGFuZGxpbmcqKjogV2hlcmUgYXJlIHRoZSBlcnJvciBjaGVja3M/IFdoYXQgaGFwcGVucyBpZiBhbnkgb2YgdGhlIGNyaXRpY2FsIHN0ZXBzIGZhaWw/IEkgd2FudCB0byBhc3Nlc3MgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHByb2JlIGZ1bmN0aW9uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHdlYWtuZXNzZXMuIEknbSBleHBlY3RpbmcgdGhvcm91Z2ggZXJyb3IgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLlxuKiAgICoqQ29uY3VycmVuY3kqKjogSSdsbCBhbHNvIGdsYW5jZSB0byBzZWUgaWYgYW55dGhpbmcgaGVyZSBpcyBzdXNjZXB0aWJsZSB0byBjb25jdXJyZW5jeSBpc3N1ZXMgYXMgSSBrbm93IGhhcmR3YXJlIHByb2JpbmcgY2FuIG9mdGVuIGhhdmUgc2hhcmVkIHJlc291cmNlcy5cblxuRXNzZW50aWFsbHksIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGdhdGV3YXkuIEl0IHNob3VsZCBiZSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBkZXZpY2UgaXMgYWN0dWFsbHkgdGhlIGRldmljZSB3ZSdyZSBleHBlY3RpbmcsIGFuZCB0aGVuIGdldHRpbmcgaXQgcmVhZHkgdG8gYmUgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgaG93IHRoZXkndmUgZG9uZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1MzMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzo0Mi42MjM2MDAwNDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTgwOlxcdGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbiA5ODE6XFx0e1xcbiA5ODI6XFx0XFx0dTE2IGlkLCByZXZpc2lvbiwgZndfdmVyO1xcbiA5ODM6XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuIDk4NDpcXHRcXHR1MzIgY2ZnX3ZlcjtcXG4gOTg1OlxcdFxcdGludCByYztcXG4gOTg2OlxcdFxcbiA5ODc6XFx0XFx0LyogUmVhZCBjaGlwIElEICovXFxuIDk4ODpcXHRcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19JRCwgXFx1MDAyNmlkKTtcXG4gOTg5OlxcdFxcdGlmIChyYylcXG4gOTkwOlxcdFxcdFxcdHJldHVybiByYztcXG4gOTkxOlxcdFxcbiA5OTI6XFx0XFx0LyogRGV0ZWN0IGNoaXAgdmFyaWFudCAqL1xcbiA5OTM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcyk7IGkrKykge1xcbiA5OTQ6XFx0XFx0XFx0aWYgKHpsMzA3M3hfY2hpcF9pZHNbaV0uaWQgPT0gaWQpXFxuIDk5NTpcXHRcXHRcXHRcXHRicmVhaztcXG4gOTk2OlxcdFxcdH1cXG4gOTk3OlxcdFxcbiA5OTg6XFx0XFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcXG4gOTk5OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIC1FTk9ERVYsXFxuMTAwMDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJVbmtub3duIGNoaXAgSUQ6IDB4JTA0eFxcXFxuXFxcIiwgaWQpO1xcbjEwMDE6XFx0XFxuMTAwMjpcXHRcXHR6bGRldi1cXHUwMDNlaW5mbyA9IFxcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xcbjEwMDM6XFx0XFxuMTAwNDpcXHRcXHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cXG4xMDA1OlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFVklTSU9OLCBcXHUwMDI2cmV2aXNpb24pO1xcbjEwMDY6XFx0XFx0aWYgKHJjKVxcbjEwMDc6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwMDg6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRldfVkVSLCBcXHUwMDI2ZndfdmVyKTtcXG4xMDA5OlxcdFxcdGlmIChyYylcXG4xMDEwOlxcdFxcdFxcdHJldHVybiByYztcXG4xMDExOlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3UzMih6bGRldiwgWkxfUkVHX0NVU1RPTV9DT05GSUdfVkVSLCBcXHUwMDI2Y2ZnX3Zlcik7XFxuMTAxMjpcXHRcXHRpZiAocmMpXFxuMTAxMzpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTAxNDpcXHRcXG4xMDE1OlxcdFxcdGRldl9kYmcoemxkZXYtXFx1MDAzZWRldiwgXFxcIkNoaXBJRCglWCksIENoaXBSZXYoJVgpLCBGd1ZlcigldSlcXFxcblxcXCIsIGlkLFxcbjEwMTY6XFx0XFx0XFx0cmV2aXNpb24sIGZ3X3Zlcik7XFxuMTAxNzpcXHRcXHRkZXZfZGJnKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJDdXN0b20gY29uZmlnIHZlcnNpb246ICVsdS4lbHUuJWx1LiVsdVxcXFxuXFxcIixcXG4xMDE4OlxcdFxcdFxcdEZJRUxEX0dFVChHRU5NQVNLKDMxLCAyNCksIGNmZ192ZXIpLFxcbjEwMTk6XFx0XFx0XFx0RklFTERfR0VUKEdFTk1BU0soMjMsIDE2KSwgY2ZnX3ZlciksXFxuMTAyMDpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSygxNSwgOCksIGNmZ192ZXIpLFxcbjEwMjE6XFx0XFx0XFx0RklFTERfR0VUKEdFTk1BU0soNywgMCksIGNmZ192ZXIpKTtcXG4xMDIyOlxcdFxcbjEwMjM6XFx0XFx0LyogR2VuZXJhdGUgcmFuZG9tIGNsb2NrIElEIGFzIHRoZSBkZXZpY2UgaGFzIG5vdCBzdWNoIHByb3BlcnR5IHRoYXRcXG4xMDI0OlxcdFxcdCAqIGNvdWxkIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4gQSB1c2VyIGNhbiBsYXRlciBjaGFuZ2UgdGhpcyB2YWx1ZVxcbjEwMjU6XFx0XFx0ICogdXNpbmcgZGV2bGluay5cXG4xMDI2OlxcdFxcdCAqL1xcbjEwMjc6XFx0XFx0emxkZXYtXFx1MDAzZWNsb2NrX2lkID0gZ2V0X3JhbmRvbV91NjQoKTtcXG4xMDI4OlxcdFxcbjEwMjk6XFx0XFx0LyogRGVmYXVsdCBwaGFzZSBvZmZzZXQgYXZlcmFnaW5nIGZhY3RvciAqL1xcbjEwMzA6XFx0XFx0emxkZXYtXFx1MDAzZXBoYXNlX2F2Z19mYWN0b3IgPSAyO1xcbjEwMzE6XFx0XFxuMTAzMjpcXHRcXHQvKiBJbml0aWFsaXplIG11dGV4IGZvciBvcGVyYXRpb25zIHdoZXJlIG11bHRpcGxlIHJlYWRzLCB3cml0ZXNcXG4xMDMzOlxcdFxcdCAqIGFuZC9vciBwb2xscyBhcmUgcmVxdWlyZWQgdG8gYmUgZG9uZSBhdG9taWNhbGx5LlxcbjEwMzQ6XFx0XFx0ICovXFxuMTAzNTpcXHRcXHRyYyA9IGRldm1fbXV0ZXhfaW5pdCh6bGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2emxkZXYtXFx1MDAzZW11bHRpb3BfbG9jayk7XFxuMTAzNjpcXHRcXHRpZiAocmMpXFxuMTAzNzpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4xMDM5OlxcdFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlcGhhc2Vfc3RlcF9sb2NrKTtcXG4xMDQwOlxcdFxcdGlmIChyYylcXG4xMDQxOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbjEwNDI6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbjEwNDM6XFx0XFx0cmMgPSBkZXZtX211dGV4X2luaXQoemxkZXYtXFx1MDAzZWRldiwgXFx1MDAyNnpsZGV2LVxcdTAwM2V0aWVfbG9jayk7XFxuMTA0NDpcXHRcXHRpZiAocmMpXFxuMTA0NTpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCByYyxcXG4xMDQ2OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIG11dGV4XFxcXG5cXFwiKTtcXG4xMDQ3OlxcdFxcbjEwNDg6XFx0XFx0LyogUmVnaXN0ZXIgRFBMTCBjaGFubmVscyAqL1xcbjEwNDk6XFx0XFx0cmMgPSB6bDMwNzN4X2Rldm1fZHBsbF9pbml0KHpsZGV2KTtcXG4xMDUwOlxcdFxcdGlmIChyYylcXG4xMDUxOlxcdFxcdFxcdHJldHVybiByYztcXG4xMDUyOlxcdFxcbjEwNTM6XFx0XFx0LyogUmVnaXN0ZXIgdGhlIGRldmxpbmsgaW5zdGFuY2UgYW5kIHBhcmFtZXRlcnMgKi9cXG4xMDU0OlxcdFxcdHJjID0gemwzMDczeF9kZXZsaW5rX3JlZ2lzdGVyKHpsZGV2KTtcXG4xMDU1OlxcdFxcdGlmIChyYylcXG4xMDU2OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbjEwNTc6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldmxpbmsgaW5zdGFuY2VcXFxcblxcXCIpO1xcbjEwNTg6XFx0XFxuMTA1OTpcXHRcXHRyZXR1cm4gMDtcXG4xMDYwOlxcdH1cXG4xMDYxOlxcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHpsMzA3M3hfZGV2X3Byb2JlLCBcXFwiWkwzMDczWFxcXCIpO1xcbjEwNjI6XFx0XFxuMTA2MzpcXHRNT0RVTEVfQVVUSE9SKFxcXCJJdmFuIFZlY2VyYSBcXHUwMDNjaXZlY2VyYUByZWRoYXQuY29tXFx1MDAzZVxcXCIpO1xcbjEwNjQ6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNaWNyb2NoaXAgWkwzMDczeCBjb3JlIGRyaXZlclxcXCIpO1xcbjEwNjU6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzo0Mi42MjM4OTY3MDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA0NDMyNTQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERldmljZSBQcm9iZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwcm9iZSBmdW5jdGlvbiBhbmQgaXQncyBncmFiYmluZyB0aGUgYFpMX1JFR19JRGAgYW5kIGNvbXBhcmluZyBpdCB0byB0aGUga25vd24gYHpsMzA3M3hfY2hpcF9pZHNgLiBUaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGlzIHRoYXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIHRoZSBvbmUgc3l6a2FsbGVyIHVzZXMsIHRoZXNlIEkyQyByZWFkcyBhcmUgaGlnaGx5IGxpa2VseSB0byBmYWlsIG9yIHJldHVybiBnYXJiYWdlLiBUaGF0IG1lYW5zIGEgYC1FTk9ERVZgIGVycm9yLCBhbmQgdGhlIHByb2JlIGp1c3QgZGllcy5cblxuV2FpdCBhIHNlY29uZCwgZG9lc27igJl0IHN5emthbGxlciBoYXZlICpzb21lKiBtZWNoYW5pc20gdG8gbW9jayBJMkMgZGV2aWNlcz8gSSBrbm93IGl0IG1vY2tzIG90aGVyIGhhcmR3YXJlIGludGVyZmFjZXMuIE5vLCBpdCBkb2Vzbid0IGFwcGVhciB0byBoYXZlIGEgZ2VuZXJpYyBJMkMgbW9jaywgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZSBjb21tZW50cyBpbiB0aGUgY29kZSBhcmUgcG9pbnRpbmcgbWUgdG93YXJkcyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGNhbGxpbmcgb3V0IHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5TbyB0aGUgcHJvYmUgKndpbGwqIGZhaWwgYmVjYXVzZSBpdCdzIGV4cGVjdGluZyBhIHNwZWNpZmljIGNoaXAgSUQgdG8gY29tZSBiYWNrIGZyb20gdGhlIEkyQyBidXMuIEJ1dCwgaG9sZCBvbiBhIG1pbnV0ZSEgU3l6a2FsbGVyIGhhcyBhbGwgdGhlc2UgZGlmZmVyZW50IHNpbXVsYXRvcnMg4oCTIGB2aGNpYCwgYG1hYzgwMjExX2h3c2ltYCwgYHZrbXNgLCBgdmNhbmAsIGB1aW5wdXRgLCBgc25kLWR1bW15YCwgYG5ldGRldnNpbWAsIGFuZCBtb3JlLiBEbyB0aGV5IGhhdmUgYW4gSTJDIGVxdWl2YWxlbnQ/XG5cbkFoYSEgVGhlcmUgKmlzKiBgaTJjLXN0dWJgISBJIGNhbiB1c2UgaXQgdG8gbW9jayBJMkMgZGV2aWNlcyEgTGV0J3Mgc2VlIGlmIHRoaXMgYGkyYy1zdHViYCBjYW4gYWN0dWFsbHkgc2ltdWxhdGUgdGhpcyBzcGVjaWZpYyBkZXZpY2UuXG5cbk9rYXksIHNvIGBpMmMtc3R1YmAgbGV0cyB5b3Ugc3BlY2lmeSBjaGlwIGFkZHJlc3NlcyBhbmQgaXTigJlsbCBhY3QgYXMgYSBkdW1teSBJMkMgZGV2aWNlIHRoYXQgc3RvcmVzIGFuZCByZXR1cm5zIHdoYXRldmVyIGJ5dGVzIGFyZSB3cml0dGVuIHRvIGl0LiBCdXTigKYgd2FpdCBhIHNlY29uZOKApiBJIG5lZWQgdG8gY2hlY2sgaG93IGB6bDMwNzN4YCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVnaXN0ZXJzLCBiZWNhdXNlIGlmIGl0IHVzZXMgYHJlZ21hcGAgaXQgY291bGQgYmUgcmVhZGluZyAxNi1iaXQgb3IgMzItYml0IHJlZ2lzdGVycy4gSSBuZWVkIHRvIGNoZWNrIGB6bDMwNzN4X3JlYWRfdTE2YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NTcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzo1MS42NjgyMjUwMjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTYzNDE2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHpsMzA3M3hfcmVhZF91MTZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTE3OD1pbnQgemwzMDczeF93cml0ZV91OChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1OCB2YWwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTkyLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxOTM6aW50IHpsMzA3M3hfcmVhZF91MTYoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTE2ICp2YWwpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTE5NC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9MTQ3PWludCB6bDMwNzN4X3JlYWRfdTgoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTggKnZhbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjE0ODppbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oLTE0OS1pbnQgemwzMDczeF9yZWFkX3UzMihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgKnZhbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM3OjU2LjA2NDU3NjM3NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI3NDQ1NzI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIHpsMzA3M3hfcmVhZF91MTYgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGB6bDMwNzN4X3JlYWRfdTE2YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvdy1sZXZlbCBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZGlzc2VjdCB0aGUgY3JpdGljYWwgcGF0aDsgdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzaW5nIHRoZSBoYXJkd2FyZS4gSSBrbm93IHRoZXNlIGRldmljZXMgcHJldHR5IHdlbGwsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVnaXN0ZXJzIGFuZCB0aGUgdW5kZXJseWluZyBidXMgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMg4oCTIHByb2JhYmx5IEkyQywgU1BJLCBvciBwb3RlbnRpYWxseSBzb21lIHByb3ByaWV0YXJ5IGJ1cy4gVGhlIGtleSBpcyBpbiBmaWd1cmluZyBvdXQgaG93IHRoZSAxNi1iaXQgdmFsdWUgaXMgYmVpbmcgZmV0Y2hlZC4gQXJlIHRoZXkgdXNpbmcgYSByZWFkIHRyYW5zYWN0aW9uIHdpdGggYSByZWdpc3RlciBhZGRyZXNzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIGRhdGEgc2hlZXQgbGF0ZW5jeSBhbmQgdGltaW5nIHJlcXVpcmVtZW50cz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXRvbWljaXR5IG9yIGNvbmN1cnJlbmN5PyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaG93IHRoZSBhZGRyZXNzIGlzIHRyYW5zbGF0ZWQgdG8gYW4gSTJDIG9yIFNQSSB3cml0ZS4gVGhlbiBmb2xsb3cgdGhlIHRyYW5zYWN0aW9uIHRvIHRoZSByZWFkIHNpZGUgdG8gY29uZmlybS4gQXJlIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZyByb3V0aW5lcz8gVGhvc2UgYXJlIGltcG9ydGFudCwgdG9vLCBmb3IgdW5kZXJzdGFuZGluZyByb2J1c3RuZXNzLiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgZnVuY3Rpb24gcGVyZm9ybXMgYSBzaW1wbGUgcmVhZCBvZiBhIDE2LWJpdCB2YWx1ZSBmcm9tIGEgc3BlY2lmaWMgYWRkcmVzcyBvciBpZiBpdCdzIG1vcmUgY29tcGxleCB0aGFuIHRoYXQuIEFyZSB0aGVyZSBhbnkgaGFyZHdhcmUgb3IgYnVzIGNvbnN0cmFpbnRzP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyNjg4NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM4OjA2LjMzOTAzNzE4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODczMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MzpcXHRpbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbClcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdGludCByYztcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfcmVnKHpsZGV2LCByZWcsIHZhbCwgc2l6ZW9mKCp2YWwpKTtcXG4gMTk4OlxcdFxcdGlmICghcmMpXFxuIDE5OTpcXHRcXHRcXHRiZTE2X3RvX2NwdXModmFsKTtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0cmV0dXJuIHJjO1xcbiAyMDI6XFx0fVxcbiAyMDM6XFx0XFxuIDIwNDpcXHQvKipcXG4gMjA1OlxcdCAqIHpsMzA3M3hfd3JpdGVfdTE2IC0gd3JpdGUgdmFsdWUgdG8gMTZiaXQgcmVnaXN0ZXJcXG4gMjA2OlxcdCAqIEB6bGRldjogemwzMDczeCBkZXZpY2UgcG9pbnRlclxcbiAyMDc6XFx0ICogQHJlZzogcmVnaXN0ZXIgdG8gd3JpdGUgdG9cXG4gMjA4OlxcdCAqIEB2YWw6IHZhbHVlIHRvIHdyaXRlXFxuIDIwOTpcXHQgKlxcbiAyMTA6XFx0ICogV3JpdGVzIHZhbHVlIGludG8gZ2l2ZW4gMTZiaXQgcmVnaXN0ZXIuXFxuIDIxMTpcXHQgKlxcbiAyMTI6XFx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBcXHUwMDNjMCBvbiBlcnJvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODowNi4zMzkzMjg0NjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxNTk1MDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UndmUgcmVxdWVzdGVkLCBzcGVha2luZyBhcyBpZiB0aGVzZSBhcmUgbXkgb3duIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgQ29kZSAtIHpsMzA3M3hfcmVhZF9yZWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBjb2RlJ3MgdXNpbmcgYHpsMzA3M3hfcmVhZF9yZWdgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBpbnRlcmFjdGluZyB3aXRoIGEgWkwzMDczeCBkZXZpY2UsIGxpa2VseSBhIHRpbWluZyBjaGlwIG9yIHNpbWlsYXIsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gVGhlIGZ1bmN0aW9uJ3MgbmFtZSwgYF9yZWFkX3JlZ2AsIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJ3JlIHJlYWRpbmcgYSByZWdpc3RlciBmcm9tIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHJlZ2lzdGVyIG1hcCBvZiB0aGUgWkwzMDczeC4gSSdsbCBuZWVkIHRoYXQgdG8gdW5kZXJzdGFuZCAqd2hhdCogZGF0YSBpcyBiZWluZyByZXF1ZXN0ZWQgYW5kIHdoeS4gS25vd2luZyB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIgYWRkcmVzc2VzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUncyBpbnRlbnQuIElzIGl0IHJlYWRpbmcgc3RhdHVzIGZsYWdzPyBDb25maWd1cmF0aW9uIHZhbHVlcz8gT3IgcGVyaGFwcyBkaWFnbm9zdGljIGluZm9ybWF0aW9uPyBUaGUgY29udGV4dCBvZiB3aGVyZSB0aGlzIGB6bDMwNzN4X3JlYWRfcmVnYCBjYWxsIGFwcGVhcnMgaW4gdGhlIGxhcmdlciBjb2RlIHN0cnVjdHVyZSBpcyB2aXRhbCB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHdlIGluaXRpYWxpemluZyB0aGUgZGV2aWNlLCBwb2xsaW5nIGZvciBhbiBldmVudCwgb3IgcmVzcG9uZGluZyB0byBhbiBpbnRlcnJ1cHQ/IE5vdyBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNvbW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU0NSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzg6MTEuMzU1MjgxODA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdC8qIE1hcCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB0byB2aXJ0dWFsIHJhbmdlICovXFxuIDE0MTpcXHRcXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRyYyA9IHJlZ21hcF9idWxrX3dyaXRlKHpsZGV2LVxcdTAwM2VyZWdtYXAsIHJlZywgdmFsLCBzaXplKTtcXG4gMTQ0OlxcdFxcdGlmIChyYykge1xcbiAxNDU6XFx0XFx0XFx0ZGV2X2Vycih6bGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHdyaXRlIHJlZyAweCUwNHg6ICVwZVxcXFxuXFxcIiwgcmVnLFxcbiAxNDY6XFx0XFx0XFx0XFx0RVJSX1BUUihyYykpO1xcbiAxNDc6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiAxNDg6XFx0XFx0fVxcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRyZXR1cm4gMDtcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0LyoqXFxuIDE1NDpcXHQgKiB6bDMwNzN4X3JlYWRfdTggLSByZWFkIHZhbHVlIGZyb20gOGJpdCByZWdpc3RlclxcbiAxNTU6XFx0ICogQHpsZGV2OiB6bDMwNzN4IGRldmljZSBwb2ludGVyXFxuIDE1NjpcXHQgKiBAcmVnOiByZWdpc3RlciB0byB3cml0ZSB0b1xcbiAxNTc6XFx0ICogQHZhbDogdmFsdWUgdG8gd3JpdGVcXG4gMTU4OlxcdCAqXFxuIDE1OTpcXHQgKiBSZWFkcyB2YWx1ZSBmcm9tIGdpdmVuIDhiaXQgcmVnaXN0ZXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM4OjExLjM1NTQ1ODcwN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjU2MjIwODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvZGUgRmxvdyoqXG5cbkhtbSwgSSdtIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljLCBhbmQgSSBzZWUgYSBjYWxsIHRvIGB6bDMwNzN4X3JlYWRfcmVnYC4gT2theSwgbm93IEkndmUgbm90aWNlZCBpdCdzIHBvc2l0aW9uZWQgYWJvdmUgdGhlIGN1cnJlbnQgbGluZSBJJ20gZXhhbWluaW5nLiBJJ20gdGFraW5nIGEgbW9tZW50IHRvIHJlZ2lzdGVyIHRoYXQsIGFuZCBob3cgdGhhdCBwcmVjZWRpbmcgZnVuY3Rpb24gcmVsYXRlcyB0byB0aGUgc3Vic2VxdWVudCBzdGVwcy4gVGhpcyBwbGFjZW1lbnQgaGFzIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBkZXBlbmRlbmNpZXMgb3IgcGVyaGFwcyByZWdpc3RlciBpbml0aWFsaXphdGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgcmVsYXRpdmUgb3JkZXJpbmcgYXMgSSBleGFtaW5lIHN1YnNlcXVlbnQgbG9naWMsIGFuZCB1bmRlcnN0YW5kIGhvdyB2YWx1ZXMgcmVhZCBmcm9tIHJlZ2lzdGVycyBieSBgemwzMDczeF9yZWFkX3JlZ2AgYXJlIHRoZW4gdXNlZC4gSXQncyBhIGtleSBvYnNlcnZhdGlvbiB0aGF0IGRpcmVjdHMgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTc0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODoxNy4wMTE2ODIzODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0aWYgKFpMX1JFR19TSVpFKHJlZykgIT0gc2l6ZSkge1xcbiAxMDE6XFx0XFx0XFx0ZGV2X2Vycih6bGRldi1cXHUwMDNlZGV2LCBcXFwiSW52YWxpZCBzaXplICV6dSBmb3IgcmVnIDB4JTA0bHhcXFxcblxcXCIsXFxuIDEwMjpcXHRcXHRcXHRcXHRzaXplLCBaTF9SRUdfQUREUihyZWcpKTtcXG4gMTAzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTA0OlxcdFxcdH1cXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDEwNzpcXHR9XFxuIDEwODpcXHRcXG4gMTA5OlxcdHN0YXRpYyBpbnRcXG4gMTEwOlxcdHpsMzA3M3hfcmVhZF9yZWcoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdm9pZCAqdmFsLFxcbiAxMTE6XFx0XFx0XFx0IHNpemVfdCBzaXplKVxcbiAxMTI6XFx0e1xcbiAxMTM6XFx0XFx0aW50IHJjO1xcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRpZiAoIXpsMzA3M3hfY2hlY2tfcmVnKHpsZGV2LCByZWcsIHNpemUpKVxcbiAxMTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdC8qIE1hcCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyB0byB2aXJ0dWFsIHJhbmdlICovXFxuIDExOTpcXHRcXHRyZWcgPSBaTF9SRUdfQUREUihyZWcpICsgWkxfUkFOR0VfT0ZGU0VUO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRyYyA9IHJlZ21hcF9idWxrX3JlYWQoemxkZXYtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWwsIHNpemUpO1xcbiAxMjI6XFx0XFx0aWYgKHJjKSB7XFxuIDEyMzpcXHRcXHRcXHRkZXZfZXJyKHpsZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVhZCByZWcgMHglMDR4OiAlcGVcXFxcblxcXCIsIHJlZyxcXG4gMTI0OlxcdFxcdFxcdFxcdEVSUl9QVFIocmMpKTtcXG4gMTI1OlxcdFxcdFxcdHJldHVybiByYztcXG4gMTI2OlxcdFxcdH1cXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0cmV0dXJuIDA7XFxuIDEyOTpcXHR9XFxuIDEzMDpcXHRcXG4gMTMxOlxcdHN0YXRpYyBpbnRcXG4gMTMyOlxcdHpsMzA3M3hfd3JpdGVfcmVnKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIGNvbnN0IHZvaWQgKnZhbCxcXG4gMTMzOlxcdFxcdFxcdCAgc2l6ZV90IHNpemUpXFxuIDEzNDpcXHR7XFxuIDEzNTpcXHRcXHRpbnQgcmM7XFxuIDEzNjpcXHRcXG4gMTM3OlxcdFxcdGlmICghemwzMDczeF9jaGVja19yZWcoemxkZXYsIHJlZywgc2l6ZSkpXFxuIDEzODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODoxNy4wMTE4OTc4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzUzMzM1MjAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb2JlIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcHJvYmUgZnVuY3Rpb24sIGFuZCBpdCdzIGxvb2tpbmcgZm9yIGBaTF9SRUdfSURgLiBOYXR1cmFsbHksIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gc29tZXRoaW5nIGRlZmluZWQgd2l0aGluIGB6bDMwNzN4X2NoaXBfaWRzYC4gTXkgbWluZCdzIG5vdyBydW5uaW5nIHRocm91Z2ggdGhlIHBvc3NpYmxlIGNoaXAgSURzLiBMZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIHdoYXQgdGhpcyBgemwzMDczeF9jaGlwX2lkc2AgYWN0dWFsbHkgY29udGFpbnMuIFRpbWUgdG8gcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBhbmQgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoLiBVbmRlcnN0YW5kaW5nIHRob3NlIElEcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBleHBlY3RlZCBoYXJkd2FyZSB0aGlzIHByb2JlIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5ODksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM4OjMwLjU0NTI1MjIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY1MTAyMzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfY2hpcF9pZHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTI1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHpsMzA3M3hfY2hpcF9pZHNbXSA9IHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjctXFx0WkxfQ0hJUF9JTkZPKDB4MEUzMCwgMiwgWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyKSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODA9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTkyLVxcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTkzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpKyspIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk0OlxcdFxcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTUtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk3LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTg6XFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk5LVxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIC1FTk9ERVYsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwMS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwMjpcXHR6bGRldi1cXHUwMDNlaW5mbyA9IFxcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODozNi43MTAzNjAxMTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ0Mjg3MTQ0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgemwzMDczeCBEcml2ZXI6IEEgU3l6a2FsbGVyIENoYWxsZW5nZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoZSBgemwzMDczeGAgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHNpbXVsYXRlIGl0cyBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgd2l0aGluIFN5emthbGxlci4gVGhlIGNoaXAgSUQsIGxldCdzIHNheSBgMHgwRTMwYCwgaXMgdGhlIGtleS4gQ2FuIEkgZ2V0IFN5emthbGxlciB0byBtb2NrIHRoaXMgSTJDIGludGVyYWN0aW9uP1xuXG5UaGUgaW1tZWRpYXRlIHByb2JsZW0gaXMgdGhhdCBTeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgYnVpbHQtaW4sIGZpbmUtZ3JhaW5lZCBJMkMgbW9jayB0aGF0IGNhbiByZXR1cm4gc3BlY2lmaWMgdmFsdWVzIGZvciBzcGVjaWZpYyByZWdpc3RlcnMuIEkga25vdyBpdCAqZG9lcyogaGF2ZSBzb21lIGJhc2ljIGAvZGV2L2kyYy1YYCBmdXp6aW5nLCBidXQgdGhhdCdzIHJlYWxseSBmb3IgdXNlcnNwYWNlIHRvICp0YWxrKiB0byBJMkMgZGV2aWNlcywgbm90IGZvciAqZW11bGF0aW5nKiB0aGUgZGV2aWNlcyB0aGVtc2VsdmVzLiBJZiBJIHRyeSB0byB0cmlnZ2VyIHRoZSBkZXZpY2UgaW5zdGFudGlhdGlvbiB0aHJvdWdoIHN5c2ZzJ3MgYG5ld19kZXZpY2VgLCB0aGUga2VybmVsIHByb2JlIHdpbGwgcnVuIEkyQyByZWFkcywgYW5kIHdpdGhvdXQgYSByZWFsIGRldmljZSwgdGhvc2UgcmVhZHMgd2lsbCBmYWlsLiBTbyBJIG5lZWQgYSB3YXkgdG8gbWFrZSB0aG9zZSByZWFkcyByZXR1cm4gd2hhdCBJIHdhbnQuIElkZWFsbHksIHRoZXJlJ2QgYmUgYSBnZW5lcmljIHNvZnR3YXJlIEkyQyBhZGFwdGVyIHVuZGVyIFN5emthbGxlcidzIGNvbnRyb2wuXG5cblRoZW4gSSByZWNhbGxlZCBgaTJjLXN0dWJgLiBUaGF0J3MgYSBrZXJuZWwgbW9kdWxlIHRoYXQgbWFrZXMgZmFrZSBJMkMgYWRhcHRlciBhbmQgZGV2aWNlcy4gTGV0IG1lIGNoZWNrIGlmIFN5emthbGxlciBlbmFibGVzIGl0LiBVc3VhbGx5LCBgQ09ORklHX0kyQ19TVFVCYCBpcyBlbmFibGVkLiBCdXQgSSByZWFsaXplZCBgaTJjLXN0dWJgIG9ubHkgc3VwcG9ydHMgU01CdXMgY29tbWFuZHMgYW5kIGB6bDMwNzN4YCB1c2VzIHJlZ21hcCBvdmVyIEkyQy4gQW5kLCBpZiBgaTJjLXN0dWJgIGlzIHVzZWQsIGNvdWxkIEkgbG9hZCBpdCB3aXRoIGBjaGlwX2FkZHI9MHgyMGAgYW5kIHRoZW4gcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHZpYSBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLVgvMC0wMDIwL2A/IE5vLCBgaTJjLXN0dWJgIGRvZXNuJ3QgZXhwb3NlIHJlZ2lzdGVycyB2aWEgc3lzZnMuIEFoLCBidXQgd2FpdCBhIHNlY29uZC5cblxuU3l6a2FsbGVyICpjYW4qIHdyaXRlIHRvIGAvZGV2L2kyYy1YYCEgSSBjb3VsZCB1c2UgYC9kZXYvaTJjLVhgIHRvIHByb2dyYW0gdGhlIGBpMmMtc3R1YmAgcmVnaXN0ZXJzLiBBbmQsIGlmIHVzZXJzcGFjZSB3cml0ZXMgdG8gYC9kZXYvaTJjLVhgICh0aGUgZmFrZSBhZGFwdGVyKSwgaXQgY2FuIHdyaXRlIHRvIHRoZSBmYWtlIGRldmljZSdzIHJlZ2lzdGVycy4gVGhlbiwgaWYgdXNlcnNwYWNlIGluc3RhbnRpYXRlcyBgemwzMDczeGAgb24gdGhlIHNhbWUgZmFrZSBhZGFwdGVyIGF0IHRoZSBzYW1lIGFkZHJlc3MsIHRoZSBgemwzMDczeGAgZHJpdmVyICpzaG91bGQqIHJlYWQgdGhlIHJlZ2lzdGVycyBJIGp1c3QgcHJvZ3JhbW1lZC4gQnJpbGxpYW50IVxuXG5Ob3csIGRvZXMgU3l6a2FsbGVyICphY3R1YWxseSogZG8gdGhpcz8gSSdtIG5vdCBmYW1pbGlhciB3aXRoIGFueSBzcGVjaWZpYyBleGFtcGxlcywgYW5kIEkgY2FuJ3QgdGhpbmsgb2YgYW55dGhpbmcgbGlrZSBgc3l6X2kyY19zZXR1cGAuIEknbGwgaGF2ZSB0byBjaGVjayB0aGUgU3l6a2FsbGVyIHNvdXJjZS4gSG1tLCBJIGp1c3QgcmVtZW1iZXJlZCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X3VzYl9jb25uZWN0YCwgYHN5el84MDIxMV9qb2luX2lic3NgLCBhbmQgc28gb24sIGJ1dCBubyBgc3l6X2kyY19zZXR1cGAuIExldCBtZSBqdXN0IGFzc3VtZSBpdCBkb2Vzbid0IGRvIGl0IGRpcmVjdGx5LlxuXG5Pa2F5LCBhcmUgdGhlcmUgKm90aGVyKiBwYXRocyB0byByZWFjaCB0aGlzIGNvZGU/IFdoYXQgYWJvdXQgU1BJPyBUaGUgZHJpdmVyIGhhcyBhIGB6bDMwNzN4X3NwaV9wcm9iZWAgZnVuY3Rpb24uIEkgYW0gbm90IGZhbWlsaWFyIHdpdGggU3l6a2FsbGVyJ3MgU1BJIGNhcGFiaWxpdGllcyBidXQgSSByZW1lbWJlciBpdCBkb2Vzbid0IGhhdmUgYSBTUEkgbW9jayBlaXRoZXIuXG5cbk5vdywgSSBoYXZlIGEgYmlnZ2VyIHByb2JsZW0uIEknbSBvcGVyYXRpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQXJlIHRoZXNlIGtpbmRzIG9mIEkyQy9TUEkgZHJpdmVycyBldmVuIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQ/IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCIgSXQncyBnZW5lcmFsbHkgaW1wb3NzaWJsZSB0byBzdWNjZXNzZnVsbHkgcmVhY2ggdGhlIHByb2JlIGZ1bmN0aW9uIHdpdGhvdXQgYSByZWFsLWlzaCBoYXJkd2FyZSBzZXR1cCBvciBhIHJlYWxseSBjbGV2ZXIgZW11bGF0b3IuIFByb2JlcyBhbHdheXMgY2hlY2sgY2hpcCBJRHMuXG5cbkkgZ3Vlc3MgSSBzaG91bGQgY2hlY2sgb25lIGxhc3QgdGhpbmc6IGlzIHRoZXJlIGFueSBleGlzdGluZyB0ZXN0IG1vY2sgZm9yIGB6bDMwNzN4YD8gSWYgbm90LCBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIG5vbi10cml2aWFsIGFtb3VudCBvZiB3b3JrIHRvIGdldCB0aGlzIGZ1enplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3MjUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzg6NTEuMTM5MDc2ODY5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODYzNjQxMzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidG9vbHMvdGVzdGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzg6NTEuOTI1NDUzNzMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDgxMjIwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBsaW5lIG9mIHRob3VnaHQsIHRoaW5raW5nIGFzIGEgc2Vhc29uZWQgZW5naW5lZXI6XG5cbioqQ2hlY2tpbmcgZm9yIFRlc3QgTW9ja3MgaW4gdGhlIERQTEwgRHJpdmVyIERpcmVjdG9yeSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgaGVhdnktZHV0eSBkZWJ1Z2dpbmcgb3IgZmVhdHVyZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhhdCBgZHJpdmVycy9kcGxsL3psMzA3M3gvYCBkaXJlY3RvcnksIEkgYWx3YXlzIHN0YXJ0IHdpdGggYSBzYW5pdHkgY2hlY2suIExldCdzIHNlZSBpZiB3ZSd2ZSBiZWVuIGRpbGlnZW50IHdpdGggb3VyIHRlc3Rpbmcgc3RyYXRlZ3kuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhIHRlc3QgbW9jayBhdmFpbGFibGUuIEhhdmluZyBhIG1vY2sgZm9yIHRoYXQgRFBMTCBtb2R1bGUg4oCTIHRoZSBaTDMwNzN4IOKAkyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIGVmZmljaWVudCBkZXZlbG9wbWVudCBhbmQgcmVncmVzc2lvbiB0ZXN0aW5nLiBJdCBhbGxvd3MgZm9yIGNvbnRyb2xsZWQgZXhwZXJpbWVudGF0aW9uIGFuZCBpc29sYXRpb24gb2YgdGhlIG1vZHVsZSBmcm9tIHBvdGVudGlhbGx5IGNvbXBsZXggaGFyZHdhcmUgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcy4gRmluZGluZyBhIGdvb2QgbW9jayB3aWxsIHNhdmUgYSBsb3Qgb2YgdGltZSBhbmQgZWZmb3J0IGRvd24gdGhlIGxpbmUuIEl0IGF2b2lkcyB0aGUgbmVlZCB0byByZXBlYXRlZGx5IGJvb3QgdGhlIHN5c3RlbSBpbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIGp1c3QgdG8gdGVzdCBhIHNtYWxsIGNvZGUgY2hhbmdlLiBQbHVzLCBpdCdzIGVzc2VudGlhbCBmb3IgY3JlYXRpbmcgc3RhYmxlIHVuaXQgdGVzdHMuIElmIHRoZXJlIGlzbid0IGEgbW9jaywgdGhlbiBpdCdzIHRpbWUgdG8gY3JlYXRlIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MzEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODo1OS41NzM1Nzg0NDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJjaGFuLmNcIixcbiAgICBcImNoYW4uaFwiLFxuICAgIFwiY29yZS5jXCIsXG4gICAgXCJjb3JlLmhcIixcbiAgICBcImRldmxpbmsuY1wiLFxuICAgIFwiZGV2bGluay5oXCIsXG4gICAgXCJkcGxsLmNcIixcbiAgICBcImRwbGwuaFwiLFxuICAgIFwiZmxhc2guY1wiLFxuICAgIFwiZmxhc2guaFwiLFxuICAgIFwiZncuY1wiLFxuICAgIFwiZncuaFwiLFxuICAgIFwiaTJjLmNcIixcbiAgICBcIm91dC5jXCIsXG4gICAgXCJvdXQuaFwiLFxuICAgIFwicHJvcC5jXCIsXG4gICAgXCJwcm9wLmhcIixcbiAgICBcInJlZi5jXCIsXG4gICAgXCJyZWYuaFwiLFxuICAgIFwicmVncy5oXCIsXG4gICAgXCJzcGkuY1wiLFxuICAgIFwic3ludGguY1wiLFxuICAgIFwic3ludGguaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODo1OS41NzM3MTA5MjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE2MDkxMDI3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFRhcmdldCBDb2RlOiBBIEZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB6bDMwNzN4YCBkcml2ZXIgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZnV6emFibGUgd2l0aCBzeXprYWxsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJObyB0ZXN0IG1vY2tzLlwiIFNpbmNlIHN5emthbGxlciBydW5zIGluIGVudmlyb25tZW50cyB3aXRob3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgdGhpcyBgemwzMDczeGAgZGV2aWNlJ3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBhbG1vc3QgY2VydGFpbmx5IGZhaWwuIEl0IGV4cGxpY2l0bHkgY2hlY2tzIHRoZSBjaGlwIElELCBhbmQgaWYgdGhhdCBkb2Vzbid0IG1hdGNoLCBpdCByZXR1cm5zIGAtRU5PREVWYC4gSSBxdWlja2x5IGRpc21pc3NlZCB0aGUgYnlwYXNzLCBhcyB0aGUgY29kZSBkaXJlY3RseSBwcmV2ZW50cyB0aGF0LlxuXG5UaGVuLCBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgYGkyYy1zdHViYCwgY291bGQgc3l6a2FsbGVyIGxldmVyYWdlIHRoYXQgdG8gZW11bGF0ZSB0aGUgZGV2aWNlPyBCdXQsIHdhaXQsIGBpMmMtc3R1YmAgb25seSBzdXBwb3J0cyA4LWJpdCByZWdpc3RlciBhZGRyZXNzZXMsIHdoZXJlYXMgYHpsMzA3M3hgIHVzZXMgMTYtYml0IHJlZ2lzdGVycy4gTXkgaW1tZWRpYXRlIGNvbmNsdXNpb24sIHRoZW4sIHdhcyB0aGF0IGl0IHdhcyBpbXBvc3NpYmxlLiBObyBvdGhlciBJMkMgbW9ja3MgYXJlIGF2YWlsYWJsZSwgbm90IGV2ZW4gYW4gYGkyYy1tb2NrYC4gVGhlIHNhbWUgZ29lcyBmb3IgU1BJIOKAkyBubyBgc3BpLW1vY2tgIGV4aXN0cy5cblxuU28sIHRoZSBwcm9iZSBmYWlscywgbWFraW5nIHRoZSBkcml2ZXIgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cC4gVGhlIHRhcmdldCBjb2RlIGxpZXMgd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGB6bDMwNzN4X2NoYW5fdG9kX3JlYWRgLCBgemwzMDczeF9jaGFuX3RvZF93cml0ZWAsIGV0Yy4sIGFsbCBvZiB3aGljaCBhcmUgUFRQIGNsb2NrIG9wZXJhdGlvbnMuIFRoZXNlIGFyZSBvbmx5IHJlZ2lzdGVyZWQgaWYgYHpsMzA3M3hfZHBsbF9yZWdpc3RlcmAgc3VjY2VlZHMsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB6bDMwNzN4X2Rldl9wcm9iZWAuIFNpbmNlIHRoYXQgcHJvYmUgd2lsbCBmYWlsLCB0aG9zZSBmdW5jdGlvbnMgd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQuIFRodXMsIHRoaXMgY29kZSBwYXRoLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBub3QgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgbWVhbnMuXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjay4gU3l6a2FsbGVyIHVzdWFsbHkgaGFzIG9wdGlvbnMsIHJpZ2h0PyBJcyB0aGVyZSBhbnl0aGluZyB0aGF0IGNvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gZW11bGF0ZSBJMkM/IEkgbG9va2VkIGZvciBhbnkgc2ltaWxhciBjb25maWd1cmF0aW9ucywgYnV0LCBubywgaXQgcmVsaWVzIG9uIHN0cmljdCBjaGlwIElEIHZhbGlkYXRpb24uIFdhaXQsIEkgaGFkIGFub3RoZXIgdGhvdWdodDogd2hhdCBhYm91dCBgdmhjaWAgZm9yIFVTQi1JMkMgYWRhcHRlciEgSSBjYW4gdXNlIGBzeXpfdXNiX2Nvbm5lY3RgIHRvIGZha2UgYW4gYGkyYy10aW55LXVzYmAgZGV2aWNlLiBUaGF0IHdheSwgc3l6a2FsbGVyIGNvdWxkIGludGVyY2VwdCB0aGUgSTJDIHJlcXVlc3RzIGFuZCByZXR1cm4gdGhlIGV4cGVjdGVkIGNoaXAgSUQgd2hlbiByZXF1ZXN0ZWQuXG5cblllcyEgSSBjYW4gc2VlIHRoYXQgYHN5el91c2JfY29ubmVjdGAgaGFzIHRoYXQgY2FwYWJpbGl0eSEgVGhlIGtlcm5lbCB3b3VsZCB0aGVuIHJlcXVlc3QgYW4gSTJDIHJlYWQsIHRoZSBVU0ItSTJDIGFkYXB0ZXIgd291bGQgcHJvY2VzcyB0aGF0LCBhbmQgc3l6a2FsbGVyIGNvdWxkIHByb3ZpZGUgdGhlIHJpZ2h0IGNoaXAgSUQgYDB4MEUzMGAgaW4gaXRzIHJlc3BvbnNlISBUaGUgcHJvYmFiaWxpdHkgb2Ygc3l6a2FsbGVyIGdlbmVyYXRpbmcgdGhlIGNvcnJlY3QgMTYtYml0IGNoaXAgSUQgcmFuZG9tbHkgaXMsIG9mIGNvdXJzZSwgdmVyeSBsb3c6IDEvNjU1MzYuIEJ1dCwgd2FpdCwgc3l6a2FsbGVyIHVzZXMgY292ZXJhZ2UtZ3VpZGVkIGZ1enppbmcsIHNvIGl0ICpjb3VsZCogZGV0ZWN0IHRoZSBjb21wYXJpc29uIGFuZCBldmVudHVhbGx5IGZpbmQgdGhlIGNoaXAgSUQhXG5cblNvLCB0aGUgSTJDIHJlYWQgZ29lcyB0aHJvdWdoIGByZWdtYXBgLCB0aGVuIGBpMmNgLCB0aGVuIFVTQiB0byBzeXprYWxsZXIuIFN5emthbGxlcidzIFVTQiBmdXp6ZXIgcmVjZWl2ZXMgYSBzdHJlYW0gb2YgYnl0ZXMgZm9yIFVTQiBlbmRwb2ludHMuIElmIEkgY2FuIHByb3ZpZGUgYDB4MEUzMGAsIHRoZSBwcm9iZSBjb3VsZCBjb250aW51ZS4gVGhlIGRyaXZlciB3b3VsZCB0aGVuIHJlYWQgYFJFVklTSU9OYCwgYEZXX1ZFUmAsIGBDVVNUT01fQ09ORklHX1ZFUmAuIEl0IHdvdWxkIHRoZW4gcmVnaXN0ZXIgRFBMTCBjaGFubmVscy5cblxuSXMgdGhpcyBwcmFjdGljYWxseSBhY2hpZXZhYmxlLCB0aG91Z2g/IFVzdWFsbHksIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMgYXJlIGNvbnNpZGVyZWQgaGFyZCB0byByZWFjaCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gQnV0LCBpZiBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIsIHdlIHN0aWxsIHdhbnQgdG8gZnV6eiBpdC4gVGhlIGluc3RydWN0aW9ucyBzdGF0ZSBjbGVhcmx5IHRvIGV4Y2x1ZGUgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQnV0IGlzIHRoaXMgcmVhbGx5IGltcG9zc2libGU/XG5cblN5emthbGxlciBjYW4gY3JlYXRlIGFuIEkyQyBidXMgdmlhIGBpMmMtdGlueS11c2JgIG9yIGBpMmMtc3R1YmAgb3IgYGkyYy1ncGlvYC4gQnV0IHN5emthbGxlciBkb2Vzbid0IGhhdmUgYW4gSTJDIGRldmljZSBmdXp6ZXIgZm9yIGF1dG9tYXRpY2FsbHkgaW5zdGFudGlhdGluZyBhbGwgSTJDIGRyaXZlcnMgYW5kIG1vY2tpbmcgdGhlaXIgcmVnaXN0ZXJzLiBTeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBmb3IgYGkyY19kZXZgLCBidXQgbm90aGluZyBmb3IgbW9ja2luZyBJMkMgZGV2aWNlcy4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgYHpsMzA3M3hgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTk3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MjgsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM5OjIxLjE4MjgxNjU3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NTgxMTQ0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bDMwNzN4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM5OjIxLjc5ODQwNjAzNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUxOTYxODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIEV4aXN0aW5nIFN5emthbGxlciBDb3ZlcmFnZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzY2FuLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiRG8gd2UgYWxyZWFkeSBoYXZlIHNvbWUgU3l6a2FsbGVyIGNvdmVyYWdlIGZvciB0aGlzIGBkcGxsYCB0aGluZz9cIiBUaGUgZ29hbCBoZXJlIGlzIGVmZmljaWVuY3k7IHRoZXJlJ3Mgbm8gc2Vuc2UgaW4gcmVpbnZlbnRpbmcgdGhlIHdoZWVsIGlmIHNvbWVvbmUncyBhbHJlYWR5IGRvbmUgdGhlIGdyb3VuZHdvcmsuIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgZm9yIG1lIC0gcXVpY2tseSB2ZXJpZnlpbmcgaWYgZXhpc3RpbmcgZnV6emluZyBpbmZyYXN0cnVjdHVyZSBoYW5kbGVzIGEgdGFyZ2V0LiBTbywgbGV0J3MgY2hlY2sgZm9yIGFueSBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb25zLiBJdCdzIHRoZSBtb3N0IGxpa2VseSB0b29sIHRvIGhhdmUgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDM2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6MjYuMjUwMzcxNjk3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjc2MTQzODAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RwbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM5OjI2LjUxNzk5NjkzN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcwNjgzMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IERQTEwgTG9jYXRpb24qKlxuXG5IbW0sIGxldCdzIHNlZS4uLiAqZHBsbCouLi4gd2hlcmUncyB0aGF0IGhpZGluZz8gUmlnaHQsIEkgc2hvdWxkIGJlIGZhbWlsaWFyIHdpdGggdGhpcyBjb2RlIGJhc2UuIE9rYXksIHdhaXQgYSBtaW51dGUsIEkgcmVtZW1iZXIgbm93LiBUaGF0IG1vZHVsZSwgdGhhdCBzcGVjaWZpYyBpbnN0YW5jZSBvZiBEUExMLCBJJ20gcHJldHR5IHN1cmUgaXQncyByZXNpZGluZyBpbiBgZHJpdmVycy9kcGxsYC4gWWVzLCB0aGF0IGxvY2F0aW9uIG1ha2VzIHNlbnNlIGdpdmVuIGl0cyBmdW5jdGlvbiB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2MzQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozOTozMC4xODg2ODQ2NDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODgwMjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZHBsbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDQ2NDcgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvZHBsbC9LY29uZmlnPTExPWNvbmZpZyBEUExMX1JFRkNOVF9UUkFDS0VSXFxuLS1cXG5kcml2ZXJzL2RwbGwvS2NvbmZpZy0yMC1cXHQgIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBleHBvc2VkIHZpYSBkZWJ1Z2ZzIGF0OlxcbmRyaXZlcnMvZHBsbC9LY29uZmlnOjIxOlxcdCAgICAvc3lzL2tlcm5lbC9kZWJ1Zy9yZWZfdHJhY2tlci9kcGxsX2RldmljZV8qXFxuZHJpdmVycy9kcGxsL0tjb25maWc6MjI6XFx0ICAgIC9zeXMva2VybmVsL2RlYnVnL3JlZl90cmFja2VyL2RwbGxfcGluXypcXG5kcml2ZXJzL2RwbGwvS2NvbmZpZy0yMy1cXG4tLVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnLTI1LVxcbmRyaXZlcnMvZHBsbC9LY29uZmlnOjI2OnNvdXJjZSBcXFwiZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2RwbGwvS2NvbmZpZy0yNy1cXG4tLVxcbmRyaXZlcnMvZHBsbC9NYWtlZmlsZS01LVxcbmRyaXZlcnMvZHBsbC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19EUExMKSAgICAgICs9IGRwbGwub1xcbmRyaXZlcnMvZHBsbC9NYWtlZmlsZTo3OmRwbGwteSAgICAgICAgICAgICAgICAgICs9IGRwbGxfY29yZS5vXFxuZHJpdmVycy9kcGxsL01ha2VmaWxlOjg6ZHBsbC15ICAgICAgICAgICAgICAgICAgKz0gZHBsbF9uZXRsaW5rLm9cXG5kcml2ZXJzL2RwbGwvTWFrZWZpbGU6OTpkcGxsLXkgICAgICAgICAgICAgICAgICArPSBkcGxsX25sLm9cXG5kcml2ZXJzL2RwbGwvTWFrZWZpbGUtMTAtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMi0vKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozOiAqICBkcGxsX2NvcmUuYyAtIERQTEwgc3Vic3lzdGVtIGtlcm5lbC1zcGFjZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24uXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQtICpcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xOC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTk6I2luY2x1ZGUgXFxcImRwbGxfY29yZS5oXFxcIlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyMDojaW5jbHVkZSBcXFwiZHBsbF9uZXRsaW5rLmhcXFwiXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIxLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yMi0vKiBNdXRleCBsb2NrIHRvIHByb3RlY3QgRFBMTCBzdWJzeXN0ZW0gZGV2aWNlcyBhbmQgcGlucyAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyMzpERUZJTkVfTVVURVgoZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjQtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI1OkRFRklORV9YQVJSQVlfRkxBR1MoZHBsbF9kZXZpY2VfeGEsIFhBX0ZMQUdTX0FMTE9DKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjY6REVGSU5FX1hBUlJBWV9GTEFHUyhkcGxsX3Bpbl94YSwgWEFfRkxBR1NfQUxMT0MpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNy1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mjg6c3RhdGljIFJBV19OT1RJRklFUl9IRUFEKGRwbGxfbm90aWZpZXJfY2hhaW4pO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyOTpzdGF0aWMgREVGSU5FX0lEQShkcGxsX3Bpbl9pZHhfaWRhKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzAtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMxOnN0YXRpYyB1MzIgZHBsbF9kZXZpY2VfeGFfaWQ7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMyOnN0YXRpYyB1MzIgZHBsbF9waW5feGFfaWQ7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNC0jZGVmaW5lIEFTU0VSVF9EUExMX1JFR0lTVEVSRUQoZClcXHRcXFxcXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM1OlxcdFdBUk5fT05fT05DRSgheGFfZ2V0X21hcmsoXFx1MDAyNmRwbGxfZGV2aWNlX3hhLCAoZCktXFx1MDAzZWlkLCBEUExMX1JFR0lTVEVSRUQpKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNi0jZGVmaW5lIEFTU0VSVF9EUExMX05PVF9SRUdJU1RFUkVEKGQpXFx0XFxcXFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzpcXHRXQVJOX09OX09OQ0UoeGFfZ2V0X21hcmsoXFx1MDAyNmRwbGxfZGV2aWNlX3hhLCAoZCktXFx1MDAzZWlkLCBEUExMX1JFR0lTVEVSRUQpKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zOC0jZGVmaW5lIEFTU0VSVF9EUExMX1BJTl9SRUdJU1RFUkVEKHApIFxcXFxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mzk6XFx0V0FSTl9PTl9PTkNFKCF4YV9nZXRfbWFyayhcXHUwMDI2ZHBsbF9waW5feGEsIChwKS1cXHUwMDNlaWQsIERQTExfUkVHSVNURVJFRCkpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQwLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTpzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDItXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzpcXHRjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHM7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ0LVxcdHZvaWQgKnByaXY7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ1OlxcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00Ni19O1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00Ny1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDg6c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ5LVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTA6XFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MS1cXHR2b2lkICpwcml2O1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01Mi1cXHR2b2lkICpjb29raWU7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzOlxcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NC19O1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTY6c3RhdGljIGludCBjYWxsX2RwbGxfbm90aWZpZXJzKHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICppbmZvKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01Ny17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU4OlxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRwbGxfbG9jayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU5OlxcdHJldHVybiByYXdfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2ZHBsbF9ub3RpZmllcl9jaGFpbiwgYWN0aW9uLCBpbmZvKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjAtfVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02MS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NjI6dm9pZCBkcGxsX2RldmljZV9ub3RpZnkoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCB1bnNpZ25lZCBsb25nIGFjdGlvbilcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjMte1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NDpcXHRzdHJ1Y3QgZHBsbF9kZXZpY2Vfbm90aWZpZXJfaW5mbyBpbmZvID0ge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NTpcXHRcXHQuZHBsbCA9IGRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY2OlxcdFxcdC5pZCA9IGRwbGwtXFx1MDAzZWlkLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2NzpcXHRcXHQuaWR4ID0gZHBsbC1cXHUwMDNlZGV2aWNlX2lkeCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Njg6XFx0XFx0LmNsb2NrX2lkID0gZHBsbC1cXHUwMDNlY2xvY2tfaWQsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY5OlxcdFxcdC50eXBlID0gZHBsbC1cXHUwMDNldHlwZSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzAtXFx0fTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzEtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjcyOlxcdGNhbGxfZHBsbF9ub3RpZmllcnMoYWN0aW9uLCBcXHUwMDI2aW5mbyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTczLX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzQtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjc1OnZvaWQgZHBsbF9waW5fbm90aWZ5KHN0cnVjdCBkcGxsX3BpbiAqcGluLCB1NjQgc3JjX2Nsb2NrX2lkLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03Ni1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03Ny17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjc4OlxcdHN0cnVjdCBkcGxsX3Bpbl9ub3RpZmllcl9pbmZvIGluZm8gPSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc5LVxcdFxcdC5waW4gPSBwaW4sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtODctXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjg4OlxcdGNhbGxfZHBsbF9ub3RpZmllcnMoYWN0aW9uLCBcXHUwMDI2aW5mbyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTg5LX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTAtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjkxOnN0YXRpYyB2b2lkIGRwbGxfZGV2aWNlX3RyYWNrZXJfYWxsb2Moc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo5MjpcXHRcXHRcXHRcXHQgICAgICBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTkzLXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtOTQtI2lmZGVmIENPTkZJR19EUExMX1JFRkNOVF9UUkFDS0VSXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjk1OlxcdHJlZl90cmFja2VyX2FsbG9jKFxcdTAwMjZkcGxsLVxcdTAwM2VyZWZjbnRfdHJhY2tlciwgdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTk2LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTk4LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo5OTpzdGF0aWMgdm9pZCBkcGxsX2RldmljZV90cmFja2VyX2ZyZWUoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMDA6XFx0XFx0XFx0XFx0ICAgICBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwMS17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwMi0jaWZkZWYgQ09ORklHX0RQTExfUkVGQ05UX1RSQUNLRVJcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTAzOlxcdHJlZl90cmFja2VyX2ZyZWUoXFx1MDAyNmRwbGwtXFx1MDAzZXJlZmNudF90cmFja2VyLCB0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTA0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEwNi1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTA3OnN0YXRpYyB2b2lkIF9fZHBsbF9kZXZpY2VfaG9sZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTA4LXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTA5OlxcdGRwbGxfZGV2aWNlX3RyYWNrZXJfYWxsb2MoZHBsbCwgdHJhY2tlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExMDpcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmRwbGwtXFx1MDAzZXJlZmNvdW50KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTExLX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTEyLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTM6c3RhdGljIHZvaWQgX19kcGxsX2RldmljZV9wdXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTExNC17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExNTpcXHRkcGxsX2RldmljZV90cmFja2VyX2ZyZWUoZHBsbCwgdHJhY2tlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjExNjpcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZkcGxsLVxcdTAwM2VyZWZjb3VudCkpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE3OlxcdFxcdEFTU0VSVF9EUExMX05PVF9SRUdJU1RFUkVEKGRwbGwpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMTg6XFx0XFx0V0FSTl9PTl9PTkNFKCF4YV9lbXB0eShcXHUwMDI2ZHBsbC1cXHUwMDNlcGluX3JlZnMpKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTE5OlxcdFxcdHhhX2Rlc3Ryb3koXFx1MDAyNmRwbGwtXFx1MDAzZXBpbl9yZWZzKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTIwOlxcdFxcdHhhX2VyYXNlKFxcdTAwMjZkcGxsX2RldmljZV94YSwgZHBsbC1cXHUwMDNlaWQpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMjE6XFx0XFx0V0FSTl9PTighbGlzdF9lbXB0eShcXHUwMDI2ZHBsbC1cXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTIyOlxcdFxcdHJlZl90cmFja2VyX2Rpcl9leGl0KFxcdTAwMjZkcGxsLVxcdTAwM2VyZWZjbnRfdHJhY2tlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEyMzpcXHRcXHRrZnJlZShkcGxsKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTI0LVxcdH1cXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xMjYtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjEyNzpzdGF0aWMgdm9pZCBkcGxsX3Bpbl90cmFja2VyX2FsbG9jKHN0cnVjdCBkcGxsX3BpbiAqcGluLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEyOC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTMzLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxMzQ6c3RhdGljIHZvaWQgZHBsbF9waW5fdHJhY2tlcl9mcmVlKHN0cnVjdCBkcGxsX3BpbiAqcGluLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTEzNS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTQwLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNDE6c3RhdGljIHZvaWQgX19kcGxsX3Bpbl9ob2xkKHN0cnVjdCBkcGxsX3BpbiAqcGluLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0Mi17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE0MzpcXHRkcGxsX3Bpbl90cmFja2VyX2FsbG9jKHBpbiwgdHJhY2tlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0NC1cXHRyZWZjb3VudF9pbmMoXFx1MDAyNnBpbi1cXHUwMDNlcmVmY291bnQpO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0Ni1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTQ3OnN0YXRpYyB2b2lkIGRwbGxfcGluX2lkeF9mcmVlKHUzMiBwaW5faWR4KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTQ4OnN0YXRpYyB2b2lkIGRwbGxfcGluX3Byb3BfZnJlZShzdHJ1Y3QgZHBsbF9waW5fcHJvcGVydGllcyAqcHJvcCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE0OS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTUwOnN0YXRpYyB2b2lkIF9fZHBsbF9waW5fcHV0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1MS17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE1MjpcXHRkcGxsX3Bpbl90cmFja2VyX2ZyZWUocGluLCB0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTUzLVxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnBpbi1cXHUwMDNlcmVmY291bnQpKSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE1NDpcXHRcXHR4YV9lcmFzZShcXHUwMDI2ZHBsbF9waW5feGEsIHBpbi1cXHUwMDNlaWQpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNTU6XFx0XFx0eGFfZGVzdHJveShcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNTYtXFx0XFx0eGFfZGVzdHJveShcXHUwMDI2cGluLVxcdTAwM2VwYXJlbnRfcmVmcyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE1Ny1cXHRcXHR4YV9kZXN0cm95KFxcdTAwMjZwaW4tXFx1MDAzZXJlZl9zeW5jX3BpbnMpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNTg6XFx0XFx0ZHBsbF9waW5fcHJvcF9mcmVlKFxcdTAwMjZwaW4tXFx1MDAzZXByb3ApO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNTktXFx0XFx0Zndub2RlX2hhbmRsZV9wdXQocGluLVxcdTAwM2Vmd25vZGUpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNjA6XFx0XFx0ZHBsbF9waW5faWR4X2ZyZWUocGluLVxcdTAwM2VwaW5faWR4KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTYxLVxcdFxcdHJlZl90cmFja2VyX2Rpcl9leGl0KFxcdTAwMjZwaW4tXFx1MDAzZXJlZmNudF90cmFja2VyKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNjUtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE2NjpzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGxfZGV2aWNlX2dldF9ieV9pZChpbnQgaWQpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTE2Ny17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE2ODpcXHRpZiAoeGFfZ2V0X21hcmsoXFx1MDAyNmRwbGxfZGV2aWNlX3hhLCBpZCwgRFBMTF9SRUdJU1RFUkVEKSlcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTY5OlxcdFxcdHJldHVybiB4YV9sb2FkKFxcdTAwMjZkcGxsX2RldmljZV94YSwgaWQpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNzAtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTczLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzQ6c3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9yZWdpc3RyYXRpb24gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzU6ZHBsbF9waW5fcmVnaXN0cmF0aW9uX2ZpbmQoc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzY6XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2LFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNzctXFx0XFx0XFx0ICAgdm9pZCAqY29va2llKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xNzgte1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoxNzk6XFx0c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiAqcmVnO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xODAtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MTg5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTkwOmRwbGxfeGFfcmVmX3Bpbl9hZGQoc3RydWN0IHhhcnJheSAqeGFfcGlucywgc3RydWN0IGRwbGxfcGluICpwaW4sXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjE5MTpcXHRcXHQgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzLCB2b2lkICpwcml2LFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0xOTItXFx0XFx0ICAgIHZvaWQgKmNvb2tpZSlcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTkzLXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTk0OlxcdHN0cnVjdCBkcGxsX3Bpbl9yZWdpc3RyYXRpb24gKnJlZztcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MTk1OlxcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMTk2LVxcdGJvb2wgcmVmX2V4aXN0cyA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTIwMi1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjAzOlxcdFxcdHJlZyA9IGRwbGxfcGluX3JlZ2lzdHJhdGlvbl9maW5kKHJlZiwgb3BzLCBwcml2LCBjb29raWUpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yMDQtXFx0XFx0aWYgKHJlZylcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yMzQtXFx0cmVnLVxcdTAwM2Vjb29raWUgPSBjb29raWU7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjIzNTpcXHRfX2RwbGxfcGluX2hvbGQocGluLCBcXHUwMDI2cmVnLVxcdTAwM2V0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjM2LVxcdGlmIChyZWZfZXhpc3RzKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI0Mi1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjQzOnN0YXRpYyBpbnQgZHBsbF94YV9yZWZfcGluX2RlbChzdHJ1Y3QgeGFycmF5ICp4YV9waW5zLCBzdHJ1Y3QgZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjQ0OlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI0NS1cXHRcXHRcXHQgICAgICAgdm9pZCAqY29va2llKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNDYte1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNDc6XFx0c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiAqcmVnO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNDg6XFx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNDktXFx0dW5zaWduZWQgbG9uZyBpO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI1My1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjU0OlxcdFxcdHJlZyA9IGRwbGxfcGluX3JlZ2lzdHJhdGlvbl9maW5kKHJlZiwgb3BzLCBwcml2LCBjb29raWUpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNTUtXFx0XFx0aWYgKFdBUk5fT04oIXJlZykpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjU3LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZyZWctXFx1MDAzZWxpc3QpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNTg6XFx0XFx0X19kcGxsX3Bpbl9wdXQocGluLCBcXHUwMDI2cmVnLVxcdTAwM2V0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjU5LVxcdFxcdGtmcmVlKHJlZyk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MjcxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MjcyOmRwbGxfeGFfcmVmX2RwbGxfYWRkKHN0cnVjdCB4YXJyYXkgKnhhX2RwbGxzLCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI3MzpcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcywgdm9pZCAqcHJpdiwgdm9pZCAqY29va2llKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNzQte1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNzU6XFx0c3RydWN0IGRwbGxfcGluX3JlZ2lzdHJhdGlvbiAqcmVnO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyNzY6XFx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yNzctXFx0Ym9vbCByZWZfZXhpc3RzID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjgwLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyODE6XFx0eGFfZm9yX2VhY2goeGFfZHBsbHMsIGksIHJlZikge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyODI6XFx0XFx0aWYgKHJlZi1cXHUwMDNlZHBsbCAhPSBkcGxsKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0yODMtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjI4NDpcXHRcXHRyZWcgPSBkcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmluZChyZWYsIG9wcywgcHJpdiwgY29va2llKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjg1LVxcdFxcdGlmIChyZWcpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjk0LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzoyOTU6XFx0XFx0cmVmLVxcdTAwM2VkcGxsID0gZHBsbDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMjk2LVxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZyZWYtXFx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mjk3OlxcdFxcdHJldCA9IHhhX2luc2VydCh4YV9kcGxscywgZHBsbC1cXHUwMDNlaWQsIHJlZiwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTI5OC1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzA3LVxcdFxcdGlmICghcmVmX2V4aXN0cykge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMDg6XFx0XFx0XFx0eGFfZXJhc2UoeGFfZHBsbHMsIGRwbGwtXFx1MDAzZWlkKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzA5LVxcdFxcdFxcdGtmcmVlKHJlZik7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzE1LVxcdHJlZy1cXHUwMDNlY29va2llID0gY29va2llO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMTY6XFx0X19kcGxsX2RldmljZV9ob2xkKGRwbGwsIFxcdTAwMjZyZWctXFx1MDAzZXRyYWNrZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMTctXFx0aWYgKHJlZl9leGlzdHMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9MzI0PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMyNTpkcGxsX3hhX3JlZl9kcGxsX2RlbChzdHJ1Y3QgeGFycmF5ICp4YV9kcGxscywgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMjY6XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMsIHZvaWQgKnByaXYsIHZvaWQgKmNvb2tpZSlcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzI3LXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzI4OlxcdHN0cnVjdCBkcGxsX3Bpbl9yZWdpc3RyYXRpb24gKnJlZztcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzI5OlxcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzMwLVxcdHVuc2lnbmVkIGxvbmcgaTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzMxLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMzI6XFx0eGFfZm9yX2VhY2goeGFfZHBsbHMsIGksIHJlZikge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozMzM6XFx0XFx0aWYgKHJlZi1cXHUwMDNlZHBsbCAhPSBkcGxsKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zMzQtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjMzNTpcXHRcXHRyZWcgPSBkcGxsX3Bpbl9yZWdpc3RyYXRpb25fZmluZChyZWYsIG9wcywgcHJpdiwgY29va2llKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzM2LVxcdFxcdGlmIChXQVJOX09OKCFyZWcpKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTMzOC1cXHRcXHRsaXN0X2RlbChcXHUwMDI2cmVnLVxcdTAwM2VsaXN0KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzM5OlxcdFxcdF9fZHBsbF9kZXZpY2VfcHV0KGRwbGwsIFxcdTAwMjZyZWctXFx1MDAzZXRyYWNrZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNDAtXFx0XFx0a2ZyZWUocmVnKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzQxLVxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnJlZi1cXHUwMDNlcmVmY291bnQpKSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM0MjpcXHRcXHRcXHR4YV9lcmFzZSh4YV9kcGxscywgaSk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM0My1cXHRcXHRcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZyZWYtXFx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0KSk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzQ5LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNTA6c3RydWN0IGRwbGxfcGluX3JlZiAqZHBsbF94YV9yZWZfZHBsbF9maXJzdChzdHJ1Y3QgeGFycmF5ICp4YV9yZWZzKVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNTEte1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNTI6XFx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNTMtXFx0dW5zaWduZWQgbG9uZyBpID0gMDtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zNTktXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM2MDpzdGF0aWMgc3RydWN0IGRwbGxfZGV2aWNlICpcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzYxOmRwbGxfZGV2aWNlX2FsbG9jKGNvbnN0IHU2NCBjbG9ja19pZCwgdTMyIGRldmljZV9pZHgsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzYyLXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzYzOlxcdHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzY0LVxcdGludCByZXQ7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM2NS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzY2OlxcdGRwbGwgPSBremFsbG9jX29iaigqZHBsbCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM2NzpcXHRpZiAoIWRwbGwpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM2OC1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzY5OlxcdHJlZmNvdW50X3NldChcXHUwMDI2ZHBsbC1cXHUwMDNlcmVmY291bnQsIDEpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzA6XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRwbGwtXFx1MDAzZXJlZ2lzdHJhdGlvbl9saXN0KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzcxOlxcdGRwbGwtXFx1MDAzZWRldmljZV9pZHggPSBkZXZpY2VfaWR4O1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzI6XFx0ZHBsbC1cXHUwMDNlY2xvY2tfaWQgPSBjbG9ja19pZDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6MzczOlxcdGRwbGwtXFx1MDAzZW1vZHVsZSA9IG1vZHVsZTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Mzc0OlxcdHJldCA9IHhhX2FsbG9jX2N5Y2xpYyhcXHUwMDI2ZHBsbF9kZXZpY2VfeGEsIFxcdTAwMjZkcGxsLVxcdTAwM2VpZCwgZHBsbCwgeGFfbGltaXRfMzJiLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozNzU6XFx0XFx0XFx0ICAgICAgXFx1MDAyNmRwbGxfZGV2aWNlX3hhX2lkLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzc2LVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM3NzpcXHRcXHRrZnJlZShkcGxsKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzc4LVxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM3OS1cXHR9XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM4MDpcXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZkcGxsLVxcdTAwM2VwaW5fcmVmcywgWEFfRkxBR1NfQUxMT0MpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozODE6XFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXFx1MDAyNmRwbGwtXFx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFxcXCJkcGxsX2RldmljZVxcXCIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zODItXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM4MzpcXHRyZXR1cm4gZHBsbDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzg0LX1cXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zODYtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM4NzogKiBkcGxsX2RldmljZV9nZXQgLSBmaW5kIGV4aXN0aW5nIG9yIGNyZWF0ZSBuZXcgZHBsbCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzg4LSAqIEBjbG9ja19pZDogY2xvY2tfaWQgb2YgY3JlYXRvclxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM5Mi0gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozOTM6ICogR2V0IGV4aXN0aW5nIG9iamVjdCBvZiBhIGRwbGwgZGV2aWNlLCB1bmlxdWUgZm9yIGdpdmVuIGFyZ3VtZW50cy5cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtMzk0LSAqIENyZWF0ZSBuZXcgaWYgZG9lc24ndCBleGlzdCB5ZXQuXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM5NS0gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzozOTY6ICogQ29udGV4dDogQWNxdWlyZXMgYSBsb2NrIChkcGxsX2xvY2spXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTM5Ny0gKiBSZXR1cm46XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjM5ODogKiAqIHZhbGlkIGRwbGxfZGV2aWNlIHN0cnVjdCBwb2ludGVyIGlmIHN1Y2NlZWRlZFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy0zOTktICogKiBFUlJfUFRSKFgpIC0gZXJyb3JcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDAwLSAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MDE6c3RydWN0IGRwbGxfZGV2aWNlICpcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDAyOmRwbGxfZGV2aWNlX2dldCh1NjQgY2xvY2tfaWQsIHUzMiBkZXZpY2VfaWR4LCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQwMzpcXHRcXHRkcGxsX3RyYWNrZXIgKnRyYWNrZXIpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQwNC17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQwNTpcXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsICpyZXQgPSBOVUxMO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MDYtXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDA3LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MDg6XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDA5OlxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZkcGxsX2RldmljZV94YSwgaW5kZXgsIGRwbGwpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDEwOlxcdFxcdGlmIChkcGxsLVxcdTAwM2VjbG9ja19pZCA9PSBjbG9ja19pZCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTE6XFx0XFx0ICAgIGRwbGwtXFx1MDAzZWRldmljZV9pZHggPT0gZGV2aWNlX2lkeCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MTI6XFx0XFx0ICAgIGRwbGwtXFx1MDAzZW1vZHVsZSA9PSBtb2R1bGUpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDEzOlxcdFxcdFxcdF9fZHBsbF9kZXZpY2VfaG9sZChkcGxsLCB0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDE0OlxcdFxcdFxcdHJldCA9IGRwbGw7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQxNS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MTgtXFx0aWYgKCFyZXQpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDE5OlxcdFxcdHJldCA9IGRwbGxfZGV2aWNlX2FsbG9jKGNsb2NrX2lkLCBkZXZpY2VfaWR4LCBtb2R1bGUpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MjAtXFx0XFx0aWYgKCFJU19FUlIocmV0KSlcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDIxOlxcdFxcdFxcdGRwbGxfZGV2aWNlX3RyYWNrZXJfYWxsb2MocmV0LCB0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDIyLVxcdH1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDIzLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MjQ6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkcGxsX2xvY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MjUtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDI3LX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDI4OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX2dldCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQyOS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDMwLS8qKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzE6ICogZHBsbF9kZXZpY2VfcHV0IC0gZGVjcmVhc2UgdGhlIHJlZmNvdW50IGFuZCBmcmVlIG1lbW9yeSBpZiBwb3NzaWJsZVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzI6ICogQGRwbGw6IGRwbGxfZGV2aWNlIHN0cnVjdCBwb2ludGVyXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQzMy0gKiBAdHJhY2tlcjogdHJhY2tpbmcgb2JqZWN0IGZvciB0aGUgYWNxdWlyZWQgcmVmZXJlbmNlXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQzNC0gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0MzU6ICogQ29udGV4dDogQWNxdWlyZXMgYSBsb2NrIChkcGxsX2xvY2spXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQzNjogKiBEcm9wIHJlZmVyZW5jZSBmb3IgYSBkcGxsIGRldmljZSwgaWYgYWxsIHJlZmVyZW5jZXMgYXJlIGdvbmUsIGRlbGV0ZVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0Mzc6ICogZHBsbCBkZXZpY2Ugb2JqZWN0LlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00MzgtICovXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQzOTp2b2lkIGRwbGxfZGV2aWNlX3B1dChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDQwLXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQxOlxcdG11dGV4X2xvY2soXFx1MDAyNmRwbGxfbG9jayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ0MjpcXHRfX2RwbGxfZGV2aWNlX3B1dChkcGxsLCB0cmFja2VyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQzOlxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDQ0LX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ1OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3B1dCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ0Ni1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ3OnN0YXRpYyBzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ4OmRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maW5kKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDQ5OlxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcywgdm9pZCAqcHJpdilcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDUwLXtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDUxOlxcdHN0cnVjdCBkcGxsX2RldmljZV9yZWdpc3RyYXRpb24gKnJlZztcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDUyLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NTM6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsIFxcdTAwMjZkcGxsLVxcdTAwM2VyZWdpc3RyYXRpb25fbGlzdCwgbGlzdCkge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NTQtXFx0XFx0aWYgKHJlZy1cXHUwMDNlb3BzID09IG9wcyBcXHUwMDI2XFx1MDAyNiByZWctXFx1MDAzZXByaXYgPT0gcHJpdilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjAtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2MTogKiBkcGxsX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIHRoZSBkcGxsIGRldmljZSBpbiB0aGUgc3Vic3lzdGVtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2MjogKiBAZHBsbDogcG9pbnRlciB0byBhIGRwbGxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDYzOiAqIEB0eXBlOiB0eXBlIG9mIGEgZHBsbFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NjQ6ICogQG9wczogb3BzIGZvciBhIGRwbGwgZGV2aWNlXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2NS0gKiBAcHJpdjogcG9pbnRlciB0byBwcml2YXRlIGluZm9ybWF0aW9uIG9mIG93bmVyXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2Ni0gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0Njc6ICogTWFrZSBkcGxsIGRldmljZSBhdmFpbGFibGUgZm9yIHVzZXIgc3BhY2UuXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2OC0gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0Njk6ICogQ29udGV4dDogQWNxdWlyZXMgYSBsb2NrIChkcGxsX2xvY2spXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3MC0gKiBSZXR1cm46XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDczLSAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NzQ6aW50IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZW51bSBkcGxsX3R5cGUgdHlwZSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDc1OlxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3Ni17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ3NzpcXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3OC1cXHRib29sIGZpcnN0X3JlZ2lzdHJhdGlvbiA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ4OC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDg5OlxcdG11dGV4X2xvY2soXFx1MDAyNmRwbGxfbG9jayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ5MDpcXHRyZWcgPSBkcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmluZChkcGxsLCBvcHMsIHByaXYpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00OTEtXFx0aWYgKHJlZykge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0OTI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkcGxsX2xvY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00OTMtXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDk3LVxcdGlmICghcmVnKSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ5ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRwbGxfbG9jayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ5OS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MDItXFx0cmVnLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTAzOlxcdGRwbGwtXFx1MDAzZXR5cGUgPSB0eXBlO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MDQ6XFx0X19kcGxsX2RldmljZV9ob2xkKGRwbGwsIFxcdTAwMjZyZWctXFx1MDAzZXRyYWNrZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MDU6XFx0Zmlyc3RfcmVnaXN0cmF0aW9uID0gbGlzdF9lbXB0eShcXHUwMDI2ZHBsbC1cXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MDY6XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cmVnLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZHBsbC1cXHUwMDNlcmVnaXN0cmF0aW9uX2xpc3QpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MDctXFx0aWYgKCFmaXJzdF9yZWdpc3RyYXRpb24pIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTA4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTA5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxMS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTEyOlxcdHhhX3NldF9tYXJrKFxcdTAwMjZkcGxsX2RldmljZV94YSwgZHBsbC1cXHUwMDNlaWQsIERQTExfUkVHSVNURVJFRCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUxMzpcXHRkcGxsX2RldmljZV9jcmVhdGVfbnRmKGRwbGwpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MTQ6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkcGxsX2xvY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTUtXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE3LX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTE4OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE5LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MjAtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyMTogKiBkcGxsX2RldmljZV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBkcGxsIGRldmljZVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MjI6ICogQGRwbGw6IHJlZ2lzdGVyZWQgZHBsbCBwb2ludGVyXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyMzogKiBAb3BzOiBvcHMgZm9yIGEgZHBsbCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTI0LSAqIEBwcml2OiBwb2ludGVyIHRvIHByaXZhdGUgaW5mb3JtYXRpb24gb2Ygb3duZXJcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MjctICogTm90ZTogSXQgZG9lcyBub3QgZnJlZSB0aGUgbWVtb3J5XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUyODogKiBDb250ZXh0OiBBY3F1aXJlcyBhIGxvY2sgKGRwbGxfbG9jaylcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTI5LSAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MzA6dm9pZCBkcGxsX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTMxOlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUzMi17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzMzpcXHRzdHJ1Y3QgZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uICpyZWc7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUzNC1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTM1OlxcdG11dGV4X2xvY2soXFx1MDAyNmRwbGxfbG9jayk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUzNjpcXHRBU1NFUlRfRFBMTF9SRUdJU1RFUkVEKGRwbGwpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1Mzc6XFx0ZHBsbF9kZXZpY2VfZGVsZXRlX250ZihkcGxsKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTM4OlxcdHJlZyA9IGRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maW5kKGRwbGwsIG9wcywgcHJpdik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUzOS1cXHRpZiAoV0FSTl9PTighcmVnKSkge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NDA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkcGxsX2xvY2spO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NDEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU0My1cXHRsaXN0X2RlbChcXHUwMDI2cmVnLVxcdTAwM2VsaXN0KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTQ0OlxcdF9fZHBsbF9kZXZpY2VfcHV0KGRwbGwsIFxcdTAwMjZyZWctXFx1MDAzZXRyYWNrZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NDUtXFx0a2ZyZWUocmVnKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTQ2LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NDc6XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZkcGxsLVxcdTAwM2VyZWdpc3RyYXRpb25fbGlzdCkpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTQ4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTQ5LVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTUwLVxcdH1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTUxOlxcdHhhX2NsZWFyX21hcmsoXFx1MDAyNmRwbGxfZGV2aWNlX3hhLCBkcGxsLVxcdTAwM2VpZCwgRFBMTF9SRUdJU1RFUkVEKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTUyOlxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTUzLX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTU0OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3VucmVnaXN0ZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NTUtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU1NjpzdGF0aWMgaW50IGRwbGxfcGluX2lkeF9hbGxvYyh1MzIgKnBpbl9pZHgpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU1Ny17XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTYzLVxcdC8qIEFsbG9jIHVuaXF1ZSBudW1iZXIgZnJvbSBJREEuIE51bWJlciBiZWxvbmdzIHRvIFxcdTAwM2MwLCBJTlRfTUFYXFx1MDAzZSByYW5nZSAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1NjQ6XFx0cmV0ID0gaWRhX2FsbG9jKFxcdTAwMjZkcGxsX3Bpbl9pZHhfaWRhLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTY1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU3My1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTc0OnN0YXRpYyB2b2lkIGRwbGxfcGluX2lkeF9mcmVlKHUzMiBwaW5faWR4KVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01NzUte1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU4Mi1cXHRwaW5faWR4IC09ICh1MzIpSU5UX01BWCArIDE7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU4MzpcXHRpZGFfZnJlZShcXHUwMDI2ZHBsbF9waW5faWR4X2lkYSwgcGluX2lkeCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU4NC19XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU4NS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTg2OnN0YXRpYyB2b2lkIGRwbGxfcGluX3Byb3BfZnJlZShzdHJ1Y3QgZHBsbF9waW5fcHJvcGVydGllcyAqcHJvcClcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTg3LXtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01OTMtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU5NDpzdGF0aWMgaW50IGRwbGxfcGluX3Byb3BfZHVwKGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpzcmMsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjU5NTpcXHRcXHRcXHQgICAgIHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpkc3QpXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTU5Ni17XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjM1LVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2MzY6c3RhdGljIHN0cnVjdCBkcGxsX3BpbiAqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYzNzpkcGxsX3Bpbl9hbGxvYyh1NjQgY2xvY2tfaWQsIHUzMiBwaW5faWR4LCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYzODpcXHQgICAgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3ApXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTYzOS17XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY0MDpcXHRzdHJ1Y3QgZHBsbF9waW4gKnBpbjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjQxLVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjQzLVxcdGlmIChwaW5faWR4ID09IERQTExfUElOX0lEWF9VTlNQRUMpIHtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NjQ0OlxcdFxcdHJldCA9IGRwbGxfcGluX2lkeF9hbGxvYyhcXHUwMDI2cGluX2lkeCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY0NS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY2My1cXHR9XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY2NDpcXHRyZXQgPSBkcGxsX3Bpbl9wcm9wX2R1cChwcm9wLCBcXHUwMDI2cGluLVxcdTAwM2Vwcm9wKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjY1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjY3LVxcdHJlZmNvdW50X3NldChcXHUwMDI2cGluLVxcdTAwM2VyZWZjb3VudCwgMSk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY2ODpcXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgWEFfRkxBR1NfQUxMT0MpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NjktXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2cGluLVxcdTAwM2VwYXJlbnRfcmVmcywgWEFfRkxBR1NfQUxMT0MpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzAtXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2cGluLVxcdTAwM2VyZWZfc3luY19waW5zLCBYQV9GTEFHU19BTExPQyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3MTpcXHRyZXQgPSB4YV9hbGxvY19jeWNsaWMoXFx1MDAyNmRwbGxfcGluX3hhLCBcXHUwMDI2cGluLVxcdTAwM2VpZCwgcGluLCB4YV9saW1pdF8zMmIsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY3MjpcXHRcXHRcXHQgICAgICBcXHUwMDI2ZHBsbF9waW5feGFfaWQsIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTY3NC1cXHRcXHRnb3RvIGVycl94YV9hbGxvYztcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Njc1OlxcdHJlZl90cmFja2VyX2Rpcl9pbml0KFxcdTAwMjZwaW4tXFx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFxcXCJkcGxsX3BpblxcXCIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02NzYtXFx0cmV0dXJuIHBpbjtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjc3LWVycl94YV9hbGxvYzpcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Njc4OlxcdHhhX2Rlc3Ryb3koXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjc5LVxcdHhhX2Rlc3Ryb3koXFx1MDAyNnBpbi1cXHUwMDNlcGFyZW50X3JlZnMpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02ODAtXFx0eGFfZGVzdHJveShcXHUwMDI2cGluLVxcdTAwM2VyZWZfc3luY19waW5zKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NjgxOlxcdGRwbGxfcGluX3Byb3BfZnJlZShcXHUwMDI2cGluLVxcdTAwM2Vwcm9wKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjgyLWVycl9waW5fcHJvcDpcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02ODQtZXJyX3Bpbl9hbGxvYzpcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6Njg1OlxcdGRwbGxfcGluX2lkeF9mcmVlKHBpbl9pZHgpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02ODYtXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02ODgtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjY4OTpzdGF0aWMgdm9pZCBkcGxsX25ldGRldl9waW5fYXNzaWduKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4pXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM5OjMwLjM0NzQ5Mzc1NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODY1NTQ1NDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRFBMTCBOZXRsaW5rIFN1cHBvcnQgaW4gU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoaXMgYGRwbGxgIHRoaW5nLiBSaWdodCwgYGRwbGxgIGlzIGEgc3Vic3lzdGVtLCBhbmQgSSByZWNhbGwgc2VlaW5nIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGluIGBkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyIGhhdmUgYW55IGRlc2NyaXB0aW9ucyBmb3IgYGRwbGxgIG5ldGxpbmsgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBhbHJlYWR5IGNvdmVyZWQuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHR5cGljYWwgcGxhY2VzLiBMZXQncyBzZWUsIG1heWJlIGl0J3MgaW4gYG5ldC9kcGxsYCBvciBwb3NzaWJseSBgZHJpdmVycy9kcGxsL2RwbGxfbmwuY2AuIEFoYSEgRm91bmQgYGRwbGxfbmwuY2AsIHRoYXQncyBhIGdvb2Qgc2lnbi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBTeXprYWxsZXIgaW5mcmFzdHJ1Y3R1cmUuIERvZXMgU3l6a2FsbGVyIGtub3cgYWJvdXQgdGhpcyBgZHBsbGAgbmV0bGluayBpbnRlcmZhY2U/IEknbGwgc2VhcmNoIHRoZSBgc3lzL2xpbnV4L2AgZGlyZWN0b3J5IHdpdGhpbiBTeXprYWxsZXIgZm9yIGFueSByZWxldmFudCBkZWZpbml0aW9ucywgbG9va2luZyBmb3IgYW55dGhpbmcgbmFtZWQgYGRwbGxgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDc5NzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6MzUuMjEzMDQxMzM1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU1MzkzNjIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6MzUuNzI4NTk0MDM3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMjExOTkxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEUExMIEZ1enppbmcgUmVhY2hhYmlsaXR5KipcblxuT2theSwgSSBuZWVkIHRvIHJlY2FsaWJyYXRlIGhlcmUuIEknbSBkZWVwIGluIHRoZSBrZXJuZWwgdHJlZSwgbm90IHRoZSBzeXprYWxsZXIgcmVwb3NpdG9yeS4gVGhhdCBjaGFuZ2VzIHRoaW5nczsgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gc3l6a2FsbGVyJ3MgaW50ZXJuYWxzIHJpZ2h0IG5vdy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBzZWUgaWYgdGhlIGBkcGxsYCBuZXRsaW5rIGZhbWlseSBpcyBldmVuIHRhcmdldGVkLiBJIGNhbiBjaGVjayB0aGlzIGJ5IHZlcmlmeWluZyB0aGUgZXhpc3RlbmNlIG9mIGEgYGdlbmxfZmFtaWx5YCBlbnRyeSBmb3IgYGRwbGxgLiBZdXAsIGl0J3MgYSBHZW5lcmljIE5ldGxpbmsgZmFtaWx5LCB3aGljaCBtZWFucyBzeXprYWxsZXIncyBgZ2VuZXRsaW5rYCBmdXp6ZXIgKnNob3VsZCogYXV0b21hdGljYWxseSBwaWNrIGl0IHVwLCBwcm92aWRlZCBpdCdzIHJlZ2lzdGVyZWQuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGB6bDMwNzN4YCAqZHJpdmVyKiBpcyByZWFjaGFibGUsIHdoaWNoIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZS4gSWYgdGhlIGRyaXZlciBmYWlscyB0byBwcm9iZSBzdWNjZXNzZnVsbHksIHRoZSBEUExMIGRldmljZSBhbmQgdGhlIFBUUCBjbG9jayB3b24ndCBnZXQgcmVnaXN0ZXJlZC4gVGhhdCBtZWFucyB0aGUgbmV0bGluayBhbmQgUFRQIGlvY3RscyB3b24ndCBldmVuIG1ha2UgaXQgdG8gdGhlIGRyaXZlcidzIGNvZGUsIHNvIG5vIGZ1enppbmcgc3VjY2Vzcy5cblxuQW5kIGhlcmUncyB3aGVyZSBpdCBnZXRzIHRyaWNreS4gVGhhdCBkcml2ZXIgaXMgaGFyZHdhcmUtc3BlY2lmaWMsIHJlcXVpcmluZyBzcGVjaWZpYyBJMkMvU1BJIGhhcmR3YXJlLiBJdCBjaGVja3MgdGhlIGNoaXAgSUQsIHdoaWNoIG1lYW5zIGl0IGNhbm5vdCBiZSBlbXVsYXRlZCBlYXNpbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gU28gZmFyLCBubyBkaWNlLlxuXG5XYWl0LCBpcyB0aGVyZSAqYW55KiByZW1vdGUgY2hhbmNlIHRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCB1c2luZyBgaTJjLXN0dWJgPyBQcmV2aW91c2x5LCBJIG5vdGVkIHRoYXQgYGkyYy1zdHViYCBvbmx5IGRlYWxzIHdpdGggOC1iaXQgcmVnaXN0ZXIgYWRkcmVzc2VzLCB3aGlsZSBgemwzMDczeGAgdXNlcyAxNi1iaXQgcmVnaXN0ZXJzLiBGb3JnZXQgYGkyYy1zdHViYC5cblxuQnV0IHdhaXQsIGhvbGQgb24uIElzIGBpMmMtc3R1YmAgdGhlIG9ubHkgb3B0aW9uPyBXaGF0IGFib3V0IG90aGVyIHBvc3NpYmlsaXRpZXM/IFRoZXJlIGFyZSBubyBgaTJjLW1vY2tgIG9yIGBzcGktbW9ja2AgaW4gdGhlIHVwc3RyZWFtIGtlcm5lbC4gYHZrbXNgIGlzIGZvciBEUk07IHdyb25nIGRvbWFpbi4gYG1hYzgwMjExX2h3c2ltYCBpcyBmb3IgV2lGaSwgaXJyZWxldmFudC4gQW5kIGBuZXRkZXZzaW1gIGlzIGZvciBuZXR3b3JraW5nLCBhbHNvIG5vdCByZWxldmFudC5cblxuV2hhdCBhYm91dCBgZHBsbGAgaXRzZWxmPyBEb2VzIHRoZSBgZHBsbGAgcGFydCBoYXZlIGFueSBraW5kIG9mIHNpbXVsYXRvciBvciBtb2NraW5nIGNhcGFiaWxpdHk/IExldCdzIGludmVzdGlnYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIERQTEwgc2ltdWxhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODM4MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozOTo0NC43NDk3OTY3NTFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzA1MzQ2OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbC4qc2ltXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdD01NzU9Zm9yIGVhY2ggY2FsbCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyBvbmx5IHRoZSBvYmplY3QgcmVmY291bnRcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NTc2OmluY3JlYXNlcy4gQWxzbyBkcGxsX3Bpbl9wdXQoKSB3b3JrcyBzaW1pbGFybHkgdG8gZHBsbF9kZXZpY2VfcHV0KCkuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6NTAuMzgwMzM5ODg1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzOTUxNTE4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVbnJlYWNoYWJsZSBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIG5vIERQTEwgc2ltdWxhdG9yIGF2YWlsYWJsZSwgd2hpY2ggaXMgaW1tZWRpYXRlbHkgYSByb2FkYmxvY2suIFRoaXMgYHpsMzA3M3hgIGRyaXZlciBpcyBjbGVhcmx5IGhhcmR3YXJlLXNwZWNpZmljLCBtZWFuaW5nIEknbSBub3QgZ29pbmcgdG8gZ2V0IGFueXdoZXJlIHdpdGggcHJvYmluZyBpdCB3aXRob3V0IHRoZSBhY3R1YWwgc2lsaWNvbiBvciBhIGhpZ2hseSBzcGVjaWZpYyBlbXVsYXRvci4gSXQncyBhIGRlYWQgZW5kIGluIGVudmlyb25tZW50cyBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGxpbWl0YXRpb24gZm9yIHRlc3RpbmcgdGhlc2UgbW9kaWZpY2F0aW9ucy5cblxuTm93LCBob2xkIG9uLi4uIGlzIHRoZXJlIGV2ZW4gYSAqcmVtb3RlKiBjaGFuY2UgdGhhdCB0aGUgZHJpdmVyJ3MgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZGlyZWN0bHkgYnkgc29tZXRoaW5nIGVsc2UsIHNvbWUgb3RoZXIgcGllY2Ugb2YgY29kZSB0aGF0ICppcyogcmVhY2hhYmxlPyBObywgaXQncyBwcmV0dHkgY2xlYXIgaXTigJlzIGEgc3RhbmRhbG9uZSBkcml2ZXIuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgYW55IG1lY2hhbmlzbSwgZXZlbiBvYnNjdXJlLCB0byBieXBhc3MgdGhhdCBkYW1uIGNoaXAgSUQgY2hlY2suIFBlcmhhcHMgdGhlcmUncyBhIG1vZHVsZSBwYXJhbWV0ZXIgaGlkZGVuIHNvbWV3aGVyZSB0aGF0IGZvcmNlcyB0aGUgZHJpdmVyIHRvIGxvYWQgcmVnYXJkbGVzcy4gR290dGEgaW52ZXN0aWdhdGUgdGhhdCBwb3NzaWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6NTYuNzc1NDk0MzYzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA5NjAxNDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wYXJhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6NTYuOTc2NDYyMTA4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MjkzMjE5MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpcyAtIEF6dXJpdGUgRFBMTCBEcml2ZXIqKlxuXG5Pa2F5LCBubyBtb2R1bGUgcGFyYW1ldGVycyB0byBtYW5pcHVsYXRlIHRoaW5ncyBoZXJlLiBJcyB0aGVyZSBldmVuIGEgZGVidWdmcyBpbnRlcmZhY2UsIGFueXRoaW5nLCB0byBpbmplY3QgYSBmYWtlIGNoaXAgSUQ/IE5vcGUuIFNvLCB0aGUgcHJvYmUgd2lsbCBkZWZpbml0ZWx5IGZhaWwgaWYgdGhlIGhhcmR3YXJlIGlzbid0IHByZXNlbnQuXG5cbldhaXQsIHRoZSBwcm9tcHTigKYgcmlnaHQsIGl0IHNheXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiBpdCdzIGp1c3QgZG9jcywgS2NvbmZpZywgY29tbWVudHMsIGxvZ2dpbmcsIGRlY29yYXRpdmUgY2hhbmdlcywgb3IgbnVtZXJpYyBjb25zdGFudHMgdGhhdCBkb24ndCBjaGFuZ2UgZmxvdywgb3LigKYgYW5kIHRoaXMgaXMga2V54oCmICpjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzKi5cblxuVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgTWljcm9jaGlwJ3MgQXp1cml0ZSBEUExML1BUUC9TeW5jRSBkZXZpY2VzLCB1c2luZyBJMkMvU1BJLiBJdCAqc3RyaWN0bHkqIGNoZWNrcyB0aGUgY2hpcCBJRCBkdXJpbmcgdGhlIHByb2JlLiBUaGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIHRoYXQgSSBrbm93IG9mLCB1bmxpa2UsIHNheSwgdGhlIG1hYzgwMjExIHN0dWZmLiBHZW5lcmljIEkyQyBtb2NrcyBjYW4ndCBzaW11bGF0ZSB0aGUgcmVnaXN0ZXIgYWRkcmVzc2luZyBlaXRoZXIuIFNvLCBpdCdzICppbXBvc3NpYmxlKiB0byByZWFjaCB0aGlzIGNvZGUgaW4gUUVNVSwgR0NFLCBvciBhbnl0aGluZyBsaWtlIHRoYXQuIFRoZSBwcm9iZSAqd2lsbCogZmFpbC4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgZGVmaW5pdGUgV29ydGhGdXp6aW5nPWZhbHNlIHNpdHVhdGlvbi5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2guIElzIHRoZXJlICphbnkqIG90aGVyIHdheSB0byBnZXQgdG8gdGhpcz8gQ291bGQgdGhlIFBUUCBjbG9jayBzb21laG93IGJlIHJlZ2lzdGVyZWQgKndpdGhvdXQqIHRoZSBwcm9iZSBzdWNjZWVkaW5nPyBOby4gYHpsMzA3M3hfZHBsbF9wdHBfcmVnaXN0ZXJgIGlzIGNhbGxlZCBmcm9tIGB6bDMwNzN4X2RwbGxfcmVnaXN0ZXJgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgemwzMDczeF9kZXZtX2RwbGxfaW5pdGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB6bDMwNzN4X2Rldl9wcm9iZWAuIEhtbS4gQ291bGQgYHpsMzA3M3hfZGV2X3Byb2JlYCBiZSBjYWxsZWQgZnJvbSAqc29tZXdoZXJlIGVsc2UqPyBBaCwgaXQncyBleHBvcnRlZCBhcyBgemwzMDczeF9kZXZfcHJvYmVgLCBidXQgaXQncyBvbmx5IGNhbGxlZCBieSBgemwzMDczeF9pMmNfcHJvYmVgIGFuZCBgemwzMDczeF9zcGlfcHJvYmVgLiBTbyBpdCdzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LlxuXG5Pa2F5LCBsZXQgbWUgcXVpY2tseSBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIHNuZWFreSBsaXR0bGUgY2FsbCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBMZXQncyBzZWUuLi5cblxuRmlsZXMgbW9kaWZpZWQ6XG5gZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZ2BcbmBkcml2ZXJzL2RwbGwvemwzMDczeC9jaGFuLmNgXG5gZHJpdmVycy9kcGxsL3psMzA3M3gvY2hhbi5oYFxuYGRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuY2BcbmBkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmhgXG5gZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jYFxuYGRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuaGBcbmBkcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmhgXG5BbGwgb2YgdGhlbSBhcmUgaW5zaWRlIGBkcml2ZXJzL2RwbGwvemwzMDczeC9gLiBHb29kLCBhbGwgbmVhdGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhhdCBkcml2ZXIuXG5cbkFscmlnaHQsIEknbSBzZXR0aW5nIFdvcnRoRnV6emluZz1mYWxzZSBhbmQgY3JhZnRpbmcgYSBzb2xpZCByZWFzb25pbmcgc3RhdGVtZW50LlxuXG5UaGUgcGF0Y2ggYWRkcyBQVFAgY2xvY2sgc3VwcG9ydCB0byB0aGUgTWljcm9jaGlwIEF6dXJpdGUgRFBMTCBkcml2ZXIgKGB6bDMwNzN4YCkuIEl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBJMkMvU1BJIGRyaXZlci4gRHVyaW5nIGluaXRpYWxpemF0aW9uIChgemwzMDczeF9kZXZfcHJvYmVgKSwgdGhlIGRyaXZlciBzdHJpY3RseSByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIGhhcmR3YXJlIGNoaXAgSUQgKGBaTF9SRUdfSURgKS4gU2luY2UgdGhlcmUncyAqbm8qIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgZ2VuZXJpYyBJMkMgbW9ja3MgZG9uJ3Qgc3VwcG9ydCB0aGUgMTYtYml0IGFkZHJlc3NpbmcsIHRoZSBwcm9iZSB3aWxsICphbHdheXMqIGZhaWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIGFuZCBQVFAgZGV2aWNlcyB3aWxsIG5ldmVyIGJlIHJlZ2lzdGVyZWQuIEl0J3MgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiB0aGUgbW9kaWZpZWQgY29kZS5cblxuTm93IHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3NDYsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjQwOjExLjI2OTY4Mzg2M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIGNsb2NrIHN1cHBvcnQgdG8gdGhlIE1pY3JvY2hpcCBBenVyaXRlIERQTEwgZHJpdmVyICh6bDMwNzN4KS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIEkyQy9TUEkgZHJpdmVyLiBEdXJpbmcgaW5pdGlhbGl6YXRpb24gKHpsMzA3M3hfZGV2X3Byb2JlKSwgdGhlIGRyaXZlciBzdHJpY3RseSByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIGhhcmR3YXJlIGNoaXAgSUQgKFpMX1JFR19JRCkuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGluIHRoZSBrZXJuZWwsIGFuZCBnZW5lcmljIEkyQyBtb2NrcyBsaWtlIGkyYy1zdHViIGRvIG5vdCBzdXBwb3J0IHRoZSAxNi1iaXQgcmVnaXN0ZXIgYWRkcmVzc2luZyByZXF1aXJlZCBieSB0aGlzIGRyaXZlciwgdGhlIHByb2JlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGZhaWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgYW5kIFBUUCBkZXZpY2VzIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBjbG9jayBzdXBwb3J0IHRvIHRoZSBNaWNyb2NoaXAgQXp1cml0ZSBEUExMIGRyaXZlciAoemwzMDczeCkuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBJMkMvU1BJIGRyaXZlci4gRHVyaW5nIGluaXRpYWxpemF0aW9uICh6bDMwNzN4X2Rldl9wcm9iZSksIHRoZSBkcml2ZXIgc3RyaWN0bHkgcmVhZHMgYW5kIHZlcmlmaWVzIHRoZSBoYXJkd2FyZSBjaGlwIElEIChaTF9SRUdfSUQpLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSBpbiB0aGUga2VybmVsLCBhbmQgZ2VuZXJpYyBJMkMgbW9ja3MgbGlrZSBpMmMtc3R1YiBkbyBub3Qgc3VwcG9ydCB0aGUgMTYtYml0IHJlZ2lzdGVyIGFkZHJlc3NpbmcgcmVxdWlyZWQgYnkgdGhpcyBkcml2ZXIsIHRoZSBwcm9iZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyBmYWlsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIGFuZCBQVFAgZGV2aWNlcyB3aWxsIG5ldmVyIGJlIHJlZ2lzdGVyZWQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj88pt[1] Phase: Running StartedAt: 2026-07-13 13:40:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj88pt[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-13 13:40:23 +0000 UTC FinishedAt: 2026-07-13 13:40:41 +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,}