Name: series-workflow76wht Phase: Failed StartedAt: 2026-07-06 00:12:30 +0000 UTC FinishedAt: 2026-07-06 00:37:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76wht[0] Phase: Succeeded StartedAt: 2026-07-06 00:12:30 +0000 UTC FinishedAt: 2026-07-06 00:37:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76wht[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 00:12:30 +0000 UTC FinishedAt: 2026-07-06 00:37: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+CgkJCTx0ZD4yMDI2LzA3LzA2IDAwOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gVGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiAoYWNwaV9yYXMyX2luaXQpIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QgKGZyb20gYWNwaV9pbml0KSBhbmQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFDUEkgUkFTMiB0YWJsZS4gU2luY2UgUUVNVS9HQ0UgZG8gbm90IHByb3ZpZGUgdGhpcyBzcGVjaWZpYyBBQ1BJIHRhYmxlIGJ5IGRlZmF1bHQsIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyB0YWJsZSBsb2FkaW5nIChlLmcuLCB2aWEgY29uZmlnZnMpLCB0aGUgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwMDozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQzMWNlMDVkMjFlYWQwZmZkMjdiM2M4ZGNiZmQ1MTNkZWIwYWM5NGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDAwOjM2OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuaW5kZXggYWI2MDE0NzQzZGE1NjguLjJiODc0ZTAzMzYyMzM0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbkBAIC0yMCwxMSAmIzQzOzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcdDYuMTVcbiBDb250YWN0Olx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcbiBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4tXHRcdGZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy5cbi1cdFx0VGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuXG4tXG4tXHRcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcbi1cdFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXG4mIzQzO1x0XHRmb3IgZGVtYW5kIHNjcnViYmluZy5cbiBcbiBXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL3NpemVcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG5AQCAtMzQsNiAmIzQzOzMwLDE0IEBAIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4gXHRcdChvbi1kZW1hbmQgc2NydWJiaW5nKS5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXG4mIzQzO0RhdGU6XHRcdEphbiAyMDI2XG4mIzQzO0tlcm5lbFZlcnNpb246XHQ2LjE5XG4mIzQzO0NvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuJiM0MztEZXNjcmlwdGlvbjpcbiYjNDM7XHRcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcbiYjNDM7XHRcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXG4mIzQzO1xuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmRcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG4gS2VybmVsVmVyc2lvbjpcdDYuMTVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuaW5kZXggMmNmYTc0ZmExZmZkMmYuLjU2MmJmZDZmZjYzMDUxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuQEAgLTM0MCwzICYjNDM7MzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXG4gXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxuJiM0MztcbiYjNDM7My4gQUNQSSBSQVMyIEhhcmR3YXJlLWJhc2VkIE1lbW9yeSBTY3J1YmJpbmdcbiYjNDM7XG4mIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxuJiM0MztcbiYjNDM7My4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cbiYjNDM7XG4mIzQzO0FwcGxpY2FibGUgdG8gYm90aCBkZW1hbmQgYW5kIGJhY2tncm91bmQgc2NydWJiaW5nLiBUaGUgdW5pdCBvZiB0aGVcbiYjNDM7c2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cbiYjNDM7XG4mIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszNjAwMFxuJiM0MztcbiYjNDM7My4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXG4mIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7MzYwMFxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7ODY0MDBcbiYjNDM7XG4mIzQzOzMuMS40LiBQcm9ncmFtIHNjcnViYmluZyBmb3IgdGhlIG1lbW9yeSByZWdpb24gaW4gUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGV2ZXJ5XG4mIzQzOzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxuJiM0MztcbiYjNDM7IyBlY2hvIDQzMjAwIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7My4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxuJiM0MztcbiYjNDM7U2V0ICYjMzk7YWRkciYjMzk7IG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxuJiM0MztcbiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXG4mIzQzO1xuJiM0MztTZXQgJiMzOTtzaXplJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMHgyMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXG4mIzQzO1xuJiM0MzszLjEuNi4gU3RhcnQgJiMzOTtkZW1hbmQgc2NydWJiaW5nJiMzOTsuXG4mIzQzO1xuJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuJiM0Mzt3aWxsIGJlIHN0b3BwZWQgYW5kIHRoZW4gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZVxuJiM0MztkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cbiYjNDM7XG4mIzQzOyMgZWNobyAxIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuJiM0MztcbiYjNDM7My4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxuJiM0MztcbiYjNDM7My4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcbiYjNDM7c2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMjE2MDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszLjIuMy4gU3RhcnQgJiMzOTtiYWNrZ3JvdW5kIHNjcnViYmluZyYjMzk7LlxuJiM0MztcbiYjNDM7IyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuQEAgLTI5NCw2ICYjNDM7Mjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXG4gXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiBcbiYjNDM7Y29uZmlnIEFDUElfUkFTMlxuJiM0MztcdGJvb2wgXCYjMzQ7QUNQSSBSQVMyIGRyaXZlclwmIzM0O1xuJiM0MztcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4mIzQzO1x0ZGVwZW5kcyBvbiBNQUlMQk9YXG4mIzQzO1x0ZGVwZW5kcyBvbiBQQ0NcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxuJiM0MztcdCAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cbiYjNDM7XG4gY29uZmlnIEFDUElfUFJPQ0VTU09SXG4gXHR0cmlzdGF0ZSBcJiMzNDtQcm9jZXNzb3JcJiMzNDtcbiBcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbkBAIC0xMDUsNiAmIzQzOzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpXHQmIzQzOz0gZWNfc3lzLm9cbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVx0XHQmIzQzOz0gYmdydC5vXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXHQmIzQzOz0gY3BwY19hY3BpLm9cbiBvYmotJChDT05GSUdfQUNQSV9TUENSX1RBQkxFKVx0JiM0Mzs9IHNwY3Iub1xuJiM0MztvYmotJChDT05GSUdfQUNQSV9SQVMyKVx0XHQmIzQzOz0gcmFzMi5vXG4gb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgJiM0Mzs9IGFjcGlfZGJnLm9cbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcdCYjNDM7PSBwcHR0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcdCYjNDM7PSBwZnJfdXBkYXRlLm8gcGZyX3RlbGVtZXRyeS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jXG5pbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuY1xuQEAgLTMxLDYgJiM0MzszMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYWNwaS9hcGVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm10LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG5AQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuIFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XG4gXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XG4gXHRhY3BpX3Zpb3RfaW5pdCgpO1xuJiM0MztcdGFjcGlfcmFzMl9pbml0KCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE5ZWNiZTdjODE5OWJiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5AQCAtMCwwICYjNDM7MSw1MDMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBTdXBwb3J0IGZvciBSQVMyIHRhYmxlIC0gQUNQSSA2LjUgU3BlY2lmaWNhdGlvbiwgc2VjdGlvbiA1LjIuMjEsIHdoaWNoXG4mIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxuJiM0MzsgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXG4mIzQzOyAqIFBDQyBjaGFubmVsIHN1YnNwYWNlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyN1bmRlZiBwcl9mbXRcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtBQ1BJIFJBUzI6IFwmIzM0OyBmbXRcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3BjYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbiYjNDM7ICogQG1ib3hfY2xpZW50Olx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxuJiM0MzsgKiBAcGNjX2NoYW46XHRcdFBvaW50ZXIgdG8gc3RydWN0IHBjY19tYm94X2NoYW5cbiYjNDM7ICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAZWxlbTpcdFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xuJiM0MzsgKiBAcGNjX2xvY2s6XHRcdFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuJiM0MzsgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIEBkZWFkbGluZV91czpcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xuJiM0MzsgKlx0XHRcdGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uXG4mIzQzOyAqIEBwY2NfbXBhcjpcdFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXG4mIzQzOyAqIEBwY2NfbXJ0dDpcdFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXG4mIzQzOyAqXHRcdFx0T1MgbXVzdCB3YWl0IGFmdGVyIGNvbXBsZXRpb24gb2YgYSBQQ0MgY29tbWFuZCBiZWZvcmVcbiYjNDM7ICpcdFx0XHRpc3N1aW5nIG5leHQgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9tcGFyX3Jlc2V0Olx0VGltZSBvZiBsYXN0IE1QQVIgY291bnQgcmVzZXRcbiYjNDM7ICogQG1wYXJfY291bnQ6XHRcdE1QQVIgY291bnRcbiYjNDM7ICogQHBjY19pZDpcdFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcbiYjNDM7ICogQGxhc3RfY21kOlx0XHRMYXN0IFBDQyBjb21tYW5kXG4mIzQzOyAqIEBrcmVmOlx0XHRrcmVmIG9iamVjdFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJhczJfc3NwY2Mge1xuJiM0MztcdHN0cnVjdCBtYm94X2NsaWVudFx0XHRtYm94X2NsaWVudDtcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhblx0XHQqcGNjX2NoYW47XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdFx0ZWxlbTtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwY2NfbG9jaztcbiYjNDM7XHR1NjRcdFx0XHRcdGRlYWRsaW5lX3VzO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcGFyO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcnR0O1xuJiM0MztcdGt0aW1lX3RcdFx0XHRcdGxhc3RfY21kX2NtcGxfdGltZTtcbiYjNDM7XHRrdGltZV90XHRcdFx0XHRsYXN0X21wYXJfcmVzZXQ7XG4mIzQzO1x0aW50XHRcdFx0XHRtcGFyX2NvdW50O1xuJiM0MztcdGludFx0XHRcdFx0cGNjX2lkO1xuJiM0MztcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4mIzQzO1x0c3RydWN0IGtyZWZcdFx0XHRrcmVmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXG4mIzQzOyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxuJiM0MzsjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXG4mIzQzOyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcbiYjNDM7XG4mIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1x0dTMyIGNhcF9zdGF0dXM7XG4mIzQzO1x0dTE2IHN0YXR1cztcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxuJiM0MztcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuJiM0MztcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuJiM0MztcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbiYjNDM7XHQgKiBiaXQgaXMgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbiYjNDM7XHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG4mIzQzO1x0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCk7XG4mIzQzO1x0XHRzdGF0dXMgXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcbiYjNDM7XHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiYjNDM7XHRcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cbiYjNDM7XHRybWIoKTtcbiYjNDM7XHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xuJiM0MztcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxuJiM0MztcdFx0cmMgPSAtRVBFUk07XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9CVVNZOlxuJiM0MztcdFx0cmMgPSAtRUJVU1k7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XG4mIzQzO1x0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4mIzQzO1x0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmMgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXG4mIzQzOyAqIEByYXMyX2N0eDpcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4mIzQzO1x0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcdHM2NCB0aW1lX2RlbHRhO1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHNzcGNjID0gcmFzMl9jdHgtXHUwMDNlc3NwY2M7XG4mIzQzO1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XG4mIzQzO1x0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4mIzQzO1x0ICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZlxuJiM0MztcdCAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHR0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSk7XG4mIzQzO1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4mIzQzO1x0XHRcdGZzbGVlcChzc3BjYy1cdTAwM2VwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGVcbiYjNDM7XHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuJiM0MztcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXG4mIzQzO1x0ICogbGltaXRhdGlvbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcbiYjNDM7XHQgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGVcbiYjNDM7XHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4mIzQzO1x0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxuJiM0MztcdCAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXBhcikge1xuJiM0MztcdFx0aWYgKCFzc3BjYy1cdTAwM2VtcGFyX2NvdW50KSB7XG4mIzQzO1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbiYjNDM7XHRcdFx0aWYgKCh0aW1lX2RlbHRhIFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXHUwMDI2XHUwMDI2IHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xuJiM0MztcdFx0XHRcdGRldl9kYmcocmFzMl9jdHgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7UENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdFwmIzM0OywgY21kKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRzc3BjYy1cdTAwM2VsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTtcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudC0tO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xuJiM0MztcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4mIzQzO1xuJiM0MztcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xuJiM0MztcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdC8qIFJpbmcgZG9vcmJlbGwgKi9cbiYjNDM7XHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxuJiM0MztcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcXG5cJiMzNDssIGNtZCwgcmMpO1xuJiM0MztcdFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXG4mIzQzO1x0XHR2YWwgPSBpb3JlYWQxNihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4mIzQzO1x0XHRpb3dyaXRlMTYodmFsLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJjID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjLVx1MDAzZWxhc3RfY21kID0gY21kO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxuJiM0MztcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcbiYjNDM7XHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbiYjNDM7XHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dClcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBjY19jaGFubmVsLVx1MDAzZW1ib3gtXHUwMDNldHhkb25lX2lycSlcbiYjNDM7XHRcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCYjMzQ7YWNwaV9yYXMyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfbGlzdF9wY2NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJhczJfc3NwY2MsIGtyZWYpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbiYjNDM7XHRsaXN0X2RlbChcdTAwMjZzc3BjYy1cdTAwM2VlbGVtKTtcbiYjNDM7XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuJiM0MztcdGtmcmVlKHNzcGNjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuJiM0Mzt7XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2c3NwY2MtXHUwMDNla3JlZiwgIFx1MDAyNnJhczJfbGlzdF9wY2NfcmVsZWFzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcmFzMl9zc3BjYyAqcmFzMl9zc3BjY19nZXQoaW50IHBjY19pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShzc3BjYywgXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xuJiM0MztcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2c3NwY2MtXHUwMDNla3JlZikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBzc3BjYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XG4mIzQzO1x0aWYgKHBjY19pZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7XG4mIzQzO1x0aWYgKHNzcGNjKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9XG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlcGNjX2xvY2tcdD0gXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2s7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFzc3BjYylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuJiM0MztcdFx0a2ZyZWUoc3NwY2MpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSkge1xuJiM0MztcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHBjY19jaGFuKTtcbiYjNDM7XHRcdGtmcmVlKHNzcGNjKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19jaGFuXHRcdD0gcGNjX2NoYW47XG4mIzQzO1x0c3NwY2MtXHUwMDNlY29tbV9hZGRyXHQ9IHBjY19jaGFuLVx1MDAzZXNobWVtO1xuJiM0MztcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cdTAwM2VsYXRlbmN5O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19tcnR0XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VwY2NfbXBhclx0XHQ9IHBjY19jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PSBwY2NfY2hhbi1cdTAwM2VtY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlcGNjX2xvY2tcdD0gXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2ID0gdG9fYXV4aWxpYXJ5X2RldihkZXZpY2UpO1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XG4mIzQzO1xuJiM0MztcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBhdXhkZXYtXHUwMDNlaWQpO1xuJiM0MztcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVx1MDAzZXNzcGNjKTtcbiYjNDM7XHRrZnJlZShyYXMyX2N0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcmFzMl9tZW1fY3R4ICphZGRfYXV4X2RldmljZShjaGFyICpuYW1lLCBpbnQgY2hhbm5lbCwgdTMyIHB4bV9pbnN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4mIzQzO1x0dTMyIGNvbXBfbmlkO1xuJiM0MztcdGludCBpZCwgcmM7XG4mIzQzO1xuJiM0MztcdGNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpO1xuJiM0MztcdGlmIChjb21wX25pZCA9PSBOVU1BX05PX05PREUpIHtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ludmFsaWQgTlVNQSBub2RlLCBjaGFubmVsPSVkIHB4bV9pbnN0PSVkXFxuXCYjMzQ7LCBjaGFubmVsLCBweG1faW5zdCk7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHggPSBremFsbG9jKHNpemVvZigqcmFzMl9jdHgpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCA9IGNvbXBfbmlkO1xuJiM0MztcbiYjNDM7XHRyYyA9IHJlZ2lzdGVyX3BjY19jaGFubmVsKHJhczJfY3R4LCBjaGFubmVsKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQQ0MgY2hhbm5lbD0lZCBweG1faW5zdD0lZCByYz0lZFxcblwmIzM0OywgY2hhbm5lbCxcbiYjNDM7XHRcdFx0IHB4bV9pbnN0LCByYyk7XG4mIzQzO1x0XHRnb3RvIGN0eF9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWQgPSBpZGFfYWxsb2MoXHUwMDI2cmFzMl9pZGEsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmIChpZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cmMgPSBpZDtcbiYjNDM7XHRcdGdvdG8gcGNjX2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2LmlkXHRcdD0gaWQ7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlYWRldi5uYW1lXHRcdD0gbmFtZTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2LmRldi5yZWxlYXNlXHQ9IHJhczJfcmVsZWFzZTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2LmRldi5wYXJlbnRcdD0gcmFzMl9jdHgtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRnb3RvIGlkYV9mcmVlO1xuJiM0MztcbiYjNDM7XHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfYWRkKFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihyYyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmFzMl9jdHg7XG4mIzQzO1xuJiM0MztpZGFfZnJlZTpcbiYjNDM7XHRpZGFfZnJlZShcdTAwMjZyYXMyX2lkYSwgaWQpO1xuJiM0MztwY2NfZnJlZTpcbiYjNDM7XHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cdTAwM2Vzc3BjYyk7XG4mIzQzO2N0eF9mcmVlOlxuJiM0MztcdGtmcmVlKHJhczJfY3R4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIocmMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZW1vdmVfYXV4X2RldmljZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbiYjNDM7e1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBhcnNlX3JhczJfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0O1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4mIzQzO1x0dTE2IHRvdF90YmxfbGVuO1xuJiM0MztcdHUxNiBpO1xuJiM0MztcbiYjNDM7XHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2Mgc2l6ZW9mKCpyYXMyX3RhYikpIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRvdF90YmxfbGVuID0gc2l6ZW9mKCpyYXMyX3RhYikgJiM0MzsgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyAqIHNpemVvZigqcGNjX2Rlc2NfbGlzdCk7XG4mIzQzO1x0aWYgKHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIHRvdF90YmxfbGVuKSB7XG4mIzQzO1x0XHRwcl93YXJuKEZXX1dBUk4gXCYjMzQ7UkFTMiB0YWJsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gUENDIGRlc2NzPSVkIHNpemU9JXUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGN0eF9saXN0ID0ga2NhbGxvYyhyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcGN0eF9saXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiAmIzQzOyAxKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzOyBpJiM0MzsmIzQzOywgcGNjX2Rlc2NfbGlzdCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwY2NfZGVzY19saXN0LVx1MDAzZWZlYXR1cmVfdHlwZSAhPSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtXHUwMDNlY2hhbm5lbF9pZCxcbiYjNDM7XHRcdFx0XHRcdCAgcGNjX2Rlc2NfbGlzdC1cdTAwM2VpbnN0YW5jZSk7XG4mIzQzO1x0XHQvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi9cbiYjNDM7XHRcdGlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChJU19FUlIocmFzMl9jdHgpKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXFxuXCYjMzQ7LCBQVFJfRVJSKHJhczJfY3R4KSk7XG4mIzQzO1x0XHRcdGZvciAoOyBpIFx1MDAzZSAwOyBpLS0pIHtcbiYjNDM7XHRcdFx0XHRpZiAocGN0eF9saXN0W2kgLSAxXSlcbiYjNDM7XHRcdFx0XHRcdHJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGtmcmVlKHBjdHhfbGlzdCk7XG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKHJhczJfY3R4KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHBjdHhfbGlzdFtpXSA9IHJhczJfY3R4O1xuJiM0MztcdH1cbiYjNDM7XHRrZnJlZShwY3R4X2xpc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEV4dHJhY3RzIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHJldHJpZXZlcyBJRCBmb3IgdGhlIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhblxuJiM0MzsgKiBhdXhpbGlhcnkgZGV2aWNlLCB3aGljaCBiaW5kcyB0byB0aGUgbWVtb3J5IEFDUEkgUkFTMiBkcml2ZXIsIGZvciBlYWNoIFJBUzJcbiYjNDM7ICogbWVtb3J5IGZlYXR1cmUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IG5vbmUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7XG4mIzQzO1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAwLCAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKVx1MDAyNnJhczJfdGFiKTtcbiYjNDM7XHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxuXCYjMzQ7LCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGFyc2VfcmFzMl90YWJsZShyYXMyX3RhYikpXG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gcGFyc2UgUkFTMiB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG5pbmRleCBmOWQwMmFmMmZjM2EyMC4uZjNiOWEyZjA0OTUwMGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7XG4gXHRTQ1JVQl9BRERSRVNTLFxuIFx0U0NSVUJfU0laRSxcbiBcdFNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELFxuJiM0MztcdFNDUlVCX0VOQUJMRV9ERU1BTkQsXG4gXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sXG5AQCAtNTUsNiAmIzQzOzU2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXHRcdFx0XFxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhhZGRyLCByZWFkX2FkZHIsIHU2NCwgXCYjMzQ7MHglbGx4XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcJiMzNDsweCVsbHhcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCBcJiMzNDsldVxcblwmIzM0OylcbiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCBcJiMzNDsldVxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtYXhfY3ljbGVfZHVyYXRpb24sIGdldF9tYXhfY3ljbGUsIHUzMiwgXCYjMzQ7JXVcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuQEAgLTg0LDYgJiM0Mzs4Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShhZGRyLCB3cml0ZV9hZGRyLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4mIzQzO0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcbkBAIC0xMTksNiAmIzQzOzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludFxuIFx0XHRcdFx0cmV0dXJuIDA0NDQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOlxuJiM0MztcdFx0aWYgKG9wcy1cdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xuJiM0MztcdFx0XHRpZiAob3BzLVx1MDAzZXNldF9lbmFibGVkX29kKVxuJiM0MztcdFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT046XG4gXHRcdGlmIChvcHMtXHUwMDNlZ2V0X21pbl9jeWNsZSlcbiBcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuQEAgLTE2NCw2ICYjNDM7MTc1LDcgQEAgc3RhdGljIGludCBzY3J1Yl9jcmVhdGVfZGVzYyhzdHJ1Y3QgZGV2aWNlICpzY3J1Yl9kZXYsXG4gXHRcdFtTQ1JVQl9BRERSRVNTXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhhZGRyLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9TSVpFXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhzaXplLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9FTkFCTEVfQkFDS0dST1VORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2JhY2tncm91bmQsIGluc3RhbmNlKSxcbiYjNDM7XHRcdFtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvS2NvbmZpZyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbkBAIC00Niw0ICYjNDM7NDYsMTcgQEAgY29uZmlnIFJBU19GTVBNXG4gXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXG4gXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxuIFxuJiM0Mztjb25maWcgTUVNX0FDUElfUkFTMlxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O01lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBBQ1BJX1JBUzJcbiYjNDM7XHRkZXBlbmRzIG9uIEVEQUNcbiYjNDM7XHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcbiYjNDM7XHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk9cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcbiYjNDM7XHQgIGZlYXR1cmUgdGFibGUgcGFyc2VyLiBUaGUgZHJpdmVyIHVzZXMgYSBQQ0MgY2hhbm5lbCBzdWJzcGFjZSB0b1xuJiM0MztcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXG4mIzQzO1x0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxuJiM0MztcdCAgdGhyb3VnaCB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuXG4mIzQzO1xuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuaW5kZXggMTFmOTVkNTlkMzk3MmQuLmEwZTZlOTAzZDZiMDliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gb2JqLSQoQ09ORklHX1JBUylcdCYjNDM7PSByYXMub1xuIG9iai0kKENPTkZJR19ERUJVR19GUylcdCYjNDM7PSBkZWJ1Z2ZzLm9cbiBvYmotJChDT05GSUdfUkFTX0NFQylcdCYjNDM7PSBjZWMub1xuJiM0MztvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMilcdCYjNDM7PSBhY3BpX3JhczIub1xuIFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcdCYjNDM7PSBhbWQvZm1wbS5vXG4gb2JqLXlcdFx0XHQmIzQzOz0gYW1kL2F0bC9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJhN2RlMjI2ZWM4NTkyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xuQEAgLTAsMCAmIzQzOzEsNTg5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuJiM0MzsgKlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyN1bmRlZiBwcl9mbXRcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KVx0XCYjMzQ7QUNQSSBSQVMyIE1FTU9SWTogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VkYWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiBCSVQoMClcbiYjNDM7I2RlZmluZSBSQVMyX1RZUEVfUEFUUk9MX1NDUlVCIDB4MDAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUyAweDAxXG4mIzQzOyNkZWZpbmUgUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIgMHgwMlxuJiM0MzsjZGVmaW5lIFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIgMHgwM1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUkFTMiBwYXRyb2wgc2NydWJcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfSU5fTUFTSyBHRU5NQVNLKDE1LCA4KVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfRU5fQkFDS0dST1VORCBCSVQoMClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDcsIDApXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HIEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX1NDUlVCX05BTUVfTEVOIDEyOFxuJiM0MzsjZGVmaW5lIFJBUzJfSE9VUl9JTl9TRUNTIDM2MDBcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSB7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqY29tbW9uID0gKHZvaWQgKilyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0aW93cml0ZTgoMCwgXHUwMDI2Y29tbW9uLVx1MDAzZXNldF9jYXBzWzBdKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlvcmVhZDgoXHUwMDI2Y29tbW9uLVx1MDAzZWZlYXR1cmVzWzBdKSBcdTAwMjYgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbiYjNDM7XHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdHUzMiBzY3J1Yl9wYXJhbXNfb3V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2NydWJfcGFyYW1zX291dCA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfb3V0KTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuJiM0MztcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1Yikge1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSAwO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICAoaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmZsYWdzKSBcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gdHJ1ZTtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuJiM0MztcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VvZF9zY3J1Yikge1xuJiM0MztcdFx0KnJ1bm5pbmcgPSBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiYjNDM7XHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KnJ1bm5pbmcgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORztcbiYjNDM7XHRpZiAoISgqcnVubmluZykpXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX3NjcnViX21vbml0b3JfdGhyZWFkKHZvaWQgKnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICopcDtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcbiYjNDM7XHRcdGlmICghcmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZygpIGZhaWxzIGhlcmUsIHJlLWVuYWJsaW5nIGJhY2tncm91bmRcbiYjNDM7XHRcdCAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSxcbiYjNDM7XHRcdCAqIHRoZSBhZG1pbiBvciBmaXJtd2FyZSBtYXkgbmVlZCB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YmJpbmdcbiYjNDM7XHRcdCAqIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFydW5uaW5nKSB7XG4mIzQzO1x0XHRcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC1cdTAwM2VkZXYsIHJhczJfY3R4LCB0cnVlKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRkZXZfZXJyKHJhczJfY3R4LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgYmFja2dyb3VuZCBzY3J1YiByZXQ9JWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1xuJiM0MztcdFx0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdFx0bXNsZWVwKDEwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQqbWluID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdCptYXggPSByYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2VjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0KnNjcnViX2N5Y2xlX3NlY3MgPSByYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcylcbiYjNDM7e1xuJiM0MztcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNjcnViX2N5Y2xlX2hycyBcdTAwM2MgcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlIHx8XG4mIzQzO1x0ICAgIHNjcnViX2N5Y2xlX2hycyBcdTAwM2UgcmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHNjcnViX2N5Y2xlX2hycztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLlxuJiM0MztcdCAqIFJldHVybiAtRUJVU1kgbm93IHVubGVzcyBmaW5kIG91dCBhIG1ldGhvZCB0byByZXRyaWV2ZSBhY3R1YWwgZnVsbCBQQSByYW5nZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0KmJhc2UgPSByYXMyX2N0eC1cdTAwM2ViYXNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCpzaXplID0gcmFzMl9jdHgtXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IGJhc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQqZW5hYmxlZCA9IHJhczJfY3R4LVx1MDAzZWJnX3NjcnViO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiYjNDM7XHRpZiAoZW5hYmxlKSB7XG4mIzQzO1x0XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIgfHwgcnVubmluZylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdFx0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbiYjNDM7XHRcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XG4mIzQzO1x0XHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7XHRcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfRU5fQkFDS0dST1VORCwgZW5hYmxlKTtcbiYjNDM7XHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gJXMgYmFja2dyb3VuZCBzY3J1YmJpbmdcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiA9IGVuYWJsZTtcbiYjNDM7XHRpZiAoZW5hYmxlKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0LyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovXG4mIzQzO1x0XHRyZXR1cm4gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBlbmFibGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQqZW5hYmxlZCA9IHJ1bm5pbmc7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZW5hYmxlKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocnVubmluZylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdC8qIFN0b3AgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZFxuJiM0MztcdCAqIHdpdGggKGJhc2UgJiM0Mzsgc2l6ZSkgXHUwMDNlIChtZW1fYmFzZSAmIzQzOyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGFcbiYjNDM7XHQgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VzaXplIHx8IHJhczJfY3R4LVx1MDAzZWJhc2UgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7JXM6IEludmFsaWQgYWRkcmVzcyByYW5nZSwgYmFzZT0weCVsbHggc2l6ZT0weCVsbHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdF9fZnVuY19fLCByYXMyX2N0eC1cdTAwM2ViYXNlLCByYXMyX2N0eC1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHJldCA9IC1FUkFOR0U7XG4mIzQzO1x0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuJiM0MztcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2ViYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VzaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuJiM0MztcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSAwO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBlbmFibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgXHUwMDI2XHUwMDI2IHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgXHUwMDI2XHUwMDI2ICFyYXMyX2N0eC1cdTAwM2V0aHJlYWQpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQsIHJhczJfY3R4LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3JhczJfc2NydWJfbmlkJWRcJiMzNDssIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHJhczJfY3R4LVx1MDAzZXRocmVhZCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBJZiBrdGhyZWFkX3J1bigpIGZhaWxzIGFuZCB0aGUgZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBydW5uaW5nLFxuJiM0MztcdFx0XHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyBhZG1pbi9maXJtd2FyZSBtYXkgbmVlZFxuJiM0MztcdFx0XHQgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO2VuYWJsZV9iZ19zY3J1YjpcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xuJiM0MztcdC5yZWFkX2FkZHIgPSByYXMyX2h3X3NjcnViX3JlYWRfYWRkcixcbiYjNDM7XHQucmVhZF9zaXplID0gcmFzMl9od19zY3J1Yl9yZWFkX3NpemUsXG4mIzQzO1x0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXG4mIzQzO1x0LndyaXRlX3NpemUgPSByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUsXG4mIzQzO1x0LmdldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyxcbiYjNDM7XHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxuJiM0MztcdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXG4mIzQzO1x0LnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCxcbiYjNDM7XHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXG4mIzQzO1x0LmdldF9tYXhfY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlLFxuJiM0MztcdC5nZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQsXG4mIzQzO1x0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlID0gZmFsc2U7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXRocmVhZCkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdGt0aHJlYWRfc3RvcChyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XG4mIzQzO1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBudW1fc3Bhbm5lZF9wYWdlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHJpZXZlIHRoZSBQQSByYW5nZSBvZiB0aGUgTlVNQSBkb21haW4gYW5kIHVzZSBpdCBhcyB0aGVcbiYjNDM7XHQgKiAmIzM5O1JlcXVlc3RlZCBBZGRyZXNzIFJhbmdlJiMzOTssIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmRcbiYjNDM7XHQgKiBHRVRfUEFUUk9MX1BBUkFNRVRFUlMgdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzXG4mIzQzO1x0ICogaW4gdGhlIE5VTUEgZG9tYWluIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSXG4mIzQzO1x0ICogdG8gc3RhcnQgdGhlIGRlbWFuZCBzY3J1YmJpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbiYjNDM7XHRudW1fc3Bhbm5lZF9wYWdlcyA9IG5vZGVfc3Bhbm5lZF9wYWdlcyhyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuJiM0MztcdGlmICghbnVtX3NwYW5uZWRfcGFnZXMpIHtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcXG5cJiMzNDssIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlbWVtX3NpemUgPSAodTY0KW51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyBcdTAwM2UgcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlKVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3ByaW50ZihzY3J1Yl9uYW1lLCBcJiMzNDthY3BpX3Jhc19tZW0lZFwmIzM0OywgYXV4ZGV2LVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLmZ0X3R5cGVcdD0gUkFTX0ZFQVRfU0NSVUI7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLnNjcnViX29wc1x0PSBcdTAwMjZyYXMyX3NjcnViX29wcztcbiYjNDM7XHRyYXNfZmVhdHVyZXMuY3R4XHQ9IHJhczJfY3R4O1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbiYjNDM7XHR7IC5uYW1lID0gUkFTMl9BVVhfREVWX05BTUUgXCYjMzQ7LlwmIzM0OyBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcbiYjNDM7XHR7IH1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcbiYjNDM7XHQubmFtZSA9IFJBUzJfTUVNX0RFVl9JRF9OQU1FLFxuJiM0MztcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcbiYjNDM7XHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcbiYjNDM7XHQuaWRfdGFibGUgPSByYXMyX21lbV9kZXZfaWRfdGFibGUsXG4mIzQzO307XG4mIzQzO21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7XG4mIzQzO1xuJiM0MztNT0RVTEVfSU1QT1JUX05TKFwmIzM0O0FDUElfUkFTMlwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWM3NWIwMzA3ZmE5Y2Ncbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbkBAIC0wLDAgJiM0MzsxLDg2IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogQUNQSSBSQVMyIChSQVMgRmVhdHVyZSBUYWJsZSkgbWV0aG9kcy5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9BQ1BJX1JBUzJfSFxuJiM0MzsjZGVmaW5lIF9BQ1BJX1JBUzJfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2F1eGlsaWFyeV9idXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IGRldmljZTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MjogUENDIGNvbW1hbmQgY29kZXMgdXNlZCBieVxuJiM0MzsgKiBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUENDX0NNRF9FWEVDX1JBUzIgMHgwMVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcJiMzNDtyYXMyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXCYjMzQ7YWNwaV9yYXMyX21lbVwmIzM0O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlc1xuJiM0MzsgKiBAYWRldjpcdFx0QXV4aWxpYXJ5IGRldmljZSBvYmplY3RcbiYjNDM7ICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAZGV2Olx0XHRQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQ1xuJiM0MzsgKiBAc3NwY2M6XHRcdFBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4mIzQzOyAqIEBwY2NfbG9jazpcdFx0UG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcbiYjNDM7ICpcdFx0XHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuJiM0MzsgKiBAc3lzX2NvbXBfbmlkOlx0Tm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZVxuJiM0MzsgKlx0XHRcdGlzIGFzc29jaWF0ZWQgd2l0aC4gU2VlIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MDogUkFTMlxuJiM0MzsgKlx0XHRcdFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCBEZXNjcmlwdG9yIGZvcm1hdCxcbiYjNDM7ICpcdFx0XHRGaWVsZDogSW5zdGFuY2VcbiYjNDM7ICogQG1lbV9iYXNlOlx0XHRCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2VcbiYjNDM7ICpcdFx0XHRvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW5cbiYjNDM7ICogQG1lbV9zaXplXHRcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuJiM0MzsgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuJiM0MzsgKiBAYmFzZTpcdFx0QmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4mIzQzOyAqIEBzaXplOlx0XHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4mIzQzOyAqIEBzY3J1Yl9jeWNsZV9ocnM6XHRDdXJyZW50IHNjcnViIHJhdGUgaW4gaG91cnNcbiYjNDM7ICogQHNldF9zY3J1Yl9jeWNsZTpcdFNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzXG4mIzQzOyAqIEBtaW5fc2NydWJfY3ljbGU6XHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4mIzQzOyAqIEBtYXhfc2NydWJfY3ljbGU6XHRNYXhpbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4mIzQzOyAqIEBvZF9zY3J1YjpcdFx0U3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcgKG1lbW9yeSByZWdpb24pXG4mIzQzOyAqIEBiZ19zY3J1YjpcdFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xuJiM0MzsgKiBAcmVlbmFibGVfYmdfc2NydWI6XHRGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZFxuJiM0MzsgKlx0XHRcdHNjcnViYmluZyBpcyBmaW5pc2hlZFxuJiM0MzsgKiBAdGhyZWFkOlx0XHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXG4mIzQzOyAqIEBkcml2ZXJfYWN0aXZlOlx0RmxhZyBpbmRpY2F0ZXMgUkFTMiBtZW1vcnkgZHJpdmVyIGlzIGFjdGl2ZS9yZW1vdmVkXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcmFzMl9tZW1fY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZVx0XHRhZGV2O1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbVx0KmNvbW1fYWRkcjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlXHRcdFx0KmRldjtcbiYjNDM7XHR2b2lkXHRcdFx0XHQqc3NwY2M7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0KnBjY19sb2NrO1xuJiM0MztcdHUzMlx0XHRcdFx0c3lzX2NvbXBfbmlkO1xuJiM0MztcdHU2NFx0XHRcdFx0bWVtX2Jhc2U7XG4mIzQzO1x0dTY0XHRcdFx0XHRtZW1fc2l6ZTtcbiYjNDM7XHR1NjRcdFx0XHRcdGJhc2U7XG4mIzQzO1x0dTY0XHRcdFx0XHRzaXplO1xuJiM0MztcdHU4XHRcdFx0XHRzY3J1Yl9jeWNsZV9ocnM7XG4mIzQzO1x0dThcdFx0XHRcdHNldF9zY3J1Yl9jeWNsZTtcbiYjNDM7XHR1OFx0XHRcdFx0bWluX3NjcnViX2N5Y2xlO1xuJiM0MztcdHU4XHRcdFx0XHRtYXhfc2NydWJfY3ljbGU7XG4mIzQzO1x0Ym9vbFx0XHRcdFx0b2Rfc2NydWI7XG4mIzQzO1x0Ym9vbFx0XHRcdFx0Ymdfc2NydWI7XG4mIzQzO1x0Ym9vbFx0XHRcdFx0cmVlbmFibGVfYmdfc2NydWI7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0XHRcdCp0aHJlYWQ7XG4mIzQzO1x0Ym9vbFx0XHRcdFx0ZHJpdmVyX2FjdGl2ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXG4mIzQzO3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpO1xuJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRhYy5oIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcbmluZGV4IGU2YjRlNTExMzBlNWZmLi5iZTRmNmU1MmVhMzhhMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuQEAgLTY4NCw2ICYjNDM7Njg0LDggQEAgZW51bSBlZGFjX2Rldl9mZWF0IHtcbiAgKiBAd3JpdGVfc2l6ZTogc2V0IG9mZnNldCBvZiB0aGUgc2NydWJiaW5nIHJhbmdlLlxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cbiAgKiBAc2V0X2VuYWJsZWRfYmc6IHN0YXJ0IG9yIHN0b3AgYSBiZy1zY3J1Yi5cbiYjNDM7ICogQGdldF9lbmFibGVkX29kOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBkZW1hbmQgc2NydWIuXG4mIzQzOyAqIEBzZXRfZW5hYmxlZF9vZDogc3RhcnQgb3Igc3RvcCBhIGRlbWFuZC1zY3J1Yi5cbiAgKiBAZ2V0X21pbl9jeWNsZTogZ2V0IG1pbmltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuICAqIEBnZXRfY3ljbGVfZHVyYXRpb246IGdldCBjdXJyZW50IHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG5AQCAtNjk2LDYgJiM0Mzs2OTgsOCBAQCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xuIFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xuIFx0aW50ICgqZ2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4gXHRpbnQgKCpzZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuJiM0MztcdGludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xuJiM0MztcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4gXHRpbnQgKCpnZXRfbWluX2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptaW4pO1xuIFx0aW50ICgqZ2V0X21heF9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWF4KTtcbiBcdGludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDA6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIEFDUEkgUkFTMiBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLiBUaGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIChhY3BpX3JhczJfaW5pdCkgaXMgY2FsbGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCAoZnJvbSBhY3BpX2luaXQpIGFuZCBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgQUNQSSBSQVMyIHRhYmxlLiBTaW5jZSBRRU1VL0dDRSBkbyBub3QgcHJvdmlkZSB0aGlzIHNwZWNpZmljIEFDUEkgdGFibGUgYnkgZGVmYXVsdCwgYW5kIHRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBkeW5hbWljIHRhYmxlIGxvYWRpbmcgKGUuZy4sIHZpYSBjb25maWdmcyksIHRoZSBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMzFjZTA1ZDIxZWFkMGZmZDI3YjNjOGRjYmZkNTEzZGViMGFjOTRmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgNiAwMDozNjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgppbmRleCBhYjYwMTQ3NDNkYTU2OC4uMmI4NzRlMDMzNjIzMzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIKQEAgLTIwLDExICYjNDM7MjAsNyBAQCBLZXJuZWxWZXJzaW9uOgk2LjE1CiBDb250YWN0OglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwogRGVzY3JpcHRpb246CiAJCShSVykgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZAotCQlmb3Igb24tZGVtYW5kIHNjcnViYmluZy4gU2V0dGluZyBhZGRyZXNzIHN0YXJ0cyBzY3J1YmJpbmcuCi0JCVRoZSBzaXplIG11c3QgYmUgc2V0IGJlZm9yZSB0aGF0LgotCi0JCVRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWQKLQkJb24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuCiYjNDM7CQlmb3IgZGVtYW5kIHNjcnViYmluZy4KIAogV2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9zaXplCiBEYXRlOgkJTWFyY2ggMjAyNQpAQCAtMzQsNiAmIzQzOzMwLDE0IEBAIERlc2NyaXB0aW9uOgogCQkoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkCiAJCShvbi1kZW1hbmQgc2NydWJiaW5nKS4KIAomIzQzO1doYXQ6CQkvc3lzL2J1cy9lZGFjL2RldmljZXMvJmx0O2Rldi1uYW1lJmd0Oy9zY3J1YlgvZW5hYmxlX2RlbWFuZAomIzQzO0RhdGU6CQlKYW4gMjAyNgomIzQzO0tlcm5lbFZlcnNpb246CTYuMTkKJiM0MztDb250YWN0OglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwomIzQzO0Rlc2NyaXB0aW9uOgomIzQzOwkJKFJXKSBTdGFydC9TdG9wIGRlbWFuZCBzY3J1YmJpbmcuIFRoZSBzdG9wIG9wZXJhdGlvbiBpcwomIzQzOwkJc3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC4KJiM0MzsKIFdoYXQ6CQkvc3lzL2J1cy9lZGFjL2RldmljZXMvJmx0O2Rldi1uYW1lJmd0Oy9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmQKIERhdGU6CQlNYXJjaCAyMDI1CiBLZXJuZWxWZXJzaW9uOgk2LjE1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdAppbmRleCAyY2ZhNzRmYTFmZmQyZi4uNTYyYmZkNmZmNjMwNTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdApAQCAtMzQwLDMgJiM0MzszNDAsNzMgQEAgY29udHJvbGxlciBvciBwbGF0Zm9ybSB3aGVuIHVuZXhwZWN0ZWRseSBoaWdoIGVycm9yIHJhdGVzIGFyZSBkZXRlY3RlZC4KIAogU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpbgogYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1lY3NgCiYjNDM7CiYjNDM7My4gQUNQSSBSQVMyIEhhcmR3YXJlLWJhc2VkIE1lbW9yeSBTY3J1YmJpbmcKJiM0MzsKJiM0MzszLjEuIERlbWFuZCBzY3J1YmJpbmcgZm9yIGEgc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbi4KJiM0MzsKJiM0MzszLjEuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmQKJiM0MzsKJiM0MzswCiYjNDM7CiYjNDM7My4xLjIuIFF1ZXJ5IHdoYXQgaXMgZGV2aWNlIGRlZmF1bHQvY3VycmVudCBzY3J1YiBjeWNsZSBzZXR0aW5nLgomIzQzOwomIzQzO0FwcGxpY2FibGUgdG8gYm90aCBkZW1hbmQgYW5kIGJhY2tncm91bmQgc2NydWJiaW5nLiBUaGUgdW5pdCBvZiB0aGUKJiM0MztzY3J1YiBjeWNsZSBpcyBzZWNvbmRzLgomIzQzOwomIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uCiYjNDM7CiYjNDM7MzYwMDAKJiM0MzsKJiM0MzszLjEuMy4gUXVlcnkgdGhlIHJhbmdlIG9mIGRldmljZSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZm9yIGEgbWVtb3J5IHJlZ2lvbi4KJiM0MztUaGUgdW5pdCBvZiB0aGUgc2NydWIgY3ljbGUgcmFuZ2UgaXMgc2Vjb25kcy4KJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWluX2N5Y2xlX2R1cmF0aW9uCiYjNDM7CiYjNDM7MzYwMAomIzQzOwomIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9tYXhfY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0Mzs4NjQwMAomIzQzOwomIzQzOzMuMS40LiBQcm9ncmFtIHNjcnViYmluZyBmb3IgdGhlIG1lbW9yeSByZWdpb24gaW4gUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGV2ZXJ5CiYjNDM7NDMyMDAgc2Vjb25kcyAoaGFsZiBhIGRheSkuCiYjNDM7CiYjNDM7IyBlY2hvIDQzMjAwICZndDsgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszLjEuNS4gU2V0IGFkZHJlc3MgcmFuZ2UuCiYjNDM7CiYjNDM7U2V0ICYjMzk7YWRkciYjMzk7IG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLgomIzQzOwomIzQzOyMgZWNobyAweDgwMDAwMDAwICZndDsgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHIKJiM0MzsKJiM0MztTZXQgJiMzOTtzaXplJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuCiYjNDM7CiYjNDM7IyBlY2hvIDB4MjAwMDAwICZndDsgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL3NpemUKJiM0MzsKJiM0MzszLjEuNi4gU3RhcnQgJiMzOTtkZW1hbmQgc2NydWJiaW5nJiMzOTsuCiYjNDM7CiYjNDM7V2hlbiBhIGRlbWFuZCBzY3J1YiBpcyBzdGFydGVkLCBhbnkgYmFja2dyb3VuZCBzY3J1YiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MKJiM0Mzt3aWxsIGJlIHN0b3BwZWQgYW5kIHRoZW4gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZQomIzQzO2RlbWFuZCBzY3J1YiBoYXMgY29tcGxldGVkLgomIzQzOwomIzQzOyMgZWNobyAxICZndDsgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmQKJiM0MzsKJiM0MzszLjIuIEJhY2tncm91bmQgc2NydWJiaW5nIHRoZSBlbnRpcmUgbWVtb3J5CiYjNDM7CiYjNDM7My4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kCiYjNDM7CiYjNDM7MAomIzQzOwomIzQzOzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDAKJiM0MztzZWNvbmRzIChxdWFydGVyIG9mIGEgZGF5KS4KJiM0MzsKJiM0MzsjIGVjaG8gMjE2MDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzMuMi4zLiBTdGFydCAmIzM5O2JhY2tncm91bmQgc2NydWJiaW5nJiMzOTsuCiYjNDM7CiYjNDM7IyBlY2hvIDEgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggZjE2NWQxNGNmNjFhM2EuLjUzOWZmMTQzY2NjNTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwpAQCAtMjk0LDYgJiM0MzsyOTQsMTcgQEAgY29uZmlnIEFDUElfQ1BQQ19MSUIKIAkgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLAogCSAgbGVhdmUgdGhpcyBvcHRpb24gZGlzYWJsZWQuCiAKJiM0Mztjb25maWcgQUNQSV9SQVMyCiYjNDM7CWJvb2wgJiMzNDtBQ1BJIFJBUzIgZHJpdmVyJiMzNDsKJiM0MzsJc2VsZWN0IEFVWElMSUFSWV9CVVMKJiM0MzsJZGVwZW5kcyBvbiBNQUlMQk9YCiYjNDM7CWRlcGVuZHMgb24gUENDCiYjNDM7CWhlbHAKJiM0MzsJICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvcgomIzQzOwkgIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgc3VjaCBhcyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2VsZWN0IE4uCiYjNDM7CiBjb25maWcgQUNQSV9QUk9DRVNTT1IKIAl0cmlzdGF0ZSAmIzM0O1Byb2Nlc3NvciYjMzQ7CiAJZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCkBAIC0xMDUsNiAmIzQzOzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpCSYjNDM7PSBlY19zeXMubwogb2JqLSQoQ09ORklHX0FDUElfQkdSVCkJCSYjNDM7PSBiZ3J0Lm8KIG9iai0kKENPTkZJR19BQ1BJX0NQUENfTElCKQkmIzQzOz0gY3BwY19hY3BpLm8KIG9iai0kKENPTkZJR19BQ1BJX1NQQ1JfVEFCTEUpCSYjNDM7PSBzcGNyLm8KJiM0MztvYmotJChDT05GSUdfQUNQSV9SQVMyKQkJJiM0Mzs9IHJhczIubwogb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgJiM0Mzs9IGFjcGlfZGJnLm8KIG9iai0kKENPTkZJR19BQ1BJX1BQVFQpIAkmIzQzOz0gcHB0dC5vCiBvYmotJChDT05GSUdfQUNQSV9QRlJVVCkJJiM0Mzs9IHBmcl91cGRhdGUubyBwZnJfdGVsZW1ldHJ5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvYnVzLmMKQEAgLTMxLDYgJiM0MzszMSw3IEBACiAjaW5jbHVkZSAmbHQ7YWNwaS9hcGVpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3VzcGVuZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BybXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9yYXMyLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAKQEAgLTE2MTAsNiAmIzQzOzE2MTEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBhY3BpX2luaXQodm9pZCkKIAlhY3BpX2RlYnVnZ2VyX2luaXQoKTsKIAlhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7CiAJYWNwaV92aW90X2luaXQoKTsKJiM0MzsJYWNwaV9yYXMyX2luaXQoKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3JhczIuYyBiL2RyaXZlcnMvYWNwaS9yYXMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE5ZWNiZTdjODE5OWJiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hY3BpL3JhczIuYwpAQCAtMCwwICYjNDM7MSw1MDMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC4KJiM0MzsgKgomIzQzOyAqIFN1cHBvcnQgZm9yIFJBUzIgdGFibGUgLSBBQ1BJIDYuNSBTcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDUuMi4yMSwgd2hpY2gKJiM0MzsgKiBwcm92aWRlcyBpbnRlcmZhY2VzIGZvciBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIGUuZy4sIGZvciBIVy1iYXNlZCBtZW1vcnkKJiM0MzsgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzCiYjNDM7ICogUENDIGNoYW5uZWwgc3Vic3BhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uCiYjNDM7ICovCiYjNDM7CiYjNDM7I3VuZGVmIHByX2ZtdAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtBQ1BJIFJBUzI6ICYjMzQ7IGZtdAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2t0aW1lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FjcGkvcGNjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FjcGkvcmFzMi5oJmd0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCByYXMyX3NzcGNjIC0gRGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uCiYjNDM7ICogQG1ib3hfY2xpZW50OglzdHJ1Y3QgbWJveF9jbGllbnQgb2JqZWN0CiYjNDM7ICogQHBjY19jaGFuOgkJUG9pbnRlciB0byBzdHJ1Y3QgcGNjX21ib3hfY2hhbgomIzQzOyAqIEBjb21tX2FkZHI6CQlQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uCiYjNDM7ICogQGVsZW06CQlMaXN0IGZvciByZWdpc3RlcmVkIFJBUzIgUENDIGNoYW5uZWwgc3Vic3BhY2VzCiYjNDM7ICogQHBjY19sb2NrOgkJUENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzCiYjNDM7ICoJCQl0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZQomIzQzOyAqIEBkZWFkbGluZV91czoJUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIHRpbWVvdXQgaW4gbWljcm9zZWNzCiYjNDM7ICoJCQlmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvbgomIzQzOyAqIEBwY2NfbXBhcjoJCU1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpIGZvciBQQ0MgY2hhbm5lbAomIzQzOyAqIEBwY2NfbXJ0dDoJCU1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpIGluIG1pY3Jvc2VjcwomIzQzOyAqCQkJT1MgbXVzdCB3YWl0IGFmdGVyIGNvbXBsZXRpb24gb2YgYSBQQ0MgY29tbWFuZCBiZWZvcmUKJiM0MzsgKgkJCWlzc3VpbmcgbmV4dCBjb21tYW5kCiYjNDM7ICogQGxhc3RfY21kX2NtcGxfdGltZTogQ29tcGxldGlvbiB0aW1lIG9mIGxhc3QgUENDIGNvbW1hbmQKJiM0MzsgKiBAbGFzdF9tcGFyX3Jlc2V0OglUaW1lIG9mIGxhc3QgTVBBUiBjb3VudCByZXNldAomIzQzOyAqIEBtcGFyX2NvdW50OgkJTVBBUiBjb3VudAomIzQzOyAqIEBwY2NfaWQ6CQlJZGVudGlmaWVyIG9mIHRoZSBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbAomIzQzOyAqIEBsYXN0X2NtZDoJCUxhc3QgUENDIGNvbW1hbmQKJiM0MzsgKiBAa3JlZjoJCWtyZWYgb2JqZWN0CiYjNDM7ICovCiYjNDM7c3RydWN0IHJhczJfc3NwY2MgewomIzQzOwlzdHJ1Y3QgbWJveF9jbGllbnQJCW1ib3hfY2xpZW50OwomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbgkJKnBjY19jaGFuOwomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0JKmNvbW1fYWRkcjsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZAkJZWxlbTsKJiM0MzsJc3RydWN0IG11dGV4CQkJcGNjX2xvY2s7CiYjNDM7CXU2NAkJCQlkZWFkbGluZV91czsKJiM0MzsJdW5zaWduZWQgaW50CQkJcGNjX21wYXI7CiYjNDM7CXVuc2lnbmVkIGludAkJCXBjY19tcnR0OwomIzQzOwlrdGltZV90CQkJCWxhc3RfY21kX2NtcGxfdGltZTsKJiM0MzsJa3RpbWVfdAkJCQlsYXN0X21wYXJfcmVzZXQ7CiYjNDM7CWludAkJCQltcGFyX2NvdW50OwomIzQzOwlpbnQJCQkJcGNjX2lkOwomIzQzOwl1MTYJCQkJbGFzdF9jbWQ7CiYjNDM7CXN0cnVjdCBrcmVmCQkJa3JlZjsKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlCiYjNDM7ICogbXVjaCBzbG93ZXIgdG8gcmVwbHkuIEtlZXAgaXQgaGlnaCBlbm91Z2ggdG8gY292ZXIgZW11bGF0b3JzIHdoZXJlIHRoZQomIzQzOyAqIHByb2Nlc3NvcnMgcnVuIHBhaW5mdWxseSBzbG93LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUENDX05VTV9SRVRSSUVTIDYwMFVMTAomIzQzOyNkZWZpbmUgUENDX0NITkxfREVGQVVMVF9MQVRFTkNZIDEwMDAKJiM0MzsjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzCiYjNDM7CiYjNDM7I2RlZmluZSBSQVMyX01BWF9OVU1fUENDX0RFU0NTIDEwMAomIzQzOyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDAKJiM0MzsKJiM0MzsvKiBTdGF0aWMgdmFyaWFibGVzIGZvciB0aGUgUkFTMiBQQ0Mgc3Vic3BhY2VzICovCiYjNDM7c3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spOwomIzQzO3N0YXRpYyBMSVNUX0hFQUQocmFzMl9zc3BjYyk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwl1MzIgY2FwX3N0YXR1czsKJiM0MzsJdTE2IHN0YXR1czsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBcyBwZXIgQUNQSSBzcGVjLCB0aGUgUENDIHNwYWNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlCiYjNDM7CSAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlbgomIzQzOwkgKiBQQ0MgY2FuIGJlIHVzZWQgYnkgT1NQTS4KJiM0MzsJICoKJiM0MzsJICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZgomIzQzOwkgKiBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0MgY2hhbm5lbCBsYXRlbmN5IHVudGlsIFBDQyBjb21tYW5kIGNvbXBsZXRlCiYjNDM7CSAqIGJpdCBpcyBzZXQuCiYjNDM7CSAqLwomIzQzOwlyYyA9IHJlYWR3X3JlbGF4ZWRfcG9sbF90aW1lb3V0KCZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzLCBzdGF0dXMsCiYjNDM7CQkJCQlzdGF0dXMgJmFtcDsgUENDX1NUQVRVU19DTURfQ09NUExFVEUsCiYjNDM7CQkJCQlQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLSZndDtkZWFkbGluZV91cyk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJcHJfd2FybigmIzM0O1BDQyBJRDogMHgleDogUENDIGNoZWNrIGNoYW5uZWwgdGltZW91dCBmb3IgbGFzdCBjb21tYW5kOiAweCV4IHJjPSVkXG4mIzM0OywKJiM0MzsJCQlzc3BjYy0mZ3Q7cGNjX2lkLCBzc3BjYy0mZ3Q7bGFzdF9jbWQsIHJjKTsKJiM0MzsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IFBDQ19TVEFUVVNfRVJST1IpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtQQ0MgSUQ6IDB4JXg6IEVycm9yIGluIGV4ZWN1dGluZyBsYXN0IGNvbW1hbmQ6IDB4JXhcbiYjMzQ7LAomIzQzOwkJCXNzcGNjLSZndDtwY2NfaWQsIHNzcGNjLSZndDtsYXN0X2NtZCk7CiYjNDM7CQlzdGF0dXMgJmFtcDs9IH5QQ0NfU1RBVFVTX0VSUk9SOwomIzQzOwkJaW93cml0ZTE2KHN0YXR1cywgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwkJaW93cml0ZTMyKDB4MCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzZXRfY2Fwc19zdGF0dXMpOwomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi8KJiM0MzsJcm1iKCk7CiYjNDM7CWNhcF9zdGF0dXMgPSBpb3JlYWQzMigmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3NldF9jYXBzX3N0YXR1cyk7CiYjNDM7CXN3aXRjaCAoY2FwX3N0YXR1cykgewomIzQzOwljYXNlIEFDUElfUkFTMl9OT1RfVkFMSUQ6CiYjNDM7CWNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6CiYjNDM7CQlyYyA9IC1FUEVSTTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDUElfUkFTMl9CVVNZOgomIzQzOwkJcmMgPSAtRUJVU1k7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfRkFJTEVEOgomIzQzOwljYXNlIEFDUElfUkFTMl9BQk9SVEVEOgomIzQzOwljYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6CiYjNDM7CQlyYyA9IC1FSU5WQUw7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJjID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpb3dyaXRlMzIoMHgwLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3NldF9jYXBzX3N0YXR1cyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmFzMl9zZW5kX3BjY19jbWQoKSAtIFNlbmQgUkFTMiBjb21tYW5kIHZpYSBQQ0MgY2hhbm5lbAomIzQzOyAqIEByYXMyX2N0eDoJcG9pbnRlciB0byB0aGUgUkFTMiBjb250ZXh0IHN0cnVjdHVyZQomIzQzOyAqIEBjbWQ6CVJBUzIgY29tbWFuZCB0byBzZW5kCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZTsKJiM0MzsJc3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7CiYjNDM7CXN0cnVjdCByYXMyX3NzcGNjICpzc3BjYzsKJiM0MzsJczY0IHRpbWVfZGVsdGE7CiYjNDM7CXUxNiB2YWw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2N0eCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXNzcGNjID0gcmFzMl9jdHgtJmd0O3NzcGNjOwomIzQzOwlnZW5fY29tbV9iYXNlID0gc3NwY2MtJmd0O2NvbW1fYWRkcjsKJiM0MzsKJiM0MzsJcmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXBjY19jaGFubmVsID0gc3NwY2MtJmd0O3BjY19jaGFuLSZndDttY2hhbjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSGFuZGxlIHRoZSBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKTogdGhlIG1pbmltdW0KJiM0MzsJICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZgomIzQzOwkgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNzcGNjLSZndDtwY2NfbXJ0dCkgewomIzQzOwkJdGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy0mZ3Q7bGFzdF9jbWRfY21wbF90aW1lKTsKJiM0MzsJCWlmIChzc3BjYy0mZ3Q7cGNjX21ydHQgJmd0OyB0aW1lX2RlbHRhKQomIzQzOwkJCWZzbGVlcChzc3BjYy0mZ3Q7cGNjX21ydHQgLSB0aW1lX2RlbHRhKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGUKJiM0MzsJICogbWF4aW11bSBudW1iZXIgb2YgcGVyaW9kaWMgcmVxdWVzdHMgdGhhdCB0aGUgc3Vic3BhY2UgY2hhbm5lbCBjYW4KJiM0MzsJICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm8KJiM0MzsJICogbGltaXRhdGlvbi4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdAomIzQzOwkgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGUKJiM0MzsJICogc3lzdGVtIGNhbiBjb2xsZWN0aXZlbHkgZ2VuZXJhdGUuIElmIGl0IGlzIG5vdCwgZm9sbG93IHRoZSBzcGVjIGFuZAomIzQzOwkgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSCiYjNDM7CSAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LgomIzQzOwkgKi8KJiM0MzsJaWYgKHNzcGNjLSZndDtwY2NfbXBhcikgewomIzQzOwkJaWYgKCFzc3BjYy0mZ3Q7bXBhcl9jb3VudCkgewomIzQzOwkJCXRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCk7CiYjNDM7CQkJaWYgKCh0aW1lX2RlbHRhICZsdDsgNjAgKiBNU0VDX1BFUl9TRUMpICZhbXA7JmFtcDsgc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCkgewomIzQzOwkJCQlkZXZfZGJnKHJhczJfY3R4LSZndDtkZXYsCiYjNDM7CQkJCQkmIzM0O1BDQyBjb21tYW5kIDB4JXggbm90IHNlbnQgZHVlIHRvIE1QQVIgbGltaXQmIzM0OywgY21kKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU87CiYjNDM7CQkJfQomIzQzOwkJCXNzcGNjLSZndDtsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTsKJiM0MzsJCQlzc3BjYy0mZ3Q7bXBhcl9jb3VudCA9IHNzcGNjLSZndDtwY2NfbXBhcjsKJiM0MzsJCX0KJiM0MzsJCXNzcGNjLSZndDttcGFyX2NvdW50LS07CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqLwomIzQzOwlpb3dyaXRlMTYoY21kLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O2NvbW1hbmQpOwomIzQzOwomIzQzOwkvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi8KJiM0MzsJaW93cml0ZTE2KDAsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsKJiM0MzsJLyogUmluZyBkb29yYmVsbCAqLwomIzQzOwlyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCAmYW1wO2NtZCk7CiYjNDM7CS8qCiYjNDM7CSAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb24KJiM0MzsJICogYW5kIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmbHQ7IDApIHsKJiM0MzsJCWRldl93YXJuKHJhczJfY3R4LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7RXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXG4mIzM0OywgY21kLCByYyk7CiYjNDM7CQkvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi8KJiM0MzsJCXZhbCA9IGlvcmVhZDE2KCZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsJCXZhbCB8PSBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURTsKJiM0MzsJCWlvd3JpdGUxNih2YWwsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJjID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlzc3BjYy0mZ3Q7bGFzdF9jbWQgPSBjbWQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZQomIzQzOwkgKiBjb21wbGV0aW9uIHRpbWUgb2YgYm90aCBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgcHJvcGVyIGhhbmRsaW5nCiYjNDM7CSAqIG9mIE1SVFQsIHNvIG5lZWQgdG8gY2hlY2sgZm9yIHBjY19tcnR0IGluIGFkZGl0aW9uIHRvIFBDQ19DTURfRVhFQ19SQVMyLgomIzQzOwkgKi8KJiM0MzsJaWYgKGNtZCA9PSBQQ0NfQ01EX0VYRUNfUkFTMiB8fCBzc3BjYy0mZ3Q7cGNjX21ydHQpIHsKJiM0MzsJCXJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpOwomIzQzOwkJaWYgKHNzcGNjLSZndDtwY2NfbXJ0dCkKJiM0MzsJCQlzc3BjYy0mZ3Q7bGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFwY2NfY2hhbm5lbC0mZ3Q7bWJveC0mZ3Q7dHhkb25lX2lycSkKJiM0MzsJCW1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMocmFzMl9zZW5kX3BjY19jbWQsICYjMzQ7YWNwaV9yYXMyJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJhczJfbGlzdF9wY2NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9CiYjNDM7CQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJhczJfc3NwY2MsIGtyZWYpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2RlbCgmYW1wO3NzcGNjLSZndDtlbGVtKTsKJiM0MzsJcGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLSZndDtwY2NfY2hhbik7CiYjNDM7CWtmcmVlKHNzcGNjKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKQomIzQzO3sKJiM0MzsJa3JlZl9wdXQoJmFtcDtzc3BjYy0mZ3Q7a3JlZiwgICZhbXA7cmFzMl9saXN0X3BjY19yZWxlYXNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX3NzcGNjICpyYXMyX3NzcGNjX2dldChpbnQgcGNjX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCAmYW1wO3JhczJfc3NwY2MsIGVsZW0pIHsKJiM0MzsJCWlmIChzc3BjYy0mZ3Q7cGNjX2lkICE9IHBjY19pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtzc3BjYy0mZ3Q7a3JlZikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlyZXR1cm4gc3NwY2M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX2NoYW47CiYjNDM7CXN0cnVjdCByYXMyX3NzcGNjICpzc3BjYzsKJiM0MzsKJiM0MzsJaWYgKHBjY19pZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJc3NwY2MgPSByYXMyX3NzcGNjX2dldChwY2NfaWQpOwomIzQzOwlpZiAoc3NwY2MpIHsKJiM0MzsJCXJhczJfY3R4LSZndDtzc3BjYwkJPSBzc3BjYzsKJiM0MzsJCXJhczJfY3R4LSZndDtjb21tX2FkZHIJPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwkJcmFzMl9jdHgtJmd0O2RldgkJPQomIzQzOwkJCXNzcGNjLSZndDtwY2NfY2hhbi0mZ3Q7bWNoYW4tJmd0O21ib3gtJmd0O2RldjsKJiM0MzsJCXJhczJfY3R4LSZndDtwY2NfbG9jawk9ICZhbXA7c3NwY2MtJmd0O3BjY19sb2NrOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3NwY2MgPSBremFsbG9jKHNpemVvZigqc3NwY2MpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFzc3BjYykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCgmYW1wO3NzcGNjLSZndDttYm94X2NsaWVudCwgcGNjX2lkKTsKJiM0MzsJaWYgKElTX0VSUihwY2NfY2hhbikpIHsKJiM0MzsJCWtmcmVlKHNzcGNjKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHBjY19jaGFuKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXBjY19jaGFuLSZndDtzaG1lbSkgewomIzQzOwkJcGNjX21ib3hfZnJlZV9jaGFubmVsKHBjY19jaGFuKTsKJiM0MzsJCWtmcmVlKHNzcGNjKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNzcGNjLSZndDtwY2NfaWQJCT0gcGNjX2lkOwomIzQzOwlzc3BjYy0mZ3Q7cGNjX2NoYW4JCT0gcGNjX2NoYW47CiYjNDM7CXNzcGNjLSZndDtjb21tX2FkZHIJPSBwY2NfY2hhbi0mZ3Q7c2htZW07CiYjNDM7CWlmIChwY2NfY2hhbi0mZ3Q7bGF0ZW5jeSkKJiM0MzsJCXNzcGNjLSZndDtkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLSZndDtsYXRlbmN5OwomIzQzOwllbHNlCiYjNDM7CQlzc3BjYy0mZ3Q7ZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1k7CiYjNDM7CXNzcGNjLSZndDtwY2NfbXJ0dAkJPSBwY2NfY2hhbi0mZ3Q7bWluX3R1cm5hcm91bmRfdGltZTsKJiM0MzsJc3NwY2MtJmd0O3BjY19tcGFyCQk9IHBjY19jaGFuLSZndDttYXhfYWNjZXNzX3JhdGU7CiYjNDM7CXNzcGNjLSZndDttYm94X2NsaWVudC5rbm93c190eGRvbmUJPSB0cnVlOwomIzQzOwomIzQzOwlrcmVmX2luaXQoJmFtcDtzc3BjYy0mZ3Q7a3JlZik7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2FkZCgmYW1wO3NzcGNjLSZndDtlbGVtLCAmYW1wO3JhczJfc3NwY2MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c3NwY2MJCT0gc3NwY2M7CiYjNDM7CXJhczJfY3R4LSZndDtjb21tX2FkZHIJPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZGV2CQk9IHBjY19jaGFuLSZndDttY2hhbi0mZ3Q7bWJveC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwltdXRleF9pbml0KCZhbXA7c3NwY2MtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmFzMl9jdHgtJmd0O3BjY19sb2NrCT0gJmFtcDtzc3BjYy0mZ3Q7cGNjX2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7CiYjNDM7CiYjNDM7CWlkYV9mcmVlKCZhbXA7cmFzMl9pZGEsIGF1eGRldi0mZ3Q7aWQpOwomIzQzOwlyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC0mZ3Q7c3NwY2MpOwomIzQzOwlrZnJlZShyYXMyX2N0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcmFzMl9tZW1fY3R4ICphZGRfYXV4X2RldmljZShjaGFyICpuYW1lLCBpbnQgY2hhbm5lbCwgdTMyIHB4bV9pbnN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7CiYjNDM7CXUzMiBjb21wX25pZDsKJiM0MzsJaW50IGlkLCByYzsKJiM0MzsKJiM0MzsJY29tcF9uaWQgPSBweG1fdG9fbm9kZShweG1faW5zdCk7CiYjNDM7CWlmIChjb21wX25pZCA9PSBOVU1BX05PX05PREUpIHsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7SW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcbiYjMzQ7LCBjaGFubmVsLCBweG1faW5zdCk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5YSU8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4ID0ga3phbGxvYyhzaXplb2YoKnJhczJfY3R4KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcmFzMl9jdHgpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCA9IGNvbXBfbmlkOwomIzQzOwomIzQzOwlyYyA9IHJlZ2lzdGVyX3BjY19jaGFubmVsKHJhczJfY3R4LCBjaGFubmVsKTsKJiM0MzsJaWYgKHJjICZsdDsgMCkgewomIzQzOwkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUENDIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWQgcmM9JWRcbiYjMzQ7LCBjaGFubmVsLAomIzQzOwkJCSBweG1faW5zdCwgcmMpOwomIzQzOwkJZ290byBjdHhfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZCA9IGlkYV9hbGxvYygmYW1wO3JhczJfaWRhLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKGlkICZsdDsgMCkgewomIzQzOwkJcmMgPSBpZDsKJiM0MzsJCWdvdG8gcGNjX2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O2FkZXYuaWQJCT0gaWQ7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2Lm5hbWUJCT0gbmFtZTsKJiM0MzsJcmFzMl9jdHgtJmd0O2FkZXYuZGV2LnJlbGVhc2UJPSByYXMyX3JlbGVhc2U7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2LmRldi5wYXJlbnQJPSByYXMyX2N0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdCgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBpZGFfZnJlZTsKJiM0MzsKJiM0MzsJcmMgPSBhdXhpbGlhcnlfZGV2aWNlX2FkZCgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQlhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdCgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJjKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmFzMl9jdHg7CiYjNDM7CiYjNDM7aWRhX2ZyZWU6CiYjNDM7CWlkYV9mcmVlKCZhbXA7cmFzMl9pZGEsIGlkKTsKJiM0MztwY2NfZnJlZToKJiM0MzsJcmFzMl9zc3BjY19wdXQocmFzMl9jdHgtJmd0O3NzcGNjKTsKJiM0MztjdHhfZnJlZToKJiM0MzsJa2ZyZWUocmFzMl9jdHgpOwomIzQzOwomIzQzOwlyZXR1cm4gRVJSX1BUUihyYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KQomIzQzO3sKJiM0MzsJaWYgKCFyYXMyX2N0eCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYXV4aWxpYXJ5X2RldmljZV9kZWxldGUoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CWF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KCZhbXA7cmFzMl9jdHgtJmd0O2FkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBhcnNlX3JhczJfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0OwomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICoqcGN0eF9saXN0OwomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDsKJiM0MzsJdTE2IHRvdF90YmxfbGVuOwomIzQzOwl1MTYgaTsKJiM0MzsKJiM0MzsJaWYgKHJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoICZsdDsgc2l6ZW9mKCpyYXMyX3RhYikpIHsKJiM0MzsJCXByX3dhcm4oRldfV0FSTiAmIzM0O0FDUEkgUkFTMiB0YWJsZSBwcmVzZW50IGJ1dCBicm9rZW4gKHRvbyBzaG9ydCwgc2l6ZT0ldSlcbiYjMzQ7LAomIzQzOwkJCXJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MgfHwgcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MgJmd0OyBSQVMyX01BWF9OVU1fUENDX0RFU0NTKSB7CiYjNDM7CQlwcl93YXJuKEZXX1dBUk4gJiMzNDtOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxuJiMzNDssCiYjNDM7CQkJcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSAmIzQzOyByYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyAqIHNpemVvZigqcGNjX2Rlc2NfbGlzdCk7CiYjNDM7CWlmIChyYXMyX3RhYi0mZ3Q7aGVhZGVyLmxlbmd0aCAmbHQ7IHRvdF90YmxfbGVuKSB7CiYjNDM7CQlwcl93YXJuKEZXX1dBUk4gJiMzNDtSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcbiYjMzQ7LAomIzQzOwkJCXJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi0mZ3Q7aGVhZGVyLmxlbmd0aCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXBjdHhfbGlzdCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwY2NfZGVzY19saXN0ID0gKHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKikocmFzMl90YWIgJiM0MzsgMSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyByYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjczsgaSYjNDM7JiM0MzssIHBjY19kZXNjX2xpc3QmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocGNjX2Rlc2NfbGlzdC0mZ3Q7ZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtJmd0O2NoYW5uZWxfaWQsCiYjNDM7CQkJCQkgIHBjY19kZXNjX2xpc3QtJmd0O2luc3RhbmNlKTsKJiM0MzsJCS8qIEludmFsaWQgTlVNQSBub2RlLCBjb250aW51ZSBwYXJzaW5nIG5leHQgbm9kZSAqLwomIzQzOwkJaWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChJU19FUlIocmFzMl9jdHgpKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O0ZhaWxlZCB0byBhZGQgUkFTMiBhdXhpbGlhcnkgZGV2aWNlIHJjPSVsZFxuJiMzNDssIFBUUl9FUlIocmFzMl9jdHgpKTsKJiM0MzsJCQlmb3IgKDsgaSAmZ3Q7IDA7IGktLSkgewomIzQzOwkJCQlpZiAocGN0eF9saXN0W2kgLSAxXSkKJiM0MzsJCQkJCXJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pOwomIzQzOwkJCX0KJiM0MzsJCQlrZnJlZShwY3R4X2xpc3QpOwomIzQzOwkJCXJldHVybiBQVFJfRVJSKHJhczJfY3R4KTsKJiM0MzsJCX0KJiM0MzsJCXBjdHhfbGlzdFtpXSA9IHJhczJfY3R4OwomIzQzOwl9CiYjNDM7CWtmcmVlKHBjdHhfbGlzdCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBhY3BpX3JhczJfaW5pdCAtIFJBUzIgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgomIzQzOyAqCiYjNDM7ICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2UKJiM0MzsgKiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4gRHJpdmVyIGFkZHMgYW4KJiM0MzsgKiBhdXhpbGlhcnkgZGV2aWNlLCB3aGljaCBiaW5kcyB0byB0aGUgbWVtb3J5IEFDUEkgUkFTMiBkcml2ZXIsIGZvciBlYWNoIFJBUzIKJiM0MzsgKiBtZW1vcnkgZmVhdHVyZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IG5vbmUuCiYjNDM7ICovCiYjNDM7dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiOwomIzQzOwlhY3BpX3N0YXR1cyBzdGF0dXM7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJmFtcDtyYXMyX3RhYik7CiYjNDM7CWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewomIzQzOwkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gZ2V0IHRhYmxlLCAlc1xuJiMzNDssIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGFyc2VfcmFzMl90YWJsZShyYXMyX3RhYikpCiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3NjcnViLmMgYi9kcml2ZXJzL2VkYWMvc2NydWIuYwppbmRleCBmOWQwMmFmMmZjM2EyMC4uZjNiOWEyZjA0OTUwMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7CiAJU0NSVUJfQUREUkVTUywKIAlTQ1JVQl9TSVpFLAogCVNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELAomIzQzOwlTQ1JVQl9FTkFCTEVfREVNQU5ELAogCVNDUlVCX01JTl9DWUNMRV9EVVJBVElPTiwKIAlTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sCiAJU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OLApAQCAtNTUsNiAmIzQzOzU2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsCQkJXAogRURBQ19TQ1JVQl9BVFRSX1NIT1coYWRkciwgcmVhZF9hZGRyLCB1NjQsICYjMzQ7MHglbGx4XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCAmIzM0OzB4JWxseFxuJiMzNDspCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsICYjMzQ7JXVcbiYjMzQ7KQomIzQzO0VEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9kZW1hbmQsIGdldF9lbmFibGVkX29kLCBib29sLCAmIzM0OyV1XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCAmIzM0OyV1XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCAmIzM0OyV1XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGdldF9jeWNsZV9kdXJhdGlvbiwgdTMyLCAmIzM0OyV1XG4mIzM0OykKQEAgLTg0LDYgJiM0Mzs4Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldiwJCQlcCiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoYWRkciwgd3JpdGVfYWRkciwgdTY0LCBrc3RydG91NjQpCiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpCiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2JhY2tncm91bmQsIHNldF9lbmFibGVkX2JnLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bCkKJiM0MztFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2RlbWFuZCwgc2V0X2VuYWJsZWRfb2QsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKQogRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpCiAKIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpCkBAIC0xMTksNiAmIzQzOzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludAogCQkJCXJldHVybiAwNDQ0OwogCQl9CiAJCWJyZWFrOwomIzQzOwljYXNlIFNDUlVCX0VOQUJMRV9ERU1BTkQ6CiYjNDM7CQlpZiAob3BzLSZndDtnZXRfZW5hYmxlZF9vZCkgewomIzQzOwkJCWlmIChvcHMtJmd0O3NldF9lbmFibGVkX29kKQomIzQzOwkJCQlyZXR1cm4gYS0mZ3Q7bW9kZTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCXJldHVybiAwNDQ0OwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiAJY2FzZSBTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT046CiAJCWlmIChvcHMtJmd0O2dldF9taW5fY3ljbGUpCiAJCQlyZXR1cm4gYS0mZ3Q7bW9kZTsKQEAgLTE2NCw2ICYjNDM7MTc1LDcgQEAgc3RhdGljIGludCBzY3J1Yl9jcmVhdGVfZGVzYyhzdHJ1Y3QgZGV2aWNlICpzY3J1Yl9kZXYsCiAJCVtTQ1JVQl9BRERSRVNTXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhhZGRyLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9TSVpFXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhzaXplLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9FTkFCTEVfQkFDS0dST1VORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2JhY2tncm91bmQsIGluc3RhbmNlKSwKJiM0MzsJCVtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLAogCQlbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSwKIAkJW1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZwppbmRleCBmYzRmNGJiOTRhNGM2NS4uYTFlNmFlZDhiY2M4NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvS2NvbmZpZwpAQCAtNDYsNCAmIzQzOzQ2LDE3IEBAIGNvbmZpZyBSQVNfRk1QTQogCSAgTWVtb3J5IHdpbGwgYmUgcmV0aXJlZCBkdXJpbmcgYm9vdCB0aW1lIGFuZCBydW4gdGltZSBkZXBlbmRpbmcgb24KIAkgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLgogCiYjNDM7Y29uZmlnIE1FTV9BQ1BJX1JBUzIKJiM0MzsJdHJpc3RhdGUgJiMzNDtNZW1vcnkgQUNQSSBSQVMyIGRyaXZlciYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQUNQSV9SQVMyCiYjNDM7CWRlcGVuZHMgb24gRURBQwomIzQzOwlkZXBlbmRzIG9uIEVEQUNfU0NSVUIKJiM0MzsJc2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPCiYjNDM7CWhlbHAKJiM0MzsJICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzIKJiM0MzsJICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG8KJiM0MzsJICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXMKJiM0MzsJICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlcgomIzQzOwkgIHRocm91Z2ggdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLgomIzQzOwogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL01ha2VmaWxlIGIvZHJpdmVycy9yYXMvTWFrZWZpbGUKaW5kZXggMTFmOTVkNTlkMzk3MmQuLmEwZTZlOTAzZDZiMDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZQpAQCAtMiw2ICYjNDM7Miw3IEBACiBvYmotJChDT05GSUdfUkFTKQkmIzQzOz0gcmFzLm8KIG9iai0kKENPTkZJR19ERUJVR19GUykJJiM0Mzs9IGRlYnVnZnMubwogb2JqLSQoQ09ORklHX1JBU19DRUMpCSYjNDM7PSBjZWMubwomIzQzO29iai0kKENPTkZJR19NRU1fQUNQSV9SQVMyKQkmIzQzOz0gYWNwaV9yYXMyLm8KIAogb2JqLSQoQ09ORklHX1JBU19GTVBNKQkmIzQzOz0gYW1kL2ZtcG0ubwogb2JqLXkJCQkmIzQzOz0gYW1kL2F0bC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJhN2RlMjI2ZWM4NTkyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMKQEAgLTAsMCAmIzQzOzEsNTg5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC4KJiM0MzsgKgomIzQzOyAqLwomIzQzOwomIzQzOyN1bmRlZiBwcl9mbXQKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpCSYjMzQ7QUNQSSBSQVMyIE1FTU9SWTogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2VkYWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9yYXMyLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKQomIzQzOyNkZWZpbmUgUkFTMl9UWVBFX1BBVFJPTF9TQ1JVQiAweDAwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDEKJiM0MzsjZGVmaW5lIFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSIDB4MDIKJiM0MzsjZGVmaW5lIFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIgMHgwMwomIzQzOwomIzQzOy8qCiYjNDM7ICogUkFTMiBwYXRyb2wgc2NydWIKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX0lOX01BU0sgR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIFJBUzJfUFNfRU5fQkFDS0dST1VORCBCSVQoMCkKJiM0MzsjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMCkKJiM0MzsjZGVmaW5lIFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMjMsIDE2KQomIzQzOyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBSQVMyX1NDUlVCX05BTUVfTEVOIDEyOAomIzQzOyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMAomIzQzOwomIzQzO3N0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSB7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gY29tbW9uOwomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3BhdHJvbF9zY3J1Yl9wYXJhbSBwYXJhbXM7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFRPX0FDUElfUkFTMl9QU19TSE1FTShfYWRkcikgXAomIzQzOwljb250YWluZXJfb2YoX2FkZHIsIHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSwgY29tbW9uKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtJmd0O2NvbW1fYWRkcjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CWlvd3JpdGU4KDAsICZhbXA7Y29tbW9uLSZndDtzZXRfY2Fwc1swXSk7CiYjNDM7CiYjNDM7CXJldHVybiBpb3JlYWQ4KCZhbXA7Y29tbW9uLSZndDtmZWF0dXJlc1swXSkgJmFtcDsgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0KJiM0MzsJCVRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19vdXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CWlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9iYXNlLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9zaXplLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwlyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJhczJfY3R4LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NydWJfcGFyYW1zX291dCA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssCiYjNDM7CQkJCQkgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssCiYjNDM7CQkJCQkgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O3NjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSywKJiM0MzsJCQkJCSAgICAgIHNjcnViX3BhcmFtc19vdXQpOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gMDsKJiM0MzsJCXJhczJfY3R4LSZndDtzaXplID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICAoaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gdHJ1ZTsKJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gaW9yZWFkNjQoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IGlvcmVhZDY0KCZhbXA7cHNfc20tJmd0O3BhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIENvbnRleHQgLSBQQ0MgbG9jayBtdXN0IGJlIGhlbGQgKi8KJiM0MztzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0KJiM0MzsJCVRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIpIHsKJiM0MzsJCSpydW5uaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCAmYW1wO3BzX3NtLSZndDtjb21tb24uc2V0X2NhcHNbMF0pOwomIzQzOwlpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fYmFzZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fc2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CSpydW5uaW5nID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORzsKJiM0MzsJaWYgKCEoKnJ1bm5pbmcpKQomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiYjNDM7CQlpZiAoIXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZygpIGZhaWxzIGhlcmUsIHJlLWVuYWJsaW5nIGJhY2tncm91bmQKJiM0MzsJCSAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSwKJiM0MzsJCSAqIHRoZSBhZG1pbiBvciBmaXJtd2FyZSBtYXkgbmVlZCB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YmJpbmcKJiM0MzsJCSAqIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLgomIzQzOwkJICovCiYjNDM7CQltdXRleF9sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CQlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQltdXRleF91bmxvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghcnVubmluZykgewomIzQzOwkJCXJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC0mZ3Q7ZGV2LCByYXMyX2N0eCwgdHJ1ZSk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LAomIzQzOwkJCQkJJiMzNDtGYWlsZWQgdG8gZW5hYmxlIGJhY2tncm91bmQgc2NydWIgcmV0PSVkXG4mIzM0OywgcmV0KTsKJiM0MzsKJiM0MzsJCQltdXRleF91bmxvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkJbXNsZWVwKDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmFzMl9jdHgtJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CSptaW4gPSByYXMyX2N0eC0mZ3Q7bWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJKm1heCA9IHJhczJfY3R4LSZndDttYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2VjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcykKJiM0Mzt7CiYjNDM7CXUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAoc2NydWJfY3ljbGVfaHJzICZsdDsgcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSB8fAomIzQzOwkgICAgc2NydWJfY3ljbGVfaHJzICZndDsgcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLgomIzQzOwkgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuCiYjNDM7CSAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJcmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqYmFzZSA9IHJhczJfY3R4LSZndDtiYXNlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YikKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJKnNpemUgPSByYXMyX2N0eC0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocnVubmluZykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiYXNlID0gYmFzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXNpemUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkqZW5hYmxlZCA9IHJhczJfY3R4LSZndDtiZ19zY3J1YjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LSZndDtjb21tX2FkZHIpOwomIzQzOwl1MzIgc2NydWJfcGFyYW1zX2luOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgJmFtcDtwc19zbS0mZ3Q7Y29tbW9uLnNldF9jYXBzWzBdKTsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YiB8fCBydW5uaW5nKQomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwkJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CQlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLOwomIzQzOwkJc2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtJmd0O3NldF9zY3J1Yl9jeWNsZSk7CiYjNDM7CQlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJCWlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJCWlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXNjcnViX3BhcmFtc19pbiAmYW1wOz0gflJBUzJfUFNfRU5fQkFDS0dST1VORDsKJiM0MzsJc2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpOwomIzQzOwlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvICVzIGJhY2tncm91bmQgc2NydWJiaW5nXG4mIzM0OywKJiM0MzsJCQlzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiZ19zY3J1YiA9IGVuYWJsZTsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7CiYjNDM7CQkvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi8KJiM0MzsJCXJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CSplbmFibGVkID0gcnVubmluZzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19pbjsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWVuYWJsZSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWQKJiM0MzsJICogd2l0aCAoYmFzZSAmIzQzOyBzaXplKSAmZ3Q7IChtZW1fYmFzZSAmIzQzOyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGEKJiM0MzsJICogcHJvcGVyIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIE5VTUEgbm9kZSBtZW1vcnkgcmFuZ2UgaXMgYXZhaWxhYmxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyYXMyX2N0eC0mZ3Q7c2l6ZSB8fCByYXMyX2N0eC0mZ3Q7YmFzZSAmbHQ7IHJhczJfY3R4LSZndDttZW1fYmFzZSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7JXM6IEludmFsaWQgYWRkcmVzcyByYW5nZSwgYmFzZT0weCVsbHggc2l6ZT0weCVsbHhcbiYjMzQ7LAomIzQzOwkJCV9fZnVuY19fLCByYXMyX2N0eC0mZ3Q7YmFzZSwgcmFzMl9jdHgtJmd0O3NpemUpOwomIzQzOwkJcmV0ID0gLUVSQU5HRTsKJiM0MzsJCWdvdG8gZW5hYmxlX2JnX3NjcnViOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CXNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlKTsKJiM0MzsJc2NydWJfcGFyYW1zX2luICZhbXA7PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EOwomIzQzOwlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDtiYXNlLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O3NpemUsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7CiYjNDM7CWlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcbiYjMzQ7LCByZXQpOwomIzQzOwkJaWYgKHJldCAhPSAtRUJVU1kpIHsKJiM0MzsJCQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJCQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7YmFzZSA9IDA7CiYjNDM7CQkJcmFzMl9jdHgtJmd0O3NpemUgPSAwOwomIzQzOwkJfQomIzQzOwkJZ290byBlbmFibGVfYmdfc2NydWI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZW5hYmxlOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YiAmYW1wOyZhbXA7IHJhczJfY3R4LSZndDtkcml2ZXJfYWN0aXZlICZhbXA7JmFtcDsgIXJhczJfY3R4LSZndDt0aHJlYWQpIHsKJiM0MzsJCXJhczJfY3R4LSZndDt0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCwKJiM0MzsJCQkJCSAgICAgICAmIzM0O3JhczJfc2NydWJfbmlkJWQmIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlpZiAoSVNfRVJSKHJhczJfY3R4LSZndDt0aHJlYWQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihyYXMyX2N0eC0mZ3Q7dGhyZWFkKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsCiYjNDM7CQkJICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWQKJiM0MzsJCQkgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlnb3RvIGVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzOwomIzQzO2VuYWJsZV9iZ19zY3J1YjoKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YikgewomIzQzOwkJcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7CiYjNDM7CQlfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHsKJiM0MzsJLnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLAomIzQzOwkucmVhZF9zaXplID0gcmFzMl9od19zY3J1Yl9yZWFkX3NpemUsCiYjNDM7CS53cml0ZV9hZGRyID0gcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyLAomIzQzOwkud3JpdGVfc2l6ZSA9IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSwKJiM0MzsJLmdldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZywKJiM0MzsJLnNldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZywKJiM0MzsJLmdldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZCwKJiM0MzsJLnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCwKJiM0MzsJLmdldF9taW5fY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlLAomIzQzOwkuZ2V0X21heF9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUsCiYjNDM7CS5nZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQsCiYjNDM7CS5zZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9tZW1fZHJ2X3JlbW92ZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2N0eCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZHJpdmVyX2FjdGl2ZSA9IGZhbHNlOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3RocmVhZCkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CQlrdGhyZWFkX3N0b3AocmFzMl9jdHgtJmd0O3RocmVhZCk7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTsKJiM0MzsJc3RydWN0IGVkYWNfZGV2X2ZlYXR1cmUgcmFzX2ZlYXR1cmVzOwomIzQzOwljaGFyIHNjcnViX25hbWVbUkFTMl9TQ1JVQl9OQU1FX0xFTl07CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBudW1fc3Bhbm5lZF9wYWdlczsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHJhczJfY3R4KSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmV0cmlldmUgdGhlIFBBIHJhbmdlIG9mIHRoZSBOVU1BIGRvbWFpbiBhbmQgdXNlIGl0IGFzIHRoZQomIzQzOwkgKiAmIzM5O1JlcXVlc3RlZCBBZGRyZXNzIFJhbmdlJiMzOTssIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmQKJiM0MzsJICogR0VUX1BBVFJPTF9QQVJBTUVURVJTIHRvIGdldCBwYXJhbWV0ZXJzIHRoYXQgYXBwbHkgdG8gYWxsIGFkZHJlc3NlcwomIzQzOwkgKiBpbiB0aGUgTlVNQSBkb21haW4gYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVIKJiM0MzsJICogdG8gc3RhcnQgdGhlIGRlbWFuZCBzY3J1YmJpbmcuCiYjNDM7CSAqLwomIzQzOwlzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC0mZ3Q7c3lzX2NvbXBfbmlkKTsKJiM0MzsJbnVtX3NwYW5uZWRfcGFnZXMgPSBub2RlX3NwYW5uZWRfcGFnZXMocmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CWlmICghbnVtX3NwYW5uZWRfcGFnZXMpIHsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxuJiMzNDssIHJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQpOwomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7bWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7CiYjNDM7CXJhczJfY3R4LSZndDttZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovCiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7c2NydWJfY3ljbGVfaHJzICZndDsgcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSkKJiM0MzsJCXJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC0mZ3Q7c2NydWJfY3ljbGVfaHJzOwomIzQzOwllbHNlCiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZTsKJiM0MzsKJiM0MzsJc3ByaW50ZihzY3J1Yl9uYW1lLCAmIzM0O2FjcGlfcmFzX21lbSVkJiMzNDssIGF1eGRldi0mZ3Q7aWQpOwomIzQzOwomIzQzOwlyYXNfZmVhdHVyZXMuZnRfdHlwZQk9IFJBU19GRUFUX1NDUlVCOwomIzQzOwlyYXNfZmVhdHVyZXMuaW5zdGFuY2UJPSAwOwomIzQzOwlyYXNfZmVhdHVyZXMuc2NydWJfb3BzCT0gJmFtcDtyYXMyX3NjcnViX29wczsKJiM0MzsJcmFzX2ZlYXR1cmVzLmN0eAk9IHJhczJfY3R4OwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZHJpdmVyX2FjdGl2ZSA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBlZGFjX2Rldl9yZWdpc3RlcigmYW1wO2F1eGRldi0mZ3Q7ZGV2LCBzY3J1Yl9uYW1lLCBOVUxMLCAxLCAmYW1wO3Jhc19mZWF0dXJlcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHsKJiM0MzsJeyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FICYjMzQ7LiYjMzQ7IFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzOwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7CiYjNDM7CS5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsCiYjNDM7CS5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSwKJiM0MzsJLnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsCiYjNDM7CS5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSwKJiM0Mzt9OwomIzQzO21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7CiYjNDM7CiYjNDM7TU9EVUxFX0lNUE9SVF9OUygmIzM0O0FDUElfUkFTMiYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9yYXMyLmggYi9pbmNsdWRlL2FjcGkvcmFzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYWNwaS9yYXMyLmgKQEAgLTAsMCAmIzQzOzEsODYgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBBQ1BJIFJBUzIgKFJBUyBGZWF0dXJlIFRhYmxlKSBtZXRob2RzLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9BQ1BJX1JBUzJfSAomIzQzOyNkZWZpbmUgX0FDUElfUkFTMl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2FjcGkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXV4aWxpYXJ5X2J1cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYWlsYm94X2NsaWVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBkZXZpY2U7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBQ1BJIHNwZWMgNi41IFRhYmxlIDUuODI6IFBDQyBjb21tYW5kIGNvZGVzIHVzZWQgYnkKJiM0MzsgKiBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBDQ19DTURfRVhFQ19SQVMyIDB4MDEKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FICYjMzQ7cmFzMiYjMzQ7CiYjNDM7I2RlZmluZSBSQVMyX01FTV9ERVZfSURfTkFNRSAmIzM0O2FjcGlfcmFzMl9tZW0mIzM0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlcwomIzQzOyAqIEBhZGV2OgkJQXV4aWxpYXJ5IGRldmljZSBvYmplY3QKJiM0MzsgKiBAY29tbV9hZGRyOgkJUG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvbgomIzQzOyAqIEBkZXY6CQlQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQwomIzQzOyAqIEBzc3BjYzoJCVBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uCiYjNDM7ICogQHBjY19sb2NrOgkJUG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MKJiM0MzsgKgkJCXRvIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogQHN5c19jb21wX25pZDoJTm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZQomIzQzOyAqCQkJaXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyCiYjNDM7ICoJCQlQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsCiYjNDM7ICoJCQlGaWVsZDogSW5zdGFuY2UKJiM0MzsgKiBAbWVtX2Jhc2U6CQlCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2UKJiM0MzsgKgkJCW9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpbgomIzQzOyAqIEBtZW1fc2l6ZQkJU2l6ZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlCiYjNDM7ICoJCQlvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW4KJiM0MzsgKiBAYmFzZToJCUJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YgomIzQzOyAqIEBzaXplOgkJU2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YgomIzQzOyAqIEBzY3J1Yl9jeWNsZV9ocnM6CUN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3VycwomIzQzOyAqIEBzZXRfc2NydWJfY3ljbGU6CVNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzCiYjNDM7ICogQG1pbl9zY3J1Yl9jeWNsZToJTWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZAomIzQzOyAqIEBtYXhfc2NydWJfY3ljbGU6CU1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWQKJiM0MzsgKiBAb2Rfc2NydWI6CQlTdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZyAobWVtb3J5IHJlZ2lvbikKJiM0MzsgKiBAYmdfc2NydWI6CQlTdGF0dXMgb2YgYmFja2dyb3VuZCBwYXRyb2wgc2NydWJiaW5nCiYjNDM7ICogQHJlZW5hYmxlX2JnX3NjcnViOglGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZAomIzQzOyAqCQkJc2NydWJiaW5nIGlzIGZpbmlzaGVkCiYjNDM7ICogQHRocmVhZDoJCURlbWFuZCBzY3J1YiBtb25pdG9yIGt0aHJlYWQKJiM0MzsgKiBAZHJpdmVyX2FjdGl2ZToJRmxhZyBpbmRpY2F0ZXMgUkFTMiBtZW1vcnkgZHJpdmVyIGlzIGFjdGl2ZS9yZW1vdmVkCiYjNDM7ICovCiYjNDM7c3RydWN0IHJhczJfbWVtX2N0eCB7CiYjNDM7CXN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlCQlhZGV2OwomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0JKmNvbW1fYWRkcjsKJiM0MzsJc3RydWN0IGRldmljZQkJCSpkZXY7CiYjNDM7CXZvaWQJCQkJKnNzcGNjOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQkqcGNjX2xvY2s7CiYjNDM7CXUzMgkJCQlzeXNfY29tcF9uaWQ7CiYjNDM7CXU2NAkJCQltZW1fYmFzZTsKJiM0MzsJdTY0CQkJCW1lbV9zaXplOwomIzQzOwl1NjQJCQkJYmFzZTsKJiM0MzsJdTY0CQkJCXNpemU7CiYjNDM7CXU4CQkJCXNjcnViX2N5Y2xlX2hyczsKJiM0MzsJdTgJCQkJc2V0X3NjcnViX2N5Y2xlOwomIzQzOwl1OAkJCQltaW5fc2NydWJfY3ljbGU7CiYjNDM7CXU4CQkJCW1heF9zY3J1Yl9jeWNsZTsKJiM0MzsJYm9vbAkJCQlvZF9zY3J1YjsKJiM0MzsJYm9vbAkJCQliZ19zY3J1YjsKJiM0MzsJYm9vbAkJCQlyZWVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0CQkqdGhyZWFkOwomIzQzOwlib29sCQkJCWRyaXZlcl9hY3RpdmU7CiYjNDM7fTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0FDUElfUkFTMgomIzQzO3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpOwomIzQzO2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGFjLmggYi9pbmNsdWRlL2xpbnV4L2VkYWMuaAppbmRleCBlNmI0ZTUxMTMwZTVmZi4uYmU0ZjZlNTJlYTM4YTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWRhYy5oCkBAIC02ODQsNiAmIzQzOzY4NCw4IEBAIGVudW0gZWRhY19kZXZfZmVhdCB7CiAgKiBAd3JpdGVfc2l6ZTogc2V0IG9mZnNldCBvZiB0aGUgc2NydWJiaW5nIHJhbmdlLgogICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLgogICogQHNldF9lbmFibGVkX2JnOiBzdGFydCBvciBzdG9wIGEgYmctc2NydWIuCiYjNDM7ICogQGdldF9lbmFibGVkX29kOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBkZW1hbmQgc2NydWIuCiYjNDM7ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLgogICogQGdldF9taW5fY3ljbGU6IGdldCBtaW5pbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLgogICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLgogICogQGdldF9jeWNsZV9kdXJhdGlvbjogZ2V0IGN1cnJlbnQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy4KQEAgLTY5Niw2ICYjNDM7Njk4LDggQEAgc3RydWN0IGVkYWNfc2NydWJfb3BzIHsKIAlpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7CiAJaW50ICgqZ2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7CiAJaW50ICgqc2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTsKJiM0MzsJaW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7CiYjNDM7CWludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7CiAJaW50ICgqZ2V0X21pbl9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWluKTsKIAlpbnQgKCpnZXRfbWF4X2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptYXgpOwogCWludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDAwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUNQSSBSQVMyIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCBhZGRzIEFDUEkgUkFTMiBzdXBwb3J0IGFuZCBhIG1lbW9yeSBkcml2ZXIuIEl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGRvY3VtZW50YXRpb24gdXBkYXRlcywgS2NvbmZpZyBhbmQgTWFrZWZpbGUgY2hhbmdlcywgc29tZSBuZXcgZmlsZXMgKGByYXMyLmNgLCBgYWNwaV9yYXMyLmNgLCBgcmFzMi5oYCksIGFuZCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGRyaXZlcnMgKGBidXMuY2AsIGBzY3J1Yi5jYCkuIEl0JiMzOTtzIGFsbCBhYm91dCBlbmFibGluZyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nIHVzaW5nIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykuIFRoZSBkcml2ZXIgaW50ZWdyYXRlcyB3aXRoIEVEQUMgYW5kIGV4cG9zZXMgc3lzZnMgYXR0cmlidXRlcyBmb3IgY29udHJvbC4KClRoZSBiaWcgcXVlc3Rpb24gaW4gbXkgbWluZCBpcyBhbHdheXMsIGhvdyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aCB2aXJ0dWFsaXphdGlvbj8gRG9lcyB0aGlzIGV2ZW4gKndvcmsqIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFPyBUaGUgY29yZSBkZXBlbmRlbmN5IGlzIHRoZSBwcmVzZW5jZSBvZiBhbiBBQ1BJIFJBUzIgdGFibGUuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBkb2VzIHRoZSBmaXJtd2FyZSAqcHJvdmlkZSogdGhhdCB0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQ/IEkga25vdyBRRU1VIG9mdGVuIGRvZXNuJiMzOTt0IGhhdmUgaXQgYnkgZGVmYXVsdC4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHN5emthbGxlci4gQ2FuIHN5emthbGxlciBpbmplY3QgQUNQSSB0YWJsZXM/IEkga25vdyBpdCBkb2VzLCBidXQgaXMgaXQgYWJsZSB0byBsb2FkIGFuIEFDUEkgUkFTMiB0YWJsZT8KCldhaXQsIHN5emthbGxlciAqY2FuJiMzOTt0KiBpbmplY3QgYXJiaXRyYXJ5IHRhYmxlcyB1bmxlc3MgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IHN1cHBvcnRlZC4gSXQgZG9lcyBoYXZlIEFDUEkgZnV6emluZywgYnV0IGl0JiMzOTtzIG5vdCBsaWtlIGEgYmxhbmtldCBpbmplY3Rpb24uIE9rYXksIEkgc2VlLiBUaGUgZHJpdmVyIHVzZXMgYGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIC4uLilgLiBJZiB0aGUgdGFibGUgKmlzbiYjMzk7dCogcHJlc2VudCwgYGFjcGlfcmFzMl9pbml0YCBqdXN0IHJldHVybnMuIFRoYXQmIzM5O3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGJ1dCBpcyB0aGF0IHJlYWNoYWJsZSBpbiBzeXprYWxsZXI/IElmIHRoZXJlJiMzOTtzIG5vIFJBUzIgdGFibGUsIHRoZSBkcml2ZXIganVzdCBzaWxlbnRseSBkb2VzIG5vdGhpbmcuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lczogaG93IGNhbiBJICpmb3JjZSogdGhpcyBjb2RlIHRvIHJ1biwgb3IgYXQgbGVhc3QgYXR0ZW1wdCB0byBydW4/CgpTeXprYWxsZXIgKmNhbiogbG9hZCBBQ1BJIHRhYmxlcyB2aWEgYGFjcGlfY29uZmlnZnNgIG9yIGBpbml0cmRgIHRhYmxlIG92ZXJyaWRlLi4uYnV0IEkmIzM5O20gbm90IHN1cmUgaWYgaXQgYWN0aXZlbHkgZG9lcyB0aGlzIGZvciBSQVMyLiBMZXQgbWUgY2hlY2sgaWYgYHBhcnNlX3JhczJfdGFibGVgIGlzIGV2ZXIgcmVhY2hlZC4gSWYgc3l6a2FsbGVyICpjYW4qIHByb3ZpZGUgY3VzdG9tIEFDUEkgdGFibGVzLCB0aGVuIHRoZSBjb2RlICppcyogcmVhY2hhYmxlLiBPa2F5LCBsZXQmIzM5O3MgYXNzdW1lIGl0IGNhbiBmb3IgdGhlIHRpbWUgYmVpbmcuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBDT05GSUdfQUNQSV9SQVMyYCwgYENPTkZJR19NRU1fQUNQSV9SQVMyYCwgYENPTkZJR19FREFDYCwgYW5kIGBDT05GSUdfRURBQ19TQ1JVQmAuIFN0YW5kYXJkIHN0dWZmLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgZHJpdmVyIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAgaW4gYGRyaXZlcnMvYWNwaS9idXMuY2AuIEV4Y2VsbGVudC4KCkZpbmFsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGlzIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb3IgcHVyZWx5IGhhcmR3YXJlIGRlcGVuZGVudCBvbiBpdC4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBtZW50aW9uIG9mIGBBQ1BJX1NJR19SQVMyYCBvdXRzaWRlIHRoZSBkcml2ZXIgaXRzZWxmLiBMZXQgbWUgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IGNvbWVzIGJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QUNQSV9TSUdfUkFTMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FjcGkvcmFzMi5jPTQ4OD12b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDkyLVxuZHJpdmVycy9hY3BpL3JhczIuYzo0OTM6XHRzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAwLCAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKVx1MDAyNnJhczJfdGFiKTtcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDk0LVx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7XG4tLVxuaW5jbHVkZS9hY3BpL2FjdGJsMi5oLTUzLSNkZWZpbmUgQUNQSV9TSUdfUkFTRiAgICAgICAgICAgXCYjMzQ7UkFTRlwmIzM0O1x0LyogUkFTIEZlYXR1cmUgdGFibGUgKi9cbmluY2x1ZGUvYWNwaS9hY3RibDIuaDo1NDojZGVmaW5lIEFDUElfU0lHX1JBUzIgICAgICAgICAgIFwmIzM0O1JBUzJcJiMzNDtcdC8qIFJBUzIgRmVhdHVyZSB0YWJsZSAqL1xuaW5jbHVkZS9hY3BpL2FjdGJsMi5oLTU1LSNkZWZpbmUgQUNQSV9TSUdfUkdSVCAgICAgICAgICAgXCYjMzQ7UkdSVFwmIzM0O1x0LyogUmVndWxhdG9yeSBHcmFwaGljcyBSZXNvdXJjZSBUYWJsZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDAwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjA4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzOiBBQ1BJIFJBUzIgVGFibGUgYW5kIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkcml2ZXJzL2FjcGkvcmFzMi5jYCBjb2RlLCBhbmQgdGhlIGtleSBzZWVtcyB0byBiZSB0aGUgQUNQSSBSQVMyIHRhYmxlIHNpZ25hdHVyZS4gQ2FuIHN5emthbGxlciBldmVuIGZ1enogQUNQSSB0YWJsZXM/IEkga25vdyBpdCBoYXMgKnNvbWUqIHN1cHBvcnQuIEJ1dCB0aGUgZW50cnkgcG9pbnQsIGBhY3BpX3JhczJfaW5pdGAsIGlzIGNhbGxlZCBkdXJpbmcgYGFjcGlfaW5pdGAsIHdoaWNoIGlzIGFuIGBzdWJzeXNfaW5pdGNhbGxgLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIElmIHN5emthbGxlciBsb2FkcyB0YWJsZXMgdGhyb3VnaCBjb25maWdmcyBsYXRlciwgZG9lcyB0aGF0IGV2ZW4gbWF0dGVyPyBEb2VzIGBhY3BpX2dldF90YWJsZWAgcGljayB1cCB0YWJsZXMgbG9hZGVkIGFmdGVyIGBhY3BpX2luaXRgIHJ1bnM/CgpBY3R1YWxseSwgdGhlIG1vcmUgSSB0aGluayBhYm91dCBpdCwgYGFjcGlfcmFzMl9pbml0YCBzZWVtcyB0byBiZSBhICpvbmUtc2hvdCogZGVhbCBkdXJpbmcgYm9vdC4gSWYgdGhlIHRhYmxlIGlzbiYjMzk7dCB0aGVyZSBhdCB0aGF0IGV4YWN0IG1vbWVudCwgaXQgYmFpbHMgb3V0LiBDb3VsZCB3ZSBpbmplY3QgaXQgdmlhIHRoZSBRRU1VIGNvbW1hbmQgbGluZT8gUG9zc2libGUsIGJ1dCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZHluYW1pY2FsbHkgc3dhcCBBQ1BJIHRhYmxlcyBwZXIgdGVzdCBjYXNlLCBpdCBoYXMgYSBmaXhlZCBRRU1VIGNvbmZpZy4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbiAmIzM0O2luamVjdCBBQ1BJIHRhYmxlJiMzNDsgc3l6Y2FsbCBsaWtlIGBzeXpfYWNwaV9sb2FkYD8gTm8sIHRoZXJlIGlzbiYjMzk7dCBvbmUuIEhtbS4uLmlzIHRoZXJlIGV2ZW4gYW55IHdheSB0byB0ZXN0IHRoaXMgd2l0aCBzeXprYWxsZXI/CgpJZiBgYWNwaV9yYXMyX2luaXRgIG9ubHkgcnVucyBhdCBib290LCBhbmQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHJlYm9vdCB3aXRoIGN1c3RvbSBBQ1BJIHRhYmxlcywgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIExldCBtZSBjb25maXJtIHRoYXQgYGFjcGlfcmFzMl9pbml0YCBpcyB0aGUgc29sZSBlbnRyeSBwb2ludC4gWWVwLCBpdCBwYXJzZXMgdGhlIHRhYmxlIGFuZCBjcmVhdGVzIGF1eGlsaWFyeSBkZXZpY2VzLiBUaGUgYHJhczJfbWVtX2RyaXZlcmAgYmluZHMgdG8gdGhlc2UgZGV2aWNlcy4gTm8gZGV2aWNlcywgbm8gcHJvYmUsIGFuZCB0aGUgd2hvbGUgYGRyaXZlcnMvYWNwaS9yYXMyLmNgIGFuZCBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgIGFyZSBkZWFkIGNvZGUgdW5sZXNzIHRoZSBSQVMyIHRhYmxlIGlzIHByZXNlbnQgYXQgYm9vdC4KClNpbmNlIFFFTVUgZG9lc24mIzM5O3QgcHJvdmlkZSB0aGUgUkFTMiB0YWJsZSBieSBkZWZhdWx0LCBhbmQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGluamVjdCBpdCBhdCBib290LCB0aGlzIGNvZGUgaXMgbGlrZWx5ICp1bnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0IG1lIGRvdWJsZS1jaGVjazogaXMgdGhlcmUgQU5ZIG90aGVyIHdheSB0byBjYWxsIGBwYXJzZV9yYXMyX3RhYmxlYCBvciBgcmFzMl9tZW1fZHJ2X3Byb2JlYD8gYHJhczJfbWVtX2Rydl9wcm9iZWAgZ2V0cyBjYWxsZWQgYnkgdGhlIGF1eGlsaWFyeSBidXMgd2hlbiBhIGRldmljZSBtYXRjaGluZyBgUkFTMl9NRU1fREVWX0lEX05BTUVgIGlzIGFkZGVkLiBBbmQgd2hlcmUgZG9lcyB0aGF0IGRldmljZSBjb21lIGZyb20/IEl0JiMzOTtzIGBwYXJzZV9yYXMyX3RhYmxlYCEgV2hpY2ggaXMgb25seSBjYWxsZWQgYnkgYGFjcGlfcmFzMl9pbml0YCwgYW5kIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IGBhY3BpX2luaXRgLgoKQ2FuIHdlIGNyZWF0ZSBhbiBhdXhpbGlhcnkgZGV2aWNlIGZyb20gdXNlcnNwYWNlPyBObywgYXV4aWxpYXJ5IGRldmljZXMgYXJlIGNyZWF0ZWQgYnkga2VybmVsIGNvZGUuIElzIHRoZXJlIGFueSB3YXkgdG8gdHJpZ2dlciBgYWNwaV9pbml0YCBhZ2Fpbj8gTm8sIGl0JiMzOTtzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLgoKU28sIHdpdGhvdXQgYSBSQVMyIEFDUEkgdGFibGUgcHJvdmlkZWQgYXQgYm9vdCwgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIFNpbmNlIHdlJiMzOTtyZSBldmFsdWF0aW5nIGlmIHN5emthbGxlciBzaG91bGQgZXZlbiB0cnksIGFuZCBzeXprYWxsZXIgcnVucyBpbiBRRU1VL0dDRSAqd2l0aG91dCogY3VzdG9tIGZpcm13YXJlIHdpdGggUkFTMiwgdGhpcyBjb2RlIGlzIGRlYWQuCgpXYWl0LCB3aGF0IGlmIHN5emthbGxlciBsb2FkcyB0aGUgdGFibGUgdmlhIGBhY3BpX2NvbmZpZ2ZzYD8gSXQgd291bGRuJiMzOTt0IG1hdHRlciwgYGFjcGlfcmFzMl9pbml0YCBoYXMgYWxyZWFkeSBydW4gYW5kIHJldHVybmVkLiBXYWl0LCBkb2VzIGBhY3BpX2dldF90YWJsZWAgZ2V0IGNhbGxlZCBhZ2FpbiBvbiB0YWJsZSBsb2FkPyBOby4gYGFjcGlfcmFzMl9pbml0YCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYWNwaV9pbml0YC4gVGhlcmUmIzM5O3Mgbm8gQUNQSSB0YWJsZSBub3RpZmllciBmb3IgUkFTMi4gQ29tcGFyZSB0aGF0IHRvIGBhY3BpX25maXRfaW5pdGAgd2hpY2ggKmRvZXMqIHJlZ2lzdGVyIGFuIEFDUEkgdGFibGUgaGFuZGxlci4uLiBMZXQmIzM5O3Mgc2VlIGlmIGBhY3BpX3JhczJfaW5pdGAgZG9lcyBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIGl0IGp1c3QgZG9lcyBhIG9uZS10aW1lIGBhY3BpX2dldF90YWJsZWAgYXQgYm9vdCBhbmQgY2FsbHMgYHBhcnNlX3JhczJfdGFibGVgIGlmIGl0IGZpbmRzIGl0LgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhZ2FpbiwgaXMgdGhlcmUgYW55IG90aGVyIHdheSB0byBjYWxsIGByYXMyX21lbV9kcnZfcHJvYmVgPyBNYXliZSBzb21lIG90aGVyIGRyaXZlciBzb21laG93IGNyZWF0ZXMgdGhlIGF1eGlsaWFyeSBkZXZpY2U/IE5vLCB0aGUgZGV2aWNlIElEIGlzIGAmIzM0O2FjcGlfcmFzMl9tZW0mIzM0O2AuIExldCBtZSBzZWFyY2ggZm9yIGl0IGFuZCBiZSBzdXJlLi4uIE5vcGUuIENvbmZpcm1lZC4gVGhpcyBjb2RlIGlzICp1bnJlYWNoYWJsZSogaW4gdGhlIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3BpX3JhczJfbWVtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvYWNwaS9yYXMyLmg9MTc9c3RydWN0IGRldmljZTtcbi0tXG5pbmNsdWRlL2FjcGkvcmFzMi5oLTI1LSNkZWZpbmUgUkFTMl9BVVhfREVWX05BTUUgXCYjMzQ7cmFzMlwmIzM0O1xuaW5jbHVkZS9hY3BpL3JhczIuaDoyNjojZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FIFwmIzM0O2FjcGlfcmFzMl9tZW1cJiMzNDtcbmluY2x1ZGUvYWNwaS9yYXMyLmgtMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MTQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUkFTMiBEZXZpY2UgYW5kIEVEQUMgU2NydWIgSW50ZXJmYWNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFJBUzIgZGV2aWNlLCBhbmQgaXQgc2VlbXMgdGhlIG9ubHkgd2F5IGl0IGdldHMgY3JlYXRlZCBpcyB0aHJvdWdoIGBhY3BpX3JhczJfaW5pdGAuIFRoaXMgaXMgYSBiaXQgb2YgYSBwcm9ibGVtIGJlY2F1c2UgaXQmIzM5O3MgaGFyZHdhcmUtZGVwZW5kZW50LCBuZWVkaW5nIHNwZWNpZmljIEFDUEkgdGFibGVzIGZyb20gdGhlIGZpcm13YXJlLCBhbmQgaXQgb25seSBjaGVja3MgdGhpcyBhdCBib290IHRpbWUuIFRoYXQgbWVhbnMgaXQmIzM5O3MgYmFzaWNhbGx5IHVudG91Y2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVubGVzcyB3ZSBzcGVjaWZpY2FsbHkgY29uZmlndXJlIFFFTVUgdG8gcGFzcyBhIGN1c3RvbSBBQ1BJIHRhYmxlLCBhbmQgU3l6a2FsbGVyIGlzbiYjMzk7dCBkb2luZyB0aGF0IGR5bmFtaWNhbGx5IGZvciBSQVMyIGF0IHRoZSBtb21lbnQuIEl0IGlzIGdvaW5nIHRvIGJlIGluY3JlZGlibHkgZGlmZmljdWx0IHRvIHJlcHJvZHVjZSBhbnkgaXNzdWVzLgoKV2FpdCBhIHNlY29uZCwgdGhlcmUmIzM5O3MgYSByZWxhdGVkIGNoYW5nZSBpbiBgZHJpdmVycy9lZGFjL3NjcnViLmNgISBJIG1pc3NlZCB0aGlzIGluaXRpYWxseS4gSXQgbG9va3MgbGlrZSBhIG5ldyBhdHRyaWJ1dGUgYGVuYWJsZV9kZW1hbmRgIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBFREFDIHNjcnViIHN5c2ZzIGludGVyZmFjZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXMgYW55IG90aGVyIGRyaXZlciB1c2luZyB0aGlzIG5ldyBhdHRyaWJ1dGU/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgb3RoZXIgZHJpdmVycyBzZXR0aW5nIGBnZXRfZW5hYmxlZF9vZGAgb3IgYHNldF9lbmFibGVkX29kYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfZW5hYmxlZF9vZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2VkYWMvc2NydWIuYz04OD1FREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2JhY2tncm91bmQsIHNldF9lbmFibGVkX2JnLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jOjg5OkVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG5kcml2ZXJzL2VkYWMvc2NydWIuYy05MC1FREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbi0tXG5kcml2ZXJzL2VkYWMvc2NydWIuYz05Mj1zdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxuLS1cbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTEyNi1cdFx0aWYgKG9wcy1cdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xuZHJpdmVycy9lZGFjL3NjcnViLmM6MTI3Olx0XHRcdGlmIChvcHMtXHUwMDNlc2V0X2VuYWJsZWRfb2QpXG5kcml2ZXJzL2VkYWMvc2NydWIuYy0xMjgtXHRcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuLS1cbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jPTM4MT1zdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbi0tXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYy0zOTYtXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYzozOTc6c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtMzk4LXtcbi0tXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYz00ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcbi0tXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYy00OTYtXHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM6NDk3Olx0LnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQ5OC1cdC5nZXRfbWluX2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaD02NzI9ZW51bSBlZGFjX2Rldl9mZWF0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02ODctICogQGdldF9lbmFibGVkX29kOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBkZW1hbmQgc2NydWIuXG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo2ODg6ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxuaW5jbHVkZS9saW51eC9lZGFjLmgtNjg5LSAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaD02OTQ9c3RydWN0IGVkYWNfc2NydWJfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC03MDEtXHRpbnQgKCpnZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbmluY2x1ZGUvbGludXgvZWRhYy5oOjcwMjpcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG5pbmNsdWRlL2xpbnV4L2VkYWMuaC03MDMtXHRpbnQgKCpnZXRfbWluX2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptaW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDAwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjI3CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDM2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIG5ldyBgc2V0X2VuYWJsZWRfb2RgIGZ1bmN0aW9uIGlzICpvbmx5KiB1c2VkIHdpdGhpbiBgYWNwaV9yYXMyLmNgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBuZXcgRURBQyBzY3J1YiBhdHRyaWJ1dGUgaXMgZXhjbHVzaXZlbHkgdGllZCB0byB0aGUgbmV3IEFDUEkgUkFTMiBkcml2ZXIuIEdpdmVuIHRoYXQsIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiBldmVuICpoaXQqIHRoaXMgY29kZS4KCk15IGZpcnN0IHRob3VnaHQgd2FzLCAmIzM0O0NvdWxkIG91ciBmdXp6aW5nIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgc3l6a2FsbGVyLCBwcm92aWRlIGEgcGF0aHdheT8mIzM0OyBJIG5lZWQgdG8gY29uc2lkZXIgdGhhdC4gVGhlbiBJIHJlbWVtYmVyZWQgdGhlIEFDUEkgdGFibGUgaW5qZWN0aW9uIG1lY2hhbmlzbSBpbiBzeXprYWxsZXIgdmlhIGBhY3BpX2NvbmZpZ2ZzYC4gSG93ZXZlciwgYSBxdWljayBsb29rIHJldmVhbHMgdGhhdCBgYWNwaV9yYXMyX2luaXRgIGlzIGNhbGxlZCBkaXJlY3RseSBkdXJpbmcgdGhlIGtlcm5lbCYjMzk7cyBib290LXVwIHNlcXVlbmNlIGZyb20gYGFjcGlfaW5pdGAsIGFuZCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gcmVnaXN0ZXIgaXRzZWxmIHRvIGJlIGNhbGxlZCBsYXRlci4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMuLi4gT2theSwgd2FpdC4uLiBgYWNwaV9uZml0X2luaXRgIGlzIGFsc28gY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAsIGFuZCB0aGF0ICpkb2VzKiByZWdpc3RlciBhbiBBQ1BJIGRyaXZlci4gVGhhdCYjMzk7cyBhIG1vZHVsZSBpbml0IGZ1bmN0aW9uISBgYWNwaV9yYXMyX2luaXRgIGRvZXMgbm90LiBJdCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYWNwaV9pbml0YCBhbmQganVzdCBjYWxscyBgYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgLi4uKWAuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgQUNQSSB0YWJsZSBnZXRzIGxvYWRlZCBsYXRlciB2aWEgY29uZmlnZnMsIGBhY3BpX3JhczJfaW5pdGAgd29uJiMzOTt0IGJlIHJlLWV4ZWN1dGVkLiBJdCYjMzk7cyBzdHJpY3RseSBhIGJvb3QtdGltZSB0aGluZy4KClNvLCByZWFsaXN0aWNhbGx5LCB3ZSBjYW4mIzM5O3QgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gc3l6a2FsbGVyLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyB1bnJlYWNoYWJsZSBjb2RlLCB3aGljaCBpcyBoYXJkd2FyZS1kZXBlbmRlbnQgKG5lZWRpbmcgYW4gQUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgaW4gZmlybXdhcmUgYXQgYm9vdCkgYW5kLCBhcyBzdWNoLCB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UuIEkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLCBjaXRpbmcgdGhlc2UgcmVhc29ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIFRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gKGFjcGlfcmFzMl9pbml0KSBpcyBjYWxsZWQgZXhhY3RseSBvbmNlIGR1cmluZyBib290IChmcm9tIGFjcGlfaW5pdCkgYW5kIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBBQ1BJIFJBUzIgdGFibGUuIFNpbmNlIFFFTVUvR0NFIGRvIG5vdCBwcm92aWRlIHRoaXMgc3BlY2lmaWMgQUNQSSB0YWJsZSBieSBkZWZhdWx0LCBhbmQgdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IGR5bmFtaWMgdGFibGUgbG9hZGluZyAoZS5nLiwgdmlhIGNvbmZpZ2ZzKSwgdGhlIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gVGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiAoYWNwaV9yYXMyX2luaXQpIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QgKGZyb20gYWNwaV9pbml0KSBhbmQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFDUEkgUkFTMiB0YWJsZS4gU2luY2UgUUVNVS9HQ0UgZG8gbm90IHByb3ZpZGUgdGhpcyBzcGVjaWZpYyBBQ1BJIHRhYmxlIGJ5IGRlZmF1bHQsIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyB0YWJsZSBsb2FkaW5nIChlLmcuLCB2aWEgY29uZmlnZnMpLCB0aGUgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDAwOjM2OjIzLjYwNjc3MjM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNDUzNDI0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gVGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiAoYWNwaV9yYXMyX2luaXQpIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QgKGZyb20gYWNwaV9pbml0KSBhbmQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFDUEkgUkFTMiB0YWJsZS4gU2luY2UgUUVNVS9HQ0UgZG8gbm90IHByb3ZpZGUgdGhpcyBzcGVjaWZpYyBBQ1BJIHRhYmxlIGJ5IGRlZmF1bHQsIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyB0YWJsZSBsb2FkaW5nIChlLmcuLCB2aWEgY29uZmlnZnMpLCB0aGUgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDA6MzY6MjMuNjA2Nzc3MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjgzNTk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQzMWNlMDVkMjFlYWQwZmZkMjdiM2M4ZGNiZmQ1MTNkZWIwYWM5NGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgNiAwMDozNjoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcXG5pbmRleCBhYjYwMTQ3NDNkYTU2OC4uMmI4NzRlMDMzNjIzMzQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuQEAgLTIwLDExICsyMCw3IEBAIEtlcm5lbFZlcnNpb246XFx0Ni4xNVxcbiBDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuIERlc2NyaXB0aW9uOlxcbiBcXHRcXHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4tXFx0XFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxcbi1cXHRcXHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cXG4tXFxuLVxcdFxcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcXG4tXFx0XFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXFxuK1xcdFxcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxcbiBcXG4gV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1Ylgvc2l6ZVxcbiBEYXRlOlxcdFxcdE1hcmNoIDIwMjVcXG5AQCAtMzQsNiArMzAsMTQgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdChSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4gXFx0XFx0KG9uLWRlbWFuZCBzY3J1YmJpbmcpLlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1YlgvZW5hYmxlX2RlbWFuZFxcbitEYXRlOlxcdFxcdEphbiAyMDI2XFxuK0tlcm5lbFZlcnNpb246XFx0Ni4xOVxcbitDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHQoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzXFxuK1xcdFxcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cXHUwMDNjZGV2LW5hbWVcXHUwMDNlL3NjcnViWC9lbmFibGVfYmFja2dyb3VuZFxcbiBEYXRlOlxcdFxcdE1hcmNoIDIwMjVcXG4gS2VybmVsVmVyc2lvbjpcXHQ2LjE1XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XFxuaW5kZXggMmNmYTc0ZmExZmZkMmYuLjU2MmJmZDZmZjYzMDUxIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XFxuQEAgLTM0MCwzICszNDAsNzMgQEAgY29udHJvbGxlciBvciBwbGF0Zm9ybSB3aGVuIHVuZXhwZWN0ZWRseSBoaWdoIGVycm9yIHJhdGVzIGFyZSBkZXRlY3RlZC5cXG4gXFxuIFN5c2ZzIGZpbGVzIGZvciBzY3J1YmJpbmcgYXJlIGRvY3VtZW50ZWQgaW5cXG4gYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1lY3NgXFxuK1xcbiszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZ1xcbitcXG4rMy4xLiBEZW1hbmQgc2NydWJiaW5nIGZvciBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uXFxuK1xcbiszLjEuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxcbitcXG4rMFxcbitcXG4rMy4xLjIuIFF1ZXJ5IHdoYXQgaXMgZGV2aWNlIGRlZmF1bHQvY3VycmVudCBzY3J1YiBjeWNsZSBzZXR0aW5nLlxcbitcXG4rQXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZVxcbitzY3J1YiBjeWNsZSBpcyBzZWNvbmRzLlxcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cXG4rXFxuKzM2MDAwXFxuK1xcbiszLjEuMy4gUXVlcnkgdGhlIHJhbmdlIG9mIGRldmljZSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZm9yIGEgbWVtb3J5IHJlZ2lvbi5cXG4rVGhlIHVuaXQgb2YgdGhlIHNjcnViIGN5Y2xlIHJhbmdlIGlzIHNlY29uZHMuXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWluX2N5Y2xlX2R1cmF0aW9uXFxuK1xcbiszNjAwXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWF4X2N5Y2xlX2R1cmF0aW9uXFxuK1xcbis4NjQwMFxcbitcXG4rMy4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnlcXG4rNDMyMDAgc2Vjb25kcyAoaGFsZiBhIGRheSkuXFxuK1xcbisjIGVjaG8gNDMyMDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxcbitcXG4rMy4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxcbitcXG4rU2V0ICdhZGRyJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cXG4rXFxuKyMgZWNobyAweDgwMDAwMDAwIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHJcXG4rXFxuK1NldCAnc2l6ZScgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXFxuK1xcbisjIGVjaG8gMHgyMDAwMDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvc2l6ZVxcbitcXG4rMy4xLjYuIFN0YXJ0ICdkZW1hbmQgc2NydWJiaW5nJy5cXG4rXFxuK1doZW4gYSBkZW1hbmQgc2NydWIgaXMgc3RhcnRlZCwgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzXFxuK3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlXFxuK2RlbWFuZCBzY3J1YiBoYXMgY29tcGxldGVkLlxcbitcXG4rIyBlY2hvIDEgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxcbitcXG4rMy4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxcbitcXG4rMy4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcXG4rXFxuKzBcXG4rXFxuKzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcXG4rc2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXFxuK1xcbisjIGVjaG8gMjE2MDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxcbitcXG4rMy4yLjMuIFN0YXJ0ICdiYWNrZ3JvdW5kIHNjcnViYmluZycuXFxuK1xcbisjIGVjaG8gMSBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXFxuaW5kZXggZjE2NWQxNGNmNjFhM2EuLjUzOWZmMTQzY2NjNTIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWdcXG5AQCAtMjk0LDYgKzI5NCwxNyBAQCBjb25maWcgQUNQSV9DUFBDX0xJQlxcbiBcXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxcbiBcXHQgIGxlYXZlIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxcbiBcXG4rY29uZmlnIEFDUElfUkFTMlxcbitcXHRib29sIFxcXCJBQ1BJIFJBUzIgZHJpdmVyXFxcIlxcbitcXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbitcXHRkZXBlbmRzIG9uIE1BSUxCT1hcXG4rXFx0ZGVwZW5kcyBvbiBQQ0NcXG4rXFx0aGVscFxcbitcXHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXFxuK1xcdCAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgc2VsZWN0IE4uXFxuK1xcbiBjb25maWcgQUNQSV9QUk9DRVNTT1JcXG4gXFx0dHJpc3RhdGUgXFxcIlByb2Nlc3NvclxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxcbmluZGV4IGQxYjBhZmZiODQ0ZjA1Li5hYmZlYzY3NDU3MjRlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcXG5AQCAtMTA1LDYgKzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpXFx0Kz0gZWNfc3lzLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfQkdSVClcXHRcXHQrPSBiZ3J0Lm9cXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXFx0Kz0gY3BwY19hY3BpLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSlcXHQrPSBzcGNyLm9cXG4rb2JqLSQoQ09ORklHX0FDUElfUkFTMilcXHRcXHQrPSByYXMyLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgKz0gYWNwaV9kYmcub1xcbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcXHQrPSBwcHR0Lm9cXG4gb2JqLSQoQ09ORklHX0FDUElfUEZSVVQpXFx0Kz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmNcXG5pbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jXFxuKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jXFxuQEAgLTMxLDYgKzMxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FjcGkvYXBlaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3VzcGVuZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJtdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gXFxuQEAgLTE2MTAsNiArMTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxcbiBcXHRhY3BpX2RlYnVnZ2VyX2luaXQoKTtcXG4gXFx0YWNwaV9zZXR1cF9zYl9ub3RpZnlfaGFuZGxlcigpO1xcbiBcXHRhY3BpX3Zpb3RfaW5pdCgpO1xcbitcXHRhY3BpX3JhczJfaW5pdCgpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTllY2JlN2M4MTk5YmJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9hY3BpL3JhczIuY1xcbkBAIC0wLDAgKzEsNTAzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogQUNQSSBSQVMyIGZlYXR1cmUgdGFibGUgZHJpdmVyLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cXG4rICpcXG4rICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaFxcbisgKiBwcm92aWRlcyBpbnRlcmZhY2VzIGZvciBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIGUuZy4sIGZvciBIVy1iYXNlZCBtZW1vcnlcXG4rICogc2NydWJiaW5nLCBhbmQgbG9naWNhbCB0byBwaHlzaWNhbCBhZGRyZXNzIHRyYW5zbGF0aW9uIHNlcnZpY2UuIFJBUzIgdXNlc1xcbisgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS5cXG4rICovXFxuK1xcbisjdW5kZWYgcHJfZm10XFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcIkFDUEkgUkFTMjogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL3BjYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cXG4rICogQG1ib3hfY2xpZW50OlxcdHN0cnVjdCBtYm94X2NsaWVudCBvYmplY3RcXG4rICogQHBjY19jaGFuOlxcdFxcdFBvaW50ZXIgdG8gc3RydWN0IHBjY19tYm94X2NoYW5cXG4rICogQGNvbW1fYWRkcjpcXHRcXHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBlbGVtOlxcdFxcdExpc3QgZm9yIHJlZ2lzdGVyZWQgUkFTMiBQQ0MgY2hhbm5lbCBzdWJzcGFjZXNcXG4rICogQHBjY19sb2NrOlxcdFxcdFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xcbisgKlxcdFxcdFxcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXFxuKyAqIEBkZWFkbGluZV91czpcXHRQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgdGltZW91dCBpbiBtaWNyb3NlY3NcXG4rICpcXHRcXHRcXHRmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvblxcbisgKiBAcGNjX21wYXI6XFx0XFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXFxuKyAqIEBwY2NfbXJ0dDpcXHRcXHRNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKSBpbiBtaWNyb3NlY3NcXG4rICpcXHRcXHRcXHRPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZVxcbisgKlxcdFxcdFxcdGlzc3VpbmcgbmV4dCBjb21tYW5kXFxuKyAqIEBsYXN0X2NtZF9jbXBsX3RpbWU6IENvbXBsZXRpb24gdGltZSBvZiBsYXN0IFBDQyBjb21tYW5kXFxuKyAqIEBsYXN0X21wYXJfcmVzZXQ6XFx0VGltZSBvZiBsYXN0IE1QQVIgY291bnQgcmVzZXRcXG4rICogQG1wYXJfY291bnQ6XFx0XFx0TVBBUiBjb3VudFxcbisgKiBAcGNjX2lkOlxcdFxcdElkZW50aWZpZXIgb2YgdGhlIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsXFxuKyAqIEBsYXN0X2NtZDpcXHRcXHRMYXN0IFBDQyBjb21tYW5kXFxuKyAqIEBrcmVmOlxcdFxcdGtyZWYgb2JqZWN0XFxuKyAqL1xcbitzdHJ1Y3QgcmFzMl9zc3BjYyB7XFxuK1xcdHN0cnVjdCBtYm94X2NsaWVudFxcdFxcdG1ib3hfY2xpZW50O1xcbitcXHRzdHJ1Y3QgcGNjX21ib3hfY2hhblxcdFxcdCpwY2NfY2hhbjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXFx0KmNvbW1fYWRkcjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGVsZW07XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdHBjY19sb2NrO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRkZWFkbGluZV91cztcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0cGNjX21wYXI7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdFxcdHBjY19tcnR0O1xcbitcXHRrdGltZV90XFx0XFx0XFx0XFx0bGFzdF9jbWRfY21wbF90aW1lO1xcbitcXHRrdGltZV90XFx0XFx0XFx0XFx0bGFzdF9tcGFyX3Jlc2V0O1xcbitcXHRpbnRcXHRcXHRcXHRcXHRtcGFyX2NvdW50O1xcbitcXHRpbnRcXHRcXHRcXHRcXHRwY2NfaWQ7XFxuK1xcdHUxNlxcdFxcdFxcdFxcdGxhc3RfY21kO1xcbitcXHRzdHJ1Y3Qga3JlZlxcdFxcdFxcdGtyZWY7XFxuK307XFxuK1xcbisvKlxcbisgKiBBcmJpdHJhcnkgcmV0cmllcyBmb3IgUENDIGNvbW1hbmRzIGJlY2F1c2UgdGhlIHJlbW90ZSBwcm9jZXNzb3IgY291bGQgYmVcXG4rICogbXVjaCBzbG93ZXIgdG8gcmVwbHkuIEtlZXAgaXQgaGlnaCBlbm91Z2ggdG8gY292ZXIgZW11bGF0b3JzIHdoZXJlIHRoZVxcbisgKiBwcm9jZXNzb3JzIHJ1biBwYWluZnVsbHkgc2xvdy5cXG4rICovXFxuKyNkZWZpbmUgUENDX05VTV9SRVRSSUVTIDYwMFVMTFxcbisjZGVmaW5lIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWSAxMDAwXFxuKyNkZWZpbmUgUENDX01JTl9QT0xMX1VTRUNTIDNcXG4rXFxuKyNkZWZpbmUgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUyAxMDBcXG4rI2RlZmluZSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkgMHgwMFxcbitcXG4rLyogU3RhdGljIHZhcmlhYmxlcyBmb3IgdGhlIFJBUzIgUENDIHN1YnNwYWNlcyAqL1xcbitzdGF0aWMgREVGSU5FX01VVEVYKHJhczJfcGNjX2xpc3RfbG9jayk7XFxuK3N0YXRpYyBMSVNUX0hFQUQocmFzMl9zc3BjYyk7XFxuK1xcbitzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHR1MzIgY2FwX3N0YXR1cztcXG4rXFx0dTE2IHN0YXR1cztcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxcbitcXHQgKiBwbGF0Zm9ybSBhbmQgc2hvdWxkIGhhdmUgc2V0IHRoZSBjb21tYW5kIGNvbXBsZXRpb24gYml0IHdoZW5cXG4rXFx0ICogUENDIGNhbiBiZSB1c2VkIGJ5IE9TUE0uXFxuK1xcdCAqXFxuK1xcdCAqIFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciBldmVyeSBQQ0NfTUlOX1BPTExfVVNFQ1MgZm9yIG1heGltdW0gb2ZcXG4rXFx0ICogUENDX05VTV9SRVRSSUVTICogUENDIGNoYW5uZWwgbGF0ZW5jeSB1bnRpbCBQQ0MgY29tbWFuZCBjb21wbGV0ZVxcbitcXHQgKiBiaXQgaXMgc2V0LlxcbitcXHQgKi9cXG4rXFx0cmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dChcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzLCBzdGF0dXMsXFxuK1xcdFxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxcbitcXHRcXHRcXHRcXHRcXHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRwcl93YXJuKFxcXCJQQ0MgSUQ6IDB4JXg6IFBDQyBjaGVjayBjaGFubmVsIHRpbWVvdXQgZm9yIGxhc3QgY29tbWFuZDogMHgleCByYz0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZXBjY19pZCwgc3NwY2MtXFx1MDAzZWxhc3RfY21kLCByYyk7XFxuK1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzdGF0dXMgXFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIlBDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZXBjY19pZCwgc3NwY2MtXFx1MDAzZWxhc3RfY21kKTtcXG4rXFx0XFx0c3RhdHVzIFxcdTAwMjY9IH5QQ0NfU1RBVFVTX0VSUk9SO1xcbitcXHRcXHRpb3dyaXRlMTYoc3RhdHVzLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4rXFx0XFx0aW93cml0ZTMyKDB4MCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHQvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqL1xcbitcXHRybWIoKTtcXG4rXFx0Y2FwX3N0YXR1cyA9IGlvcmVhZDMyKFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xcbitcXHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfTk9UX1ZBTElEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxcbitcXHRcXHRyYyA9IC1FUEVSTTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUNQSV9SQVMyX0JVU1k6XFxuK1xcdFxcdHJjID0gLUVCVVNZO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfRkFJTEVEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9BQk9SVEVEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XFxuK1xcdFxcdHJjID0gLUVJTlZBTDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJjID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aW93cml0ZTMyKDB4MCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXFxuKyAqIEByYXMyX2N0eDpcXHRwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlXFxuKyAqIEBjbWQ6XFx0UkFTMiBjb21tYW5kIHRvIHNlbmRcXG4rICpcXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBvdGhlcndpc2VcXG4rICovXFxuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XFxuK1xcdHN0cnVjdCBtYm94X2NoYW4gKnBjY19jaGFubmVsO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcdHM2NCB0aW1lX2RlbHRhO1xcbitcXHR1MTYgdmFsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0c3NwY2MgPSByYXMyX2N0eC1cXHUwMDNlc3NwY2M7XFxuK1xcdGdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXG4rXFx0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHBjY19jaGFubmVsID0gc3NwY2MtXFx1MDAzZXBjY19jaGFuLVxcdTAwM2VtY2hhbjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXFxuK1xcdCAqIGFtb3VudCBvZiB0aW1lIHRoYXQgT1NQTSBtdXN0IHdhaXQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2ZcXG4rXFx0ICogYSBjb21tYW5kIGJlZm9yZSBpc3N1aW5nIHRoZSBuZXh0IGNvbW1hbmQsIGluIG1pY3Jvc2Vjb25kcy5cXG4rXFx0ICovXFxuK1xcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21ydHQpIHtcXG4rXFx0XFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lKTtcXG4rXFx0XFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCBcXHUwMDNlIHRpbWVfZGVsdGEpXFxuK1xcdFxcdFxcdGZzbGVlcChzc3BjYy1cXHUwMDNlcGNjX21ydHQgLSB0aW1lX2RlbHRhKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXFxuK1xcdCAqIG1heGltdW0gbnVtYmVyIG9mIHBlcmlvZGljIHJlcXVlc3RzIHRoYXQgdGhlIHN1YnNwYWNlIGNoYW5uZWwgY2FuXFxuK1xcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXFxuK1xcdCAqIGxpbWl0YXRpb24uXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcXG4rXFx0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXFxuK1xcdCAqIHN5c3RlbSBjYW4gY29sbGVjdGl2ZWx5IGdlbmVyYXRlLiBJZiBpdCBpcyBub3QsIGZvbGxvdyB0aGUgc3BlYyBhbmRcXG4rXFx0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxcbitcXHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cXG4rXFx0ICovXFxuK1xcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21wYXIpIHtcXG4rXFx0XFx0aWYgKCFzc3BjYy1cXHUwMDNlbXBhcl9jb3VudCkge1xcbitcXHRcXHRcXHR0aW1lX2RlbHRhID0ga3RpbWVfbXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVxcdTAwM2VsYXN0X21wYXJfcmVzZXQpO1xcbitcXHRcXHRcXHRpZiAoKHRpbWVfZGVsdGEgXFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXFx1MDAyNlxcdTAwMjYgc3NwY2MtXFx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xcbitcXHRcXHRcXHRcXHRkZXZfZGJnKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJQQ0MgY29tbWFuZCAweCV4IG5vdCBzZW50IGR1ZSB0byBNUEFSIGxpbWl0XFxcIiwgY21kKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZWxhc3RfbXBhcl9yZXNldCA9IGt0aW1lX2dldCgpO1xcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVxcdTAwM2VwY2NfbXBhcjtcXG4rXFx0XFx0fVxcbitcXHRcXHRzc3BjYy1cXHUwMDNlbXBhcl9jb3VudC0tO1xcbitcXHR9XFxuK1xcbitcXHQvKiBXcml0ZSB0byB0aGUgc2hhcmVkIGNvbW0gcmVnaW9uICovXFxuK1xcdGlvd3JpdGUxNihjbWQsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2Vjb21tYW5kKTtcXG4rXFxuK1xcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xcbitcXHRpb3dyaXRlMTYoMCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuK1xcbitcXHQvKiBSaW5nIGRvb3JiZWxsICovXFxuK1xcdHJjID0gbWJveF9zZW5kX21lc3NhZ2UocGNjX2NoYW5uZWwsIFxcdTAwMjZjbWQpO1xcbitcXHQvKlxcbitcXHQgKiBtYm94X3NlbmRfbWVzc2FnZSgpIHJldHVybnMgYSBub24tbmVnYXRpdmUgaW50ZWdlciBmb3Igc3VjY2Vzc2Z1bCBzdWJtaXNzaW9uXFxuK1xcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXFxuK1xcdCAqL1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl93YXJuKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxcXG5cXFwiLCBjbWQsIHJjKTtcXG4rXFx0XFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXFxuK1xcdFxcdHZhbCA9IGlvcmVhZDE2KFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXHRcXHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XFxuK1xcdFxcdGlvd3JpdGUxNih2YWwsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJjID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0c3NwY2MtXFx1MDAzZWxhc3RfY21kID0gY21kO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXFxuK1xcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcXG4rXFx0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuXFxuK1xcdCAqL1xcbitcXHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCkge1xcbitcXHRcXHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcXG4rXFx0XFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dClcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSA9IGt0aW1lX2dldCgpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXBjY19jaGFubmVsLVxcdTAwM2VtYm94LVxcdTAwM2V0eGRvbmVfaXJxKVxcbitcXHRcXHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcXFwiYWNwaV9yYXMyXFxcIik7XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VlbGVtKTtcXG4rXFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVxcdTAwM2VwY2NfY2hhbik7XFxuK1xcdGtmcmVlKHNzcGNjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxcbit7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZiwgIFxcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2c3NwY2MtXFx1MDAzZWtyZWYpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHJldHVybiBzc3BjYztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcbitcXHRpZiAocGNjX2lkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7XFxuK1xcdGlmIChzc3BjYykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc3NwY2NcXHRcXHQ9IHNzcGNjO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyXFx0PSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlZGV2XFx0XFx0PVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc3NwY2MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcXG4rXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4rXFx0XFx0a2ZyZWUoc3NwY2MpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGNjX2NoYW4tXFx1MDAzZXNobWVtKSB7XFxuK1xcdFxcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChwY2NfY2hhbik7XFxuK1xcdFxcdGtmcmVlKHNzcGNjKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfaWRcXHRcXHQ9IHBjY19pZDtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19jaGFuXFx0XFx0PSBwY2NfY2hhbjtcXG4rXFx0c3NwY2MtXFx1MDAzZWNvbW1fYWRkclxcdD0gcGNjX2NoYW4tXFx1MDAzZXNobWVtO1xcbitcXHRpZiAocGNjX2NoYW4tXFx1MDAzZWxhdGVuY3kpXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLVxcdTAwM2VsYXRlbmN5O1xcbitcXHRlbHNlXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcnR0XFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcGFyXFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWF4X2FjY2Vzc19yYXRlO1xcbitcXHRzc3BjYy1cXHUwMDNlbWJveF9jbGllbnQua25vd3NfdHhkb25lXFx0PSB0cnVlO1xcbitcXG4rXFx0a3JlZl9pbml0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZik7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2FkZChcXHUwMDI2c3NwY2MtXFx1MDAzZWVsZW0sIFxcdTAwMjZyYXMyX3NzcGNjKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNzcGNjXFx0XFx0PSBzc3BjYztcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkclxcdD0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRldlxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZzc3BjYy1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2tcXHQ9IFxcdTAwMjZzc3BjYy1cXHUwMDNlcGNjX2xvY2s7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIERFRklORV9JREEocmFzMl9pZGEpO1xcbitzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XFxuK1xcbitcXHRpZGFfZnJlZShcXHUwMDI2cmFzMl9pZGEsIGF1eGRldi1cXHUwMDNlaWQpO1xcbitcXHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cXHUwMDNlc3NwY2MpO1xcbitcXHRrZnJlZShyYXMyX2N0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcmFzMl9tZW1fY3R4ICphZGRfYXV4X2RldmljZShjaGFyICpuYW1lLCBpbnQgY2hhbm5lbCwgdTMyIHB4bV9pbnN0KVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xcbitcXHR1MzIgY29tcF9uaWQ7XFxuK1xcdGludCBpZCwgcmM7XFxuK1xcbitcXHRjb21wX25pZCA9IHB4bV90b19ub2RlKHB4bV9pbnN0KTtcXG4rXFx0aWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkge1xcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiSW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcXFxcblxcXCIsIGNoYW5uZWwsIHB4bV9pbnN0KTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOWElPKTtcXG4rXFx0fVxcbitcXG4rXFx0cmFzMl9jdHggPSBremFsbG9jKHNpemVvZigqcmFzMl9jdHgpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFyYXMyX2N0eClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7XFxuK1xcbitcXHRyYyA9IHJlZ2lzdGVyX3BjY19jaGFubmVsKHJhczJfY3R4LCBjaGFubmVsKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxcXG5cXFwiLCBjaGFubmVsLFxcbitcXHRcXHRcXHQgcHhtX2luc3QsIHJjKTtcXG4rXFx0XFx0Z290byBjdHhfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWQgPSBpZGFfYWxsb2MoXFx1MDAyNnJhczJfaWRhLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKGlkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyYyA9IGlkO1xcbitcXHRcXHRnb3RvIHBjY19mcmVlO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlYWRldi5pZFxcdFxcdD0gaWQ7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2Lm5hbWVcXHRcXHQ9IG5hbWU7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2LmRldi5yZWxlYXNlXFx0PSByYXMyX3JlbGVhc2U7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2LmRldi5wYXJlbnRcXHQ9IHJhczJfY3R4LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChcXHUwMDI2cmFzMl9jdHgtXFx1MDAzZWFkZXYpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGdvdG8gaWRhX2ZyZWU7XFxuK1xcbitcXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfYWRkKFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcXHUwMDI2cmFzMl9jdHgtXFx1MDAzZWFkZXYpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyYyk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByYXMyX2N0eDtcXG4rXFxuK2lkYV9mcmVlOlxcbitcXHRpZGFfZnJlZShcXHUwMDI2cmFzMl9pZGEsIGlkKTtcXG4rcGNjX2ZyZWU6XFxuK1xcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVxcdTAwM2Vzc3BjYyk7XFxuK2N0eF9mcmVlOlxcbitcXHRrZnJlZShyYXMyX2N0eCk7XFxuK1xcbitcXHRyZXR1cm4gRVJSX1BUUihyYyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxcbit7XFxuK1xcdGlmICghcmFzMl9jdHgpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0O1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICoqcGN0eF9saXN0O1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcXG4rXFx0dTE2IHRvdF90YmxfbGVuO1xcbitcXHR1MTYgaTtcXG4rXFxuK1xcdGlmIChyYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCBcXHUwMDNjIHNpemVvZigqcmFzMl90YWIpKSB7XFxuK1xcdFxcdHByX3dhcm4oRldfV0FSTiBcXFwiQUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgYnV0IGJyb2tlbiAodG9vIHNob3J0LCBzaXplPSV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZWhlYWRlci5sZW5ndGgpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFyYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyB8fCByYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyBcXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0dG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSArIHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTtcXG4rXFx0aWYgKHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoIFxcdTAwM2MgdG90X3RibF9sZW4pIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBjdHhfbGlzdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwY2NfZGVzY19saXN0ID0gKHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKikocmFzMl90YWIgKyAxKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzOyBpKyssIHBjY19kZXNjX2xpc3QrKykge1xcbitcXHRcXHRpZiAocGNjX2Rlc2NfbGlzdC1cXHUwMDNlZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRyYXMyX2N0eCA9IGFkZF9hdXhfZGV2aWNlKFJBUzJfTUVNX0RFVl9JRF9OQU1FLCBwY2NfZGVzY19saXN0LVxcdTAwM2VjaGFubmVsX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgIHBjY19kZXNjX2xpc3QtXFx1MDAzZWluc3RhbmNlKTtcXG4rXFx0XFx0LyogSW52YWxpZCBOVU1BIG5vZGUsIGNvbnRpbnVlIHBhcnNpbmcgbmV4dCBub2RlICovXFxuK1xcdFxcdGlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKElTX0VSUihyYXMyX2N0eCkpIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXFxcXG5cXFwiLCBQVFJfRVJSKHJhczJfY3R4KSk7XFxuK1xcdFxcdFxcdGZvciAoOyBpIFxcdTAwM2UgMDsgaS0tKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxcbitcXHRcXHRcXHRcXHRcXHRyZW1vdmVfYXV4X2RldmljZShwY3R4X2xpc3RbaSAtIDFdKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRrZnJlZShwY3R4X2xpc3QpO1xcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyYXMyX2N0eCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XFxuK1xcdH1cXG4rXFx0a2ZyZWUocGN0eF9saXN0KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cXG4rICpcXG4rICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuXFxuKyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxcbisgKiBtZW1vcnkgZmVhdHVyZS5cXG4rICpcXG4rICogUmV0dXJuczogbm9uZS5cXG4rICovXFxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7XFxuK1xcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4rXFxuK1xcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXFx1MDAyNnJhczJfdGFiKTtcXG4rXFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gZ2V0IHRhYmxlLCAlc1xcXFxuXFxcIiwgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3NjcnViLmMgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuY1xcbisrKyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuQEAgLTE0LDYgKzE0LDcgQEAgZW51bSBlZGFjX3NjcnViX2F0dHJpYnV0ZXMge1xcbiBcXHRTQ1JVQl9BRERSRVNTLFxcbiBcXHRTQ1JVQl9TSVpFLFxcbiBcXHRTQ1JVQl9FTkFCTEVfQkFDS0dST1VORCxcXG4rXFx0U0NSVUJfRU5BQkxFX0RFTUFORCxcXG4gXFx0U0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OLFxcbiBcXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXFxuIFxcdFNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTixcXG5AQCAtNTUsNiArNTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcXHRcXHRcXHRcXFxcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcXFwiMHglbGx4XFxcXG5cXFwiKVxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhzaXplLCByZWFkX3NpemUsIHU2NCwgXFxcIjB4JWxseFxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCBcXFwiJXVcXFxcblxcXCIpXFxuK0VEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9kZW1hbmQsIGdldF9lbmFibGVkX29kLCBib29sLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGdldF9jeWNsZV9kdXJhdGlvbiwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuQEAgLTg0LDYgKzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFxcdFxcdFxcdFxcXFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KVxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbitFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2RlbWFuZCwgc2V0X2VuYWJsZWRfb2QsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcXG4gXFxuIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpXFxuQEAgLTExOSw2ICsxMjIsMTQgQEAgc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnRcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIDA0NDQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDpcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X2VuYWJsZWRfb2QpIHtcXG4rXFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlc2V0X2VuYWJsZWRfb2QpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBhLVxcdTAwM2Vtb2RlO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdHJldHVybiAwNDQ0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjpcXG4gXFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X21pbl9jeWNsZSlcXG4gXFx0XFx0XFx0cmV0dXJuIGEtXFx1MDAzZW1vZGU7XFxuQEAgLTE2NCw2ICsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcXG4gXFx0XFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxcbitcXHRcXHRbU0NSVUJfRU5BQkxFX0RFTUFORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2RlbWFuZCwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtaW5fY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX01BWF9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWF4X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXFxuIFxcdFxcdFtTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JXKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xcbmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xcbkBAIC00Niw0ICs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE1cXG4gXFx0ICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvblxcbiBcXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxcbiBcXG4rY29uZmlnIE1FTV9BQ1BJX1JBUzJcXG4rXFx0dHJpc3RhdGUgXFxcIk1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXFxcIlxcbitcXHRkZXBlbmRzIG9uIEFDUElfUkFTMlxcbitcXHRkZXBlbmRzIG9uIEVEQUNcXG4rXFx0ZGVwZW5kcyBvbiBFREFDX1NDUlVCXFxuK1xcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xcbitcXHRoZWxwXFxuK1xcdCAgVGhlIGRyaXZlciBiaW5kcyB0byB0aGUgYXV4aWxpYXJ5IGRldmljZSBhZGRlZCBieSB0aGUgQUNQSSBSQVMyXFxuK1xcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXFxuK1xcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXFxuK1xcdCAgY29udHJvbCBvZiB0aGUgSFctYmFzZWQgbWVtb3J5IHNjcnViYmVyIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXJcXG4rXFx0ICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS5cXG4rXFxuIGVuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL01ha2VmaWxlIGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcXG5pbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbkBAIC0yLDYgKzIsNyBAQFxcbiBvYmotJChDT05GSUdfUkFTKVxcdCs9IHJhcy5vXFxuIG9iai0kKENPTkZJR19ERUJVR19GUylcXHQrPSBkZWJ1Z2ZzLm9cXG4gb2JqLSQoQ09ORklHX1JBU19DRUMpXFx0Kz0gY2VjLm9cXG4rb2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpXFx0Kz0gYWNwaV9yYXMyLm9cXG4gXFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcXHQrPSBhbWQvZm1wbS5vXFxuIG9iai15XFx0XFx0XFx0Kz0gYW1kL2F0bC9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJhN2RlMjI2ZWM4NTkyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXFxuQEAgLTAsMCArMSw1ODkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXFxuKyAqXFxuKyAqL1xcbitcXG4rI3VuZGVmIHByX2ZtdFxcbisjZGVmaW5lIHByX2ZtdChmbXQpXFx0XFxcIkFDUEkgUkFTMiBNRU1PUlk6IFxcXCIgZm10XFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lZGFjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvcmFzMi5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKVxcbisjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXFxuK1xcbisjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDFcXG4rI2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXFxuKyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzXFxuK1xcbisvKlxcbisgKiBSQVMyIHBhdHJvbCBzY3J1YlxcbisgKi9cXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXFxuKyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKVxcbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMClcXG4rI2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpXFxuKyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApXFxuK1xcbisjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4XFxuKyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMFxcbitcXG4rc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcGF0cm9sX3NjcnViX3BhcmFtIHBhcmFtcztcXG4rfTtcXG4rXFxuKyNkZWZpbmUgVE9fQUNQSV9SQVMyX1BTX1NITUVNKF9hZGRyKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pXFxuK1xcbitzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHI7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0aW93cml0ZTgoMCwgXFx1MDAyNmNvbW1vbi1cXHUwMDNlc2V0X2NhcHNbMF0pO1xcbitcXG4rXFx0cmV0dXJuIGlvcmVhZDgoXFx1MDAyNmNvbW1vbi1cXHUwMDNlZmVhdHVyZXNbMF0pIFxcdTAwMjYgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XFxuK1xcdFxcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyKTtcXG4rXFx0dTMyIHNjcnViX3BhcmFtc19vdXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fc2l6ZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIocmFzMl9jdHgtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0c2NydWJfcGFyYW1zX291dCA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19vdXQpO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VtYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2ViYXNlID0gMDtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgIChpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5mbGFncykgXFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSB0cnVlO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlYmFzZSA9IGlvcmVhZDY0KFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzaXplID0gaW9yZWFkNjQoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzFdKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXFxuK3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4rXFx0XFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIpIHtcXG4rXFx0XFx0KnJ1bm5pbmcgPSBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFxcdTAwMjZwc19zbS1cXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcXG4rXFx0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fYmFzZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9zaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIocmFzMl9jdHgtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0KnJ1bm5pbmcgPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5mbGFncykgXFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORztcXG4rXFx0aWYgKCEoKnJ1bm5pbmcpKVxcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICopcDtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcXG4rXFx0XFx0aWYgKCFyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoKSBmYWlscyBoZXJlLCByZS1lbmFibGluZyBiYWNrZ3JvdW5kXFxuK1xcdFxcdCAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSxcXG4rXFx0XFx0ICogdGhlIGFkbWluIG9yIGZpcm13YXJlIG1heSBuZWVkIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcbitcXHRcXHQgKiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG11dGV4X2xvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0XFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghcnVubmluZykge1xcbitcXHRcXHRcXHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXFx1MDAzZWRldiwgcmFzMl9jdHgsIHRydWUpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRkZXZfZXJyKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gZW5hYmxlIGJhY2tncm91bmQgc2NydWIgcmV0PSVkXFxcXG5cXFwiLCByZXQpO1xcbitcXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0XFx0bXNsZWVwKDEwMDApO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQqbWluID0gcmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1heClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdCptYXggPSByYXMyX2N0eC1cXHUwMDNlbWF4X3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpzY3J1Yl9jeWNsZV9zZWNzKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0KnNjcnViX2N5Y2xlX3NlY3MgPSByYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzICogUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKVxcbit7XFxuK1xcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRpZiAoc2NydWJfY3ljbGVfaHJzIFxcdTAwM2MgcmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSB8fFxcbitcXHQgICAgc2NydWJfY3ljbGVfaHJzIFxcdTAwM2UgcmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLlxcbitcXHQgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuXFxuK1xcdCAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqYmFzZSA9IHJhczJfY3R4LVxcdTAwM2ViYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YilcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KnNpemUgPSByYXMyX2N0eC1cXHUwMDNlc2l6ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSBiYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0KmVuYWJsZWQgPSByYXMyX2N0eC1cXHUwMDNlYmdfc2NydWI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX2luO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbitcXHRpZiAoZW5hYmxlKSB7XFxuK1xcdFxcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIgfHwgcnVubmluZylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdFxcdGlvd3JpdGU2NCgwLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XFxuK1xcdFxcdGlvd3JpdGU2NCgwLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdFxcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdFxcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcXG4rXFx0XFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XFxuK1xcdFxcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdFxcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghcmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXG4rXFx0XFx0aW93cml0ZTE2KFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xcbitcXHR9XFxuK1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gXFx1MDAyNj0gflJBUzJfUFNfRU5fQkFDS0dST1VORDtcXG4rXFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpO1xcbitcXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvICVzIGJhY2tncm91bmQgc2NydWJiaW5nXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YiA9IGVuYWJsZTtcXG4rXFx0aWYgKGVuYWJsZSkge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0LyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovXFxuK1xcdFxcdHJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGVuYWJsZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KmVuYWJsZWQgPSBydW5uaW5nO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcik7XFxuK1xcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghZW5hYmxlKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHQvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKSB7XFxuK1xcdFxcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcXG4rXFx0ICogd2l0aCAoYmFzZSArIHNpemUpIFxcdTAwM2UgKG1lbV9iYXNlICsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXFxuK1xcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cXG4rXFx0ICovXFxuK1xcdGlmICghcmFzMl9jdHgtXFx1MDAzZXNpemUgfHwgcmFzMl9jdHgtXFx1MDAzZWJhc2UgXFx1MDAzYyByYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0X19mdW5jX18sIHJhczJfY3R4LVxcdTAwM2ViYXNlLCByYXMyX2N0eC1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHJldCA9IC1FUkFOR0U7XFxuK1xcdFxcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xcbitcXHR9XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcXG4rXFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xcbitcXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZWJhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VzaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHN0YXJ0IGRlbWFuZCBzY3J1YmJpbmcgcmMoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSAwO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBlbmFibGVfYmdfc2NydWI7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcXG4rXFxuK1xcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiBcXHUwMDI2XFx1MDAyNiByYXMyX2N0eC1cXHUwMDNlZHJpdmVyX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiAhcmFzMl9jdHgtXFx1MDAzZXRocmVhZCkge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4ocmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCwgcmFzMl9jdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwicmFzMl9zY3J1Yl9uaWQlZFxcXCIsIHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHJhczJfY3R4LVxcdTAwM2V0aHJlYWQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IFBUUl9FUlIocmFzMl9jdHgtXFx1MDAzZXRocmVhZCk7XFxuK1xcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBJZiBrdGhyZWFkX3J1bigpIGZhaWxzIGFuZCB0aGUgZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBydW5uaW5nLFxcbitcXHRcXHRcXHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyBhZG1pbi9maXJtd2FyZSBtYXkgbmVlZFxcbitcXHRcXHRcXHQgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK1xcbitlbmFibGVfYmdfc2NydWI6XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcXG4rXFx0LnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLFxcbitcXHQucmVhZF9zaXplID0gcmFzMl9od19zY3J1Yl9yZWFkX3NpemUsXFxuK1xcdC53cml0ZV9hZGRyID0gcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyLFxcbitcXHQud3JpdGVfc2l6ZSA9IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSxcXG4rXFx0LmdldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyxcXG4rXFx0LnNldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyxcXG4rXFx0LmdldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZCxcXG4rXFx0LnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCxcXG4rXFx0LmdldF9taW5fY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlLFxcbitcXHQuZ2V0X21heF9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUsXFxuK1xcdC5nZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQsXFxuK1xcdC5zZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgcmFzMl9tZW1fZHJ2X3JlbW92ZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XFxuK1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtdXRleF9sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2Vkcml2ZXJfYWN0aXZlID0gZmFsc2U7XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNldGhyZWFkKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRcXHRrdGhyZWFkX3N0b3AocmFzMl9jdHgtXFx1MDAzZXRocmVhZCk7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xcbitcXHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XFxuK1xcdGNoYXIgc2NydWJfbmFtZVtSQVMyX1NDUlVCX05BTUVfTEVOXTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFyYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHJhczJfY3R4KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmV0cmlldmUgdGhlIFBBIHJhbmdlIG9mIHRoZSBOVU1BIGRvbWFpbiBhbmQgdXNlIGl0IGFzIHRoZVxcbitcXHQgKiAnUmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UnLCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kXFxuK1xcdCAqIEdFVF9QQVRST0xfUEFSQU1FVEVSUyB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGFsbCBhZGRyZXNzZXNcXG4rXFx0ICogaW4gdGhlIE5VTUEgZG9tYWluIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSXFxuK1xcdCAqIHRvIHN0YXJ0IHRoZSBkZW1hbmQgc2NydWJiaW5nLlxcbitcXHQgKi9cXG4rXFx0c3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtXFx1MDAzZXN5c19jb21wX25pZCk7XFxuK1xcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRpZiAoIW51bV9zcGFubmVkX3BhZ2VzKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXFxcXG5cXFwiLCByYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0fVxcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlID0gX19wZm5fdG9fcGh5cyhzdGFydF9wZm4pO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWVtX3NpemUgPSAodTY0KW51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIHNldF9zY3J1Yl9jeWNsZSAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyBcXHUwMDNlIHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUpXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xcbitcXG4rXFx0c3ByaW50ZihzY3J1Yl9uYW1lLCBcXFwiYWNwaV9yYXNfbWVtJWRcXFwiLCBhdXhkZXYtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHJhc19mZWF0dXJlcy5mdF90eXBlXFx0PSBSQVNfRkVBVF9TQ1JVQjtcXG4rXFx0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXFx0PSAwO1xcbitcXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXFx0PSBcXHUwMDI2cmFzMl9zY3J1Yl9vcHM7XFxuK1xcdHJhc19mZWF0dXJlcy5jdHhcXHQ9IHJhczJfY3R4O1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFxcdTAwMjZhdXhkZXYtXFx1MDAzZWRldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgXFx1MDAyNnJhc19mZWF0dXJlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcXG4rXFx0eyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FIFxcXCIuXFxcIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcXG4rXFx0eyB9XFxuK307XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGF1eGlsaWFyeSwgcmFzMl9tZW1fZGV2X2lkX3RhYmxlKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XFxuK1xcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXFxuK1xcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcXG4rXFx0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXFxuK1xcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcXG4rfTtcXG4rbW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9JTVBPUlRfTlMoXFxcIkFDUElfUkFTMlxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2FjcGkvcmFzMi5oXFxuQEAgLTAsMCArMSw4NiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfQUNQSV9SQVMyX0hcXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hY3BpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgZGV2aWNlO1xcbitcXG4rLypcXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XFxuKyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxcbisgKi9cXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXFxuK1xcbisjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FIFxcXCJyYXMyXFxcIlxcbisjZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FIFxcXCJhY3BpX3JhczJfbWVtXFxcIlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlc1xcbisgKiBAYWRldjpcXHRcXHRBdXhpbGlhcnkgZGV2aWNlIG9iamVjdFxcbisgKiBAY29tbV9hZGRyOlxcdFxcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cXG4rICogQGRldjpcXHRcXHRQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQ1xcbisgKiBAc3NwY2M6XFx0XFx0UG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cXG4rICogQHBjY19sb2NrOlxcdFxcdFBvaW50ZXIgdG8gUENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXFxuKyAqXFx0XFx0XFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogQHN5c19jb21wX25pZDpcXHROb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlXFxuKyAqXFx0XFx0XFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXFxuKyAqXFx0XFx0XFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxcbisgKlxcdFxcdFxcdEZpZWxkOiBJbnN0YW5jZVxcbisgKiBAbWVtX2Jhc2U6XFx0XFx0QmFzZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXFxuKyAqXFx0XFx0XFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXFxuKyAqIEBtZW1fc2l6ZVxcdFxcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxcbisgKlxcdFxcdFxcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxcbisgKiBAYmFzZTpcXHRcXHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcXG4rICogQHNpemU6XFx0XFx0U2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxcbisgKiBAc2NydWJfY3ljbGVfaHJzOlxcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xcbisgKiBAc2V0X3NjcnViX2N5Y2xlOlxcdFNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzXFxuKyAqIEBtaW5fc2NydWJfY3ljbGU6XFx0TWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZFxcbisgKiBAbWF4X3NjcnViX2N5Y2xlOlxcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcXG4rICogQG9kX3NjcnViOlxcdFxcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxcbisgKiBAYmdfc2NydWI6XFx0XFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xcbisgKiBAcmVlbmFibGVfYmdfc2NydWI6XFx0RmxhZyBpbmRpY2F0ZXMgcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZyBhZnRlciBkZW1hbmRcXG4rICpcXHRcXHRcXHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcXG4rICogQHRocmVhZDpcXHRcXHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXFxuKyAqIEBkcml2ZXJfYWN0aXZlOlxcdEZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZFxcbisgKi9cXG4rc3RydWN0IHJhczJfbWVtX2N0eCB7XFxuK1xcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXFx0XFx0YWRldjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXFx0KmNvbW1fYWRkcjtcXG4rXFx0c3RydWN0IGRldmljZVxcdFxcdFxcdCpkZXY7XFxuK1xcdHZvaWRcXHRcXHRcXHRcXHQqc3NwY2M7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdCpwY2NfbG9jaztcXG4rXFx0dTMyXFx0XFx0XFx0XFx0c3lzX2NvbXBfbmlkO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRtZW1fYmFzZTtcXG4rXFx0dTY0XFx0XFx0XFx0XFx0bWVtX3NpemU7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdGJhc2U7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdHNpemU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0c2NydWJfY3ljbGVfaHJzO1xcbitcXHR1OFxcdFxcdFxcdFxcdHNldF9zY3J1Yl9jeWNsZTtcXG4rXFx0dThcXHRcXHRcXHRcXHRtaW5fc2NydWJfY3ljbGU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0bWF4X3NjcnViX2N5Y2xlO1xcbitcXHRib29sXFx0XFx0XFx0XFx0b2Rfc2NydWI7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRiZ19zY3J1YjtcXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdHJlZW5hYmxlX2JnX3NjcnViO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcXHRcXHQqdGhyZWFkO1xcbitcXHRib29sXFx0XFx0XFx0XFx0ZHJpdmVyX2FjdGl2ZTtcXG4rfTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXFxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpO1xcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9XFxuKyNlbmRpZlxcbitcXG4rI2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcXG5AQCAtNjg0LDYgKzY4NCw4IEBAIGVudW0gZWRhY19kZXZfZmVhdCB7XFxuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXFxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cXG4gICogQHNldF9lbmFibGVkX2JnOiBzdGFydCBvciBzdG9wIGEgYmctc2NydWIuXFxuKyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLlxcbisgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXFxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cXG4gICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbkBAIC02OTYsNiArNjk4LDggQEAgc3RydWN0IGVkYWNfc2NydWJfb3BzIHtcXG4gXFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xcbiBcXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcXG4gXFx0aW50ICgqc2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4rXFx0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XFxuK1xcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XFxuIFxcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XFxuIFxcdGludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7XFxuIFxcdGludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDAwOjM2OjI0LjE0NDY1MTc1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg1MDc0NTQwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gVGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiAoYWNwaV9yYXMyX2luaXQpIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QgKGZyb20gYWNwaV9pbml0KSBhbmQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFDUEkgUkFTMiB0YWJsZS4gU2luY2UgUUVNVS9HQ0UgZG8gbm90IHByb3ZpZGUgdGhpcyBzcGVjaWZpYyBBQ1BJIHRhYmxlIGJ5IGRlZmF1bHQsIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyB0YWJsZSBsb2FkaW5nIChlLmcuLCB2aWEgY29uZmlnZnMpLCB0aGUgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMzFjZTA1ZDIxZWFkMGZmZDI3YjNjOGRjYmZkNTEzZGViMGFjOTRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAwMDozNjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuaW5kZXggYWI2MDE0NzQzZGE1NjguLjJiODc0ZTAzMzYyMzM0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbkBAIC0yMCwxMSArMjAsNyBAQCBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuIENvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcbi1cdFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxuLVx0XHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cbi1cbi1cdFx0VGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZFxuLVx0XHRvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS5cbitcdFx0Zm9yIGRlbWFuZCBzY3J1YmJpbmcuXG4gXG4gV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9zaXplXG4gRGF0ZTpcdFx0TWFyY2ggMjAyNVxuQEAgLTM0LDYgKzMwLDE0IEBAIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4gXHRcdChvbi1kZW1hbmQgc2NydWJiaW5nKS5cbiBcbitXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9kZW1hbmRcbitEYXRlOlx0XHRKYW4gMjAyNlxuK0tlcm5lbFZlcnNpb246XHQ2LjE5XG4rQ29udGFjdDpcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXG4rRGVzY3JpcHRpb246XG4rXHRcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcbitcdFx0c3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC5cbitcbiBXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9iYWNrZ3JvdW5kXG4gRGF0ZTpcdFx0TWFyY2ggMjAyNVxuIEtlcm5lbFZlcnNpb246XHQ2LjE1XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdCBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbkBAIC0zNDAsMyArMzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXG4gXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxuK1xuKzMuIEFDUEkgUkFTMiBIYXJkd2FyZS1iYXNlZCBNZW1vcnkgU2NydWJiaW5nXG4rXG4rMy4xLiBEZW1hbmQgc2NydWJiaW5nIGZvciBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uXG4rXG4rMy4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXG4rXG4rMFxuK1xuKzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cbitcbitBcHBsaWNhYmxlIHRvIGJvdGggZGVtYW5kIGFuZCBiYWNrZ3JvdW5kIHNjcnViYmluZy4gVGhlIHVuaXQgb2YgdGhlXG4rc2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuK1xuKzM2MDAwXG4rXG4rMy4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXG4rVGhlIHVuaXQgb2YgdGhlIHNjcnViIGN5Y2xlIHJhbmdlIGlzIHNlY29uZHMuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxuK1xuKzM2MDBcbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWF4X2N5Y2xlX2R1cmF0aW9uXG4rXG4rODY0MDBcbitcbiszLjEuNC4gUHJvZ3JhbSBzY3J1YmJpbmcgZm9yIHRoZSBtZW1vcnkgcmVnaW9uIGluIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBldmVyeVxuKzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxuK1xuKyMgZWNobyA0MzIwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbitcbiszLjEuNS4gU2V0IGFkZHJlc3MgcmFuZ2UuXG4rXG4rU2V0ICdhZGRyJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cbitcbisjIGVjaG8gMHg4MDAwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHJcbitcbitTZXQgJ3NpemUnIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxuK1xuKyMgZWNobyAweDIwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL3NpemVcbitcbiszLjEuNi4gU3RhcnQgJ2RlbWFuZCBzY3J1YmJpbmcnLlxuK1xuK1doZW4gYSBkZW1hbmQgc2NydWIgaXMgc3RhcnRlZCwgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzXG4rd2lsbCBiZSBzdG9wcGVkIGFuZCB0aGVuIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcgd2hlbiB0aGVcbitkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cbitcbisjIGVjaG8gMSBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcbitcbiszLjIuIEJhY2tncm91bmQgc2NydWJiaW5nIHRoZSBlbnRpcmUgbWVtb3J5XG4rXG4rMy4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kXG4rXG4rMFxuK1xuKzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcbitzZWNvbmRzIChxdWFydGVyIG9mIGEgZGF5KS5cbitcbisjIGVjaG8gMjE2MDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4rXG4rMy4yLjMuIFN0YXJ0ICdiYWNrZ3JvdW5kIHNjcnViYmluZycuXG4rXG4rIyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuQEAgLTI5NCw2ICsyOTQsMTcgQEAgY29uZmlnIEFDUElfQ1BQQ19MSUJcbiBcdCAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsXG4gXHQgIGxlYXZlIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxuIFxuK2NvbmZpZyBBQ1BJX1JBUzJcbitcdGJvb2wgXCJBQ1BJIFJBUzIgZHJpdmVyXCJcbitcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4rXHRkZXBlbmRzIG9uIE1BSUxCT1hcbitcdGRlcGVuZHMgb24gUENDXG4rXHRoZWxwXG4rXHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXG4rXHQgIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgc3VjaCBhcyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxuK1xuIGNvbmZpZyBBQ1BJX1BST0NFU1NPUlxuIFx0dHJpc3RhdGUgXCJQcm9jZXNzb3JcIlxuIFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlXG5pbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuQEAgLTEwNSw2ICsxMDUsNyBAQCBvYmotJChDT05GSUdfQUNQSV9FQ19ERUJVR0ZTKVx0Kz0gZWNfc3lzLm9cbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVx0XHQrPSBiZ3J0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9DUFBDX0xJQilcdCs9IGNwcGNfYWNwaS5vXG4gb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSlcdCs9IHNwY3Iub1xuK29iai0kKENPTkZJR19BQ1BJX1JBUzIpXHRcdCs9IHJhczIub1xuIG9iai0kKENPTkZJR19BQ1BJX0RFQlVHR0VSX1VTRVIpICs9IGFjcGlfZGJnLm9cbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcdCs9IHBwdHQub1xuIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKVx0Kz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuY1xuaW5kZXggYTMwYTkwNGY2NTM1ZjQuLjhkNmEwYjc3M2JjNTdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jXG4rKysgYi9kcml2ZXJzL2FjcGkvYnVzLmNcbkBAIC0zMSw2ICszMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYWNwaS9hcGVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm10LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG5AQCAtMTYxMCw2ICsxNjExLDggQEAgc3RhdGljIGludCBfX2luaXQgYWNwaV9pbml0KHZvaWQpXG4gXHRhY3BpX2RlYnVnZ2VyX2luaXQoKTtcbiBcdGFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTtcbiBcdGFjcGlfdmlvdF9pbml0KCk7XG4rXHRhY3BpX3JhczJfaW5pdCgpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE5ZWNiZTdjODE5OWJiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5AQCAtMCwwICsxLDUwMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci5cbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuKyAqXG4rICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaFxuKyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxuKyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXNcbisgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS5cbisgKi9cbitcbisjdW5kZWYgcHJfZm10XG4rI2RlZmluZSBwcl9mbXQoZm10KSBcIkFDUEkgUkFTMjogXCIgZm10XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYWNwaS9wY2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4rXG4rLyoqXG4rICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbisgKiBAbWJveF9jbGllbnQ6XHRzdHJ1Y3QgbWJveF9jbGllbnQgb2JqZWN0XG4rICogQHBjY19jaGFuOlx0XHRQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuXG4rICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuKyAqIEBlbGVtOlx0XHRMaXN0IGZvciByZWdpc3RlcmVkIFJBUzIgUENDIGNoYW5uZWwgc3Vic3BhY2VzXG4rICogQHBjY19sb2NrOlx0XHRQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcbisgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4rICogQGRlYWRsaW5lX3VzOlx0UG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIHRpbWVvdXQgaW4gbWljcm9zZWNzXG4rICpcdFx0XHRmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvblxuKyAqIEBwY2NfbXBhcjpcdFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXG4rICogQHBjY19tcnR0Olx0XHRNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKSBpbiBtaWNyb3NlY3NcbisgKlx0XHRcdE9TIG11c3Qgd2FpdCBhZnRlciBjb21wbGV0aW9uIG9mIGEgUENDIGNvbW1hbmQgYmVmb3JlXG4rICpcdFx0XHRpc3N1aW5nIG5leHQgY29tbWFuZFxuKyAqIEBsYXN0X2NtZF9jbXBsX3RpbWU6IENvbXBsZXRpb24gdGltZSBvZiBsYXN0IFBDQyBjb21tYW5kXG4rICogQGxhc3RfbXBhcl9yZXNldDpcdFRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0XG4rICogQG1wYXJfY291bnQ6XHRcdE1QQVIgY291bnRcbisgKiBAcGNjX2lkOlx0XHRJZGVudGlmaWVyIG9mIHRoZSBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbFxuKyAqIEBsYXN0X2NtZDpcdFx0TGFzdCBQQ0MgY29tbWFuZFxuKyAqIEBrcmVmOlx0XHRrcmVmIG9iamVjdFxuKyAqL1xuK3N0cnVjdCByYXMyX3NzcGNjIHtcbitcdHN0cnVjdCBtYm94X2NsaWVudFx0XHRtYm94X2NsaWVudDtcbitcdHN0cnVjdCBwY2NfbWJveF9jaGFuXHRcdCpwY2NfY2hhbjtcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbVx0KmNvbW1fYWRkcjtcbitcdHN0cnVjdCBsaXN0X2hlYWRcdFx0ZWxlbTtcbitcdHN0cnVjdCBtdXRleFx0XHRcdHBjY19sb2NrO1xuK1x0dTY0XHRcdFx0XHRkZWFkbGluZV91cztcbitcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcGFyO1xuK1x0dW5zaWduZWQgaW50XHRcdFx0cGNjX21ydHQ7XG4rXHRrdGltZV90XHRcdFx0XHRsYXN0X2NtZF9jbXBsX3RpbWU7XG4rXHRrdGltZV90XHRcdFx0XHRsYXN0X21wYXJfcmVzZXQ7XG4rXHRpbnRcdFx0XHRcdG1wYXJfY291bnQ7XG4rXHRpbnRcdFx0XHRcdHBjY19pZDtcbitcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4rXHRzdHJ1Y3Qga3JlZlx0XHRcdGtyZWY7XG4rfTtcbitcbisvKlxuKyAqIEFyYml0cmFyeSByZXRyaWVzIGZvciBQQ0MgY29tbWFuZHMgYmVjYXVzZSB0aGUgcmVtb3RlIHByb2Nlc3NvciBjb3VsZCBiZVxuKyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbisgKiBwcm9jZXNzb3JzIHJ1biBwYWluZnVsbHkgc2xvdy5cbisgKi9cbisjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbisjZGVmaW5lIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWSAxMDAwXG4rI2RlZmluZSBQQ0NfTUlOX1BPTExfVVNFQ1MgM1xuK1xuKyNkZWZpbmUgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUyAxMDBcbisjZGVmaW5lIFJBUzJfRkVBVF9UWVBFX01FTU9SWSAweDAwXG4rXG4rLyogU3RhdGljIHZhcmlhYmxlcyBmb3IgdGhlIFJBUzIgUENDIHN1YnNwYWNlcyAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgocmFzMl9wY2NfbGlzdF9sb2NrKTtcbitzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuK1xuK3N0YXRpYyBpbnQgY2hlY2tfcGNjX2NoYW4oc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcdHUzMiBjYXBfc3RhdHVzO1xuK1x0dTE2IHN0YXR1cztcbitcdGludCByYztcbitcbitcdC8qXG4rXHQgKiBBcyBwZXIgQUNQSSBzcGVjLCB0aGUgUENDIHNwYWNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlXG4rXHQgKiBwbGF0Zm9ybSBhbmQgc2hvdWxkIGhhdmUgc2V0IHRoZSBjb21tYW5kIGNvbXBsZXRpb24gYml0IHdoZW5cbitcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuK1x0ICpcbitcdCAqIFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciBldmVyeSBQQ0NfTUlOX1BPTExfVVNFQ1MgZm9yIG1heGltdW0gb2ZcbitcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbitcdCAqIGJpdCBpcyBzZXQuXG4rXHQgKi9cbitcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbitcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSxcbitcdFx0XHRcdFx0UENDX01JTl9QT0xMX1VTRUNTLCBzc3BjYy1cdTAwM2VkZWFkbGluZV91cyk7XG4rXHRpZiAocmMpIHtcbitcdFx0cHJfd2FybihcIlBDQyBJRDogMHgleDogUENDIGNoZWNrIGNoYW5uZWwgdGltZW91dCBmb3IgbGFzdCBjb21tYW5kOiAweCV4IHJjPSVkXFxuXCIsXG4rXHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCwgcmMpO1xuK1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4rXHRcdHByX3dhcm4oXCJQQ0MgSUQ6IDB4JXg6IEVycm9yIGluIGV4ZWN1dGluZyBsYXN0IGNvbW1hbmQ6IDB4JXhcXG5cIixcbitcdFx0XHRzc3BjYy1cdTAwM2VwY2NfaWQsIHNzcGNjLVx1MDAzZWxhc3RfY21kKTtcbitcdFx0c3RhdHVzIFx1MDAyNj0gflBDQ19TVEFUVVNfRVJST1I7XG4rXHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdC8qIEVuc3VyZSBnZXQgdXBkYXRlZCBQQ0Mgc3RhdHVzICovXG4rXHRybWIoKTtcbitcdGNhcF9zdGF0dXMgPSBpb3JlYWQzMihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4rXHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcbitcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbitcdGNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6XG4rXHRcdHJjID0gLUVQRVJNO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUNQSV9SQVMyX0JVU1k6XG4rXHRcdHJjID0gLUVCVVNZO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUNQSV9SQVMyX0ZBSUxFRDpcbitcdGNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6XG4rXHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4rXHRcdHJjID0gLUVJTlZBTDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyYyA9IDA7XG4rXHR9XG4rXG4rXHRpb3dyaXRlMzIoMHgwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHJhczJfc2VuZF9wY2NfY21kKCkgLSBTZW5kIFJBUzIgY29tbWFuZCB2aWEgUENDIGNoYW5uZWxcbisgKiBAcmFzMl9jdHg6XHRwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlXG4rICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4rICpcbisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIG90aGVyd2lzZVxuKyAqL1xuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4rXHRzdHJ1Y3QgbWJveF9jaGFuICpwY2NfY2hhbm5lbDtcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbitcdHM2NCB0aW1lX2RlbHRhO1xuK1x0dTE2IHZhbDtcbitcdGludCByYztcbitcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRzc3BjYyA9IHJhczJfY3R4LVx1MDAzZXNzcGNjO1xuK1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcbitcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuK1xuK1x0LypcbitcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4rXHQgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mXG4rXHQgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLlxuK1x0ICovXG4rXHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQpIHtcbitcdFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUpO1xuK1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4rXHRcdFx0ZnNsZWVwKHNzcGNjLVx1MDAzZXBjY19tcnR0IC0gdGltZV9kZWx0YSk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXG4rXHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuK1x0ICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm9cbitcdCAqIGxpbWl0YXRpb24uXG4rXHQgKlxuK1x0ICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdFxuK1x0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXG4rXHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4rXHQgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSXG4rXHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cbitcdCAqL1xuK1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcGFyKSB7XG4rXHRcdGlmICghc3NwY2MtXHUwMDNlbXBhcl9jb3VudCkge1xuK1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbitcdFx0XHRpZiAoKHRpbWVfZGVsdGEgXHUwMDNjIDYwICogTVNFQ19QRVJfU0VDKSBcdTAwMjZcdTAwMjYgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KSB7XG4rXHRcdFx0XHRkZXZfZGJnKHJhczJfY3R4LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XCJQQ0MgY29tbWFuZCAweCV4IG5vdCBzZW50IGR1ZSB0byBNUEFSIGxpbWl0XCIsIGNtZCk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTztcbitcdFx0XHR9XG4rXHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0ID0ga3RpbWVfZ2V0KCk7XG4rXHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuK1x0XHR9XG4rXHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQtLTtcbitcdH1cbitcbitcdC8qIFdyaXRlIHRvIHRoZSBzaGFyZWQgY29tbSByZWdpb24gKi9cbitcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4rXG4rXHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cbitcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4rXG4rXHQvKiBSaW5nIGRvb3JiZWxsICovXG4rXHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuK1x0LypcbitcdCAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb25cbitcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwM2MgMCkge1xuK1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxuXCIsIGNtZCwgcmMpO1xuK1x0XHQvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi9cbitcdFx0dmFsID0gaW9yZWFkMTYoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuK1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4rXHRcdGlvd3JpdGUxNih2YWwsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSAwO1xuK1x0fVxuK1xuK1x0c3NwY2MtXHUwMDNlbGFzdF9jbWQgPSBjbWQ7XG4rXG4rXHQvKlxuK1x0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXG4rXHQgKiBjb21wbGV0aW9uIHRpbWUgb2YgYm90aCBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgcHJvcGVyIGhhbmRsaW5nXG4rXHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cbitcdCAqL1xuK1x0aWYgKGNtZCA9PSBQQ0NfQ01EX0VYRUNfUkFTMiB8fCBzc3BjYy1cdTAwM2VwY2NfbXJ0dCkge1xuK1x0XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbitcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KVxuK1x0XHRcdHNzcGNjLVx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSA9IGt0aW1lX2dldCgpO1xuK1x0fVxuK1xuK1x0aWYgKCFwY2NfY2hhbm5lbC1cdTAwM2VtYm94LVx1MDAzZXR4ZG9uZV9pcnEpXG4rXHRcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcImFjcGlfcmFzMlwiKTtcbitcbitzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXG4re1xuK1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cbitcdFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuK1x0bGlzdF9kZWwoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSk7XG4rXHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuK1x0a2ZyZWUoc3NwY2MpO1xuK31cbitcbitzdGF0aWMgdm9pZCByYXMyX3NzcGNjX3B1dChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4re1xuK1x0a3JlZl9wdXQoXHUwMDI2c3NwY2MtXHUwMDNla3JlZiwgIFx1MDAyNnJhczJfbGlzdF9wY2NfcmVsZWFzZSk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcmFzMl9zc3BjYyAqcmFzMl9zc3BjY19nZXQoaW50IHBjY19pZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3NwY2MsIFx1MDAyNnJhczJfc3NwY2MsIGVsZW0pIHtcbitcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2c3NwY2MtXHUwMDNla3JlZikpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdHJldHVybiBzc3BjYztcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuK3tcbitcdHN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfY2hhbjtcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbitcbitcdGlmIChwY2NfaWQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c3NwY2MgPSByYXMyX3NzcGNjX2dldChwY2NfaWQpO1xuK1x0aWYgKHNzcGNjKSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4rXHRcdHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkclx0PSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4rXHRcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9XG4rXHRcdFx0c3NwY2MtXHUwMDNlcGNjX2NoYW4tXHUwMDNlbWNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXY7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXBjY19sb2NrXHQ9IFx1MDAyNnNzcGNjLVx1MDAzZXBjY19sb2NrO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXNzcGNjKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNnNzcGNjLVx1MDAzZW1ib3hfY2xpZW50LCBwY2NfaWQpO1xuK1x0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcbitcdFx0a2ZyZWUoc3NwY2MpO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XG4rXHR9XG4rXG4rXHRpZiAoIXBjY19jaGFuLVx1MDAzZXNobWVtKSB7XG4rXHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChwY2NfY2hhbik7XG4rXHRcdGtmcmVlKHNzcGNjKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRzc3BjYy1cdTAwM2VwY2NfaWRcdFx0PSBwY2NfaWQ7XG4rXHRzc3BjYy1cdTAwM2VwY2NfY2hhblx0XHQ9IHBjY19jaGFuO1xuK1x0c3NwY2MtXHUwMDNlY29tbV9hZGRyXHQ9IHBjY19jaGFuLVx1MDAzZXNobWVtO1xuK1x0aWYgKHBjY19jaGFuLVx1MDAzZWxhdGVuY3kpXG4rXHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogcGNjX2NoYW4tXHUwMDNlbGF0ZW5jeTtcbitcdGVsc2VcbitcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1k7XG4rXHRzc3BjYy1cdTAwM2VwY2NfbXJ0dFx0XHQ9IHBjY19jaGFuLVx1MDAzZW1pbl90dXJuYXJvdW5kX3RpbWU7XG4rXHRzc3BjYy1cdTAwM2VwY2NfbXBhclx0XHQ9IHBjY19jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcbitcdHNzcGNjLVx1MDAzZW1ib3hfY2xpZW50Lmtub3dzX3R4ZG9uZVx0PSB0cnVlO1xuK1xuK1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuK1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcbitcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4rXHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0cmFzMl9jdHgtXHUwMDNlZGV2XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXY7XG4rXG4rXHRtdXRleF9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZXBjY19sb2NrKTtcbitcdHJhczJfY3R4LVx1MDAzZXBjY19sb2NrXHQ9IFx1MDAyNnNzcGNjLVx1MDAzZXBjY19sb2NrO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBERUZJTkVfSURBKHJhczJfaWRhKTtcbitzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuK1xuK1x0aWRhX2ZyZWUoXHUwMDI2cmFzMl9pZGEsIGF1eGRldi1cdTAwM2VpZCk7XG4rXHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cdTAwM2Vzc3BjYyk7XG4rXHRrZnJlZShyYXMyX2N0eCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcmFzMl9tZW1fY3R4ICphZGRfYXV4X2RldmljZShjaGFyICpuYW1lLCBpbnQgY2hhbm5lbCwgdTMyIHB4bV9pbnN0KVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xuK1x0dTMyIGNvbXBfbmlkO1xuK1x0aW50IGlkLCByYztcbitcbitcdGNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpO1xuK1x0aWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkge1xuK1x0XHRwcl9kZWJ1ZyhcIkludmFsaWQgTlVNQSBub2RlLCBjaGFubmVsPSVkIHB4bV9pbnN0PSVkXFxuXCIsIGNoYW5uZWwsIHB4bV9pbnN0KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOWElPKTtcbitcdH1cbitcbitcdHJhczJfY3R4ID0ga3phbGxvYyhzaXplb2YoKnJhczJfY3R4KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXJhczJfY3R4KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCA9IGNvbXBfbmlkO1xuK1xuK1x0cmMgPSByZWdpc3Rlcl9wY2NfY2hhbm5lbChyYXMyX2N0eCwgY2hhbm5lbCk7XG4rXHRpZiAocmMgXHUwMDNjIDApIHtcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUENDIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWQgcmM9JWRcXG5cIiwgY2hhbm5lbCxcbitcdFx0XHQgcHhtX2luc3QsIHJjKTtcbitcdFx0Z290byBjdHhfZnJlZTtcbitcdH1cbitcbitcdGlkID0gaWRhX2FsbG9jKFx1MDAyNnJhczJfaWRhLCBHRlBfS0VSTkVMKTtcbitcdGlmIChpZCBcdTAwM2MgMCkge1xuK1x0XHRyYyA9IGlkO1xuK1x0XHRnb3RvIHBjY19mcmVlO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNlYWRldi5pZFx0XHQ9IGlkO1xuK1x0cmFzMl9jdHgtXHUwMDNlYWRldi5uYW1lXHRcdD0gbmFtZTtcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcdD0gcmFzMl9yZWxlYXNlO1xuK1x0cmFzMl9jdHgtXHUwMDNlYWRldi5kZXYucGFyZW50XHQ9IHJhczJfY3R4LVx1MDAzZWRldjtcbitcbitcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGlkYV9mcmVlO1xuK1xuK1x0cmMgPSBhdXhpbGlhcnlfZGV2aWNlX2FkZChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbitcdGlmIChyYykge1xuK1x0XHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmMpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJhczJfY3R4O1xuK1xuK2lkYV9mcmVlOlxuK1x0aWRhX2ZyZWUoXHUwMDI2cmFzMl9pZGEsIGlkKTtcbitwY2NfZnJlZTpcbitcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVx1MDAzZXNzcGNjKTtcbitjdHhfZnJlZTpcbitcdGtmcmVlKHJhczJfY3R4KTtcbitcbitcdHJldHVybiBFUlJfUFRSKHJjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4re1xuK1x0aWYgKCFyYXMyX2N0eClcbitcdFx0cmV0dXJuO1xuK1xuK1x0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbit9XG4rXG4rc3RhdGljIGludCBwYXJzZV9yYXMyX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiKVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICoqcGN0eF9saXN0O1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4rXHR1MTYgdG90X3RibF9sZW47XG4rXHR1MTYgaTtcbitcbitcdGlmIChyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YoKnJhczJfdGFiKSkge1xuK1x0XHRwcl93YXJuKEZXX1dBUk4gXCJBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxuXCIsXG4rXHRcdFx0cmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCFyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcbitcdFx0cHJfd2FybihGV19XQVJOIFwiTm8vSW52YWxpZCBudW1iZXIgb2YgUENDIGRlc2NzKCVkKSBpbiBBQ1BJIFJBUzIgdGFibGVcXG5cIixcbitcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHR0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICsgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyAqIHNpemVvZigqcGNjX2Rlc2NfbGlzdCk7XG4rXHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2MgdG90X3RibF9sZW4pIHtcbitcdFx0cHJfd2FybihGV19XQVJOIFwiUkFTMiB0YWJsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gUENDIGRlc2NzPSVkIHNpemU9JXUpXFxuXCIsXG4rXHRcdFx0cmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcywgcmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cGN0eF9saXN0ID0ga2NhbGxvYyhyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwY3R4X2xpc3QpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cGNjX2Rlc2NfbGlzdCA9IChzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICopKHJhczJfdGFiICsgMSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzOyBpKyssIHBjY19kZXNjX2xpc3QrKykge1xuK1x0XHRpZiAocGNjX2Rlc2NfbGlzdC1cdTAwM2VmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyYXMyX2N0eCA9IGFkZF9hdXhfZGV2aWNlKFJBUzJfTUVNX0RFVl9JRF9OQU1FLCBwY2NfZGVzY19saXN0LVx1MDAzZWNoYW5uZWxfaWQsXG4rXHRcdFx0XHRcdCAgcGNjX2Rlc2NfbGlzdC1cdTAwM2VpbnN0YW5jZSk7XG4rXHRcdC8qIEludmFsaWQgTlVNQSBub2RlLCBjb250aW51ZSBwYXJzaW5nIG5leHQgbm9kZSAqL1xuK1x0XHRpZiAoUFRSX0VSUihyYXMyX2N0eCkgPT0gLUVOWElPKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoSVNfRVJSKHJhczJfY3R4KSkge1xuK1x0XHRcdHByX3dhcm4oXCJGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXG5cIiwgUFRSX0VSUihyYXMyX2N0eCkpO1xuK1x0XHRcdGZvciAoOyBpIFx1MDAzZSAwOyBpLS0pIHtcbitcdFx0XHRcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxuK1x0XHRcdFx0XHRyZW1vdmVfYXV4X2RldmljZShwY3R4X2xpc3RbaSAtIDFdKTtcbitcdFx0XHR9XG4rXHRcdFx0a2ZyZWUocGN0eF9saXN0KTtcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihyYXMyX2N0eCk7XG4rXHRcdH1cbitcdFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XG4rXHR9XG4rXHRrZnJlZShwY3R4X2xpc3QpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG4rICpcbisgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuKyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhblxuKyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxuKyAqIG1lbW9yeSBmZWF0dXJlLlxuKyAqXG4rICogUmV0dXJuczogbm9uZS5cbisgKi9cbit2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiO1xuK1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuK1xuK1x0c3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKilcdTAwMjZyYXMyX3RhYik7XG4rXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gZ2V0IHRhYmxlLCAlc1xcblwiLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gcGFyc2UgUkFTMiB0YWJsZVxcblwiKTtcbitcbitcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG4rKysgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xuQEAgLTE0LDYgKzE0LDcgQEAgZW51bSBlZGFjX3NjcnViX2F0dHJpYnV0ZXMge1xuIFx0U0NSVUJfQUREUkVTUyxcbiBcdFNDUlVCX1NJWkUsXG4gXHRTQ1JVQl9FTkFCTEVfQkFDS0dST1VORCxcbitcdFNDUlVCX0VOQUJMRV9ERU1BTkQsXG4gXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sXG5AQCAtNTUsNiArNTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcIjB4JWxseFxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcIjB4JWxseFxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9iYWNrZ3JvdW5kLCBnZXRfZW5hYmxlZF9iZywgYm9vbCwgXCIldVxcblwiKVxuK0VEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9kZW1hbmQsIGdldF9lbmFibGVkX29kLCBib29sLCBcIiV1XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFwiJXVcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtYXhfY3ljbGVfZHVyYXRpb24sIGdldF9tYXhfY3ljbGUsIHUzMiwgXCIldVxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGdldF9jeWNsZV9kdXJhdGlvbiwgdTMyLCBcIiV1XFxuXCIpXG5AQCAtODQsNiArODYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXHRcdFx0XFxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoYWRkciwgd3JpdGVfYWRkciwgdTY0LCBrc3RydG91NjQpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKHNpemUsIHdyaXRlX3NpemUsIHU2NCwga3N0cnRvdTY0KVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuK0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcbkBAIC0xMTksNiArMTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50XG4gXHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbitcdGNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDpcbitcdFx0aWYgKG9wcy1cdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xuK1x0XHRcdGlmIChvcHMtXHUwMDNlc2V0X2VuYWJsZWRfb2QpXG4rXHRcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdHJldHVybiAwNDQ0O1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT046XG4gXHRcdGlmIChvcHMtXHUwMDNlZ2V0X21pbl9jeWNsZSlcbiBcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuQEAgLTE2NCw2ICsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcbiBcdFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxuK1x0XHRbU0NSVUJfRU5BQkxFX0RFTUFORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2RlbWFuZCwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtaW5fY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX01BWF9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWF4X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JXKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXG5pbmRleCBmYzRmNGJiOTRhNGM2NS4uYTFlNmFlZDhiY2M4NTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Jhcy9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXG5AQCAtNDYsNCArNDYsMTcgQEAgY29uZmlnIFJBU19GTVBNXG4gXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXG4gXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxuIFxuK2NvbmZpZyBNRU1fQUNQSV9SQVMyXG4rXHR0cmlzdGF0ZSBcIk1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXCJcbitcdGRlcGVuZHMgb24gQUNQSV9SQVMyXG4rXHRkZXBlbmRzIG9uIEVEQUNcbitcdGRlcGVuZHMgb24gRURBQ19TQ1JVQlxuK1x0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPXG4rXHRoZWxwXG4rXHQgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMlxuK1x0ICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG9cbitcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXG4rXHQgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyXG4rXHQgIHRocm91Z2ggdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLlxuK1xuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuaW5kZXggMTFmOTVkNTlkMzk3MmQuLmEwZTZlOTAzZDZiMDliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5AQCAtMiw2ICsyLDcgQEBcbiBvYmotJChDT05GSUdfUkFTKVx0Kz0gcmFzLm9cbiBvYmotJChDT05GSUdfREVCVUdfRlMpXHQrPSBkZWJ1Z2ZzLm9cbiBvYmotJChDT05GSUdfUkFTX0NFQylcdCs9IGNlYy5vXG4rb2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpXHQrPSBhY3BpX3JhczIub1xuIFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcdCs9IGFtZC9mbXBtLm9cbiBvYmoteVx0XHRcdCs9IGFtZC9hdGwvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yYTdkZTIyNmVjODU5MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcbkBAIC0wLDAgKzEsNTg5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cbisgKlxuKyAqL1xuK1xuKyN1bmRlZiBwcl9mbXRcbisjZGVmaW5lIHByX2ZtdChmbXQpXHRcIkFDUEkgUkFTMiBNRU1PUlk6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWRhYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuK1xuKyNkZWZpbmUgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiBCSVQoMClcbisjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXG4rXG4rI2RlZmluZSBSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUyAweDAxXG4rI2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXG4rI2RlZmluZSBSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSIDB4MDNcbitcbisvKlxuKyAqIFJBUzIgcGF0cm9sIHNjcnViXG4rICovXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBSQVMyX1BTX0VOX0JBQ0tHUk9VTkQgQklUKDApXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDcsIDApXG4rI2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcbisjZGVmaW5lIFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HIEJJVCgwKVxuK1xuKyNkZWZpbmUgUkFTMl9TQ1JVQl9OQU1FX0xFTiAxMjhcbisjZGVmaW5lIFJBUzJfSE9VUl9JTl9TRUNTIDM2MDBcbitcbitzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0ge1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BhdHJvbF9zY3J1Yl9wYXJhbSBwYXJhbXM7XG4rfTtcbitcbisjZGVmaW5lIFRPX0FDUElfUkFTMl9QU19TSE1FTShfYWRkcikgXFxcbitcdGNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pXG4rXG4rc3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuK1xuK3N0YXRpYyBpbnQgcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdGlvd3JpdGU4KDAsIFx1MDAyNmNvbW1vbi1cdTAwM2VzZXRfY2Fwc1swXSk7XG4rXG4rXHRyZXR1cm4gaW9yZWFkOChcdTAwMjZjb21tb24tXHUwMDNlZmVhdHVyZXNbMF0pIFx1MDAyNiBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbitcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4rXHR1MzIgc2NydWJfcGFyYW1zX291dDtcbitcdGludCByZXQ7XG4rXG4rXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuK1x0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4rXHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX3NpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4rXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKHJhczJfY3R4LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcblwiKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHNjcnViX3BhcmFtc19vdXQgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XG4rXHRyYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLFxuK1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbitcdHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXG4rXHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuK1x0cmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxuK1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbitcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1Yikge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgIChpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IHRydWU7XG4rXHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTtcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXG4rc3RhdGljIGludCByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgYm9vbCAqcnVubmluZylcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuK1x0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXJhczJfY3R4LVx1MDAzZW9kX3NjcnViKSB7XG4rXHRcdCpydW5uaW5nID0gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbitcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1xuK1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQqcnVubmluZyA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5mbGFncykgXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HO1xuK1x0aWYgKCEoKnJ1bm5pbmcpKVxuK1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4rXHRcdGlmICghcmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIElmIHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKCkgZmFpbHMgaGVyZSwgcmUtZW5hYmxpbmcgYmFja2dyb3VuZFxuK1x0XHQgKiBzY3J1YmJpbmcgaW1tZWRpYXRlbHkgbWF5IG5vdCBiZSBwb3NzaWJsZSBvciBjb3JyZWN0LiBJbiB0aGF0IGNhc2UsXG4rXHRcdCAqIHRoZSBhZG1pbiBvciBmaXJtd2FyZSBtYXkgbmVlZCB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YmJpbmdcbitcdFx0ICogYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4rXHRcdCAqL1xuK1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRpZiAoIXJ1bm5pbmcpIHtcbitcdFx0XHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRcIkZhaWxlZCB0byBlbmFibGUgYmFja2dyb3VuZCBzY3J1YiByZXQ9JWRcXG5cIiwgcmV0KTtcbitcbitcdFx0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRcdG1zbGVlcCgxMDAwKTtcbitcdH1cbitcbitcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0Km1pbiA9IHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1heClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdCptYXggPSByYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKnNjcnViX2N5Y2xlX3NlY3MpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHQqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2Vjcylcbit7XG4rXHR1MzIgc2NydWJfY3ljbGVfaHJzID0gc2NydWJfY3ljbGVfc2VjcyAvIFJBUzJfSE9VUl9JTl9TRUNTO1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChydW5uaW5nKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0aWYgKHNjcnViX2N5Y2xlX2hycyBcdTAwM2MgcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlIHx8XG4rXHQgICAgc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdC8qXG4rXHQgKiBXaGVuIEJHIHNjcnViYmluZyBpcyBlbmFibGVkIHRoZSBhY3R1YWwgYWRkcmVzcyByYW5nZSBpcyBub3QgdmFsaWQuXG4rXHQgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuXG4rXHQgKi9cbitcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCpiYXNlID0gcmFzMl9jdHgtXHUwMDNlYmFzZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCAqc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQqc2l6ZSA9IHJhczJfY3R4LVx1MDAzZXNpemU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IGJhc2UpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChydW5uaW5nKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IGJhc2U7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXNpemUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocnVubmluZylcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJhczJfY3R4LVx1MDAzZXNpemUgPSBzaXplO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0KmVuYWJsZWQgPSByYXMyX2N0eC1cdTAwM2ViZ19zY3J1YjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4rXHR1MzIgc2NydWJfcGFyYW1zX2luO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuK1x0aWYgKGVuYWJsZSkge1xuK1x0XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIgfHwgcnVubmluZylcbitcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4rXHRcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuK1x0XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbitcdFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbitcdFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCFyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0XHRpb3dyaXRlMTYoUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0fVxuK1xuK1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuK1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpO1xuK1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gJXMgYmFja2dyb3VuZCBzY3J1YmJpbmdcXG5cIixcbitcdFx0XHRzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiA9IGVuYWJsZTtcbitcdGlmIChlbmFibGUpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcbitcdFx0LyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovXG4rXHRcdHJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXG4rXHRyZXR1cm4gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGVuYWJsZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQqZW5hYmxlZCA9IHJ1bm5pbmc7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFlbmFibGUpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHQvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4rXHRcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBmYWxzZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSB0cnVlO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZFxuK1x0ICogd2l0aCAoYmFzZSArIHNpemUpIFx1MDAzZSAobWVtX2Jhc2UgKyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGFcbitcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cbitcdCAqL1xuK1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VzaXplIHx8IHJhczJfY3R4LVx1MDAzZWJhc2UgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIiVzOiBJbnZhbGlkIGFkZHJlc3MgcmFuZ2UsIGJhc2U9MHglbGx4IHNpemU9MHglbGx4XFxuXCIsXG4rXHRcdFx0X19mdW5jX18sIHJhczJfY3R4LVx1MDAzZWJhc2UsIHJhczJfY3R4LVx1MDAzZXNpemUpO1xuK1x0XHRyZXQgPSAtRVJBTkdFO1xuK1x0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbitcdH1cbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xuK1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4rXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2ViYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZXNpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4rXHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxcblwiLCByZXQpO1xuK1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuK1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4rXHRcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4rXHRcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4rXHRcdH1cbitcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcbitcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViIFx1MDAyNlx1MDAyNiByYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlIFx1MDAyNlx1MDAyNiAhcmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQsIHJhczJfY3R4LFxuK1x0XHRcdFx0XHQgICAgICAgXCJyYXMyX3NjcnViX25pZCVkXCIsIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRcdGlmIChJU19FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKTtcbitcdFx0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogSWYga3RocmVhZF9ydW4oKSBmYWlscyBhbmQgdGhlIGRlbWFuZCBzY3J1YmJpbmcgaGFzIHN0YXJ0ZWQgcnVubmluZyxcbitcdFx0XHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyBhZG1pbi9maXJtd2FyZSBtYXkgbmVlZFxuK1x0XHRcdCAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK1xuK2VuYWJsZV9iZ19zY3J1YjpcbitcdGlmIChyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1Yikge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuK1x0XHRfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xuK1x0LnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLFxuK1x0LnJlYWRfc2l6ZSA9IHJhczJfaHdfc2NydWJfcmVhZF9zaXplLFxuK1x0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXG4rXHQud3JpdGVfc2l6ZSA9IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSxcbitcdC5nZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcsXG4rXHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxuK1x0LmdldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZCxcbitcdC5zZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QsXG4rXHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXG4rXHQuZ2V0X21heF9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUsXG4rXHQuZ2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkLFxuK1x0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXG4rfTtcbitcbitzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbitcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybjtcbitcbitcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmFzMl9jdHgtXHUwMDNlZHJpdmVyX2FjdGl2ZSA9IGZhbHNlO1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZXRocmVhZCkge1xuK1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRrdGhyZWFkX3N0b3AocmFzMl9jdHgtXHUwMDNldGhyZWFkKTtcbitcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XG4rXHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XG4rXHRjaGFyIHNjcnViX25hbWVbUkFTMl9TQ1JVQl9OQU1FX0xFTl07XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbnVtX3NwYW5uZWRfcGFnZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFyYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHJhczJfY3R4KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LypcbitcdCAqIFJldHJpZXZlIHRoZSBQQSByYW5nZSBvZiB0aGUgTlVNQSBkb21haW4gYW5kIHVzZSBpdCBhcyB0aGVcbitcdCAqICdSZXF1ZXN0ZWQgQWRkcmVzcyBSYW5nZScsIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmRcbitcdCAqIEdFVF9QQVRST0xfUEFSQU1FVEVSUyB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGFsbCBhZGRyZXNzZXNcbitcdCAqIGluIHRoZSBOVU1BIGRvbWFpbiBhcyB3ZWxsIGFzIHdoZW4gc2VuZCBjb21tYW5kIFNUQVJUX1BBVFJPTF9TQ1JVQkJFUlxuK1x0ICogdG8gc3RhcnQgdGhlIGRlbWFuZCBzY3J1YmJpbmcuXG4rXHQgKi9cbitcdHN0YXJ0X3BmbiA9IG5vZGVfc3RhcnRfcGZuKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRudW1fc3Bhbm5lZF9wYWdlcyA9IG5vZGVfc3Bhbm5lZF9wYWdlcyhyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuK1x0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xuK1x0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcXG5cIiwgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcdH1cbitcbitcdHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlID0gX19wZm5fdG9fcGh5cyhzdGFydF9wZm4pO1xuK1x0cmFzMl9jdHgtXHUwMDNlbWVtX3NpemUgPSAodTY0KW51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUpXG4rXHRcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycztcbitcdGVsc2VcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xuK1xuK1x0c3ByaW50ZihzY3J1Yl9uYW1lLCBcImFjcGlfcmFzX21lbSVkXCIsIGF1eGRldi1cdTAwM2VpZCk7XG4rXG4rXHRyYXNfZmVhdHVyZXMuZnRfdHlwZVx0PSBSQVNfRkVBVF9TQ1JVQjtcbitcdHJhc19mZWF0dXJlcy5pbnN0YW5jZVx0PSAwO1xuK1x0cmFzX2ZlYXR1cmVzLnNjcnViX29wc1x0PSBcdTAwMjZyYXMyX3NjcnViX29wcztcbitcdHJhc19mZWF0dXJlcy5jdHhcdD0gcmFzMl9jdHg7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlID0gdHJ1ZTtcbitcbitcdHJldHVybiBlZGFjX2Rldl9yZWdpc3RlcihcdTAwMjZhdXhkZXYtXHUwMDNlZGV2LCBzY3J1Yl9uYW1lLCBOVUxMLCAxLCBcdTAwMjZyYXNfZmVhdHVyZXMpO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgcmFzMl9tZW1fZGV2X2lkX3RhYmxlW10gPSB7XG4rXHR7IC5uYW1lID0gUkFTMl9BVVhfREVWX05BTUUgXCIuXCIgUkFTMl9NRU1fREVWX0lEX05BTUUsIH0sXG4rXHR7IH1cbit9O1xuK1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XG4rXHQubmFtZSA9IFJBUzJfTUVNX0RFVl9JRF9OQU1FLFxuK1x0LnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLFxuK1x0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXG4rXHQuaWRfdGFibGUgPSByYXMyX21lbV9kZXZfaWRfdGFibGUsXG4rfTtcbittb2R1bGVfYXV4aWxpYXJ5X2RyaXZlcihyYXMyX21lbV9kcml2ZXIpO1xuK1xuK01PRFVMRV9JTVBPUlRfTlMoXCJBQ1BJX1JBUzJcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWM3NWIwMzA3ZmE5Y2Ncbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbkBAIC0wLDAgKzEsODYgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBBQ1BJIFJBUzIgKFJBUyBGZWF0dXJlIFRhYmxlKSBtZXRob2RzLlxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWRcbisgKi9cbitcbisjaWZuZGVmIF9BQ1BJX1JBUzJfSFxuKyNkZWZpbmUgX0FDUElfUkFTMl9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYXV4aWxpYXJ5X2J1cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWFpbGJveF9jbGllbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rc3RydWN0IGRldmljZTtcbitcbisvKlxuKyAqIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MjogUENDIGNvbW1hbmQgY29kZXMgdXNlZCBieVxuKyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxuKyAqL1xuKyNkZWZpbmUgUENDX0NNRF9FWEVDX1JBUzIgMHgwMVxuK1xuKyNkZWZpbmUgUkFTMl9BVVhfREVWX05BTUUgXCJyYXMyXCJcbisjZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FIFwiYWNwaV9yYXMyX21lbVwiXG4rXG4rLyoqXG4rICogc3RydWN0IHJhczJfbWVtX2N0eCAtIENvbnRleHQgZm9yIFJBUzIgbWVtb3J5IGZlYXR1cmVzXG4rICogQGFkZXY6XHRcdEF1eGlsaWFyeSBkZXZpY2Ugb2JqZWN0XG4rICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuKyAqIEBkZXY6XHRcdFBvaW50ZXIgdG8gZGV2aWNlIGJhY2tpbmcgc3RydWN0IG1ib3hfY29udHJvbGxlciBmb3IgUENDXG4rICogQHNzcGNjOlx0XHRQb2ludGVyIHRvIGxvY2FsIGRhdGEgc3RydWN0dXJlIGZvciBQQ0MgY29tbXVuaWNhdGlvblxuKyAqIEBwY2NfbG9jazpcdFx0UG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcbisgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4rICogQHN5c19jb21wX25pZDpcdE5vZGUgSUQgb2YgdGhlIHN5c3RlbSBjb21wb25lbnQgdGhhdCB0aGUgUkFTIGZlYXR1cmVcbisgKlx0XHRcdGlzIGFzc29jaWF0ZWQgd2l0aC4gU2VlIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MDogUkFTMlxuKyAqXHRcdFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxuKyAqXHRcdFx0RmllbGQ6IEluc3RhbmNlXG4rICogQG1lbV9iYXNlOlx0XHRCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2VcbisgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuKyAqIEBtZW1fc2l6ZVx0XHRTaXplIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2VcbisgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuKyAqIEBiYXNlOlx0XHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcbisgKiBAc2l6ZTpcdFx0U2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxuKyAqIEBzY3J1Yl9jeWNsZV9ocnM6XHRDdXJyZW50IHNjcnViIHJhdGUgaW4gaG91cnNcbisgKiBAc2V0X3NjcnViX2N5Y2xlOlx0U2NydWIgcmF0ZSB0byBzZXQgaW4gaG91cnNcbisgKiBAbWluX3NjcnViX2N5Y2xlOlx0TWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZFxuKyAqIEBtYXhfc2NydWJfY3ljbGU6XHRNYXhpbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4rICogQG9kX3NjcnViOlx0XHRTdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZyAobWVtb3J5IHJlZ2lvbilcbisgKiBAYmdfc2NydWI6XHRcdFN0YXR1cyBvZiBiYWNrZ3JvdW5kIHBhdHJvbCBzY3J1YmJpbmdcbisgKiBAcmVlbmFibGVfYmdfc2NydWI6XHRGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZFxuKyAqXHRcdFx0c2NydWJiaW5nIGlzIGZpbmlzaGVkXG4rICogQHRocmVhZDpcdFx0RGVtYW5kIHNjcnViIG1vbml0b3Iga3RocmVhZFxuKyAqIEBkcml2ZXJfYWN0aXZlOlx0RmxhZyBpbmRpY2F0ZXMgUkFTMiBtZW1vcnkgZHJpdmVyIGlzIGFjdGl2ZS9yZW1vdmVkXG4rICovXG4rc3RydWN0IHJhczJfbWVtX2N0eCB7XG4rXHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZVx0XHRhZGV2O1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuK1x0c3RydWN0IGRldmljZVx0XHRcdCpkZXY7XG4rXHR2b2lkXHRcdFx0XHQqc3NwY2M7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHQqcGNjX2xvY2s7XG4rXHR1MzJcdFx0XHRcdHN5c19jb21wX25pZDtcbitcdHU2NFx0XHRcdFx0bWVtX2Jhc2U7XG4rXHR1NjRcdFx0XHRcdG1lbV9zaXplO1xuK1x0dTY0XHRcdFx0XHRiYXNlO1xuK1x0dTY0XHRcdFx0XHRzaXplO1xuK1x0dThcdFx0XHRcdHNjcnViX2N5Y2xlX2hycztcbitcdHU4XHRcdFx0XHRzZXRfc2NydWJfY3ljbGU7XG4rXHR1OFx0XHRcdFx0bWluX3NjcnViX2N5Y2xlO1xuK1x0dThcdFx0XHRcdG1heF9zY3J1Yl9jeWNsZTtcbitcdGJvb2xcdFx0XHRcdG9kX3NjcnViO1xuK1x0Ym9vbFx0XHRcdFx0Ymdfc2NydWI7XG4rXHRib29sXHRcdFx0XHRyZWVuYWJsZV9iZ19zY3J1YjtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdFx0XHQqdGhyZWFkO1xuK1x0Ym9vbFx0XHRcdFx0ZHJpdmVyX2FjdGl2ZTtcbit9O1xuK1xuKyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXG4rdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XG4raW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cbisjZW5kaWZcbitcbisjZW5kaWYgLyogX0FDUElfUkFTMl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGFjLmggYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5AQCAtNjg0LDYgKzY4NCw4IEBAIGVudW0gZWRhY19kZXZfZmVhdCB7XG4gICogQHdyaXRlX3NpemU6IHNldCBvZmZzZXQgb2YgdGhlIHNjcnViYmluZyByYW5nZS5cbiAgKiBAZ2V0X2VuYWJsZWRfYmc6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGJhY2tncm91bmQgc2NydWIuXG4gICogQHNldF9lbmFibGVkX2JnOiBzdGFydCBvciBzdG9wIGEgYmctc2NydWIuXG4rICogQGdldF9lbmFibGVkX29kOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBkZW1hbmQgc2NydWIuXG4rICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9jeWNsZV9kdXJhdGlvbjogZ2V0IGN1cnJlbnQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbkBAIC02OTYsNiArNjk4LDggQEAgc3RydWN0IGVkYWNfc2NydWJfb3BzIHtcbiBcdGludCAoKndyaXRlX3NpemUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKTtcbiBcdGludCAoKmdldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xuIFx0aW50ICgqc2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbitcdGludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xuK1x0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbiBcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XG4gXHRpbnQgKCpnZXRfbWF4X2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptYXgpO1xuIFx0aW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDAwOjM2OjI0LjE0NDY1MzI5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzY1MjMyMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQUNQSSBSQVMyIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgYWRkcyBBQ1BJIFJBUzIgc3VwcG9ydCBhbmQgYSBtZW1vcnkgZHJpdmVyLiBJdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIEtjb25maWcgYW5kIE1ha2VmaWxlIGNoYW5nZXMsIHNvbWUgbmV3IGZpbGVzIChgcmFzMi5jYCwgYGFjcGlfcmFzMi5jYCwgYHJhczIuaGApLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBkcml2ZXJzIChgYnVzLmNgLCBgc2NydWIuY2ApLiBJdCdzIGFsbCBhYm91dCBlbmFibGluZyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nIHVzaW5nIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykuIFRoZSBkcml2ZXIgaW50ZWdyYXRlcyB3aXRoIEVEQUMgYW5kIGV4cG9zZXMgc3lzZnMgYXR0cmlidXRlcyBmb3IgY29udHJvbC5cblxuVGhlIGJpZyBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIGFsd2F5cywgaG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIHZpcnR1YWxpemF0aW9uPyBEb2VzIHRoaXMgZXZlbiAqd29yayogaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0U/IFRoZSBjb3JlIGRlcGVuZGVuY3kgaXMgdGhlIHByZXNlbmNlIG9mIGFuIEFDUEkgUkFTMiB0YWJsZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGRvZXMgdGhlIGZpcm13YXJlICpwcm92aWRlKiB0aGF0IHRhYmxlIGluIGEgdmlydHVhbGl6ZWQgY29udGV4dD8gSSBrbm93IFFFTVUgb2Z0ZW4gZG9lc24ndCBoYXZlIGl0IGJ5IGRlZmF1bHQuIEkgaGF2ZSB0byB0aGluayBhYm91dCBzeXprYWxsZXIuIENhbiBzeXprYWxsZXIgaW5qZWN0IEFDUEkgdGFibGVzPyBJIGtub3cgaXQgZG9lcywgYnV0IGlzIGl0IGFibGUgdG8gbG9hZCBhbiBBQ1BJIFJBUzIgdGFibGU/XG5cbldhaXQsIHN5emthbGxlciAqY2FuJ3QqIGluamVjdCBhcmJpdHJhcnkgdGFibGVzIHVubGVzcyBpdCdzIHNwZWNpZmljYWxseSBzdXBwb3J0ZWQuIEl0IGRvZXMgaGF2ZSBBQ1BJIGZ1enppbmcsIGJ1dCBpdCdzIG5vdCBsaWtlIGEgYmxhbmtldCBpbmplY3Rpb24uIE9rYXksIEkgc2VlLiBUaGUgZHJpdmVyIHVzZXMgYGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIC4uLilgLiBJZiB0aGUgdGFibGUgKmlzbid0KiBwcmVzZW50LCBgYWNwaV9yYXMyX2luaXRgIGp1c3QgcmV0dXJucy4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBidXQgaXMgdGhhdCByZWFjaGFibGUgaW4gc3l6a2FsbGVyPyBJZiB0aGVyZSdzIG5vIFJBUzIgdGFibGUsIHRoZSBkcml2ZXIganVzdCBzaWxlbnRseSBkb2VzIG5vdGhpbmcuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lczogaG93IGNhbiBJICpmb3JjZSogdGhpcyBjb2RlIHRvIHJ1biwgb3IgYXQgbGVhc3QgYXR0ZW1wdCB0byBydW4/XG5cblN5emthbGxlciAqY2FuKiBsb2FkIEFDUEkgdGFibGVzIHZpYSBgYWNwaV9jb25maWdmc2Agb3IgYGluaXRyZGAgdGFibGUgb3ZlcnJpZGUuLi5idXQgSSdtIG5vdCBzdXJlIGlmIGl0IGFjdGl2ZWx5IGRvZXMgdGhpcyBmb3IgUkFTMi4gTGV0IG1lIGNoZWNrIGlmIGBwYXJzZV9yYXMyX3RhYmxlYCBpcyBldmVyIHJlYWNoZWQuIElmIHN5emthbGxlciAqY2FuKiBwcm92aWRlIGN1c3RvbSBBQ1BJIHRhYmxlcywgdGhlbiB0aGUgY29kZSAqaXMqIHJlYWNoYWJsZS4gT2theSwgbGV0J3MgYXNzdW1lIGl0IGNhbiBmb3IgdGhlIHRpbWUgYmVpbmcuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHNlZSBgQ09ORklHX0FDUElfUkFTMmAsIGBDT05GSUdfTUVNX0FDUElfUkFTMmAsIGBDT05GSUdfRURBQ2AsIGFuZCBgQ09ORklHX0VEQUNfU0NSVUJgLiBTdGFuZGFyZCBzdHVmZi5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgZHJpdmVyIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAgaW4gYGRyaXZlcnMvYWNwaS9idXMuY2AuIEV4Y2VsbGVudC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgaXMgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvciBwdXJlbHkgaGFyZHdhcmUgZGVwZW5kZW50IG9uIGl0LiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IG1lbnRpb24gb2YgYEFDUElfU0lHX1JBUzJgIG91dHNpZGUgdGhlIGRyaXZlciBpdHNlbGYuIExldCBtZSBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgY29tZXMgYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwMDozNjozNC41MDk4ODkxNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzYwNzQxNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFDUElfU0lHX1JBUzJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY3BpL3JhczIuYz00ODg9dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDkyLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM6NDkzOlxcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXFx1MDAyNnJhczJfdGFiKTtcXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTQ5NC1cXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcXG4tLVxcbmluY2x1ZGUvYWNwaS9hY3RibDIuaC01My0jZGVmaW5lIEFDUElfU0lHX1JBU0YgICAgICAgICAgIFxcXCJSQVNGXFxcIlxcdC8qIFJBUyBGZWF0dXJlIHRhYmxlICovXFxuaW5jbHVkZS9hY3BpL2FjdGJsMi5oOjU0OiNkZWZpbmUgQUNQSV9TSUdfUkFTMiAgICAgICAgICAgXFxcIlJBUzJcXFwiXFx0LyogUkFTMiBGZWF0dXJlIHRhYmxlICovXFxuaW5jbHVkZS9hY3BpL2FjdGJsMi5oLTU1LSNkZWZpbmUgQUNQSV9TSUdfUkdSVCAgICAgICAgICAgXFxcIlJHUlRcXFwiXFx0LyogUmVndWxhdG9yeSBHcmFwaGljcyBSZXNvdXJjZSBUYWJsZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwMDozNjozNy44NzA2NDM1MzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzQyNzk4OTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzOiBBQ1BJIFJBUzIgVGFibGUgYW5kIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZHJpdmVycy9hY3BpL3JhczIuY2AgY29kZSwgYW5kIHRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIEFDUEkgUkFTMiB0YWJsZSBzaWduYXR1cmUuIENhbiBzeXprYWxsZXIgZXZlbiBmdXp6IEFDUEkgdGFibGVzPyBJIGtub3cgaXQgaGFzICpzb21lKiBzdXBwb3J0LiBCdXQgdGhlIGVudHJ5IHBvaW50LCBgYWNwaV9yYXMyX2luaXRgLCBpcyBjYWxsZWQgZHVyaW5nIGBhY3BpX2luaXRgLCB3aGljaCBpcyBhbiBgc3Vic3lzX2luaXRjYWxsYC4gVGhhdCdzIGEgcmVkIGZsYWcuIElmIHN5emthbGxlciBsb2FkcyB0YWJsZXMgdGhyb3VnaCBjb25maWdmcyBsYXRlciwgZG9lcyB0aGF0IGV2ZW4gbWF0dGVyPyBEb2VzIGBhY3BpX2dldF90YWJsZWAgcGljayB1cCB0YWJsZXMgbG9hZGVkIGFmdGVyIGBhY3BpX2luaXRgIHJ1bnM/XG5cbkFjdHVhbGx5LCB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBgYWNwaV9yYXMyX2luaXRgIHNlZW1zIHRvIGJlIGEgKm9uZS1zaG90KiBkZWFsIGR1cmluZyBib290LiBJZiB0aGUgdGFibGUgaXNuJ3QgdGhlcmUgYXQgdGhhdCBleGFjdCBtb21lbnQsIGl0IGJhaWxzIG91dC4gQ291bGQgd2UgaW5qZWN0IGl0IHZpYSB0aGUgUUVNVSBjb21tYW5kIGxpbmU/IFBvc3NpYmxlLCBidXQgc3l6a2FsbGVyIGRvZXNuJ3QgZHluYW1pY2FsbHkgc3dhcCBBQ1BJIHRhYmxlcyBwZXIgdGVzdCBjYXNlLCBpdCBoYXMgYSBmaXhlZCBRRU1VIGNvbmZpZy4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbiBcImluamVjdCBBQ1BJIHRhYmxlXCIgc3l6Y2FsbCBsaWtlIGBzeXpfYWNwaV9sb2FkYD8gTm8sIHRoZXJlIGlzbid0IG9uZS4gSG1tLi4uaXMgdGhlcmUgZXZlbiBhbnkgd2F5IHRvIHRlc3QgdGhpcyB3aXRoIHN5emthbGxlcj9cblxuSWYgYGFjcGlfcmFzMl9pbml0YCBvbmx5IHJ1bnMgYXQgYm9vdCwgYW5kIHN5emthbGxlciBkb2Vzbid0IHJlYm9vdCB3aXRoIGN1c3RvbSBBQ1BJIHRhYmxlcywgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIExldCBtZSBjb25maXJtIHRoYXQgYGFjcGlfcmFzMl9pbml0YCBpcyB0aGUgc29sZSBlbnRyeSBwb2ludC4gWWVwLCBpdCBwYXJzZXMgdGhlIHRhYmxlIGFuZCBjcmVhdGVzIGF1eGlsaWFyeSBkZXZpY2VzLiBUaGUgYHJhczJfbWVtX2RyaXZlcmAgYmluZHMgdG8gdGhlc2UgZGV2aWNlcy4gTm8gZGV2aWNlcywgbm8gcHJvYmUsIGFuZCB0aGUgd2hvbGUgYGRyaXZlcnMvYWNwaS9yYXMyLmNgIGFuZCBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgIGFyZSBkZWFkIGNvZGUgdW5sZXNzIHRoZSBSQVMyIHRhYmxlIGlzIHByZXNlbnQgYXQgYm9vdC5cblxuU2luY2UgUUVNVSBkb2Vzbid0IHByb3ZpZGUgdGhlIFJBUzIgdGFibGUgYnkgZGVmYXVsdCwgYW5kIHN5emthbGxlciBkb2Vzbid0IGluamVjdCBpdCBhdCBib290LCB0aGlzIGNvZGUgaXMgbGlrZWx5ICp1bnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0IG1lIGRvdWJsZS1jaGVjazogaXMgdGhlcmUgQU5ZIG90aGVyIHdheSB0byBjYWxsIGBwYXJzZV9yYXMyX3RhYmxlYCBvciBgcmFzMl9tZW1fZHJ2X3Byb2JlYD8gYHJhczJfbWVtX2Rydl9wcm9iZWAgZ2V0cyBjYWxsZWQgYnkgdGhlIGF1eGlsaWFyeSBidXMgd2hlbiBhIGRldmljZSBtYXRjaGluZyBgUkFTMl9NRU1fREVWX0lEX05BTUVgIGlzIGFkZGVkLiBBbmQgd2hlcmUgZG9lcyB0aGF0IGRldmljZSBjb21lIGZyb20/IEl0J3MgYHBhcnNlX3JhczJfdGFibGVgISBXaGljaCBpcyBvbmx5IGNhbGxlZCBieSBgYWNwaV9yYXMyX2luaXRgLCBhbmQgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgYGFjcGlfaW5pdGAuXG5cbkNhbiB3ZSBjcmVhdGUgYW4gYXV4aWxpYXJ5IGRldmljZSBmcm9tIHVzZXJzcGFjZT8gTm8sIGF1eGlsaWFyeSBkZXZpY2VzIGFyZSBjcmVhdGVkIGJ5IGtlcm5lbCBjb2RlLiBJcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgYGFjcGlfaW5pdGAgYWdhaW4/IE5vLCBpdCdzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLlxuXG5Tbywgd2l0aG91dCBhIFJBUzIgQUNQSSB0YWJsZSBwcm92aWRlZCBhdCBib290LCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4gU2luY2Ugd2UncmUgZXZhbHVhdGluZyBpZiBzeXprYWxsZXIgc2hvdWxkIGV2ZW4gdHJ5LCBhbmQgc3l6a2FsbGVyIHJ1bnMgaW4gUUVNVS9HQ0UgKndpdGhvdXQqIGN1c3RvbSBmaXJtd2FyZSB3aXRoIFJBUzIsIHRoaXMgY29kZSBpcyBkZWFkLlxuXG5XYWl0LCB3aGF0IGlmIHN5emthbGxlciBsb2FkcyB0aGUgdGFibGUgdmlhIGBhY3BpX2NvbmZpZ2ZzYD8gSXQgd291bGRuJ3QgbWF0dGVyLCBgYWNwaV9yYXMyX2luaXRgIGhhcyBhbHJlYWR5IHJ1biBhbmQgcmV0dXJuZWQuIFdhaXQsIGRvZXMgYGFjcGlfZ2V0X3RhYmxlYCBnZXQgY2FsbGVkIGFnYWluIG9uIHRhYmxlIGxvYWQ/IE5vLiBgYWNwaV9yYXMyX2luaXRgIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhY3BpX2luaXRgLiBUaGVyZSdzIG5vIEFDUEkgdGFibGUgbm90aWZpZXIgZm9yIFJBUzIuIENvbXBhcmUgdGhhdCB0byBgYWNwaV9uZml0X2luaXRgIHdoaWNoICpkb2VzKiByZWdpc3RlciBhbiBBQ1BJIHRhYmxlIGhhbmRsZXIuLi4gTGV0J3Mgc2VlIGlmIGBhY3BpX3JhczJfaW5pdGAgZG9lcyBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIGl0IGp1c3QgZG9lcyBhIG9uZS10aW1lIGBhY3BpX2dldF90YWJsZWAgYXQgYm9vdCBhbmQgY2FsbHMgYHBhcnNlX3JhczJfdGFibGVgIGlmIGl0IGZpbmRzIGl0LlxuXG5MZXQncyBkb3VibGUtY2hlY2sgYWdhaW4sIGlzIHRoZXJlIGFueSBvdGhlciB3YXkgdG8gY2FsbCBgcmFzMl9tZW1fZHJ2X3Byb2JlYD8gTWF5YmUgc29tZSBvdGhlciBkcml2ZXIgc29tZWhvdyBjcmVhdGVzIHRoZSBhdXhpbGlhcnkgZGV2aWNlPyBObywgdGhlIGRldmljZSBJRCBpcyBgXCJhY3BpX3JhczJfbWVtXCJgLiBMZXQgbWUgc2VhcmNoIGZvciBpdCBhbmQgYmUgc3VyZS4uLiBOb3BlLiBDb25maXJtZWQuIFRoaXMgY29kZSBpcyAqdW5yZWFjaGFibGUqIGluIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjA4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwMDozNjo1MS4yOTg2MzcyNDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNDA1MzAwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3BpX3JhczJfbWVtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvYWNwaS9yYXMyLmg9MTc9c3RydWN0IGRldmljZTtcXG4tLVxcbmluY2x1ZGUvYWNwaS9yYXMyLmgtMjUtI2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcXFwicmFzMlxcXCJcXG5pbmNsdWRlL2FjcGkvcmFzMi5oOjI2OiNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXFxcImFjcGlfcmFzMl9tZW1cXFwiXFxuaW5jbHVkZS9hY3BpL3JhczIuaC0yNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDA6MzY6NTMuOTMyNzAyMDU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk1OTI2MzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJBUzIgRGV2aWNlIGFuZCBFREFDIFNjcnViIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgUkFTMiBkZXZpY2UsIGFuZCBpdCBzZWVtcyB0aGUgb25seSB3YXkgaXQgZ2V0cyBjcmVhdGVkIGlzIHRocm91Z2ggYGFjcGlfcmFzMl9pbml0YC4gVGhpcyBpcyBhIGJpdCBvZiBhIHByb2JsZW0gYmVjYXVzZSBpdCdzIGhhcmR3YXJlLWRlcGVuZGVudCwgbmVlZGluZyBzcGVjaWZpYyBBQ1BJIHRhYmxlcyBmcm9tIHRoZSBmaXJtd2FyZSwgYW5kIGl0IG9ubHkgY2hlY2tzIHRoaXMgYXQgYm9vdCB0aW1lLiBUaGF0IG1lYW5zIGl0J3MgYmFzaWNhbGx5IHVudG91Y2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVubGVzcyB3ZSBzcGVjaWZpY2FsbHkgY29uZmlndXJlIFFFTVUgdG8gcGFzcyBhIGN1c3RvbSBBQ1BJIHRhYmxlLCBhbmQgU3l6a2FsbGVyIGlzbid0IGRvaW5nIHRoYXQgZHluYW1pY2FsbHkgZm9yIFJBUzIgYXQgdGhlIG1vbWVudC4gSXQgaXMgZ29pbmcgdG8gYmUgaW5jcmVkaWJseSBkaWZmaWN1bHQgdG8gcmVwcm9kdWNlIGFueSBpc3N1ZXMuXG5cbldhaXQgYSBzZWNvbmQsIHRoZXJlJ3MgYSByZWxhdGVkIGNoYW5nZSBpbiBgZHJpdmVycy9lZGFjL3NjcnViLmNgISBJIG1pc3NlZCB0aGlzIGluaXRpYWxseS4gSXQgbG9va3MgbGlrZSBhIG5ldyBhdHRyaWJ1dGUgYGVuYWJsZV9kZW1hbmRgIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBFREFDIHNjcnViIHN5c2ZzIGludGVyZmFjZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXMgYW55IG90aGVyIGRyaXZlciB1c2luZyB0aGlzIG5ldyBhdHRyaWJ1dGU/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgb3RoZXIgZHJpdmVycyBzZXR0aW5nIGBnZXRfZW5hYmxlZF9vZGAgb3IgYHNldF9lbmFibGVkX29kYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0MTQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDAwOjM3OjAyLjg5MTk2ODE5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg5NjcxMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9lbmFibGVkX29kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZWRhYy9zY3J1Yi5jPTg4PUVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jOjg5OkVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuZHJpdmVycy9lZGFjL3NjcnViLmMtOTAtRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuLS1cXG5kcml2ZXJzL2VkYWMvc2NydWIuYz05Mj1zdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxcbi0tXFxuZHJpdmVycy9lZGFjL3NjcnViLmMtMTI2LVxcdFxcdGlmIChvcHMtXFx1MDAzZWdldF9lbmFibGVkX29kKSB7XFxuZHJpdmVycy9lZGFjL3NjcnViLmM6MTI3OlxcdFxcdFxcdGlmIChvcHMtXFx1MDAzZXNldF9lbmFibGVkX29kKVxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTEyOC1cXHRcXHRcXHRcXHRyZXR1cm4gYS1cXHUwMDNlbW9kZTtcXG4tLVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jPTM4MT1zdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcXG4tLVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTM5Ni1cXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYzozOTc6c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTM5OC17XFxuLS1cXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYz00ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQ5Ni1cXHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jOjQ5NzpcXHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQ5OC1cXHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaD02NzI9ZW51bSBlZGFjX2Rldl9mZWF0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oLTY4Ny0gKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo2ODg6ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxcbmluY2x1ZGUvbGludXgvZWRhYy5oLTY4OS0gKiBAZ2V0X21pbl9jeWNsZTogZ2V0IG1pbmltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaD02OTQ9c3RydWN0IGVkYWNfc2NydWJfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oLTcwMS1cXHRpbnQgKCpnZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo3MDI6XFx0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC03MDMtXFx0aW50ICgqZ2V0X21pbl9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWluKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDA6Mzc6MDUuMzgxNjQ1MTU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3MDQyNDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBuZXcgYHNldF9lbmFibGVkX29kYCBmdW5jdGlvbiBpcyAqb25seSogdXNlZCB3aXRoaW4gYGFjcGlfcmFzMi5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgbmV3IEVEQUMgc2NydWIgYXR0cmlidXRlIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gdGhlIG5ldyBBQ1BJIFJBUzIgZHJpdmVyLiBHaXZlbiB0aGF0LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSBjYW4gZXZlbiAqaGl0KiB0aGlzIGNvZGUuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzLCBcIkNvdWxkIG91ciBmdXp6aW5nIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgc3l6a2FsbGVyLCBwcm92aWRlIGEgcGF0aHdheT9cIiBJIG5lZWQgdG8gY29uc2lkZXIgdGhhdC4gVGhlbiBJIHJlbWVtYmVyZWQgdGhlIEFDUEkgdGFibGUgaW5qZWN0aW9uIG1lY2hhbmlzbSBpbiBzeXprYWxsZXIgdmlhIGBhY3BpX2NvbmZpZ2ZzYC4gSG93ZXZlciwgYSBxdWljayBsb29rIHJldmVhbHMgdGhhdCBgYWNwaV9yYXMyX2luaXRgIGlzIGNhbGxlZCBkaXJlY3RseSBkdXJpbmcgdGhlIGtlcm5lbCdzIGJvb3QtdXAgc2VxdWVuY2UgZnJvbSBgYWNwaV9pbml0YCwgYW5kIGRvZXNuJ3QgYXBwZWFyIHRvIHJlZ2lzdGVyIGl0c2VsZiB0byBiZSBjYWxsZWQgbGF0ZXIuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMuLi4gT2theSwgd2FpdC4uLiBgYWNwaV9uZml0X2luaXRgIGlzIGFsc28gY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAsIGFuZCB0aGF0ICpkb2VzKiByZWdpc3RlciBhbiBBQ1BJIGRyaXZlci4gVGhhdCdzIGEgbW9kdWxlIGluaXQgZnVuY3Rpb24hIGBhY3BpX3JhczJfaW5pdGAgZG9lcyBub3QuIEl0IGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhY3BpX2luaXRgIGFuZCBqdXN0IGNhbGxzIGBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAuLi4pYC4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBBQ1BJIHRhYmxlIGdldHMgbG9hZGVkIGxhdGVyIHZpYSBjb25maWdmcywgYGFjcGlfcmFzMl9pbml0YCB3b24ndCBiZSByZS1leGVjdXRlZC4gSXQncyBzdHJpY3RseSBhIGJvb3QtdGltZSB0aGluZy5cblxuU28sIHJlYWxpc3RpY2FsbHksIHdlIGNhbid0IHRyaWdnZXIgdGhpcyBmdW5jdGlvbmFsaXR5IGluIHN5emthbGxlci5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyB1bnJlYWNoYWJsZSBjb2RlLCB3aGljaCBpcyBoYXJkd2FyZS1kZXBlbmRlbnQgKG5lZWRpbmcgYW4gQUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgaW4gZmlybXdhcmUgYXQgYm9vdCkgYW5kLCBhcyBzdWNoLCB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UuIEkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLCBjaXRpbmcgdGhlc2UgcmVhc29ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2MjcsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDAwOjM3OjEyLjY1MjA3MjExNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gVGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiAoYWNwaV9yYXMyX2luaXQpIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QgKGZyb20gYWNwaV9pbml0KSBhbmQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFDUEkgUkFTMiB0YWJsZS4gU2luY2UgUUVNVS9HQ0UgZG8gbm90IHByb3ZpZGUgdGhpcyBzcGVjaWZpYyBBQ1BJIHRhYmxlIGJ5IGRlZmF1bHQsIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyB0YWJsZSBsb2FkaW5nIChlLmcuLCB2aWEgY29uZmlnZnMpLCB0aGUgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIEFDUEkgUkFTMiBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLiBUaGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIChhY3BpX3JhczJfaW5pdCkgaXMgY2FsbGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCAoZnJvbSBhY3BpX2luaXQpIGFuZCBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgQUNQSSBSQVMyIHRhYmxlLiBTaW5jZSBRRU1VL0dDRSBkbyBub3QgcHJvdmlkZSB0aGlzIHNwZWNpZmljIEFDUEkgdGFibGUgYnkgZGVmYXVsdCwgYW5kIHRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBkeW5hbWljIHRhYmxlIGxvYWRpbmcgKGUuZy4sIHZpYSBjb25maWdmcyksIHRoZSBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow76wht[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 00:12:30 +0000 UTC FinishedAt: 2026-07-06 00:37: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+CgkJCTx0ZD4yMDI2LzA3LzA2IDAwOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gVGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiAoYWNwaV9yYXMyX2luaXQpIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QgKGZyb20gYWNwaV9pbml0KSBhbmQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFDUEkgUkFTMiB0YWJsZS4gU2luY2UgUUVNVS9HQ0UgZG8gbm90IHByb3ZpZGUgdGhpcyBzcGVjaWZpYyBBQ1BJIHRhYmxlIGJ5IGRlZmF1bHQsIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyB0YWJsZSBsb2FkaW5nIChlLmcuLCB2aWEgY29uZmlnZnMpLCB0aGUgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwMDozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQzMWNlMDVkMjFlYWQwZmZkMjdiM2M4ZGNiZmQ1MTNkZWIwYWM5NGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDAwOjM2OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuaW5kZXggYWI2MDE0NzQzZGE1NjguLjJiODc0ZTAzMzYyMzM0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbkBAIC0yMCwxMSAmIzQzOzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcdDYuMTVcbiBDb250YWN0Olx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcbiBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4tXHRcdGZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy5cbi1cdFx0VGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuXG4tXG4tXHRcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcbi1cdFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXG4mIzQzO1x0XHRmb3IgZGVtYW5kIHNjcnViYmluZy5cbiBcbiBXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL3NpemVcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG5AQCAtMzQsNiAmIzQzOzMwLDE0IEBAIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4gXHRcdChvbi1kZW1hbmQgc2NydWJiaW5nKS5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXG4mIzQzO0RhdGU6XHRcdEphbiAyMDI2XG4mIzQzO0tlcm5lbFZlcnNpb246XHQ2LjE5XG4mIzQzO0NvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuJiM0MztEZXNjcmlwdGlvbjpcbiYjNDM7XHRcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcbiYjNDM7XHRcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXG4mIzQzO1xuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmRcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG4gS2VybmVsVmVyc2lvbjpcdDYuMTVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuaW5kZXggMmNmYTc0ZmExZmZkMmYuLjU2MmJmZDZmZjYzMDUxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuQEAgLTM0MCwzICYjNDM7MzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXG4gXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxuJiM0MztcbiYjNDM7My4gQUNQSSBSQVMyIEhhcmR3YXJlLWJhc2VkIE1lbW9yeSBTY3J1YmJpbmdcbiYjNDM7XG4mIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxuJiM0MztcbiYjNDM7My4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cbiYjNDM7XG4mIzQzO0FwcGxpY2FibGUgdG8gYm90aCBkZW1hbmQgYW5kIGJhY2tncm91bmQgc2NydWJiaW5nLiBUaGUgdW5pdCBvZiB0aGVcbiYjNDM7c2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cbiYjNDM7XG4mIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszNjAwMFxuJiM0MztcbiYjNDM7My4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXG4mIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7MzYwMFxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7ODY0MDBcbiYjNDM7XG4mIzQzOzMuMS40LiBQcm9ncmFtIHNjcnViYmluZyBmb3IgdGhlIG1lbW9yeSByZWdpb24gaW4gUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGV2ZXJ5XG4mIzQzOzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxuJiM0MztcbiYjNDM7IyBlY2hvIDQzMjAwIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7My4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxuJiM0MztcbiYjNDM7U2V0ICYjMzk7YWRkciYjMzk7IG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxuJiM0MztcbiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXG4mIzQzO1xuJiM0MztTZXQgJiMzOTtzaXplJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMHgyMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXG4mIzQzO1xuJiM0MzszLjEuNi4gU3RhcnQgJiMzOTtkZW1hbmQgc2NydWJiaW5nJiMzOTsuXG4mIzQzO1xuJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuJiM0Mzt3aWxsIGJlIHN0b3BwZWQgYW5kIHRoZW4gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZVxuJiM0MztkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cbiYjNDM7XG4mIzQzOyMgZWNobyAxIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuJiM0MztcbiYjNDM7My4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxuJiM0MztcbiYjNDM7My4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcbiYjNDM7c2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMjE2MDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszLjIuMy4gU3RhcnQgJiMzOTtiYWNrZ3JvdW5kIHNjcnViYmluZyYjMzk7LlxuJiM0MztcbiYjNDM7IyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuQEAgLTI5NCw2ICYjNDM7Mjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXG4gXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiBcbiYjNDM7Y29uZmlnIEFDUElfUkFTMlxuJiM0MztcdGJvb2wgXCYjMzQ7QUNQSSBSQVMyIGRyaXZlclwmIzM0O1xuJiM0MztcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4mIzQzO1x0ZGVwZW5kcyBvbiBNQUlMQk9YXG4mIzQzO1x0ZGVwZW5kcyBvbiBQQ0NcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxuJiM0MztcdCAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cbiYjNDM7XG4gY29uZmlnIEFDUElfUFJPQ0VTU09SXG4gXHR0cmlzdGF0ZSBcJiMzNDtQcm9jZXNzb3JcJiMzNDtcbiBcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbkBAIC0xMDUsNiAmIzQzOzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpXHQmIzQzOz0gZWNfc3lzLm9cbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVx0XHQmIzQzOz0gYmdydC5vXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXHQmIzQzOz0gY3BwY19hY3BpLm9cbiBvYmotJChDT05GSUdfQUNQSV9TUENSX1RBQkxFKVx0JiM0Mzs9IHNwY3Iub1xuJiM0MztvYmotJChDT05GSUdfQUNQSV9SQVMyKVx0XHQmIzQzOz0gcmFzMi5vXG4gb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgJiM0Mzs9IGFjcGlfZGJnLm9cbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcdCYjNDM7PSBwcHR0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcdCYjNDM7PSBwZnJfdXBkYXRlLm8gcGZyX3RlbGVtZXRyeS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jXG5pbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuY1xuQEAgLTMxLDYgJiM0MzszMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYWNwaS9hcGVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm10LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG5AQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuIFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XG4gXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XG4gXHRhY3BpX3Zpb3RfaW5pdCgpO1xuJiM0MztcdGFjcGlfcmFzMl9pbml0KCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE5ZWNiZTdjODE5OWJiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5AQCAtMCwwICYjNDM7MSw1MDMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBTdXBwb3J0IGZvciBSQVMyIHRhYmxlIC0gQUNQSSA2LjUgU3BlY2lmaWNhdGlvbiwgc2VjdGlvbiA1LjIuMjEsIHdoaWNoXG4mIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxuJiM0MzsgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXG4mIzQzOyAqIFBDQyBjaGFubmVsIHN1YnNwYWNlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyN1bmRlZiBwcl9mbXRcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtBQ1BJIFJBUzI6IFwmIzM0OyBmbXRcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3BjYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbiYjNDM7ICogQG1ib3hfY2xpZW50Olx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxuJiM0MzsgKiBAcGNjX2NoYW46XHRcdFBvaW50ZXIgdG8gc3RydWN0IHBjY19tYm94X2NoYW5cbiYjNDM7ICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAZWxlbTpcdFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xuJiM0MzsgKiBAcGNjX2xvY2s6XHRcdFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuJiM0MzsgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIEBkZWFkbGluZV91czpcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xuJiM0MzsgKlx0XHRcdGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uXG4mIzQzOyAqIEBwY2NfbXBhcjpcdFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXG4mIzQzOyAqIEBwY2NfbXJ0dDpcdFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXG4mIzQzOyAqXHRcdFx0T1MgbXVzdCB3YWl0IGFmdGVyIGNvbXBsZXRpb24gb2YgYSBQQ0MgY29tbWFuZCBiZWZvcmVcbiYjNDM7ICpcdFx0XHRpc3N1aW5nIG5leHQgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9tcGFyX3Jlc2V0Olx0VGltZSBvZiBsYXN0IE1QQVIgY291bnQgcmVzZXRcbiYjNDM7ICogQG1wYXJfY291bnQ6XHRcdE1QQVIgY291bnRcbiYjNDM7ICogQHBjY19pZDpcdFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcbiYjNDM7ICogQGxhc3RfY21kOlx0XHRMYXN0IFBDQyBjb21tYW5kXG4mIzQzOyAqIEBrcmVmOlx0XHRrcmVmIG9iamVjdFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJhczJfc3NwY2Mge1xuJiM0MztcdHN0cnVjdCBtYm94X2NsaWVudFx0XHRtYm94X2NsaWVudDtcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhblx0XHQqcGNjX2NoYW47XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdFx0ZWxlbTtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwY2NfbG9jaztcbiYjNDM7XHR1NjRcdFx0XHRcdGRlYWRsaW5lX3VzO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcGFyO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcnR0O1xuJiM0MztcdGt0aW1lX3RcdFx0XHRcdGxhc3RfY21kX2NtcGxfdGltZTtcbiYjNDM7XHRrdGltZV90XHRcdFx0XHRsYXN0X21wYXJfcmVzZXQ7XG4mIzQzO1x0aW50XHRcdFx0XHRtcGFyX2NvdW50O1xuJiM0MztcdGludFx0XHRcdFx0cGNjX2lkO1xuJiM0MztcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4mIzQzO1x0c3RydWN0IGtyZWZcdFx0XHRrcmVmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXG4mIzQzOyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxuJiM0MzsjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXG4mIzQzOyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcbiYjNDM7XG4mIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1x0dTMyIGNhcF9zdGF0dXM7XG4mIzQzO1x0dTE2IHN0YXR1cztcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxuJiM0MztcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuJiM0MztcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuJiM0MztcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbiYjNDM7XHQgKiBiaXQgaXMgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbiYjNDM7XHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG4mIzQzO1x0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCk7XG4mIzQzO1x0XHRzdGF0dXMgXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcbiYjNDM7XHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiYjNDM7XHRcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cbiYjNDM7XHRybWIoKTtcbiYjNDM7XHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xuJiM0MztcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxuJiM0MztcdFx0cmMgPSAtRVBFUk07XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9CVVNZOlxuJiM0MztcdFx0cmMgPSAtRUJVU1k7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XG4mIzQzO1x0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4mIzQzO1x0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmMgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXG4mIzQzOyAqIEByYXMyX2N0eDpcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4mIzQzO1x0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcdHM2NCB0aW1lX2RlbHRhO1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHNzcGNjID0gcmFzMl9jdHgtXHUwMDNlc3NwY2M7XG4mIzQzO1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XG4mIzQzO1x0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4mIzQzO1x0ICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZlxuJiM0MztcdCAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHR0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSk7XG4mIzQzO1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4mIzQzO1x0XHRcdGZzbGVlcChzc3BjYy1cdTAwM2VwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGVcbiYjNDM7XHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuJiM0MztcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXG4mIzQzO1x0ICogbGltaXRhdGlvbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcbiYjNDM7XHQgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGVcbiYjNDM7XHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4mIzQzO1x0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxuJiM0MztcdCAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXBhcikge1xuJiM0MztcdFx0aWYgKCFzc3BjYy1cdTAwM2VtcGFyX2NvdW50KSB7XG4mIzQzO1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbiYjNDM7XHRcdFx0aWYgKCh0aW1lX2RlbHRhIFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXHUwMDI2XHUwMDI2IHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xuJiM0MztcdFx0XHRcdGRldl9kYmcocmFzMl9jdHgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7UENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdFwmIzM0OywgY21kKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRzc3BjYy1cdTAwM2VsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTtcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudC0tO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xuJiM0MztcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4mIzQzO1xuJiM0MztcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xuJiM0MztcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdC8qIFJpbmcgZG9vcmJlbGwgKi9cbiYjNDM7XHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxuJiM0MztcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcXG5cJiMzNDssIGNtZCwgcmMpO1xuJiM0MztcdFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXG4mIzQzO1x0XHR2YWwgPSBpb3JlYWQxNihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4mIzQzO1x0XHRpb3dyaXRlMTYodmFsLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJjID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjLVx1MDAzZWxhc3RfY21kID0gY21kO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxuJiM0MztcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcbiYjNDM7XHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbiYjNDM7XHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dClcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBjY19jaGFubmVsLVx1MDAzZW1ib3gtXHUwMDNldHhkb25lX2lycSlcbiYjNDM7XHRcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCYjMzQ7YWNwaV9yYXMyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfbGlzdF9wY2NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJhczJfc3NwY2MsIGtyZWYpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbiYjNDM7XHRsaXN0X2RlbChcdTAwMjZzc3BjYy1cdTAwM2VlbGVtKTtcbiYjNDM7XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuJiM0MztcdGtmcmVlKHNzcGNjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuJiM0Mzt7XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2c3NwY2MtXHUwMDNla3JlZiwgIFx1MDAyNnJhczJfbGlzdF9wY2NfcmVsZWFzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcmFzMl9zc3BjYyAqcmFzMl9zc3BjY19nZXQoaW50IHBjY19pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShzc3BjYywgXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xuJiM0MztcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2c3NwY2MtXHUwMDNla3JlZikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBzc3BjYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XG4mIzQzO1x0aWYgKHBjY19pZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7XG4mIzQzO1x0aWYgKHNzcGNjKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9XG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlcGNjX2xvY2tcdD0gXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2s7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFzc3BjYylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuJiM0MztcdFx0a2ZyZWUoc3NwY2MpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSkge1xuJiM0MztcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHBjY19jaGFuKTtcbiYjNDM7XHRcdGtmcmVlKHNzcGNjKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19jaGFuXHRcdD0gcGNjX2NoYW47XG4mIzQzO1x0c3NwY2MtXHUwMDNlY29tbV9hZGRyXHQ9IHBjY19jaGFuLVx1MDAzZXNobWVtO1xuJiM0MztcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cdTAwM2VsYXRlbmN5O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19tcnR0XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VwY2NfbXBhclx0XHQ9IHBjY19jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PSBwY2NfY2hhbi1cdTAwM2VtY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlcGNjX2xvY2tcdD0gXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2ID0gdG9fYXV4aWxpYXJ5X2RldihkZXZpY2UpO1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XG4mIzQzO1xuJiM0MztcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBhdXhkZXYtXHUwMDNlaWQpO1xuJiM0MztcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVx1MDAzZXNzcGNjKTtcbiYjNDM7XHRrZnJlZShyYXMyX2N0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcmFzMl9tZW1fY3R4ICphZGRfYXV4X2RldmljZShjaGFyICpuYW1lLCBpbnQgY2hhbm5lbCwgdTMyIHB4bV9pbnN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4mIzQzO1x0dTMyIGNvbXBfbmlkO1xuJiM0MztcdGludCBpZCwgcmM7XG4mIzQzO1xuJiM0MztcdGNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpO1xuJiM0MztcdGlmIChjb21wX25pZCA9PSBOVU1BX05PX05PREUpIHtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ludmFsaWQgTlVNQSBub2RlLCBjaGFubmVsPSVkIHB4bV9pbnN0PSVkXFxuXCYjMzQ7LCBjaGFubmVsLCBweG1faW5zdCk7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHggPSBremFsbG9jKHNpemVvZigqcmFzMl9jdHgpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCA9IGNvbXBfbmlkO1xuJiM0MztcbiYjNDM7XHRyYyA9IHJlZ2lzdGVyX3BjY19jaGFubmVsKHJhczJfY3R4LCBjaGFubmVsKTtcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQQ0MgY2hhbm5lbD0lZCBweG1faW5zdD0lZCByYz0lZFxcblwmIzM0OywgY2hhbm5lbCxcbiYjNDM7XHRcdFx0IHB4bV9pbnN0LCByYyk7XG4mIzQzO1x0XHRnb3RvIGN0eF9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWQgPSBpZGFfYWxsb2MoXHUwMDI2cmFzMl9pZGEsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmIChpZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cmMgPSBpZDtcbiYjNDM7XHRcdGdvdG8gcGNjX2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2LmlkXHRcdD0gaWQ7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlYWRldi5uYW1lXHRcdD0gbmFtZTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2LmRldi5yZWxlYXNlXHQ9IHJhczJfcmVsZWFzZTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2LmRldi5wYXJlbnRcdD0gcmFzMl9jdHgtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRnb3RvIGlkYV9mcmVlO1xuJiM0MztcbiYjNDM7XHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfYWRkKFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihyYyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmFzMl9jdHg7XG4mIzQzO1xuJiM0MztpZGFfZnJlZTpcbiYjNDM7XHRpZGFfZnJlZShcdTAwMjZyYXMyX2lkYSwgaWQpO1xuJiM0MztwY2NfZnJlZTpcbiYjNDM7XHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cdTAwM2Vzc3BjYyk7XG4mIzQzO2N0eF9mcmVlOlxuJiM0MztcdGtmcmVlKHJhczJfY3R4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIocmMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZW1vdmVfYXV4X2RldmljZShzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbiYjNDM7e1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBhcnNlX3JhczJfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0O1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4mIzQzO1x0dTE2IHRvdF90YmxfbGVuO1xuJiM0MztcdHUxNiBpO1xuJiM0MztcbiYjNDM7XHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2Mgc2l6ZW9mKCpyYXMyX3RhYikpIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRvdF90YmxfbGVuID0gc2l6ZW9mKCpyYXMyX3RhYikgJiM0MzsgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyAqIHNpemVvZigqcGNjX2Rlc2NfbGlzdCk7XG4mIzQzO1x0aWYgKHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIHRvdF90YmxfbGVuKSB7XG4mIzQzO1x0XHRwcl93YXJuKEZXX1dBUk4gXCYjMzQ7UkFTMiB0YWJsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gUENDIGRlc2NzPSVkIHNpemU9JXUpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGN0eF9saXN0ID0ga2NhbGxvYyhyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcGN0eF9saXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiAmIzQzOyAxKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzOyBpJiM0MzsmIzQzOywgcGNjX2Rlc2NfbGlzdCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwY2NfZGVzY19saXN0LVx1MDAzZWZlYXR1cmVfdHlwZSAhPSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtXHUwMDNlY2hhbm5lbF9pZCxcbiYjNDM7XHRcdFx0XHRcdCAgcGNjX2Rlc2NfbGlzdC1cdTAwM2VpbnN0YW5jZSk7XG4mIzQzO1x0XHQvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi9cbiYjNDM7XHRcdGlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChJU19FUlIocmFzMl9jdHgpKSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXFxuXCYjMzQ7LCBQVFJfRVJSKHJhczJfY3R4KSk7XG4mIzQzO1x0XHRcdGZvciAoOyBpIFx1MDAzZSAwOyBpLS0pIHtcbiYjNDM7XHRcdFx0XHRpZiAocGN0eF9saXN0W2kgLSAxXSlcbiYjNDM7XHRcdFx0XHRcdHJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGtmcmVlKHBjdHhfbGlzdCk7XG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKHJhczJfY3R4KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHBjdHhfbGlzdFtpXSA9IHJhczJfY3R4O1xuJiM0MztcdH1cbiYjNDM7XHRrZnJlZShwY3R4X2xpc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEV4dHJhY3RzIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHJldHJpZXZlcyBJRCBmb3IgdGhlIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhblxuJiM0MzsgKiBhdXhpbGlhcnkgZGV2aWNlLCB3aGljaCBiaW5kcyB0byB0aGUgbWVtb3J5IEFDUEkgUkFTMiBkcml2ZXIsIGZvciBlYWNoIFJBUzJcbiYjNDM7ICogbWVtb3J5IGZlYXR1cmUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IG5vbmUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7XG4mIzQzO1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAwLCAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKVx1MDAyNnJhczJfdGFiKTtcbiYjNDM7XHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxuXCYjMzQ7LCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGFyc2VfcmFzMl90YWJsZShyYXMyX3RhYikpXG4mIzQzO1x0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gcGFyc2UgUkFTMiB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG5pbmRleCBmOWQwMmFmMmZjM2EyMC4uZjNiOWEyZjA0OTUwMGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7XG4gXHRTQ1JVQl9BRERSRVNTLFxuIFx0U0NSVUJfU0laRSxcbiBcdFNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELFxuJiM0MztcdFNDUlVCX0VOQUJMRV9ERU1BTkQsXG4gXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sXG5AQCAtNTUsNiAmIzQzOzU2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXHRcdFx0XFxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhhZGRyLCByZWFkX2FkZHIsIHU2NCwgXCYjMzQ7MHglbGx4XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcJiMzNDsweCVsbHhcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCBcJiMzNDsldVxcblwmIzM0OylcbiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCBcJiMzNDsldVxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtYXhfY3ljbGVfZHVyYXRpb24sIGdldF9tYXhfY3ljbGUsIHUzMiwgXCYjMzQ7JXVcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuQEAgLTg0LDYgJiM0Mzs4Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShhZGRyLCB3cml0ZV9hZGRyLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4mIzQzO0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcbkBAIC0xMTksNiAmIzQzOzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludFxuIFx0XHRcdFx0cmV0dXJuIDA0NDQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOlxuJiM0MztcdFx0aWYgKG9wcy1cdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xuJiM0MztcdFx0XHRpZiAob3BzLVx1MDAzZXNldF9lbmFibGVkX29kKVxuJiM0MztcdFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT046XG4gXHRcdGlmIChvcHMtXHUwMDNlZ2V0X21pbl9jeWNsZSlcbiBcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuQEAgLTE2NCw2ICYjNDM7MTc1LDcgQEAgc3RhdGljIGludCBzY3J1Yl9jcmVhdGVfZGVzYyhzdHJ1Y3QgZGV2aWNlICpzY3J1Yl9kZXYsXG4gXHRcdFtTQ1JVQl9BRERSRVNTXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhhZGRyLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9TSVpFXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhzaXplLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9FTkFCTEVfQkFDS0dST1VORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2JhY2tncm91bmQsIGluc3RhbmNlKSxcbiYjNDM7XHRcdFtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvS2NvbmZpZyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL0tjb25maWdcbkBAIC00Niw0ICYjNDM7NDYsMTcgQEAgY29uZmlnIFJBU19GTVBNXG4gXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXG4gXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxuIFxuJiM0Mztjb25maWcgTUVNX0FDUElfUkFTMlxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O01lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBBQ1BJX1JBUzJcbiYjNDM7XHRkZXBlbmRzIG9uIEVEQUNcbiYjNDM7XHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcbiYjNDM7XHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk9cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcbiYjNDM7XHQgIGZlYXR1cmUgdGFibGUgcGFyc2VyLiBUaGUgZHJpdmVyIHVzZXMgYSBQQ0MgY2hhbm5lbCBzdWJzcGFjZSB0b1xuJiM0MztcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXG4mIzQzO1x0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxuJiM0MztcdCAgdGhyb3VnaCB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuXG4mIzQzO1xuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuaW5kZXggMTFmOTVkNTlkMzk3MmQuLmEwZTZlOTAzZDZiMDliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gb2JqLSQoQ09ORklHX1JBUylcdCYjNDM7PSByYXMub1xuIG9iai0kKENPTkZJR19ERUJVR19GUylcdCYjNDM7PSBkZWJ1Z2ZzLm9cbiBvYmotJChDT05GSUdfUkFTX0NFQylcdCYjNDM7PSBjZWMub1xuJiM0MztvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMilcdCYjNDM7PSBhY3BpX3JhczIub1xuIFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcdCYjNDM7PSBhbWQvZm1wbS5vXG4gb2JqLXlcdFx0XHQmIzQzOz0gYW1kL2F0bC9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJhN2RlMjI2ZWM4NTkyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xuQEAgLTAsMCAmIzQzOzEsNTg5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuJiM0MzsgKlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyN1bmRlZiBwcl9mbXRcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KVx0XCYjMzQ7QUNQSSBSQVMyIE1FTU9SWTogXCYjMzQ7IGZtdFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VkYWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiBCSVQoMClcbiYjNDM7I2RlZmluZSBSQVMyX1RZUEVfUEFUUk9MX1NDUlVCIDB4MDAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUyAweDAxXG4mIzQzOyNkZWZpbmUgUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIgMHgwMlxuJiM0MzsjZGVmaW5lIFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIgMHgwM1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUkFTMiBwYXRyb2wgc2NydWJcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfSU5fTUFTSyBHRU5NQVNLKDE1LCA4KVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfRU5fQkFDS0dST1VORCBCSVQoMClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDcsIDApXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HIEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX1NDUlVCX05BTUVfTEVOIDEyOFxuJiM0MzsjZGVmaW5lIFJBUzJfSE9VUl9JTl9TRUNTIDM2MDBcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSB7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqY29tbW9uID0gKHZvaWQgKilyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0aW93cml0ZTgoMCwgXHUwMDI2Y29tbW9uLVx1MDAzZXNldF9jYXBzWzBdKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGlvcmVhZDgoXHUwMDI2Y29tbW9uLVx1MDAzZWZlYXR1cmVzWzBdKSBcdTAwMjYgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbiYjNDM7XHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdHUzMiBzY3J1Yl9wYXJhbXNfb3V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2NydWJfcGFyYW1zX291dCA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfb3V0KTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuJiM0MztcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1Yikge1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSAwO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICAoaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmZsYWdzKSBcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gdHJ1ZTtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuJiM0MztcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VvZF9zY3J1Yikge1xuJiM0MztcdFx0KnJ1bm5pbmcgPSBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiYjNDM7XHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KnJ1bm5pbmcgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORztcbiYjNDM7XHRpZiAoISgqcnVubmluZykpXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX3NjcnViX21vbml0b3JfdGhyZWFkKHZvaWQgKnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICopcDtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcbiYjNDM7XHRcdGlmICghcmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZygpIGZhaWxzIGhlcmUsIHJlLWVuYWJsaW5nIGJhY2tncm91bmRcbiYjNDM7XHRcdCAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSxcbiYjNDM7XHRcdCAqIHRoZSBhZG1pbiBvciBmaXJtd2FyZSBtYXkgbmVlZCB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YmJpbmdcbiYjNDM7XHRcdCAqIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFydW5uaW5nKSB7XG4mIzQzO1x0XHRcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC1cdTAwM2VkZXYsIHJhczJfY3R4LCB0cnVlKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRkZXZfZXJyKHJhczJfY3R4LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgYmFja2dyb3VuZCBzY3J1YiByZXQ9JWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1xuJiM0MztcdFx0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdFx0bXNsZWVwKDEwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQqbWluID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdCptYXggPSByYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2VjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0KnNjcnViX2N5Y2xlX3NlY3MgPSByYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcylcbiYjNDM7e1xuJiM0MztcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNjcnViX2N5Y2xlX2hycyBcdTAwM2MgcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlIHx8XG4mIzQzO1x0ICAgIHNjcnViX2N5Y2xlX2hycyBcdTAwM2UgcmFzMl9jdHgtXHUwMDNlbWF4X3NjcnViX2N5Y2xlKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHNjcnViX2N5Y2xlX2hycztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLlxuJiM0MztcdCAqIFJldHVybiAtRUJVU1kgbm93IHVubGVzcyBmaW5kIG91dCBhIG1ldGhvZCB0byByZXRyaWV2ZSBhY3R1YWwgZnVsbCBQQSByYW5nZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0KmJhc2UgPSByYXMyX2N0eC1cdTAwM2ViYXNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCpzaXplID0gcmFzMl9jdHgtXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IGJhc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQqZW5hYmxlZCA9IHJhczJfY3R4LVx1MDAzZWJnX3NjcnViO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiYjNDM7XHRpZiAoZW5hYmxlKSB7XG4mIzQzO1x0XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIgfHwgcnVubmluZylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdFx0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbiYjNDM7XHRcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XG4mIzQzO1x0XHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7XHRcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfRU5fQkFDS0dST1VORCwgZW5hYmxlKTtcbiYjNDM7XHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gJXMgYmFja2dyb3VuZCBzY3J1YmJpbmdcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiA9IGVuYWJsZTtcbiYjNDM7XHRpZiAoZW5hYmxlKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0LyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovXG4mIzQzO1x0XHRyZXR1cm4gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBlbmFibGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQqZW5hYmxlZCA9IHJ1bm5pbmc7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuJiM0MztcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4mIzQzO1x0Ym9vbCBydW5uaW5nO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZW5hYmxlKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocnVubmluZylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdC8qIFN0b3AgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZFxuJiM0MztcdCAqIHdpdGggKGJhc2UgJiM0Mzsgc2l6ZSkgXHUwMDNlIChtZW1fYmFzZSAmIzQzOyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGFcbiYjNDM7XHQgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VzaXplIHx8IHJhczJfY3R4LVx1MDAzZWJhc2UgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7JXM6IEludmFsaWQgYWRkcmVzcyByYW5nZSwgYmFzZT0weCVsbHggc2l6ZT0weCVsbHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdF9fZnVuY19fLCByYXMyX2N0eC1cdTAwM2ViYXNlLCByYXMyX2N0eC1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdHJldCA9IC1FUkFOR0U7XG4mIzQzO1x0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuJiM0MztcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2ViYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VzaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuJiM0MztcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSAwO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBlbmFibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgXHUwMDI2XHUwMDI2IHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgXHUwMDI2XHUwMDI2ICFyYXMyX2N0eC1cdTAwM2V0aHJlYWQpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQsIHJhczJfY3R4LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3JhczJfc2NydWJfbmlkJWRcJiMzNDssIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHJhczJfY3R4LVx1MDAzZXRocmVhZCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBJZiBrdGhyZWFkX3J1bigpIGZhaWxzIGFuZCB0aGUgZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBydW5uaW5nLFxuJiM0MztcdFx0XHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyBhZG1pbi9maXJtd2FyZSBtYXkgbmVlZFxuJiM0MztcdFx0XHQgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO2VuYWJsZV9iZ19zY3J1YjpcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHRfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xuJiM0MztcdC5yZWFkX2FkZHIgPSByYXMyX2h3X3NjcnViX3JlYWRfYWRkcixcbiYjNDM7XHQucmVhZF9zaXplID0gcmFzMl9od19zY3J1Yl9yZWFkX3NpemUsXG4mIzQzO1x0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXG4mIzQzO1x0LndyaXRlX3NpemUgPSByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUsXG4mIzQzO1x0LmdldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyxcbiYjNDM7XHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxuJiM0MztcdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXG4mIzQzO1x0LnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCxcbiYjNDM7XHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXG4mIzQzO1x0LmdldF9tYXhfY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlLFxuJiM0MztcdC5nZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQsXG4mIzQzO1x0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlID0gZmFsc2U7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXRocmVhZCkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdGt0aHJlYWRfc3RvcChyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XG4mIzQzO1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBudW1fc3Bhbm5lZF9wYWdlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHJpZXZlIHRoZSBQQSByYW5nZSBvZiB0aGUgTlVNQSBkb21haW4gYW5kIHVzZSBpdCBhcyB0aGVcbiYjNDM7XHQgKiAmIzM5O1JlcXVlc3RlZCBBZGRyZXNzIFJhbmdlJiMzOTssIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmRcbiYjNDM7XHQgKiBHRVRfUEFUUk9MX1BBUkFNRVRFUlMgdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzXG4mIzQzO1x0ICogaW4gdGhlIE5VTUEgZG9tYWluIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSXG4mIzQzO1x0ICogdG8gc3RhcnQgdGhlIGRlbWFuZCBzY3J1YmJpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbiYjNDM7XHRudW1fc3Bhbm5lZF9wYWdlcyA9IG5vZGVfc3Bhbm5lZF9wYWdlcyhyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuJiM0MztcdGlmICghbnVtX3NwYW5uZWRfcGFnZXMpIHtcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcXG5cJiMzNDssIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlbWVtX3NpemUgPSAodTY0KW51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyBcdTAwM2UgcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlKVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3ByaW50ZihzY3J1Yl9uYW1lLCBcJiMzNDthY3BpX3Jhc19tZW0lZFwmIzM0OywgYXV4ZGV2LVx1MDAzZWlkKTtcbiYjNDM7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLmZ0X3R5cGVcdD0gUkFTX0ZFQVRfU0NSVUI7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4mIzQzO1x0cmFzX2ZlYXR1cmVzLnNjcnViX29wc1x0PSBcdTAwMjZyYXMyX3NjcnViX29wcztcbiYjNDM7XHRyYXNfZmVhdHVyZXMuY3R4XHQ9IHJhczJfY3R4O1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbiYjNDM7XHR7IC5uYW1lID0gUkFTMl9BVVhfREVWX05BTUUgXCYjMzQ7LlwmIzM0OyBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcbiYjNDM7XHR7IH1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcbiYjNDM7XHQubmFtZSA9IFJBUzJfTUVNX0RFVl9JRF9OQU1FLFxuJiM0MztcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcbiYjNDM7XHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcbiYjNDM7XHQuaWRfdGFibGUgPSByYXMyX21lbV9kZXZfaWRfdGFibGUsXG4mIzQzO307XG4mIzQzO21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7XG4mIzQzO1xuJiM0MztNT0RVTEVfSU1QT1JUX05TKFwmIzM0O0FDUElfUkFTMlwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWM3NWIwMzA3ZmE5Y2Ncbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbkBAIC0wLDAgJiM0MzsxLDg2IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogQUNQSSBSQVMyIChSQVMgRmVhdHVyZSBUYWJsZSkgbWV0aG9kcy5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9BQ1BJX1JBUzJfSFxuJiM0MzsjZGVmaW5lIF9BQ1BJX1JBUzJfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2F1eGlsaWFyeV9idXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IGRldmljZTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MjogUENDIGNvbW1hbmQgY29kZXMgdXNlZCBieVxuJiM0MzsgKiBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUENDX0NNRF9FWEVDX1JBUzIgMHgwMVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcJiMzNDtyYXMyXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXCYjMzQ7YWNwaV9yYXMyX21lbVwmIzM0O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlc1xuJiM0MzsgKiBAYWRldjpcdFx0QXV4aWxpYXJ5IGRldmljZSBvYmplY3RcbiYjNDM7ICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAZGV2Olx0XHRQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQ1xuJiM0MzsgKiBAc3NwY2M6XHRcdFBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4mIzQzOyAqIEBwY2NfbG9jazpcdFx0UG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcbiYjNDM7ICpcdFx0XHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuJiM0MzsgKiBAc3lzX2NvbXBfbmlkOlx0Tm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZVxuJiM0MzsgKlx0XHRcdGlzIGFzc29jaWF0ZWQgd2l0aC4gU2VlIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MDogUkFTMlxuJiM0MzsgKlx0XHRcdFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCBEZXNjcmlwdG9yIGZvcm1hdCxcbiYjNDM7ICpcdFx0XHRGaWVsZDogSW5zdGFuY2VcbiYjNDM7ICogQG1lbV9iYXNlOlx0XHRCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2VcbiYjNDM7ICpcdFx0XHRvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW5cbiYjNDM7ICogQG1lbV9zaXplXHRcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuJiM0MzsgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuJiM0MzsgKiBAYmFzZTpcdFx0QmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4mIzQzOyAqIEBzaXplOlx0XHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4mIzQzOyAqIEBzY3J1Yl9jeWNsZV9ocnM6XHRDdXJyZW50IHNjcnViIHJhdGUgaW4gaG91cnNcbiYjNDM7ICogQHNldF9zY3J1Yl9jeWNsZTpcdFNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzXG4mIzQzOyAqIEBtaW5fc2NydWJfY3ljbGU6XHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4mIzQzOyAqIEBtYXhfc2NydWJfY3ljbGU6XHRNYXhpbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4mIzQzOyAqIEBvZF9zY3J1YjpcdFx0U3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcgKG1lbW9yeSByZWdpb24pXG4mIzQzOyAqIEBiZ19zY3J1YjpcdFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xuJiM0MzsgKiBAcmVlbmFibGVfYmdfc2NydWI6XHRGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZFxuJiM0MzsgKlx0XHRcdHNjcnViYmluZyBpcyBmaW5pc2hlZFxuJiM0MzsgKiBAdGhyZWFkOlx0XHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXG4mIzQzOyAqIEBkcml2ZXJfYWN0aXZlOlx0RmxhZyBpbmRpY2F0ZXMgUkFTMiBtZW1vcnkgZHJpdmVyIGlzIGFjdGl2ZS9yZW1vdmVkXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcmFzMl9tZW1fY3R4IHtcbiYjNDM7XHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZVx0XHRhZGV2O1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbVx0KmNvbW1fYWRkcjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlXHRcdFx0KmRldjtcbiYjNDM7XHR2b2lkXHRcdFx0XHQqc3NwY2M7XG4mIzQzO1x0c3RydWN0IG11dGV4XHRcdFx0KnBjY19sb2NrO1xuJiM0MztcdHUzMlx0XHRcdFx0c3lzX2NvbXBfbmlkO1xuJiM0MztcdHU2NFx0XHRcdFx0bWVtX2Jhc2U7XG4mIzQzO1x0dTY0XHRcdFx0XHRtZW1fc2l6ZTtcbiYjNDM7XHR1NjRcdFx0XHRcdGJhc2U7XG4mIzQzO1x0dTY0XHRcdFx0XHRzaXplO1xuJiM0MztcdHU4XHRcdFx0XHRzY3J1Yl9jeWNsZV9ocnM7XG4mIzQzO1x0dThcdFx0XHRcdHNldF9zY3J1Yl9jeWNsZTtcbiYjNDM7XHR1OFx0XHRcdFx0bWluX3NjcnViX2N5Y2xlO1xuJiM0MztcdHU4XHRcdFx0XHRtYXhfc2NydWJfY3ljbGU7XG4mIzQzO1x0Ym9vbFx0XHRcdFx0b2Rfc2NydWI7XG4mIzQzO1x0Ym9vbFx0XHRcdFx0Ymdfc2NydWI7XG4mIzQzO1x0Ym9vbFx0XHRcdFx0cmVlbmFibGVfYmdfc2NydWI7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0XHRcdCp0aHJlYWQ7XG4mIzQzO1x0Ym9vbFx0XHRcdFx0ZHJpdmVyX2FjdGl2ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXG4mIzQzO3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpO1xuJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRhYy5oIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcbmluZGV4IGU2YjRlNTExMzBlNWZmLi5iZTRmNmU1MmVhMzhhMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuQEAgLTY4NCw2ICYjNDM7Njg0LDggQEAgZW51bSBlZGFjX2Rldl9mZWF0IHtcbiAgKiBAd3JpdGVfc2l6ZTogc2V0IG9mZnNldCBvZiB0aGUgc2NydWJiaW5nIHJhbmdlLlxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cbiAgKiBAc2V0X2VuYWJsZWRfYmc6IHN0YXJ0IG9yIHN0b3AgYSBiZy1zY3J1Yi5cbiYjNDM7ICogQGdldF9lbmFibGVkX29kOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBkZW1hbmQgc2NydWIuXG4mIzQzOyAqIEBzZXRfZW5hYmxlZF9vZDogc3RhcnQgb3Igc3RvcCBhIGRlbWFuZC1zY3J1Yi5cbiAgKiBAZ2V0X21pbl9jeWNsZTogZ2V0IG1pbmltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuICAqIEBnZXRfY3ljbGVfZHVyYXRpb246IGdldCBjdXJyZW50IHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG5AQCAtNjk2LDYgJiM0Mzs2OTgsOCBAQCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xuIFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xuIFx0aW50ICgqZ2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4gXHRpbnQgKCpzZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuJiM0MztcdGludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xuJiM0MztcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4gXHRpbnQgKCpnZXRfbWluX2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptaW4pO1xuIFx0aW50ICgqZ2V0X21heF9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWF4KTtcbiBcdGludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDA6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIEFDUEkgUkFTMiBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLiBUaGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIChhY3BpX3JhczJfaW5pdCkgaXMgY2FsbGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCAoZnJvbSBhY3BpX2luaXQpIGFuZCBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgQUNQSSBSQVMyIHRhYmxlLiBTaW5jZSBRRU1VL0dDRSBkbyBub3QgcHJvdmlkZSB0aGlzIHNwZWNpZmljIEFDUEkgdGFibGUgYnkgZGVmYXVsdCwgYW5kIHRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBkeW5hbWljIHRhYmxlIGxvYWRpbmcgKGUuZy4sIHZpYSBjb25maWdmcyksIHRoZSBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMzFjZTA1ZDIxZWFkMGZmZDI3YjNjOGRjYmZkNTEzZGViMGFjOTRmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgNiAwMDozNjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgppbmRleCBhYjYwMTQ3NDNkYTU2OC4uMmI4NzRlMDMzNjIzMzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIKQEAgLTIwLDExICYjNDM7MjAsNyBAQCBLZXJuZWxWZXJzaW9uOgk2LjE1CiBDb250YWN0OglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwogRGVzY3JpcHRpb246CiAJCShSVykgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZAotCQlmb3Igb24tZGVtYW5kIHNjcnViYmluZy4gU2V0dGluZyBhZGRyZXNzIHN0YXJ0cyBzY3J1YmJpbmcuCi0JCVRoZSBzaXplIG11c3QgYmUgc2V0IGJlZm9yZSB0aGF0LgotCi0JCVRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWQKLQkJb24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuCiYjNDM7CQlmb3IgZGVtYW5kIHNjcnViYmluZy4KIAogV2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9zaXplCiBEYXRlOgkJTWFyY2ggMjAyNQpAQCAtMzQsNiAmIzQzOzMwLDE0IEBAIERlc2NyaXB0aW9uOgogCQkoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkCiAJCShvbi1kZW1hbmQgc2NydWJiaW5nKS4KIAomIzQzO1doYXQ6CQkvc3lzL2J1cy9lZGFjL2RldmljZXMvJmx0O2Rldi1uYW1lJmd0Oy9zY3J1YlgvZW5hYmxlX2RlbWFuZAomIzQzO0RhdGU6CQlKYW4gMjAyNgomIzQzO0tlcm5lbFZlcnNpb246CTYuMTkKJiM0MztDb250YWN0OglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwomIzQzO0Rlc2NyaXB0aW9uOgomIzQzOwkJKFJXKSBTdGFydC9TdG9wIGRlbWFuZCBzY3J1YmJpbmcuIFRoZSBzdG9wIG9wZXJhdGlvbiBpcwomIzQzOwkJc3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC4KJiM0MzsKIFdoYXQ6CQkvc3lzL2J1cy9lZGFjL2RldmljZXMvJmx0O2Rldi1uYW1lJmd0Oy9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmQKIERhdGU6CQlNYXJjaCAyMDI1CiBLZXJuZWxWZXJzaW9uOgk2LjE1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdAppbmRleCAyY2ZhNzRmYTFmZmQyZi4uNTYyYmZkNmZmNjMwNTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdApAQCAtMzQwLDMgJiM0MzszNDAsNzMgQEAgY29udHJvbGxlciBvciBwbGF0Zm9ybSB3aGVuIHVuZXhwZWN0ZWRseSBoaWdoIGVycm9yIHJhdGVzIGFyZSBkZXRlY3RlZC4KIAogU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpbgogYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1lY3NgCiYjNDM7CiYjNDM7My4gQUNQSSBSQVMyIEhhcmR3YXJlLWJhc2VkIE1lbW9yeSBTY3J1YmJpbmcKJiM0MzsKJiM0MzszLjEuIERlbWFuZCBzY3J1YmJpbmcgZm9yIGEgc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbi4KJiM0MzsKJiM0MzszLjEuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmQKJiM0MzsKJiM0MzswCiYjNDM7CiYjNDM7My4xLjIuIFF1ZXJ5IHdoYXQgaXMgZGV2aWNlIGRlZmF1bHQvY3VycmVudCBzY3J1YiBjeWNsZSBzZXR0aW5nLgomIzQzOwomIzQzO0FwcGxpY2FibGUgdG8gYm90aCBkZW1hbmQgYW5kIGJhY2tncm91bmQgc2NydWJiaW5nLiBUaGUgdW5pdCBvZiB0aGUKJiM0MztzY3J1YiBjeWNsZSBpcyBzZWNvbmRzLgomIzQzOwomIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uCiYjNDM7CiYjNDM7MzYwMDAKJiM0MzsKJiM0MzszLjEuMy4gUXVlcnkgdGhlIHJhbmdlIG9mIGRldmljZSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZm9yIGEgbWVtb3J5IHJlZ2lvbi4KJiM0MztUaGUgdW5pdCBvZiB0aGUgc2NydWIgY3ljbGUgcmFuZ2UgaXMgc2Vjb25kcy4KJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWluX2N5Y2xlX2R1cmF0aW9uCiYjNDM7CiYjNDM7MzYwMAomIzQzOwomIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9tYXhfY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0Mzs4NjQwMAomIzQzOwomIzQzOzMuMS40LiBQcm9ncmFtIHNjcnViYmluZyBmb3IgdGhlIG1lbW9yeSByZWdpb24gaW4gUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGV2ZXJ5CiYjNDM7NDMyMDAgc2Vjb25kcyAoaGFsZiBhIGRheSkuCiYjNDM7CiYjNDM7IyBlY2hvIDQzMjAwICZndDsgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszLjEuNS4gU2V0IGFkZHJlc3MgcmFuZ2UuCiYjNDM7CiYjNDM7U2V0ICYjMzk7YWRkciYjMzk7IG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLgomIzQzOwomIzQzOyMgZWNobyAweDgwMDAwMDAwICZndDsgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHIKJiM0MzsKJiM0MztTZXQgJiMzOTtzaXplJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuCiYjNDM7CiYjNDM7IyBlY2hvIDB4MjAwMDAwICZndDsgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL3NpemUKJiM0MzsKJiM0MzszLjEuNi4gU3RhcnQgJiMzOTtkZW1hbmQgc2NydWJiaW5nJiMzOTsuCiYjNDM7CiYjNDM7V2hlbiBhIGRlbWFuZCBzY3J1YiBpcyBzdGFydGVkLCBhbnkgYmFja2dyb3VuZCBzY3J1YiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MKJiM0Mzt3aWxsIGJlIHN0b3BwZWQgYW5kIHRoZW4gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZQomIzQzO2RlbWFuZCBzY3J1YiBoYXMgY29tcGxldGVkLgomIzQzOwomIzQzOyMgZWNobyAxICZndDsgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmQKJiM0MzsKJiM0MzszLjIuIEJhY2tncm91bmQgc2NydWJiaW5nIHRoZSBlbnRpcmUgbWVtb3J5CiYjNDM7CiYjNDM7My4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kCiYjNDM7CiYjNDM7MAomIzQzOwomIzQzOzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDAKJiM0MztzZWNvbmRzIChxdWFydGVyIG9mIGEgZGF5KS4KJiM0MzsKJiM0MzsjIGVjaG8gMjE2MDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzMuMi4zLiBTdGFydCAmIzM5O2JhY2tncm91bmQgc2NydWJiaW5nJiMzOTsuCiYjNDM7CiYjNDM7IyBlY2hvIDEgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggZjE2NWQxNGNmNjFhM2EuLjUzOWZmMTQzY2NjNTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwpAQCAtMjk0LDYgJiM0MzsyOTQsMTcgQEAgY29uZmlnIEFDUElfQ1BQQ19MSUIKIAkgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLAogCSAgbGVhdmUgdGhpcyBvcHRpb24gZGlzYWJsZWQuCiAKJiM0Mztjb25maWcgQUNQSV9SQVMyCiYjNDM7CWJvb2wgJiMzNDtBQ1BJIFJBUzIgZHJpdmVyJiMzNDsKJiM0MzsJc2VsZWN0IEFVWElMSUFSWV9CVVMKJiM0MzsJZGVwZW5kcyBvbiBNQUlMQk9YCiYjNDM7CWRlcGVuZHMgb24gUENDCiYjNDM7CWhlbHAKJiM0MzsJICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvcgomIzQzOwkgIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgc3VjaCBhcyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2VsZWN0IE4uCiYjNDM7CiBjb25maWcgQUNQSV9QUk9DRVNTT1IKIAl0cmlzdGF0ZSAmIzM0O1Byb2Nlc3NvciYjMzQ7CiAJZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCkBAIC0xMDUsNiAmIzQzOzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpCSYjNDM7PSBlY19zeXMubwogb2JqLSQoQ09ORklHX0FDUElfQkdSVCkJCSYjNDM7PSBiZ3J0Lm8KIG9iai0kKENPTkZJR19BQ1BJX0NQUENfTElCKQkmIzQzOz0gY3BwY19hY3BpLm8KIG9iai0kKENPTkZJR19BQ1BJX1NQQ1JfVEFCTEUpCSYjNDM7PSBzcGNyLm8KJiM0MztvYmotJChDT05GSUdfQUNQSV9SQVMyKQkJJiM0Mzs9IHJhczIubwogb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgJiM0Mzs9IGFjcGlfZGJnLm8KIG9iai0kKENPTkZJR19BQ1BJX1BQVFQpIAkmIzQzOz0gcHB0dC5vCiBvYmotJChDT05GSUdfQUNQSV9QRlJVVCkJJiM0Mzs9IHBmcl91cGRhdGUubyBwZnJfdGVsZW1ldHJ5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvYnVzLmMKQEAgLTMxLDYgJiM0MzszMSw3IEBACiAjaW5jbHVkZSAmbHQ7YWNwaS9hcGVpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3VzcGVuZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BybXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9yYXMyLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAKQEAgLTE2MTAsNiAmIzQzOzE2MTEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBhY3BpX2luaXQodm9pZCkKIAlhY3BpX2RlYnVnZ2VyX2luaXQoKTsKIAlhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7CiAJYWNwaV92aW90X2luaXQoKTsKJiM0MzsJYWNwaV9yYXMyX2luaXQoKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3JhczIuYyBiL2RyaXZlcnMvYWNwaS9yYXMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE5ZWNiZTdjODE5OWJiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hY3BpL3JhczIuYwpAQCAtMCwwICYjNDM7MSw1MDMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC4KJiM0MzsgKgomIzQzOyAqIFN1cHBvcnQgZm9yIFJBUzIgdGFibGUgLSBBQ1BJIDYuNSBTcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDUuMi4yMSwgd2hpY2gKJiM0MzsgKiBwcm92aWRlcyBpbnRlcmZhY2VzIGZvciBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIGUuZy4sIGZvciBIVy1iYXNlZCBtZW1vcnkKJiM0MzsgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzCiYjNDM7ICogUENDIGNoYW5uZWwgc3Vic3BhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uCiYjNDM7ICovCiYjNDM7CiYjNDM7I3VuZGVmIHByX2ZtdAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtBQ1BJIFJBUzI6ICYjMzQ7IGZtdAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2t0aW1lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FjcGkvcGNjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FjcGkvcmFzMi5oJmd0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCByYXMyX3NzcGNjIC0gRGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uCiYjNDM7ICogQG1ib3hfY2xpZW50OglzdHJ1Y3QgbWJveF9jbGllbnQgb2JqZWN0CiYjNDM7ICogQHBjY19jaGFuOgkJUG9pbnRlciB0byBzdHJ1Y3QgcGNjX21ib3hfY2hhbgomIzQzOyAqIEBjb21tX2FkZHI6CQlQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uCiYjNDM7ICogQGVsZW06CQlMaXN0IGZvciByZWdpc3RlcmVkIFJBUzIgUENDIGNoYW5uZWwgc3Vic3BhY2VzCiYjNDM7ICogQHBjY19sb2NrOgkJUENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzCiYjNDM7ICoJCQl0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZQomIzQzOyAqIEBkZWFkbGluZV91czoJUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIHRpbWVvdXQgaW4gbWljcm9zZWNzCiYjNDM7ICoJCQlmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvbgomIzQzOyAqIEBwY2NfbXBhcjoJCU1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpIGZvciBQQ0MgY2hhbm5lbAomIzQzOyAqIEBwY2NfbXJ0dDoJCU1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpIGluIG1pY3Jvc2VjcwomIzQzOyAqCQkJT1MgbXVzdCB3YWl0IGFmdGVyIGNvbXBsZXRpb24gb2YgYSBQQ0MgY29tbWFuZCBiZWZvcmUKJiM0MzsgKgkJCWlzc3VpbmcgbmV4dCBjb21tYW5kCiYjNDM7ICogQGxhc3RfY21kX2NtcGxfdGltZTogQ29tcGxldGlvbiB0aW1lIG9mIGxhc3QgUENDIGNvbW1hbmQKJiM0MzsgKiBAbGFzdF9tcGFyX3Jlc2V0OglUaW1lIG9mIGxhc3QgTVBBUiBjb3VudCByZXNldAomIzQzOyAqIEBtcGFyX2NvdW50OgkJTVBBUiBjb3VudAomIzQzOyAqIEBwY2NfaWQ6CQlJZGVudGlmaWVyIG9mIHRoZSBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbAomIzQzOyAqIEBsYXN0X2NtZDoJCUxhc3QgUENDIGNvbW1hbmQKJiM0MzsgKiBAa3JlZjoJCWtyZWYgb2JqZWN0CiYjNDM7ICovCiYjNDM7c3RydWN0IHJhczJfc3NwY2MgewomIzQzOwlzdHJ1Y3QgbWJveF9jbGllbnQJCW1ib3hfY2xpZW50OwomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbgkJKnBjY19jaGFuOwomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0JKmNvbW1fYWRkcjsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZAkJZWxlbTsKJiM0MzsJc3RydWN0IG11dGV4CQkJcGNjX2xvY2s7CiYjNDM7CXU2NAkJCQlkZWFkbGluZV91czsKJiM0MzsJdW5zaWduZWQgaW50CQkJcGNjX21wYXI7CiYjNDM7CXVuc2lnbmVkIGludAkJCXBjY19tcnR0OwomIzQzOwlrdGltZV90CQkJCWxhc3RfY21kX2NtcGxfdGltZTsKJiM0MzsJa3RpbWVfdAkJCQlsYXN0X21wYXJfcmVzZXQ7CiYjNDM7CWludAkJCQltcGFyX2NvdW50OwomIzQzOwlpbnQJCQkJcGNjX2lkOwomIzQzOwl1MTYJCQkJbGFzdF9jbWQ7CiYjNDM7CXN0cnVjdCBrcmVmCQkJa3JlZjsKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlCiYjNDM7ICogbXVjaCBzbG93ZXIgdG8gcmVwbHkuIEtlZXAgaXQgaGlnaCBlbm91Z2ggdG8gY292ZXIgZW11bGF0b3JzIHdoZXJlIHRoZQomIzQzOyAqIHByb2Nlc3NvcnMgcnVuIHBhaW5mdWxseSBzbG93LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUENDX05VTV9SRVRSSUVTIDYwMFVMTAomIzQzOyNkZWZpbmUgUENDX0NITkxfREVGQVVMVF9MQVRFTkNZIDEwMDAKJiM0MzsjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzCiYjNDM7CiYjNDM7I2RlZmluZSBSQVMyX01BWF9OVU1fUENDX0RFU0NTIDEwMAomIzQzOyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDAKJiM0MzsKJiM0MzsvKiBTdGF0aWMgdmFyaWFibGVzIGZvciB0aGUgUkFTMiBQQ0Mgc3Vic3BhY2VzICovCiYjNDM7c3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spOwomIzQzO3N0YXRpYyBMSVNUX0hFQUQocmFzMl9zc3BjYyk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwl1MzIgY2FwX3N0YXR1czsKJiM0MzsJdTE2IHN0YXR1czsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBcyBwZXIgQUNQSSBzcGVjLCB0aGUgUENDIHNwYWNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlCiYjNDM7CSAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlbgomIzQzOwkgKiBQQ0MgY2FuIGJlIHVzZWQgYnkgT1NQTS4KJiM0MzsJICoKJiM0MzsJICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZgomIzQzOwkgKiBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0MgY2hhbm5lbCBsYXRlbmN5IHVudGlsIFBDQyBjb21tYW5kIGNvbXBsZXRlCiYjNDM7CSAqIGJpdCBpcyBzZXQuCiYjNDM7CSAqLwomIzQzOwlyYyA9IHJlYWR3X3JlbGF4ZWRfcG9sbF90aW1lb3V0KCZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzLCBzdGF0dXMsCiYjNDM7CQkJCQlzdGF0dXMgJmFtcDsgUENDX1NUQVRVU19DTURfQ09NUExFVEUsCiYjNDM7CQkJCQlQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLSZndDtkZWFkbGluZV91cyk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJcHJfd2FybigmIzM0O1BDQyBJRDogMHgleDogUENDIGNoZWNrIGNoYW5uZWwgdGltZW91dCBmb3IgbGFzdCBjb21tYW5kOiAweCV4IHJjPSVkXG4mIzM0OywKJiM0MzsJCQlzc3BjYy0mZ3Q7cGNjX2lkLCBzc3BjYy0mZ3Q7bGFzdF9jbWQsIHJjKTsKJiM0MzsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IFBDQ19TVEFUVVNfRVJST1IpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtQQ0MgSUQ6IDB4JXg6IEVycm9yIGluIGV4ZWN1dGluZyBsYXN0IGNvbW1hbmQ6IDB4JXhcbiYjMzQ7LAomIzQzOwkJCXNzcGNjLSZndDtwY2NfaWQsIHNzcGNjLSZndDtsYXN0X2NtZCk7CiYjNDM7CQlzdGF0dXMgJmFtcDs9IH5QQ0NfU1RBVFVTX0VSUk9SOwomIzQzOwkJaW93cml0ZTE2KHN0YXR1cywgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwkJaW93cml0ZTMyKDB4MCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzZXRfY2Fwc19zdGF0dXMpOwomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi8KJiM0MzsJcm1iKCk7CiYjNDM7CWNhcF9zdGF0dXMgPSBpb3JlYWQzMigmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3NldF9jYXBzX3N0YXR1cyk7CiYjNDM7CXN3aXRjaCAoY2FwX3N0YXR1cykgewomIzQzOwljYXNlIEFDUElfUkFTMl9OT1RfVkFMSUQ6CiYjNDM7CWNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6CiYjNDM7CQlyYyA9IC1FUEVSTTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDUElfUkFTMl9CVVNZOgomIzQzOwkJcmMgPSAtRUJVU1k7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfRkFJTEVEOgomIzQzOwljYXNlIEFDUElfUkFTMl9BQk9SVEVEOgomIzQzOwljYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6CiYjNDM7CQlyYyA9IC1FSU5WQUw7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJjID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpb3dyaXRlMzIoMHgwLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3NldF9jYXBzX3N0YXR1cyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmFzMl9zZW5kX3BjY19jbWQoKSAtIFNlbmQgUkFTMiBjb21tYW5kIHZpYSBQQ0MgY2hhbm5lbAomIzQzOyAqIEByYXMyX2N0eDoJcG9pbnRlciB0byB0aGUgUkFTMiBjb250ZXh0IHN0cnVjdHVyZQomIzQzOyAqIEBjbWQ6CVJBUzIgY29tbWFuZCB0byBzZW5kCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZTsKJiM0MzsJc3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7CiYjNDM7CXN0cnVjdCByYXMyX3NzcGNjICpzc3BjYzsKJiM0MzsJczY0IHRpbWVfZGVsdGE7CiYjNDM7CXUxNiB2YWw7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2N0eCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXNzcGNjID0gcmFzMl9jdHgtJmd0O3NzcGNjOwomIzQzOwlnZW5fY29tbV9iYXNlID0gc3NwY2MtJmd0O2NvbW1fYWRkcjsKJiM0MzsKJiM0MzsJcmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiYjNDM7CXBjY19jaGFubmVsID0gc3NwY2MtJmd0O3BjY19jaGFuLSZndDttY2hhbjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSGFuZGxlIHRoZSBNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKTogdGhlIG1pbmltdW0KJiM0MzsJICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZgomIzQzOwkgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNzcGNjLSZndDtwY2NfbXJ0dCkgewomIzQzOwkJdGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy0mZ3Q7bGFzdF9jbWRfY21wbF90aW1lKTsKJiM0MzsJCWlmIChzc3BjYy0mZ3Q7cGNjX21ydHQgJmd0OyB0aW1lX2RlbHRhKQomIzQzOwkJCWZzbGVlcChzc3BjYy0mZ3Q7cGNjX21ydHQgLSB0aW1lX2RlbHRhKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGUKJiM0MzsJICogbWF4aW11bSBudW1iZXIgb2YgcGVyaW9kaWMgcmVxdWVzdHMgdGhhdCB0aGUgc3Vic3BhY2UgY2hhbm5lbCBjYW4KJiM0MzsJICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm8KJiM0MzsJICogbGltaXRhdGlvbi4KJiM0MzsJICoKJiM0MzsJICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdAomIzQzOwkgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGUKJiM0MzsJICogc3lzdGVtIGNhbiBjb2xsZWN0aXZlbHkgZ2VuZXJhdGUuIElmIGl0IGlzIG5vdCwgZm9sbG93IHRoZSBzcGVjIGFuZAomIzQzOwkgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSCiYjNDM7CSAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LgomIzQzOwkgKi8KJiM0MzsJaWYgKHNzcGNjLSZndDtwY2NfbXBhcikgewomIzQzOwkJaWYgKCFzc3BjYy0mZ3Q7bXBhcl9jb3VudCkgewomIzQzOwkJCXRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCk7CiYjNDM7CQkJaWYgKCh0aW1lX2RlbHRhICZsdDsgNjAgKiBNU0VDX1BFUl9TRUMpICZhbXA7JmFtcDsgc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCkgewomIzQzOwkJCQlkZXZfZGJnKHJhczJfY3R4LSZndDtkZXYsCiYjNDM7CQkJCQkmIzM0O1BDQyBjb21tYW5kIDB4JXggbm90IHNlbnQgZHVlIHRvIE1QQVIgbGltaXQmIzM0OywgY21kKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU87CiYjNDM7CQkJfQomIzQzOwkJCXNzcGNjLSZndDtsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTsKJiM0MzsJCQlzc3BjYy0mZ3Q7bXBhcl9jb3VudCA9IHNzcGNjLSZndDtwY2NfbXBhcjsKJiM0MzsJCX0KJiM0MzsJCXNzcGNjLSZndDttcGFyX2NvdW50LS07CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqLwomIzQzOwlpb3dyaXRlMTYoY21kLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O2NvbW1hbmQpOwomIzQzOwomIzQzOwkvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi8KJiM0MzsJaW93cml0ZTE2KDAsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsKJiM0MzsJLyogUmluZyBkb29yYmVsbCAqLwomIzQzOwlyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCAmYW1wO2NtZCk7CiYjNDM7CS8qCiYjNDM7CSAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb24KJiM0MzsJICogYW5kIGEgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZS4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmbHQ7IDApIHsKJiM0MzsJCWRldl93YXJuKHJhczJfY3R4LSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7RXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXG4mIzM0OywgY21kLCByYyk7CiYjNDM7CQkvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi8KJiM0MzsJCXZhbCA9IGlvcmVhZDE2KCZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsJCXZhbCB8PSBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURTsKJiM0MzsJCWlvd3JpdGUxNih2YWwsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c3RhdHVzKTsKJiM0MzsJCXJldHVybiByYzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJjID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlzc3BjYy0mZ3Q7bGFzdF9jbWQgPSBjbWQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZQomIzQzOwkgKiBjb21wbGV0aW9uIHRpbWUgb2YgYm90aCBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgcHJvcGVyIGhhbmRsaW5nCiYjNDM7CSAqIG9mIE1SVFQsIHNvIG5lZWQgdG8gY2hlY2sgZm9yIHBjY19tcnR0IGluIGFkZGl0aW9uIHRvIFBDQ19DTURfRVhFQ19SQVMyLgomIzQzOwkgKi8KJiM0MzsJaWYgKGNtZCA9PSBQQ0NfQ01EX0VYRUNfUkFTMiB8fCBzc3BjYy0mZ3Q7cGNjX21ydHQpIHsKJiM0MzsJCXJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpOwomIzQzOwkJaWYgKHNzcGNjLSZndDtwY2NfbXJ0dCkKJiM0MzsJCQlzc3BjYy0mZ3Q7bGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFwY2NfY2hhbm5lbC0mZ3Q7bWJveC0mZ3Q7dHhkb25lX2lycSkKJiM0MzsJCW1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMocmFzMl9zZW5kX3BjY19jbWQsICYjMzQ7YWNwaV9yYXMyJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJhczJfbGlzdF9wY2NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9CiYjNDM7CQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJhczJfc3NwY2MsIGtyZWYpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2RlbCgmYW1wO3NzcGNjLSZndDtlbGVtKTsKJiM0MzsJcGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLSZndDtwY2NfY2hhbik7CiYjNDM7CWtmcmVlKHNzcGNjKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKQomIzQzO3sKJiM0MzsJa3JlZl9wdXQoJmFtcDtzc3BjYy0mZ3Q7a3JlZiwgICZhbXA7cmFzMl9saXN0X3BjY19yZWxlYXNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX3NzcGNjICpyYXMyX3NzcGNjX2dldChpbnQgcGNjX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCAmYW1wO3JhczJfc3NwY2MsIGVsZW0pIHsKJiM0MzsJCWlmIChzc3BjYy0mZ3Q7cGNjX2lkICE9IHBjY19pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtzc3BjYy0mZ3Q7a3JlZikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlyZXR1cm4gc3NwY2M7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX2NoYW47CiYjNDM7CXN0cnVjdCByYXMyX3NzcGNjICpzc3BjYzsKJiM0MzsKJiM0MzsJaWYgKHBjY19pZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJc3NwY2MgPSByYXMyX3NzcGNjX2dldChwY2NfaWQpOwomIzQzOwlpZiAoc3NwY2MpIHsKJiM0MzsJCXJhczJfY3R4LSZndDtzc3BjYwkJPSBzc3BjYzsKJiM0MzsJCXJhczJfY3R4LSZndDtjb21tX2FkZHIJPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwkJcmFzMl9jdHgtJmd0O2RldgkJPQomIzQzOwkJCXNzcGNjLSZndDtwY2NfY2hhbi0mZ3Q7bWNoYW4tJmd0O21ib3gtJmd0O2RldjsKJiM0MzsJCXJhczJfY3R4LSZndDtwY2NfbG9jawk9ICZhbXA7c3NwY2MtJmd0O3BjY19sb2NrOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3NwY2MgPSBremFsbG9jKHNpemVvZigqc3NwY2MpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFzc3BjYykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCgmYW1wO3NzcGNjLSZndDttYm94X2NsaWVudCwgcGNjX2lkKTsKJiM0MzsJaWYgKElTX0VSUihwY2NfY2hhbikpIHsKJiM0MzsJCWtmcmVlKHNzcGNjKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHBjY19jaGFuKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXBjY19jaGFuLSZndDtzaG1lbSkgewomIzQzOwkJcGNjX21ib3hfZnJlZV9jaGFubmVsKHBjY19jaGFuKTsKJiM0MzsJCWtmcmVlKHNzcGNjKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNzcGNjLSZndDtwY2NfaWQJCT0gcGNjX2lkOwomIzQzOwlzc3BjYy0mZ3Q7cGNjX2NoYW4JCT0gcGNjX2NoYW47CiYjNDM7CXNzcGNjLSZndDtjb21tX2FkZHIJPSBwY2NfY2hhbi0mZ3Q7c2htZW07CiYjNDM7CWlmIChwY2NfY2hhbi0mZ3Q7bGF0ZW5jeSkKJiM0MzsJCXNzcGNjLSZndDtkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLSZndDtsYXRlbmN5OwomIzQzOwllbHNlCiYjNDM7CQlzc3BjYy0mZ3Q7ZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1k7CiYjNDM7CXNzcGNjLSZndDtwY2NfbXJ0dAkJPSBwY2NfY2hhbi0mZ3Q7bWluX3R1cm5hcm91bmRfdGltZTsKJiM0MzsJc3NwY2MtJmd0O3BjY19tcGFyCQk9IHBjY19jaGFuLSZndDttYXhfYWNjZXNzX3JhdGU7CiYjNDM7CXNzcGNjLSZndDttYm94X2NsaWVudC5rbm93c190eGRvbmUJPSB0cnVlOwomIzQzOwomIzQzOwlrcmVmX2luaXQoJmFtcDtzc3BjYy0mZ3Q7a3JlZik7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2FkZCgmYW1wO3NzcGNjLSZndDtlbGVtLCAmYW1wO3JhczJfc3NwY2MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c3NwY2MJCT0gc3NwY2M7CiYjNDM7CXJhczJfY3R4LSZndDtjb21tX2FkZHIJPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZGV2CQk9IHBjY19jaGFuLSZndDttY2hhbi0mZ3Q7bWJveC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwltdXRleF9pbml0KCZhbXA7c3NwY2MtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmFzMl9jdHgtJmd0O3BjY19sb2NrCT0gJmFtcDtzc3BjYy0mZ3Q7cGNjX2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7CiYjNDM7CiYjNDM7CWlkYV9mcmVlKCZhbXA7cmFzMl9pZGEsIGF1eGRldi0mZ3Q7aWQpOwomIzQzOwlyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC0mZ3Q7c3NwY2MpOwomIzQzOwlrZnJlZShyYXMyX2N0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcmFzMl9tZW1fY3R4ICphZGRfYXV4X2RldmljZShjaGFyICpuYW1lLCBpbnQgY2hhbm5lbCwgdTMyIHB4bV9pbnN0KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7CiYjNDM7CXUzMiBjb21wX25pZDsKJiM0MzsJaW50IGlkLCByYzsKJiM0MzsKJiM0MzsJY29tcF9uaWQgPSBweG1fdG9fbm9kZShweG1faW5zdCk7CiYjNDM7CWlmIChjb21wX25pZCA9PSBOVU1BX05PX05PREUpIHsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7SW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcbiYjMzQ7LCBjaGFubmVsLCBweG1faW5zdCk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5YSU8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4ID0ga3phbGxvYyhzaXplb2YoKnJhczJfY3R4KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcmFzMl9jdHgpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCA9IGNvbXBfbmlkOwomIzQzOwomIzQzOwlyYyA9IHJlZ2lzdGVyX3BjY19jaGFubmVsKHJhczJfY3R4LCBjaGFubmVsKTsKJiM0MzsJaWYgKHJjICZsdDsgMCkgewomIzQzOwkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUENDIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWQgcmM9JWRcbiYjMzQ7LCBjaGFubmVsLAomIzQzOwkJCSBweG1faW5zdCwgcmMpOwomIzQzOwkJZ290byBjdHhfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZCA9IGlkYV9hbGxvYygmYW1wO3JhczJfaWRhLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKGlkICZsdDsgMCkgewomIzQzOwkJcmMgPSBpZDsKJiM0MzsJCWdvdG8gcGNjX2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O2FkZXYuaWQJCT0gaWQ7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2Lm5hbWUJCT0gbmFtZTsKJiM0MzsJcmFzMl9jdHgtJmd0O2FkZXYuZGV2LnJlbGVhc2UJPSByYXMyX3JlbGVhc2U7CiYjNDM7CXJhczJfY3R4LSZndDthZGV2LmRldi5wYXJlbnQJPSByYXMyX2N0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdCgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBpZGFfZnJlZTsKJiM0MzsKJiM0MzsJcmMgPSBhdXhpbGlhcnlfZGV2aWNlX2FkZCgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQlhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdCgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJjKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmFzMl9jdHg7CiYjNDM7CiYjNDM7aWRhX2ZyZWU6CiYjNDM7CWlkYV9mcmVlKCZhbXA7cmFzMl9pZGEsIGlkKTsKJiM0MztwY2NfZnJlZToKJiM0MzsJcmFzMl9zc3BjY19wdXQocmFzMl9jdHgtJmd0O3NzcGNjKTsKJiM0MztjdHhfZnJlZToKJiM0MzsJa2ZyZWUocmFzMl9jdHgpOwomIzQzOwomIzQzOwlyZXR1cm4gRVJSX1BUUihyYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KQomIzQzO3sKJiM0MzsJaWYgKCFyYXMyX2N0eCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYXV4aWxpYXJ5X2RldmljZV9kZWxldGUoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7CWF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KCZhbXA7cmFzMl9jdHgtJmd0O2FkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBhcnNlX3JhczJfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0OwomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICoqcGN0eF9saXN0OwomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDsKJiM0MzsJdTE2IHRvdF90YmxfbGVuOwomIzQzOwl1MTYgaTsKJiM0MzsKJiM0MzsJaWYgKHJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoICZsdDsgc2l6ZW9mKCpyYXMyX3RhYikpIHsKJiM0MzsJCXByX3dhcm4oRldfV0FSTiAmIzM0O0FDUEkgUkFTMiB0YWJsZSBwcmVzZW50IGJ1dCBicm9rZW4gKHRvbyBzaG9ydCwgc2l6ZT0ldSlcbiYjMzQ7LAomIzQzOwkJCXJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MgfHwgcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MgJmd0OyBSQVMyX01BWF9OVU1fUENDX0RFU0NTKSB7CiYjNDM7CQlwcl93YXJuKEZXX1dBUk4gJiMzNDtOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxuJiMzNDssCiYjNDM7CQkJcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSAmIzQzOyByYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyAqIHNpemVvZigqcGNjX2Rlc2NfbGlzdCk7CiYjNDM7CWlmIChyYXMyX3RhYi0mZ3Q7aGVhZGVyLmxlbmd0aCAmbHQ7IHRvdF90YmxfbGVuKSB7CiYjNDM7CQlwcl93YXJuKEZXX1dBUk4gJiMzNDtSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcbiYjMzQ7LAomIzQzOwkJCXJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi0mZ3Q7aGVhZGVyLmxlbmd0aCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXBjdHhfbGlzdCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwY2NfZGVzY19saXN0ID0gKHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKikocmFzMl90YWIgJiM0MzsgMSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyByYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjczsgaSYjNDM7JiM0MzssIHBjY19kZXNjX2xpc3QmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocGNjX2Rlc2NfbGlzdC0mZ3Q7ZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtJmd0O2NoYW5uZWxfaWQsCiYjNDM7CQkJCQkgIHBjY19kZXNjX2xpc3QtJmd0O2luc3RhbmNlKTsKJiM0MzsJCS8qIEludmFsaWQgTlVNQSBub2RlLCBjb250aW51ZSBwYXJzaW5nIG5leHQgbm9kZSAqLwomIzQzOwkJaWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChJU19FUlIocmFzMl9jdHgpKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O0ZhaWxlZCB0byBhZGQgUkFTMiBhdXhpbGlhcnkgZGV2aWNlIHJjPSVsZFxuJiMzNDssIFBUUl9FUlIocmFzMl9jdHgpKTsKJiM0MzsJCQlmb3IgKDsgaSAmZ3Q7IDA7IGktLSkgewomIzQzOwkJCQlpZiAocGN0eF9saXN0W2kgLSAxXSkKJiM0MzsJCQkJCXJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pOwomIzQzOwkJCX0KJiM0MzsJCQlrZnJlZShwY3R4X2xpc3QpOwomIzQzOwkJCXJldHVybiBQVFJfRVJSKHJhczJfY3R4KTsKJiM0MzsJCX0KJiM0MzsJCXBjdHhfbGlzdFtpXSA9IHJhczJfY3R4OwomIzQzOwl9CiYjNDM7CWtmcmVlKHBjdHhfbGlzdCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBhY3BpX3JhczJfaW5pdCAtIFJBUzIgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgomIzQzOyAqCiYjNDM7ICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2UKJiM0MzsgKiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4gRHJpdmVyIGFkZHMgYW4KJiM0MzsgKiBhdXhpbGlhcnkgZGV2aWNlLCB3aGljaCBiaW5kcyB0byB0aGUgbWVtb3J5IEFDUEkgUkFTMiBkcml2ZXIsIGZvciBlYWNoIFJBUzIKJiM0MzsgKiBtZW1vcnkgZmVhdHVyZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IG5vbmUuCiYjNDM7ICovCiYjNDM7dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiOwomIzQzOwlhY3BpX3N0YXR1cyBzdGF0dXM7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJmFtcDtyYXMyX3RhYik7CiYjNDM7CWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewomIzQzOwkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gZ2V0IHRhYmxlLCAlc1xuJiMzNDssIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGFyc2VfcmFzMl90YWJsZShyYXMyX3RhYikpCiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3NjcnViLmMgYi9kcml2ZXJzL2VkYWMvc2NydWIuYwppbmRleCBmOWQwMmFmMmZjM2EyMC4uZjNiOWEyZjA0OTUwMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7CiAJU0NSVUJfQUREUkVTUywKIAlTQ1JVQl9TSVpFLAogCVNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELAomIzQzOwlTQ1JVQl9FTkFCTEVfREVNQU5ELAogCVNDUlVCX01JTl9DWUNMRV9EVVJBVElPTiwKIAlTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sCiAJU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OLApAQCAtNTUsNiAmIzQzOzU2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsCQkJXAogRURBQ19TQ1JVQl9BVFRSX1NIT1coYWRkciwgcmVhZF9hZGRyLCB1NjQsICYjMzQ7MHglbGx4XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCAmIzM0OzB4JWxseFxuJiMzNDspCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsICYjMzQ7JXVcbiYjMzQ7KQomIzQzO0VEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9kZW1hbmQsIGdldF9lbmFibGVkX29kLCBib29sLCAmIzM0OyV1XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCAmIzM0OyV1XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCAmIzM0OyV1XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGdldF9jeWNsZV9kdXJhdGlvbiwgdTMyLCAmIzM0OyV1XG4mIzM0OykKQEAgLTg0LDYgJiM0Mzs4Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldiwJCQlcCiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoYWRkciwgd3JpdGVfYWRkciwgdTY0LCBrc3RydG91NjQpCiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpCiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2JhY2tncm91bmQsIHNldF9lbmFibGVkX2JnLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bCkKJiM0MztFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2RlbWFuZCwgc2V0X2VuYWJsZWRfb2QsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKQogRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpCiAKIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpCkBAIC0xMTksNiAmIzQzOzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludAogCQkJCXJldHVybiAwNDQ0OwogCQl9CiAJCWJyZWFrOwomIzQzOwljYXNlIFNDUlVCX0VOQUJMRV9ERU1BTkQ6CiYjNDM7CQlpZiAob3BzLSZndDtnZXRfZW5hYmxlZF9vZCkgewomIzQzOwkJCWlmIChvcHMtJmd0O3NldF9lbmFibGVkX29kKQomIzQzOwkJCQlyZXR1cm4gYS0mZ3Q7bW9kZTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCXJldHVybiAwNDQ0OwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiAJY2FzZSBTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT046CiAJCWlmIChvcHMtJmd0O2dldF9taW5fY3ljbGUpCiAJCQlyZXR1cm4gYS0mZ3Q7bW9kZTsKQEAgLTE2NCw2ICYjNDM7MTc1LDcgQEAgc3RhdGljIGludCBzY3J1Yl9jcmVhdGVfZGVzYyhzdHJ1Y3QgZGV2aWNlICpzY3J1Yl9kZXYsCiAJCVtTQ1JVQl9BRERSRVNTXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhhZGRyLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9TSVpFXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhzaXplLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9FTkFCTEVfQkFDS0dST1VORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2JhY2tncm91bmQsIGluc3RhbmNlKSwKJiM0MzsJCVtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLAogCQlbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSwKIAkJW1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZwppbmRleCBmYzRmNGJiOTRhNGM2NS4uYTFlNmFlZDhiY2M4NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvS2NvbmZpZwpAQCAtNDYsNCAmIzQzOzQ2LDE3IEBAIGNvbmZpZyBSQVNfRk1QTQogCSAgTWVtb3J5IHdpbGwgYmUgcmV0aXJlZCBkdXJpbmcgYm9vdCB0aW1lIGFuZCBydW4gdGltZSBkZXBlbmRpbmcgb24KIAkgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLgogCiYjNDM7Y29uZmlnIE1FTV9BQ1BJX1JBUzIKJiM0MzsJdHJpc3RhdGUgJiMzNDtNZW1vcnkgQUNQSSBSQVMyIGRyaXZlciYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQUNQSV9SQVMyCiYjNDM7CWRlcGVuZHMgb24gRURBQwomIzQzOwlkZXBlbmRzIG9uIEVEQUNfU0NSVUIKJiM0MzsJc2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPCiYjNDM7CWhlbHAKJiM0MzsJICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzIKJiM0MzsJICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG8KJiM0MzsJICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXMKJiM0MzsJICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlcgomIzQzOwkgIHRocm91Z2ggdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLgomIzQzOwogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL01ha2VmaWxlIGIvZHJpdmVycy9yYXMvTWFrZWZpbGUKaW5kZXggMTFmOTVkNTlkMzk3MmQuLmEwZTZlOTAzZDZiMDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZQpAQCAtMiw2ICYjNDM7Miw3IEBACiBvYmotJChDT05GSUdfUkFTKQkmIzQzOz0gcmFzLm8KIG9iai0kKENPTkZJR19ERUJVR19GUykJJiM0Mzs9IGRlYnVnZnMubwogb2JqLSQoQ09ORklHX1JBU19DRUMpCSYjNDM7PSBjZWMubwomIzQzO29iai0kKENPTkZJR19NRU1fQUNQSV9SQVMyKQkmIzQzOz0gYWNwaV9yYXMyLm8KIAogb2JqLSQoQ09ORklHX1JBU19GTVBNKQkmIzQzOz0gYW1kL2ZtcG0ubwogb2JqLXkJCQkmIzQzOz0gYW1kL2F0bC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJhN2RlMjI2ZWM4NTkyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMKQEAgLTAsMCAmIzQzOzEsNTg5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC4KJiM0MzsgKgomIzQzOyAqLwomIzQzOwomIzQzOyN1bmRlZiBwcl9mbXQKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpCSYjMzQ7QUNQSSBSQVMyIE1FTU9SWTogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2VkYWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9yYXMyLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKQomIzQzOyNkZWZpbmUgUkFTMl9UWVBFX1BBVFJPTF9TQ1JVQiAweDAwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDEKJiM0MzsjZGVmaW5lIFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSIDB4MDIKJiM0MzsjZGVmaW5lIFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIgMHgwMwomIzQzOwomIzQzOy8qCiYjNDM7ICogUkFTMiBwYXRyb2wgc2NydWIKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX0lOX01BU0sgR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIFJBUzJfUFNfRU5fQkFDS0dST1VORCBCSVQoMCkKJiM0MzsjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMCkKJiM0MzsjZGVmaW5lIFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMjMsIDE2KQomIzQzOyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBSQVMyX1NDUlVCX05BTUVfTEVOIDEyOAomIzQzOyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMAomIzQzOwomIzQzO3N0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSB7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gY29tbW9uOwomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3BhdHJvbF9zY3J1Yl9wYXJhbSBwYXJhbXM7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFRPX0FDUElfUkFTMl9QU19TSE1FTShfYWRkcikgXAomIzQzOwljb250YWluZXJfb2YoX2FkZHIsIHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSwgY29tbW9uKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtJmd0O2NvbW1fYWRkcjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CWlvd3JpdGU4KDAsICZhbXA7Y29tbW9uLSZndDtzZXRfY2Fwc1swXSk7CiYjNDM7CiYjNDM7CXJldHVybiBpb3JlYWQ4KCZhbXA7Y29tbW9uLSZndDtmZWF0dXJlc1swXSkgJmFtcDsgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0KJiM0MzsJCVRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19vdXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CWlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9iYXNlLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9zaXplLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwlyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJhczJfY3R4LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NydWJfcGFyYW1zX291dCA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssCiYjNDM7CQkJCQkgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssCiYjNDM7CQkJCQkgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTsKJiM0MzsJcmFzMl9jdHgtJmd0O3NjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSywKJiM0MzsJCQkJCSAgICAgIHNjcnViX3BhcmFtc19vdXQpOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gMDsKJiM0MzsJCXJhczJfY3R4LSZndDtzaXplID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICAoaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gdHJ1ZTsKJiM0MzsJCXJhczJfY3R4LSZndDtiYXNlID0gaW9yZWFkNjQoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IGlvcmVhZDY0KCZhbXA7cHNfc20tJmd0O3BhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIENvbnRleHQgLSBQQ0MgbG9jayBtdXN0IGJlIGhlbGQgKi8KJiM0MztzdGF0aWMgaW50IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBib29sICpydW5uaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0KJiM0MzsJCVRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIpIHsKJiM0MzsJCSpydW5uaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCAmYW1wO3BzX3NtLSZndDtjb21tb24uc2V0X2NhcHNbMF0pOwomIzQzOwlpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5jb21tYW5kKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fYmFzZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDttZW1fc2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CSpydW5uaW5nID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmZsYWdzKSAmYW1wOyBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORzsKJiM0MzsJaWYgKCEoKnJ1bm5pbmcpKQomIzQzOwkJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiYjNDM7CQlpZiAoIXJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZygpIGZhaWxzIGhlcmUsIHJlLWVuYWJsaW5nIGJhY2tncm91bmQKJiM0MzsJCSAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSwKJiM0MzsJCSAqIHRoZSBhZG1pbiBvciBmaXJtd2FyZSBtYXkgbmVlZCB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YmJpbmcKJiM0MzsJCSAqIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLgomIzQzOwkJICovCiYjNDM7CQltdXRleF9sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CQlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQltdXRleF91bmxvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghcnVubmluZykgewomIzQzOwkJCXJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC0mZ3Q7ZGV2LCByYXMyX2N0eCwgdHJ1ZSk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJZGV2X2VycihyYXMyX2N0eC0mZ3Q7ZGV2LAomIzQzOwkJCQkJJiMzNDtGYWlsZWQgdG8gZW5hYmxlIGJhY2tncm91bmQgc2NydWIgcmV0PSVkXG4mIzM0OywgcmV0KTsKJiM0MzsKJiM0MzsJCQltdXRleF91bmxvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkJbXNsZWVwKDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmFzMl9jdHgtJmd0O3RocmVhZCA9IE5VTEw7CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CSptaW4gPSByYXMyX2N0eC0mZ3Q7bWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJKm1heCA9IHJhczJfY3R4LSZndDttYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2VjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnMgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcykKJiM0Mzt7CiYjNDM7CXUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAoc2NydWJfY3ljbGVfaHJzICZsdDsgcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSB8fAomIzQzOwkgICAgc2NydWJfY3ljbGVfaHJzICZndDsgcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLgomIzQzOwkgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuCiYjNDM7CSAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJcmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqYmFzZSA9IHJhczJfY3R4LSZndDtiYXNlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YikKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJKnNpemUgPSByYXMyX2N0eC0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocnVubmluZykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiYXNlID0gYmFzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXNpemUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkqZW5hYmxlZCA9IHJhczJfY3R4LSZndDtiZ19zY3J1YjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LSZndDtjb21tX2FkZHIpOwomIzQzOwl1MzIgc2NydWJfcGFyYW1zX2luOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgJmFtcDtwc19zbS0mZ3Q7Y29tbW9uLnNldF9jYXBzWzBdKTsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YiB8fCBydW5uaW5nKQomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwkJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CQlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLOwomIzQzOwkJc2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtJmd0O3NldF9zY3J1Yl9jeWNsZSk7CiYjNDM7CQlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJCWlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJCWlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXNjcnViX3BhcmFtc19pbiAmYW1wOz0gflJBUzJfUFNfRU5fQkFDS0dST1VORDsKJiM0MzsJc2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpOwomIzQzOwlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvICVzIGJhY2tncm91bmQgc2NydWJiaW5nXG4mIzM0OywKJiM0MzsJCQlzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiZ19zY3J1YiA9IGVuYWJsZTsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7CiYjNDM7CQkvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi8KJiM0MzsJCXJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CSplbmFibGVkID0gcnVubmluZzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19pbjsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWVuYWJsZSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWQKJiM0MzsJICogd2l0aCAoYmFzZSAmIzQzOyBzaXplKSAmZ3Q7IChtZW1fYmFzZSAmIzQzOyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGEKJiM0MzsJICogcHJvcGVyIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIE5VTUEgbm9kZSBtZW1vcnkgcmFuZ2UgaXMgYXZhaWxhYmxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyYXMyX2N0eC0mZ3Q7c2l6ZSB8fCByYXMyX2N0eC0mZ3Q7YmFzZSAmbHQ7IHJhczJfY3R4LSZndDttZW1fYmFzZSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7JXM6IEludmFsaWQgYWRkcmVzcyByYW5nZSwgYmFzZT0weCVsbHggc2l6ZT0weCVsbHhcbiYjMzQ7LAomIzQzOwkJCV9fZnVuY19fLCByYXMyX2N0eC0mZ3Q7YmFzZSwgcmFzMl9jdHgtJmd0O3NpemUpOwomIzQzOwkJcmV0ID0gLUVSQU5HRTsKJiM0MzsJCWdvdG8gZW5hYmxlX2JnX3NjcnViOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CXNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKCZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlKTsKJiM0MzsJc2NydWJfcGFyYW1zX2luICZhbXA7PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EOwomIzQzOwlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJaW93cml0ZTY0KHJhczJfY3R4LSZndDtiYXNlLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O3NpemUsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7CiYjNDM7CWlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcbiYjMzQ7LCByZXQpOwomIzQzOwkJaWYgKHJldCAhPSAtRUJVU1kpIHsKJiM0MzsJCQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJCQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7YmFzZSA9IDA7CiYjNDM7CQkJcmFzMl9jdHgtJmd0O3NpemUgPSAwOwomIzQzOwkJfQomIzQzOwkJZ290byBlbmFibGVfYmdfc2NydWI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmFzMl9jdHgtJmd0O29kX3NjcnViID0gZW5hYmxlOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YiAmYW1wOyZhbXA7IHJhczJfY3R4LSZndDtkcml2ZXJfYWN0aXZlICZhbXA7JmFtcDsgIXJhczJfY3R4LSZndDt0aHJlYWQpIHsKJiM0MzsJCXJhczJfY3R4LSZndDt0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCwKJiM0MzsJCQkJCSAgICAgICAmIzM0O3JhczJfc2NydWJfbmlkJWQmIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlpZiAoSVNfRVJSKHJhczJfY3R4LSZndDt0aHJlYWQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihyYXMyX2N0eC0mZ3Q7dGhyZWFkKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsCiYjNDM7CQkJICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWQKJiM0MzsJCQkgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlnb3RvIGVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzOwomIzQzO2VuYWJsZV9iZ19zY3J1YjoKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtyZWVuYWJsZV9iZ19zY3J1YikgewomIzQzOwkJcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7CiYjNDM7CQlfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHsKJiM0MzsJLnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLAomIzQzOwkucmVhZF9zaXplID0gcmFzMl9od19zY3J1Yl9yZWFkX3NpemUsCiYjNDM7CS53cml0ZV9hZGRyID0gcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyLAomIzQzOwkud3JpdGVfc2l6ZSA9IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSwKJiM0MzsJLmdldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZywKJiM0MzsJLnNldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZywKJiM0MzsJLmdldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZCwKJiM0MzsJLnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCwKJiM0MzsJLmdldF9taW5fY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlLAomIzQzOwkuZ2V0X21heF9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUsCiYjNDM7CS5nZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQsCiYjNDM7CS5zZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9tZW1fZHJ2X3JlbW92ZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2N0eCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZHJpdmVyX2FjdGl2ZSA9IGZhbHNlOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3RocmVhZCkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CQlrdGhyZWFkX3N0b3AocmFzMl9jdHgtJmd0O3RocmVhZCk7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTsKJiM0MzsJc3RydWN0IGVkYWNfZGV2X2ZlYXR1cmUgcmFzX2ZlYXR1cmVzOwomIzQzOwljaGFyIHNjcnViX25hbWVbUkFTMl9TQ1JVQl9OQU1FX0xFTl07CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBudW1fc3Bhbm5lZF9wYWdlczsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFyYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHJhczJfY3R4KSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmV0cmlldmUgdGhlIFBBIHJhbmdlIG9mIHRoZSBOVU1BIGRvbWFpbiBhbmQgdXNlIGl0IGFzIHRoZQomIzQzOwkgKiAmIzM5O1JlcXVlc3RlZCBBZGRyZXNzIFJhbmdlJiMzOTssIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmQKJiM0MzsJICogR0VUX1BBVFJPTF9QQVJBTUVURVJTIHRvIGdldCBwYXJhbWV0ZXJzIHRoYXQgYXBwbHkgdG8gYWxsIGFkZHJlc3NlcwomIzQzOwkgKiBpbiB0aGUgTlVNQSBkb21haW4gYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVIKJiM0MzsJICogdG8gc3RhcnQgdGhlIGRlbWFuZCBzY3J1YmJpbmcuCiYjNDM7CSAqLwomIzQzOwlzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC0mZ3Q7c3lzX2NvbXBfbmlkKTsKJiM0MzsJbnVtX3NwYW5uZWRfcGFnZXMgPSBub2RlX3NwYW5uZWRfcGFnZXMocmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CWlmICghbnVtX3NwYW5uZWRfcGFnZXMpIHsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxuJiMzNDssIHJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQpOwomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7bWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7CiYjNDM7CXJhczJfY3R4LSZndDttZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovCiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7c2NydWJfY3ljbGVfaHJzICZndDsgcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSkKJiM0MzsJCXJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC0mZ3Q7c2NydWJfY3ljbGVfaHJzOwomIzQzOwllbHNlCiYjNDM7CQlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZTsKJiM0MzsKJiM0MzsJc3ByaW50ZihzY3J1Yl9uYW1lLCAmIzM0O2FjcGlfcmFzX21lbSVkJiMzNDssIGF1eGRldi0mZ3Q7aWQpOwomIzQzOwomIzQzOwlyYXNfZmVhdHVyZXMuZnRfdHlwZQk9IFJBU19GRUFUX1NDUlVCOwomIzQzOwlyYXNfZmVhdHVyZXMuaW5zdGFuY2UJPSAwOwomIzQzOwlyYXNfZmVhdHVyZXMuc2NydWJfb3BzCT0gJmFtcDtyYXMyX3NjcnViX29wczsKJiM0MzsJcmFzX2ZlYXR1cmVzLmN0eAk9IHJhczJfY3R4OwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZHJpdmVyX2FjdGl2ZSA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBlZGFjX2Rldl9yZWdpc3RlcigmYW1wO2F1eGRldi0mZ3Q7ZGV2LCBzY3J1Yl9uYW1lLCBOVUxMLCAxLCAmYW1wO3Jhc19mZWF0dXJlcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHsKJiM0MzsJeyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FICYjMzQ7LiYjMzQ7IFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzOwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7CiYjNDM7CS5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsCiYjNDM7CS5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSwKJiM0MzsJLnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsCiYjNDM7CS5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSwKJiM0Mzt9OwomIzQzO21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7CiYjNDM7CiYjNDM7TU9EVUxFX0lNUE9SVF9OUygmIzM0O0FDUElfUkFTMiYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9yYXMyLmggYi9pbmNsdWRlL2FjcGkvcmFzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYWNwaS9yYXMyLmgKQEAgLTAsMCAmIzQzOzEsODYgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBBQ1BJIFJBUzIgKFJBUyBGZWF0dXJlIFRhYmxlKSBtZXRob2RzLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9BQ1BJX1JBUzJfSAomIzQzOyNkZWZpbmUgX0FDUElfUkFTMl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2FjcGkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXV4aWxpYXJ5X2J1cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYWlsYm94X2NsaWVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBkZXZpY2U7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBQ1BJIHNwZWMgNi41IFRhYmxlIDUuODI6IFBDQyBjb21tYW5kIGNvZGVzIHVzZWQgYnkKJiM0MzsgKiBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBDQ19DTURfRVhFQ19SQVMyIDB4MDEKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FICYjMzQ7cmFzMiYjMzQ7CiYjNDM7I2RlZmluZSBSQVMyX01FTV9ERVZfSURfTkFNRSAmIzM0O2FjcGlfcmFzMl9tZW0mIzM0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlcwomIzQzOyAqIEBhZGV2OgkJQXV4aWxpYXJ5IGRldmljZSBvYmplY3QKJiM0MzsgKiBAY29tbV9hZGRyOgkJUG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvbgomIzQzOyAqIEBkZXY6CQlQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQwomIzQzOyAqIEBzc3BjYzoJCVBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uCiYjNDM7ICogQHBjY19sb2NrOgkJUG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MKJiM0MzsgKgkJCXRvIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogQHN5c19jb21wX25pZDoJTm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZQomIzQzOyAqCQkJaXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyCiYjNDM7ICoJCQlQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsCiYjNDM7ICoJCQlGaWVsZDogSW5zdGFuY2UKJiM0MzsgKiBAbWVtX2Jhc2U6CQlCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2UKJiM0MzsgKgkJCW9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpbgomIzQzOyAqIEBtZW1fc2l6ZQkJU2l6ZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlCiYjNDM7ICoJCQlvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW4KJiM0MzsgKiBAYmFzZToJCUJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YgomIzQzOyAqIEBzaXplOgkJU2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YgomIzQzOyAqIEBzY3J1Yl9jeWNsZV9ocnM6CUN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3VycwomIzQzOyAqIEBzZXRfc2NydWJfY3ljbGU6CVNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzCiYjNDM7ICogQG1pbl9zY3J1Yl9jeWNsZToJTWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZAomIzQzOyAqIEBtYXhfc2NydWJfY3ljbGU6CU1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWQKJiM0MzsgKiBAb2Rfc2NydWI6CQlTdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZyAobWVtb3J5IHJlZ2lvbikKJiM0MzsgKiBAYmdfc2NydWI6CQlTdGF0dXMgb2YgYmFja2dyb3VuZCBwYXRyb2wgc2NydWJiaW5nCiYjNDM7ICogQHJlZW5hYmxlX2JnX3NjcnViOglGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZAomIzQzOyAqCQkJc2NydWJiaW5nIGlzIGZpbmlzaGVkCiYjNDM7ICogQHRocmVhZDoJCURlbWFuZCBzY3J1YiBtb25pdG9yIGt0aHJlYWQKJiM0MzsgKiBAZHJpdmVyX2FjdGl2ZToJRmxhZyBpbmRpY2F0ZXMgUkFTMiBtZW1vcnkgZHJpdmVyIGlzIGFjdGl2ZS9yZW1vdmVkCiYjNDM7ICovCiYjNDM7c3RydWN0IHJhczJfbWVtX2N0eCB7CiYjNDM7CXN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlCQlhZGV2OwomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0JKmNvbW1fYWRkcjsKJiM0MzsJc3RydWN0IGRldmljZQkJCSpkZXY7CiYjNDM7CXZvaWQJCQkJKnNzcGNjOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQkqcGNjX2xvY2s7CiYjNDM7CXUzMgkJCQlzeXNfY29tcF9uaWQ7CiYjNDM7CXU2NAkJCQltZW1fYmFzZTsKJiM0MzsJdTY0CQkJCW1lbV9zaXplOwomIzQzOwl1NjQJCQkJYmFzZTsKJiM0MzsJdTY0CQkJCXNpemU7CiYjNDM7CXU4CQkJCXNjcnViX2N5Y2xlX2hyczsKJiM0MzsJdTgJCQkJc2V0X3NjcnViX2N5Y2xlOwomIzQzOwl1OAkJCQltaW5fc2NydWJfY3ljbGU7CiYjNDM7CXU4CQkJCW1heF9zY3J1Yl9jeWNsZTsKJiM0MzsJYm9vbAkJCQlvZF9zY3J1YjsKJiM0MzsJYm9vbAkJCQliZ19zY3J1YjsKJiM0MzsJYm9vbAkJCQlyZWVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0CQkqdGhyZWFkOwomIzQzOwlib29sCQkJCWRyaXZlcl9hY3RpdmU7CiYjNDM7fTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0FDUElfUkFTMgomIzQzO3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpOwomIzQzO2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGFjLmggYi9pbmNsdWRlL2xpbnV4L2VkYWMuaAppbmRleCBlNmI0ZTUxMTMwZTVmZi4uYmU0ZjZlNTJlYTM4YTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWRhYy5oCkBAIC02ODQsNiAmIzQzOzY4NCw4IEBAIGVudW0gZWRhY19kZXZfZmVhdCB7CiAgKiBAd3JpdGVfc2l6ZTogc2V0IG9mZnNldCBvZiB0aGUgc2NydWJiaW5nIHJhbmdlLgogICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLgogICogQHNldF9lbmFibGVkX2JnOiBzdGFydCBvciBzdG9wIGEgYmctc2NydWIuCiYjNDM7ICogQGdldF9lbmFibGVkX29kOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBkZW1hbmQgc2NydWIuCiYjNDM7ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLgogICogQGdldF9taW5fY3ljbGU6IGdldCBtaW5pbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLgogICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLgogICogQGdldF9jeWNsZV9kdXJhdGlvbjogZ2V0IGN1cnJlbnQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy4KQEAgLTY5Niw2ICYjNDM7Njk4LDggQEAgc3RydWN0IGVkYWNfc2NydWJfb3BzIHsKIAlpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7CiAJaW50ICgqZ2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7CiAJaW50ICgqc2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTsKJiM0MzsJaW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7CiYjNDM7CWludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7CiAJaW50ICgqZ2V0X21pbl9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWluKTsKIAlpbnQgKCpnZXRfbWF4X2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptYXgpOwogCWludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDAwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUNQSSBSQVMyIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCBhZGRzIEFDUEkgUkFTMiBzdXBwb3J0IGFuZCBhIG1lbW9yeSBkcml2ZXIuIEl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGRvY3VtZW50YXRpb24gdXBkYXRlcywgS2NvbmZpZyBhbmQgTWFrZWZpbGUgY2hhbmdlcywgc29tZSBuZXcgZmlsZXMgKGByYXMyLmNgLCBgYWNwaV9yYXMyLmNgLCBgcmFzMi5oYCksIGFuZCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGRyaXZlcnMgKGBidXMuY2AsIGBzY3J1Yi5jYCkuIEl0JiMzOTtzIGFsbCBhYm91dCBlbmFibGluZyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nIHVzaW5nIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykuIFRoZSBkcml2ZXIgaW50ZWdyYXRlcyB3aXRoIEVEQUMgYW5kIGV4cG9zZXMgc3lzZnMgYXR0cmlidXRlcyBmb3IgY29udHJvbC4KClRoZSBiaWcgcXVlc3Rpb24gaW4gbXkgbWluZCBpcyBhbHdheXMsIGhvdyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aCB2aXJ0dWFsaXphdGlvbj8gRG9lcyB0aGlzIGV2ZW4gKndvcmsqIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFPyBUaGUgY29yZSBkZXBlbmRlbmN5IGlzIHRoZSBwcmVzZW5jZSBvZiBhbiBBQ1BJIFJBUzIgdGFibGUuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBkb2VzIHRoZSBmaXJtd2FyZSAqcHJvdmlkZSogdGhhdCB0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQ/IEkga25vdyBRRU1VIG9mdGVuIGRvZXNuJiMzOTt0IGhhdmUgaXQgYnkgZGVmYXVsdC4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHN5emthbGxlci4gQ2FuIHN5emthbGxlciBpbmplY3QgQUNQSSB0YWJsZXM/IEkga25vdyBpdCBkb2VzLCBidXQgaXMgaXQgYWJsZSB0byBsb2FkIGFuIEFDUEkgUkFTMiB0YWJsZT8KCldhaXQsIHN5emthbGxlciAqY2FuJiMzOTt0KiBpbmplY3QgYXJiaXRyYXJ5IHRhYmxlcyB1bmxlc3MgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IHN1cHBvcnRlZC4gSXQgZG9lcyBoYXZlIEFDUEkgZnV6emluZywgYnV0IGl0JiMzOTtzIG5vdCBsaWtlIGEgYmxhbmtldCBpbmplY3Rpb24uIE9rYXksIEkgc2VlLiBUaGUgZHJpdmVyIHVzZXMgYGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIC4uLilgLiBJZiB0aGUgdGFibGUgKmlzbiYjMzk7dCogcHJlc2VudCwgYGFjcGlfcmFzMl9pbml0YCBqdXN0IHJldHVybnMuIFRoYXQmIzM5O3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGJ1dCBpcyB0aGF0IHJlYWNoYWJsZSBpbiBzeXprYWxsZXI/IElmIHRoZXJlJiMzOTtzIG5vIFJBUzIgdGFibGUsIHRoZSBkcml2ZXIganVzdCBzaWxlbnRseSBkb2VzIG5vdGhpbmcuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lczogaG93IGNhbiBJICpmb3JjZSogdGhpcyBjb2RlIHRvIHJ1biwgb3IgYXQgbGVhc3QgYXR0ZW1wdCB0byBydW4/CgpTeXprYWxsZXIgKmNhbiogbG9hZCBBQ1BJIHRhYmxlcyB2aWEgYGFjcGlfY29uZmlnZnNgIG9yIGBpbml0cmRgIHRhYmxlIG92ZXJyaWRlLi4uYnV0IEkmIzM5O20gbm90IHN1cmUgaWYgaXQgYWN0aXZlbHkgZG9lcyB0aGlzIGZvciBSQVMyLiBMZXQgbWUgY2hlY2sgaWYgYHBhcnNlX3JhczJfdGFibGVgIGlzIGV2ZXIgcmVhY2hlZC4gSWYgc3l6a2FsbGVyICpjYW4qIHByb3ZpZGUgY3VzdG9tIEFDUEkgdGFibGVzLCB0aGVuIHRoZSBjb2RlICppcyogcmVhY2hhYmxlLiBPa2F5LCBsZXQmIzM5O3MgYXNzdW1lIGl0IGNhbiBmb3IgdGhlIHRpbWUgYmVpbmcuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBDT05GSUdfQUNQSV9SQVMyYCwgYENPTkZJR19NRU1fQUNQSV9SQVMyYCwgYENPTkZJR19FREFDYCwgYW5kIGBDT05GSUdfRURBQ19TQ1JVQmAuIFN0YW5kYXJkIHN0dWZmLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgZHJpdmVyIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAgaW4gYGRyaXZlcnMvYWNwaS9idXMuY2AuIEV4Y2VsbGVudC4KCkZpbmFsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGlzIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb3IgcHVyZWx5IGhhcmR3YXJlIGRlcGVuZGVudCBvbiBpdC4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBtZW50aW9uIG9mIGBBQ1BJX1NJR19SQVMyYCBvdXRzaWRlIHRoZSBkcml2ZXIgaXRzZWxmLiBMZXQgbWUgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IGNvbWVzIGJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QUNQSV9TSUdfUkFTMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FjcGkvcmFzMi5jPTQ4OD12b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDkyLVxuZHJpdmVycy9hY3BpL3JhczIuYzo0OTM6XHRzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAwLCAoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKVx1MDAyNnJhczJfdGFiKTtcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDk0LVx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7XG4tLVxuaW5jbHVkZS9hY3BpL2FjdGJsMi5oLTUzLSNkZWZpbmUgQUNQSV9TSUdfUkFTRiAgICAgICAgICAgXCYjMzQ7UkFTRlwmIzM0O1x0LyogUkFTIEZlYXR1cmUgdGFibGUgKi9cbmluY2x1ZGUvYWNwaS9hY3RibDIuaDo1NDojZGVmaW5lIEFDUElfU0lHX1JBUzIgICAgICAgICAgIFwmIzM0O1JBUzJcJiMzNDtcdC8qIFJBUzIgRmVhdHVyZSB0YWJsZSAqL1xuaW5jbHVkZS9hY3BpL2FjdGJsMi5oLTU1LSNkZWZpbmUgQUNQSV9TSUdfUkdSVCAgICAgICAgICAgXCYjMzQ7UkdSVFwmIzM0O1x0LyogUmVndWxhdG9yeSBHcmFwaGljcyBSZXNvdXJjZSBUYWJsZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDAwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjA4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzOiBBQ1BJIFJBUzIgVGFibGUgYW5kIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkcml2ZXJzL2FjcGkvcmFzMi5jYCBjb2RlLCBhbmQgdGhlIGtleSBzZWVtcyB0byBiZSB0aGUgQUNQSSBSQVMyIHRhYmxlIHNpZ25hdHVyZS4gQ2FuIHN5emthbGxlciBldmVuIGZ1enogQUNQSSB0YWJsZXM/IEkga25vdyBpdCBoYXMgKnNvbWUqIHN1cHBvcnQuIEJ1dCB0aGUgZW50cnkgcG9pbnQsIGBhY3BpX3JhczJfaW5pdGAsIGlzIGNhbGxlZCBkdXJpbmcgYGFjcGlfaW5pdGAsIHdoaWNoIGlzIGFuIGBzdWJzeXNfaW5pdGNhbGxgLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIElmIHN5emthbGxlciBsb2FkcyB0YWJsZXMgdGhyb3VnaCBjb25maWdmcyBsYXRlciwgZG9lcyB0aGF0IGV2ZW4gbWF0dGVyPyBEb2VzIGBhY3BpX2dldF90YWJsZWAgcGljayB1cCB0YWJsZXMgbG9hZGVkIGFmdGVyIGBhY3BpX2luaXRgIHJ1bnM/CgpBY3R1YWxseSwgdGhlIG1vcmUgSSB0aGluayBhYm91dCBpdCwgYGFjcGlfcmFzMl9pbml0YCBzZWVtcyB0byBiZSBhICpvbmUtc2hvdCogZGVhbCBkdXJpbmcgYm9vdC4gSWYgdGhlIHRhYmxlIGlzbiYjMzk7dCB0aGVyZSBhdCB0aGF0IGV4YWN0IG1vbWVudCwgaXQgYmFpbHMgb3V0LiBDb3VsZCB3ZSBpbmplY3QgaXQgdmlhIHRoZSBRRU1VIGNvbW1hbmQgbGluZT8gUG9zc2libGUsIGJ1dCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZHluYW1pY2FsbHkgc3dhcCBBQ1BJIHRhYmxlcyBwZXIgdGVzdCBjYXNlLCBpdCBoYXMgYSBmaXhlZCBRRU1VIGNvbmZpZy4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbiAmIzM0O2luamVjdCBBQ1BJIHRhYmxlJiMzNDsgc3l6Y2FsbCBsaWtlIGBzeXpfYWNwaV9sb2FkYD8gTm8sIHRoZXJlIGlzbiYjMzk7dCBvbmUuIEhtbS4uLmlzIHRoZXJlIGV2ZW4gYW55IHdheSB0byB0ZXN0IHRoaXMgd2l0aCBzeXprYWxsZXI/CgpJZiBgYWNwaV9yYXMyX2luaXRgIG9ubHkgcnVucyBhdCBib290LCBhbmQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHJlYm9vdCB3aXRoIGN1c3RvbSBBQ1BJIHRhYmxlcywgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIExldCBtZSBjb25maXJtIHRoYXQgYGFjcGlfcmFzMl9pbml0YCBpcyB0aGUgc29sZSBlbnRyeSBwb2ludC4gWWVwLCBpdCBwYXJzZXMgdGhlIHRhYmxlIGFuZCBjcmVhdGVzIGF1eGlsaWFyeSBkZXZpY2VzLiBUaGUgYHJhczJfbWVtX2RyaXZlcmAgYmluZHMgdG8gdGhlc2UgZGV2aWNlcy4gTm8gZGV2aWNlcywgbm8gcHJvYmUsIGFuZCB0aGUgd2hvbGUgYGRyaXZlcnMvYWNwaS9yYXMyLmNgIGFuZCBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgIGFyZSBkZWFkIGNvZGUgdW5sZXNzIHRoZSBSQVMyIHRhYmxlIGlzIHByZXNlbnQgYXQgYm9vdC4KClNpbmNlIFFFTVUgZG9lc24mIzM5O3QgcHJvdmlkZSB0aGUgUkFTMiB0YWJsZSBieSBkZWZhdWx0LCBhbmQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGluamVjdCBpdCBhdCBib290LCB0aGlzIGNvZGUgaXMgbGlrZWx5ICp1bnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0IG1lIGRvdWJsZS1jaGVjazogaXMgdGhlcmUgQU5ZIG90aGVyIHdheSB0byBjYWxsIGBwYXJzZV9yYXMyX3RhYmxlYCBvciBgcmFzMl9tZW1fZHJ2X3Byb2JlYD8gYHJhczJfbWVtX2Rydl9wcm9iZWAgZ2V0cyBjYWxsZWQgYnkgdGhlIGF1eGlsaWFyeSBidXMgd2hlbiBhIGRldmljZSBtYXRjaGluZyBgUkFTMl9NRU1fREVWX0lEX05BTUVgIGlzIGFkZGVkLiBBbmQgd2hlcmUgZG9lcyB0aGF0IGRldmljZSBjb21lIGZyb20/IEl0JiMzOTtzIGBwYXJzZV9yYXMyX3RhYmxlYCEgV2hpY2ggaXMgb25seSBjYWxsZWQgYnkgYGFjcGlfcmFzMl9pbml0YCwgYW5kIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGJ5IGBhY3BpX2luaXRgLgoKQ2FuIHdlIGNyZWF0ZSBhbiBhdXhpbGlhcnkgZGV2aWNlIGZyb20gdXNlcnNwYWNlPyBObywgYXV4aWxpYXJ5IGRldmljZXMgYXJlIGNyZWF0ZWQgYnkga2VybmVsIGNvZGUuIElzIHRoZXJlIGFueSB3YXkgdG8gdHJpZ2dlciBgYWNwaV9pbml0YCBhZ2Fpbj8gTm8sIGl0JiMzOTtzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLgoKU28sIHdpdGhvdXQgYSBSQVMyIEFDUEkgdGFibGUgcHJvdmlkZWQgYXQgYm9vdCwgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIFNpbmNlIHdlJiMzOTtyZSBldmFsdWF0aW5nIGlmIHN5emthbGxlciBzaG91bGQgZXZlbiB0cnksIGFuZCBzeXprYWxsZXIgcnVucyBpbiBRRU1VL0dDRSAqd2l0aG91dCogY3VzdG9tIGZpcm13YXJlIHdpdGggUkFTMiwgdGhpcyBjb2RlIGlzIGRlYWQuCgpXYWl0LCB3aGF0IGlmIHN5emthbGxlciBsb2FkcyB0aGUgdGFibGUgdmlhIGBhY3BpX2NvbmZpZ2ZzYD8gSXQgd291bGRuJiMzOTt0IG1hdHRlciwgYGFjcGlfcmFzMl9pbml0YCBoYXMgYWxyZWFkeSBydW4gYW5kIHJldHVybmVkLiBXYWl0LCBkb2VzIGBhY3BpX2dldF90YWJsZWAgZ2V0IGNhbGxlZCBhZ2FpbiBvbiB0YWJsZSBsb2FkPyBOby4gYGFjcGlfcmFzMl9pbml0YCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYWNwaV9pbml0YC4gVGhlcmUmIzM5O3Mgbm8gQUNQSSB0YWJsZSBub3RpZmllciBmb3IgUkFTMi4gQ29tcGFyZSB0aGF0IHRvIGBhY3BpX25maXRfaW5pdGAgd2hpY2ggKmRvZXMqIHJlZ2lzdGVyIGFuIEFDUEkgdGFibGUgaGFuZGxlci4uLiBMZXQmIzM5O3Mgc2VlIGlmIGBhY3BpX3JhczJfaW5pdGAgZG9lcyBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIGl0IGp1c3QgZG9lcyBhIG9uZS10aW1lIGBhY3BpX2dldF90YWJsZWAgYXQgYm9vdCBhbmQgY2FsbHMgYHBhcnNlX3JhczJfdGFibGVgIGlmIGl0IGZpbmRzIGl0LgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhZ2FpbiwgaXMgdGhlcmUgYW55IG90aGVyIHdheSB0byBjYWxsIGByYXMyX21lbV9kcnZfcHJvYmVgPyBNYXliZSBzb21lIG90aGVyIGRyaXZlciBzb21laG93IGNyZWF0ZXMgdGhlIGF1eGlsaWFyeSBkZXZpY2U/IE5vLCB0aGUgZGV2aWNlIElEIGlzIGAmIzM0O2FjcGlfcmFzMl9tZW0mIzM0O2AuIExldCBtZSBzZWFyY2ggZm9yIGl0IGFuZCBiZSBzdXJlLi4uIE5vcGUuIENvbmZpcm1lZC4gVGhpcyBjb2RlIGlzICp1bnJlYWNoYWJsZSogaW4gdGhlIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3BpX3JhczJfbWVtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvYWNwaS9yYXMyLmg9MTc9c3RydWN0IGRldmljZTtcbi0tXG5pbmNsdWRlL2FjcGkvcmFzMi5oLTI1LSNkZWZpbmUgUkFTMl9BVVhfREVWX05BTUUgXCYjMzQ7cmFzMlwmIzM0O1xuaW5jbHVkZS9hY3BpL3JhczIuaDoyNjojZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FIFwmIzM0O2FjcGlfcmFzMl9tZW1cJiMzNDtcbmluY2x1ZGUvYWNwaS9yYXMyLmgtMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MTQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUkFTMiBEZXZpY2UgYW5kIEVEQUMgU2NydWIgSW50ZXJmYWNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFJBUzIgZGV2aWNlLCBhbmQgaXQgc2VlbXMgdGhlIG9ubHkgd2F5IGl0IGdldHMgY3JlYXRlZCBpcyB0aHJvdWdoIGBhY3BpX3JhczJfaW5pdGAuIFRoaXMgaXMgYSBiaXQgb2YgYSBwcm9ibGVtIGJlY2F1c2UgaXQmIzM5O3MgaGFyZHdhcmUtZGVwZW5kZW50LCBuZWVkaW5nIHNwZWNpZmljIEFDUEkgdGFibGVzIGZyb20gdGhlIGZpcm13YXJlLCBhbmQgaXQgb25seSBjaGVja3MgdGhpcyBhdCBib290IHRpbWUuIFRoYXQgbWVhbnMgaXQmIzM5O3MgYmFzaWNhbGx5IHVudG91Y2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVubGVzcyB3ZSBzcGVjaWZpY2FsbHkgY29uZmlndXJlIFFFTVUgdG8gcGFzcyBhIGN1c3RvbSBBQ1BJIHRhYmxlLCBhbmQgU3l6a2FsbGVyIGlzbiYjMzk7dCBkb2luZyB0aGF0IGR5bmFtaWNhbGx5IGZvciBSQVMyIGF0IHRoZSBtb21lbnQuIEl0IGlzIGdvaW5nIHRvIGJlIGluY3JlZGlibHkgZGlmZmljdWx0IHRvIHJlcHJvZHVjZSBhbnkgaXNzdWVzLgoKV2FpdCBhIHNlY29uZCwgdGhlcmUmIzM5O3MgYSByZWxhdGVkIGNoYW5nZSBpbiBgZHJpdmVycy9lZGFjL3NjcnViLmNgISBJIG1pc3NlZCB0aGlzIGluaXRpYWxseS4gSXQgbG9va3MgbGlrZSBhIG5ldyBhdHRyaWJ1dGUgYGVuYWJsZV9kZW1hbmRgIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBFREFDIHNjcnViIHN5c2ZzIGludGVyZmFjZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXMgYW55IG90aGVyIGRyaXZlciB1c2luZyB0aGlzIG5ldyBhdHRyaWJ1dGU/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgb3RoZXIgZHJpdmVycyBzZXR0aW5nIGBnZXRfZW5hYmxlZF9vZGAgb3IgYHNldF9lbmFibGVkX29kYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAwMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfZW5hYmxlZF9vZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2VkYWMvc2NydWIuYz04OD1FREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2JhY2tncm91bmQsIHNldF9lbmFibGVkX2JnLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jOjg5OkVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG5kcml2ZXJzL2VkYWMvc2NydWIuYy05MC1FREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbi0tXG5kcml2ZXJzL2VkYWMvc2NydWIuYz05Mj1zdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxuLS1cbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTEyNi1cdFx0aWYgKG9wcy1cdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xuZHJpdmVycy9lZGFjL3NjcnViLmM6MTI3Olx0XHRcdGlmIChvcHMtXHUwMDNlc2V0X2VuYWJsZWRfb2QpXG5kcml2ZXJzL2VkYWMvc2NydWIuYy0xMjgtXHRcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuLS1cbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jPTM4MT1zdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcbi0tXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYy0zOTYtXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYzozOTc6c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMtMzk4LXtcbi0tXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYz00ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcbi0tXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYy00OTYtXHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxuZHJpdmVycy9yYXMvYWNwaV9yYXMyLmM6NDk3Olx0LnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQ5OC1cdC5nZXRfbWluX2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21pbl9zY3J1Yl9jeWNsZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaD02NzI9ZW51bSBlZGFjX2Rldl9mZWF0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC02ODctICogQGdldF9lbmFibGVkX29kOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBkZW1hbmQgc2NydWIuXG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo2ODg6ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxuaW5jbHVkZS9saW51eC9lZGFjLmgtNjg5LSAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaD02OTQ9c3RydWN0IGVkYWNfc2NydWJfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC03MDEtXHRpbnQgKCpnZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbmluY2x1ZGUvbGludXgvZWRhYy5oOjcwMjpcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG5pbmNsdWRlL2xpbnV4L2VkYWMuaC03MDMtXHRpbnQgKCpnZXRfbWluX2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptaW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDAwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjI3CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDM2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIG5ldyBgc2V0X2VuYWJsZWRfb2RgIGZ1bmN0aW9uIGlzICpvbmx5KiB1c2VkIHdpdGhpbiBgYWNwaV9yYXMyLmNgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBuZXcgRURBQyBzY3J1YiBhdHRyaWJ1dGUgaXMgZXhjbHVzaXZlbHkgdGllZCB0byB0aGUgbmV3IEFDUEkgUkFTMiBkcml2ZXIuIEdpdmVuIHRoYXQsIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiBldmVuICpoaXQqIHRoaXMgY29kZS4KCk15IGZpcnN0IHRob3VnaHQgd2FzLCAmIzM0O0NvdWxkIG91ciBmdXp6aW5nIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgc3l6a2FsbGVyLCBwcm92aWRlIGEgcGF0aHdheT8mIzM0OyBJIG5lZWQgdG8gY29uc2lkZXIgdGhhdC4gVGhlbiBJIHJlbWVtYmVyZWQgdGhlIEFDUEkgdGFibGUgaW5qZWN0aW9uIG1lY2hhbmlzbSBpbiBzeXprYWxsZXIgdmlhIGBhY3BpX2NvbmZpZ2ZzYC4gSG93ZXZlciwgYSBxdWljayBsb29rIHJldmVhbHMgdGhhdCBgYWNwaV9yYXMyX2luaXRgIGlzIGNhbGxlZCBkaXJlY3RseSBkdXJpbmcgdGhlIGtlcm5lbCYjMzk7cyBib290LXVwIHNlcXVlbmNlIGZyb20gYGFjcGlfaW5pdGAsIGFuZCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gcmVnaXN0ZXIgaXRzZWxmIHRvIGJlIGNhbGxlZCBsYXRlci4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMuLi4gT2theSwgd2FpdC4uLiBgYWNwaV9uZml0X2luaXRgIGlzIGFsc28gY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAsIGFuZCB0aGF0ICpkb2VzKiByZWdpc3RlciBhbiBBQ1BJIGRyaXZlci4gVGhhdCYjMzk7cyBhIG1vZHVsZSBpbml0IGZ1bmN0aW9uISBgYWNwaV9yYXMyX2luaXRgIGRvZXMgbm90LiBJdCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYWNwaV9pbml0YCBhbmQganVzdCBjYWxscyBgYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgLi4uKWAuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgQUNQSSB0YWJsZSBnZXRzIGxvYWRlZCBsYXRlciB2aWEgY29uZmlnZnMsIGBhY3BpX3JhczJfaW5pdGAgd29uJiMzOTt0IGJlIHJlLWV4ZWN1dGVkLiBJdCYjMzk7cyBzdHJpY3RseSBhIGJvb3QtdGltZSB0aGluZy4KClNvLCByZWFsaXN0aWNhbGx5LCB3ZSBjYW4mIzM5O3QgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gc3l6a2FsbGVyLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyB1bnJlYWNoYWJsZSBjb2RlLCB3aGljaCBpcyBoYXJkd2FyZS1kZXBlbmRlbnQgKG5lZWRpbmcgYW4gQUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgaW4gZmlybXdhcmUgYXQgYm9vdCkgYW5kLCBhcyBzdWNoLCB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UuIEkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLCBjaXRpbmcgdGhlc2UgcmVhc29ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMDA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBmb3IgQUNQSSBSQVMyIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuIFRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gKGFjcGlfcmFzMl9pbml0KSBpcyBjYWxsZWQgZXhhY3RseSBvbmNlIGR1cmluZyBib290IChmcm9tIGFjcGlfaW5pdCkgYW5kIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBBQ1BJIFJBUzIgdGFibGUuIFNpbmNlIFFFTVUvR0NFIGRvIG5vdCBwcm92aWRlIHRoaXMgc3BlY2lmaWMgQUNQSSB0YWJsZSBieSBkZWZhdWx0LCBhbmQgdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IGR5bmFtaWMgdGFibGUgbG9hZGluZyAoZS5nLiwgdmlhIGNvbmZpZ2ZzKSwgdGhlIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gVGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiAoYWNwaV9yYXMyX2luaXQpIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QgKGZyb20gYWNwaV9pbml0KSBhbmQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFDUEkgUkFTMiB0YWJsZS4gU2luY2UgUUVNVS9HQ0UgZG8gbm90IHByb3ZpZGUgdGhpcyBzcGVjaWZpYyBBQ1BJIHRhYmxlIGJ5IGRlZmF1bHQsIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyB0YWJsZSBsb2FkaW5nIChlLmcuLCB2aWEgY29uZmlnZnMpLCB0aGUgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDAwOjM2OjIzLjYwNjc3MjM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNDUzNDI0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gVGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiAoYWNwaV9yYXMyX2luaXQpIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QgKGZyb20gYWNwaV9pbml0KSBhbmQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFDUEkgUkFTMiB0YWJsZS4gU2luY2UgUUVNVS9HQ0UgZG8gbm90IHByb3ZpZGUgdGhpcyBzcGVjaWZpYyBBQ1BJIHRhYmxlIGJ5IGRlZmF1bHQsIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyB0YWJsZSBsb2FkaW5nIChlLmcuLCB2aWEgY29uZmlnZnMpLCB0aGUgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDA6MzY6MjMuNjA2Nzc3MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjgzNTk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQzMWNlMDVkMjFlYWQwZmZkMjdiM2M4ZGNiZmQ1MTNkZWIwYWM5NGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgNiAwMDozNjoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcXG5pbmRleCBhYjYwMTQ3NDNkYTU2OC4uMmI4NzRlMDMzNjIzMzQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuQEAgLTIwLDExICsyMCw3IEBAIEtlcm5lbFZlcnNpb246XFx0Ni4xNVxcbiBDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuIERlc2NyaXB0aW9uOlxcbiBcXHRcXHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4tXFx0XFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxcbi1cXHRcXHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cXG4tXFxuLVxcdFxcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcXG4tXFx0XFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXFxuK1xcdFxcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxcbiBcXG4gV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1Ylgvc2l6ZVxcbiBEYXRlOlxcdFxcdE1hcmNoIDIwMjVcXG5AQCAtMzQsNiArMzAsMTQgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdChSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4gXFx0XFx0KG9uLWRlbWFuZCBzY3J1YmJpbmcpLlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1YlgvZW5hYmxlX2RlbWFuZFxcbitEYXRlOlxcdFxcdEphbiAyMDI2XFxuK0tlcm5lbFZlcnNpb246XFx0Ni4xOVxcbitDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHQoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzXFxuK1xcdFxcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cXHUwMDNjZGV2LW5hbWVcXHUwMDNlL3NjcnViWC9lbmFibGVfYmFja2dyb3VuZFxcbiBEYXRlOlxcdFxcdE1hcmNoIDIwMjVcXG4gS2VybmVsVmVyc2lvbjpcXHQ2LjE1XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XFxuaW5kZXggMmNmYTc0ZmExZmZkMmYuLjU2MmJmZDZmZjYzMDUxIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XFxuQEAgLTM0MCwzICszNDAsNzMgQEAgY29udHJvbGxlciBvciBwbGF0Zm9ybSB3aGVuIHVuZXhwZWN0ZWRseSBoaWdoIGVycm9yIHJhdGVzIGFyZSBkZXRlY3RlZC5cXG4gXFxuIFN5c2ZzIGZpbGVzIGZvciBzY3J1YmJpbmcgYXJlIGRvY3VtZW50ZWQgaW5cXG4gYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1lY3NgXFxuK1xcbiszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZ1xcbitcXG4rMy4xLiBEZW1hbmQgc2NydWJiaW5nIGZvciBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uXFxuK1xcbiszLjEuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxcbitcXG4rMFxcbitcXG4rMy4xLjIuIFF1ZXJ5IHdoYXQgaXMgZGV2aWNlIGRlZmF1bHQvY3VycmVudCBzY3J1YiBjeWNsZSBzZXR0aW5nLlxcbitcXG4rQXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZVxcbitzY3J1YiBjeWNsZSBpcyBzZWNvbmRzLlxcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cXG4rXFxuKzM2MDAwXFxuK1xcbiszLjEuMy4gUXVlcnkgdGhlIHJhbmdlIG9mIGRldmljZSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZm9yIGEgbWVtb3J5IHJlZ2lvbi5cXG4rVGhlIHVuaXQgb2YgdGhlIHNjcnViIGN5Y2xlIHJhbmdlIGlzIHNlY29uZHMuXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWluX2N5Y2xlX2R1cmF0aW9uXFxuK1xcbiszNjAwXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWF4X2N5Y2xlX2R1cmF0aW9uXFxuK1xcbis4NjQwMFxcbitcXG4rMy4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnlcXG4rNDMyMDAgc2Vjb25kcyAoaGFsZiBhIGRheSkuXFxuK1xcbisjIGVjaG8gNDMyMDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxcbitcXG4rMy4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxcbitcXG4rU2V0ICdhZGRyJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cXG4rXFxuKyMgZWNobyAweDgwMDAwMDAwIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHJcXG4rXFxuK1NldCAnc2l6ZScgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXFxuK1xcbisjIGVjaG8gMHgyMDAwMDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvc2l6ZVxcbitcXG4rMy4xLjYuIFN0YXJ0ICdkZW1hbmQgc2NydWJiaW5nJy5cXG4rXFxuK1doZW4gYSBkZW1hbmQgc2NydWIgaXMgc3RhcnRlZCwgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzXFxuK3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlXFxuK2RlbWFuZCBzY3J1YiBoYXMgY29tcGxldGVkLlxcbitcXG4rIyBlY2hvIDEgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxcbitcXG4rMy4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxcbitcXG4rMy4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcXG4rXFxuKzBcXG4rXFxuKzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcXG4rc2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXFxuK1xcbisjIGVjaG8gMjE2MDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxcbitcXG4rMy4yLjMuIFN0YXJ0ICdiYWNrZ3JvdW5kIHNjcnViYmluZycuXFxuK1xcbisjIGVjaG8gMSBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXFxuaW5kZXggZjE2NWQxNGNmNjFhM2EuLjUzOWZmMTQzY2NjNTIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWdcXG5AQCAtMjk0LDYgKzI5NCwxNyBAQCBjb25maWcgQUNQSV9DUFBDX0xJQlxcbiBcXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxcbiBcXHQgIGxlYXZlIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxcbiBcXG4rY29uZmlnIEFDUElfUkFTMlxcbitcXHRib29sIFxcXCJBQ1BJIFJBUzIgZHJpdmVyXFxcIlxcbitcXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbitcXHRkZXBlbmRzIG9uIE1BSUxCT1hcXG4rXFx0ZGVwZW5kcyBvbiBQQ0NcXG4rXFx0aGVscFxcbitcXHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXFxuK1xcdCAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgc2VsZWN0IE4uXFxuK1xcbiBjb25maWcgQUNQSV9QUk9DRVNTT1JcXG4gXFx0dHJpc3RhdGUgXFxcIlByb2Nlc3NvclxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxcbmluZGV4IGQxYjBhZmZiODQ0ZjA1Li5hYmZlYzY3NDU3MjRlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcXG5AQCAtMTA1LDYgKzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpXFx0Kz0gZWNfc3lzLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfQkdSVClcXHRcXHQrPSBiZ3J0Lm9cXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXFx0Kz0gY3BwY19hY3BpLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSlcXHQrPSBzcGNyLm9cXG4rb2JqLSQoQ09ORklHX0FDUElfUkFTMilcXHRcXHQrPSByYXMyLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgKz0gYWNwaV9kYmcub1xcbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcXHQrPSBwcHR0Lm9cXG4gb2JqLSQoQ09ORklHX0FDUElfUEZSVVQpXFx0Kz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmNcXG5pbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jXFxuKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jXFxuQEAgLTMxLDYgKzMxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FjcGkvYXBlaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3VzcGVuZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJtdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gXFxuQEAgLTE2MTAsNiArMTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxcbiBcXHRhY3BpX2RlYnVnZ2VyX2luaXQoKTtcXG4gXFx0YWNwaV9zZXR1cF9zYl9ub3RpZnlfaGFuZGxlcigpO1xcbiBcXHRhY3BpX3Zpb3RfaW5pdCgpO1xcbitcXHRhY3BpX3JhczJfaW5pdCgpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTllY2JlN2M4MTk5YmJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9hY3BpL3JhczIuY1xcbkBAIC0wLDAgKzEsNTAzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogQUNQSSBSQVMyIGZlYXR1cmUgdGFibGUgZHJpdmVyLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cXG4rICpcXG4rICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaFxcbisgKiBwcm92aWRlcyBpbnRlcmZhY2VzIGZvciBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIGUuZy4sIGZvciBIVy1iYXNlZCBtZW1vcnlcXG4rICogc2NydWJiaW5nLCBhbmQgbG9naWNhbCB0byBwaHlzaWNhbCBhZGRyZXNzIHRyYW5zbGF0aW9uIHNlcnZpY2UuIFJBUzIgdXNlc1xcbisgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS5cXG4rICovXFxuK1xcbisjdW5kZWYgcHJfZm10XFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcIkFDUEkgUkFTMjogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL3BjYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cXG4rICogQG1ib3hfY2xpZW50OlxcdHN0cnVjdCBtYm94X2NsaWVudCBvYmplY3RcXG4rICogQHBjY19jaGFuOlxcdFxcdFBvaW50ZXIgdG8gc3RydWN0IHBjY19tYm94X2NoYW5cXG4rICogQGNvbW1fYWRkcjpcXHRcXHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBlbGVtOlxcdFxcdExpc3QgZm9yIHJlZ2lzdGVyZWQgUkFTMiBQQ0MgY2hhbm5lbCBzdWJzcGFjZXNcXG4rICogQHBjY19sb2NrOlxcdFxcdFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xcbisgKlxcdFxcdFxcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXFxuKyAqIEBkZWFkbGluZV91czpcXHRQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgdGltZW91dCBpbiBtaWNyb3NlY3NcXG4rICpcXHRcXHRcXHRmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvblxcbisgKiBAcGNjX21wYXI6XFx0XFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXFxuKyAqIEBwY2NfbXJ0dDpcXHRcXHRNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKSBpbiBtaWNyb3NlY3NcXG4rICpcXHRcXHRcXHRPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZVxcbisgKlxcdFxcdFxcdGlzc3VpbmcgbmV4dCBjb21tYW5kXFxuKyAqIEBsYXN0X2NtZF9jbXBsX3RpbWU6IENvbXBsZXRpb24gdGltZSBvZiBsYXN0IFBDQyBjb21tYW5kXFxuKyAqIEBsYXN0X21wYXJfcmVzZXQ6XFx0VGltZSBvZiBsYXN0IE1QQVIgY291bnQgcmVzZXRcXG4rICogQG1wYXJfY291bnQ6XFx0XFx0TVBBUiBjb3VudFxcbisgKiBAcGNjX2lkOlxcdFxcdElkZW50aWZpZXIgb2YgdGhlIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsXFxuKyAqIEBsYXN0X2NtZDpcXHRcXHRMYXN0IFBDQyBjb21tYW5kXFxuKyAqIEBrcmVmOlxcdFxcdGtyZWYgb2JqZWN0XFxuKyAqL1xcbitzdHJ1Y3QgcmFzMl9zc3BjYyB7XFxuK1xcdHN0cnVjdCBtYm94X2NsaWVudFxcdFxcdG1ib3hfY2xpZW50O1xcbitcXHRzdHJ1Y3QgcGNjX21ib3hfY2hhblxcdFxcdCpwY2NfY2hhbjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXFx0KmNvbW1fYWRkcjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGVsZW07XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdHBjY19sb2NrO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRkZWFkbGluZV91cztcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0cGNjX21wYXI7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdFxcdHBjY19tcnR0O1xcbitcXHRrdGltZV90XFx0XFx0XFx0XFx0bGFzdF9jbWRfY21wbF90aW1lO1xcbitcXHRrdGltZV90XFx0XFx0XFx0XFx0bGFzdF9tcGFyX3Jlc2V0O1xcbitcXHRpbnRcXHRcXHRcXHRcXHRtcGFyX2NvdW50O1xcbitcXHRpbnRcXHRcXHRcXHRcXHRwY2NfaWQ7XFxuK1xcdHUxNlxcdFxcdFxcdFxcdGxhc3RfY21kO1xcbitcXHRzdHJ1Y3Qga3JlZlxcdFxcdFxcdGtyZWY7XFxuK307XFxuK1xcbisvKlxcbisgKiBBcmJpdHJhcnkgcmV0cmllcyBmb3IgUENDIGNvbW1hbmRzIGJlY2F1c2UgdGhlIHJlbW90ZSBwcm9jZXNzb3IgY291bGQgYmVcXG4rICogbXVjaCBzbG93ZXIgdG8gcmVwbHkuIEtlZXAgaXQgaGlnaCBlbm91Z2ggdG8gY292ZXIgZW11bGF0b3JzIHdoZXJlIHRoZVxcbisgKiBwcm9jZXNzb3JzIHJ1biBwYWluZnVsbHkgc2xvdy5cXG4rICovXFxuKyNkZWZpbmUgUENDX05VTV9SRVRSSUVTIDYwMFVMTFxcbisjZGVmaW5lIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWSAxMDAwXFxuKyNkZWZpbmUgUENDX01JTl9QT0xMX1VTRUNTIDNcXG4rXFxuKyNkZWZpbmUgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUyAxMDBcXG4rI2RlZmluZSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkgMHgwMFxcbitcXG4rLyogU3RhdGljIHZhcmlhYmxlcyBmb3IgdGhlIFJBUzIgUENDIHN1YnNwYWNlcyAqL1xcbitzdGF0aWMgREVGSU5FX01VVEVYKHJhczJfcGNjX2xpc3RfbG9jayk7XFxuK3N0YXRpYyBMSVNUX0hFQUQocmFzMl9zc3BjYyk7XFxuK1xcbitzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHR1MzIgY2FwX3N0YXR1cztcXG4rXFx0dTE2IHN0YXR1cztcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxcbitcXHQgKiBwbGF0Zm9ybSBhbmQgc2hvdWxkIGhhdmUgc2V0IHRoZSBjb21tYW5kIGNvbXBsZXRpb24gYml0IHdoZW5cXG4rXFx0ICogUENDIGNhbiBiZSB1c2VkIGJ5IE9TUE0uXFxuK1xcdCAqXFxuK1xcdCAqIFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciBldmVyeSBQQ0NfTUlOX1BPTExfVVNFQ1MgZm9yIG1heGltdW0gb2ZcXG4rXFx0ICogUENDX05VTV9SRVRSSUVTICogUENDIGNoYW5uZWwgbGF0ZW5jeSB1bnRpbCBQQ0MgY29tbWFuZCBjb21wbGV0ZVxcbitcXHQgKiBiaXQgaXMgc2V0LlxcbitcXHQgKi9cXG4rXFx0cmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dChcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzLCBzdGF0dXMsXFxuK1xcdFxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxcbitcXHRcXHRcXHRcXHRcXHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRwcl93YXJuKFxcXCJQQ0MgSUQ6IDB4JXg6IFBDQyBjaGVjayBjaGFubmVsIHRpbWVvdXQgZm9yIGxhc3QgY29tbWFuZDogMHgleCByYz0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZXBjY19pZCwgc3NwY2MtXFx1MDAzZWxhc3RfY21kLCByYyk7XFxuK1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzdGF0dXMgXFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIlBDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZXBjY19pZCwgc3NwY2MtXFx1MDAzZWxhc3RfY21kKTtcXG4rXFx0XFx0c3RhdHVzIFxcdTAwMjY9IH5QQ0NfU1RBVFVTX0VSUk9SO1xcbitcXHRcXHRpb3dyaXRlMTYoc3RhdHVzLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4rXFx0XFx0aW93cml0ZTMyKDB4MCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHQvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqL1xcbitcXHRybWIoKTtcXG4rXFx0Y2FwX3N0YXR1cyA9IGlvcmVhZDMyKFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xcbitcXHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfTk9UX1ZBTElEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxcbitcXHRcXHRyYyA9IC1FUEVSTTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUNQSV9SQVMyX0JVU1k6XFxuK1xcdFxcdHJjID0gLUVCVVNZO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfRkFJTEVEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9BQk9SVEVEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XFxuK1xcdFxcdHJjID0gLUVJTlZBTDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJjID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aW93cml0ZTMyKDB4MCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXFxuKyAqIEByYXMyX2N0eDpcXHRwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlXFxuKyAqIEBjbWQ6XFx0UkFTMiBjb21tYW5kIHRvIHNlbmRcXG4rICpcXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBvdGhlcndpc2VcXG4rICovXFxuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XFxuK1xcdHN0cnVjdCBtYm94X2NoYW4gKnBjY19jaGFubmVsO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcdHM2NCB0aW1lX2RlbHRhO1xcbitcXHR1MTYgdmFsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0c3NwY2MgPSByYXMyX2N0eC1cXHUwMDNlc3NwY2M7XFxuK1xcdGdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXG4rXFx0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHBjY19jaGFubmVsID0gc3NwY2MtXFx1MDAzZXBjY19jaGFuLVxcdTAwM2VtY2hhbjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXFxuK1xcdCAqIGFtb3VudCBvZiB0aW1lIHRoYXQgT1NQTSBtdXN0IHdhaXQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2ZcXG4rXFx0ICogYSBjb21tYW5kIGJlZm9yZSBpc3N1aW5nIHRoZSBuZXh0IGNvbW1hbmQsIGluIG1pY3Jvc2Vjb25kcy5cXG4rXFx0ICovXFxuK1xcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21ydHQpIHtcXG4rXFx0XFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lKTtcXG4rXFx0XFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCBcXHUwMDNlIHRpbWVfZGVsdGEpXFxuK1xcdFxcdFxcdGZzbGVlcChzc3BjYy1cXHUwMDNlcGNjX21ydHQgLSB0aW1lX2RlbHRhKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXFxuK1xcdCAqIG1heGltdW0gbnVtYmVyIG9mIHBlcmlvZGljIHJlcXVlc3RzIHRoYXQgdGhlIHN1YnNwYWNlIGNoYW5uZWwgY2FuXFxuK1xcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXFxuK1xcdCAqIGxpbWl0YXRpb24uXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcXG4rXFx0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXFxuK1xcdCAqIHN5c3RlbSBjYW4gY29sbGVjdGl2ZWx5IGdlbmVyYXRlLiBJZiBpdCBpcyBub3QsIGZvbGxvdyB0aGUgc3BlYyBhbmRcXG4rXFx0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxcbitcXHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cXG4rXFx0ICovXFxuK1xcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21wYXIpIHtcXG4rXFx0XFx0aWYgKCFzc3BjYy1cXHUwMDNlbXBhcl9jb3VudCkge1xcbitcXHRcXHRcXHR0aW1lX2RlbHRhID0ga3RpbWVfbXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVxcdTAwM2VsYXN0X21wYXJfcmVzZXQpO1xcbitcXHRcXHRcXHRpZiAoKHRpbWVfZGVsdGEgXFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXFx1MDAyNlxcdTAwMjYgc3NwY2MtXFx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xcbitcXHRcXHRcXHRcXHRkZXZfZGJnKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJQQ0MgY29tbWFuZCAweCV4IG5vdCBzZW50IGR1ZSB0byBNUEFSIGxpbWl0XFxcIiwgY21kKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZWxhc3RfbXBhcl9yZXNldCA9IGt0aW1lX2dldCgpO1xcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVxcdTAwM2VwY2NfbXBhcjtcXG4rXFx0XFx0fVxcbitcXHRcXHRzc3BjYy1cXHUwMDNlbXBhcl9jb3VudC0tO1xcbitcXHR9XFxuK1xcbitcXHQvKiBXcml0ZSB0byB0aGUgc2hhcmVkIGNvbW0gcmVnaW9uICovXFxuK1xcdGlvd3JpdGUxNihjbWQsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2Vjb21tYW5kKTtcXG4rXFxuK1xcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xcbitcXHRpb3dyaXRlMTYoMCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuK1xcbitcXHQvKiBSaW5nIGRvb3JiZWxsICovXFxuK1xcdHJjID0gbWJveF9zZW5kX21lc3NhZ2UocGNjX2NoYW5uZWwsIFxcdTAwMjZjbWQpO1xcbitcXHQvKlxcbitcXHQgKiBtYm94X3NlbmRfbWVzc2FnZSgpIHJldHVybnMgYSBub24tbmVnYXRpdmUgaW50ZWdlciBmb3Igc3VjY2Vzc2Z1bCBzdWJtaXNzaW9uXFxuK1xcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXFxuK1xcdCAqL1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl93YXJuKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxcXG5cXFwiLCBjbWQsIHJjKTtcXG4rXFx0XFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXFxuK1xcdFxcdHZhbCA9IGlvcmVhZDE2KFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXHRcXHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XFxuK1xcdFxcdGlvd3JpdGUxNih2YWwsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJjID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0c3NwY2MtXFx1MDAzZWxhc3RfY21kID0gY21kO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXFxuK1xcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcXG4rXFx0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuXFxuK1xcdCAqL1xcbitcXHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCkge1xcbitcXHRcXHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcXG4rXFx0XFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dClcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSA9IGt0aW1lX2dldCgpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXBjY19jaGFubmVsLVxcdTAwM2VtYm94LVxcdTAwM2V0eGRvbmVfaXJxKVxcbitcXHRcXHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcXFwiYWNwaV9yYXMyXFxcIik7XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VlbGVtKTtcXG4rXFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVxcdTAwM2VwY2NfY2hhbik7XFxuK1xcdGtmcmVlKHNzcGNjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxcbit7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZiwgIFxcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2c3NwY2MtXFx1MDAzZWtyZWYpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHJldHVybiBzc3BjYztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcbitcXHRpZiAocGNjX2lkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7XFxuK1xcdGlmIChzc3BjYykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc3NwY2NcXHRcXHQ9IHNzcGNjO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyXFx0PSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlZGV2XFx0XFx0PVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc3NwY2MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcXG4rXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4rXFx0XFx0a2ZyZWUoc3NwY2MpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGNjX2NoYW4tXFx1MDAzZXNobWVtKSB7XFxuK1xcdFxcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChwY2NfY2hhbik7XFxuK1xcdFxcdGtmcmVlKHNzcGNjKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfaWRcXHRcXHQ9IHBjY19pZDtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19jaGFuXFx0XFx0PSBwY2NfY2hhbjtcXG4rXFx0c3NwY2MtXFx1MDAzZWNvbW1fYWRkclxcdD0gcGNjX2NoYW4tXFx1MDAzZXNobWVtO1xcbitcXHRpZiAocGNjX2NoYW4tXFx1MDAzZWxhdGVuY3kpXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLVxcdTAwM2VsYXRlbmN5O1xcbitcXHRlbHNlXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcnR0XFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcGFyXFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWF4X2FjY2Vzc19yYXRlO1xcbitcXHRzc3BjYy1cXHUwMDNlbWJveF9jbGllbnQua25vd3NfdHhkb25lXFx0PSB0cnVlO1xcbitcXG4rXFx0a3JlZl9pbml0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZik7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2FkZChcXHUwMDI2c3NwY2MtXFx1MDAzZWVsZW0sIFxcdTAwMjZyYXMyX3NzcGNjKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNzcGNjXFx0XFx0PSBzc3BjYztcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkclxcdD0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRldlxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZzc3BjYy1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2tcXHQ9IFxcdTAwMjZzc3BjYy1cXHUwMDNlcGNjX2xvY2s7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIERFRklORV9JREEocmFzMl9pZGEpO1xcbitzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XFxuK1xcbitcXHRpZGFfZnJlZShcXHUwMDI2cmFzMl9pZGEsIGF1eGRldi1cXHUwMDNlaWQpO1xcbitcXHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cXHUwMDNlc3NwY2MpO1xcbitcXHRrZnJlZShyYXMyX2N0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcmFzMl9tZW1fY3R4ICphZGRfYXV4X2RldmljZShjaGFyICpuYW1lLCBpbnQgY2hhbm5lbCwgdTMyIHB4bV9pbnN0KVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xcbitcXHR1MzIgY29tcF9uaWQ7XFxuK1xcdGludCBpZCwgcmM7XFxuK1xcbitcXHRjb21wX25pZCA9IHB4bV90b19ub2RlKHB4bV9pbnN0KTtcXG4rXFx0aWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkge1xcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiSW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcXFxcblxcXCIsIGNoYW5uZWwsIHB4bV9pbnN0KTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOWElPKTtcXG4rXFx0fVxcbitcXG4rXFx0cmFzMl9jdHggPSBremFsbG9jKHNpemVvZigqcmFzMl9jdHgpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFyYXMyX2N0eClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7XFxuK1xcbitcXHRyYyA9IHJlZ2lzdGVyX3BjY19jaGFubmVsKHJhczJfY3R4LCBjaGFubmVsKTtcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxcXG5cXFwiLCBjaGFubmVsLFxcbitcXHRcXHRcXHQgcHhtX2luc3QsIHJjKTtcXG4rXFx0XFx0Z290byBjdHhfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWQgPSBpZGFfYWxsb2MoXFx1MDAyNnJhczJfaWRhLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKGlkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyYyA9IGlkO1xcbitcXHRcXHRnb3RvIHBjY19mcmVlO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlYWRldi5pZFxcdFxcdD0gaWQ7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2Lm5hbWVcXHRcXHQ9IG5hbWU7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2LmRldi5yZWxlYXNlXFx0PSByYXMyX3JlbGVhc2U7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2LmRldi5wYXJlbnRcXHQ9IHJhczJfY3R4LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChcXHUwMDI2cmFzMl9jdHgtXFx1MDAzZWFkZXYpO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdGdvdG8gaWRhX2ZyZWU7XFxuK1xcbitcXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfYWRkKFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcXHUwMDI2cmFzMl9jdHgtXFx1MDAzZWFkZXYpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyYyk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByYXMyX2N0eDtcXG4rXFxuK2lkYV9mcmVlOlxcbitcXHRpZGFfZnJlZShcXHUwMDI2cmFzMl9pZGEsIGlkKTtcXG4rcGNjX2ZyZWU6XFxuK1xcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVxcdTAwM2Vzc3BjYyk7XFxuK2N0eF9mcmVlOlxcbitcXHRrZnJlZShyYXMyX2N0eCk7XFxuK1xcbitcXHRyZXR1cm4gRVJSX1BUUihyYyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxcbit7XFxuK1xcdGlmICghcmFzMl9jdHgpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0O1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICoqcGN0eF9saXN0O1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcXG4rXFx0dTE2IHRvdF90YmxfbGVuO1xcbitcXHR1MTYgaTtcXG4rXFxuK1xcdGlmIChyYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCBcXHUwMDNjIHNpemVvZigqcmFzMl90YWIpKSB7XFxuK1xcdFxcdHByX3dhcm4oRldfV0FSTiBcXFwiQUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgYnV0IGJyb2tlbiAodG9vIHNob3J0LCBzaXplPSV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZWhlYWRlci5sZW5ndGgpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFyYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyB8fCByYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyBcXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJOby9JbnZhbGlkIG51bWJlciBvZiBQQ0MgZGVzY3MoJWQpIGluIEFDUEkgUkFTMiB0YWJsZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0dG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSArIHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTtcXG4rXFx0aWYgKHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoIFxcdTAwM2MgdG90X3RibF9sZW4pIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzLCByYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBjdHhfbGlzdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwY2NfZGVzY19saXN0ID0gKHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKikocmFzMl90YWIgKyAxKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzOyBpKyssIHBjY19kZXNjX2xpc3QrKykge1xcbitcXHRcXHRpZiAocGNjX2Rlc2NfbGlzdC1cXHUwMDNlZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRyYXMyX2N0eCA9IGFkZF9hdXhfZGV2aWNlKFJBUzJfTUVNX0RFVl9JRF9OQU1FLCBwY2NfZGVzY19saXN0LVxcdTAwM2VjaGFubmVsX2lkLFxcbitcXHRcXHRcXHRcXHRcXHQgIHBjY19kZXNjX2xpc3QtXFx1MDAzZWluc3RhbmNlKTtcXG4rXFx0XFx0LyogSW52YWxpZCBOVU1BIG5vZGUsIGNvbnRpbnVlIHBhcnNpbmcgbmV4dCBub2RlICovXFxuK1xcdFxcdGlmIChQVFJfRVJSKHJhczJfY3R4KSA9PSAtRU5YSU8pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKElTX0VSUihyYXMyX2N0eCkpIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXFxcXG5cXFwiLCBQVFJfRVJSKHJhczJfY3R4KSk7XFxuK1xcdFxcdFxcdGZvciAoOyBpIFxcdTAwM2UgMDsgaS0tKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxcbitcXHRcXHRcXHRcXHRcXHRyZW1vdmVfYXV4X2RldmljZShwY3R4X2xpc3RbaSAtIDFdKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRrZnJlZShwY3R4X2xpc3QpO1xcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyYXMyX2N0eCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XFxuK1xcdH1cXG4rXFx0a2ZyZWUocGN0eF9saXN0KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cXG4rICpcXG4rICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuXFxuKyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxcbisgKiBtZW1vcnkgZmVhdHVyZS5cXG4rICpcXG4rICogUmV0dXJuczogbm9uZS5cXG4rICovXFxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7XFxuK1xcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4rXFxuK1xcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXFx1MDAyNnJhczJfdGFiKTtcXG4rXFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gZ2V0IHRhYmxlLCAlc1xcXFxuXFxcIiwgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3NjcnViLmMgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuY1xcbisrKyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuQEAgLTE0LDYgKzE0LDcgQEAgZW51bSBlZGFjX3NjcnViX2F0dHJpYnV0ZXMge1xcbiBcXHRTQ1JVQl9BRERSRVNTLFxcbiBcXHRTQ1JVQl9TSVpFLFxcbiBcXHRTQ1JVQl9FTkFCTEVfQkFDS0dST1VORCxcXG4rXFx0U0NSVUJfRU5BQkxFX0RFTUFORCxcXG4gXFx0U0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OLFxcbiBcXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXFxuIFxcdFNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTixcXG5AQCAtNTUsNiArNTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcXHRcXHRcXHRcXFxcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcXFwiMHglbGx4XFxcXG5cXFwiKVxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhzaXplLCByZWFkX3NpemUsIHU2NCwgXFxcIjB4JWxseFxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2JhY2tncm91bmQsIGdldF9lbmFibGVkX2JnLCBib29sLCBcXFwiJXVcXFxcblxcXCIpXFxuK0VEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9kZW1hbmQsIGdldF9lbmFibGVkX29kLCBib29sLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGdldF9jeWNsZV9kdXJhdGlvbiwgdTMyLCBcXFwiJXVcXFxcblxcXCIpXFxuQEAgLTg0LDYgKzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFxcdFxcdFxcdFxcXFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KVxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoc2l6ZSwgd3JpdGVfc2l6ZSwgdTY0LCBrc3RydG91NjQpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbitFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2RlbWFuZCwgc2V0X2VuYWJsZWRfb2QsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcXG4gXFxuIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpXFxuQEAgLTExOSw2ICsxMjIsMTQgQEAgc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnRcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIDA0NDQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDpcXG4rXFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X2VuYWJsZWRfb2QpIHtcXG4rXFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlc2V0X2VuYWJsZWRfb2QpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBhLVxcdTAwM2Vtb2RlO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdHJldHVybiAwNDQ0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjpcXG4gXFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X21pbl9jeWNsZSlcXG4gXFx0XFx0XFx0cmV0dXJuIGEtXFx1MDAzZW1vZGU7XFxuQEAgLTE2NCw2ICsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcXG4gXFx0XFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxcbitcXHRcXHRbU0NSVUJfRU5BQkxFX0RFTUFORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2RlbWFuZCwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtaW5fY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX01BWF9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWF4X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXFxuIFxcdFxcdFtTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JXKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xcbmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xcbkBAIC00Niw0ICs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE1cXG4gXFx0ICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvblxcbiBcXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxcbiBcXG4rY29uZmlnIE1FTV9BQ1BJX1JBUzJcXG4rXFx0dHJpc3RhdGUgXFxcIk1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXFxcIlxcbitcXHRkZXBlbmRzIG9uIEFDUElfUkFTMlxcbitcXHRkZXBlbmRzIG9uIEVEQUNcXG4rXFx0ZGVwZW5kcyBvbiBFREFDX1NDUlVCXFxuK1xcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xcbitcXHRoZWxwXFxuK1xcdCAgVGhlIGRyaXZlciBiaW5kcyB0byB0aGUgYXV4aWxpYXJ5IGRldmljZSBhZGRlZCBieSB0aGUgQUNQSSBSQVMyXFxuK1xcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXFxuK1xcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXFxuK1xcdCAgY29udHJvbCBvZiB0aGUgSFctYmFzZWQgbWVtb3J5IHNjcnViYmVyIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXJcXG4rXFx0ICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS5cXG4rXFxuIGVuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL01ha2VmaWxlIGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcXG5pbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbkBAIC0yLDYgKzIsNyBAQFxcbiBvYmotJChDT05GSUdfUkFTKVxcdCs9IHJhcy5vXFxuIG9iai0kKENPTkZJR19ERUJVR19GUylcXHQrPSBkZWJ1Z2ZzLm9cXG4gb2JqLSQoQ09ORklHX1JBU19DRUMpXFx0Kz0gY2VjLm9cXG4rb2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpXFx0Kz0gYWNwaV9yYXMyLm9cXG4gXFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcXHQrPSBhbWQvZm1wbS5vXFxuIG9iai15XFx0XFx0XFx0Kz0gYW1kL2F0bC9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJhN2RlMjI2ZWM4NTkyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXFxuQEAgLTAsMCArMSw1ODkgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXFxuKyAqXFxuKyAqL1xcbitcXG4rI3VuZGVmIHByX2ZtdFxcbisjZGVmaW5lIHByX2ZtdChmbXQpXFx0XFxcIkFDUEkgUkFTMiBNRU1PUlk6IFxcXCIgZm10XFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lZGFjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FjcGkvcmFzMi5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKVxcbisjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXFxuK1xcbisjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDFcXG4rI2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXFxuKyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzXFxuK1xcbisvKlxcbisgKiBSQVMyIHBhdHJvbCBzY3J1YlxcbisgKi9cXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXFxuKyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKVxcbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMClcXG4rI2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpXFxuKyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApXFxuK1xcbisjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4XFxuKyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMFxcbitcXG4rc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcGF0cm9sX3NjcnViX3BhcmFtIHBhcmFtcztcXG4rfTtcXG4rXFxuKyNkZWZpbmUgVE9fQUNQSV9SQVMyX1BTX1NITUVNKF9hZGRyKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pXFxuK1xcbitzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHI7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0aW93cml0ZTgoMCwgXFx1MDAyNmNvbW1vbi1cXHUwMDNlc2V0X2NhcHNbMF0pO1xcbitcXG4rXFx0cmV0dXJuIGlvcmVhZDgoXFx1MDAyNmNvbW1vbi1cXHUwMDNlZmVhdHVyZXNbMF0pIFxcdTAwMjYgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XFxuK1xcdFxcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyKTtcXG4rXFx0dTMyIHNjcnViX3BhcmFtc19vdXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fc2l6ZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIocmFzMl9jdHgtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0c2NydWJfcGFyYW1zX291dCA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19vdXQpO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VtYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2ViYXNlID0gMDtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgIChpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5mbGFncykgXFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSB0cnVlO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlYmFzZSA9IGlvcmVhZDY0KFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzaXplID0gaW9yZWFkNjQoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzFdKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXFxuK3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4rXFx0XFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIpIHtcXG4rXFx0XFx0KnJ1bm5pbmcgPSBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFxcdTAwMjZwc19zbS1cXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcXG4rXFx0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fYmFzZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9zaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIocmFzMl9jdHgtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0KnJ1bm5pbmcgPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5mbGFncykgXFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORztcXG4rXFx0aWYgKCEoKnJ1bm5pbmcpKVxcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICopcDtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcXG4rXFx0XFx0aWYgKCFyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoKSBmYWlscyBoZXJlLCByZS1lbmFibGluZyBiYWNrZ3JvdW5kXFxuK1xcdFxcdCAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSxcXG4rXFx0XFx0ICogdGhlIGFkbWluIG9yIGZpcm13YXJlIG1heSBuZWVkIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcbitcXHRcXHQgKiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG11dGV4X2xvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0XFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghcnVubmluZykge1xcbitcXHRcXHRcXHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXFx1MDAzZWRldiwgcmFzMl9jdHgsIHRydWUpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRkZXZfZXJyKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gZW5hYmxlIGJhY2tncm91bmQgc2NydWIgcmV0PSVkXFxcXG5cXFwiLCByZXQpO1xcbitcXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0XFx0bXNsZWVwKDEwMDApO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQqbWluID0gcmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1heClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdCptYXggPSByYXMyX2N0eC1cXHUwMDNlbWF4X3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpzY3J1Yl9jeWNsZV9zZWNzKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0KnNjcnViX2N5Y2xlX3NlY3MgPSByYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzICogUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKVxcbit7XFxuK1xcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRpZiAoc2NydWJfY3ljbGVfaHJzIFxcdTAwM2MgcmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSB8fFxcbitcXHQgICAgc2NydWJfY3ljbGVfaHJzIFxcdTAwM2UgcmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLlxcbitcXHQgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuXFxuK1xcdCAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqYmFzZSA9IHJhczJfY3R4LVxcdTAwM2ViYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YilcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KnNpemUgPSByYXMyX2N0eC1cXHUwMDNlc2l6ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSBiYXNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChydW5uaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0KmVuYWJsZWQgPSByYXMyX2N0eC1cXHUwMDNlYmdfc2NydWI7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX2luO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbitcXHRpZiAoZW5hYmxlKSB7XFxuK1xcdFxcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIgfHwgcnVubmluZylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdFxcdGlvd3JpdGU2NCgwLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XFxuK1xcdFxcdGlvd3JpdGU2NCgwLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdFxcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdFxcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcXG4rXFx0XFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XFxuK1xcdFxcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdFxcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghcmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXG4rXFx0XFx0aW93cml0ZTE2KFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xcbitcXHR9XFxuK1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gXFx1MDAyNj0gflJBUzJfUFNfRU5fQkFDS0dST1VORDtcXG4rXFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpO1xcbitcXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvICVzIGJhY2tncm91bmQgc2NydWJiaW5nXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YiA9IGVuYWJsZTtcXG4rXFx0aWYgKGVuYWJsZSkge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0LyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovXFxuK1xcdFxcdHJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGVuYWJsZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KmVuYWJsZWQgPSBydW5uaW5nO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcik7XFxuK1xcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghZW5hYmxlKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHQvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKSB7XFxuK1xcdFxcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcXG4rXFx0ICogd2l0aCAoYmFzZSArIHNpemUpIFxcdTAwM2UgKG1lbV9iYXNlICsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXFxuK1xcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cXG4rXFx0ICovXFxuK1xcdGlmICghcmFzMl9jdHgtXFx1MDAzZXNpemUgfHwgcmFzMl9jdHgtXFx1MDAzZWJhc2UgXFx1MDAzYyByYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0X19mdW5jX18sIHJhczJfY3R4LVxcdTAwM2ViYXNlLCByYXMyX2N0eC1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHJldCA9IC1FUkFOR0U7XFxuK1xcdFxcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xcbitcXHR9XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcXG4rXFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xcbitcXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZWJhc2UsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VzaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcbitcXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHN0YXJ0IGRlbWFuZCBzY3J1YmJpbmcgcmMoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRpZiAocmV0ICE9IC1FQlVTWSkge1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRcXHRcXHRpb3dyaXRlNjQoMCwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSAwO1xcbitcXHRcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBlbmFibGVfYmdfc2NydWI7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcXG4rXFxuK1xcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiBcXHUwMDI2XFx1MDAyNiByYXMyX2N0eC1cXHUwMDNlZHJpdmVyX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiAhcmFzMl9jdHgtXFx1MDAzZXRocmVhZCkge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4ocmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCwgcmFzMl9jdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwicmFzMl9zY3J1Yl9uaWQlZFxcXCIsIHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHJhczJfY3R4LVxcdTAwM2V0aHJlYWQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IFBUUl9FUlIocmFzMl9jdHgtXFx1MDAzZXRocmVhZCk7XFxuK1xcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBJZiBrdGhyZWFkX3J1bigpIGZhaWxzIGFuZCB0aGUgZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBydW5uaW5nLFxcbitcXHRcXHRcXHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyBhZG1pbi9maXJtd2FyZSBtYXkgbmVlZFxcbitcXHRcXHRcXHQgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK1xcbitlbmFibGVfYmdfc2NydWI6XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcXG4rXFx0LnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLFxcbitcXHQucmVhZF9zaXplID0gcmFzMl9od19zY3J1Yl9yZWFkX3NpemUsXFxuK1xcdC53cml0ZV9hZGRyID0gcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyLFxcbitcXHQud3JpdGVfc2l6ZSA9IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSxcXG4rXFx0LmdldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyxcXG4rXFx0LnNldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyxcXG4rXFx0LmdldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZCxcXG4rXFx0LnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCxcXG4rXFx0LmdldF9taW5fY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlLFxcbitcXHQuZ2V0X21heF9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUsXFxuK1xcdC5nZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQsXFxuK1xcdC5zZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgcmFzMl9tZW1fZHJ2X3JlbW92ZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XFxuK1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtdXRleF9sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2Vkcml2ZXJfYWN0aXZlID0gZmFsc2U7XFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNldGhyZWFkKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRcXHRrdGhyZWFkX3N0b3AocmFzMl9jdHgtXFx1MDAzZXRocmVhZCk7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZClcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xcbitcXHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XFxuK1xcdGNoYXIgc2NydWJfbmFtZVtSQVMyX1NDUlVCX05BTUVfTEVOXTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFyYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHJhczJfY3R4KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmV0cmlldmUgdGhlIFBBIHJhbmdlIG9mIHRoZSBOVU1BIGRvbWFpbiBhbmQgdXNlIGl0IGFzIHRoZVxcbitcXHQgKiAnUmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UnLCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kXFxuK1xcdCAqIEdFVF9QQVRST0xfUEFSQU1FVEVSUyB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGFsbCBhZGRyZXNzZXNcXG4rXFx0ICogaW4gdGhlIE5VTUEgZG9tYWluIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSXFxuK1xcdCAqIHRvIHN0YXJ0IHRoZSBkZW1hbmQgc2NydWJiaW5nLlxcbitcXHQgKi9cXG4rXFx0c3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtXFx1MDAzZXN5c19jb21wX25pZCk7XFxuK1xcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRpZiAoIW51bV9zcGFubmVkX3BhZ2VzKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXFxcXG5cXFwiLCByYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFx0fVxcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlID0gX19wZm5fdG9fcGh5cyhzdGFydF9wZm4pO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWVtX3NpemUgPSAodTY0KW51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIHNldF9zY3J1Yl9jeWNsZSAqL1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyBcXHUwMDNlIHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUpXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xcbitcXG4rXFx0c3ByaW50ZihzY3J1Yl9uYW1lLCBcXFwiYWNwaV9yYXNfbWVtJWRcXFwiLCBhdXhkZXYtXFx1MDAzZWlkKTtcXG4rXFxuK1xcdHJhc19mZWF0dXJlcy5mdF90eXBlXFx0PSBSQVNfRkVBVF9TQ1JVQjtcXG4rXFx0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXFx0PSAwO1xcbitcXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXFx0PSBcXHUwMDI2cmFzMl9zY3J1Yl9vcHM7XFxuK1xcdHJhc19mZWF0dXJlcy5jdHhcXHQ9IHJhczJfY3R4O1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFxcdTAwMjZhdXhkZXYtXFx1MDAzZWRldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgXFx1MDAyNnJhc19mZWF0dXJlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcXG4rXFx0eyAubmFtZSA9IFJBUzJfQVVYX0RFVl9OQU1FIFxcXCIuXFxcIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcXG4rXFx0eyB9XFxuK307XFxuK1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGF1eGlsaWFyeSwgcmFzMl9tZW1fZGV2X2lkX3RhYmxlKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XFxuK1xcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXFxuK1xcdC5wcm9iZSA9IHJhczJfbWVtX2Rydl9wcm9iZSxcXG4rXFx0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXFxuK1xcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcXG4rfTtcXG4rbW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9JTVBPUlRfTlMoXFxcIkFDUElfUkFTMlxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2FjcGkvcmFzMi5oXFxuQEAgLTAsMCArMSw4NiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfQUNQSV9SQVMyX0hcXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hY3BpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgZGV2aWNlO1xcbitcXG4rLypcXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XFxuKyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxcbisgKi9cXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXFxuK1xcbisjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FIFxcXCJyYXMyXFxcIlxcbisjZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FIFxcXCJhY3BpX3JhczJfbWVtXFxcIlxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCByYXMyX21lbV9jdHggLSBDb250ZXh0IGZvciBSQVMyIG1lbW9yeSBmZWF0dXJlc1xcbisgKiBAYWRldjpcXHRcXHRBdXhpbGlhcnkgZGV2aWNlIG9iamVjdFxcbisgKiBAY29tbV9hZGRyOlxcdFxcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cXG4rICogQGRldjpcXHRcXHRQb2ludGVyIHRvIGRldmljZSBiYWNraW5nIHN0cnVjdCBtYm94X2NvbnRyb2xsZXIgZm9yIFBDQ1xcbisgKiBAc3NwY2M6XFx0XFx0UG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cXG4rICogQHBjY19sb2NrOlxcdFxcdFBvaW50ZXIgdG8gUENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXFxuKyAqXFx0XFx0XFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcXG4rICogQHN5c19jb21wX25pZDpcXHROb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlXFxuKyAqXFx0XFx0XFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXFxuKyAqXFx0XFx0XFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxcbisgKlxcdFxcdFxcdEZpZWxkOiBJbnN0YW5jZVxcbisgKiBAbWVtX2Jhc2U6XFx0XFx0QmFzZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXFxuKyAqXFx0XFx0XFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXFxuKyAqIEBtZW1fc2l6ZVxcdFxcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxcbisgKlxcdFxcdFxcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxcbisgKiBAYmFzZTpcXHRcXHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcXG4rICogQHNpemU6XFx0XFx0U2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxcbisgKiBAc2NydWJfY3ljbGVfaHJzOlxcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xcbisgKiBAc2V0X3NjcnViX2N5Y2xlOlxcdFNjcnViIHJhdGUgdG8gc2V0IGluIGhvdXJzXFxuKyAqIEBtaW5fc2NydWJfY3ljbGU6XFx0TWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZFxcbisgKiBAbWF4X3NjcnViX2N5Y2xlOlxcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcXG4rICogQG9kX3NjcnViOlxcdFxcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxcbisgKiBAYmdfc2NydWI6XFx0XFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xcbisgKiBAcmVlbmFibGVfYmdfc2NydWI6XFx0RmxhZyBpbmRpY2F0ZXMgcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZyBhZnRlciBkZW1hbmRcXG4rICpcXHRcXHRcXHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcXG4rICogQHRocmVhZDpcXHRcXHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXFxuKyAqIEBkcml2ZXJfYWN0aXZlOlxcdEZsYWcgaW5kaWNhdGVzIFJBUzIgbWVtb3J5IGRyaXZlciBpcyBhY3RpdmUvcmVtb3ZlZFxcbisgKi9cXG4rc3RydWN0IHJhczJfbWVtX2N0eCB7XFxuK1xcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXFx0XFx0YWRldjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXFx0KmNvbW1fYWRkcjtcXG4rXFx0c3RydWN0IGRldmljZVxcdFxcdFxcdCpkZXY7XFxuK1xcdHZvaWRcXHRcXHRcXHRcXHQqc3NwY2M7XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdCpwY2NfbG9jaztcXG4rXFx0dTMyXFx0XFx0XFx0XFx0c3lzX2NvbXBfbmlkO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRtZW1fYmFzZTtcXG4rXFx0dTY0XFx0XFx0XFx0XFx0bWVtX3NpemU7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdGJhc2U7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdHNpemU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0c2NydWJfY3ljbGVfaHJzO1xcbitcXHR1OFxcdFxcdFxcdFxcdHNldF9zY3J1Yl9jeWNsZTtcXG4rXFx0dThcXHRcXHRcXHRcXHRtaW5fc2NydWJfY3ljbGU7XFxuK1xcdHU4XFx0XFx0XFx0XFx0bWF4X3NjcnViX2N5Y2xlO1xcbitcXHRib29sXFx0XFx0XFx0XFx0b2Rfc2NydWI7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRiZ19zY3J1YjtcXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdHJlZW5hYmxlX2JnX3NjcnViO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcXHRcXHQqdGhyZWFkO1xcbitcXHRib29sXFx0XFx0XFx0XFx0ZHJpdmVyX2FjdGl2ZTtcXG4rfTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXFxuK3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpO1xcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9yYXMyX2luaXQodm9pZCkgeyB9XFxuKyNlbmRpZlxcbitcXG4rI2VuZGlmIC8qIF9BQ1BJX1JBUzJfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZWRhYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcXG5AQCAtNjg0LDYgKzY4NCw4IEBAIGVudW0gZWRhY19kZXZfZmVhdCB7XFxuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXFxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cXG4gICogQHNldF9lbmFibGVkX2JnOiBzdGFydCBvciBzdG9wIGEgYmctc2NydWIuXFxuKyAqIEBnZXRfZW5hYmxlZF9vZDogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgZGVtYW5kIHNjcnViLlxcbisgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXFxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cXG4gICogQGdldF9tYXhfY3ljbGU6IGdldCBtYXhpbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbkBAIC02OTYsNiArNjk4LDggQEAgc3RydWN0IGVkYWNfc2NydWJfb3BzIHtcXG4gXFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xcbiBcXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcXG4gXFx0aW50ICgqc2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4rXFx0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XFxuK1xcdGludCAoKnNldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XFxuIFxcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XFxuIFxcdGludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7XFxuIFxcdGludCAoKmdldF9jeWNsZV9kdXJhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpjeWNsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDAwOjM2OjI0LjE0NDY1MTc1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg1MDc0NTQwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gVGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiAoYWNwaV9yYXMyX2luaXQpIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QgKGZyb20gYWNwaV9pbml0KSBhbmQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFDUEkgUkFTMiB0YWJsZS4gU2luY2UgUUVNVS9HQ0UgZG8gbm90IHByb3ZpZGUgdGhpcyBzcGVjaWZpYyBBQ1BJIHRhYmxlIGJ5IGRlZmF1bHQsIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyB0YWJsZSBsb2FkaW5nIChlLmcuLCB2aWEgY29uZmlnZnMpLCB0aGUgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMzFjZTA1ZDIxZWFkMGZmZDI3YjNjOGRjYmZkNTEzZGViMGFjOTRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAwMDozNjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuaW5kZXggYWI2MDE0NzQzZGE1NjguLjJiODc0ZTAzMzYyMzM0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbkBAIC0yMCwxMSArMjAsNyBAQCBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuIENvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcbi1cdFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxuLVx0XHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cbi1cbi1cdFx0VGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZFxuLVx0XHRvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS5cbitcdFx0Zm9yIGRlbWFuZCBzY3J1YmJpbmcuXG4gXG4gV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9zaXplXG4gRGF0ZTpcdFx0TWFyY2ggMjAyNVxuQEAgLTM0LDYgKzMwLDE0IEBAIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4gXHRcdChvbi1kZW1hbmQgc2NydWJiaW5nKS5cbiBcbitXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9kZW1hbmRcbitEYXRlOlx0XHRKYW4gMjAyNlxuK0tlcm5lbFZlcnNpb246XHQ2LjE5XG4rQ29udGFjdDpcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXG4rRGVzY3JpcHRpb246XG4rXHRcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcbitcdFx0c3VwcG9ydGVkIG9ubHkgaWYgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgc3VwcG9ydCBpdC5cbitcbiBXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9iYWNrZ3JvdW5kXG4gRGF0ZTpcdFx0TWFyY2ggMjAyNVxuIEtlcm5lbFZlcnNpb246XHQ2LjE1XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdCBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcbkBAIC0zNDAsMyArMzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXG4gXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxuK1xuKzMuIEFDUEkgUkFTMiBIYXJkd2FyZS1iYXNlZCBNZW1vcnkgU2NydWJiaW5nXG4rXG4rMy4xLiBEZW1hbmQgc2NydWJiaW5nIGZvciBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uXG4rXG4rMy4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXG4rXG4rMFxuK1xuKzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cbitcbitBcHBsaWNhYmxlIHRvIGJvdGggZGVtYW5kIGFuZCBiYWNrZ3JvdW5kIHNjcnViYmluZy4gVGhlIHVuaXQgb2YgdGhlXG4rc2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuK1xuKzM2MDAwXG4rXG4rMy4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXG4rVGhlIHVuaXQgb2YgdGhlIHNjcnViIGN5Y2xlIHJhbmdlIGlzIHNlY29uZHMuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxuK1xuKzM2MDBcbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWF4X2N5Y2xlX2R1cmF0aW9uXG4rXG4rODY0MDBcbitcbiszLjEuNC4gUHJvZ3JhbSBzY3J1YmJpbmcgZm9yIHRoZSBtZW1vcnkgcmVnaW9uIGluIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBldmVyeVxuKzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxuK1xuKyMgZWNobyA0MzIwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbitcbiszLjEuNS4gU2V0IGFkZHJlc3MgcmFuZ2UuXG4rXG4rU2V0ICdhZGRyJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cbitcbisjIGVjaG8gMHg4MDAwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHJcbitcbitTZXQgJ3NpemUnIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxuK1xuKyMgZWNobyAweDIwMDAwMCBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL3NpemVcbitcbiszLjEuNi4gU3RhcnQgJ2RlbWFuZCBzY3J1YmJpbmcnLlxuK1xuK1doZW4gYSBkZW1hbmQgc2NydWIgaXMgc3RhcnRlZCwgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzXG4rd2lsbCBiZSBzdG9wcGVkIGFuZCB0aGVuIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcgd2hlbiB0aGVcbitkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cbitcbisjIGVjaG8gMSBcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcbitcbiszLjIuIEJhY2tncm91bmQgc2NydWJiaW5nIHRoZSBlbnRpcmUgbWVtb3J5XG4rXG4rMy4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9iYWNrZ3JvdW5kXG4rXG4rMFxuK1xuKzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcbitzZWNvbmRzIChxdWFydGVyIG9mIGEgZGF5KS5cbitcbisjIGVjaG8gMjE2MDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4rXG4rMy4yLjMuIFN0YXJ0ICdiYWNrZ3JvdW5kIHNjcnViYmluZycuXG4rXG4rIyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuQEAgLTI5NCw2ICsyOTQsMTcgQEAgY29uZmlnIEFDUElfQ1BQQ19MSUJcbiBcdCAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsXG4gXHQgIGxlYXZlIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxuIFxuK2NvbmZpZyBBQ1BJX1JBUzJcbitcdGJvb2wgXCJBQ1BJIFJBUzIgZHJpdmVyXCJcbitcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4rXHRkZXBlbmRzIG9uIE1BSUxCT1hcbitcdGRlcGVuZHMgb24gUENDXG4rXHRoZWxwXG4rXHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXG4rXHQgIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgc3VjaCBhcyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxuK1xuIGNvbmZpZyBBQ1BJX1BST0NFU1NPUlxuIFx0dHJpc3RhdGUgXCJQcm9jZXNzb3JcIlxuIFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlXG5pbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuQEAgLTEwNSw2ICsxMDUsNyBAQCBvYmotJChDT05GSUdfQUNQSV9FQ19ERUJVR0ZTKVx0Kz0gZWNfc3lzLm9cbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVx0XHQrPSBiZ3J0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9DUFBDX0xJQilcdCs9IGNwcGNfYWNwaS5vXG4gb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSlcdCs9IHNwY3Iub1xuK29iai0kKENPTkZJR19BQ1BJX1JBUzIpXHRcdCs9IHJhczIub1xuIG9iai0kKENPTkZJR19BQ1BJX0RFQlVHR0VSX1VTRVIpICs9IGFjcGlfZGJnLm9cbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcdCs9IHBwdHQub1xuIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKVx0Kz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuY1xuaW5kZXggYTMwYTkwNGY2NTM1ZjQuLjhkNmEwYjc3M2JjNTdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jXG4rKysgYi9kcml2ZXJzL2FjcGkvYnVzLmNcbkBAIC0zMSw2ICszMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYWNwaS9hcGVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm10LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG5AQCAtMTYxMCw2ICsxNjExLDggQEAgc3RhdGljIGludCBfX2luaXQgYWNwaV9pbml0KHZvaWQpXG4gXHRhY3BpX2RlYnVnZ2VyX2luaXQoKTtcbiBcdGFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTtcbiBcdGFjcGlfdmlvdF9pbml0KCk7XG4rXHRhY3BpX3JhczJfaW5pdCgpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE5ZWNiZTdjODE5OWJiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5AQCAtMCwwICsxLDUwMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci5cbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuKyAqXG4rICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaFxuKyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxuKyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXNcbisgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS5cbisgKi9cbitcbisjdW5kZWYgcHJfZm10XG4rI2RlZmluZSBwcl9mbXQoZm10KSBcIkFDUEkgUkFTMjogXCIgZm10XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYWNwaS9wY2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4rXG4rLyoqXG4rICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbisgKiBAbWJveF9jbGllbnQ6XHRzdHJ1Y3QgbWJveF9jbGllbnQgb2JqZWN0XG4rICogQHBjY19jaGFuOlx0XHRQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuXG4rICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuKyAqIEBlbGVtOlx0XHRMaXN0IGZvciByZWdpc3RlcmVkIFJBUzIgUENDIGNoYW5uZWwgc3Vic3BhY2VzXG4rICogQHBjY19sb2NrOlx0XHRQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcbisgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4rICogQGRlYWRsaW5lX3VzOlx0UG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIHRpbWVvdXQgaW4gbWljcm9zZWNzXG4rICpcdFx0XHRmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvblxuKyAqIEBwY2NfbXBhcjpcdFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXG4rICogQHBjY19tcnR0Olx0XHRNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKSBpbiBtaWNyb3NlY3NcbisgKlx0XHRcdE9TIG11c3Qgd2FpdCBhZnRlciBjb21wbGV0aW9uIG9mIGEgUENDIGNvbW1hbmQgYmVmb3JlXG4rICpcdFx0XHRpc3N1aW5nIG5leHQgY29tbWFuZFxuKyAqIEBsYXN0X2NtZF9jbXBsX3RpbWU6IENvbXBsZXRpb24gdGltZSBvZiBsYXN0IFBDQyBjb21tYW5kXG4rICogQGxhc3RfbXBhcl9yZXNldDpcdFRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0XG4rICogQG1wYXJfY291bnQ6XHRcdE1QQVIgY291bnRcbisgKiBAcGNjX2lkOlx0XHRJZGVudGlmaWVyIG9mIHRoZSBSQVMyIHBsYXRmb3JtIGNvbW11bmljYXRpb24gY2hhbm5lbFxuKyAqIEBsYXN0X2NtZDpcdFx0TGFzdCBQQ0MgY29tbWFuZFxuKyAqIEBrcmVmOlx0XHRrcmVmIG9iamVjdFxuKyAqL1xuK3N0cnVjdCByYXMyX3NzcGNjIHtcbitcdHN0cnVjdCBtYm94X2NsaWVudFx0XHRtYm94X2NsaWVudDtcbitcdHN0cnVjdCBwY2NfbWJveF9jaGFuXHRcdCpwY2NfY2hhbjtcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbVx0KmNvbW1fYWRkcjtcbitcdHN0cnVjdCBsaXN0X2hlYWRcdFx0ZWxlbTtcbitcdHN0cnVjdCBtdXRleFx0XHRcdHBjY19sb2NrO1xuK1x0dTY0XHRcdFx0XHRkZWFkbGluZV91cztcbitcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcGFyO1xuK1x0dW5zaWduZWQgaW50XHRcdFx0cGNjX21ydHQ7XG4rXHRrdGltZV90XHRcdFx0XHRsYXN0X2NtZF9jbXBsX3RpbWU7XG4rXHRrdGltZV90XHRcdFx0XHRsYXN0X21wYXJfcmVzZXQ7XG4rXHRpbnRcdFx0XHRcdG1wYXJfY291bnQ7XG4rXHRpbnRcdFx0XHRcdHBjY19pZDtcbitcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4rXHRzdHJ1Y3Qga3JlZlx0XHRcdGtyZWY7XG4rfTtcbitcbisvKlxuKyAqIEFyYml0cmFyeSByZXRyaWVzIGZvciBQQ0MgY29tbWFuZHMgYmVjYXVzZSB0aGUgcmVtb3RlIHByb2Nlc3NvciBjb3VsZCBiZVxuKyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbisgKiBwcm9jZXNzb3JzIHJ1biBwYWluZnVsbHkgc2xvdy5cbisgKi9cbisjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbisjZGVmaW5lIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWSAxMDAwXG4rI2RlZmluZSBQQ0NfTUlOX1BPTExfVVNFQ1MgM1xuK1xuKyNkZWZpbmUgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUyAxMDBcbisjZGVmaW5lIFJBUzJfRkVBVF9UWVBFX01FTU9SWSAweDAwXG4rXG4rLyogU3RhdGljIHZhcmlhYmxlcyBmb3IgdGhlIFJBUzIgUENDIHN1YnNwYWNlcyAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgocmFzMl9wY2NfbGlzdF9sb2NrKTtcbitzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuK1xuK3N0YXRpYyBpbnQgY2hlY2tfcGNjX2NoYW4oc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcdHUzMiBjYXBfc3RhdHVzO1xuK1x0dTE2IHN0YXR1cztcbitcdGludCByYztcbitcbitcdC8qXG4rXHQgKiBBcyBwZXIgQUNQSSBzcGVjLCB0aGUgUENDIHNwYWNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlXG4rXHQgKiBwbGF0Zm9ybSBhbmQgc2hvdWxkIGhhdmUgc2V0IHRoZSBjb21tYW5kIGNvbXBsZXRpb24gYml0IHdoZW5cbitcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuK1x0ICpcbitcdCAqIFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciBldmVyeSBQQ0NfTUlOX1BPTExfVVNFQ1MgZm9yIG1heGltdW0gb2ZcbitcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbitcdCAqIGJpdCBpcyBzZXQuXG4rXHQgKi9cbitcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbitcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSxcbitcdFx0XHRcdFx0UENDX01JTl9QT0xMX1VTRUNTLCBzc3BjYy1cdTAwM2VkZWFkbGluZV91cyk7XG4rXHRpZiAocmMpIHtcbitcdFx0cHJfd2FybihcIlBDQyBJRDogMHgleDogUENDIGNoZWNrIGNoYW5uZWwgdGltZW91dCBmb3IgbGFzdCBjb21tYW5kOiAweCV4IHJjPSVkXFxuXCIsXG4rXHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCwgcmMpO1xuK1xuK1x0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4rXHRcdHByX3dhcm4oXCJQQ0MgSUQ6IDB4JXg6IEVycm9yIGluIGV4ZWN1dGluZyBsYXN0IGNvbW1hbmQ6IDB4JXhcXG5cIixcbitcdFx0XHRzc3BjYy1cdTAwM2VwY2NfaWQsIHNzcGNjLVx1MDAzZWxhc3RfY21kKTtcbitcdFx0c3RhdHVzIFx1MDAyNj0gflBDQ19TVEFUVVNfRVJST1I7XG4rXHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuK1x0XHRyZXR1cm4gLUVJTztcbitcdH1cbitcbitcdC8qIEVuc3VyZSBnZXQgdXBkYXRlZCBQQ0Mgc3RhdHVzICovXG4rXHRybWIoKTtcbitcdGNhcF9zdGF0dXMgPSBpb3JlYWQzMihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4rXHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcbitcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbitcdGNhc2UgQUNQSV9SQVMyX05PVF9TVVBQT1JURUQ6XG4rXHRcdHJjID0gLUVQRVJNO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUNQSV9SQVMyX0JVU1k6XG4rXHRcdHJjID0gLUVCVVNZO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUNQSV9SQVMyX0ZBSUxFRDpcbitcdGNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6XG4rXHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4rXHRcdHJjID0gLUVJTlZBTDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyYyA9IDA7XG4rXHR9XG4rXG4rXHRpb3dyaXRlMzIoMHgwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qKlxuKyAqIHJhczJfc2VuZF9wY2NfY21kKCkgLSBTZW5kIFJBUzIgY29tbWFuZCB2aWEgUENDIGNoYW5uZWxcbisgKiBAcmFzMl9jdHg6XHRwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlXG4rICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4rICpcbisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIG90aGVyd2lzZVxuKyAqL1xuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4rXHRzdHJ1Y3QgbWJveF9jaGFuICpwY2NfY2hhbm5lbDtcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbitcdHM2NCB0aW1lX2RlbHRhO1xuK1x0dTE2IHZhbDtcbitcdGludCByYztcbitcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRzc3BjYyA9IHJhczJfY3R4LVx1MDAzZXNzcGNjO1xuK1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbitcbitcdHJjID0gY2hlY2tfcGNjX2NoYW4oc3NwY2MpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuK1xuK1x0LypcbitcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4rXHQgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mXG4rXHQgKiBhIGNvbW1hbmQgYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCwgaW4gbWljcm9zZWNvbmRzLlxuK1x0ICovXG4rXHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQpIHtcbitcdFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUpO1xuK1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4rXHRcdFx0ZnNsZWVwKHNzcGNjLVx1MDAzZXBjY19tcnR0IC0gdGltZV9kZWx0YSk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXG4rXHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuK1x0ICogc3VwcG9ydCwgcmVwb3J0ZWQgaW4gY29tbWFuZHMgcGVyIG1pbnV0ZS4gMCBpbmRpY2F0ZXMgbm9cbitcdCAqIGxpbWl0YXRpb24uXG4rXHQgKlxuK1x0ICogVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGlkZWFsbHkgemVybyBvciBsYXJnZSBlbm91Z2ggc28gdGhhdCBpdFxuK1x0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXG4rXHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4rXHQgKiBqdXN0IG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBhZnRlciBoaXR0aW5nIHRoZSBNUEFSXG4rXHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cbitcdCAqL1xuK1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcGFyKSB7XG4rXHRcdGlmICghc3NwY2MtXHUwMDNlbXBhcl9jb3VudCkge1xuK1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbitcdFx0XHRpZiAoKHRpbWVfZGVsdGEgXHUwMDNjIDYwICogTVNFQ19QRVJfU0VDKSBcdTAwMjZcdTAwMjYgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KSB7XG4rXHRcdFx0XHRkZXZfZGJnKHJhczJfY3R4LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XCJQQ0MgY29tbWFuZCAweCV4IG5vdCBzZW50IGR1ZSB0byBNUEFSIGxpbWl0XCIsIGNtZCk7XG4rXHRcdFx0XHRyZXR1cm4gLUVJTztcbitcdFx0XHR9XG4rXHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0ID0ga3RpbWVfZ2V0KCk7XG4rXHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuK1x0XHR9XG4rXHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQtLTtcbitcdH1cbitcbitcdC8qIFdyaXRlIHRvIHRoZSBzaGFyZWQgY29tbSByZWdpb24gKi9cbitcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4rXG4rXHQvKiBGbGlwIENNRCBDT01QTEVURSBiaXQgKi9cbitcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4rXG4rXHQvKiBSaW5nIGRvb3JiZWxsICovXG4rXHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuK1x0LypcbitcdCAqIG1ib3hfc2VuZF9tZXNzYWdlKCkgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGZvciBzdWNjZXNzZnVsIHN1Ym1pc3Npb25cbitcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4rXHQgKi9cbitcdGlmIChyYyBcdTAwM2MgMCkge1xuK1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxuXCIsIGNtZCwgcmMpO1xuK1x0XHQvKiBSZXN0b3JlIENNRCBDT01QTEVURSBiaXQgb24gZXJyb3IgKi9cbitcdFx0dmFsID0gaW9yZWFkMTYoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuK1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4rXHRcdGlvd3JpdGUxNih2YWwsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSAwO1xuK1x0fVxuK1xuK1x0c3NwY2MtXHUwMDNlbGFzdF9jbWQgPSBjbWQ7XG4rXG4rXHQvKlxuK1x0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXG4rXHQgKiBjb21wbGV0aW9uIHRpbWUgb2YgYm90aCBSRUFEIGFuZCBXUklURSBjb21tYW5kcyBmb3IgcHJvcGVyIGhhbmRsaW5nXG4rXHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cbitcdCAqL1xuK1x0aWYgKGNtZCA9PSBQQ0NfQ01EX0VYRUNfUkFTMiB8fCBzc3BjYy1cdTAwM2VwY2NfbXJ0dCkge1xuK1x0XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbitcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KVxuK1x0XHRcdHNzcGNjLVx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSA9IGt0aW1lX2dldCgpO1xuK1x0fVxuK1xuK1x0aWYgKCFwY2NfY2hhbm5lbC1cdTAwM2VtYm94LVx1MDAzZXR4ZG9uZV9pcnEpXG4rXHRcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcImFjcGlfcmFzMlwiKTtcbitcbitzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXG4re1xuK1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cbitcdFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuK1x0bGlzdF9kZWwoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSk7XG4rXHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuK1x0a2ZyZWUoc3NwY2MpO1xuK31cbitcbitzdGF0aWMgdm9pZCByYXMyX3NzcGNjX3B1dChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4re1xuK1x0a3JlZl9wdXQoXHUwMDI2c3NwY2MtXHUwMDNla3JlZiwgIFx1MDAyNnJhczJfbGlzdF9wY2NfcmVsZWFzZSk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcmFzMl9zc3BjYyAqcmFzMl9zc3BjY19nZXQoaW50IHBjY19pZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3NwY2MsIFx1MDAyNnJhczJfc3NwY2MsIGVsZW0pIHtcbitcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2c3NwY2MtXHUwMDNla3JlZikpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdHJldHVybiBzc3BjYztcbitcdH1cbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuK3tcbitcdHN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfY2hhbjtcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbitcbitcdGlmIChwY2NfaWQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0c3NwY2MgPSByYXMyX3NzcGNjX2dldChwY2NfaWQpO1xuK1x0aWYgKHNzcGNjKSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4rXHRcdHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkclx0PSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4rXHRcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9XG4rXHRcdFx0c3NwY2MtXHUwMDNlcGNjX2NoYW4tXHUwMDNlbWNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXY7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXBjY19sb2NrXHQ9IFx1MDAyNnNzcGNjLVx1MDAzZXBjY19sb2NrO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXNzcGNjKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFx1MDAyNnNzcGNjLVx1MDAzZW1ib3hfY2xpZW50LCBwY2NfaWQpO1xuK1x0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcbitcdFx0a2ZyZWUoc3NwY2MpO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XG4rXHR9XG4rXG4rXHRpZiAoIXBjY19jaGFuLVx1MDAzZXNobWVtKSB7XG4rXHRcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChwY2NfY2hhbik7XG4rXHRcdGtmcmVlKHNzcGNjKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRzc3BjYy1cdTAwM2VwY2NfaWRcdFx0PSBwY2NfaWQ7XG4rXHRzc3BjYy1cdTAwM2VwY2NfY2hhblx0XHQ9IHBjY19jaGFuO1xuK1x0c3NwY2MtXHUwMDNlY29tbV9hZGRyXHQ9IHBjY19jaGFuLVx1MDAzZXNobWVtO1xuK1x0aWYgKHBjY19jaGFuLVx1MDAzZWxhdGVuY3kpXG4rXHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogcGNjX2NoYW4tXHUwMDNlbGF0ZW5jeTtcbitcdGVsc2VcbitcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1k7XG4rXHRzc3BjYy1cdTAwM2VwY2NfbXJ0dFx0XHQ9IHBjY19jaGFuLVx1MDAzZW1pbl90dXJuYXJvdW5kX3RpbWU7XG4rXHRzc3BjYy1cdTAwM2VwY2NfbXBhclx0XHQ9IHBjY19jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcbitcdHNzcGNjLVx1MDAzZW1ib3hfY2xpZW50Lmtub3dzX3R4ZG9uZVx0PSB0cnVlO1xuK1xuK1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuK1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcbitcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4rXHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0cmFzMl9jdHgtXHUwMDNlZGV2XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXY7XG4rXG4rXHRtdXRleF9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZXBjY19sb2NrKTtcbitcdHJhczJfY3R4LVx1MDAzZXBjY19sb2NrXHQ9IFx1MDAyNnNzcGNjLVx1MDAzZXBjY19sb2NrO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBERUZJTkVfSURBKHJhczJfaWRhKTtcbitzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuK1xuK1x0aWRhX2ZyZWUoXHUwMDI2cmFzMl9pZGEsIGF1eGRldi1cdTAwM2VpZCk7XG4rXHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cdTAwM2Vzc3BjYyk7XG4rXHRrZnJlZShyYXMyX2N0eCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcmFzMl9tZW1fY3R4ICphZGRfYXV4X2RldmljZShjaGFyICpuYW1lLCBpbnQgY2hhbm5lbCwgdTMyIHB4bV9pbnN0KVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xuK1x0dTMyIGNvbXBfbmlkO1xuK1x0aW50IGlkLCByYztcbitcbitcdGNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpO1xuK1x0aWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkge1xuK1x0XHRwcl9kZWJ1ZyhcIkludmFsaWQgTlVNQSBub2RlLCBjaGFubmVsPSVkIHB4bV9pbnN0PSVkXFxuXCIsIGNoYW5uZWwsIHB4bV9pbnN0KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOWElPKTtcbitcdH1cbitcbitcdHJhczJfY3R4ID0ga3phbGxvYyhzaXplb2YoKnJhczJfY3R4KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXJhczJfY3R4KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCA9IGNvbXBfbmlkO1xuK1xuK1x0cmMgPSByZWdpc3Rlcl9wY2NfY2hhbm5lbChyYXMyX2N0eCwgY2hhbm5lbCk7XG4rXHRpZiAocmMgXHUwMDNjIDApIHtcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUENDIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWQgcmM9JWRcXG5cIiwgY2hhbm5lbCxcbitcdFx0XHQgcHhtX2luc3QsIHJjKTtcbitcdFx0Z290byBjdHhfZnJlZTtcbitcdH1cbitcbitcdGlkID0gaWRhX2FsbG9jKFx1MDAyNnJhczJfaWRhLCBHRlBfS0VSTkVMKTtcbitcdGlmIChpZCBcdTAwM2MgMCkge1xuK1x0XHRyYyA9IGlkO1xuK1x0XHRnb3RvIHBjY19mcmVlO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNlYWRldi5pZFx0XHQ9IGlkO1xuK1x0cmFzMl9jdHgtXHUwMDNlYWRldi5uYW1lXHRcdD0gbmFtZTtcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcdD0gcmFzMl9yZWxlYXNlO1xuK1x0cmFzMl9jdHgtXHUwMDNlYWRldi5kZXYucGFyZW50XHQ9IHJhczJfY3R4LVx1MDAzZWRldjtcbitcbitcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGlkYV9mcmVlO1xuK1xuK1x0cmMgPSBhdXhpbGlhcnlfZGV2aWNlX2FkZChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbitcdGlmIChyYykge1xuK1x0XHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmMpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJhczJfY3R4O1xuK1xuK2lkYV9mcmVlOlxuK1x0aWRhX2ZyZWUoXHUwMDI2cmFzMl9pZGEsIGlkKTtcbitwY2NfZnJlZTpcbitcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVx1MDAzZXNzcGNjKTtcbitjdHhfZnJlZTpcbitcdGtmcmVlKHJhczJfY3R4KTtcbitcbitcdHJldHVybiBFUlJfUFRSKHJjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4re1xuK1x0aWYgKCFyYXMyX2N0eClcbitcdFx0cmV0dXJuO1xuK1xuK1x0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbit9XG4rXG4rc3RhdGljIGludCBwYXJzZV9yYXMyX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiKVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICoqcGN0eF9saXN0O1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XG4rXHR1MTYgdG90X3RibF9sZW47XG4rXHR1MTYgaTtcbitcbitcdGlmIChyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YoKnJhczJfdGFiKSkge1xuK1x0XHRwcl93YXJuKEZXX1dBUk4gXCJBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxuXCIsXG4rXHRcdFx0cmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCFyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgXHUwMDNlIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHtcbitcdFx0cHJfd2FybihGV19XQVJOIFwiTm8vSW52YWxpZCBudW1iZXIgb2YgUENDIGRlc2NzKCVkKSBpbiBBQ1BJIFJBUzIgdGFibGVcXG5cIixcbitcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHR0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICsgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyAqIHNpemVvZigqcGNjX2Rlc2NfbGlzdCk7XG4rXHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2MgdG90X3RibF9sZW4pIHtcbitcdFx0cHJfd2FybihGV19XQVJOIFwiUkFTMiB0YWJsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gUENDIGRlc2NzPSVkIHNpemU9JXUpXFxuXCIsXG4rXHRcdFx0cmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcywgcmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cGN0eF9saXN0ID0ga2NhbGxvYyhyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzLCBzaXplb2YoKnBjdHhfbGlzdCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwY3R4X2xpc3QpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cGNjX2Rlc2NfbGlzdCA9IChzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICopKHJhczJfdGFiICsgMSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzOyBpKyssIHBjY19kZXNjX2xpc3QrKykge1xuK1x0XHRpZiAocGNjX2Rlc2NfbGlzdC1cdTAwM2VmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyYXMyX2N0eCA9IGFkZF9hdXhfZGV2aWNlKFJBUzJfTUVNX0RFVl9JRF9OQU1FLCBwY2NfZGVzY19saXN0LVx1MDAzZWNoYW5uZWxfaWQsXG4rXHRcdFx0XHRcdCAgcGNjX2Rlc2NfbGlzdC1cdTAwM2VpbnN0YW5jZSk7XG4rXHRcdC8qIEludmFsaWQgTlVNQSBub2RlLCBjb250aW51ZSBwYXJzaW5nIG5leHQgbm9kZSAqL1xuK1x0XHRpZiAoUFRSX0VSUihyYXMyX2N0eCkgPT0gLUVOWElPKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoSVNfRVJSKHJhczJfY3R4KSkge1xuK1x0XHRcdHByX3dhcm4oXCJGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXG5cIiwgUFRSX0VSUihyYXMyX2N0eCkpO1xuK1x0XHRcdGZvciAoOyBpIFx1MDAzZSAwOyBpLS0pIHtcbitcdFx0XHRcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxuK1x0XHRcdFx0XHRyZW1vdmVfYXV4X2RldmljZShwY3R4X2xpc3RbaSAtIDFdKTtcbitcdFx0XHR9XG4rXHRcdFx0a2ZyZWUocGN0eF9saXN0KTtcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihyYXMyX2N0eCk7XG4rXHRcdH1cbitcdFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XG4rXHR9XG4rXHRrZnJlZShwY3R4X2xpc3QpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG4rICpcbisgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuKyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhblxuKyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxuKyAqIG1lbW9yeSBmZWF0dXJlLlxuKyAqXG4rICogUmV0dXJuczogbm9uZS5cbisgKi9cbit2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiO1xuK1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuK1xuK1x0c3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKilcdTAwMjZyYXMyX3RhYik7XG4rXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gZ2V0IHRhYmxlLCAlc1xcblwiLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcbitcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gcGFyc2UgUkFTMiB0YWJsZVxcblwiKTtcbitcbitcdGFjcGlfcHV0X3RhYmxlKChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilyYXMyX3RhYik7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG4rKysgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xuQEAgLTE0LDYgKzE0LDcgQEAgZW51bSBlZGFjX3NjcnViX2F0dHJpYnV0ZXMge1xuIFx0U0NSVUJfQUREUkVTUyxcbiBcdFNDUlVCX1NJWkUsXG4gXHRTQ1JVQl9FTkFCTEVfQkFDS0dST1VORCxcbitcdFNDUlVCX0VOQUJMRV9ERU1BTkQsXG4gXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT04sXG4gXHRTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sXG5AQCAtNTUsNiArNTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcIjB4JWxseFxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcIjB4JWxseFxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9iYWNrZ3JvdW5kLCBnZXRfZW5hYmxlZF9iZywgYm9vbCwgXCIldVxcblwiKVxuK0VEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9kZW1hbmQsIGdldF9lbmFibGVkX29kLCBib29sLCBcIiV1XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFwiJXVcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhtYXhfY3ljbGVfZHVyYXRpb24sIGdldF9tYXhfY3ljbGUsIHUzMiwgXCIldVxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGdldF9jeWNsZV9kdXJhdGlvbiwgdTMyLCBcIiV1XFxuXCIpXG5AQCAtODQsNiArODYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXHRcdFx0XFxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoYWRkciwgd3JpdGVfYWRkciwgdTY0LCBrc3RydG91NjQpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKHNpemUsIHdyaXRlX3NpemUsIHU2NCwga3N0cnRvdTY0KVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuK0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXG4gXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcbkBAIC0xMTksNiArMTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50XG4gXHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbitcdGNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDpcbitcdFx0aWYgKG9wcy1cdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xuK1x0XHRcdGlmIChvcHMtXHUwMDNlc2V0X2VuYWJsZWRfb2QpXG4rXHRcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdHJldHVybiAwNDQ0O1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT046XG4gXHRcdGlmIChvcHMtXHUwMDNlZ2V0X21pbl9jeWNsZSlcbiBcdFx0XHRyZXR1cm4gYS1cdTAwM2Vtb2RlO1xuQEAgLTE2NCw2ICsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcbiBcdFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxuK1x0XHRbU0NSVUJfRU5BQkxFX0RFTUFORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2RlbWFuZCwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtaW5fY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX01BWF9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWF4X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JXKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXG5pbmRleCBmYzRmNGJiOTRhNGM2NS4uYTFlNmFlZDhiY2M4NTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Jhcy9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXG5AQCAtNDYsNCArNDYsMTcgQEAgY29uZmlnIFJBU19GTVBNXG4gXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXG4gXHQgIHBsYXRmb3JtLXNwZWNpZmljIHBvbGljaWVzLlxuIFxuK2NvbmZpZyBNRU1fQUNQSV9SQVMyXG4rXHR0cmlzdGF0ZSBcIk1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXCJcbitcdGRlcGVuZHMgb24gQUNQSV9SQVMyXG4rXHRkZXBlbmRzIG9uIEVEQUNcbitcdGRlcGVuZHMgb24gRURBQ19TQ1JVQlxuK1x0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPXG4rXHRoZWxwXG4rXHQgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMlxuK1x0ICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG9cbitcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXG4rXHQgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyXG4rXHQgIHRocm91Z2ggdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLlxuK1xuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuaW5kZXggMTFmOTVkNTlkMzk3MmQuLmEwZTZlOTAzZDZiMDliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5AQCAtMiw2ICsyLDcgQEBcbiBvYmotJChDT05GSUdfUkFTKVx0Kz0gcmFzLm9cbiBvYmotJChDT05GSUdfREVCVUdfRlMpXHQrPSBkZWJ1Z2ZzLm9cbiBvYmotJChDT05GSUdfUkFTX0NFQylcdCs9IGNlYy5vXG4rb2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpXHQrPSBhY3BpX3JhczIub1xuIFxuIG9iai0kKENPTkZJR19SQVNfRk1QTSlcdCs9IGFtZC9mbXBtLm9cbiBvYmoteVx0XHRcdCs9IGFtZC9hdGwvXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yYTdkZTIyNmVjODU5MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcbkBAIC0wLDAgKzEsNTg5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIEFDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cbisgKlxuKyAqL1xuK1xuKyN1bmRlZiBwcl9mbXRcbisjZGVmaW5lIHByX2ZtdChmbXQpXHRcIkFDUEkgUkFTMiBNRU1PUlk6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWRhYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuK1xuKyNkZWZpbmUgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiBCSVQoMClcbisjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXG4rXG4rI2RlZmluZSBSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUyAweDAxXG4rI2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXG4rI2RlZmluZSBSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSIDB4MDNcbitcbisvKlxuKyAqIFJBUzIgcGF0cm9sIHNjcnViXG4rICovXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBSQVMyX1BTX0VOX0JBQ0tHUk9VTkQgQklUKDApXG4rI2RlZmluZSBSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDcsIDApXG4rI2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcbisjZGVmaW5lIFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HIEJJVCgwKVxuK1xuKyNkZWZpbmUgUkFTMl9TQ1JVQl9OQU1FX0xFTiAxMjhcbisjZGVmaW5lIFJBUzJfSE9VUl9JTl9TRUNTIDM2MDBcbitcbitzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0ge1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BhdHJvbF9zY3J1Yl9wYXJhbSBwYXJhbXM7XG4rfTtcbitcbisjZGVmaW5lIFRPX0FDUElfUkFTMl9QU19TSE1FTShfYWRkcikgXFxcbitcdGNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pXG4rXG4rc3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuK1xuK3N0YXRpYyBpbnQgcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdGlvd3JpdGU4KDAsIFx1MDAyNmNvbW1vbi1cdTAwM2VzZXRfY2Fwc1swXSk7XG4rXG4rXHRyZXR1cm4gaW9yZWFkOChcdTAwMjZjb21tb24tXHUwMDNlZmVhdHVyZXNbMF0pIFx1MDAyNiBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbitcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4rXHR1MzIgc2NydWJfcGFyYW1zX291dDtcbitcdGludCByZXQ7XG4rXG4rXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuK1x0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4rXHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX3NpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4rXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKHJhczJfY3R4LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xcblwiKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHNjcnViX3BhcmFtc19vdXQgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XG4rXHRyYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLFxuK1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbitcdHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXG4rXHRcdFx0XHRcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xuK1x0cmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxuK1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbitcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1Yikge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgIChpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IHRydWU7XG4rXHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTtcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pO1xuK1x0fSBlbHNlIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBDb250ZXh0IC0gUENDIGxvY2sgbXVzdCBiZSBoZWxkICovXG4rc3RhdGljIGludCByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgYm9vbCAqcnVubmluZylcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuK1x0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXJhczJfY3R4LVx1MDAzZW9kX3NjcnViKSB7XG4rXHRcdCpydW5uaW5nID0gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbitcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1xuK1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQqcnVubmluZyA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5mbGFncykgXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HO1xuK1x0aWYgKCEoKnJ1bm5pbmcpKVxuK1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4rXHRcdGlmICghcmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIElmIHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKCkgZmFpbHMgaGVyZSwgcmUtZW5hYmxpbmcgYmFja2dyb3VuZFxuK1x0XHQgKiBzY3J1YmJpbmcgaW1tZWRpYXRlbHkgbWF5IG5vdCBiZSBwb3NzaWJsZSBvciBjb3JyZWN0LiBJbiB0aGF0IGNhc2UsXG4rXHRcdCAqIHRoZSBhZG1pbiBvciBmaXJtd2FyZSBtYXkgbmVlZCB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YmJpbmdcbitcdFx0ICogYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4rXHRcdCAqL1xuK1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHRpZiAoIXJ1bm5pbmcpIHtcbitcdFx0XHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRcIkZhaWxlZCB0byBlbmFibGUgYmFja2dyb3VuZCBzY3J1YiByZXQ9JWRcXG5cIiwgcmV0KTtcbitcbitcdFx0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRcdG1zbGVlcCgxMDAwKTtcbitcdH1cbitcbitcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0Km1pbiA9IHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1heClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdCptYXggPSByYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKnNjcnViX2N5Y2xlX3NlY3MpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHQqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2Vjcylcbit7XG4rXHR1MzIgc2NydWJfY3ljbGVfaHJzID0gc2NydWJfY3ljbGVfc2VjcyAvIFJBUzJfSE9VUl9JTl9TRUNTO1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChydW5uaW5nKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0aWYgKHNjcnViX2N5Y2xlX2hycyBcdTAwM2MgcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlIHx8XG4rXHQgICAgc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpiYXNlKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdC8qXG4rXHQgKiBXaGVuIEJHIHNjcnViYmluZyBpcyBlbmFibGVkIHRoZSBhY3R1YWwgYWRkcmVzcyByYW5nZSBpcyBub3QgdmFsaWQuXG4rXHQgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuXG4rXHQgKi9cbitcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCpiYXNlID0gcmFzMl9jdHgtXHUwMDNlYmFzZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCAqc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQqc2l6ZSA9IHJhczJfY3R4LVx1MDAzZXNpemU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IGJhc2UpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChydW5uaW5nKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IGJhc2U7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXNpemUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocnVubmluZylcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJhczJfY3R4LVx1MDAzZXNpemUgPSBzaXplO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0KmVuYWJsZWQgPSByYXMyX2N0eC1cdTAwM2ViZ19zY3J1YjtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4rXHR1MzIgc2NydWJfcGFyYW1zX2luO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuK1x0aWYgKGVuYWJsZSkge1xuK1x0XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIgfHwgcnVubmluZylcbitcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4rXHRcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuK1x0XHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbitcdFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbitcdFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRcdGlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCFyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbitcdFx0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0XHRpb3dyaXRlMTYoUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0fVxuK1xuK1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuK1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpO1xuK1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gJXMgYmFja2dyb3VuZCBzY3J1YmJpbmdcXG5cIixcbitcdFx0XHRzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiA9IGVuYWJsZTtcbitcdGlmIChlbmFibGUpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcbitcdFx0LyogVXBkYXRlIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciByb3VuZGluZyBvZiBzdXBwbGllZCBwYXJhbWV0ZXJzIGFuZCBzaW1pbGFyICovXG4rXHRcdHJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXG4rXHRyZXR1cm4gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGVuYWJsZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQqZW5hYmxlZCA9IHJ1bm5pbmc7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFlbmFibGUpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHQvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4rXHRcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBmYWxzZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSB0cnVlO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZFxuK1x0ICogd2l0aCAoYmFzZSArIHNpemUpIFx1MDAzZSAobWVtX2Jhc2UgKyBtZW1fc2l6ZSkgY2hlY2sgaW4gdGhlIGZ1dHVyZSBvbmNlIGFcbitcdCAqIHByb3BlciBtZXRob2QgZm9yIGRldGVybWluaW5nIHRoZSBOVU1BIG5vZGUgbWVtb3J5IHJhbmdlIGlzIGF2YWlsYWJsZS5cbitcdCAqL1xuK1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VzaXplIHx8IHJhczJfY3R4LVx1MDAzZWJhc2UgXHUwMDNjIHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIiVzOiBJbnZhbGlkIGFkZHJlc3MgcmFuZ2UsIGJhc2U9MHglbGx4IHNpemU9MHglbGx4XFxuXCIsXG4rXHRcdFx0X19mdW5jX18sIHJhczJfY3R4LVx1MDAzZWJhc2UsIHJhczJfY3R4LVx1MDAzZXNpemUpO1xuK1x0XHRyZXQgPSAtRVJBTkdFO1xuK1x0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbitcdH1cbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xuK1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4rXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2ViYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZXNpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4rXHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxcblwiLCByZXQpO1xuK1x0XHRpZiAocmV0ICE9IC1FQlVTWSkge1xuK1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4rXHRcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4rXHRcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4rXHRcdH1cbitcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGVuYWJsZTtcbitcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViIFx1MDAyNlx1MDAyNiByYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlIFx1MDAyNlx1MDAyNiAhcmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQsIHJhczJfY3R4LFxuK1x0XHRcdFx0XHQgICAgICAgXCJyYXMyX3NjcnViX25pZCVkXCIsIHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRcdGlmIChJU19FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKTtcbitcdFx0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogSWYga3RocmVhZF9ydW4oKSBmYWlscyBhbmQgdGhlIGRlbWFuZCBzY3J1YmJpbmcgaGFzIHN0YXJ0ZWQgcnVubmluZyxcbitcdFx0XHQgKiByZS1lbmFibGluZyBiYWNrZ3JvdW5kIHNjcnViIHdpbGwgZmFpbC4gVGh1cyBhZG1pbi9maXJtd2FyZSBtYXkgbmVlZFxuK1x0XHRcdCAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK1xuK2VuYWJsZV9iZ19zY3J1YjpcbitcdGlmIChyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1Yikge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuK1x0XHRfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xuK1x0LnJlYWRfYWRkciA9IHJhczJfaHdfc2NydWJfcmVhZF9hZGRyLFxuK1x0LnJlYWRfc2l6ZSA9IHJhczJfaHdfc2NydWJfcmVhZF9zaXplLFxuK1x0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXG4rXHQud3JpdGVfc2l6ZSA9IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSxcbitcdC5nZXRfZW5hYmxlZF9iZyA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcsXG4rXHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxuK1x0LmdldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZCxcbitcdC5zZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QsXG4rXHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXG4rXHQuZ2V0X21heF9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUsXG4rXHQuZ2V0X2N5Y2xlX2R1cmF0aW9uID0gcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkLFxuK1x0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXG4rfTtcbitcbitzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbitcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybjtcbitcbitcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmFzMl9jdHgtXHUwMDNlZHJpdmVyX2FjdGl2ZSA9IGZhbHNlO1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZXRocmVhZCkge1xuK1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0XHRrdGhyZWFkX3N0b3AocmFzMl9jdHgtXHUwMDNldGhyZWFkKTtcbitcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XG4rXHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XG4rXHRjaGFyIHNjcnViX25hbWVbUkFTMl9TQ1JVQl9OQU1FX0xFTl07XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbnVtX3NwYW5uZWRfcGFnZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFyYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHJhczJfY3R4KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LypcbitcdCAqIFJldHJpZXZlIHRoZSBQQSByYW5nZSBvZiB0aGUgTlVNQSBkb21haW4gYW5kIHVzZSBpdCBhcyB0aGVcbitcdCAqICdSZXF1ZXN0ZWQgQWRkcmVzcyBSYW5nZScsIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmRcbitcdCAqIEdFVF9QQVRST0xfUEFSQU1FVEVSUyB0byBnZXQgcGFyYW1ldGVycyB0aGF0IGFwcGx5IHRvIGFsbCBhZGRyZXNzZXNcbitcdCAqIGluIHRoZSBOVU1BIGRvbWFpbiBhcyB3ZWxsIGFzIHdoZW4gc2VuZCBjb21tYW5kIFNUQVJUX1BBVFJPTF9TQ1JVQkJFUlxuK1x0ICogdG8gc3RhcnQgdGhlIGRlbWFuZCBzY3J1YmJpbmcuXG4rXHQgKi9cbitcdHN0YXJ0X3BmbiA9IG5vZGVfc3RhcnRfcGZuKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRudW1fc3Bhbm5lZF9wYWdlcyA9IG5vZGVfc3Bhbm5lZF9wYWdlcyhyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuK1x0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xuK1x0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcXG5cIiwgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcdH1cbitcbitcdHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlID0gX19wZm5fdG9fcGh5cyhzdGFydF9wZm4pO1xuK1x0cmFzMl9jdHgtXHUwMDNlbWVtX3NpemUgPSAodTY0KW51bV9zcGFubmVkX3BhZ2VzICogUEFHRV9TSVpFO1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUpXG4rXHRcdHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycztcbitcdGVsc2VcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xuK1xuK1x0c3ByaW50ZihzY3J1Yl9uYW1lLCBcImFjcGlfcmFzX21lbSVkXCIsIGF1eGRldi1cdTAwM2VpZCk7XG4rXG4rXHRyYXNfZmVhdHVyZXMuZnRfdHlwZVx0PSBSQVNfRkVBVF9TQ1JVQjtcbitcdHJhc19mZWF0dXJlcy5pbnN0YW5jZVx0PSAwO1xuK1x0cmFzX2ZlYXR1cmVzLnNjcnViX29wc1x0PSBcdTAwMjZyYXMyX3NjcnViX29wcztcbitcdHJhc19mZWF0dXJlcy5jdHhcdD0gcmFzMl9jdHg7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlID0gdHJ1ZTtcbitcbitcdHJldHVybiBlZGFjX2Rldl9yZWdpc3RlcihcdTAwMjZhdXhkZXYtXHUwMDNlZGV2LCBzY3J1Yl9uYW1lLCBOVUxMLCAxLCBcdTAwMjZyYXNfZmVhdHVyZXMpO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgcmFzMl9tZW1fZGV2X2lkX3RhYmxlW10gPSB7XG4rXHR7IC5uYW1lID0gUkFTMl9BVVhfREVWX05BTUUgXCIuXCIgUkFTMl9NRU1fREVWX0lEX05BTUUsIH0sXG4rXHR7IH1cbit9O1xuK1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgYXV4aWxpYXJ5X2RyaXZlciByYXMyX21lbV9kcml2ZXIgPSB7XG4rXHQubmFtZSA9IFJBUzJfTUVNX0RFVl9JRF9OQU1FLFxuK1x0LnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLFxuK1x0LnJlbW92ZSA9IHJhczJfbWVtX2Rydl9yZW1vdmUsXG4rXHQuaWRfdGFibGUgPSByYXMyX21lbV9kZXZfaWRfdGFibGUsXG4rfTtcbittb2R1bGVfYXV4aWxpYXJ5X2RyaXZlcihyYXMyX21lbV9kcml2ZXIpO1xuK1xuK01PRFVMRV9JTVBPUlRfTlMoXCJBQ1BJX1JBUzJcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYWM3NWIwMzA3ZmE5Y2Ncbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcbkBAIC0wLDAgKzEsODYgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBBQ1BJIFJBUzIgKFJBUyBGZWF0dXJlIFRhYmxlKSBtZXRob2RzLlxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWRcbisgKi9cbitcbisjaWZuZGVmIF9BQ1BJX1JBUzJfSFxuKyNkZWZpbmUgX0FDUElfUkFTMl9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYXV4aWxpYXJ5X2J1cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWFpbGJveF9jbGllbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rc3RydWN0IGRldmljZTtcbitcbisvKlxuKyAqIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MjogUENDIGNvbW1hbmQgY29kZXMgdXNlZCBieVxuKyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxuKyAqL1xuKyNkZWZpbmUgUENDX0NNRF9FWEVDX1JBUzIgMHgwMVxuK1xuKyNkZWZpbmUgUkFTMl9BVVhfREVWX05BTUUgXCJyYXMyXCJcbisjZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FIFwiYWNwaV9yYXMyX21lbVwiXG4rXG4rLyoqXG4rICogc3RydWN0IHJhczJfbWVtX2N0eCAtIENvbnRleHQgZm9yIFJBUzIgbWVtb3J5IGZlYXR1cmVzXG4rICogQGFkZXY6XHRcdEF1eGlsaWFyeSBkZXZpY2Ugb2JqZWN0XG4rICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuKyAqIEBkZXY6XHRcdFBvaW50ZXIgdG8gZGV2aWNlIGJhY2tpbmcgc3RydWN0IG1ib3hfY29udHJvbGxlciBmb3IgUENDXG4rICogQHNzcGNjOlx0XHRQb2ludGVyIHRvIGxvY2FsIGRhdGEgc3RydWN0dXJlIGZvciBQQ0MgY29tbXVuaWNhdGlvblxuKyAqIEBwY2NfbG9jazpcdFx0UG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcbisgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4rICogQHN5c19jb21wX25pZDpcdE5vZGUgSUQgb2YgdGhlIHN5c3RlbSBjb21wb25lbnQgdGhhdCB0aGUgUkFTIGZlYXR1cmVcbisgKlx0XHRcdGlzIGFzc29jaWF0ZWQgd2l0aC4gU2VlIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MDogUkFTMlxuKyAqXHRcdFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxuKyAqXHRcdFx0RmllbGQ6IEluc3RhbmNlXG4rICogQG1lbV9iYXNlOlx0XHRCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2VcbisgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuKyAqIEBtZW1fc2l6ZVx0XHRTaXplIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2VcbisgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuKyAqIEBiYXNlOlx0XHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcbisgKiBAc2l6ZTpcdFx0U2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxuKyAqIEBzY3J1Yl9jeWNsZV9ocnM6XHRDdXJyZW50IHNjcnViIHJhdGUgaW4gaG91cnNcbisgKiBAc2V0X3NjcnViX2N5Y2xlOlx0U2NydWIgcmF0ZSB0byBzZXQgaW4gaG91cnNcbisgKiBAbWluX3NjcnViX2N5Y2xlOlx0TWluaW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZFxuKyAqIEBtYXhfc2NydWJfY3ljbGU6XHRNYXhpbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4rICogQG9kX3NjcnViOlx0XHRTdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZyAobWVtb3J5IHJlZ2lvbilcbisgKiBAYmdfc2NydWI6XHRcdFN0YXR1cyBvZiBiYWNrZ3JvdW5kIHBhdHJvbCBzY3J1YmJpbmdcbisgKiBAcmVlbmFibGVfYmdfc2NydWI6XHRGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZFxuKyAqXHRcdFx0c2NydWJiaW5nIGlzIGZpbmlzaGVkXG4rICogQHRocmVhZDpcdFx0RGVtYW5kIHNjcnViIG1vbml0b3Iga3RocmVhZFxuKyAqIEBkcml2ZXJfYWN0aXZlOlx0RmxhZyBpbmRpY2F0ZXMgUkFTMiBtZW1vcnkgZHJpdmVyIGlzIGFjdGl2ZS9yZW1vdmVkXG4rICovXG4rc3RydWN0IHJhczJfbWVtX2N0eCB7XG4rXHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZVx0XHRhZGV2O1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuK1x0c3RydWN0IGRldmljZVx0XHRcdCpkZXY7XG4rXHR2b2lkXHRcdFx0XHQqc3NwY2M7XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHQqcGNjX2xvY2s7XG4rXHR1MzJcdFx0XHRcdHN5c19jb21wX25pZDtcbitcdHU2NFx0XHRcdFx0bWVtX2Jhc2U7XG4rXHR1NjRcdFx0XHRcdG1lbV9zaXplO1xuK1x0dTY0XHRcdFx0XHRiYXNlO1xuK1x0dTY0XHRcdFx0XHRzaXplO1xuK1x0dThcdFx0XHRcdHNjcnViX2N5Y2xlX2hycztcbitcdHU4XHRcdFx0XHRzZXRfc2NydWJfY3ljbGU7XG4rXHR1OFx0XHRcdFx0bWluX3NjcnViX2N5Y2xlO1xuK1x0dThcdFx0XHRcdG1heF9zY3J1Yl9jeWNsZTtcbitcdGJvb2xcdFx0XHRcdG9kX3NjcnViO1xuK1x0Ym9vbFx0XHRcdFx0Ymdfc2NydWI7XG4rXHRib29sXHRcdFx0XHRyZWVuYWJsZV9iZ19zY3J1YjtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdFx0XHQqdGhyZWFkO1xuK1x0Ym9vbFx0XHRcdFx0ZHJpdmVyX2FjdGl2ZTtcbit9O1xuK1xuKyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXG4rdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XG4raW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cbisjZW5kaWZcbitcbisjZW5kaWYgLyogX0FDUElfUkFTMl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGFjLmggYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5AQCAtNjg0LDYgKzY4NCw4IEBAIGVudW0gZWRhY19kZXZfZmVhdCB7XG4gICogQHdyaXRlX3NpemU6IHNldCBvZmZzZXQgb2YgdGhlIHNjcnViYmluZyByYW5nZS5cbiAgKiBAZ2V0X2VuYWJsZWRfYmc6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGJhY2tncm91bmQgc2NydWIuXG4gICogQHNldF9lbmFibGVkX2JnOiBzdGFydCBvciBzdG9wIGEgYmctc2NydWIuXG4rICogQGdldF9lbmFibGVkX29kOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBkZW1hbmQgc2NydWIuXG4rICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9jeWNsZV9kdXJhdGlvbjogZ2V0IGN1cnJlbnQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbkBAIC02OTYsNiArNjk4LDggQEAgc3RydWN0IGVkYWNfc2NydWJfb3BzIHtcbiBcdGludCAoKndyaXRlX3NpemUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKTtcbiBcdGludCAoKmdldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xuIFx0aW50ICgqc2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbitcdGludCAoKmdldF9lbmFibGVkX29kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xuK1x0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbiBcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XG4gXHRpbnQgKCpnZXRfbWF4X2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptYXgpO1xuIFx0aW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDAwOjM2OjI0LjE0NDY1MzI5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzY1MjMyMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQUNQSSBSQVMyIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgYWRkcyBBQ1BJIFJBUzIgc3VwcG9ydCBhbmQgYSBtZW1vcnkgZHJpdmVyLiBJdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIEtjb25maWcgYW5kIE1ha2VmaWxlIGNoYW5nZXMsIHNvbWUgbmV3IGZpbGVzIChgcmFzMi5jYCwgYGFjcGlfcmFzMi5jYCwgYHJhczIuaGApLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBkcml2ZXJzIChgYnVzLmNgLCBgc2NydWIuY2ApLiBJdCdzIGFsbCBhYm91dCBlbmFibGluZyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nIHVzaW5nIHRoZSBBQ1BJIFJBUzIgdGFibGUgYW5kIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykuIFRoZSBkcml2ZXIgaW50ZWdyYXRlcyB3aXRoIEVEQUMgYW5kIGV4cG9zZXMgc3lzZnMgYXR0cmlidXRlcyBmb3IgY29udHJvbC5cblxuVGhlIGJpZyBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIGFsd2F5cywgaG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIHZpcnR1YWxpemF0aW9uPyBEb2VzIHRoaXMgZXZlbiAqd29yayogaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0U/IFRoZSBjb3JlIGRlcGVuZGVuY3kgaXMgdGhlIHByZXNlbmNlIG9mIGFuIEFDUEkgUkFTMiB0YWJsZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGRvZXMgdGhlIGZpcm13YXJlICpwcm92aWRlKiB0aGF0IHRhYmxlIGluIGEgdmlydHVhbGl6ZWQgY29udGV4dD8gSSBrbm93IFFFTVUgb2Z0ZW4gZG9lc24ndCBoYXZlIGl0IGJ5IGRlZmF1bHQuIEkgaGF2ZSB0byB0aGluayBhYm91dCBzeXprYWxsZXIuIENhbiBzeXprYWxsZXIgaW5qZWN0IEFDUEkgdGFibGVzPyBJIGtub3cgaXQgZG9lcywgYnV0IGlzIGl0IGFibGUgdG8gbG9hZCBhbiBBQ1BJIFJBUzIgdGFibGU/XG5cbldhaXQsIHN5emthbGxlciAqY2FuJ3QqIGluamVjdCBhcmJpdHJhcnkgdGFibGVzIHVubGVzcyBpdCdzIHNwZWNpZmljYWxseSBzdXBwb3J0ZWQuIEl0IGRvZXMgaGF2ZSBBQ1BJIGZ1enppbmcsIGJ1dCBpdCdzIG5vdCBsaWtlIGEgYmxhbmtldCBpbmplY3Rpb24uIE9rYXksIEkgc2VlLiBUaGUgZHJpdmVyIHVzZXMgYGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIC4uLilgLiBJZiB0aGUgdGFibGUgKmlzbid0KiBwcmVzZW50LCBgYWNwaV9yYXMyX2luaXRgIGp1c3QgcmV0dXJucy4gVGhhdCdzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBidXQgaXMgdGhhdCByZWFjaGFibGUgaW4gc3l6a2FsbGVyPyBJZiB0aGVyZSdzIG5vIFJBUzIgdGFibGUsIHRoZSBkcml2ZXIganVzdCBzaWxlbnRseSBkb2VzIG5vdGhpbmcuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lczogaG93IGNhbiBJICpmb3JjZSogdGhpcyBjb2RlIHRvIHJ1biwgb3IgYXQgbGVhc3QgYXR0ZW1wdCB0byBydW4/XG5cblN5emthbGxlciAqY2FuKiBsb2FkIEFDUEkgdGFibGVzIHZpYSBgYWNwaV9jb25maWdmc2Agb3IgYGluaXRyZGAgdGFibGUgb3ZlcnJpZGUuLi5idXQgSSdtIG5vdCBzdXJlIGlmIGl0IGFjdGl2ZWx5IGRvZXMgdGhpcyBmb3IgUkFTMi4gTGV0IG1lIGNoZWNrIGlmIGBwYXJzZV9yYXMyX3RhYmxlYCBpcyBldmVyIHJlYWNoZWQuIElmIHN5emthbGxlciAqY2FuKiBwcm92aWRlIGN1c3RvbSBBQ1BJIHRhYmxlcywgdGhlbiB0aGUgY29kZSAqaXMqIHJlYWNoYWJsZS4gT2theSwgbGV0J3MgYXNzdW1lIGl0IGNhbiBmb3IgdGhlIHRpbWUgYmVpbmcuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHNlZSBgQ09ORklHX0FDUElfUkFTMmAsIGBDT05GSUdfTUVNX0FDUElfUkFTMmAsIGBDT05GSUdfRURBQ2AsIGFuZCBgQ09ORklHX0VEQUNfU0NSVUJgLiBTdGFuZGFyZCBzdHVmZi5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgZHJpdmVyIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBhY3BpX3JhczJfaW5pdGAgaXMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAgaW4gYGRyaXZlcnMvYWNwaS9idXMuY2AuIEV4Y2VsbGVudC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgaXMgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvciBwdXJlbHkgaGFyZHdhcmUgZGVwZW5kZW50IG9uIGl0LiBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IG1lbnRpb24gb2YgYEFDUElfU0lHX1JBUzJgIG91dHNpZGUgdGhlIGRyaXZlciBpdHNlbGYuIExldCBtZSBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgY29tZXMgYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwMDozNjozNC41MDk4ODkxNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzYwNzQxNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFDUElfU0lHX1JBUzJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY3BpL3JhczIuYz00ODg9dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDkyLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM6NDkzOlxcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXFx1MDAyNnJhczJfdGFiKTtcXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTQ5NC1cXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcXG4tLVxcbmluY2x1ZGUvYWNwaS9hY3RibDIuaC01My0jZGVmaW5lIEFDUElfU0lHX1JBU0YgICAgICAgICAgIFxcXCJSQVNGXFxcIlxcdC8qIFJBUyBGZWF0dXJlIHRhYmxlICovXFxuaW5jbHVkZS9hY3BpL2FjdGJsMi5oOjU0OiNkZWZpbmUgQUNQSV9TSUdfUkFTMiAgICAgICAgICAgXFxcIlJBUzJcXFwiXFx0LyogUkFTMiBGZWF0dXJlIHRhYmxlICovXFxuaW5jbHVkZS9hY3BpL2FjdGJsMi5oLTU1LSNkZWZpbmUgQUNQSV9TSUdfUkdSVCAgICAgICAgICAgXFxcIlJHUlRcXFwiXFx0LyogUmVndWxhdG9yeSBHcmFwaGljcyBSZXNvdXJjZSBUYWJsZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwMDozNjozNy44NzA2NDM1MzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzQyNzk4OTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzOiBBQ1BJIFJBUzIgVGFibGUgYW5kIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZHJpdmVycy9hY3BpL3JhczIuY2AgY29kZSwgYW5kIHRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIEFDUEkgUkFTMiB0YWJsZSBzaWduYXR1cmUuIENhbiBzeXprYWxsZXIgZXZlbiBmdXp6IEFDUEkgdGFibGVzPyBJIGtub3cgaXQgaGFzICpzb21lKiBzdXBwb3J0LiBCdXQgdGhlIGVudHJ5IHBvaW50LCBgYWNwaV9yYXMyX2luaXRgLCBpcyBjYWxsZWQgZHVyaW5nIGBhY3BpX2luaXRgLCB3aGljaCBpcyBhbiBgc3Vic3lzX2luaXRjYWxsYC4gVGhhdCdzIGEgcmVkIGZsYWcuIElmIHN5emthbGxlciBsb2FkcyB0YWJsZXMgdGhyb3VnaCBjb25maWdmcyBsYXRlciwgZG9lcyB0aGF0IGV2ZW4gbWF0dGVyPyBEb2VzIGBhY3BpX2dldF90YWJsZWAgcGljayB1cCB0YWJsZXMgbG9hZGVkIGFmdGVyIGBhY3BpX2luaXRgIHJ1bnM/XG5cbkFjdHVhbGx5LCB0aGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBgYWNwaV9yYXMyX2luaXRgIHNlZW1zIHRvIGJlIGEgKm9uZS1zaG90KiBkZWFsIGR1cmluZyBib290LiBJZiB0aGUgdGFibGUgaXNuJ3QgdGhlcmUgYXQgdGhhdCBleGFjdCBtb21lbnQsIGl0IGJhaWxzIG91dC4gQ291bGQgd2UgaW5qZWN0IGl0IHZpYSB0aGUgUUVNVSBjb21tYW5kIGxpbmU/IFBvc3NpYmxlLCBidXQgc3l6a2FsbGVyIGRvZXNuJ3QgZHluYW1pY2FsbHkgc3dhcCBBQ1BJIHRhYmxlcyBwZXIgdGVzdCBjYXNlLCBpdCBoYXMgYSBmaXhlZCBRRU1VIGNvbmZpZy4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbiBcImluamVjdCBBQ1BJIHRhYmxlXCIgc3l6Y2FsbCBsaWtlIGBzeXpfYWNwaV9sb2FkYD8gTm8sIHRoZXJlIGlzbid0IG9uZS4gSG1tLi4uaXMgdGhlcmUgZXZlbiBhbnkgd2F5IHRvIHRlc3QgdGhpcyB3aXRoIHN5emthbGxlcj9cblxuSWYgYGFjcGlfcmFzMl9pbml0YCBvbmx5IHJ1bnMgYXQgYm9vdCwgYW5kIHN5emthbGxlciBkb2Vzbid0IHJlYm9vdCB3aXRoIGN1c3RvbSBBQ1BJIHRhYmxlcywgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuIExldCBtZSBjb25maXJtIHRoYXQgYGFjcGlfcmFzMl9pbml0YCBpcyB0aGUgc29sZSBlbnRyeSBwb2ludC4gWWVwLCBpdCBwYXJzZXMgdGhlIHRhYmxlIGFuZCBjcmVhdGVzIGF1eGlsaWFyeSBkZXZpY2VzLiBUaGUgYHJhczJfbWVtX2RyaXZlcmAgYmluZHMgdG8gdGhlc2UgZGV2aWNlcy4gTm8gZGV2aWNlcywgbm8gcHJvYmUsIGFuZCB0aGUgd2hvbGUgYGRyaXZlcnMvYWNwaS9yYXMyLmNgIGFuZCBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgIGFyZSBkZWFkIGNvZGUgdW5sZXNzIHRoZSBSQVMyIHRhYmxlIGlzIHByZXNlbnQgYXQgYm9vdC5cblxuU2luY2UgUUVNVSBkb2Vzbid0IHByb3ZpZGUgdGhlIFJBUzIgdGFibGUgYnkgZGVmYXVsdCwgYW5kIHN5emthbGxlciBkb2Vzbid0IGluamVjdCBpdCBhdCBib290LCB0aGlzIGNvZGUgaXMgbGlrZWx5ICp1bnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0IG1lIGRvdWJsZS1jaGVjazogaXMgdGhlcmUgQU5ZIG90aGVyIHdheSB0byBjYWxsIGBwYXJzZV9yYXMyX3RhYmxlYCBvciBgcmFzMl9tZW1fZHJ2X3Byb2JlYD8gYHJhczJfbWVtX2Rydl9wcm9iZWAgZ2V0cyBjYWxsZWQgYnkgdGhlIGF1eGlsaWFyeSBidXMgd2hlbiBhIGRldmljZSBtYXRjaGluZyBgUkFTMl9NRU1fREVWX0lEX05BTUVgIGlzIGFkZGVkLiBBbmQgd2hlcmUgZG9lcyB0aGF0IGRldmljZSBjb21lIGZyb20/IEl0J3MgYHBhcnNlX3JhczJfdGFibGVgISBXaGljaCBpcyBvbmx5IGNhbGxlZCBieSBgYWNwaV9yYXMyX2luaXRgLCBhbmQgd2hpY2ggaXMgb25seSBjYWxsZWQgYnkgYGFjcGlfaW5pdGAuXG5cbkNhbiB3ZSBjcmVhdGUgYW4gYXV4aWxpYXJ5IGRldmljZSBmcm9tIHVzZXJzcGFjZT8gTm8sIGF1eGlsaWFyeSBkZXZpY2VzIGFyZSBjcmVhdGVkIGJ5IGtlcm5lbCBjb2RlLiBJcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgYGFjcGlfaW5pdGAgYWdhaW4/IE5vLCBpdCdzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLlxuXG5Tbywgd2l0aG91dCBhIFJBUzIgQUNQSSB0YWJsZSBwcm92aWRlZCBhdCBib290LCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4gU2luY2Ugd2UncmUgZXZhbHVhdGluZyBpZiBzeXprYWxsZXIgc2hvdWxkIGV2ZW4gdHJ5LCBhbmQgc3l6a2FsbGVyIHJ1bnMgaW4gUUVNVS9HQ0UgKndpdGhvdXQqIGN1c3RvbSBmaXJtd2FyZSB3aXRoIFJBUzIsIHRoaXMgY29kZSBpcyBkZWFkLlxuXG5XYWl0LCB3aGF0IGlmIHN5emthbGxlciBsb2FkcyB0aGUgdGFibGUgdmlhIGBhY3BpX2NvbmZpZ2ZzYD8gSXQgd291bGRuJ3QgbWF0dGVyLCBgYWNwaV9yYXMyX2luaXRgIGhhcyBhbHJlYWR5IHJ1biBhbmQgcmV0dXJuZWQuIFdhaXQsIGRvZXMgYGFjcGlfZ2V0X3RhYmxlYCBnZXQgY2FsbGVkIGFnYWluIG9uIHRhYmxlIGxvYWQ/IE5vLiBgYWNwaV9yYXMyX2luaXRgIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhY3BpX2luaXRgLiBUaGVyZSdzIG5vIEFDUEkgdGFibGUgbm90aWZpZXIgZm9yIFJBUzIuIENvbXBhcmUgdGhhdCB0byBgYWNwaV9uZml0X2luaXRgIHdoaWNoICpkb2VzKiByZWdpc3RlciBhbiBBQ1BJIHRhYmxlIGhhbmRsZXIuLi4gTGV0J3Mgc2VlIGlmIGBhY3BpX3JhczJfaW5pdGAgZG9lcyBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIGl0IGp1c3QgZG9lcyBhIG9uZS10aW1lIGBhY3BpX2dldF90YWJsZWAgYXQgYm9vdCBhbmQgY2FsbHMgYHBhcnNlX3JhczJfdGFibGVgIGlmIGl0IGZpbmRzIGl0LlxuXG5MZXQncyBkb3VibGUtY2hlY2sgYWdhaW4sIGlzIHRoZXJlIGFueSBvdGhlciB3YXkgdG8gY2FsbCBgcmFzMl9tZW1fZHJ2X3Byb2JlYD8gTWF5YmUgc29tZSBvdGhlciBkcml2ZXIgc29tZWhvdyBjcmVhdGVzIHRoZSBhdXhpbGlhcnkgZGV2aWNlPyBObywgdGhlIGRldmljZSBJRCBpcyBgXCJhY3BpX3JhczJfbWVtXCJgLiBMZXQgbWUgc2VhcmNoIGZvciBpdCBhbmQgYmUgc3VyZS4uLiBOb3BlLiBDb25maXJtZWQuIFRoaXMgY29kZSBpcyAqdW5yZWFjaGFibGUqIGluIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjA4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQwMDozNjo1MS4yOTg2MzcyNDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNDA1MzAwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3BpX3JhczJfbWVtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvYWNwaS9yYXMyLmg9MTc9c3RydWN0IGRldmljZTtcXG4tLVxcbmluY2x1ZGUvYWNwaS9yYXMyLmgtMjUtI2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcXFwicmFzMlxcXCJcXG5pbmNsdWRlL2FjcGkvcmFzMi5oOjI2OiNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXFxcImFjcGlfcmFzMl9tZW1cXFwiXFxuaW5jbHVkZS9hY3BpL3JhczIuaC0yNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDA6MzY6NTMuOTMyNzAyMDU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk1OTI2MzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJBUzIgRGV2aWNlIGFuZCBFREFDIFNjcnViIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgUkFTMiBkZXZpY2UsIGFuZCBpdCBzZWVtcyB0aGUgb25seSB3YXkgaXQgZ2V0cyBjcmVhdGVkIGlzIHRocm91Z2ggYGFjcGlfcmFzMl9pbml0YC4gVGhpcyBpcyBhIGJpdCBvZiBhIHByb2JsZW0gYmVjYXVzZSBpdCdzIGhhcmR3YXJlLWRlcGVuZGVudCwgbmVlZGluZyBzcGVjaWZpYyBBQ1BJIHRhYmxlcyBmcm9tIHRoZSBmaXJtd2FyZSwgYW5kIGl0IG9ubHkgY2hlY2tzIHRoaXMgYXQgYm9vdCB0aW1lLiBUaGF0IG1lYW5zIGl0J3MgYmFzaWNhbGx5IHVudG91Y2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVubGVzcyB3ZSBzcGVjaWZpY2FsbHkgY29uZmlndXJlIFFFTVUgdG8gcGFzcyBhIGN1c3RvbSBBQ1BJIHRhYmxlLCBhbmQgU3l6a2FsbGVyIGlzbid0IGRvaW5nIHRoYXQgZHluYW1pY2FsbHkgZm9yIFJBUzIgYXQgdGhlIG1vbWVudC4gSXQgaXMgZ29pbmcgdG8gYmUgaW5jcmVkaWJseSBkaWZmaWN1bHQgdG8gcmVwcm9kdWNlIGFueSBpc3N1ZXMuXG5cbldhaXQgYSBzZWNvbmQsIHRoZXJlJ3MgYSByZWxhdGVkIGNoYW5nZSBpbiBgZHJpdmVycy9lZGFjL3NjcnViLmNgISBJIG1pc3NlZCB0aGlzIGluaXRpYWxseS4gSXQgbG9va3MgbGlrZSBhIG5ldyBhdHRyaWJ1dGUgYGVuYWJsZV9kZW1hbmRgIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBFREFDIHNjcnViIHN5c2ZzIGludGVyZmFjZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXMgYW55IG90aGVyIGRyaXZlciB1c2luZyB0aGlzIG5ldyBhdHRyaWJ1dGU/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgb3RoZXIgZHJpdmVycyBzZXR0aW5nIGBnZXRfZW5hYmxlZF9vZGAgb3IgYHNldF9lbmFibGVkX29kYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0MTQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDAwOjM3OjAyLjg5MTk2ODE5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg5NjcxMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9lbmFibGVkX29kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZWRhYy9zY3J1Yi5jPTg4PUVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jOjg5OkVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuZHJpdmVycy9lZGFjL3NjcnViLmMtOTAtRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGN1cnJlbnRfY3ljbGVfZHVyYXRpb24sIHNldF9jeWNsZV9kdXJhdGlvbiwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuLS1cXG5kcml2ZXJzL2VkYWMvc2NydWIuYz05Mj1zdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxcbi0tXFxuZHJpdmVycy9lZGFjL3NjcnViLmMtMTI2LVxcdFxcdGlmIChvcHMtXFx1MDAzZWdldF9lbmFibGVkX29kKSB7XFxuZHJpdmVycy9lZGFjL3NjcnViLmM6MTI3OlxcdFxcdFxcdGlmIChvcHMtXFx1MDAzZXNldF9lbmFibGVkX29kKVxcbmRyaXZlcnMvZWRhYy9zY3J1Yi5jLTEyOC1cXHRcXHRcXHRcXHRyZXR1cm4gYS1cXHUwMDNlbW9kZTtcXG4tLVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jPTM4MT1zdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZClcXG4tLVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTM5Ni1cXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYzozOTc6c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTM5OC17XFxuLS1cXG5kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYz00ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQ5Ni1cXHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jOjQ5NzpcXHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxcbmRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jLTQ5OC1cXHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaD02NzI9ZW51bSBlZGFjX2Rldl9mZWF0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oLTY4Ny0gKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo2ODg6ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxcbmluY2x1ZGUvbGludXgvZWRhYy5oLTY4OS0gKiBAZ2V0X21pbl9jeWNsZTogZ2V0IG1pbmltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2VkYWMuaD02OTQ9c3RydWN0IGVkYWNfc2NydWJfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZWRhYy5oLTcwMS1cXHRpbnQgKCpnZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaDo3MDI6XFx0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG5pbmNsdWRlL2xpbnV4L2VkYWMuaC03MDMtXFx0aW50ICgqZ2V0X21pbl9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWluKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMDA6Mzc6MDUuMzgxNjQ1MTU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3MDQyNDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBuZXcgYHNldF9lbmFibGVkX29kYCBmdW5jdGlvbiBpcyAqb25seSogdXNlZCB3aXRoaW4gYGFjcGlfcmFzMi5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgbmV3IEVEQUMgc2NydWIgYXR0cmlidXRlIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gdGhlIG5ldyBBQ1BJIFJBUzIgZHJpdmVyLiBHaXZlbiB0aGF0LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSBjYW4gZXZlbiAqaGl0KiB0aGlzIGNvZGUuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzLCBcIkNvdWxkIG91ciBmdXp6aW5nIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgc3l6a2FsbGVyLCBwcm92aWRlIGEgcGF0aHdheT9cIiBJIG5lZWQgdG8gY29uc2lkZXIgdGhhdC4gVGhlbiBJIHJlbWVtYmVyZWQgdGhlIEFDUEkgdGFibGUgaW5qZWN0aW9uIG1lY2hhbmlzbSBpbiBzeXprYWxsZXIgdmlhIGBhY3BpX2NvbmZpZ2ZzYC4gSG93ZXZlciwgYSBxdWljayBsb29rIHJldmVhbHMgdGhhdCBgYWNwaV9yYXMyX2luaXRgIGlzIGNhbGxlZCBkaXJlY3RseSBkdXJpbmcgdGhlIGtlcm5lbCdzIGJvb3QtdXAgc2VxdWVuY2UgZnJvbSBgYWNwaV9pbml0YCwgYW5kIGRvZXNuJ3QgYXBwZWFyIHRvIHJlZ2lzdGVyIGl0c2VsZiB0byBiZSBjYWxsZWQgbGF0ZXIuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMuLi4gT2theSwgd2FpdC4uLiBgYWNwaV9uZml0X2luaXRgIGlzIGFsc28gY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAsIGFuZCB0aGF0ICpkb2VzKiByZWdpc3RlciBhbiBBQ1BJIGRyaXZlci4gVGhhdCdzIGEgbW9kdWxlIGluaXQgZnVuY3Rpb24hIGBhY3BpX3JhczJfaW5pdGAgZG9lcyBub3QuIEl0IGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhY3BpX2luaXRgIGFuZCBqdXN0IGNhbGxzIGBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19SQVMyLCAuLi4pYC4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBBQ1BJIHRhYmxlIGdldHMgbG9hZGVkIGxhdGVyIHZpYSBjb25maWdmcywgYGFjcGlfcmFzMl9pbml0YCB3b24ndCBiZSByZS1leGVjdXRlZC4gSXQncyBzdHJpY3RseSBhIGJvb3QtdGltZSB0aGluZy5cblxuU28sIHJlYWxpc3RpY2FsbHksIHdlIGNhbid0IHRyaWdnZXIgdGhpcyBmdW5jdGlvbmFsaXR5IGluIHN5emthbGxlci5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyB1bnJlYWNoYWJsZSBjb2RlLCB3aGljaCBpcyBoYXJkd2FyZS1kZXBlbmRlbnQgKG5lZWRpbmcgYW4gQUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgaW4gZmlybXdhcmUgYXQgYm9vdCkgYW5kLCBhcyBzdWNoLCB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UuIEkgd2lsbCByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLCBjaXRpbmcgdGhlc2UgcmVhc29ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2MjcsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDAwOjM3OjEyLjY1MjA3MjExNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGZvciBBQ1BJIFJBUzIgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy4gVGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiAoYWNwaV9yYXMyX2luaXQpIGlzIGNhbGxlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QgKGZyb20gYWNwaV9pbml0KSBhbmQgY2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIEFDUEkgUkFTMiB0YWJsZS4gU2luY2UgUUVNVS9HQ0UgZG8gbm90IHByb3ZpZGUgdGhpcyBzcGVjaWZpYyBBQ1BJIHRhYmxlIGJ5IGRlZmF1bHQsIGFuZCB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyB0YWJsZSBsb2FkaW5nIChlLmcuLCB2aWEgY29uZmlnZnMpLCB0aGUgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgZm9yIEFDUEkgUkFTMiBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLiBUaGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIChhY3BpX3JhczJfaW5pdCkgaXMgY2FsbGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCAoZnJvbSBhY3BpX2luaXQpIGFuZCBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgQUNQSSBSQVMyIHRhYmxlLiBTaW5jZSBRRU1VL0dDRSBkbyBub3QgcHJvdmlkZSB0aGlzIHNwZWNpZmljIEFDUEkgdGFibGUgYnkgZGVmYXVsdCwgYW5kIHRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBkeW5hbWljIHRhYmxlIGxvYWRpbmcgKGUuZy4sIHZpYSBjb25maWdmcyksIHRoZSBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow76wht[1] Phase: Running StartedAt: 2026-07-06 00:37:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76wht[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-06 00:37:23 +0000 UTC FinishedAt: 2026-07-06 00:37:42 +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,}