Name: series-workflow6wl8w Phase: Failed StartedAt: 2026-08-07 06:21:02 +0000 UTC FinishedAt: 2026-08-07 06:23:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wl8w[0] Phase: Succeeded StartedAt: 2026-08-07 06:21:02 +0000 UTC FinishedAt: 2026-08-07 06:23:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wl8w[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 06:21:02 +0000 UTC FinishedAt: 2026-08-07 06:23:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA2OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWXMgYW5kIHRoZSBBQzIwMCBNRkQuIFRoZXNlIGRyaXZlcnMgYXJlIGhlYXZpbHkgZGVwZW5kZW50IG9uIERldmljZSBUcmVlIChPRikgZm9yIHByb2JpbmcgYW5kIGNvbmZpZ3VyYXRpb24gKGUuZy4sIGNoZWNraW5nIGZvciBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MgYW5kIGBkZXYtXHUwMDNlb2Zfbm9kZWApLiBTaW5jZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHVzZWQgZm9yIGZ1enppbmcgZG8gbm90IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBvciBkZXZpY2UgdHJlZSBub2RlcywgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyYzEzMTM5ZDI4YjY3YTYzMTM5YjA2ZWQxZDcwYWM1ZjViZDI3ZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDA2OjIyOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI3ZThkOWJkNTY2MWFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxuQEAgLTAsMCAmIzQzOzEsNjkgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIElDXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIFRoZSBBQzIwMCBpcyBhIG1peGVkLXNpZ25hbCBjb21wYW5pb24gSUMgY29udGFpbmluZyBhdWRpbywgdmlkZW8sIFJUQyBhbmRcbiYjNDM7ICBGYXN0IEV0aGVybmV0IFBIWSBmdW5jdGlvbnMuIEl0cyBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgb3ZlciBJMkMuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBjb25zdDogeC1wb3dlcnMsYWMyMDBcbiYjNDM7XG4mIzQzOyAgcmVnOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgY2xvY2tzOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBBQzIwMCBpbnB1dCBjbG9jay4gV2hlbiB1c2luZyB0aGUgRXRoZXJuZXQgUEhZLCBpdHMgY29uZmlndXJlZCByYXRlIG11c3RcbiYjNDM7ICAgICAgYmUgMjQgb3IgMjcgTUh6LCBtYXRjaGluZyB0aGUgcmF0ZXMgZW5jb2RlZCBieSB0aGUgZG9jdW1lbnRlZCBFUEhZIGNsb2NrXG4mIzQzOyAgICAgIHNlbGVjdG9yLlxuJiM0MztcbiYjNDM7ICBhYy1sZG9pbi1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgYXVkaW8tY29kZWMgTERPIGlucHV0XG4mIzQzO1xuJiM0MzsgIGVwaHktdmNjLXN1cHBseTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZFxuJiM0MztcbiYjNDM7ICBydGMtdmNjLXN1cHBseTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBSVENcbiYjNDM7XG4mIzQzOyAgdHYtdmNjLXN1cHBseTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBUViBlbmNvZGVyIERBQ1xuJiM0MztcbiYjNDM7cmVxdWlyZWQ6XG4mIzQzOyAgLSBjb21wYXRpYmxlXG4mIzQzOyAgLSByZWdcbiYjNDM7ICAtIGNsb2Nrc1xuJiM0MzsgIC0gYWMtbGRvaW4tc3VwcGx5XG4mIzQzOyAgLSBlcGh5LXZjYy1zdXBwbHlcbiYjNDM7ICAtIHJ0Yy12Y2Mtc3VwcGx5XG4mIzQzOyAgLSB0di12Y2Mtc3VwcGx5XG4mIzQzO1xuJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgaTJjIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBtaXhlZC1zaWduYWxAMTAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7eC1wb3dlcnMsYWMyMDBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4MTBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBhYy1sZG9pbi1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBlcGh5LXZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBydGMtdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHR2LXZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuJiM0MzsuLi5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIyYmRkYzdhMmY5NDFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcbkBAIC0wLDAgJiM0MzsxLDIwOCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiYjNDM7JVlBTUwgMS4yXG4mIzQzOy0tLVxuJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjpcbiYjNDM7ICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XG4mIzQzOyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZVxuJiM0MzsgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBwYXJ0IG9mIGFuIEkyQyBNRkQsXG4mIzQzOyAgd2hpbGUgQUMzMDAgY29udHJvbCByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2XG4mIzQzOyAgcGx1cyB0aGUgbGluayBQSFkgYWRkcmVzcy5cbiYjNDM7XG4mIzQzOyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS5cbiYjNDM7ICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxuJiM0MzsgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLlxuJiM0MztcbiYjNDM7ICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcbiYjNDM7ICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kXG4mIzQzOyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50b1xuJiM0MzsgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxuJiM0MztcbiYjNDM7c2VsZWN0OlxuJiM0MzsgIHByb3BlcnRpZXM6XG4mIzQzOyAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICBlbnVtOlxuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MzsgIHJlcXVpcmVkOlxuJiM0MzsgICAgLSBjb21wYXRpYmxlXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhpbXVtOiAzMVxuJiM0MztcbiYjNDM7ICBjbG9ja3M6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6LiBUaGUgQUMyMDAgaW5wdXQgY2xvY2tcbiYjNDM7ICAgICAgYmVsb25ncyB0byB0aGUgcmVmZXJlbmNlZCBBQzIwMCBNRkQgaW5zdGVhZC5cbiYjNDM7XG4mIzQzOyAgdmNjMS1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgMy4zIFYgc3VwcGx5IGZvciB0aGUgQUMzMDAgSS9PLCBiYW5kZ2FwLCBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZCxcbiYjNDM7ICAgICAgYW5kIGludGVybmFsIGRpZ2l0YWwgTERPXG4mIzQzO1xuJiM0MzsgIG52bWVtLWNlbGxzOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xuJiM0MzsgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxuJiM0MzsgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxuJiM0MzsgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxuJiM0MzsgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxuJiM0MzsgICAgICBjb3B5IGluc3RlYWQuXG4mIzQzO1xuJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6XG4mIzQzOyAgICBjb25zdDogY29uZmlndXJhdGlvblxuJiM0MztcbiYjNDM7ICB4LXBvd2VycyxhYzIwMDpcbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiBSZWZlcmVuY2UgdG8gdGhlIEFDMjAwIE1GRCBjb250YWluaW5nIHRoaXMgRXRoZXJuZXQgUEhZXG4mIzQzO1xuJiM0MzsgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XG4mIzQzOyAgICB0eXBlOiBib29sZWFuXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxuJiM0MzsgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxuJiM0MztcbiYjNDM7cGF0dGVyblByb3BlcnRpZXM6XG4mIzQzOyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSYjNDM7JDpcbiYjNDM7ICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xuJiM0MzsgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXG4mIzQzOyAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgLSBjb21wYXRpYmxlXG4mIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7XG4mIzQzO2RlcGVuZGVudFJlcXVpcmVkOlxuJiM0MzsgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXVxuJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6IFsgbnZtZW0tY2VsbHMgXVxuJiM0MztcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY2xvY2tzOiBmYWxzZVxuJiM0MzsgICAgICAgIHZjYzEtc3VwcGx5OiBmYWxzZVxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByZWc6XG4mIzQzOyAgICAgICAgICBtYXhpbXVtOiA3XG4mIzQzOyAgICAgICAgeC1wb3dlcnMsYWMyMDA6IGZhbHNlXG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0gY2xvY2tzXG4mIzQzOyAgICAgICAgLSB2Y2MxLXN1cHBseVxuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHNcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIHJlZzpcbiYjNDM7ICAgICAgICAgIG1heGltdW06IDdcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSBjbG9ja3NcbiYjNDM7ICAgICAgICAtIHZjYzEtc3VwcGx5XG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZwd20gNVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgdmNjMS1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwmIzM0O2NvbmZpZ3VyYXRpb25cJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHgtcG93ZXJzLGFjMjAwID0gXHUwMDNjXHUwMDI2YWMyMDBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7XG4mIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB2Y2MxLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuJiM0MztcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIG1kaW8ge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDEge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSBcdTAwM2NcdTAwMjZhYzIwMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDEge1xuJiM0MzsgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG4mIzQzOy4uLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnXG5pbmRleCA3NjNjZTZhMzQ3ODJiLi40OTkyNjljODU4MTI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZmQvS2NvbmZpZ1xuQEAgLTIwNSw2ICYjNDM7MjA1LDE3IEBAIGNvbmZpZyBNRkRfQUMxMDBcbiBcdCAgVGhpcyBkcml2ZXIgaW5jbHVkZSBvbmx5IHRoZSBjb3JlIEFQSXMuIFlvdSBoYXZlIHRvIHNlbGVjdCBpbmRpdmlkdWFsXG4gXHQgIGNvbXBvbmVudHMgbGlrZSBjb2RlY3Mgb3IgUlRDIHVuZGVyIHRoZSBjb3JyZXNwb25kaW5nIG1lbnVzLlxuIFxuJiM0Mztjb25maWcgTUZEX0FDMjAwXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7WC1Qb3dlcnMgQUMyMDBcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQ1xuJiM0MztcdGRlcGVuZHMgb24gT0ZcbiYjNDM7XHRzZWxlY3QgUkVHTUFQX0kyQ1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFN1cHBvcnQgZm9yIHRoZSBYLVBvd2VycyBBQzIwMCBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDLiBUaGUgQUMyMDBcbiYjNDM7XHQgIGNvbnRhaW5zIGF1ZGlvLCB2aWRlbywgUlRDIGFuZCBGYXN0IEV0aGVybmV0IFBIWSBmdW5jdGlvbnMgYW5kIGlzXG4mIzQzO1x0ICBjby1wYWNrYWdlZCB3aXRoIHNvbWUgQWxsd2lubmVyIEg2IGFuZCBINjE2IFNvQ3MuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXG4mIzQzO1x0ICB0aGUgc2hhcmVkIHJlZ2lzdGVyIGFjY2VzcyB1c2VkIGJ5IHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9uIGRyaXZlcnMuXG4mIzQzO1xuIGNvbmZpZyBNRkRfQVhQMjBYXG4gXHR0cmlzdGF0ZVxuIFx0c2VsZWN0IE1GRF9DT1JFXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvTWFrZWZpbGUgYi9kcml2ZXJzL21mZC9NYWtlZmlsZVxuaW5kZXggZGQ0YmI3ZTc3YzMzNi4uODkwZTc2YTlhZDAwYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9NYWtlZmlsZVxuQEAgLTE1MCw2ICYjNDM7MTUwLDcgQEAgb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfU1BJKVx0JiM0Mzs9IGRhOTA1Mi1zcGkub1xuIG9iai0kKENPTkZJR19NRkRfREE5MDUyX0kyQylcdCYjNDM7PSBkYTkwNTItaTJjLm9cbiBcbiBvYmotJChDT05GSUdfTUZEX0FDMTAwKVx0XHQmIzQzOz0gYWMxMDAub1xuJiM0MztvYmotJChDT05GSUdfTUZEX0FDMjAwKVx0XHQmIzQzOz0gYWMyMDAub1xuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYKVx0JiM0Mzs9IGF4cDIweC5vXG4gb2JqLSQoQ09ORklHX01GRF9BWFAyMFhfSTJDKVx0JiM0Mzs9IGF4cDIweC1pMmMub1xuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX1JTQilcdCYjNDM7PSBheHAyMHgtcnNiLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYzIwMC5jIGIvZHJpdmVycy9tZmQvYWMyMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5OGJiNDE3M2IxNGJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWZkL2FjMjAwLmNcbkBAIC0wLDAgJiM0MzsxLDE3NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIE1GRCBjb3JlIGRyaXZlciBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyBcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICpcbiYjNDM7ICogQmFzZWQgb24gdGhlIEFDMTAwIGRyaXZlcjpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE2IENoZW4tWXUgVHNhaVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9SRUdcdFx0XHQweDAwMDBcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9QQUNLQUdFX01BU0tcdFx0R0VOTUFTSygxNSwgMTQpXG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX1ZFUlNJT05fQ0hJUF9NQVNLXHRcdEdFTk1BU0soMTEsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDAwMlxuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX0NISVBfUkVTRVRfREVBU1NFUlRcdEJJVCgwKVxuJiM0MztcbiYjNDM7LyogSW50ZXJmYWNlIHJlZ2lzdGVyIGFjY2Vzc2libGUgZnJvbSBldmVyeSByZWdpc3RlciBwYWdlLiAqL1xuJiM0MzsjZGVmaW5lIEFDMjAwX1RXSV9SRUdfQUREUl9IXHQweDAwZmVcbiYjNDM7I2RlZmluZSBBQzIwMF9NQVhfUkVHXHRcdDB4YTFmMlxuJiM0MztcbiYjNDM7c3RydWN0IGFjMjAwIHtcbiYjNDM7XHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFjMjAwX3N1cHBsaWVzW10gPSB7XG4mIzQzO1x0XCYjMzQ7YWMtbGRvaW5cJiMzNDssXG4mIzQzO1x0XCYjMzQ7ZXBoeS12Y2NcJiMzNDssXG4mIzQzO1x0XCYjMzQ7cnRjLXZjY1wmIzM0OyxcbiYjNDM7XHRcJiMzNDt0di12Y2NcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZV9jZmcgYWMyMDBfcmFuZ2VfY2ZnW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0LnJhbmdlX21heCA9IEFDMjAwX01BWF9SRUcsXG4mIzQzO1x0XHQuc2VsZWN0b3JfcmVnID0gQUMyMDBfVFdJX1JFR19BRERSX0gsXG4mIzQzO1x0XHQuc2VsZWN0b3JfbWFzayA9IDB4ZmYsXG4mIzQzO1x0XHQud2luZG93X2xlbiA9IDI1NixcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRWFjaCBBQzIwMCBzdWItYmxvY2sgY2FuIHJlc2V0IGluZGVwZW5kZW50bHksIGludmFsaWRhdGluZyBpdHMgcmVnaXN0ZXJcbiYjNDM7ICogY29udGVudHMgd2l0aG91dCByZWdtYXAmIzM5O3Mga25vd2xlZGdlLiBDYWNoZSBvbmx5IHRoZSBjb21tb24gcGFnZSBzZWxlY3RvcjtcbiYjNDM7ICogdGhpcyBhdm9pZHMgYSBzZWxlY3RvciByZWFkLW1vZGlmeS13cml0ZSBmb3IgZXZlcnkgYWNjZXNzIG9uIHRoZSBzYW1lIHBhZ2VcbiYjNDM7ICogd2l0aG91dCBldmVyIHJldHVybmluZyBzdGFsZSBmdW5jdGlvbmFsLXJlZ2lzdGVyIHZhbHVlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGFjMjAwX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVnICE9IEFDMjAwX1RXSV9SRUdfQUREUl9IO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWMyMDBfcmVnbWFwX2NvbmZpZyA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2FjMjAwXCYjMzQ7LFxuJiM0MztcdC5yZWdfYml0cyA9IDgsXG4mIzQzO1x0LnJlZ19zdHJpZGUgPSAyLFxuJiM0MztcdC52YWxfYml0cyA9IDE2LFxuJiM0MztcdC5yYW5nZXMgPSBhYzIwMF9yYW5nZV9jZmcsXG4mIzQzO1x0Lm51bV9yYW5nZXMgPSBBUlJBWV9TSVpFKGFjMjAwX3JhbmdlX2NmZyksXG4mIzQzO1x0Lm1heF9yZWdpc3RlciA9IEFDMjAwX01BWF9SRUcsXG4mIzQzO1x0LnZvbGF0aWxlX3JlZyA9IGFjMjAwX3ZvbGF0aWxlX3JlZyxcbiYjNDM7XHQuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX01BUExFLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWMyMDBfZGlzYWJsZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMjAwICpkZGF0YSA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4mIzQzO1x0dW5zaWduZWQgaW50IHZlcnNpb247XG4mIzQzO1x0c3RydWN0IGFjMjAwICpkZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgY2xrICpjbGs7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRkYXRhKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFkZGF0YSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldF9lbmFibGUoZGV2LCBBUlJBWV9TSVpFKGFjMjAwX3N1cHBsaWVzKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgYWMyMDBfc3VwcGxpZXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllc1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGNsayA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihjbGspKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGNsayksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGlucHV0IGNsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRkZGF0YS1cdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFx1MDAyNmFjMjAwX3JlZ21hcF9jb25maWcpO1xuJiM0MztcdGlmIChJU19FUlIoZGRhdGEtXHUwMDNlcmVnbWFwKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZGF0YS1cdTAwM2VyZWdtYXApLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGRhdGEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vIG1pbmltdW0gZGVsYXkgaXMgZG9jdW1lbnRlZC4gTWF0Y2ggdGhlIHZlbmRvciBkcml2ZXImIzM5O3MgNDAgbXMgZGVsYXlcbiYjNDM7XHQgKiBiZWZvcmUgaXRzIGZpcnN0IEFDMjAwIHJlZ2lzdGVyIGFjY2VzcyBhZnRlciBlbmFibGluZyB0aGUgaW5wdXQgY2xvY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0bXNsZWVwKDQwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnbWFwX3JlYWQoZGRhdGEtXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfVkVSU0lPTl9SRUcsIFx1MDAyNnZlcnNpb24pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIGNoaXAgdmVyc2lvblxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGRldl9pbmZvKGRldiwgXCYjMzQ7QUMyMDAgcmV2aXNpb24gJSNseCBpbiBwYWNrYWdlICVsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fQ0hJUF9NQVNLLCB2ZXJzaW9uKSxcbiYjNDM7XHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLLCB2ZXJzaW9uKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc2V0IHRoZSBjaGlwIGFmdGVyIGRlcGVuZGVudCBmdW5jdGlvbiBkcml2ZXJzIGhhdmUgdW5ib3VuZC4gKi9cbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzIwMF9kaXNhYmxlLCBkZGF0YSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhYzIwMF9zaHV0ZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuJiM0Mzt7XG4mIzQzO1x0YWMyMDBfZGlzYWJsZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFjMjAwX29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3gtcG93ZXJzLGFjMjAwXCYjMzQ7IH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjMjAwX29mX21hdGNoKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYzIwMF9pMmNfaWRzW10gPSB7XG4mIzQzO1x0eyAubmFtZSA9IFwmIzM0O2FjMjAwXCYjMzQ7IH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhYzIwMF9pMmNfaWRzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhYzIwMF9kcml2ZXIgPSB7XG4mIzQzO1x0LmRyaXZlciA9IHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7YWMyMDBcJiMzNDssXG4mIzQzO1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBhYzIwMF9vZl9tYXRjaCxcbiYjNDM7XHR9LFxuJiM0MztcdC5wcm9iZSA9IGFjMjAwX3Byb2JlLFxuJiM0MztcdC5zaHV0ZG93biA9IGFjMjAwX3NodXRkb3duLFxuJiM0MztcdC5pZF90YWJsZSA9IGFjMjAwX2kyY19pZHMsXG4mIzQzO307XG4mIzQzO21vZHVsZV9pMmNfZHJpdmVyKGFjMjAwX2RyaXZlcik7XG4mIzQzO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0phbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7WC1Qb3dlcnMgQUMyMDAgTUZEIGNvcmUgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBhMjlkM2ZlZDhhMDUzLi4yN2I4ZmZlNGI1MzkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDc1LDYgJiM0Mzs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFlcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuJiM0MztcdCAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFlcbiYjNDM7XHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuJiM0MztcdCAgcmVnaXN0ZXJzLlxuJiM0MztcbiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUlcbiBcdHRyaXN0YXRlIFwmIzM0O1hpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcJiMzNDtcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IGUyM2RmNWU4MzZlOWUuLmI4YTUyZDgxZWFjNjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMCw0ICYjNDM7MTAwLDcgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVx0XHQmIzQzOz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCYjNDM7PSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQmIzQzOz0gdGVyYW5ldGljcy5vXG4gb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKVx0JiM0Mzs9IHZpdGVzc2Uub1xuJiM0Mzt4cG93ZXJzLWFjeDAwLXlcdFx0XHQ6PSB4cG93ZXJzLWFjeDAwLW1haW4ubyB4cG93ZXJzLWFjeDAwLWFjMjAwLm8gXFxcbiYjNDM7XHRcdFx0XHQgICB4cG93ZXJzLWFjeDAwLWFjMzAwLm9cbiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKVx0JiM0Mzs9IHhwb3dlcnMtYWN4MDAub1xuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgJiM0Mzs9IHhpbGlueF9nbWlpMnJnbWlpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMyMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJjNjhmNjViMTdmNmZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMjAwLmNcbkBAIC0wLDAgJiM0MzsxLDM4OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcdTAwM2NhbmRyZS5wcnp5d2FyYUBhcm0uY29tXHUwMDNlKVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eHBvd2Vycy1hY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVRcdDNcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUdcdFx0XHQweDAwMTRcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVx0XHRcdEJJVCgxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1x0XHRcdDB4MDAxNlxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7LyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xuJiM0MzsjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXHRcdFx0MHg4MDA0XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1x0XHRcdDB4NjAwMFxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cdFx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaXHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTS1x0XHRcdEdFTk1BU0soOCwgNClcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLXHRcdEdFTk1BU0soMTUsIDEyKVxuJiM0MztcbiYjNDM7c3RydWN0IGFjMjAwX2VwaHlfY3RsIHtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4mIzQzO1x0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogU2VyaWFsaXplcyBwb3dlciBzZXF1ZW5jaW5nIGFuZCBzdGF0ZS4gKi9cbiYjNDM7XHR1MTYgZXBoeV9jdGw7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBoeV9hZGRyO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1x0Ym9vbCBwb3dlcmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXG4mIzQzO3N0YXRpYyBib29sIGFjMjAwX2VwaHlfbm9kZV9uZWVkc19wcm9iZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAhb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobm9kZSwgXCYjMzQ7c3RhdHVzXCYjMzQ7LCBcdTAwMjZzdGF0dXMpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAhc3RyY21wKHN0YXR1cywgXCYjMzQ7ZmFpbC1uZWVkcy1wcm9iZVwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9hZGRfZW5hYmxlX3BhdGgoc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBvZl9jaGFuZ2VzZXQgKm9jcyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgYm9vbCAqY2hhbmdlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBhcmVudCA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4mIzQzO1x0aWYgKHBhcmVudCkge1xuJiM0MztcdFx0cmV0ID0gYWMyMDBfZXBoeV9hZGRfZW5hYmxlX3BhdGgoZGV2LCBvY3MsIHBhcmVudCwgY2hhbmdlZCk7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChwYXJlbnQpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghYWMyMDBfZXBoeV9ub2RlX25lZWRzX3Byb2JlKG5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7JXBPRiBpcyB1bmF2YWlsYWJsZSB3aXRob3V0IGZhaWwtbmVlZHMtcHJvYmVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2ZfY2hhbmdlc2V0X3VwZGF0ZV9wcm9wX3N0cmluZyhvY3MsIG5vZGUsIFwmIzM0O3N0YXR1c1wmIzM0OywgXCYjMzQ7b2theVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHQqY2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9lbmFibGVfcGF0aChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb2ZfY2hhbmdlc2V0ICpvY3M7XG4mIzQzO1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b2NzID0ga3phbGxvY19vYmooKm9jcyk7XG4mIzQzO1x0aWYgKCFvY3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0b2ZfY2hhbmdlc2V0X2luaXQob2NzKTtcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2FkZF9lbmFibGVfcGF0aChkZXYsIG9jcywgbm9kZSwgXHUwMDI2Y2hhbmdlZCk7XG4mIzQzO1x0aWYgKHJldCB8fCAhY2hhbmdlZClcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX2NoYW5nZXNldF9hcHBseShvY3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIHRoZSBhcHBsaWVkIHN0YXR1cyBwcm9wZXJ0aWVzIGFsaXZlIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIERULiAqL1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X2Rlc3Ryb3k6XG4mIzQzO1x0b2ZfY2hhbmdlc2V0X2Rlc3Ryb3kob2NzKTtcbiYjNDM7XHRrZnJlZShvY3MpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2N0bCB8XG4mIzQzO1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuJiM0MztcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSywgcHJpdi1cdTAwM2VwaHlfYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmVnLCBFUlJfUFRSKHJldCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHQgICBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRyZXQgPSBlcnI7XG4mIzQzO1x0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cmV0ID0gZXJyO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChwcml2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MzthYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxuJiM0MztcdFx0XHRcdFx0IGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdHUxNiBlcGh5X2N0bDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5X2FkZHIgXHUwMDNlIEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKSB7XG4mIzQzO1x0XHRyZXQgPSAwO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XHRwcml2LVx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XG4mIzQzO1xuJiM0MztcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xuJiM0MztcbiYjNDM7XHQvKiBTdGFydCBmcm9tIGEgZGlzYWJsZWQgc3RhdGUgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb25maWd1cmF0aW9uLiAqL1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuJiM0MztcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywgZXBoeV9jdGwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuJiM0MztcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO2Vycl9kaXNhYmxlOlxuJiM0MztcdC8qIEF0dGVtcHQgZXZlcnkgc3RlcCBvZiB0aGUgc2h1dGRvd24gc2VxdWVuY2UgYWZ0ZXIgYSBwYXJ0aWFsIHN0YXJ0LiAqL1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1x0YWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChwcml2KTtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0dW5zaWduZWQgaW50IGludGVybmFsX2NhbGlicmF0aW9uO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuJiM0MztcdHU4IGJwc19lZmZ1c2VfY29kZTtcbiYjNDM7XHRzdHJ1Y3QgY2xrICpjbGs7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0YWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCBcJiMzNDt4LXBvd2VycyxhYzIwMFwmIzM0OywgMCk7XG4mIzQzO1x0aWYgKCFhYzIwMF9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfRFlOQU1JQylcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2VuYWJsZV9wYXRoKGRldiwgYWMyMDBfbm9kZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xuJiM0MztcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xuJiM0MztcdGlmICghY2xpZW50KSB7XG4mIzQzO1x0XHRyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXG5cJiMzNDspKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXHUwMDI2Y2xpZW50LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0ICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWRldmljZV90cnlsb2NrKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGRldmljZV9pc19ib3VuZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2KSlcbiYjNDM7XHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4mIzQzO1x0ZGV2aWNlX3VubG9jayhcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcmVnbWFwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXG4mIzQzO1x0XHRcdFx0ICBcdTAwMjZpbnRlcm5hbF9jYWxpYnJhdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9lcnJvcjtcbiYjNDM7XHRcdGNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXG4mIzQzO1x0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuJiM0MztcdFx0XHQgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spO1xuJiM0MztcdHByaXYtXHUwMDNlZXBoeV9jdGwgPVxuJiM0MztcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcbiYjNDM7XHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4mIzQzO1xuJiM0MztcdGNsayA9IGNsa19nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihjbGspKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKGNsayk7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4mIzQzO1x0Y2xrX3B1dChjbGspO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4mIzQzO1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3Vuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBjbGtfcmF0ZSk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4mIzQzO1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cHJpdi1cdTAwM2Vjb250cm9sO1xuJiM0MztcbiYjNDM7b3V0X2Vycm9yOlxuJiM0MztcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXG5cJiMzNDspO1xuJiM0MztvdXRfcHV0X2NsaWVudDpcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuJiM0MztcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzMwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMzMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcwYTkwYjdhODVhNzlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmNcbkBAIC0wLDAgJiM0MzsxLDQwNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwaHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4cG93ZXJzLWFjeDAwLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVFx0M1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaXHQyNTAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXHQyNzAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDBcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0tcdFx0XHRHRU5NQVNLKDcsIDYpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaXHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVx0XHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE9cdFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXHRcdEdFTk1BU0soMiwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1x0XHRcdDB4MDJcbiYjNDM7I2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVx0XHRCSVQoMTUpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19SRUdcdFx0XHQweDA1XG4mIzQzOyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTUsIDE0KVxuJiM0MzsjZGVmaW5lIEFDMzAwX01JSV9EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTEsIDEwKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yXHRcdFx0MlxuJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEVcdFx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEVcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHXHRcdFx0MHgwNlxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLXHRcdEdFTk1BU0soMTUsIDEyKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxuJiM0MztcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXG4mIzQzO1x0IEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwgXFxcbiYjNDM7XHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFxcXG4mIzQzO1x0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbiYjNDM7XHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4mIzQzO1x0IEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCBjbGsgKmNsaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogU2VyaWFsaXplcyBwb3dlciBzZXF1ZW5jaW5nIGFuZCBzdGF0ZS4gKi9cbiYjNDM7XHR1MTYgc3lzX2NvbnRyb2w7XG4mIzQzO1x0dTE2IGVwaHlfY29uZmlnO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1x0Ym9vbCBwYWNrYWdlX2tub3duO1xuJiM0MztcdGJvb2wgaW50ZXJuYWxfZGxkbztcbiYjNDM7XHRib29sIHBvd2VyZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50XG4mIzQzO2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbiYjNDM7XHRcdFx0XHR1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuJiM0MztcdFx0XHRcdCB1MTYgbWFzaywgdTE2IHNldClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuJiM0MztcdFx0dTE2IHZhbCA9IChyZXQgXHUwMDI2IH5tYXNrKSB8IChzZXQgXHUwMDI2IG1hc2spO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcbiYjNDM7XHRcdFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsXG4mIzQzO1x0XHRcdFx0XHQgICAgcmVnbnVtLCB2YWwpO1xuJiM0MztcdH1cbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlZXBoeV9jb25maWcgfFxuJiM0MztcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdCBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZFxuJiM0MztcdCAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGVcbiYjNDM7XHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiAhcHJpdi1cdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVx1MDAzZWludGVybmFsX2RsZG8gP1xuJiM0MztcdFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vwb3dlcmVkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRyZXQgPSBlcnI7XG4mIzQzO1x0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldCA9IGVycjtcbiYjNDM7XG4mIzQzO1x0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChwcml2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MzthYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0dTggcGFja2FnZV9zdGF0dXM7XG4mIzQzO1x0dTE2IHJlc2V0X3ZhbHVlO1xuJiM0MztcdGludCBzeXNfY29udHJvbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSAwO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cbiYjNDM7XHRyZXNldF92YWx1ZSA9IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogUmV0YWluIHRoZSB2ZW5kb3IgY2xvY2stZW5hYmxlIGRlZmF1bHRzLCBpbmNsdWRpbmcgdGhlIGVGdXNlIGNsb2NrLiAqL1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBwcml2LVx1MDAzZXN5c19jb250cm9sKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRzeXNfY29udHJvbCA9IGFjMzAwX2VwaHlfY3RsX3JlYWQocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHKTtcbiYjNDM7XHRpZiAoc3lzX2NvbnRyb2wgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHN5c19jb250cm9sO1xuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpO1xuJiM0MztcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XG4mIzQzO1x0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xuJiM0MztcdHByaXYtXHUwMDNlcGFja2FnZV9rbm93biA9IHRydWU7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHByaXYsIEFDMzAwX1NZU19CSUFTMV9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxuJiM0MztcdFx0XHRcdCAgIHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4mIzQzO1x0XHRcdFx0ICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzMwMF9TWVNfSU9fVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdGZzbGVlcCgxMDAwMCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0ZnNsZWVwKDEwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcbiYjNDM7ZXJyX3Bvd2VyX29mZjpcbiYjNDM7XHRhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X3JlZ3VsYXRvcl9kaXNhYmxlKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRyZWd1bGF0b3JfZGlzYWJsZShkYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRjbGtfcHV0KGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4mIzQzO1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjMTtcbiYjNDM7XHR1OCBiZ3NfZWZmdXNlX2NvZGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxcblwmIzM0OykpO1xuJiM0MztcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0dmNjMSA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCYjMzQ7dmNjMVwmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUih2Y2MxKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHZjYzEpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IFZDQzEgc3VwcGx5XFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUodmNjMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgVkNDMSBzdXBwbHlcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9yZWd1bGF0b3JfZGlzYWJsZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgdmNjMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbiYjNDM7XHRmc2xlZXAoMTAwMDApO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlY2xrKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlY2xrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBpbnB1dCBjbG9ja1xcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgcHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDt1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgY2xrX3JhdGUpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJpdi1cdTAwM2VzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUztcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuJiM0MztcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiAmIzQzOyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSBcdTAwMjZcbiYjNDM7XHRcdFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcbiYjNDM7XHRwcml2LVx1MDAzZWVwaHlfY29uZmlnID1cbiYjNDM7XHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0ssIGJnc19lZmZ1c2VfY29kZSk7XG4mIzQzO1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbiYjNDM7XHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cHJpdi1cdTAwM2Vjb250cm9sO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtbWFpbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjc3YzYxNjk4MjFjM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtbWFpbi5jXG5AQCAtMCwwICYjNDM7MSw1MzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyBcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L252bWVtLWNvbnN1bWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BoeWxpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hwb3dlcnMtYWN4MDAuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0lEXHRcdFx0XHQweDAwNDQxNDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0tcdEdFTk1BU0soMywgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXHRcdEJJVCg4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPV1x0QklUKDkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1x0XHRcdDB4MWZcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLXHRcdFx0R0VOTUFTSygxMiwgOClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzBcdFx0XHRcdDBcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzFcdFx0XHRcdDFcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzJcdFx0XHRcdDJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzZcdFx0XHRcdDZcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzhcdFx0XHRcdDhcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXHRCSVQoMTIpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTS1x0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1x0XHQyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFR1x0XHQweDEyXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFXHQweDQ4MjRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXHRcdDB4MTNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRVx0XHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUdcdDB4MTdcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXHRCSVQoMylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1x0XHQweDE4XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFRcdDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXHRcdDB4MTBcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFXHQweDU1MjNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXHRcdDB4ZjAwMFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUdcdDB4MTRcbiYjNDM7I2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGZcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUUgMHg3ODA5XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXHRcdFx0MHgxNVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLXHRcdEdFTk1BU0soNywgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXFxcbiYjNDM7XHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcbiYjNDM7XHQgRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTSywgKF8xMG0pKSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFIFxcXG4mIzQzO1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFxcXG4mIzQzO1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHXHRcdDB4MThcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVx0XHQweDAwYmNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1x0XHQweDFkXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyBCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUU1x0MHgwMDQ0XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXG4mIzQzO1x0KEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgfCBcXFxuJiM0MztcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXG4mIzQzOyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxuJiM0MzsgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZVxuJiM0MzsgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7XG4mIzQzO1x0Ym9vbCBpc19hYzMwMDtcbiYjNDM7XHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuJiM0MztcdGJvb2wgeG1paV9yeF9jbG9ja19pbnZlcnRlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLFxuJiM0MztcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWNvbnRyb2wtXHUwMDNlcG93ZXJfb24ocHJpdi1cdTAwM2Vjb250cm9sLFxuJiM0MztcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWNvbnRyb2wtXHUwMDNlcG93ZXJfb2ZmKHByaXYtXHUwMDNlY29udHJvbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbiYjNDM7XHRcdFx0XHRcdCAgICBwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHBoeWRldl93YXJuKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9mZiBjb250cm9sIGJsb2NrOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBFUlJfUFRSKHJldCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuJiM0MztcdHNpemVfdCBpO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dTggKmJ1ZjtcbiYjNDM7XHR1MTYgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xuJiM0MztcdGlmIChJU19FUlIoY2VsbCkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihjZWxsKTtcbiYjNDM7XG4mIzQzO1x0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4mIzQzO1x0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XG4mIzQzO1x0aWYgKElTX0VSUihidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcbiYjNDM7XHRpZiAoIWxlbiB8fCBsZW4gXHUwMDNlIHNpemVvZigqdmFsdWUpKSB7XG4mIzQzO1x0XHRrZnJlZShidWYpO1xuJiM0MztcdFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHZhbCB8PSAodTE2KWJ1ZltpXSBcdTAwM2NcdTAwM2MgKDggKiBpKTtcbiYjNDM7XHRrZnJlZShidWYpO1xuJiM0MztcdCp2YWx1ZSA9IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9pbml0X3BhY2thZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuJiM0MztcdGJvb2wgc2VsZWN0YWJsZTtcbiYjNDM7XHRib29sIGZpeGVkX2FjMzAwO1xuJiM0MztcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XG4mIzQzO1x0dTggY2FsaWJyYXRpb247XG4mIzQzO1x0dTMyIGJhc2VfYWRkcjtcbiYjNDM7XHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4mIzQzO1x0aWYgKCFwYWNrYWdlX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O1BIWSBpcyBub3QgaW4gYW4gRXRoZXJuZXQgUEhZIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2YmFzZV9hZGRyKTtcbiYjNDM7XHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcJiMzNDspO1xuJiM0MztcdGlmICghc2VsZWN0YWJsZSBcdTAwMjZcdTAwMjYgIWZpeGVkX2FjMzAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3Vuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1xuJiM0MztcdGhhc19jb25maWd1cmF0aW9uID1cbiYjNDM7XHRcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFwmIzM0O252bWVtLWNlbGwtbmFtZXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OykgXHUwMDNlPSAwO1xuJiM0MztcdGlmIChoYXNfY29uZmlndXJhdGlvbikge1xuJiM0MztcdFx0cmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsIFwmIzM0O2NvbmZpZ3VyYXRpb25cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNmNvbmZpZ3VyYXRpb24pO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzZWxlY3RhYmxlKSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID1cbiYjNDM7XHRcdFx0Y29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xuJiM0MztcdFx0aWYgKGhhc19jb25maWd1cmF0aW9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XG4mIzQzO1x0XHQgICAgcHJpdi1cdTAwM2Vpc19hYzMwMCkge1xuJiM0MztcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICBcJiMzNDtjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXG4mIzQzO1x0XHRcdFx0Y29uZmlndXJhdGlvbik7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XG4mIzQzO1x0cHJpdi1cdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cbiYjNDM7XHRcdG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgXCYjMzQ7eC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwKVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb250cm9sID1cbiYjNDM7XHRcdFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4mIzQzO1x0XHRcdGFjMjAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGhhc19jb25maWd1cmF0aW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuJiM0MztcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVx1MDAzZWNvbnRyb2wpO1xuJiM0MztcbiYjNDM7b3V0X3B1dF9ub2RlOlxuJiM0MztcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLFxuJiM0MztcdFx0XHRcdEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWRldi1cdTAwM2VvZl9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlLCBwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqL1xuJiM0MztcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4mIzQzO1x0XHRBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFIDpcbiYjNDM7XHRcdEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7XG4mIzQzO1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbiYjNDM7XHR1MTYgZ2xvYmFsX2NvbmZpZztcbiYjNDM7XHRpbnQgb2xkcGFnZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLFxuJiM0MztcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpXG4mIzQzO1x0XHRnbG9iYWxfY29uZmlnIHw9IEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLFxuJiM0MztcdFx0XHQgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbiYjNDM7XHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuJiM0MztcdFx0XHRBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7XG4mIzQzO1x0XHR0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvbGRwYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8xKTtcbiYjNDM7XHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuJiM0MztcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuJiM0MztcdFx0XHRcdCAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICBhZmVfZXFfcnhfZGV0ZWN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRywgdHhfbGV2ZWxfdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuJiM0MztcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcbiYjNDM7XG4mIzQzO291dF9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovXG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cbiYjNDM7XHRyZXR1cm4gYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJlc3VtZV9yZXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmVzdW1lX3JldClcbiYjNDM7XHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gcmVjb3ZlciBmcm9tIHN1c3BlbmQgZXJyb3I6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XG4mIzQzO1x0Ym9vbCBtYXRjaDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFnZW5waHlfbWF0Y2hfcGh5X2RldmljZShwaHlkZXYsIHBoeWRydikgfHwgIW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogUks2MzAgcmVwb3J0cyB0aGUgc2FtZSBQSFkgSUQsIHNvIGFsc28gbWF0Y2ggdGhlIHBhY2thZ2UgaWRlbnRpdHkuICovXG4mIzQzO1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcbiYjNDM7XHRpZiAoIXBhY2thZ2Vfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdG1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXCYjMzQ7KSB8fFxuJiM0MztcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCYjMzQ7KSB8fFxuJiM0MztcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCYjMzQ7KTtcbiYjNDM7XHRvZl9ub2RlX3B1dChwYWNrYWdlX25vZGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWF0Y2g7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhY3gwMF9lcGh5X2RyaXZlcltdID0ge1xuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRVBIWVwmIzM0OyxcbiYjNDM7XHRcdC5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLFxuJiM0MztcdFx0LnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSxcbiYjNDM7XHRcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcbiYjNDM7XHRcdC53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLFxuJiM0MztcdFx0LnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsXG4mIzQzO1x0XHQuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCxcbiYjNDM7XHRcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7XG4mIzQzO1x0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcbiYjNDM7XHR7IH1cbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XG4mIzQzO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0phbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAuaCBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGY2MDg0YzdhNzcyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC5oXG5AQCAtMCwwICYjNDM7MSwyOCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOyNpZm5kZWYgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9IXG4mIzQzOyNkZWZpbmUgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVRcdDE2XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGV2aWNlX25vZGU7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIHtcbiYjNDM7XHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IHBoeV9hZGRyKTtcbiYjNDM7XHRpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpO1xuJiM0MztcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdCAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbik7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbik7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZcyBhbmQgdGhlIEFDMjAwIE1GRC4gVGhlc2UgZHJpdmVycyBhcmUgaGVhdmlseSBkZXBlbmRlbnQgb24gRGV2aWNlIFRyZWUgKE9GKSBmb3IgcHJvYmluZyBhbmQgY29uZmlndXJhdGlvbiAoZS5nLiwgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncyBhbmQgYGRldi1cdTAwM2VvZl9ub2RlYCkuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdXNlZCBmb3IgZnV6emluZyBkbyBub3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIG5vZGVzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjJjMTMxMzlkMjhiNjdhNjMxMzliMDZlZDFkNzBhYzVmNWJkMjdkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMDY6MjI6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjdlOGQ5YmQ1NjYxYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbApAQCAtMCwwICYjNDM7MSw2OSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQomIzQzOyVZQU1MIDEuMgomIzQzOy0tLQomIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFgtUG93ZXJzIEFDMjAwIG1peGVkLXNpZ25hbCBJQwomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRoZSBBQzIwMCBpcyBhIG1peGVkLXNpZ25hbCBjb21wYW5pb24gSUMgY29udGFpbmluZyBhdWRpbywgdmlkZW8sIFJUQyBhbmQKJiM0MzsgIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucy4gSXRzIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBvdmVyIEkyQy4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIEFDMjAwIGlucHV0IGNsb2NrLiBXaGVuIHVzaW5nIHRoZSBFdGhlcm5ldCBQSFksIGl0cyBjb25maWd1cmVkIHJhdGUgbXVzdAomIzQzOyAgICAgIGJlIDI0IG9yIDI3IE1IeiwgbWF0Y2hpbmcgdGhlIHJhdGVzIGVuY29kZWQgYnkgdGhlIGRvY3VtZW50ZWQgRVBIWSBjbG9jawomIzQzOyAgICAgIHNlbGVjdG9yLgomIzQzOwomIzQzOyAgYWMtbGRvaW4tc3VwcGx5OgomIzQzOyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgYXVkaW8tY29kZWMgTERPIGlucHV0CiYjNDM7CiYjNDM7ICBlcGh5LXZjYy1zdXBwbHk6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZAomIzQzOwomIzQzOyAgcnRjLXZjYy1zdXBwbHk6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBSVEMKJiM0MzsKJiM0MzsgIHR2LXZjYy1zdXBwbHk6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBUViBlbmNvZGVyIERBQwomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIHJlZwomIzQzOyAgLSBjbG9ja3MKJiM0MzsgIC0gYWMtbGRvaW4tc3VwcGx5CiYjNDM7ICAtIGVwaHktdmNjLXN1cHBseQomIzQzOyAgLSBydGMtdmNjLXN1cHBseQomIzQzOyAgLSB0di12Y2Mtc3VwcGx5CiYjNDM7CiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgaTJjIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBtaXhlZC1zaWduYWxAMTAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3gtcG93ZXJzLGFjMjAwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzB4MTAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICBhYy1sZG9pbi1zdXBwbHkgPSAmbHQ7JmFtcDtyZWdfM3YzJmd0OzsKJiM0MzsgICAgICAgICAgICBlcGh5LXZjYy1zdXBwbHkgPSAmbHQ7JmFtcDtyZWdfM3YzJmd0OzsKJiM0MzsgICAgICAgICAgICBydGMtdmNjLXN1cHBseSA9ICZsdDsmYW1wO3JlZ18zdjMmZ3Q7OwomIzQzOyAgICAgICAgICAgIHR2LXZjYy1zdXBwbHkgPSAmbHQ7JmFtcDtyZWdfM3YzJmd0OzsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7Li4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yMmJkZGM3YTJmOTQxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApAQCAtMCwwICYjNDM7MSwyMDggQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlcwomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnQKJiM0MzsgIHRoZSBzYW1lIENsYXVzZSAyMiBQSFkgSUQgYW5kIHVzZSB0aGUgc2FtZSBsaW5rLXNpZGUgcmVnaXN0ZXIgbGF5b3V0LiBUaGUKJiM0MzsgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBwYXJ0IG9mIGFuIEkyQyBNRkQsCiYjNDM7ICB3aGlsZSBBQzMwMCBjb250cm9sIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYKJiM0MzsgIHBsdXMgdGhlIGxpbmsgUEhZIGFkZHJlc3MuCiYjNDM7CiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLgomIzQzOyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGEKJiM0MzsgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLgomIzQzOwomIzQzOyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzCiYjNDM7ICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kCiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvCiYjNDM7ICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC4KJiM0MzsKJiM0MztzZWxlY3Q6CiYjNDM7ICBwcm9wZXJ0aWVzOgomIzQzOyAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgIGVudW06CiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7ICByZXF1aXJlZDoKJiM0MzsgICAgLSBjb21wYXRpYmxlCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heGltdW06IDMxCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6LiBUaGUgQUMyMDAgaW5wdXQgY2xvY2sKJiM0MzsgICAgICBiZWxvbmdzIHRvIHRoZSByZWZlcmVuY2VkIEFDMjAwIE1GRCBpbnN0ZWFkLgomIzQzOwomIzQzOyAgdmNjMS1zdXBwbHk6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIDMuMyBWIHN1cHBseSBmb3IgdGhlIEFDMzAwIEkvTywgYmFuZGdhcCwgRXRoZXJuZXQgUEhZIGFuYWxvZyBmcm9udCBlbmQsCiYjNDM7ICAgICAgYW5kIGludGVybmFsIGRpZ2l0YWwgTERPCiYjNDM7CiYjNDM7ICBudm1lbS1jZWxsczoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2cKJiM0MzsgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMAomIzQzOyAgICAgIHdoZW4gc2V0IGFuZCBBQzIwMCB3aGVuIGNsZWFyLCBhbmQgYml0IDkgcmVxdWVzdHMgdGhlIEFDMzAwCiYjNDM7ICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHkKJiM0MzsgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZQomIzQzOyAgICAgIGNvcHkgaW5zdGVhZC4KJiM0MzsKJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6CiYjNDM7ICAgIGNvbnN0OiBjb25maWd1cmF0aW9uCiYjNDM7CiYjNDM7ICB4LXBvd2VycyxhYzIwMDoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZQomIzQzOyAgICBkZXNjcmlwdGlvbjogUmVmZXJlbmNlIHRvIHRoZSBBQzIwMCBNRkQgY29udGFpbmluZyB0aGlzIEV0aGVybmV0IFBIWQomIzQzOwomIzQzOyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDoKJiM0MzsgICAgdHlwZTogYm9vbGVhbgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lCiYjNDM7ICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi4KJiM0MzsKJiM0MztwYXR0ZXJuUHJvcGVydGllczoKJiM0MzsgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6CiYjNDM7ICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sIwomIzQzOyAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwCiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gY29tcGF0aWJsZQomIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsKJiM0MztkZXBlbmRlbnRSZXF1aXJlZDoKJiM0MzsgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXQomIzQzOyAgbnZtZW0tY2VsbC1uYW1lczogWyBudm1lbS1jZWxscyBdCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNsb2NrczogZmFsc2UKJiM0MzsgICAgICAgIHZjYzEtc3VwcGx5OiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMAomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBjbG9ja3MKJiM0MzsgICAgICAgIC0gdmNjMS1zdXBwbHkKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHMKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lcwomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gY2xvY2tzCiYjNDM7ICAgICAgICAtIHZjYzEtc3VwcGx5CiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGxzCiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXMKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDAKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICB2Y2MxLXN1cHBseSA9ICZsdDsmYW1wO3JlZ18zdjMmZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gJmx0OyZhbXA7ZXBoeV9jb25maWd1cmF0aW9uJmd0OzsKJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gJiMzNDtjb25maWd1cmF0aW9uJiMzNDs7CiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSAmbHQ7JmFtcDthYzIwMCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAgewomIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDtldGhlcm5ldC1waHktaWQwMDQ0LjE0MDAmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOyAgLSB8CiYjNDM7ICAgIG1kaW8gewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZSYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICBjbG9ja3MgPSAmbHQ7JmFtcDtwd20gNSZndDs7CiYjNDM7ICAgICAgICAgICAgdmNjMS1zdXBwbHkgPSAmbHQ7JmFtcDtyZWdfM3YzJmd0OzsKJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxscyA9ICZsdDsmYW1wO2VwaHlfY29uZmlndXJhdGlvbiZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9ICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHsKJiM0MzsgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKJiM0MzsKJiM0MzsgIC0gfAomIzQzOyAgICBtZGlvIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAxIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UmIzM0OzsKJiM0MzsgICAgICAgICAgICByZWcgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSAmbHQ7JmFtcDthYzIwMCZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSAmbHQ7JmFtcDtlcGh5X2NvbmZpZ3VyYXRpb24mZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMSB7CiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7Li4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCA3NjNjZTZhMzQ3ODJiLi40OTkyNjljODU4MTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTIwNSw2ICYjNDM7MjA1LDE3IEBAIGNvbmZpZyBNRkRfQUMxMDAKIAkgIFRoaXMgZHJpdmVyIGluY2x1ZGUgb25seSB0aGUgY29yZSBBUElzLiBZb3UgaGF2ZSB0byBzZWxlY3QgaW5kaXZpZHVhbAogCSAgY29tcG9uZW50cyBsaWtlIGNvZGVjcyBvciBSVEMgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuCiAKJiM0Mztjb25maWcgTUZEX0FDMjAwCiYjNDM7CXRyaXN0YXRlICYjMzQ7WC1Qb3dlcnMgQUMyMDAmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEkyQwomIzQzOwlkZXBlbmRzIG9uIE9GCiYjNDM7CXNlbGVjdCBSRUdNQVBfSTJDCiYjNDM7CWhlbHAKJiM0MzsJICBTdXBwb3J0IGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIGNvbXBhbmlvbiBJQy4gVGhlIEFDMjAwCiYjNDM7CSAgY29udGFpbnMgYXVkaW8sIHZpZGVvLCBSVEMgYW5kIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucyBhbmQgaXMKJiM0MzsJICBjby1wYWNrYWdlZCB3aXRoIHNvbWUgQWxsd2lubmVyIEg2IGFuZCBINjE2IFNvQ3MuIFRoaXMgZHJpdmVyIHByb3ZpZGVzCiYjNDM7CSAgdGhlIHNoYXJlZCByZWdpc3RlciBhY2Nlc3MgdXNlZCBieSB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBkcml2ZXJzLgomIzQzOwogY29uZmlnIE1GRF9BWFAyMFgKIAl0cmlzdGF0ZQogCXNlbGVjdCBNRkRfQ09SRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvTWFrZWZpbGUgYi9kcml2ZXJzL21mZC9NYWtlZmlsZQppbmRleCBkZDRiYjdlNzdjMzM2Li44OTBlNzZhOWFkMDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9NYWtlZmlsZQpAQCAtMTUwLDYgJiM0MzsxNTAsNyBAQCBvYmotJChDT05GSUdfTUZEX0RBOTA1Ml9TUEkpCSYjNDM7PSBkYTkwNTItc3BpLm8KIG9iai0kKENPTkZJR19NRkRfREE5MDUyX0kyQykJJiM0Mzs9IGRhOTA1Mi1pMmMubwogCiBvYmotJChDT05GSUdfTUZEX0FDMTAwKQkJJiM0Mzs9IGFjMTAwLm8KJiM0MztvYmotJChDT05GSUdfTUZEX0FDMjAwKQkJJiM0Mzs9IGFjMjAwLm8KIG9iai0kKENPTkZJR19NRkRfQVhQMjBYKQkmIzQzOz0gYXhwMjB4Lm8KIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX0kyQykJJiM0Mzs9IGF4cDIweC1pMmMubwogb2JqLSQoQ09ORklHX01GRF9BWFAyMFhfUlNCKQkmIzQzOz0gYXhwMjB4LXJzYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYzIwMC5jIGIvZHJpdmVycy9tZmQvYWMyMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43OThiYjQxNzNiMTRiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZmQvYWMyMDAuYwpAQCAtMCwwICYjNDM7MSwxNzYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBNRkQgY29yZSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycyBBQzIwMAomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjICZsdDtqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20mZ3Q7CiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqCiYjNDM7ICogQmFzZWQgb24gdGhlIEFDMTAwIGRyaXZlcjoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2hlbi1ZdSBUc2FpCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pMmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1JFRwkJCTB4MDAwMAomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLCQlHRU5NQVNLKDE1LCAxNCkKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTSwkJR0VOTUFTSygxMSwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX1JFRwkJCTB4MDAwMgomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVAlCSVQoMCkKJiM0MzsKJiM0MzsvKiBJbnRlcmZhY2UgcmVnaXN0ZXIgYWNjZXNzaWJsZSBmcm9tIGV2ZXJ5IHJlZ2lzdGVyIHBhZ2UuICovCiYjNDM7I2RlZmluZSBBQzIwMF9UV0lfUkVHX0FERFJfSAkweDAwZmUKJiM0MzsjZGVmaW5lIEFDMjAwX01BWF9SRUcJCTB4YTFmMgomIzQzOwomIzQzO3N0cnVjdCBhYzIwMCB7CiYjNDM7CXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYWMyMDBfc3VwcGxpZXNbXSA9IHsKJiM0MzsJJiMzNDthYy1sZG9pbiYjMzQ7LAomIzQzOwkmIzM0O2VwaHktdmNjJiMzNDssCiYjNDM7CSYjMzQ7cnRjLXZjYyYjMzQ7LAomIzQzOwkmIzM0O3R2LXZjYyYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2VfY2ZnIGFjMjAwX3JhbmdlX2NmZ1tdID0gewomIzQzOwl7CiYjNDM7CQkucmFuZ2VfbWF4ID0gQUMyMDBfTUFYX1JFRywKJiM0MzsJCS5zZWxlY3Rvcl9yZWcgPSBBQzIwMF9UV0lfUkVHX0FERFJfSCwKJiM0MzsJCS5zZWxlY3Rvcl9tYXNrID0gMHhmZiwKJiM0MzsJCS53aW5kb3dfbGVuID0gMjU2LAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBFYWNoIEFDMjAwIHN1Yi1ibG9jayBjYW4gcmVzZXQgaW5kZXBlbmRlbnRseSwgaW52YWxpZGF0aW5nIGl0cyByZWdpc3RlcgomIzQzOyAqIGNvbnRlbnRzIHdpdGhvdXQgcmVnbWFwJiMzOTtzIGtub3dsZWRnZS4gQ2FjaGUgb25seSB0aGUgY29tbW9uIHBhZ2Ugc2VsZWN0b3I7CiYjNDM7ICogdGhpcyBhdm9pZHMgYSBzZWxlY3RvciByZWFkLW1vZGlmeS13cml0ZSBmb3IgZXZlcnkgYWNjZXNzIG9uIHRoZSBzYW1lIHBhZ2UKJiM0MzsgKiB3aXRob3V0IGV2ZXIgcmV0dXJuaW5nIHN0YWxlIGZ1bmN0aW9uYWwtcmVnaXN0ZXIgdmFsdWVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGFjMjAwX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVnICE9IEFDMjAwX1RXSV9SRUdfQUREUl9IOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWMyMDBfcmVnbWFwX2NvbmZpZyA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O2FjMjAwJiMzNDssCiYjNDM7CS5yZWdfYml0cyA9IDgsCiYjNDM7CS5yZWdfc3RyaWRlID0gMiwKJiM0MzsJLnZhbF9iaXRzID0gMTYsCiYjNDM7CS5yYW5nZXMgPSBhYzIwMF9yYW5nZV9jZmcsCiYjNDM7CS5udW1fcmFuZ2VzID0gQVJSQVlfU0laRShhYzIwMF9yYW5nZV9jZmcpLAomIzQzOwkubWF4X3JlZ2lzdGVyID0gQUMyMDBfTUFYX1JFRywKJiM0MzsJLnZvbGF0aWxlX3JlZyA9IGFjMjAwX3ZvbGF0aWxlX3JlZywKJiM0MzsJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9NQVBMRSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjMjAwX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzIwMCAqZGRhdGEgPSBkYXRhOwomIzQzOwomIzQzOwlyZWdtYXBfd3JpdGUoZGRhdGEtJmd0O3JlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtjbGllbnQtJmd0O2RldjsKJiM0MzsJdW5zaWduZWQgaW50IHZlcnNpb247CiYjNDM7CXN0cnVjdCBhYzIwMCAqZGRhdGE7CiYjNDM7CXN0cnVjdCBjbGsgKmNsazsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRkYXRhKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZGRhdGEpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXRfZW5hYmxlKGRldiwgQVJSQVlfU0laRShhYzIwMF9zdXBwbGllcyksCiYjNDM7CQkJCQkgICAgIGFjMjAwX3N1cHBsaWVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXNcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihjbGspKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGNsayksCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGlucHV0IGNsb2NrXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIGNsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWRkYXRhLSZndDtyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZhbXA7YWMyMDBfcmVnbWFwX2NvbmZpZyk7CiYjNDM7CWlmIChJU19FUlIoZGRhdGEtJmd0O3JlZ21hcCkpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZGRhdGEtJmd0O3JlZ21hcCksCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGRhdGEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBObyBtaW5pbXVtIGRlbGF5IGlzIGRvY3VtZW50ZWQuIE1hdGNoIHRoZSB2ZW5kb3IgZHJpdmVyJiMzOTtzIDQwIG1zIGRlbGF5CiYjNDM7CSAqIGJlZm9yZSBpdHMgZmlyc3QgQUMyMDAgcmVnaXN0ZXIgYWNjZXNzIGFmdGVyIGVuYWJsaW5nIHRoZSBpbnB1dCBjbG9jay4KJiM0MzsJICovCiYjNDM7CW1zbGVlcCg0MCk7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ21hcF9yZWFkKGRkYXRhLSZndDtyZWdtYXAsIEFDMjAwX1NZU19WRVJTSU9OX1JFRywgJmFtcDt2ZXJzaW9uKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHJlYWQgY2hpcCB2ZXJzaW9uXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWRldl9pbmZvKGRldiwgJiMzNDtBQzIwMCByZXZpc2lvbiAlI2x4IGluIHBhY2thZ2UgJWx1XG4mIzM0OywKJiM0MzsJCSBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fQ0hJUF9NQVNLLCB2ZXJzaW9uKSwKJiM0MzsJCSBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLLCB2ZXJzaW9uKSk7CiYjNDM7CiYjNDM7CS8qIFJlc2V0IHRoZSBjaGlwIGFmdGVyIGRlcGVuZGVudCBmdW5jdGlvbiBkcml2ZXJzIGhhdmUgdW5ib3VuZC4gKi8KJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMyMDBfZGlzYWJsZSwgZGRhdGEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnbWFwX3dyaXRlKGRkYXRhLSZndDtyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWdtYXBfd3JpdGUoZGRhdGEtJmd0O3JlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDMjAwX1NZU19DT05UUk9MX0NISVBfUkVTRVRfREVBU1NFUlQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjMjAwX3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiYjNDM7ewomIzQzOwlhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0OyB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjMjAwX29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWMyMDBfaTJjX2lkc1tdID0gewomIzQzOwl7IC5uYW1lID0gJiMzNDthYzIwMCYjMzQ7IH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFjMjAwX2kyY19pZHMpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhYzIwMF9kcml2ZXIgPSB7CiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZSA9ICYjMzQ7YWMyMDAmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLAomIzQzOwl9LAomIzQzOwkucHJvYmUgPSBhYzIwMF9wcm9iZSwKJiM0MzsJLnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sCiYjNDM7CS5pZF90YWJsZSA9IGFjMjAwX2kyY19pZHMsCiYjNDM7fTsKJiM0Mzttb2R1bGVfaTJjX2RyaXZlcihhYzIwMF9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7WC1Qb3dlcnMgQUMyMDAgTUZEIGNvcmUgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwppbmRleCBhMjlkM2ZlZDhhMDUzLi4yN2I4ZmZlNGI1MzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtNDc1LDYgJiM0Mzs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZCiAJaGVscAogCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSB2c2M4MjQ0CiAKJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFkKJiM0MzsJdHJpc3RhdGUgJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkmIzM0OwomIzQzOwlkZXBlbmRzIG9uIENPTU1PTl9DTEsgJmFtcDsmYW1wOyBOVk1FTSAmYW1wOyZhbXA7IE9GX01ESU8gJmFtcDsmYW1wOyBSRUdVTEFUT1IKJiM0MzsJZGVwZW5kcyBvbiBJMkMgfHwgIUkyQwomIzQzOwlzZWxlY3QgUEhZX1BBQ0tBR0UKJiM0MzsJaGVscAomIzQzOwkgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDAKJiM0MzsJICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWQomIzQzOwkgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbAomIzQzOwkgIHJlZ2lzdGVycy4KJiM0MzsKIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSQogCXRyaXN0YXRlICYjMzQ7WGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlciYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCmluZGV4IGUyM2RmNWU4MzZlOWUuLmI4YTUyZDgxZWFjNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKQEAgLTEwMCw0ICYjNDM7MTAwLDcgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKQkJJiM0Mzs9IHNtc2Mubwogb2JqLSQoQ09ORklHX1NURTEwWFApCQkmIzQzOz0gc3RlMTBYcC5vCiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpCSYjNDM7PSB0ZXJhbmV0aWNzLm8KIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSkJJiM0Mzs9IHZpdGVzc2UubwomIzQzO3hwb3dlcnMtYWN4MDAteQkJCTo9IHhwb3dlcnMtYWN4MDAtbWFpbi5vIHhwb3dlcnMtYWN4MDAtYWMyMDAubyBcCiYjNDM7CQkJCSAgIHhwb3dlcnMtYWN4MDAtYWMzMDAubwomIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkJJiM0Mzs9IHhwb3dlcnMtYWN4MDAubwogb2JqLSQoQ09ORklHX1hJTElOWF9HTUlJMlJHTUlJKSAmIzQzOz0geGlsaW54X2dtaWkycmdtaWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMyMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYmM2OGY2NWIxN2Y2ZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMjAwLmMKQEAgLTAsMCAmIzQzOzEsMzg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZAomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSAmbHQ7YW5kcmUucHJ6eXdhcmFAYXJtLmNvbSZndDspCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaTJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3hwb3dlcnMtYWN4MDAuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUCTMKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaCTI0MDAwMDAwCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWgkyNzAwMDAwMAomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcJCQkweDAwMTQKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFCQkJQklUKDEpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRwkJCTB4MDAxNgomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7LyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqLwomIzQzOyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUcJCQkweDgwMDQKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFRwkJCTB4NjAwMAomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWgkJQklUKDIpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0sJCQlHRU5NQVNLKDgsIDQpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0sJCUdFTk1BU0soMTUsIDEyKQomIzQzOwomIzQzO3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDsKJiM0MzsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXN0cnVjdCBtdXRleCBsb2NrOyAvKiBTZXJpYWxpemVzIHBvd2VyIHNlcXVlbmNpbmcgYW5kIHN0YXRlLiAqLwomIzQzOwl1MTYgZXBoeV9jdGw7CiYjNDM7CXVuc2lnbmVkIGludCBwaHlfYWRkcjsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsJYm9vbCBwb3dlcmVkOwomIzQzO307CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpCiYjNDM7c3RhdGljIGJvb2wgYWMyMDBfZXBoeV9ub2RlX25lZWRzX3Byb2JlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKnN0YXR1czsKJiM0MzsKJiM0MzsJcmV0dXJuICFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhub2RlLCAmIzM0O3N0YXR1cyYjMzQ7LCAmYW1wO3N0YXR1cykgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIXN0cmNtcChzdGF0dXMsICYjMzQ7ZmFpbC1uZWVkcy1wcm9iZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2FkZF9lbmFibGVfcGF0aChzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBvZl9jaGFuZ2VzZXQgKm9jcywKJiM0MzsJCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAomIzQzOwkJCQkgICAgICBib29sICpjaGFuZ2VkKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhcmVudCA9IG9mX2dldF9wYXJlbnQobm9kZSk7CiYjNDM7CWlmIChwYXJlbnQpIHsKJiM0MzsJCXJldCA9IGFjMjAwX2VwaHlfYWRkX2VuYWJsZV9wYXRoKGRldiwgb2NzLCBwYXJlbnQsIGNoYW5nZWQpOwomIzQzOwkJb2Zfbm9kZV9wdXQocGFyZW50KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWFjMjAwX2VwaHlfbm9kZV9uZWVkc19wcm9iZShub2RlKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwKJiM0MzsJCQkJICAgICAmIzM0OyVwT0YgaXMgdW5hdmFpbGFibGUgd2l0aG91dCBmYWlsLW5lZWRzLXByb2JlXG4mIzM0OywKJiM0MzsJCQkJICAgICBub2RlKTsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfY2hhbmdlc2V0X3VwZGF0ZV9wcm9wX3N0cmluZyhvY3MsIG5vZGUsICYjMzQ7c3RhdHVzJiMzNDssICYjMzQ7b2theSYjMzQ7KTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQkqY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9lbmFibGVfcGF0aChzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IG9mX2NoYW5nZXNldCAqb2NzOwomIzQzOwlib29sIGNoYW5nZWQgPSBmYWxzZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb2NzID0ga3phbGxvY19vYmooKm9jcyk7CiYjNDM7CWlmICghb2NzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW9mX2NoYW5nZXNldF9pbml0KG9jcyk7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfYWRkX2VuYWJsZV9wYXRoKGRldiwgb2NzLCBub2RlLCAmYW1wO2NoYW5nZWQpOwomIzQzOwlpZiAocmV0IHx8ICFjaGFuZ2VkKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfY2hhbmdlc2V0X2FwcGx5KG9jcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBhcHBsaWVkIHN0YXR1cyBwcm9wZXJ0aWVzIGFsaXZlIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIERULiAqLwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfZGVzdHJveToKJiM0MzsJb2ZfY2hhbmdlc2V0X2Rlc3Ryb3kob2NzKTsKJiM0MzsJa2ZyZWUob2NzKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7c3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2VwaHlfY3RsIHwKJiM0MzsJCShwcml2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJIEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8CiYjNDM7CQlGSUVMRF9QUkVQKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSywgcHJpdi0mZ3Q7cGh5X2FkZHIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHJlZywgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtJmd0O3JlZ21hcCwgcmVnLCB2YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkZXZfZXJyKHByaXYtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXIgJSN4OiAlcGVcbiYjMzQ7LAomIzQzOwkJCXJlZywgRVJSX1BUUihyZXQpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsCiYjNDM7CQkJCSAgIGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCSAgIEFDMjAwX0VQSFlfU0hVVERPV04pOwomIzQzOwllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJCSBBQzIwMF9FUEhZX1JNSUlfU0VMLAomIzQzOwkJCQkJIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkJCQkgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXByaXYtJmd0O2ludGVyZmFjZSA9IGludGVyZmFjZTsKJiM0MzsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CXUxNiBlcGh5X2N0bDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeV9hZGRyICZndDsgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCAmYW1wOyZhbXA7IHByaXYtJmd0O3BoeV9hZGRyID09IHBoeV9hZGRyKSB7CiYjNDM7CQlyZXQgPSAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkKSB7CiYjNDM7CQlyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7cGh5X2FkZHIgPSBwaHlfYWRkcjsKJiM0MzsKJiM0MzsJZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7CiYjNDM7CiYjNDM7CS8qIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uICovCiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLAomIzQzOwkJCQkgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsCiYjNDM7CQkJCSAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9kaXNhYmxlOwomIzQzOwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gdHJ1ZTsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzO2Vycl9kaXNhYmxlOgomIzQzOwkvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi8KJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CWFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQocHJpdik7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlOwomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXU4IGJwc19lZmZ1c2VfY29kZTsKJiM0MzsJc3RydWN0IGNsayAqY2xrOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlwcml2LSZndDtkZXYgPSBkZXY7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwcml2LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJYWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCAmIzM0O3gtcG93ZXJzLGFjMjAwJiMzNDssIDApOwomIzQzOwlpZiAoIWFjMjAwX25vZGUpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDttaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxuJiMzNDspKTsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfRFlOQU1JQykKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9lbmFibGVfcGF0aChkZXYsIGFjMjAwX25vZGUpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CX0KJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJY2xpZW50ID0gb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGUoYWMyMDBfbm9kZSk7CiYjNDM7CW9mX25vZGVfcHV0KGFjMjAwX25vZGUpOwomIzQzOwlpZiAoIWNsaWVudCkgewomIzQzOwkJcmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcbiYjMzQ7KSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCAmYW1wO2NsaWVudC0mZ3Q7ZGV2LAomIzQzOwkJCSAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O2ZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X2NsaWVudDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldmljZV90cnlsb2NrKCZhbXA7Y2xpZW50LSZndDtkZXYpKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUiwKJiM0MzsJCQkJICAgICYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X2NsaWVudDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZGV2aWNlX2lzX2JvdW5kKCZhbXA7Y2xpZW50LSZndDtkZXYpKQomIzQzOwkJcHJpdi0mZ3Q7cmVnbWFwID0gZGV2X2dldF9yZWdtYXAoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7CiYjNDM7CWRldmljZV91bmxvY2soJmFtcDtjbGllbnQtJmd0O2Rldik7CiYjNDM7CWlmICghcHJpdi0mZ3Q7cmVnbWFwKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUiwKJiM0MzsJCQkJICAgICYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFoYXNfY2FsaWJyYXRpb24pIHsKJiM0MzsJCXJldCA9IHJlZ21hcF9yZWFkKHByaXYtJmd0O3JlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsCiYjNDM7CQkJCSAgJmFtcDtpbnRlcm5hbF9jYWxpYnJhdGlvbik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X2Vycm9yOwomIzQzOwkJY2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovCiYjNDM7CWJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiAmIzQzOyBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUKSAmYW1wOwomIzQzOwkJCSAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7CiYjNDM7CXByaXYtJmd0O2VwaHlfY3RsID0KJiM0MzsJCUZJRUxEX1BSRVAoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0ssIGJwc19lZmZ1c2VfY29kZSk7CiYjNDM7CS8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi8KJiM0MzsKJiM0MzsJY2xrID0gY2xrX2dldCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihjbGspKSB7CiYjNDM7CQlyZXQgPSBQVFJfRVJSKGNsayk7CiYjNDM7CQlnb3RvIG91dF9lcnJvcjsKJiM0MzsJfQomIzQzOwomIzQzOwljbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOwomIzQzOwljbGtfcHV0KGNsayk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoY2xrX3JhdGUpIHsKJiM0MzsJY2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWjoKJiM0MzsJCXByaXYtJmd0O2VwaHlfY3RsIHw9IEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjoKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O3Vuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XG4mIzM0OywKJiM0MzsJCQkJICAgIGNsa19yYXRlKTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9jbGllbnQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vbiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29mZiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTsKJiM0MzsJLyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqLwomIzQzOwlwcml2LSZndDtpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJOwomIzQzOwlwdXRfZGV2aWNlKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDtwcml2LSZndDtjb250cm9sOwomIzQzOwomIzQzO291dF9lcnJvcjoKJiM0MzsJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXG4mIzM0Oyk7CiYjNDM7b3V0X3B1dF9jbGllbnQ6CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDtjbGllbnQtJmd0O2Rldik7CiYjNDM7CXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMzMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNzBhOTBiN2E4NWE3OQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmMKQEAgLTAsMCAmIzQzOzEsNDA0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZAomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7cGh5bGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eHBvd2Vycy1hY3gwMC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQJMwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFoJMjQwMDAwMDAKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaCTI1MDAwMDAwCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWgkyNzAwMDAwMAomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfUkVHCQkJMHgwMAomIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSwkJR0VOTUFTSygxMSwgOCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLCQkJR0VOTUFTSyg3LCA2KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWgkJRklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFoJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaCQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKQomIzQzOyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRQkJCUJJVCg1KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRQkJQklUKDQpCiYjNDM7I2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFCQlCSVQoMikKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQJCUJJVCgxKQomIzQzOyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVAkJQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPCQlCSVQoMykKJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSwkJR0VOTUFTSygyLCAwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFRwkJCTB4MDIKJiM0MzsjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFCQlCSVQoMTUpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHCQkJMHgwNQomIzQzOyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTSwkJCUdFTk1BU0soMTUsIDE0KQomIzQzOyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLCQkJR0VOTUFTSygxMSwgMTApCiYjNDM7I2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMgkJCTIKJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUJCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRQkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHCQkJMHgwNgomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0sJCUdFTk1BU0soMTUsIDEyKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9STUlJX1NFTAkJCUJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV04JCQlCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTIFwKJiM0MzsJKEFDMzAwX0VGVVNFX0NMS19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFIHwgXAomIzQzOwkgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcCiYjNDM7CSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFwKJiM0MzsJKEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXAomIzQzOwkgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFwKJiM0MzsJIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpCiYjNDM7CiYjNDM7c3RydWN0IGFjMzAwX2VwaHlfY3RsIHsKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sOwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CXN0cnVjdCBtdXRleCBsb2NrOyAvKiBTZXJpYWxpemVzIHBvd2VyIHNlcXVlbmNpbmcgYW5kIHN0YXRlLiAqLwomIzQzOwl1MTYgc3lzX2NvbnRyb2w7CiYjNDM7CXUxNiBlcGh5X2NvbmZpZzsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsJYm9vbCBwYWNrYWdlX2tub3duOwomIzQzOwlib29sIGludGVybmFsX2RsZG87CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpOwomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJIHUxNiBtYXNrLCB1MTYgc2V0KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQl1MTYgdmFsID0gKHJldCAmYW1wOyB+bWFzaykgfCAoc2V0ICZhbXA7IG1hc2spOwomIzQzOwomIzQzOwkJcmV0ID0gdmFsID09IHJldCA/IDAgOgomIzQzOwkJCV9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwKJiM0MzsJCQkJCSAgICByZWdudW0sIHZhbCk7CiYjNDM7CX0KJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jb25maWcgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkCiYjNDM7CSAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGUKJiM0MzsJICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhcHJpdi0mZ3Q7cGFja2FnZV9rbm93biB8fCAhcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA/CiYjNDM7CQlBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCSAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCSAgQUMzMDBfRVBIWV9TSFVURE9XTik7CiYjNDM7CWVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXJldCA9IGVycjsKJiM0MzsJZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwomIzQzOwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQocHJpdik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7YWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwsCiYjNDM7CQkJCQkgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID8KJiM0MzsJCQkJCSAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gaW50ZXJmYWNlOwomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBwaHlfYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJdTggcGFja2FnZV9zdGF0dXM7CiYjNDM7CXUxNiByZXNldF92YWx1ZTsKJiM0MzsJaW50IHN5c19jb250cm9sOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IDA7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CXByaXYtJmd0O3Bvd2VyZWQgPSB0cnVlOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBleHRlcm5hbC1zdXBwbHkgY29uZmlndXJhdGlvbiBhY3Jvc3MgY2hpcCByZXNldHMuICovCiYjNDM7CXJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBUaGUgbWFudWFsIHJlcXVpcmVzIGJvdGggcmVzZXRzIHRvIGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgY2xvY2tzLiAqLwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCSAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfAomIzQzOwkJCQkgIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkJICAgcHJpdi0mZ3Q7c3lzX2NvbnRyb2wpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlzeXNfY29udHJvbCA9IGFjMzAwX2VwaHlfY3RsX3JlYWQocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHKTsKJiM0MzsJaWYgKHN5c19jb250cm9sICZsdDsgMCkgewomIzQzOwkJcmV0ID0gc3lzX2NvbnRyb2w7CiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpOwomIzQzOwlpZiAoKH5wYWNrYWdlX3N0YXR1cyAmYW1wOyBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9CiYjNDM7CSAgICBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzICZhbXA7IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87CiYjNDM7CXByaXYtJmd0O3BhY2thZ2Vfa25vd24gPSB0cnVlOwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRywKJiM0MzsJCQkJICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLAomIzQzOwkJCQkgICBwcml2LSZndDtpbnRlcm5hbF9kbGRvID8KJiM0MzsJCQkJICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLAomIzQzOwkJCQkgICBBQzMwMF9TWVNfSU9fVkFMVUUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlmc2xlZXAoMTAwMDApOwomIzQzOwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCSAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCSAgQUMzMDBfRVBIWV9TSFVURE9XTik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CWZzbGVlcCgxMDAwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzO2Vycl9wb3dlcl9vZmY6CiYjNDM7CWFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQocHJpdik7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjMzAwX2VwaHlfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXJlZ3VsYXRvcl9kaXNhYmxlKGRhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWNsa19wdXQoZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXN0cnVjdCByZWd1bGF0b3IgKnZjYzE7CiYjNDM7CXU4IGJnc19lZmZ1c2VfY29kZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5hZGRyICZndDsgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxuJiMzNDspKTsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXZjYzEgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsICYjMzQ7dmNjMSYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUih2Y2MxKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHZjYzEpLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgVkNDMSBzdXBwbHlcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ3VsYXRvcl9lbmFibGUodmNjMSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBlbmFibGUgVkNDMSBzdXBwbHlcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfcmVndWxhdG9yX2Rpc2FibGUsCiYjNDM7CQkJCSAgICAgICB2Y2MxKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi8KJiM0MzsJZnNsZWVwKDEwMDAwKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7Y2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O2NsaykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LSZndDtjbGspLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CWNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtJmd0O2Nsayk7CiYjNDM7CXN3aXRjaCAoY2xrX3JhdGUpIHsKJiM0MzsJY2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjoKJiM0MzsJCXByaXYtJmd0O3N5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6CiYjNDM7CQlwcml2LSZndDtzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O3Vuc3VwcG9ydGVkIGlucHV0IGNsb2NrIHJhdGUgJWx1IEh6XG4mIzM0OywKJiM0MzsJCQkJCSAgICAgY2xrX3JhdGUpKTsKJiM0MzsJfQomIzQzOwlwcml2LSZndDtzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUzsKJiM0MzsKJiM0MzsJLyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqLwomIzQzOwliZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVCkgJmFtcDsKJiM0MzsJCQkgICBGSUVMRF9NQVgoQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0spOwomIzQzOwlwcml2LSZndDtlcGh5X2NvbmZpZyA9CiYjNDM7CQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpOwomIzQzOwkvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovCiYjNDM7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb24gPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vZmYgPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmY7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7CiYjNDM7CS8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi8KJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cHJpdi0mZ3Q7Y29udHJvbDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1tYWluLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjc3YzYxNjk4MjFjMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uYwpAQCAtMCwwICYjNDM7MSw1MzYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgJmx0O2plcm5lai5za3JhYmVjQGdtYWlsLmNvbSZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbnZtZW0tY29uc3VtZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3BoeWxpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hwb3dlcnMtYWN4MDAuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0lECQkJCTB4MDA0NDE0MDAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0sJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMAkJQklUKDgpCiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cJQklUKDkpCiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcJCQkweDFmCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLCQkJR0VOTUFTSygxMiwgOCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMAkJCQkwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzEJCQkJMQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV8yCQkJCTIKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfNgkJCQk2CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzgJCQkJOAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcJCTB4MTMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUCUJJVCgxMikKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0sJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8JCTIKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRwkJMHgxMgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFCTB4NDgyNAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUJCQlCSVQoMTUpCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcJMHgxNwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRQlCSVQoMykKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUcJCTB4MTgKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLCQlHRU5NQVNLKDE0LCAxMikKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUCTAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRwkJMHgxMAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRQkweDU1MjMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUJCTB4ZjAwMAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRwkweDE0CiYjNDM7I2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFCTB4NzA4ZgomIzQzOyNkZWZpbmUgQUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRQkweDcwOGIKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRwkJCTB4MTUKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSwkJR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLCQlHRU5NQVNLKDcsIDApCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXAomIzQzOwkoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXAomIzQzOwkgRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTSywgKF8xMG0pKSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXAomIzQzOwlBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcCiYjNDM7CUFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpCiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcJCTB4MTgKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFCQkweDAwYmMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHCQkweDFkCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMJMHgwMDQ0CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXAomIzQzOwkoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFwKJiM0MzsJIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3IKJiM0MzsgKiByZWdpc3RlciBtYXAsIHdoaWNoIGFsc28gbWF0Y2hlcyB0aGUgb2JzZXJ2ZWQgQUN4MDAgcmVzZXQgdmFsdWVzLiBUaGUgQUN4MDAKJiM0MzsgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZQomIzQzOyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLgomIzQzOyAqLwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYgewomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sOwomIzQzOwlib29sIGlzX2FjMzAwOwomIzQzOwlib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nOwomIzQzOwlib29sIHhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLAomIzQzOwkJCSAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcGFnZSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2NvbnRyb2wtJmd0O3Bvd2VyX29uKHByaXYtJmd0O2NvbnRyb2wsCiYjNDM7CQkJCSAgICAgICBwcml2LSZndDtwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2NvbnRyb2wtJmd0O3Bvd2VyX29mZihwcml2LSZndDtjb250cm9sKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGh5ZGV2LSZndDtpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2NvbnRyb2wtJmd0O3NldF9pbnRlcmZhY2UocHJpdi0mZ3Q7Y29udHJvbCwKJiM0MzsJCQkJCSAgICBwaHlkZXYtJmd0O2ludGVyZmFjZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gZGF0YTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXBoeWRldl93YXJuKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkgICAgJiMzNDtmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxuJiMzNDssCiYjNDM7CQkJICAgIEVSUl9QVFIocmV0KSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiYjNDM7CQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudm1lbV9jZWxsICpjZWxsOwomIzQzOwlzaXplX3QgaTsKJiM0MzsJc2l6ZV90IGxlbjsKJiM0MzsJdTggKmJ1ZjsKJiM0MzsJdTE2IHZhbCA9IDA7CiYjNDM7CiYjNDM7CWNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChub2RlLCBuYW1lKTsKJiM0MzsJaWYgKElTX0VSUihjZWxsKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGNlbGwpOwomIzQzOwomIzQzOwlidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgJmFtcDtsZW4pOwomIzQzOwludm1lbV9jZWxsX3B1dChjZWxsKTsKJiM0MzsJaWYgKElTX0VSUihidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoYnVmKTsKJiM0MzsJaWYgKCFsZW4gfHwgbGVuICZndDsgc2l6ZW9mKCp2YWx1ZSkpIHsKJiM0MzsJCWtmcmVlKGJ1Zik7CiYjNDM7CQlyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxlbjsgaSYjNDM7JiM0MzspCiYjNDM7CQl2YWwgfD0gKHUxNilidWZbaV0gJmx0OyZsdDsgKDggKiBpKTsKJiM0MzsJa2ZyZWUoYnVmKTsKJiM0MzsJKnZhbHVlID0gdmFsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTsKJiM0MzsJYm9vbCBzZWxlY3RhYmxlOwomIzQzOwlib29sIGZpeGVkX2FjMzAwOwomIzQzOwlib29sIGhhc19jb25maWd1cmF0aW9uOwomIzQzOwl1OCBjYWxpYnJhdGlvbjsKJiM0MzsJdTMyIGJhc2VfYWRkcjsKJiM0MzsJdTE2IGNvbmZpZ3VyYXRpb24gPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi0mZ3Q7b2Zfbm9kZSk7CiYjNDM7CWlmICghcGFja2FnZV9ub2RlKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgJiMzNDtldGhlcm5ldC1waHktcGFja2FnZSYjMzQ7KSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O1BIWSBpcyBub3QgaW4gYW4gRXRoZXJuZXQgUEhZIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgJiMzNDtyZWcmIzM0OywgJmFtcDtiYXNlX2FkZHIpOwomIzQzOwlpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtJmd0O21kaW8uYWRkcikgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O3BhY2thZ2UgYW5kIGxpbmsgUEhZIGFkZHJlc3NlcyBkaWZmZXJcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkgICAgICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDspOwomIzQzOwlmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgICYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDspOwomIzQzOwlpZiAoIXNlbGVjdGFibGUgJmFtcDsmYW1wOyAhZml4ZWRfYWMzMDAgJmFtcDsmYW1wOwomIzQzOwkgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJICAgICAmIzM0O3gtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZSYjMzQ7KSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O3Vuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CiYjNDM7CWhhc19jb25maWd1cmF0aW9uID0KJiM0MzsJCW9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsICYjMzQ7bnZtZW0tY2VsbC1uYW1lcyYjMzQ7LAomIzQzOwkJCQkJICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7KSAmZ3Q7PSAwOwomIzQzOwlpZiAoaGFzX2NvbmZpZ3VyYXRpb24pIHsKJiM0MzsJCXJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OywKJiM0MzsJCQkJCQkmYW1wO2NvbmZpZ3VyYXRpb24pOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgJiMzNDtmYWlsZWQgdG8gcmVhZCBwYWNrYWdlIGNvbmZpZ3VyYXRpb25cbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7cGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2VsZWN0YWJsZSkgewomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgPQomIzQzOwkJCWNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXByaXYtJmd0O2lzX2FjMzAwID0gZml4ZWRfYWMzMDA7CiYjNDM7CQlpZiAoaGFzX2NvbmZpZ3VyYXRpb24gJmFtcDsmYW1wOwomIzQzOwkJICAgICEhKGNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT0KJiM0MzsJCSAgICBwcml2LSZndDtpc19hYzMwMCkgewomIzQzOwkJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICYjMzQ7Y29uZmlndXJhdGlvbiBkb2VzIG5vdCBtYXRjaCBwYWNrYWdlXG4mIzM0Oyk7CiYjNDM7CQkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSywKJiM0MzsJCQkJY29uZmlndXJhdGlvbik7CiYjNDM7CiYjNDM7CXByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nID0KJiM0MzsJCXByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsKJiM0MzsJCSEhKGNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTsKJiM0MzsJcHJpdi0mZ3Q7eG1paV9yeF9jbG9ja19pbnZlcnRlZCA9CiYjNDM7CQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLAomIzQzOwkJCQkgICAgICAmIzM0O3gtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCkKJiM0MzsJCXByaXYtJmd0O2NvbnRyb2wgPQomIzQzOwkJCWFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgIGNhbGlicmF0aW9uKTsKJiM0MzsJZWxzZQomIzQzOwkJcHJpdi0mZ3Q7Y29udHJvbCA9CiYjNDM7CQkJYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sCiYjNDM7CQkJCQkgICAgICBjYWxpYnJhdGlvbik7CiYjNDM7CXJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LSZndDtjb250cm9sKTsKJiM0MzsKJiM0MztvdXRfcHV0X25vZGU6CiYjNDM7CW9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSwKJiM0MzsJCQkJQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLAomIzQzOwkJCQlBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtvZl9ub2RlKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXByaXYtJmd0O3BoeWRldiA9IHBoeWRldjsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlLCBwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi8KJiM0MzsJcmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJdTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LSZndDtpc19hYzMwMCA/CiYjNDM7CQlBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFIDoKJiM0MzsJCUFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7CiYjNDM7CXUxNiB0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUU7CiYjNDM7CXUxNiBnbG9iYWxfY29uZmlnOwomIzQzOwlpbnQgb2xkcGFnZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSywKJiM0MzsJCQkJICAgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTyk7CiYjNDM7CWlmIChwcml2LSZndDt4bWlpX3J4X2Nsb2NrX2ludmVydGVkKQomIzQzOwkJZ2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMCwKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsCiYjNDM7CQkJICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHwKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSywgZ2xvYmFsX2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aXNfYWMzMDAgJmFtcDsmYW1wOyBwcml2LSZndDt1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykgewomIzQzOwkJYWZlX2VxX3J4X2RldGVjdCA9CiYjNDM7CQkJQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFOwomIzQzOwkJdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpOwomIzQzOwlpZiAob2xkcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSywKJiM0MzsJCQkgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLAomIzQzOwkJCQkgICAgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVCkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBhZmVfZXFfcnhfZGV0ZWN0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRywKJiM0MzsJCQkJICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRywKJiM0MzsJCQkgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTsKJiM0MzsKJiM0MztvdXRfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovCiYjNDM7CXJldHVybiBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovCiYjNDM7CXJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXN1bWVfcmV0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcmVzdW1lX3JldCA9IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpOwomIzQzOwkJaWYgKHJlc3VtZV9yZXQpCiYjNDM7CQkJcGh5ZGV2X3dhcm4ocGh5ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtmYWlsZWQgdG8gcmVjb3ZlciBmcm9tIHN1c3BlbmQgZXJyb3I6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBoeWRldi0mZ3Q7bWRpby5kZXYub2Zfbm9kZTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7CiYjNDM7CWJvb2wgbWF0Y2g7CiYjNDM7CiYjNDM7CWlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqLwomIzQzOwlwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpOwomIzQzOwlpZiAoIXBhY2thZ2Vfbm9kZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwltYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDspIHx8CiYjNDM7CQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZSYjMzQ7KSB8fAomIzQzOwkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CW9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBtYXRjaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7CiYjNDM7CXsKJiM0MzsJCVBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSwKJiM0MzsJCS5uYW1lID0gJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZJiMzNDssCiYjNDM7CQkubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSwKJiM0MzsJCS5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsCiYjNDM7CQkucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZSA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZSwKJiM0MzsJCS5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LAomIzQzOwkJLmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCwKJiM0MzsJCS5kaXNhYmxlX2F1dG9ub21vdXNfZWVlID0gYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlLAomIzQzOwkJLnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsCiYjNDM7CX0sCiYjNDM7fTsKJiM0Mzttb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0gewomIzQzOwl7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC5oCkBAIC0wLDAgJiM0MzsxLDI4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOyNpZm5kZWYgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9ICiYjNDM7I2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VUCTE2CiYjNDM7CiYjNDM7c3RydWN0IGRldmljZV9ub2RlOwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgewomIzQzOwlpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQl1bnNpZ25lZCBpbnQgcGh5X2FkZHIpOwomIzQzOwlpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpOwomIzQzOwlpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICoKJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLAomIzQzOwkJICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTsKJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICoKJiM0MzthYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbik7CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzU4CgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDE2MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IFgtUG93ZXJzIEFDMjAwL0FDMzAwIFBIWSBEcml2ZXJzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBwYXRjaCBzZXJpZXMgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZcywgYWxvbmcgd2l0aCBhIG5ldyBNRkQgZHJpdmVyIGZvciB0aGUgQUMyMDAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSBRRU1VLCB3aGljaCBpcyB3aGF0IHN5emthbGxlciB0eXBpY2FsbHkgdXNlcy4KClRoZSBBQzIwMCBNRkQgZHJpdmVyIGlzIEkyQy1iYXNlZCwgYW5kIHRoZSBQSFkgZHJpdmVyIGlzIE1ESU8tYmFzZWQuIEkga25vdyB0aGF0LCBpbiBnZW5lcmFsLCBJMkMgYW5kIE1ESU8gZGV2aWNlcyBhcmVuJiMzOTt0IHRyaXZpYWxseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdlIG5lZWQgYW4gZW11bGF0ZWQgSTJDL01ESU8gY29udHJvbGxlciwgb3IgYXQgbGVhc3QgYWNjZXNzIHZpYSBgaTJjLWRldmAgb3IgYG1kaW8tZGV2YC4gU3l6a2FsbGVyICpjYW4qIGZ1enogSTJDIHZpYSBgL2Rldi9pMmMtKmAsIGJ1dCBpdCBkb2VzbiYjMzk7dCBuYXRpdmVseSB0YXJnZXQgc3BlY2lmaWMgSTJDIGNsaWVudCBkcml2ZXJzIHVubGVzcyB0aGV5IGV4cG9zZSBjaGFyYWN0ZXIgZGV2aWNlcy4gQW5kLCB3aGlsZSBzeXprYWxsZXIgaGFzIHNvbWUgSTJDIHN1cHBvcnQsIHRoZXJlJiMzOTtzIG5vIGdlbmVyaWMgTURJTyBmdXp6ZXIuIFNvLCB0aGF0JiMzOTtzIG5vdCBsb29raW5nIHByb21pc2luZy4KClRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ2FuIHdlIGluc3RhbnRpYXRlIHRoZXNlIGRldmljZXM/IEkyQyBkZXZpY2VzICpjYW4qIGJlIGluc3RhbnRpYXRlZCB2aWEgc3lzZnMsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nLiBCdXQgTURJTyBkZXZpY2VzPyBUeXBpY2FsbHksIFBIWXMgYXJlIGluc3RhbnRpYXRlZCBlaXRoZXIgYnkgdGhlIE1BQyBkcml2ZXIsIG9yIHZpYSBhIGRldmljZSB0cmVlLiBDYW4gd2UgZXZlbiBpbmplY3QgdGhvc2Ugbm9kZXM/IE5vLCBzeXprYWxsZXIgZG9lc24mIzM5O3Qgc3VwcG9ydCBkeW5hbWljIGRldmljZSB0cmVlIG92ZXJsYXkgaW5qZWN0aW9uLiBTbywgYWxyZWFkeSwgdGhhdCYjMzk7cyBhIGJpZyByZWQgZmxhZy4KCkxldCYjMzk7cyBsb29rIGNsb3NlciBhdCB0aGUgZHJpdmVycy4gVGhlIE1GRCBkcml2ZXIsIGBhYzIwMC5jYCwgaXMgYW4gSTJDIGRyaXZlciwgYW5kIGl0cyBwcm9iZSBmdW5jdGlvbiBydW5zLiBJdCB1c2VzIGBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldF9lbmFibGVgLCB3aGljaCBjb3VsZCBmYWlsIGlmIHdlIGRvbiYjMzk7dCBoYXZlIHRoZSByaWdodCByZWd1bGF0b3JzLiBJdCBhbHNvIGdldHMgYSBjbG9jayB2aWEgYGRldm1fY2xrX2dldF9lbmFibGVkYCwgd2hpY2ggd2lsbCBsaWtlbHkgZmFpbCB3aXRob3V0IGEgc3BlY2lmaWMgY2xvY2sgaW4gdGhlIGRldmljZSB0cmVlLiBTbywgZXZlbiBnZXR0aW5nICpwYXN0KiB0aGUgcHJvYmUgZnVuY3Rpb24gbG9va3MgY2hhbGxlbmdpbmcgd2l0aG91dCBhIHNwZWNpZmljIGRldmljZSB0cmVlLgoKVGhlIFBIWSBkcml2ZXIgaGFzIHNpbWlsYXIgY2hhbGxlbmdlcy4gSXRzIG1hdGNoIGZ1bmN0aW9uLCBgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlYCwgY2hlY2tzIGZvciBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MgZnJvbSBhIHBhY2thZ2Ugbm9kZSBhbmQgY29tcGF0aWJsZSBzdHJpbmdzLiBUaGVzZSBhcmUgZXhwbGljaXQgZGV2aWNlIHRyZWUgZGVwZW5kZW5jaWVzLiBUaGlzIHdvbiYjMzk7dCB3b3JrIGluIGEgZ2VuZXJpYyBRRU1VIGVudmlyb25tZW50IOKAkyB0aGVyZSYjMzk7cyBubyBkZXZpY2UgdHJlZSB3aXRoIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uIEFuZCwgbG9va2luZyBhdCB0aGUgcHJvYmUgZnVuY3Rpb24gaXRzZWxmLCBpdCBhbHNvIGV4cGxpY2l0bHkgY2hlY2tzIGBkZXYtJmd0O29mX25vZGVgLCBtZWFuaW5nIGEgZGV2aWNlIHRyZWUgKmlzKiByZXF1aXJlZC4KCkkgc2VlIHRoYXQgYE1GRF9BQzIwMGAgZGVwZW5kcyBvbiBgT0ZgIGluIEtjb25maWcsIGFuZCBgWFBPV0VSU19BQ1gwMF9QSFlgIGRlcGVuZHMgb24gYE9GX01ESU9gLCBgQ09NTU9OX0NMS2AsIGFuZCBgUkVHVUxBVE9SYC4gVGhpcyBjb25maXJtcyBteSBzdXNwaWNpb24g4oCTIGl0JiMzOTtzIGFsbCBkZXZpY2UgdHJlZSBhbmQgaGFyZHdhcmUtZGVwZW5kZW50LiBTaW5jZSB0aGVzZSBkcml2ZXJzIGFyZSBzbyB0aWdodGx5IGNvdXBsZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGRlZmluZWQgaW4gdGhlIGRldmljZSB0cmVlLCBhbmQgd2UgY2FuJiMzOTt0IGluamVjdCB0aG9zZSBub2RlcyBkeW5hbWljYWxseSwgaXQmIzM5O3MgdmlydHVhbGx5IGltcG9zc2libGUgdG8gcmVhY2ggdGhvc2UgY29kZSBwYXRocyBpbiBhIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpc24mIzM5O3Qgd29ydGggZnV6emluZy4gSSYjMzk7bGwgc3VtbWFyaXplIHRoZSByZWFzb25pbmc6IFRoZSBkcml2ZXJzIGFyZSBoZWF2aWx5IGRlcGVuZGVudCBvbiB0aGUgZGV2aWNlIHRyZWUsIHdoaWNoIGlzIG5vdCBlYXNpbHkgZW11bGF0ZWQgb3IgaW5qZWN0ZWQuCkkgd2lsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWXMgYW5kIHRoZSBBQzIwMCBNRkQuIFRoZXNlIGRyaXZlcnMgYXJlIGhlYXZpbHkgZGVwZW5kZW50IG9uIERldmljZSBUcmVlIChPRikgZm9yIHByb2JpbmcgYW5kIGNvbmZpZ3VyYXRpb24gKGUuZy4sIGNoZWNraW5nIGZvciBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MgYW5kIGBkZXYtXHUwMDNlb2Zfbm9kZWApLiBTaW5jZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHVzZWQgZm9yIGZ1enppbmcgZG8gbm90IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBvciBkZXZpY2UgdHJlZSBub2RlcywgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZcyBhbmQgdGhlIEFDMjAwIE1GRC4gVGhlc2UgZHJpdmVycyBhcmUgaGVhdmlseSBkZXBlbmRlbnQgb24gRGV2aWNlIFRyZWUgKE9GKSBmb3IgcHJvYmluZyBhbmQgY29uZmlndXJhdGlvbiAoZS5nLiwgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncyBhbmQgYGRldi1cdTAwM2VvZl9ub2RlYCkuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdXNlZCBmb3IgZnV6emluZyBkbyBub3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIG5vZGVzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDY6MjI6NTUuNzk2NTU3NDM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU5MjM1OTE5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWXMgYW5kIHRoZSBBQzIwMCBNRkQuIFRoZXNlIGRyaXZlcnMgYXJlIGhlYXZpbHkgZGVwZW5kZW50IG9uIERldmljZSBUcmVlIChPRikgZm9yIHByb2JpbmcgYW5kIGNvbmZpZ3VyYXRpb24gKGUuZy4sIGNoZWNraW5nIGZvciBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MgYW5kIGBkZXYtXFx1MDAzZW9mX25vZGVgKS4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSB1c2VkIGZvciBmdXp6aW5nIGRvIG5vdCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgbm9kZXMsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA2OjIyOjU1Ljc5NjU2Mzk5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxOTU2NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjJjMTMxMzlkMjhiNjdhNjMxMzliMDZlZDFkNzBhYzVmNWJkMjdkN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDA2OjIyOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjdlOGQ5YmQ1NjYxYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWxcXG5AQCAtMCwwICsxLDY5IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxcbislWUFNTCAxLjJcXG4rLS0tXFxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIG1peGVkLXNpZ25hbCBJQ1xcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOlxcbisgIFRoZSBBQzIwMCBpcyBhIG1peGVkLXNpZ25hbCBjb21wYW5pb24gSUMgY29udGFpbmluZyBhdWRpbywgdmlkZW8sIFJUQyBhbmRcXG4rICBGYXN0IEV0aGVybmV0IFBIWSBmdW5jdGlvbnMuIEl0cyBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgb3ZlciBJMkMuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBjb25zdDogeC1wb3dlcnMsYWMyMDBcXG4rXFxuKyAgcmVnOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgY2xvY2tzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBBQzIwMCBpbnB1dCBjbG9jay4gV2hlbiB1c2luZyB0aGUgRXRoZXJuZXQgUEhZLCBpdHMgY29uZmlndXJlZCByYXRlIG11c3RcXG4rICAgICAgYmUgMjQgb3IgMjcgTUh6LCBtYXRjaGluZyB0aGUgcmF0ZXMgZW5jb2RlZCBieSB0aGUgZG9jdW1lbnRlZCBFUEhZIGNsb2NrXFxuKyAgICAgIHNlbGVjdG9yLlxcbitcXG4rICBhYy1sZG9pbi1zdXBwbHk6XFxuKyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgYXVkaW8tY29kZWMgTERPIGlucHV0XFxuK1xcbisgIGVwaHktdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZFxcbitcXG4rICBydGMtdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBSVENcXG4rXFxuKyAgdHYtdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBUViBlbmNvZGVyIERBQ1xcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSByZWdcXG4rICAtIGNsb2Nrc1xcbisgIC0gYWMtbGRvaW4tc3VwcGx5XFxuKyAgLSBlcGh5LXZjYy1zdXBwbHlcXG4rICAtIHJ0Yy12Y2Mtc3VwcGx5XFxuKyAgLSB0di12Y2Mtc3VwcGx5XFxuK1xcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgaTJjIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgbWl4ZWQtc2lnbmFsQDEwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzIwMFxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MweDEwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZwd20gNVxcdTAwM2U7XFxuKyAgICAgICAgICAgIGFjLWxkb2luLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIGVwaHktdmNjLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIHJ0Yy12Y2Mtc3VwcGx5ID0gXFx1MDAzY1xcdTAwMjZyZWdfM3YzXFx1MDAzZTtcXG4rICAgICAgICAgICAgdHYtdmNjLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgfTtcXG4rICAgIH07XFxuKy4uLlxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjJiZGRjN2EyZjk0MVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXFxuQEAgLTAsMCArMSwyMDggQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXNcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XFxuKyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZVxcbisgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBwYXJ0IG9mIGFuIEkyQyBNRkQsXFxuKyAgd2hpbGUgQUMzMDAgY29udHJvbCByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2XFxuKyAgcGx1cyB0aGUgbGluayBQSFkgYWRkcmVzcy5cXG4rXFxuKyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS5cXG4rICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxcbisgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLlxcbitcXG4rICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcXG4rICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kXFxuKyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50b1xcbisgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxcbitcXG4rc2VsZWN0OlxcbisgIHByb3BlcnRpZXM6XFxuKyAgICBjb21wYXRpYmxlOlxcbisgICAgICBlbnVtOlxcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXG4rICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgIHJlcXVpcmVkOlxcbisgICAgLSBjb21wYXRpYmxlXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbitcXG4rICByZWc6XFxuKyAgICBtYXhpbXVtOiAzMVxcbitcXG4rICBjbG9ja3M6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6LiBUaGUgQUMyMDAgaW5wdXQgY2xvY2tcXG4rICAgICAgYmVsb25ncyB0byB0aGUgcmVmZXJlbmNlZCBBQzIwMCBNRkQgaW5zdGVhZC5cXG4rXFxuKyAgdmNjMS1zdXBwbHk6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgMy4zIFYgc3VwcGx5IGZvciB0aGUgQUMzMDAgSS9PLCBiYW5kZ2FwLCBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZCxcXG4rICAgICAgYW5kIGludGVybmFsIGRpZ2l0YWwgTERPXFxuK1xcbisgIG52bWVtLWNlbGxzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xcbisgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxcbisgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxcbisgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxcbisgICAgICBjb3B5IGluc3RlYWQuXFxuK1xcbisgIG52bWVtLWNlbGwtbmFtZXM6XFxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxcbitcXG4rICB4LXBvd2VycyxhYzIwMDpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcXG4rICAgIGRlc2NyaXB0aW9uOiBSZWZlcmVuY2UgdG8gdGhlIEFDMjAwIE1GRCBjb250YWluaW5nIHRoaXMgRXRoZXJuZXQgUEhZXFxuK1xcbisgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XFxuKyAgICB0eXBlOiBib29sZWFuXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxcbitcXG4rcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxcbisgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXFxuKyAgICBwcm9wZXJ0aWVzOlxcbisgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXG4rICAgIHJlcXVpcmVkOlxcbisgICAgICAtIGNvbXBhdGlibGVcXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbitcXG4rZGVwZW5kZW50UmVxdWlyZWQ6XFxuKyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXFxuKyAgbnZtZW0tY2VsbC1uYW1lczogWyBudm1lbS1jZWxscyBdXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjbG9ja3M6IGZhbHNlXFxuKyAgICAgICAgdmNjMS1zdXBwbHk6IGZhbHNlXFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHJlZzpcXG4rICAgICAgICAgIG1heGltdW06IDdcXG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSBjbG9ja3NcXG4rICAgICAgICAtIHZjYzEtc3VwcGx5XFxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXG4rICAgIHRoZW46XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgcmVnOlxcbisgICAgICAgICAgbWF4aW11bTogN1xcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIGNsb2Nrc1xcbisgICAgICAgIC0gdmNjMS1zdXBwbHlcXG4rICAgICAgICAtIG52bWVtLWNlbGxzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXFxuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICBtZGlvIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxcIjtcXG4rICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIGNsb2NrcyA9IFxcdTAwM2NcXHUwMDI2cHdtIDVcXHUwMDNlO1xcbisgICAgICAgICAgICB2Y2MxLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXFx1MDAzY1xcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXFxcImNvbmZpZ3VyYXRpb25cXFwiO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXFwiO1xcbisgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbitcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZwd20gNVxcdTAwM2U7XFxuKyAgICAgICAgICAgIHZjYzEtc3VwcGx5ID0gXFx1MDAzY1xcdTAwMjZyZWdfM3YzXFx1MDAzZTtcXG4rICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcXHUwMDNjXFx1MDAyNmVwaHlfY29uZmlndXJhdGlvblxcdTAwM2U7XFxuKyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcXFwiY29uZmlndXJhdGlvblxcXCI7XFxuK1xcbisgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7XFxuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxcXCI7XFxuKyAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIH07XFxuKyAgICAgICAgfTtcXG4rICAgIH07XFxuK1xcbisgIC0gfFxcbisgICAgbWRpbyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDEge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFxcdTAwM2NcXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXFx1MDAzZTtcXG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFxcXCJjb25maWd1cmF0aW9uXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAxIHtcXG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXFxcIjtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rLi4uXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnXFxuaW5kZXggNzYzY2U2YTM0NzgyYi4uNDk5MjY5Yzg1ODEyNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZ1xcbkBAIC0yMDUsNiArMjA1LDE3IEBAIGNvbmZpZyBNRkRfQUMxMDBcXG4gXFx0ICBUaGlzIGRyaXZlciBpbmNsdWRlIG9ubHkgdGhlIGNvcmUgQVBJcy4gWW91IGhhdmUgdG8gc2VsZWN0IGluZGl2aWR1YWxcXG4gXFx0ICBjb21wb25lbnRzIGxpa2UgY29kZWNzIG9yIFJUQyB1bmRlciB0aGUgY29ycmVzcG9uZGluZyBtZW51cy5cXG4gXFxuK2NvbmZpZyBNRkRfQUMyMDBcXG4rXFx0dHJpc3RhdGUgXFxcIlgtUG93ZXJzIEFDMjAwXFxcIlxcbitcXHRkZXBlbmRzIG9uIEkyQ1xcbitcXHRkZXBlbmRzIG9uIE9GXFxuK1xcdHNlbGVjdCBSRUdNQVBfSTJDXFxuK1xcdGhlbHBcXG4rXFx0ICBTdXBwb3J0IGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIGNvbXBhbmlvbiBJQy4gVGhlIEFDMjAwXFxuK1xcdCAgY29udGFpbnMgYXVkaW8sIHZpZGVvLCBSVEMgYW5kIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucyBhbmQgaXNcXG4rXFx0ICBjby1wYWNrYWdlZCB3aXRoIHNvbWUgQWxsd2lubmVyIEg2IGFuZCBINjE2IFNvQ3MuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXFxuK1xcdCAgdGhlIHNoYXJlZCByZWdpc3RlciBhY2Nlc3MgdXNlZCBieSB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBkcml2ZXJzLlxcbitcXG4gY29uZmlnIE1GRF9BWFAyMFhcXG4gXFx0dHJpc3RhdGVcXG4gXFx0c2VsZWN0IE1GRF9DT1JFXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcXG5pbmRleCBkZDRiYjdlNzdjMzM2Li44OTBlNzZhOWFkMDBhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcXG5AQCAtMTUwLDYgKzE1MCw3IEBAIG9iai0kKENPTkZJR19NRkRfREE5MDUyX1NQSSlcXHQrPSBkYTkwNTItc3BpLm9cXG4gb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfSTJDKVxcdCs9IGRhOTA1Mi1pMmMub1xcbiBcXG4gb2JqLSQoQ09ORklHX01GRF9BQzEwMClcXHRcXHQrPSBhYzEwMC5vXFxuK29iai0kKENPTkZJR19NRkRfQUMyMDApXFx0XFx0Kz0gYWMyMDAub1xcbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWClcXHQrPSBheHAyMHgub1xcbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWF9JMkMpXFx0Kz0gYXhwMjB4LWkyYy5vXFxuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX1JTQilcXHQrPSBheHAyMHgtcnNiLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWMyMDAuYyBiL2RyaXZlcnMvbWZkL2FjMjAwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5OGJiNDE3M2IxNGJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9tZmQvYWMyMDAuY1xcbkBAIC0wLDAgKzEsMTc2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogTUZEIGNvcmUgZHJpdmVyIGZvciB0aGUgWC1Qb3dlcnMgQUMyMDBcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFxcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICpcXG4rICogQmFzZWQgb24gdGhlIEFDMTAwIGRyaXZlcjpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE2IENoZW4tWXUgVHNhaVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1JFR1xcdFxcdFxcdDB4MDAwMFxcbisjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1BBQ0tBR0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDE0KVxcbisjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTS1xcdFxcdEdFTk1BU0soMTEsIDApXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX1JFR1xcdFxcdFxcdDB4MDAwMlxcbisjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX0NISVBfUkVTRVRfREVBU1NFUlRcXHRCSVQoMClcXG4rXFxuKy8qIEludGVyZmFjZSByZWdpc3RlciBhY2Nlc3NpYmxlIGZyb20gZXZlcnkgcmVnaXN0ZXIgcGFnZS4gKi9cXG4rI2RlZmluZSBBQzIwMF9UV0lfUkVHX0FERFJfSFxcdDB4MDBmZVxcbisjZGVmaW5lIEFDMjAwX01BWF9SRUdcXHRcXHQweGExZjJcXG4rXFxuK3N0cnVjdCBhYzIwMCB7XFxuK1xcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYWMyMDBfc3VwcGxpZXNbXSA9IHtcXG4rXFx0XFxcImFjLWxkb2luXFxcIixcXG4rXFx0XFxcImVwaHktdmNjXFxcIixcXG4rXFx0XFxcInJ0Yy12Y2NcXFwiLFxcbitcXHRcXFwidHYtdmNjXFxcIixcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlX2NmZyBhYzIwMF9yYW5nZV9jZmdbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHQucmFuZ2VfbWF4ID0gQUMyMDBfTUFYX1JFRyxcXG4rXFx0XFx0LnNlbGVjdG9yX3JlZyA9IEFDMjAwX1RXSV9SRUdfQUREUl9ILFxcbitcXHRcXHQuc2VsZWN0b3JfbWFzayA9IDB4ZmYsXFxuK1xcdFxcdC53aW5kb3dfbGVuID0gMjU2LFxcbitcXHR9LFxcbit9O1xcbitcXG4rLypcXG4rICogRWFjaCBBQzIwMCBzdWItYmxvY2sgY2FuIHJlc2V0IGluZGVwZW5kZW50bHksIGludmFsaWRhdGluZyBpdHMgcmVnaXN0ZXJcXG4rICogY29udGVudHMgd2l0aG91dCByZWdtYXAncyBrbm93bGVkZ2UuIENhY2hlIG9ubHkgdGhlIGNvbW1vbiBwYWdlIHNlbGVjdG9yO1xcbisgKiB0aGlzIGF2b2lkcyBhIHNlbGVjdG9yIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBldmVyeSBhY2Nlc3Mgb24gdGhlIHNhbWUgcGFnZVxcbisgKiB3aXRob3V0IGV2ZXIgcmV0dXJuaW5nIHN0YWxlIGZ1bmN0aW9uYWwtcmVnaXN0ZXIgdmFsdWVzLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgYWMyMDBfdm9sYXRpbGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZylcXG4re1xcbitcXHRyZXR1cm4gcmVnICE9IEFDMjAwX1RXSV9SRUdfQUREUl9IO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWMyMDBfcmVnbWFwX2NvbmZpZyA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwiYWMyMDBcXFwiLFxcbitcXHQucmVnX2JpdHMgPSA4LFxcbitcXHQucmVnX3N0cmlkZSA9IDIsXFxuK1xcdC52YWxfYml0cyA9IDE2LFxcbitcXHQucmFuZ2VzID0gYWMyMDBfcmFuZ2VfY2ZnLFxcbitcXHQubnVtX3JhbmdlcyA9IEFSUkFZX1NJWkUoYWMyMDBfcmFuZ2VfY2ZnKSxcXG4rXFx0Lm1heF9yZWdpc3RlciA9IEFDMjAwX01BWF9SRUcsXFxuK1xcdC52b2xhdGlsZV9yZWcgPSBhYzIwMF92b2xhdGlsZV9yZWcsXFxuK1xcdC5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTUFQTEUsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBhYzIwMF9kaXNhYmxlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGFjMjAwICpkZGF0YSA9IGRhdGE7XFxuK1xcbitcXHRyZWdtYXBfd3JpdGUoZGRhdGEtXFx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldjtcXG4rXFx0dW5zaWduZWQgaW50IHZlcnNpb247XFxuK1xcdHN0cnVjdCBhYzIwMCAqZGRhdGE7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWRkYXRhKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0X2VuYWJsZShkZXYsIEFSUkFZX1NJWkUoYWMyMDBfc3VwcGxpZXMpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGFjMjAwX3N1cHBsaWVzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGNsayA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIoY2xrKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGNsayksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBlbmFibGUgaW5wdXQgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgY2xrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGRkYXRhLVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFxcdTAwMjZhYzIwMF9yZWdtYXBfY29uZmlnKTtcXG4rXFx0aWYgKElTX0VSUihkZGF0YS1cXHUwMDNlcmVnbWFwKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGRkYXRhLVxcdTAwM2VyZWdtYXApLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcXFxcblxcXCIpO1xcbitcXG4rXFx0aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGRhdGEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm8gbWluaW11bSBkZWxheSBpcyBkb2N1bWVudGVkLiBNYXRjaCB0aGUgdmVuZG9yIGRyaXZlcidzIDQwIG1zIGRlbGF5XFxuK1xcdCAqIGJlZm9yZSBpdHMgZmlyc3QgQUMyMDAgcmVnaXN0ZXIgYWNjZXNzIGFmdGVyIGVuYWJsaW5nIHRoZSBpbnB1dCBjbG9jay5cXG4rXFx0ICovXFxuK1xcdG1zbGVlcCg0MCk7XFxuK1xcbitcXHRyZXQgPSByZWdtYXBfcmVhZChkZGF0YS1cXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfVkVSU0lPTl9SRUcsIFxcdTAwMjZ2ZXJzaW9uKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byByZWFkIGNoaXAgdmVyc2lvblxcXFxuXFxcIik7XFxuK1xcbitcXHRkZXZfaW5mbyhkZXYsIFxcXCJBQzIwMCByZXZpc2lvbiAlI2x4IGluIHBhY2thZ2UgJWx1XFxcXG5cXFwiLFxcbitcXHRcXHQgRklFTERfR0VUKEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTSywgdmVyc2lvbiksXFxuK1xcdFxcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLLCB2ZXJzaW9uKSk7XFxuK1xcbitcXHQvKiBSZXNldCB0aGUgY2hpcCBhZnRlciBkZXBlbmRlbnQgZnVuY3Rpb24gZHJpdmVycyBoYXZlIHVuYm91bmQuICovXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMjAwX2Rpc2FibGUsIGRkYXRhKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVnbWFwX3dyaXRlKGRkYXRhLVxcdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWMyMDBfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4re1xcbitcXHRhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzIwMFxcXCIgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjMjAwX29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYzIwMF9pMmNfaWRzW10gPSB7XFxuK1xcdHsgLm5hbWUgPSBcXFwiYWMyMDBcXFwiIH0sXFxuK1xcdHsgfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWMyMDBfaTJjX2lkcyk7XFxuK1xcbitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWMyMDBfZHJpdmVyID0ge1xcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJhYzIwMFxcXCIsXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLFxcbitcXHR9LFxcbitcXHQucHJvYmUgPSBhYzIwMF9wcm9iZSxcXG4rXFx0LnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sXFxuK1xcdC5pZF90YWJsZSA9IGFjMjAwX2kyY19pZHMsXFxuK307XFxuK21vZHVsZV9pMmNfZHJpdmVyKGFjMjAwX2RyaXZlcik7XFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJYLVBvd2VycyBBQzIwMCBNRkQgY29yZSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuaW5kZXggYTI5ZDNmZWQ4YTA1My4uMjdiOGZmZTRiNTM5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuQEAgLTQ3NSw2ICs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXFxuIFxcdGhlbHBcXG4gXFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDRcXG4gXFxuK2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWVxcbitcXHR0cmlzdGF0ZSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZXFxcIlxcbitcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXFx1MDAyNlxcdTAwMjYgTlZNRU0gXFx1MDAyNlxcdTAwMjYgT0ZfTURJTyBcXHUwMDI2XFx1MDAyNiBSRUdVTEFUT1JcXG4rXFx0ZGVwZW5kcyBvbiBJMkMgfHwgIUkyQ1xcbitcXHRzZWxlY3QgUEhZX1BBQ0tBR0VcXG4rXFx0aGVscFxcbitcXHQgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDBcXG4rXFx0ICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWVxcbitcXHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxcbitcXHQgIHJlZ2lzdGVycy5cXG4rXFxuIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSVxcbiBcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlclxcXCJcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcXG5pbmRleCBlMjNkZjVlODM2ZTllLi5iOGE1MmQ4MWVhYzYwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbkBAIC0xMDAsNCArMTAwLDcgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVxcdFxcdCs9IHNtc2Mub1xcbiBvYmotJChDT05GSUdfU1RFMTBYUClcXHRcXHQrPSBzdGUxMFhwLm9cXG4gb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKVxcdCs9IHRlcmFuZXRpY3Mub1xcbiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpXFx0Kz0gdml0ZXNzZS5vXFxuK3hwb3dlcnMtYWN4MDAteVxcdFxcdFxcdDo9IHhwb3dlcnMtYWN4MDAtbWFpbi5vIHhwb3dlcnMtYWN4MDAtYWMyMDAubyBcXFxcXFxuK1xcdFxcdFxcdFxcdCAgIHhwb3dlcnMtYWN4MDAtYWMzMDAub1xcbitvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpXFx0Kz0geHBvd2Vycy1hY3gwMC5vXFxuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgKz0geGlsaW54X2dtaWkycmdtaWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMyMDAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmM2OGY2NWIxN2Y2Zlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzIwMC5jXFxuQEAgLTAsMCArMSwzODggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMiBBcm0gTHRkLiAoQW5kcmUgUHJ6eXdhcmEgXFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cXHUwMDNlKVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwieHBvd2Vycy1hY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlxcdDI3MDAwMDAwXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXFx0XFx0XFx0MHgwMDE0XFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVxcdFxcdFxcdEJJVCgxKVxcbitcXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1xcdFxcdFxcdDB4MDAxNlxcbisjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVxcdFxcdFxcdEJJVCgwKVxcbitcXG4rLyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xcbisjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXFx0XFx0XFx0MHg4MDA0XFxuK1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1xcdFxcdFxcdDB4NjAwMFxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXFx0XFx0XFx0R0VOTUFTSyg4LCA0KVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rXFxuK3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcXG4rXFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK1xcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBTZXJpYWxpemVzIHBvd2VyIHNlcXVlbmNpbmcgYW5kIHN0YXRlLiAqL1xcbitcXHR1MTYgZXBoeV9jdGw7XFxuK1xcdHVuc2lnbmVkIGludCBwaHlfYWRkcjtcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4rXFx0Ym9vbCBwb3dlcmVkO1xcbit9O1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXFxuK3N0YXRpYyBib29sIGFjMjAwX2VwaHlfbm9kZV9uZWVkc19wcm9iZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqc3RhdHVzO1xcbitcXG4rXFx0cmV0dXJuICFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhub2RlLCBcXFwic3RhdHVzXFxcIiwgXFx1MDAyNnN0YXR1cykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgICFzdHJjbXAoc3RhdHVzLCBcXFwiZmFpbC1uZWVkcy1wcm9iZVxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfYWRkX2VuYWJsZV9wYXRoKHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG9mX2NoYW5nZXNldCAqb2NzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGJvb2wgKmNoYW5nZWQpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwYXJlbnQgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xcbitcXHRpZiAocGFyZW50KSB7XFxuK1xcdFxcdHJldCA9IGFjMjAwX2VwaHlfYWRkX2VuYWJsZV9wYXRoKGRldiwgb2NzLCBwYXJlbnQsIGNoYW5nZWQpO1xcbitcXHRcXHRvZl9ub2RlX3B1dChwYXJlbnQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIWFjMjAwX2VwaHlfbm9kZV9uZWVkc19wcm9iZShub2RlKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCIlcE9GIGlzIHVuYXZhaWxhYmxlIHdpdGhvdXQgZmFpbC1uZWVkcy1wcm9iZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBub2RlKTtcXG4rXFxuK1xcdHJldCA9IG9mX2NoYW5nZXNldF91cGRhdGVfcHJvcF9zdHJpbmcob2NzLCBub2RlLCBcXFwic3RhdHVzXFxcIiwgXFxcIm9rYXlcXFwiKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdCpjaGFuZ2VkID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9lbmFibGVfcGF0aChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBvZl9jaGFuZ2VzZXQgKm9jcztcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvY3MgPSBremFsbG9jX29iaigqb2NzKTtcXG4rXFx0aWYgKCFvY3MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0b2ZfY2hhbmdlc2V0X2luaXQob2NzKTtcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9hZGRfZW5hYmxlX3BhdGgoZGV2LCBvY3MsIG5vZGUsIFxcdTAwMjZjaGFuZ2VkKTtcXG4rXFx0aWYgKHJldCB8fCAhY2hhbmdlZClcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdHJldCA9IG9mX2NoYW5nZXNldF9hcHBseShvY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0LyogS2VlcCB0aGUgYXBwbGllZCBzdGF0dXMgcHJvcGVydGllcyBhbGl2ZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBEVC4gKi9cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfZGVzdHJveTpcXG4rXFx0b2ZfY2hhbmdlc2V0X2Rlc3Ryb3kob2NzKTtcXG4rXFx0a2ZyZWUob2NzKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlZXBoeV9jdGwgfFxcbitcXHRcXHQocHJpdi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XFxuK1xcdFxcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVxcdTAwM2VwaHlfYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIHJlZywgdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVnLCBFUlJfUFRSKHJldCkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJldCA9IGVycjtcXG4rXFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0cmV0ID0gZXJyO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbithYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4re1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxcbitcXHRcXHRcXHRcXHRcXHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0XFx0XFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcXG4rXFxuK291dF91bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0dTE2IGVwaHlfY3RsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeV9hZGRyIFxcdTAwM2UgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKSB7XFxuK1xcdFxcdHJldCA9IDA7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCkge1xcbitcXHRcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFx0cHJpdi1cXHUwMDNlcGh5X2FkZHIgPSBwaHlfYWRkcjtcXG4rXFxuK1xcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xcbitcXG4rXFx0LyogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gKi9cXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZGlzYWJsZTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitlcnJfZGlzYWJsZTpcXG4rXFx0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xcbitvdXRfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHR1bnNpZ25lZCBpbnQgaW50ZXJuYWxfY2FsaWJyYXRpb247XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50O1xcbitcXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xcbitcXHR1OCBicHNfZWZmdXNlX2NvZGU7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0cHJpdi1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXFxcIngtcG93ZXJzLGFjMjAwXFxcIiwgMCk7XFxuK1xcdGlmICghYWMyMDBfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxcXG5cXFwiKSk7XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfRFlOQU1JQylcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9lbmFibGVfcGF0aChkZXYsIGFjMjAwX25vZGUpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4rXFx0Y2xpZW50ID0gb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGUoYWMyMDBfbm9kZSk7XFxuK1xcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xcbitcXHRpZiAoIWNsaWVudCkge1xcbitcXHRcXHRyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkFDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxcXFxuXFxcIikpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWRldmljZV9saW5rX2FkZChkZXYsIFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZGV2aWNlX3RyeWxvY2soXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X2NsaWVudDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGRldmljZV9pc19ib3VuZChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpKVxcbitcXHRcXHRwcml2LVxcdTAwM2VyZWdtYXAgPSBkZXZfZ2V0X3JlZ21hcChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIE5VTEwpO1xcbitcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldik7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlcmVnbWFwKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIkFDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9lcnJvcjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFoYXNfY2FsaWJyYXRpb24pIHtcXG4rXFx0XFx0cmV0ID0gcmVnbWFwX3JlYWQocHJpdi1cXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2aW50ZXJuYWxfY2FsaWJyYXRpb24pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF9lcnJvcjtcXG4rXFx0XFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xcbitcXHRicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gKyBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XFxuK1xcdHByaXYtXFx1MDAzZWVwaHlfY3RsID1cXG4rXFx0XFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcXG4rXFx0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xcbitcXG4rXFx0Y2xrID0gY2xrX2dldChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIE5VTEwpO1xcbitcXHRpZiAoSVNfRVJSKGNsaykpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihjbGspO1xcbitcXHRcXHRnb3RvIG91dF9lcnJvcjtcXG4rXFx0fVxcbitcXG4rXFx0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4rXFx0Y2xrX3B1dChjbGspO1xcbitcXG4rXFx0c3dpdGNoIChjbGtfcmF0ZSkge1xcbitcXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxcbitcXHRcXHRwcml2LVxcdTAwM2VlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgY2xrX3JhdGUpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XFxuK1xcdHByaXYtXFx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xcbitcXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHJldHVybiBcXHUwMDI2cHJpdi1cXHUwMDNlY29udHJvbDtcXG4rXFxuK291dF9lcnJvcjpcXG4rXFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXFxcblxcXCIpO1xcbitvdXRfcHV0X2NsaWVudDpcXG4rXFx0cHV0X2RldmljZShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpO1xcbitcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzMwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MGE5MGI3YTg1YTc5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmNcXG5AQCAtMCwwICsxLDQwNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInBoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwieHBvd2Vycy1hY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWlxcdDI1MDAwMDAwXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcXHQyNzAwMDAwMFxcbisjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1xcdFxcdFxcdDB4MDBcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXFx0XFx0R0VOTUFTSygxMSwgOClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1xcdFxcdFxcdEdFTk1BU0soNywgNilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcXG4rI2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFXFx0XFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXFx0XFx0QklUKDMpXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXFx0XFx0R0VOTUFTSygyLCAwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHXFx0XFx0XFx0MHgwMlxcbisjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXFx0XFx0QklUKDE1KVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXFx0XFx0XFx0MHgwNVxcbisjZGVmaW5lIEFDMzAwX01ESU9fRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDE1LCAxNClcXG4rI2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDExLCAxMClcXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlxcdFxcdFxcdDJcXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9QQURfRU5BQkxFXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXFx0XFx0XFx0QklUKDApXFxuK1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09ORklHX1JFR1xcdFxcdFxcdDB4MDZcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDEyKVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlxcdFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxcXFxuK1xcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwgXFxcXFxcbitcXHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFxcXFxcXG4rXFx0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcXFxcbitcXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpXFxuK1xcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIFNlcmlhbGl6ZXMgcG93ZXIgc2VxdWVuY2luZyBhbmQgc3RhdGUuICovXFxuK1xcdHUxNiBzeXNfY29udHJvbDtcXG4rXFx0dTE2IGVwaHlfY29uZmlnO1xcbitcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xcbitcXHRib29sIHBhY2thZ2Vfa25vd247XFxuK1xcdGJvb2wgaW50ZXJuYWxfZGxkbztcXG4rXFx0Ym9vbCBwb3dlcmVkO1xcbit9O1xcbitcXG4rc3RhdGljIHVuc2lnbmVkIGludFxcbithYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0XFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcXG4rXFx0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXFxuK1xcdFxcdFxcdFxcdHUxNiB2YWwpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpO1xcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX21vZGlmeShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXFxuK1xcdFxcdFxcdFxcdCB1MTYgbWFzaywgdTE2IHNldClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0XFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdHUxNiB2YWwgPSAocmV0IFxcdTAwMjYgfm1hc2spIHwgKHNldCBcXHUwMDI2IG1hc2spO1xcbitcXG4rXFx0XFx0cmV0ID0gdmFsID09IHJldCA/IDAgOlxcbitcXHRcXHRcXHRfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHJlZ251bSwgdmFsKTtcXG4rXFx0fVxcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWVwaHlfY29uZmlnIHxcXG4rXFx0XFx0KHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XFxuK1xcdFxcdCBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkXFxuK1xcdCAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGVcXG4rXFx0ICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiAhcHJpdi1cXHUwMDNlcGFja2FnZV9rbm93biB8fCAhcHJpdi1cXHUwMDNlaW50ZXJuYWxfZGxkbyA/XFxuK1xcdFxcdEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQgOiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXBvd2VyZWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxcbitcXHRcXHRcXHRcXHQgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJldCA9IGVycjtcXG4rXFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRyZXQgPSBlcnI7XFxuK1xcbitcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbithYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XFxuK1xcbitvdXRfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXFxuK3tcXG4rXFx0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdHU4IHBhY2thZ2Vfc3RhdHVzO1xcbitcXHR1MTYgcmVzZXRfdmFsdWU7XFxuK1xcdGludCBzeXNfY29udHJvbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IDA7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IHRydWU7XFxuK1xcbitcXHQvKiBLZWVwIHRoZSBleHRlcm5hbC1zdXBwbHkgY29uZmlndXJhdGlvbiBhY3Jvc3MgY2hpcCByZXNldHMuICovXFxuK1xcdHJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7XFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHQvKiBUaGUgbWFudWFsIHJlcXVpcmVzIGJvdGggcmVzZXRzIHRvIGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgY2xvY2tzLiAqL1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxcbitcXHRcXHRcXHRcXHQgIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHQvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgcHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRzeXNfY29udHJvbCA9IGFjMzAwX2VwaHlfY3RsX3JlYWQocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHKTtcXG4rXFx0aWYgKHN5c19jb250cm9sIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyZXQgPSBzeXNfY29udHJvbDtcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXHR9XFxuK1xcbitcXHRwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7XFxuK1xcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFxcdTAwMjYgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSAhPVxcbitcXHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFx0fVxcbitcXG4rXFx0cHJpdi1cXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFxcdTAwMjYgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETztcXG4rXFx0cHJpdi1cXHUwMDNlcGFja2FnZV9rbm93biA9IHRydWU7XFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLFxcbitcXHRcXHRcXHRcXHQgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsXFxuK1xcdFxcdFxcdFxcdCAgIHByaXYtXFx1MDAzZWludGVybmFsX2RsZG8gP1xcbitcXHRcXHRcXHRcXHQgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMzAwX1NZU19JT19WQUxVRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdGZzbGVlcCgxMDAwMCk7XFxuK1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XFxuK1xcdFxcdFxcdFxcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdGZzbGVlcCgxMDAwMCk7XFxuK1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK2Vycl9wb3dlcl9vZmY6XFxuK1xcdGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQocHJpdik7XFxuK291dF91bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X3JlZ3VsYXRvcl9kaXNhYmxlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0cmVndWxhdG9yX2Rpc2FibGUoZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFjMzAwX2VwaHlfY2xrX3B1dCh2b2lkICpkYXRhKVxcbit7XFxuK1xcdGNsa19wdXQoZGF0YSk7XFxuK31cXG4rXFxuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XFxuK1xcdHN0cnVjdCByZWd1bGF0b3IgKnZjYzE7XFxuK1xcdHU4IGJnc19lZmZ1c2VfY29kZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5hZGRyIFxcdTAwM2UgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxcXFxuXFxcIikpO1xcbitcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0dmNjMSA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjYzFcXFwiKTtcXG4rXFx0aWYgKElTX0VSUih2Y2MxKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIodmNjMSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgVkNDMSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUodmNjMSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBlbmFibGUgVkNDMSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfcmVndWxhdG9yX2Rpc2FibGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB2Y2MxKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cXG4rXFx0ZnNsZWVwKDEwMDAwKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VjbGspKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2VjbGspLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LVxcdTAwM2VjbGspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRzd2l0Y2ggKGNsa19yYXRlKSB7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjbGtfcmF0ZSkpO1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xcbitcXG4rXFx0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xcbitcXHRiZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gKyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XFxuK1xcdHByaXYtXFx1MDAzZWVwaHlfY29uZmlnID1cXG4rXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcXG4rXFx0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcXG4rXFx0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZwcml2LVxcdTAwM2Vjb250cm9sO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjc3YzYxNjk4MjFjM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1tYWluLmNcXG5AQCAtMCwwICsxLDUzNiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFxcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInBoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwieHBvd2Vycy1hY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0lEXFx0XFx0XFx0XFx0MHgwMDQ0MTQwMFxcbitcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLXFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcXHRcXHRCSVQoOClcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1dcXHRCSVQoOSlcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXFx0XFx0XFx0MHgxZlxcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcXHRcXHRcXHRHRU5NQVNLKDEyLCA4KVxcbisjZGVmaW5lIEFDWDAwX1BBR0VfMFxcdFxcdFxcdFxcdDBcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzFcXHRcXHRcXHRcXHQxXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV8yXFx0XFx0XFx0XFx0MlxcbisjZGVmaW5lIEFDWDAwX1BBR0VfNlxcdFxcdFxcdFxcdDZcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzhcXHRcXHRcXHRcXHQ4XFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHXFx0XFx0MHgxM1xcbisjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXFx0QklUKDEyKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0tcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1xcdFxcdDJcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXFx0XFx0MHgxMlxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRVxcdDB4NDgyNFxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcXHRcXHQweDEzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEVcXHRcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHXFx0MHgxN1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcXHRCSVQoMylcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1xcdFxcdDB4MThcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1xcdFxcdEdFTk1BU0soMTQsIDEyKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUXFx0MFxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcXHRcXHQweDEwXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRVxcdDB4NTUyM1xcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFR1xcdFxcdDB4MTNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRVxcdFxcdDB4ZjAwMFxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUdcXHQweDE0XFxuKyNkZWZpbmUgQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVxcdDB4NzA4ZlxcbisjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcXHQweDcwOGJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUUgMHg3ODA5XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXFx0XFx0XFx0MHgxNVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1xcdFxcdEdFTk1BU0soMTUsIDgpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcXHRcXHRHRU5NQVNLKDcsIDApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoXzEwMG0sIF8xMG0pIFxcXFxcXG4rXFx0KEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLLCAoXzEwMG0pKSB8IFxcXFxcXG4rXFx0IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0ssIChfMTBtKSkpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcXFxcXFxuK1xcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MTUsIDB4MzApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcXFxcXFxuK1xcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFR1xcdFxcdDB4MThcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVxcdFxcdDB4MDBiY1xcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXFx0XFx0MHgxZFxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFNcXHQweDAwNDRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcXFxcbitcXHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXFxcXG4rXFx0IEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpXFxuK1xcbisvKlxcbisgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3JcXG4rICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXFxuKyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXFxuKyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLlxcbisgKi9cXG4rXFxuK3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYge1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sO1xcbitcXHRib29sIGlzX2FjMzAwO1xcbitcXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xcbitcXHRib29sIHhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLFxcbitcXHRcXHRcXHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlcG93ZXJfb24ocHJpdi1cXHUwMDNlY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZXBvd2VyX29mZihwcml2LVxcdTAwM2Vjb250cm9sKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlc2V0X2ludGVyZmFjZShwcml2LVxcdTAwM2Vjb250cm9sLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgRVJSX1BUUihyZXQpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xcbitcXHRzaXplX3QgaTtcXG4rXFx0c2l6ZV90IGxlbjtcXG4rXFx0dTggKmJ1ZjtcXG4rXFx0dTE2IHZhbCA9IDA7XFxuK1xcbitcXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobm9kZSwgbmFtZSk7XFxuK1xcdGlmIChJU19FUlIoY2VsbCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xcbitcXG4rXFx0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFxcdTAwMjZsZW4pO1xcbitcXHRudm1lbV9jZWxsX3B1dChjZWxsKTtcXG4rXFx0aWYgKElTX0VSUihidWYpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihidWYpO1xcbitcXHRpZiAoIWxlbiB8fCBsZW4gXFx1MDAzZSBzaXplb2YoKnZhbHVlKSkge1xcbitcXHRcXHRrZnJlZShidWYpO1xcbitcXHRcXHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsZW47IGkrKylcXG4rXFx0XFx0dmFsIHw9ICh1MTYpYnVmW2ldIFxcdTAwM2NcXHUwMDNjICg4ICogaSk7XFxuK1xcdGtmcmVlKGJ1Zik7XFxuK1xcdCp2YWx1ZSA9IHZhbDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xcbitcXHRib29sIHNlbGVjdGFibGU7XFxuK1xcdGJvb2wgZml4ZWRfYWMzMDA7XFxuK1xcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XFxuK1xcdHU4IGNhbGlicmF0aW9uO1xcbitcXHR1MzIgYmFzZV9hZGRyO1xcbitcXHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi1cXHUwMDNlb2Zfbm9kZSk7XFxuK1xcdGlmICghcGFja2FnZV9ub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCBcXFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQSFkgaXMgbm90IGluIGFuIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZiYXNlX2FkZHIpO1xcbitcXHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcikge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCIpO1xcbitcXHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcXCIpO1xcbitcXHRpZiAoIXNlbGVjdGFibGUgXFx1MDAyNlxcdTAwMjYgIWZpeGVkX2FjMzAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJ1bnN1cHBvcnRlZCBFdGhlcm5ldCBQSFkgcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFxuK1xcdGhhc19jb25maWd1cmF0aW9uID1cXG4rXFx0XFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXFxcIm52bWVtLWNlbGwtbmFtZXNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcImNvbmZpZ3VyYXRpb25cXFwiKSBcXHUwMDNlPSAwO1xcbitcXHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24pIHtcXG4rXFx0XFx0cmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsIFxcXCJjb25maWd1cmF0aW9uXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvbmZpZ3VyYXRpb24pO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlYWQgcGFja2FnZSBjb25maWd1cmF0aW9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc2VsZWN0YWJsZSkge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCA9XFxuK1xcdFxcdFxcdGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xcbitcXHRcXHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPVxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlaXNfYWMzMDApIHtcXG4rXFx0XFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXFwiY29uZmlndXJhdGlvbiBkb2VzIG5vdCBtYXRjaCBwYWNrYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcXG4rXFx0XFx0XFx0XFx0Y29uZmlndXJhdGlvbik7XFxuK1xcbitcXHRwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XFxuK1xcdFxcdHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCEhKGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpO1xcbitcXHRwcml2LVxcdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cXG4rXFx0XFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFxcIngtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWRcXFwiKTtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMClcXG4rXFx0XFx0cHJpdi1cXHUwMDNlY29udHJvbCA9XFxuK1xcdFxcdFxcdGFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FsaWJyYXRpb24pO1xcbitcXHRlbHNlXFxuK1xcdFxcdHByaXYtXFx1MDAzZWNvbnRyb2wgPVxcbitcXHRcXHRcXHRhYzIwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGhhc19jb25maWd1cmF0aW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBjYWxpYnJhdGlvbik7XFxuK1xcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVxcdTAwM2Vjb250cm9sKTtcXG4rXFxuK291dF9wdXRfbm9kZTpcXG4rXFx0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRyZXR1cm4gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSxcXG4rXFx0XFx0XFx0XFx0QUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlb2Zfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xcXFxuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXFxuK1xcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfc29mdF9yZXNldChwaHlkZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHR1MTYgYWZlX2VxX3J4X2RldGVjdCA9IHByaXYtXFx1MDAzZWlzX2FjMzAwID9cXG4rXFx0XFx0QUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRSA6XFxuK1xcdFxcdEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7XFxuK1xcdHUxNiB0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUU7XFxuK1xcdHUxNiBnbG9iYWxfY29uZmlnO1xcbitcXHRpbnQgb2xkcGFnZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xcbitcXHRpZiAocHJpdi1cXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcXG4rXFx0XFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdGFmZV9lcV9yeF9kZXRlY3QgPVxcbitcXHRcXHRcXHRBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7XFxuK1xcdFxcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcXG4rXFx0fVxcbitcXG4rXFx0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XFxuK1xcdGlmIChvbGRwYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgYWZlX2VxX3J4X2RldGVjdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcXG4rXFxuK291dF9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cXG4rXFx0cmV0dXJuIGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovXFxuK1xcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJlc3VtZV9yZXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXN1bWVfcmV0KVxcbitcXHRcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlY292ZXIgZnJvbSBzdXNwZW5kIGVycm9yOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4rXFx0Ym9vbCBtYXRjaDtcXG4rXFxuK1xcdGlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqL1xcbitcXHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xcbitcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdG1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxcIik7XFxuK1xcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gbWF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhY3gwMF9lcGh5X2RyaXZlcltdID0ge1xcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRVBIWVxcXCIsXFxuK1xcdFxcdC5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLFxcbitcXHRcXHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxcbitcXHRcXHQucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLFxcbitcXHRcXHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcXG4rXFx0XFx0LmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCxcXG4rXFx0XFx0LmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsXFxuK1xcdFxcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsXFxuK1xcdH0sXFxuK307XFxuK21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcXG4rXFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpO1xcbitcXG4rTU9EVUxFX0FVVEhPUihcXFwiSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGY2MDg0YzdhNzcyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLmhcXG5AQCAtMCwwICsxLDI4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rI2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVRcXHQxNlxcbitcXG4rc3RydWN0IGRldmljZV9ub2RlO1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XFxuK1xcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xcbitcXHRpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpO1xcbitcXHRpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpO1xcbit9O1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pO1xcbitcXG4rI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA2OjIyOjU2LjIzOTIyNjYwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM1NDgwOTE2MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFlzIGFuZCB0aGUgQUMyMDAgTUZELiBUaGVzZSBkcml2ZXJzIGFyZSBoZWF2aWx5IGRlcGVuZGVudCBvbiBEZXZpY2UgVHJlZSAoT0YpIGZvciBwcm9iaW5nIGFuZCBjb25maWd1cmF0aW9uIChlLmcuLCBjaGVja2luZyBmb3Igc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmdzIGFuZCBgZGV2LVxcdTAwM2VvZl9ub2RlYCkuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdXNlZCBmb3IgZnV6emluZyBkbyBub3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIG5vZGVzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMmMxMzEzOWQyOGI2N2E2MzEzOWIwNmVkMWQ3MGFjNWY1YmQyN2Q3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwNjoyMjo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI3ZThkOWJkNTY2MWFcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxuQEAgLTAsMCArMSw2OSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuKyVZQU1MIDEuMlxuKy0tLVxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIG1peGVkLXNpZ25hbCBJQ1xuK1xuK21haW50YWluZXJzOlxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBUaGUgQUMyMDAgaXMgYSBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDIGNvbnRhaW5pbmcgYXVkaW8sIHZpZGVvLCBSVEMgYW5kXG4rICBGYXN0IEV0aGVybmV0IFBIWSBmdW5jdGlvbnMuIEl0cyBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgb3ZlciBJMkMuXG4rXG4rcHJvcGVydGllczpcbisgIGNvbXBhdGlibGU6XG4rICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMFxuK1xuKyAgcmVnOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgY2xvY2tzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBBQzIwMCBpbnB1dCBjbG9jay4gV2hlbiB1c2luZyB0aGUgRXRoZXJuZXQgUEhZLCBpdHMgY29uZmlndXJlZCByYXRlIG11c3RcbisgICAgICBiZSAyNCBvciAyNyBNSHosIG1hdGNoaW5nIHRoZSByYXRlcyBlbmNvZGVkIGJ5IHRoZSBkb2N1bWVudGVkIEVQSFkgY2xvY2tcbisgICAgICBzZWxlY3Rvci5cbitcbisgIGFjLWxkb2luLXN1cHBseTpcbisgICAgZGVzY3JpcHRpb246IDMuMyBWIHN1cHBseSBmb3IgdGhlIGF1ZGlvLWNvZGVjIExETyBpbnB1dFxuK1xuKyAgZXBoeS12Y2Mtc3VwcGx5OlxuKyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgRXRoZXJuZXQgUEhZIGFuYWxvZyBmcm9udCBlbmRcbitcbisgIHJ0Yy12Y2Mtc3VwcGx5OlxuKyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgUlRDXG4rXG4rICB0di12Y2Mtc3VwcGx5OlxuKyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgVFYgZW5jb2RlciBEQUNcbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuKyAgLSByZWdcbisgIC0gY2xvY2tzXG4rICAtIGFjLWxkb2luLXN1cHBseVxuKyAgLSBlcGh5LXZjYy1zdXBwbHlcbisgIC0gcnRjLXZjYy1zdXBwbHlcbisgIC0gdHYtdmNjLXN1cHBseVxuK1xuK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIGkyYyB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBtaXhlZC1zaWduYWxAMTAge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMjAwXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgxMFx1MDAzZTtcbisgICAgICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZwd20gNVx1MDAzZTtcbisgICAgICAgICAgICBhYy1sZG9pbi1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuKyAgICAgICAgICAgIGVwaHktdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4rICAgICAgICAgICAgcnRjLXZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuKyAgICAgICAgICAgIHR2LXZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuKyAgICAgICAgfTtcbisgICAgfTtcbisuLi5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIyYmRkYzdhMmY5NDFcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcbkBAIC0wLDAgKzEsMjA4IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXNcbitcbittYWludGFpbmVyczpcbisgIC0gSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOlxuKyAgVGhlIEFDMjAwIGFuZCBBQzMwMCBjb250YWluIGNvbXBhdGlibGUgRmFzdCBFdGhlcm5ldCBQSFkgYmxvY2tzIHdoaWNoIHJlcG9ydFxuKyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZVxuKyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgY29udHJvbCByZWdpc3RlcnMgYXJlIHBhcnQgb2YgYW4gSTJDIE1GRCxcbisgIHdoaWxlIEFDMzAwIGNvbnRyb2wgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNlxuKyAgcGx1cyB0aGUgbGluayBQSFkgYWRkcmVzcy5cbitcbisgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXG4rICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxuKyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4rXG4rICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcbisgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbisgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cbisgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxuK1xuK3NlbGVjdDpcbisgIHByb3BlcnRpZXM6XG4rICAgIGNvbXBhdGlibGU6XG4rICAgICAgZW51bTpcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuKyAgICAgICAgLSB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbisgIHJlcXVpcmVkOlxuKyAgICAtIGNvbXBhdGlibGVcbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgZW51bTpcbisgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuKyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgLSB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbitcbisgIHJlZzpcbisgICAgbWF4aW11bTogMzFcbitcbisgIGNsb2NrczpcbisgICAgbWF4SXRlbXM6IDFcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHouIFRoZSBBQzIwMCBpbnB1dCBjbG9ja1xuKyAgICAgIGJlbG9uZ3MgdG8gdGhlIHJlZmVyZW5jZWQgQUMyMDAgTUZEIGluc3RlYWQuXG4rXG4rICB2Y2MxLXN1cHBseTpcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgMy4zIFYgc3VwcGx5IGZvciB0aGUgQUMzMDAgSS9PLCBiYW5kZ2FwLCBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZCxcbisgICAgICBhbmQgaW50ZXJuYWwgZGlnaXRhbCBMRE9cbitcbisgIG52bWVtLWNlbGxzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xuKyAgICAgIGNhbGlicmF0aW9uIGNvZGUsIGJpdHMgNyB0aHJvdWdoIDQgYXJlIHJlc2VydmVkLCBiaXQgOCBzZWxlY3RzIEFDMzAwXG4rICAgICAgd2hlbiBzZXQgYW5kIEFDMjAwIHdoZW4gY2xlYXIsIGFuZCBiaXQgOSByZXF1ZXN0cyB0aGUgQUMzMDBcbisgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxuKyAgICAgIHRoZSBsb3cgY2FsaWJyYXRpb24gYml0cyBvciBvbWl0IHRoZSBjZWxsIGFuZCB1c2UgaXRzIGludGVybmFsIGVGdXNlXG4rICAgICAgY29weSBpbnN0ZWFkLlxuK1xuKyAgbnZtZW0tY2VsbC1uYW1lczpcbisgICAgY29uc3Q6IGNvbmZpZ3VyYXRpb25cbitcbisgIHgtcG93ZXJzLGFjMjAwOlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlXG4rICAgIGRlc2NyaXB0aW9uOiBSZWZlcmVuY2UgdG8gdGhlIEFDMjAwIE1GRCBjb250YWluaW5nIHRoaXMgRXRoZXJuZXQgUEhZXG4rXG4rICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxuKyAgICB0eXBlOiBib29sZWFuXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxuK1xuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxuKyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbisgICAgcHJvcGVydGllczpcbisgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxuKyAgICByZXF1aXJlZDpcbisgICAgICAtIGNvbXBhdGlibGVcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rXG4rZGVwZW5kZW50UmVxdWlyZWQ6XG4rICBudm1lbS1jZWxsczogWyBudm1lbS1jZWxsLW5hbWVzIF1cbisgIG52bWVtLWNlbGwtbmFtZXM6IFsgbnZtZW0tY2VsbHMgXVxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjbG9ja3M6IGZhbHNlXG4rICAgICAgICB2Y2MxLXN1cHBseTogZmFsc2VcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcmVnOlxuKyAgICAgICAgICBtYXhpbXVtOiA3XG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0gY2xvY2tzXG4rICAgICAgICAtIHZjYzEtc3VwcGx5XG4rICAgICAgICAtIG52bWVtLWNlbGxzXG4rICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcmVnOlxuKyAgICAgICAgICBtYXhpbXVtOiA3XG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIGNsb2Nrc1xuKyAgICAgICAgLSB2Y2MxLXN1cHBseVxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXG4rICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuKyAgICAgICAgICAgIHZjYzEtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCJjb25maWd1cmF0aW9uXCI7XG4rICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSBcdTAwM2NcdTAwMjZhYzIwMFx1MDAzZTtcbitcbisgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7XG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwiO1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuK1xuKyAgLSB8XG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuKyAgICAgICAgICAgIHZjYzEtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCJjb25maWd1cmF0aW9uXCI7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcIjtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisgIC0gfFxuKyAgICBtZGlvIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDEge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcImNvbmZpZ3VyYXRpb25cIjtcbitcbisgICAgICAgICAgICBldGhlcm5ldC1waHlAMSB7XG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwiO1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuKy4uLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnXG5pbmRleCA3NjNjZTZhMzQ3ODJiLi40OTkyNjljODU4MTI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZ1xuQEAgLTIwNSw2ICsyMDUsMTcgQEAgY29uZmlnIE1GRF9BQzEwMFxuIFx0ICBUaGlzIGRyaXZlciBpbmNsdWRlIG9ubHkgdGhlIGNvcmUgQVBJcy4gWW91IGhhdmUgdG8gc2VsZWN0IGluZGl2aWR1YWxcbiBcdCAgY29tcG9uZW50cyBsaWtlIGNvZGVjcyBvciBSVEMgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuXG4gXG4rY29uZmlnIE1GRF9BQzIwMFxuK1x0dHJpc3RhdGUgXCJYLVBvd2VycyBBQzIwMFwiXG4rXHRkZXBlbmRzIG9uIEkyQ1xuK1x0ZGVwZW5kcyBvbiBPRlxuK1x0c2VsZWN0IFJFR01BUF9JMkNcbitcdGhlbHBcbitcdCAgU3VwcG9ydCBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwIG1peGVkLXNpZ25hbCBjb21wYW5pb24gSUMuIFRoZSBBQzIwMFxuK1x0ICBjb250YWlucyBhdWRpbywgdmlkZW8sIFJUQyBhbmQgRmFzdCBFdGhlcm5ldCBQSFkgZnVuY3Rpb25zIGFuZCBpc1xuK1x0ICBjby1wYWNrYWdlZCB3aXRoIHNvbWUgQWxsd2lubmVyIEg2IGFuZCBINjE2IFNvQ3MuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXG4rXHQgIHRoZSBzaGFyZWQgcmVnaXN0ZXIgYWNjZXNzIHVzZWQgYnkgdGhlIGluZGl2aWR1YWwgZnVuY3Rpb24gZHJpdmVycy5cbitcbiBjb25maWcgTUZEX0FYUDIwWFxuIFx0dHJpc3RhdGVcbiBcdHNlbGVjdCBNRkRfQ09SRVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcbmluZGV4IGRkNGJiN2U3N2MzMzYuLjg5MGU3NmE5YWQwMGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21mZC9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcbkBAIC0xNTAsNiArMTUwLDcgQEAgb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfU1BJKVx0Kz0gZGE5MDUyLXNwaS5vXG4gb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfSTJDKVx0Kz0gZGE5MDUyLWkyYy5vXG4gXG4gb2JqLSQoQ09ORklHX01GRF9BQzEwMClcdFx0Kz0gYWMxMDAub1xuK29iai0kKENPTkZJR19NRkRfQUMyMDApXHRcdCs9IGFjMjAwLm9cbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWClcdCs9IGF4cDIweC5vXG4gb2JqLSQoQ09ORklHX01GRF9BWFAyMFhfSTJDKVx0Kz0gYXhwMjB4LWkyYy5vXG4gb2JqLSQoQ09ORklHX01GRF9BWFAyMFhfUlNCKVx0Kz0gYXhwMjB4LXJzYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWMyMDAuYyBiL2RyaXZlcnMvbWZkL2FjMjAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43OThiYjQxNzNiMTRiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL21mZC9hYzIwMC5jXG5AQCAtMCwwICsxLDE3NiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIE1GRCBjb3JlIGRyaXZlciBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKlxuKyAqIEJhc2VkIG9uIHRoZSBBQzEwMCBkcml2ZXI6XG4rICogQ29weXJpZ2h0IChDKSAyMDE2IENoZW4tWXUgVHNhaVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuK1xuKyNkZWZpbmUgQUMyMDBfU1lTX1ZFUlNJT05fUkVHXHRcdFx0MHgwMDAwXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9QQUNLQUdFX01BU0tcdFx0R0VOTUFTSygxNSwgMTQpXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9DSElQX01BU0tcdFx0R0VOTUFTSygxMSwgMClcbitcbisjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDAwMlxuKyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVFx0QklUKDApXG4rXG4rLyogSW50ZXJmYWNlIHJlZ2lzdGVyIGFjY2Vzc2libGUgZnJvbSBldmVyeSByZWdpc3RlciBwYWdlLiAqL1xuKyNkZWZpbmUgQUMyMDBfVFdJX1JFR19BRERSX0hcdDB4MDBmZVxuKyNkZWZpbmUgQUMyMDBfTUFYX1JFR1x0XHQweGExZjJcbitcbitzdHJ1Y3QgYWMyMDAge1xuK1x0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhYzIwMF9zdXBwbGllc1tdID0ge1xuK1x0XCJhYy1sZG9pblwiLFxuK1x0XCJlcGh5LXZjY1wiLFxuK1x0XCJydGMtdmNjXCIsXG4rXHRcInR2LXZjY1wiLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2VfY2ZnIGFjMjAwX3JhbmdlX2NmZ1tdID0ge1xuK1x0e1xuK1x0XHQucmFuZ2VfbWF4ID0gQUMyMDBfTUFYX1JFRyxcbitcdFx0LnNlbGVjdG9yX3JlZyA9IEFDMjAwX1RXSV9SRUdfQUREUl9ILFxuK1x0XHQuc2VsZWN0b3JfbWFzayA9IDB4ZmYsXG4rXHRcdC53aW5kb3dfbGVuID0gMjU2LFxuK1x0fSxcbit9O1xuK1xuKy8qXG4rICogRWFjaCBBQzIwMCBzdWItYmxvY2sgY2FuIHJlc2V0IGluZGVwZW5kZW50bHksIGludmFsaWRhdGluZyBpdHMgcmVnaXN0ZXJcbisgKiBjb250ZW50cyB3aXRob3V0IHJlZ21hcCdzIGtub3dsZWRnZS4gQ2FjaGUgb25seSB0aGUgY29tbW9uIHBhZ2Ugc2VsZWN0b3I7XG4rICogdGhpcyBhdm9pZHMgYSBzZWxlY3RvciByZWFkLW1vZGlmeS13cml0ZSBmb3IgZXZlcnkgYWNjZXNzIG9uIHRoZSBzYW1lIHBhZ2VcbisgKiB3aXRob3V0IGV2ZXIgcmV0dXJuaW5nIHN0YWxlIGZ1bmN0aW9uYWwtcmVnaXN0ZXIgdmFsdWVzLlxuKyAqL1xuK3N0YXRpYyBib29sIGFjMjAwX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpXG4re1xuK1x0cmV0dXJuIHJlZyAhPSBBQzIwMF9UV0lfUkVHX0FERFJfSDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGFjMjAwX3JlZ21hcF9jb25maWcgPSB7XG4rXHQubmFtZSA9IFwiYWMyMDBcIixcbitcdC5yZWdfYml0cyA9IDgsXG4rXHQucmVnX3N0cmlkZSA9IDIsXG4rXHQudmFsX2JpdHMgPSAxNixcbitcdC5yYW5nZXMgPSBhYzIwMF9yYW5nZV9jZmcsXG4rXHQubnVtX3JhbmdlcyA9IEFSUkFZX1NJWkUoYWMyMDBfcmFuZ2VfY2ZnKSxcbitcdC5tYXhfcmVnaXN0ZXIgPSBBQzIwMF9NQVhfUkVHLFxuK1x0LnZvbGF0aWxlX3JlZyA9IGFjMjAwX3ZvbGF0aWxlX3JlZyxcbitcdC5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTUFQTEUsXG4rfTtcbitcbitzdGF0aWMgdm9pZCBhYzIwMF9kaXNhYmxlKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGFjMjAwICpkZGF0YSA9IGRhdGE7XG4rXG4rXHRyZWdtYXBfd3JpdGUoZGRhdGEtXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsIDApO1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2Y2xpZW50LVx1MDAzZWRldjtcbitcdHVuc2lnbmVkIGludCB2ZXJzaW9uO1xuK1x0c3RydWN0IGFjMjAwICpkZGF0YTtcbitcdHN0cnVjdCBjbGsgKmNsaztcbitcdGludCByZXQ7XG4rXG4rXHRkZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRhdGEpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZGRhdGEpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXRfZW5hYmxlKGRldiwgQVJSQVlfU0laRShhYzIwMF9zdXBwbGllcyksXG4rXHRcdFx0XHRcdCAgICAgYWMyMDBfc3VwcGxpZXMpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllc1xcblwiKTtcbitcbitcdGNsayA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKGNsaykpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihjbGspLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBlbmFibGUgaW5wdXQgY2xvY2tcXG5cIik7XG4rXG4rXHRyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxcblwiKTtcbitcbitcdGRkYXRhLVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgXHUwMDI2YWMyMDBfcmVnbWFwX2NvbmZpZyk7XG4rXHRpZiAoSVNfRVJSKGRkYXRhLVx1MDAzZXJlZ21hcCkpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZGF0YS1cdTAwM2VyZWdtYXApLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcFxcblwiKTtcbitcbitcdGkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRkYXRhKTtcbitcbitcdC8qXG4rXHQgKiBObyBtaW5pbXVtIGRlbGF5IGlzIGRvY3VtZW50ZWQuIE1hdGNoIHRoZSB2ZW5kb3IgZHJpdmVyJ3MgNDAgbXMgZGVsYXlcbitcdCAqIGJlZm9yZSBpdHMgZmlyc3QgQUMyMDAgcmVnaXN0ZXIgYWNjZXNzIGFmdGVyIGVuYWJsaW5nIHRoZSBpbnB1dCBjbG9jay5cbitcdCAqL1xuK1x0bXNsZWVwKDQwKTtcbitcbitcdHJldCA9IHJlZ21hcF9yZWFkKGRkYXRhLVx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX1ZFUlNJT05fUkVHLCBcdTAwMjZ2ZXJzaW9uKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byByZWFkIGNoaXAgdmVyc2lvblxcblwiKTtcbitcbitcdGRldl9pbmZvKGRldiwgXCJBQzIwMCByZXZpc2lvbiAlI2x4IGluIHBhY2thZ2UgJWx1XFxuXCIsXG4rXHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fQ0hJUF9NQVNLLCB2ZXJzaW9uKSxcbitcdFx0IEZJRUxEX0dFVChBQzIwMF9TWVNfVkVSU0lPTl9QQUNLQUdFX01BU0ssIHZlcnNpb24pKTtcbitcbitcdC8qIFJlc2V0IHRoZSBjaGlwIGFmdGVyIGRlcGVuZGVudCBmdW5jdGlvbiBkcml2ZXJzIGhhdmUgdW5ib3VuZC4gKi9cbitcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMjAwX2Rpc2FibGUsIGRkYXRhKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSByZWdtYXBfd3JpdGUoZGRhdGEtXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsIDApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQzIwMF9TWVNfQ09OVFJPTF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWMyMDBfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbit7XG4rXHRhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMjAwXCIgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYWMyMDBfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYzIwMF9pMmNfaWRzW10gPSB7XG4rXHR7IC5uYW1lID0gXCJhYzIwMFwiIH0sXG4rXHR7IH1cbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhYzIwMF9pMmNfaWRzKTtcbitcbitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWMyMDBfZHJpdmVyID0ge1xuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWUgPSBcImFjMjAwXCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLFxuK1x0fSxcbitcdC5wcm9iZSA9IGFjMjAwX3Byb2JlLFxuK1x0LnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sXG4rXHQuaWRfdGFibGUgPSBhYzIwMF9pMmNfaWRzLFxuK307XG4rbW9kdWxlX2kyY19kcml2ZXIoYWMyMDBfZHJpdmVyKTtcbitcbitNT0RVTEVfQVVUSE9SKFwiSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJYLVBvd2VycyBBQzIwMCBNRkQgY29yZSBkcml2ZXJcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuaW5kZXggYTI5ZDNmZWQ4YTA1My4uMjdiOGZmZTRiNTM5MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTQ3NSw2ICs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuK2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWVxuK1x0dHJpc3RhdGUgXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcIlxuK1x0ZGVwZW5kcyBvbiBDT01NT05fQ0xLIFx1MDAyNlx1MDAyNiBOVk1FTSBcdTAwMjZcdTAwMjYgT0ZfTURJTyBcdTAwMjZcdTAwMjYgUkVHVUxBVE9SXG4rXHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4rXHRzZWxlY3QgUEhZX1BBQ0tBR0VcbitcdGhlbHBcbitcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuK1x0ICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWVxuK1x0ICByZWdpc3RlcnMgYW5kIHRoZSBwYWNrYWdlLXNwZWNpZmljIEFDMjAwIEkyQyBvciBBQzMwMCBNRElPIGNvbnRyb2xcbitcdCAgcmVnaXN0ZXJzLlxuK1xuIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSVxuIFx0dHJpc3RhdGUgXCJYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyXCJcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IGUyM2RmNWU4MzZlOWUuLmI4YTUyZDgxZWFjNjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMCw0ICsxMDAsNyBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpXHRcdCs9IHNtc2Mub1xuIG9iai0kKENPTkZJR19TVEUxMFhQKVx0XHQrPSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQrPSB0ZXJhbmV0aWNzLm9cbiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpXHQrPSB2aXRlc3NlLm9cbit4cG93ZXJzLWFjeDAwLXlcdFx0XHQ6PSB4cG93ZXJzLWFjeDAwLW1haW4ubyB4cG93ZXJzLWFjeDAwLWFjMjAwLm8gXFxcbitcdFx0XHRcdCAgIHhwb3dlcnMtYWN4MDAtYWMzMDAub1xuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSlcdCs9IHhwb3dlcnMtYWN4MDAub1xuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgKz0geGlsaW54X2dtaWkycmdtaWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmM2OGY2NWIxN2Y2ZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMyMDAuY1xuQEAgLTAsMCArMSwzODggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhIFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cdTAwM2UpXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ4cG93ZXJzLWFjeDAwLmhcIlxuK1xuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVFx0M1xuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcdDI0MDAwMDAwXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbitcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXHRcdFx0MHgwMDE0XG4rI2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgwKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXHRcdFx0QklUKDEpXG4rXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1x0XHRcdDB4MDAxNlxuKyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4rXG4rLyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xuKyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcdFx0XHQweDgwMDRcbitcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1x0XHRcdDB4NjAwMFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRCSVQoMilcbisjZGVmaW5lIEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTS1x0XHRcdEdFTk1BU0soOCwgNClcbisjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbitcbitzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwge1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuK1x0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK1x0c3RydWN0IG11dGV4IGxvY2s7IC8qIFNlcmlhbGl6ZXMgcG93ZXIgc2VxdWVuY2luZyBhbmQgc3RhdGUuICovXG4rXHR1MTYgZXBoeV9jdGw7XG4rXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XG4rXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuK1x0Ym9vbCBwb3dlcmVkO1xuK307XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXG4rc3RhdGljIGJvb2wgYWMyMDBfZXBoeV9ub2RlX25lZWRzX3Byb2JlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbit7XG4rXHRjb25zdCBjaGFyICpzdGF0dXM7XG4rXG4rXHRyZXR1cm4gIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5vZGUsIFwic3RhdHVzXCIsIFx1MDAyNnN0YXR1cykgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgIXN0cmNtcChzdGF0dXMsIFwiZmFpbC1uZWVkcy1wcm9iZVwiKTtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2FkZF9lbmFibGVfcGF0aChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgb2ZfY2hhbmdlc2V0ICpvY3MsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4rXHRcdFx0XHQgICAgICBib29sICpjaGFuZ2VkKVxuK3tcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50O1xuK1x0aW50IHJldDtcbitcbitcdHBhcmVudCA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4rXHRpZiAocGFyZW50KSB7XG4rXHRcdHJldCA9IGFjMjAwX2VwaHlfYWRkX2VuYWJsZV9wYXRoKGRldiwgb2NzLCBwYXJlbnQsIGNoYW5nZWQpO1xuK1x0XHRvZl9ub2RlX3B1dChwYXJlbnQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAob2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWFjMjAwX2VwaHlfbm9kZV9uZWVkc19wcm9iZShub2RlKSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLFxuK1x0XHRcdFx0ICAgICBcIiVwT0YgaXMgdW5hdmFpbGFibGUgd2l0aG91dCBmYWlsLW5lZWRzLXByb2JlXFxuXCIsXG4rXHRcdFx0XHQgICAgIG5vZGUpO1xuK1xuK1x0cmV0ID0gb2ZfY2hhbmdlc2V0X3VwZGF0ZV9wcm9wX3N0cmluZyhvY3MsIG5vZGUsIFwic3RhdHVzXCIsIFwib2theVwiKTtcbitcdGlmICghcmV0KVxuK1x0XHQqY2hhbmdlZCA9IHRydWU7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfZW5hYmxlX3BhdGgoc3RydWN0IGRldmljZSAqZGV2LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4re1xuK1x0c3RydWN0IG9mX2NoYW5nZXNldCAqb2NzO1xuK1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b2NzID0ga3phbGxvY19vYmooKm9jcyk7XG4rXHRpZiAoIW9jcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRvZl9jaGFuZ2VzZXRfaW5pdChvY3MpO1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9hZGRfZW5hYmxlX3BhdGgoZGV2LCBvY3MsIG5vZGUsIFx1MDAyNmNoYW5nZWQpO1xuK1x0aWYgKHJldCB8fCAhY2hhbmdlZClcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdHJldCA9IG9mX2NoYW5nZXNldF9hcHBseShvY3MpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdC8qIEtlZXAgdGhlIGFwcGxpZWQgc3RhdHVzIHByb3BlcnRpZXMgYWxpdmUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRFQuICovXG4rXHRyZXR1cm4gMDtcbitcbitvdXRfZGVzdHJveTpcbitcdG9mX2NoYW5nZXNldF9kZXN0cm95KG9jcyk7XG4rXHRrZnJlZShvY3MpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rI2VuZGlmXG4rXG4rc3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY3RsIHxcbitcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4rXHRcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwiLFxuK1x0XHRcdHJlZywgRVJSX1BUUihyZXQpKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlcG93ZXJlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4rXHRcdFx0XHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuK1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4rXHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0ID0gZXJyO1xuK1x0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHJldCA9IGVycjtcbitcbitcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuK1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXG4rXHRcdFx0XHRcdCBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuK1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuK1xuK291dF91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdHUxNiBlcGh5X2N0bDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5X2FkZHIgXHUwMDNlIEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlcGh5X2FkZHIgPT0gcGh5X2FkZHIpIHtcbitcdFx0cmV0ID0gMDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcdHByaXYtXHUwMDNlcGh5X2FkZHIgPSBwaHlfYWRkcjtcbitcbitcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xuK1xuK1x0LyogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gKi9cbitcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRyxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuK1x0XHRcdFx0ICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuK1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0Z290byBvdXRfdW5sb2NrO1xuK1xuK2Vycl9kaXNhYmxlOlxuK1x0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0YWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChwcml2KTtcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsXG4rXHRcdCAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHR1bnNpZ25lZCBpbnQgaW50ZXJuYWxfY2FsaWJyYXRpb247XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmFjMjAwX25vZGU7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7XG4rXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50O1xuK1x0dW5zaWduZWQgbG9uZyBjbGtfcmF0ZTtcbitcdHU4IGJwc19lZmZ1c2VfY29kZTtcbitcdHN0cnVjdCBjbGsgKmNsaztcbitcdGludCByZXQ7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0cHJpdi1cdTAwM2VkZXYgPSBkZXY7XG4rXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXG4rXHRhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsIFwieC1wb3dlcnMsYWMyMDBcIiwgMCk7XG4rXHRpZiAoIWFjMjAwX25vZGUpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwibWlzc2luZyB4LXBvd2VycyxhYzIwMCByZWZlcmVuY2VcXG5cIikpO1xuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9EWU5BTUlDKVxuK1x0cmV0ID0gYWMyMDBfZXBoeV9lbmFibGVfcGF0aChkZXYsIGFjMjAwX25vZGUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcdH1cbisjZW5kaWZcbitcbitcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xuK1x0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XG4rXHRpZiAoIWNsaWVudCkge1xuK1x0XHRyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7XG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXG5cIikpO1xuK1x0fVxuK1xuK1x0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZjbGllbnQtXHUwMDNlZGV2LFxuK1x0XHRcdCAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbitcdH1cbitcbitcdGlmICghZGV2aWNlX3RyeWxvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXG4rXHRcdFx0XHQgICAgXCJBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0aWYgKGRldmljZV9pc19ib3VuZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2KSlcbitcdFx0cHJpdi1cdTAwM2VyZWdtYXAgPSBkZXZfZ2V0X3JlZ21hcChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdGRldmljZV91bmxvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4rXHRpZiAoIXByaXYtXHUwMDNlcmVnbWFwKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLFxuK1x0XHRcdFx0ICAgIFwiQUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwiKTtcbitcdFx0Z290byBvdXRfZXJyb3I7XG4rXHR9XG4rXG4rXHRpZiAoIWhhc19jYWxpYnJhdGlvbikge1xuK1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXG4rXHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9lcnJvcjtcbitcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdH1cbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY3RsID1cbitcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdGNsayA9IGNsa19nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKGNsaykpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihjbGspO1xuK1x0XHRnb3RvIG91dF9lcnJvcjtcbitcdH1cbitcbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4rXHRjbGtfcHV0KGNsayk7XG4rXG4rXHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4rXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuK1x0XHRwcml2LVx1MDAzZWVwaHlfY3RsIHw9IEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxuXCIsXG4rXHRcdFx0XHQgICAgY2xrX3JhdGUpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuK1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rXG4rb3V0X2Vycm9yOlxuK1x0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxuXCIpO1xuK291dF9wdXRfY2xpZW50OlxuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzMwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzBhOTBiN2E4NWE3OVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMzMDAuY1xuQEAgLTAsMCArMSw0MDQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInBoeWxpYi5oXCJcbisjaW5jbHVkZSBcInhwb3dlcnMtYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXHQzXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaXHQyNTAwMDAwMFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcdFx0XHQweDAwXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1x0XHRcdEdFTk1BU0soNywgNilcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcbisjZGVmaW5lIEFDMzAwX0VGVVNFX0NMS19FTkFCTEVcdFx0XHRCSVQoNSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcdFx0QklUKDQpXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXHRcdEJJVCgyKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMSlcbisjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXHRcdEJJVCgzKVxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXHRcdEdFTk1BU0soMiwgMClcbitcbisjZGVmaW5lIEFDMzAwX1NZU19CSUFTMV9SRUdcdFx0XHQweDAyXG4rI2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVx0XHRCSVQoMTUpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXHRcdFx0MHgwNVxuKyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTUsIDE0KVxuKyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxMSwgMTApXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlx0XHRcdDJcbisjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEVcdFx0XHRCSVQoNClcbisjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHXHRcdFx0MHgwNlxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcbitcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcXFxuK1x0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXFxcbitcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSlcbitcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcdHN0cnVjdCBjbGsgKmNsaztcbitcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBTZXJpYWxpemVzIHBvd2VyIHNlcXVlbmNpbmcgYW5kIHN0YXRlLiAqL1xuK1x0dTE2IHN5c19jb250cm9sO1xuK1x0dTE2IGVwaHlfY29uZmlnO1xuK1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbitcdGJvb2wgcGFja2FnZV9rbm93bjtcbitcdGJvb2wgaW50ZXJuYWxfZGxkbztcbitcdGJvb2wgcG93ZXJlZDtcbit9O1xuK1xuK3N0YXRpYyB1bnNpZ25lZCBpbnRcbithYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcmVhZChzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuK1x0XHRcdFx0dTE2IHZhbClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdCAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0sIHZhbCk7XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbitcdFx0XHRcdCB1MTYgbWFzaywgdTE2IHNldClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4rXHRcdHUxNiB2YWwgPSAocmV0IFx1MDAyNiB+bWFzaykgfCAoc2V0IFx1MDAyNiBtYXNrKTtcbitcbitcdFx0cmV0ID0gdmFsID09IHJldCA/IDAgOlxuK1x0XHRcdF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsXG4rXHRcdFx0XHRcdCAgICByZWdudW0sIHZhbCk7XG4rXHR9XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2NvbmZpZyB8XG4rXHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdCBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rfVxuK1xuK3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdC8qXG4rXHQgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZFxuK1x0ICogdGhlIHN1cHBseSBhcnJhbmdlbWVudCwgcHJlc2VydmUgYW55IGV4dGVybmFsLVZERCBzZXR1cCBsZWZ0IGJ5IHRoZVxuK1x0ICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC5cbitcdCAqL1xuK1x0cmV0dXJuICFwcml2LVx1MDAzZXBhY2thZ2Vfa25vd24gfHwgIXByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4rXHRcdEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQgOiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdGludCBlcnI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4rXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcbitcdGlmICghcmV0KVxuK1x0XHRyZXQgPSBlcnI7XG4rXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0ID0gZXJyO1xuK1xuK1x0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbitcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuK1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcbitcdFx0XHRcdFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4rXG4rb3V0X3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxuK3tcbitcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuK1x0dTggcGFja2FnZV9zdGF0dXM7XG4rXHR1MTYgcmVzZXRfdmFsdWU7XG4rXHRpbnQgc3lzX2NvbnRyb2w7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeV9hZGRyICE9IGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4rXHRcdHJldCA9IDA7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVx1MDAzZWNsayk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1xuK1x0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xuK1x0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuK1x0XHRcdFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIHByaXYtXHUwMDNlc3lzX2NvbnRyb2wpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XG4rXHRpZiAoc3lzX2NvbnRyb2wgXHUwMDNjIDApIHtcbitcdFx0cmV0ID0gc3lzX2NvbnRyb2w7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcbitcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XG4rXHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xuK1x0cHJpdi1cdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLFxuK1x0XHRcdFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxuK1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbitcdFx0XHRcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxuK1x0XHRcdFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuK1x0XHRcdFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0Z290byBvdXRfdW5sb2NrO1xuK1xuK2Vycl9wb3dlcl9vZmY6XG4rXHRhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuK291dF91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjMzAwX2VwaHlfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSlcbit7XG4rXHRyZWd1bGF0b3JfZGlzYWJsZShkYXRhKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4re1xuK1x0Y2xrX3B1dChkYXRhKTtcbit9XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjMTtcbitcdHU4IGJnc19lZmZ1c2VfY29kZTtcbitcdGludCByZXQ7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgXHUwMDNlIEZJRUxEX01BWChBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdFx0ICAgICBcImxpbmsgYWRkcmVzcyBpcyBvdXRzaWRlIHRoZSBwYWNrYWdlIHJhbmdlXFxuXCIpKTtcbitcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1xuK1x0dmNjMSA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCJ2Y2MxXCIpO1xuK1x0aWYgKElTX0VSUih2Y2MxKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIodmNjMSksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IFZDQzEgc3VwcGx5XFxuXCIpKTtcbitcbitcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUodmNjMSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGVuYWJsZSBWQ0MxIHN1cHBseVxcblwiKSk7XG4rXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X3JlZ3VsYXRvcl9kaXNhYmxlLFxuK1x0XHRcdFx0ICAgICAgIHZjYzEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRwcml2LVx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VjbGspKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWNsayksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxuXCIpKTtcbitcbitcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXHUwMDNlY2xrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxuXCIpKTtcbitcbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbitcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwidW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cIixcbitcdFx0XHRcdFx0ICAgICBjbGtfcmF0ZSkpO1xuK1x0fVxuK1x0cHJpdi1cdTAwM2VzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUztcbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY29uZmlnID1cbitcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbitcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbitcdC8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi9cbitcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI3N2M2MTY5ODIxYzNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uY1xuQEAgLTAsMCArMSw1MzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L252bWVtLWNvbnN1bWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInBoeWxpYi5oXCJcbisjaW5jbHVkZSBcInhwb3dlcnMtYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0lEXHRcdFx0XHQweDAwNDQxNDAwXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLXHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXHRcdEJJVCg4KVxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbitcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1x0XHRcdDB4MWZcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRV8wXHRcdFx0XHQwXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzFcdFx0XHRcdDFcbisjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuKyNkZWZpbmUgQUNYMDBfUEFHRV82XHRcdFx0XHQ2XG4rI2RlZmluZSBBQ1gwMF9QQUdFXzhcdFx0XHRcdDhcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXHRCSVQoMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE9cdFx0MlxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRVx0MHg0ODI0XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHXHQweDE3XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXHRCSVQoMylcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXHRcdDB4MTBcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXHRcdDB4ZjAwMFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuKyNkZWZpbmUgQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVx0MHg3MDhmXG4rI2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGJcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFR1x0XHRcdDB4MTVcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoXzEwMG0sIF8xMG0pIFxcXG4rXHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcbitcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcXFxuK1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbitcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUVcdFx0MHgwMGJjXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1x0XHQweDFkXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFNcdDB4MDA0NFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXG4rXHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4rXHQgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUylcbitcbisvKlxuKyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvclxuKyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxuKyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4rICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuXG4rICovXG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbitcdGJvb2wgaXNfYWMzMDA7XG4rXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuK1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuK307XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRwaHlkZXZfd2Fybihwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcblwiLFxuK1x0XHRcdCAgICBFUlJfUFRSKHJldCkpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuK1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuK1x0c2l6ZV90IGk7XG4rXHRzaXplX3QgbGVuO1xuK1x0dTggKmJ1ZjtcbitcdHUxNiB2YWwgPSAwO1xuK1xuK1x0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xuK1x0aWYgKElTX0VSUihjZWxsKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoY2VsbCk7XG4rXG4rXHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbitcdG52bWVtX2NlbGxfcHV0KGNlbGwpO1xuK1x0aWYgKElTX0VSUihidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuK1x0aWYgKCFsZW4gfHwgbGVuIFx1MDAzZSBzaXplb2YoKnZhbHVlKSkge1xuK1x0XHRrZnJlZShidWYpO1xuK1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKylcbitcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuK1x0a2ZyZWUoYnVmKTtcbitcdCp2YWx1ZSA9IHZhbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuK1x0Ym9vbCBzZWxlY3RhYmxlO1xuK1x0Ym9vbCBmaXhlZF9hYzMwMDtcbitcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XG4rXHR1OCBjYWxpYnJhdGlvbjtcbitcdHUzMiBiYXNlX2FkZHI7XG4rXHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJQSFkgaXMgbm90IGluIGFuIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCJyZWdcIiwgXHUwMDI2YmFzZV9hZGRyKTtcbitcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRpZiAoIXNlbGVjdGFibGUgXHUwMDI2XHUwMDI2ICFmaXhlZF9hYzMwMCBcdTAwMjZcdTAwMjZcbitcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiKSkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcbitcdGhhc19jb25maWd1cmF0aW9uID1cbitcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCJudm1lbS1jZWxsLW5hbWVzXCIsXG4rXHRcdFx0XHRcdCBcImNvbmZpZ3VyYXRpb25cIikgXHUwMDNlPSAwO1xuK1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4rXHRcdHJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCBcImNvbmZpZ3VyYXRpb25cIixcbitcdFx0XHRcdFx0XHRcdTAwMjZjb25maWd1cmF0aW9uKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwicGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdGlmIChzZWxlY3RhYmxlKSB7XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuK1x0XHRcdGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDA7XG4rXHR9IGVsc2Uge1xuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4rXHRcdGlmIChoYXNfY29uZmlndXJhdGlvbiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XG4rXHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4rXHRcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICBcImNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbitcdFx0XHRcdGNvbmZpZ3VyYXRpb24pO1xuK1xuK1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2XG4rXHRcdCEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XG4rXHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuK1x0XHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICAgXCJ4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCIpO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4rXHRlbHNlXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBoYXNfY29uZmlndXJhdGlvbixcbitcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuK1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4rXG4rb3V0X3B1dF9ub2RlOlxuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VvZl9ub2RlKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbitcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxuXCIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXG4rXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4rXHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuK1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuK1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbitcdHUxNiBnbG9iYWxfY29uZmlnO1xuK1x0aW50IG9sZHBhZ2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSyxcbitcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuK1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbitcdFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuK1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbitcdFx0dHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFO1xuK1x0fVxuK1xuK1x0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XG4rXHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuK1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBhZmVfZXFfcnhfZGV0ZWN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzgpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRyxcbitcdFx0XHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcbitcbitvdXRfcmVzdG9yZV9wYWdlOlxuK1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbitcdHJldHVybiBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cbitcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJlc3VtZV9yZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rXHRcdGlmIChyZXN1bWVfcmV0KVxuK1x0XHRcdHBoeWRldl93YXJuKHBoeWRldixcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgbWF0Y2g7XG4rXG4rXHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikgfHxcbitcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHRcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiKSB8fFxuK1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcbitcdFx0Lm5hbWUgPSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcIixcbitcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4rXHRcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXG4rXHRcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcbitcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4rXHRcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxuK1x0XHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxuK1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbitcdFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcbitcdH0sXG4rfTtcbittb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xuK1x0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLmhcbkBAIC0wLDAgKzEsMjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbisjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbitcbitzdHJ1Y3QgZGV2aWNlX25vZGU7XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XG4rXHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuK1x0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcbitcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbit9O1xuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA2OjIyOjU2LjIzOTIzODAzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDgwODc2NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBYLVBvd2VycyBBQzIwMC9BQzMwMCBQSFkgRHJpdmVycyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWXMsIGFsb25nIHdpdGggYSBuZXcgTUZEIGRyaXZlciBmb3IgdGhlIEFDMjAwLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyByZWFjaGFiaWxpdHkgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgUUVNVSwgd2hpY2ggaXMgd2hhdCBzeXprYWxsZXIgdHlwaWNhbGx5IHVzZXMuXG5cblRoZSBBQzIwMCBNRkQgZHJpdmVyIGlzIEkyQy1iYXNlZCwgYW5kIHRoZSBQSFkgZHJpdmVyIGlzIE1ESU8tYmFzZWQuIEkga25vdyB0aGF0LCBpbiBnZW5lcmFsLCBJMkMgYW5kIE1ESU8gZGV2aWNlcyBhcmVuJ3QgdHJpdmlhbGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2UgbmVlZCBhbiBlbXVsYXRlZCBJMkMvTURJTyBjb250cm9sbGVyLCBvciBhdCBsZWFzdCBhY2Nlc3MgdmlhIGBpMmMtZGV2YCBvciBgbWRpby1kZXZgLiBTeXprYWxsZXIgKmNhbiogZnV6eiBJMkMgdmlhIGAvZGV2L2kyYy0qYCwgYnV0IGl0IGRvZXNuJ3QgbmF0aXZlbHkgdGFyZ2V0IHNwZWNpZmljIEkyQyBjbGllbnQgZHJpdmVycyB1bmxlc3MgdGhleSBleHBvc2UgY2hhcmFjdGVyIGRldmljZXMuIEFuZCwgd2hpbGUgc3l6a2FsbGVyIGhhcyBzb21lIEkyQyBzdXBwb3J0LCB0aGVyZSdzIG5vIGdlbmVyaWMgTURJTyBmdXp6ZXIuIFNvLCB0aGF0J3Mgbm90IGxvb2tpbmcgcHJvbWlzaW5nLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENhbiB3ZSBpbnN0YW50aWF0ZSB0aGVzZSBkZXZpY2VzPyBJMkMgZGV2aWNlcyAqY2FuKiBiZSBpbnN0YW50aWF0ZWQgdmlhIHN5c2ZzLCBzbyB0aGF0J3Mgc29tZXRoaW5nLiBCdXQgTURJTyBkZXZpY2VzPyBUeXBpY2FsbHksIFBIWXMgYXJlIGluc3RhbnRpYXRlZCBlaXRoZXIgYnkgdGhlIE1BQyBkcml2ZXIsIG9yIHZpYSBhIGRldmljZSB0cmVlLiBDYW4gd2UgZXZlbiBpbmplY3QgdGhvc2Ugbm9kZXM/IE5vLCBzeXprYWxsZXIgZG9lc24ndCBzdXBwb3J0IGR5bmFtaWMgZGV2aWNlIHRyZWUgb3ZlcmxheSBpbmplY3Rpb24uIFNvLCBhbHJlYWR5LCB0aGF0J3MgYSBiaWcgcmVkIGZsYWcuXG5cbkxldCdzIGxvb2sgY2xvc2VyIGF0IHRoZSBkcml2ZXJzLiBUaGUgTUZEIGRyaXZlciwgYGFjMjAwLmNgLCBpcyBhbiBJMkMgZHJpdmVyLCBhbmQgaXRzIHByb2JlIGZ1bmN0aW9uIHJ1bnMuIEl0IHVzZXMgYGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0X2VuYWJsZWAsIHdoaWNoIGNvdWxkIGZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcmlnaHQgcmVndWxhdG9ycy4gSXQgYWxzbyBnZXRzIGEgY2xvY2sgdmlhIGBkZXZtX2Nsa19nZXRfZW5hYmxlZGAsIHdoaWNoIHdpbGwgbGlrZWx5IGZhaWwgd2l0aG91dCBhIHNwZWNpZmljIGNsb2NrIGluIHRoZSBkZXZpY2UgdHJlZS4gU28sIGV2ZW4gZ2V0dGluZyAqcGFzdCogdGhlIHByb2JlIGZ1bmN0aW9uIGxvb2tzIGNoYWxsZW5naW5nIHdpdGhvdXQgYSBzcGVjaWZpYyBkZXZpY2UgdHJlZS5cblxuVGhlIFBIWSBkcml2ZXIgaGFzIHNpbWlsYXIgY2hhbGxlbmdlcy4gSXRzIG1hdGNoIGZ1bmN0aW9uLCBgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlYCwgY2hlY2tzIGZvciBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MgZnJvbSBhIHBhY2thZ2Ugbm9kZSBhbmQgY29tcGF0aWJsZSBzdHJpbmdzLiBUaGVzZSBhcmUgZXhwbGljaXQgZGV2aWNlIHRyZWUgZGVwZW5kZW5jaWVzLiBUaGlzIHdvbid0IHdvcmsgaW4gYSBnZW5lcmljIFFFTVUgZW52aXJvbm1lbnQg4oCTIHRoZXJlJ3Mgbm8gZGV2aWNlIHRyZWUgd2l0aCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLiBBbmQsIGxvb2tpbmcgYXQgdGhlIHByb2JlIGZ1bmN0aW9uIGl0c2VsZiwgaXQgYWxzbyBleHBsaWNpdGx5IGNoZWNrcyBgZGV2LVx1MDAzZW9mX25vZGVgLCBtZWFuaW5nIGEgZGV2aWNlIHRyZWUgKmlzKiByZXF1aXJlZC5cblxuSSBzZWUgdGhhdCBgTUZEX0FDMjAwYCBkZXBlbmRzIG9uIGBPRmAgaW4gS2NvbmZpZywgYW5kIGBYUE9XRVJTX0FDWDAwX1BIWWAgZGVwZW5kcyBvbiBgT0ZfTURJT2AsIGBDT01NT05fQ0xLYCwgYW5kIGBSRUdVTEFUT1JgLiBUaGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbiDigJMgaXQncyBhbGwgZGV2aWNlIHRyZWUgYW5kIGhhcmR3YXJlLWRlcGVuZGVudC4gU2luY2UgdGhlc2UgZHJpdmVycyBhcmUgc28gdGlnaHRseSBjb3VwbGVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBkZWZpbmVkIGluIHRoZSBkZXZpY2UgdHJlZSwgYW5kIHdlIGNhbid0IGluamVjdCB0aG9zZSBub2RlcyBkeW5hbWljYWxseSwgaXQncyB2aXJ0dWFsbHkgaW1wb3NzaWJsZSB0byByZWFjaCB0aG9zZSBjb2RlIHBhdGhzIGluIGEgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwLlxuXG5UaGVyZWZvcmUsIEknbSBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpc24ndCB3b3J0aCBmdXp6aW5nLiBJJ2xsIHN1bW1hcml6ZSB0aGUgcmVhc29uaW5nOiBUaGUgZHJpdmVycyBhcmUgaGVhdmlseSBkZXBlbmRlbnQgb24gdGhlIGRldmljZSB0cmVlLCB3aGljaCBpcyBub3QgZWFzaWx5IGVtdWxhdGVkIG9yIGluamVjdGVkLlxuSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM1OCwiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDY6MjM6MzEuNzIwMTE4MDU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFlzIGFuZCB0aGUgQUMyMDAgTUZELiBUaGVzZSBkcml2ZXJzIGFyZSBoZWF2aWx5IGRlcGVuZGVudCBvbiBEZXZpY2UgVHJlZSAoT0YpIGZvciBwcm9iaW5nIGFuZCBjb25maWd1cmF0aW9uIChlLmcuLCBjaGVja2luZyBmb3Igc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmdzIGFuZCBgZGV2LVxcdTAwM2VvZl9ub2RlYCkuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdXNlZCBmb3IgZnV6emluZyBkbyBub3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIG5vZGVzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFlzIGFuZCB0aGUgQUMyMDAgTUZELiBUaGVzZSBkcml2ZXJzIGFyZSBoZWF2aWx5IGRlcGVuZGVudCBvbiBEZXZpY2UgVHJlZSAoT0YpIGZvciBwcm9iaW5nIGFuZCBjb25maWd1cmF0aW9uIChlLmcuLCBjaGVja2luZyBmb3Igc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmdzIGFuZCBgZGV2LVxcdTAwM2VvZl9ub2RlYCkuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdXNlZCBmb3IgZnV6emluZyBkbyBub3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIG5vZGVzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6wl8w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 06:21:02 +0000 UTC FinishedAt: 2026-08-07 06:23:32 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDA2OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWXMgYW5kIHRoZSBBQzIwMCBNRkQuIFRoZXNlIGRyaXZlcnMgYXJlIGhlYXZpbHkgZGVwZW5kZW50IG9uIERldmljZSBUcmVlIChPRikgZm9yIHByb2JpbmcgYW5kIGNvbmZpZ3VyYXRpb24gKGUuZy4sIGNoZWNraW5nIGZvciBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MgYW5kIGBkZXYtXHUwMDNlb2Zfbm9kZWApLiBTaW5jZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHVzZWQgZm9yIGZ1enppbmcgZG8gbm90IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBvciBkZXZpY2UgdHJlZSBub2RlcywgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyYzEzMTM5ZDI4YjY3YTYzMTM5YjA2ZWQxZDcwYWM1ZjViZDI3ZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDA2OjIyOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI3ZThkOWJkNTY2MWFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxuQEAgLTAsMCAmIzQzOzEsNjkgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIElDXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIFRoZSBBQzIwMCBpcyBhIG1peGVkLXNpZ25hbCBjb21wYW5pb24gSUMgY29udGFpbmluZyBhdWRpbywgdmlkZW8sIFJUQyBhbmRcbiYjNDM7ICBGYXN0IEV0aGVybmV0IFBIWSBmdW5jdGlvbnMuIEl0cyBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgb3ZlciBJMkMuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBjb25zdDogeC1wb3dlcnMsYWMyMDBcbiYjNDM7XG4mIzQzOyAgcmVnOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgY2xvY2tzOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBBQzIwMCBpbnB1dCBjbG9jay4gV2hlbiB1c2luZyB0aGUgRXRoZXJuZXQgUEhZLCBpdHMgY29uZmlndXJlZCByYXRlIG11c3RcbiYjNDM7ICAgICAgYmUgMjQgb3IgMjcgTUh6LCBtYXRjaGluZyB0aGUgcmF0ZXMgZW5jb2RlZCBieSB0aGUgZG9jdW1lbnRlZCBFUEhZIGNsb2NrXG4mIzQzOyAgICAgIHNlbGVjdG9yLlxuJiM0MztcbiYjNDM7ICBhYy1sZG9pbi1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgYXVkaW8tY29kZWMgTERPIGlucHV0XG4mIzQzO1xuJiM0MzsgIGVwaHktdmNjLXN1cHBseTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZFxuJiM0MztcbiYjNDM7ICBydGMtdmNjLXN1cHBseTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBSVENcbiYjNDM7XG4mIzQzOyAgdHYtdmNjLXN1cHBseTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBUViBlbmNvZGVyIERBQ1xuJiM0MztcbiYjNDM7cmVxdWlyZWQ6XG4mIzQzOyAgLSBjb21wYXRpYmxlXG4mIzQzOyAgLSByZWdcbiYjNDM7ICAtIGNsb2Nrc1xuJiM0MzsgIC0gYWMtbGRvaW4tc3VwcGx5XG4mIzQzOyAgLSBlcGh5LXZjYy1zdXBwbHlcbiYjNDM7ICAtIHJ0Yy12Y2Mtc3VwcGx5XG4mIzQzOyAgLSB0di12Y2Mtc3VwcGx5XG4mIzQzO1xuJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgaTJjIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBtaXhlZC1zaWduYWxAMTAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7eC1wb3dlcnMsYWMyMDBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4MTBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBhYy1sZG9pbi1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBlcGh5LXZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBydGMtdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHR2LXZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuJiM0MzsuLi5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIyYmRkYzdhMmY5NDFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcbkBAIC0wLDAgJiM0MzsxLDIwOCBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiYjNDM7JVlBTUwgMS4yXG4mIzQzOy0tLVxuJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjpcbiYjNDM7ICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XG4mIzQzOyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZVxuJiM0MzsgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBwYXJ0IG9mIGFuIEkyQyBNRkQsXG4mIzQzOyAgd2hpbGUgQUMzMDAgY29udHJvbCByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2XG4mIzQzOyAgcGx1cyB0aGUgbGluayBQSFkgYWRkcmVzcy5cbiYjNDM7XG4mIzQzOyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS5cbiYjNDM7ICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxuJiM0MzsgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLlxuJiM0MztcbiYjNDM7ICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcbiYjNDM7ICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kXG4mIzQzOyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50b1xuJiM0MzsgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxuJiM0MztcbiYjNDM7c2VsZWN0OlxuJiM0MzsgIHByb3BlcnRpZXM6XG4mIzQzOyAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICBlbnVtOlxuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MzsgIHJlcXVpcmVkOlxuJiM0MzsgICAgLSBjb21wYXRpYmxlXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhpbXVtOiAzMVxuJiM0MztcbiYjNDM7ICBjbG9ja3M6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6LiBUaGUgQUMyMDAgaW5wdXQgY2xvY2tcbiYjNDM7ICAgICAgYmVsb25ncyB0byB0aGUgcmVmZXJlbmNlZCBBQzIwMCBNRkQgaW5zdGVhZC5cbiYjNDM7XG4mIzQzOyAgdmNjMS1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgMy4zIFYgc3VwcGx5IGZvciB0aGUgQUMzMDAgSS9PLCBiYW5kZ2FwLCBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZCxcbiYjNDM7ICAgICAgYW5kIGludGVybmFsIGRpZ2l0YWwgTERPXG4mIzQzO1xuJiM0MzsgIG52bWVtLWNlbGxzOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xuJiM0MzsgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxuJiM0MzsgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxuJiM0MzsgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxuJiM0MzsgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxuJiM0MzsgICAgICBjb3B5IGluc3RlYWQuXG4mIzQzO1xuJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6XG4mIzQzOyAgICBjb25zdDogY29uZmlndXJhdGlvblxuJiM0MztcbiYjNDM7ICB4LXBvd2VycyxhYzIwMDpcbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOiBSZWZlcmVuY2UgdG8gdGhlIEFDMjAwIE1GRCBjb250YWluaW5nIHRoaXMgRXRoZXJuZXQgUEhZXG4mIzQzO1xuJiM0MzsgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XG4mIzQzOyAgICB0eXBlOiBib29sZWFuXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxuJiM0MzsgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxuJiM0MztcbiYjNDM7cGF0dGVyblByb3BlcnRpZXM6XG4mIzQzOyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSYjNDM7JDpcbiYjNDM7ICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xuJiM0MzsgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXG4mIzQzOyAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgLSBjb21wYXRpYmxlXG4mIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7XG4mIzQzO2RlcGVuZGVudFJlcXVpcmVkOlxuJiM0MzsgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXVxuJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6IFsgbnZtZW0tY2VsbHMgXVxuJiM0MztcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY2xvY2tzOiBmYWxzZVxuJiM0MzsgICAgICAgIHZjYzEtc3VwcGx5OiBmYWxzZVxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByZWc6XG4mIzQzOyAgICAgICAgICBtYXhpbXVtOiA3XG4mIzQzOyAgICAgICAgeC1wb3dlcnMsYWMyMDA6IGZhbHNlXG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0gY2xvY2tzXG4mIzQzOyAgICAgICAgLSB2Y2MxLXN1cHBseVxuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHNcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIHJlZzpcbiYjNDM7ICAgICAgICAgIG1heGltdW06IDdcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSBjbG9ja3NcbiYjNDM7ICAgICAgICAtIHZjYzEtc3VwcGx5XG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZwd20gNVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgdmNjMS1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwmIzM0O2NvbmZpZ3VyYXRpb25cJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHgtcG93ZXJzLGFjMjAwID0gXHUwMDNjXHUwMDI2YWMyMDBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7XG4mIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB2Y2MxLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuJiM0MztcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIG1kaW8ge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDEge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSBcdTAwM2NcdTAwMjZhYzIwMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDEge1xuJiM0MzsgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG4mIzQzOy4uLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnXG5pbmRleCA3NjNjZTZhMzQ3ODJiLi40OTkyNjljODU4MTI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZmQvS2NvbmZpZ1xuQEAgLTIwNSw2ICYjNDM7MjA1LDE3IEBAIGNvbmZpZyBNRkRfQUMxMDBcbiBcdCAgVGhpcyBkcml2ZXIgaW5jbHVkZSBvbmx5IHRoZSBjb3JlIEFQSXMuIFlvdSBoYXZlIHRvIHNlbGVjdCBpbmRpdmlkdWFsXG4gXHQgIGNvbXBvbmVudHMgbGlrZSBjb2RlY3Mgb3IgUlRDIHVuZGVyIHRoZSBjb3JyZXNwb25kaW5nIG1lbnVzLlxuIFxuJiM0Mztjb25maWcgTUZEX0FDMjAwXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7WC1Qb3dlcnMgQUMyMDBcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQ1xuJiM0MztcdGRlcGVuZHMgb24gT0ZcbiYjNDM7XHRzZWxlY3QgUkVHTUFQX0kyQ1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFN1cHBvcnQgZm9yIHRoZSBYLVBvd2VycyBBQzIwMCBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDLiBUaGUgQUMyMDBcbiYjNDM7XHQgIGNvbnRhaW5zIGF1ZGlvLCB2aWRlbywgUlRDIGFuZCBGYXN0IEV0aGVybmV0IFBIWSBmdW5jdGlvbnMgYW5kIGlzXG4mIzQzO1x0ICBjby1wYWNrYWdlZCB3aXRoIHNvbWUgQWxsd2lubmVyIEg2IGFuZCBINjE2IFNvQ3MuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXG4mIzQzO1x0ICB0aGUgc2hhcmVkIHJlZ2lzdGVyIGFjY2VzcyB1c2VkIGJ5IHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9uIGRyaXZlcnMuXG4mIzQzO1xuIGNvbmZpZyBNRkRfQVhQMjBYXG4gXHR0cmlzdGF0ZVxuIFx0c2VsZWN0IE1GRF9DT1JFXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvTWFrZWZpbGUgYi9kcml2ZXJzL21mZC9NYWtlZmlsZVxuaW5kZXggZGQ0YmI3ZTc3YzMzNi4uODkwZTc2YTlhZDAwYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9NYWtlZmlsZVxuQEAgLTE1MCw2ICYjNDM7MTUwLDcgQEAgb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfU1BJKVx0JiM0Mzs9IGRhOTA1Mi1zcGkub1xuIG9iai0kKENPTkZJR19NRkRfREE5MDUyX0kyQylcdCYjNDM7PSBkYTkwNTItaTJjLm9cbiBcbiBvYmotJChDT05GSUdfTUZEX0FDMTAwKVx0XHQmIzQzOz0gYWMxMDAub1xuJiM0MztvYmotJChDT05GSUdfTUZEX0FDMjAwKVx0XHQmIzQzOz0gYWMyMDAub1xuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYKVx0JiM0Mzs9IGF4cDIweC5vXG4gb2JqLSQoQ09ORklHX01GRF9BWFAyMFhfSTJDKVx0JiM0Mzs9IGF4cDIweC1pMmMub1xuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX1JTQilcdCYjNDM7PSBheHAyMHgtcnNiLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYzIwMC5jIGIvZHJpdmVycy9tZmQvYWMyMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5OGJiNDE3M2IxNGJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWZkL2FjMjAwLmNcbkBAIC0wLDAgJiM0MzsxLDE3NiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIE1GRCBjb3JlIGRyaXZlciBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyBcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICpcbiYjNDM7ICogQmFzZWQgb24gdGhlIEFDMTAwIGRyaXZlcjpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE2IENoZW4tWXUgVHNhaVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9SRUdcdFx0XHQweDAwMDBcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9QQUNLQUdFX01BU0tcdFx0R0VOTUFTSygxNSwgMTQpXG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX1ZFUlNJT05fQ0hJUF9NQVNLXHRcdEdFTk1BU0soMTEsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDAwMlxuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX0NISVBfUkVTRVRfREVBU1NFUlRcdEJJVCgwKVxuJiM0MztcbiYjNDM7LyogSW50ZXJmYWNlIHJlZ2lzdGVyIGFjY2Vzc2libGUgZnJvbSBldmVyeSByZWdpc3RlciBwYWdlLiAqL1xuJiM0MzsjZGVmaW5lIEFDMjAwX1RXSV9SRUdfQUREUl9IXHQweDAwZmVcbiYjNDM7I2RlZmluZSBBQzIwMF9NQVhfUkVHXHRcdDB4YTFmMlxuJiM0MztcbiYjNDM7c3RydWN0IGFjMjAwIHtcbiYjNDM7XHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFjMjAwX3N1cHBsaWVzW10gPSB7XG4mIzQzO1x0XCYjMzQ7YWMtbGRvaW5cJiMzNDssXG4mIzQzO1x0XCYjMzQ7ZXBoeS12Y2NcJiMzNDssXG4mIzQzO1x0XCYjMzQ7cnRjLXZjY1wmIzM0OyxcbiYjNDM7XHRcJiMzNDt0di12Y2NcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZV9jZmcgYWMyMDBfcmFuZ2VfY2ZnW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0LnJhbmdlX21heCA9IEFDMjAwX01BWF9SRUcsXG4mIzQzO1x0XHQuc2VsZWN0b3JfcmVnID0gQUMyMDBfVFdJX1JFR19BRERSX0gsXG4mIzQzO1x0XHQuc2VsZWN0b3JfbWFzayA9IDB4ZmYsXG4mIzQzO1x0XHQud2luZG93X2xlbiA9IDI1NixcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRWFjaCBBQzIwMCBzdWItYmxvY2sgY2FuIHJlc2V0IGluZGVwZW5kZW50bHksIGludmFsaWRhdGluZyBpdHMgcmVnaXN0ZXJcbiYjNDM7ICogY29udGVudHMgd2l0aG91dCByZWdtYXAmIzM5O3Mga25vd2xlZGdlLiBDYWNoZSBvbmx5IHRoZSBjb21tb24gcGFnZSBzZWxlY3RvcjtcbiYjNDM7ICogdGhpcyBhdm9pZHMgYSBzZWxlY3RvciByZWFkLW1vZGlmeS13cml0ZSBmb3IgZXZlcnkgYWNjZXNzIG9uIHRoZSBzYW1lIHBhZ2VcbiYjNDM7ICogd2l0aG91dCBldmVyIHJldHVybmluZyBzdGFsZSBmdW5jdGlvbmFsLXJlZ2lzdGVyIHZhbHVlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGFjMjAwX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVnICE9IEFDMjAwX1RXSV9SRUdfQUREUl9IO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWMyMDBfcmVnbWFwX2NvbmZpZyA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2FjMjAwXCYjMzQ7LFxuJiM0MztcdC5yZWdfYml0cyA9IDgsXG4mIzQzO1x0LnJlZ19zdHJpZGUgPSAyLFxuJiM0MztcdC52YWxfYml0cyA9IDE2LFxuJiM0MztcdC5yYW5nZXMgPSBhYzIwMF9yYW5nZV9jZmcsXG4mIzQzO1x0Lm51bV9yYW5nZXMgPSBBUlJBWV9TSVpFKGFjMjAwX3JhbmdlX2NmZyksXG4mIzQzO1x0Lm1heF9yZWdpc3RlciA9IEFDMjAwX01BWF9SRUcsXG4mIzQzO1x0LnZvbGF0aWxlX3JlZyA9IGFjMjAwX3ZvbGF0aWxlX3JlZyxcbiYjNDM7XHQuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX01BUExFLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWMyMDBfZGlzYWJsZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMjAwICpkZGF0YSA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4mIzQzO1x0dW5zaWduZWQgaW50IHZlcnNpb247XG4mIzQzO1x0c3RydWN0IGFjMjAwICpkZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgY2xrICpjbGs7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRkYXRhKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFkZGF0YSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldF9lbmFibGUoZGV2LCBBUlJBWV9TSVpFKGFjMjAwX3N1cHBsaWVzKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgYWMyMDBfc3VwcGxpZXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllc1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGNsayA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihjbGspKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGNsayksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGlucHV0IGNsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRkZGF0YS1cdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFx1MDAyNmFjMjAwX3JlZ21hcF9jb25maWcpO1xuJiM0MztcdGlmIChJU19FUlIoZGRhdGEtXHUwMDNlcmVnbWFwKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZGF0YS1cdTAwM2VyZWdtYXApLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGRhdGEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vIG1pbmltdW0gZGVsYXkgaXMgZG9jdW1lbnRlZC4gTWF0Y2ggdGhlIHZlbmRvciBkcml2ZXImIzM5O3MgNDAgbXMgZGVsYXlcbiYjNDM7XHQgKiBiZWZvcmUgaXRzIGZpcnN0IEFDMjAwIHJlZ2lzdGVyIGFjY2VzcyBhZnRlciBlbmFibGluZyB0aGUgaW5wdXQgY2xvY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0bXNsZWVwKDQwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnbWFwX3JlYWQoZGRhdGEtXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfVkVSU0lPTl9SRUcsIFx1MDAyNnZlcnNpb24pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIGNoaXAgdmVyc2lvblxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGRldl9pbmZvKGRldiwgXCYjMzQ7QUMyMDAgcmV2aXNpb24gJSNseCBpbiBwYWNrYWdlICVsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fQ0hJUF9NQVNLLCB2ZXJzaW9uKSxcbiYjNDM7XHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLLCB2ZXJzaW9uKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc2V0IHRoZSBjaGlwIGFmdGVyIGRlcGVuZGVudCBmdW5jdGlvbiBkcml2ZXJzIGhhdmUgdW5ib3VuZC4gKi9cbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzIwMF9kaXNhYmxlLCBkZGF0YSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhYzIwMF9zaHV0ZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuJiM0Mzt7XG4mIzQzO1x0YWMyMDBfZGlzYWJsZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFjMjAwX29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3gtcG93ZXJzLGFjMjAwXCYjMzQ7IH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjMjAwX29mX21hdGNoKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYzIwMF9pMmNfaWRzW10gPSB7XG4mIzQzO1x0eyAubmFtZSA9IFwmIzM0O2FjMjAwXCYjMzQ7IH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhYzIwMF9pMmNfaWRzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhYzIwMF9kcml2ZXIgPSB7XG4mIzQzO1x0LmRyaXZlciA9IHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7YWMyMDBcJiMzNDssXG4mIzQzO1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBhYzIwMF9vZl9tYXRjaCxcbiYjNDM7XHR9LFxuJiM0MztcdC5wcm9iZSA9IGFjMjAwX3Byb2JlLFxuJiM0MztcdC5zaHV0ZG93biA9IGFjMjAwX3NodXRkb3duLFxuJiM0MztcdC5pZF90YWJsZSA9IGFjMjAwX2kyY19pZHMsXG4mIzQzO307XG4mIzQzO21vZHVsZV9pMmNfZHJpdmVyKGFjMjAwX2RyaXZlcik7XG4mIzQzO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0phbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7WC1Qb3dlcnMgQUMyMDAgTUZEIGNvcmUgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBhMjlkM2ZlZDhhMDUzLi4yN2I4ZmZlNGI1MzkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDc1LDYgJiM0Mzs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFlcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuJiM0MztcdCAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFlcbiYjNDM7XHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuJiM0MztcdCAgcmVnaXN0ZXJzLlxuJiM0MztcbiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUlcbiBcdHRyaXN0YXRlIFwmIzM0O1hpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcJiMzNDtcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IGUyM2RmNWU4MzZlOWUuLmI4YTUyZDgxZWFjNjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMCw0ICYjNDM7MTAwLDcgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVx0XHQmIzQzOz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCYjNDM7PSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQmIzQzOz0gdGVyYW5ldGljcy5vXG4gb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKVx0JiM0Mzs9IHZpdGVzc2Uub1xuJiM0Mzt4cG93ZXJzLWFjeDAwLXlcdFx0XHQ6PSB4cG93ZXJzLWFjeDAwLW1haW4ubyB4cG93ZXJzLWFjeDAwLWFjMjAwLm8gXFxcbiYjNDM7XHRcdFx0XHQgICB4cG93ZXJzLWFjeDAwLWFjMzAwLm9cbiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKVx0JiM0Mzs9IHhwb3dlcnMtYWN4MDAub1xuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgJiM0Mzs9IHhpbGlueF9nbWlpMnJnbWlpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMyMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJjNjhmNjViMTdmNmZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMjAwLmNcbkBAIC0wLDAgJiM0MzsxLDM4OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcdTAwM2NhbmRyZS5wcnp5d2FyYUBhcm0uY29tXHUwMDNlKVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eHBvd2Vycy1hY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVRcdDNcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUdcdFx0XHQweDAwMTRcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVx0XHRcdEJJVCgxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1x0XHRcdDB4MDAxNlxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7LyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xuJiM0MzsjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXHRcdFx0MHg4MDA0XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1x0XHRcdDB4NjAwMFxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cdFx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaXHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTS1x0XHRcdEdFTk1BU0soOCwgNClcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLXHRcdEdFTk1BU0soMTUsIDEyKVxuJiM0MztcbiYjNDM7c3RydWN0IGFjMjAwX2VwaHlfY3RsIHtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4mIzQzO1x0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogU2VyaWFsaXplcyBwb3dlciBzZXF1ZW5jaW5nIGFuZCBzdGF0ZS4gKi9cbiYjNDM7XHR1MTYgZXBoeV9jdGw7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBoeV9hZGRyO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1x0Ym9vbCBwb3dlcmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXG4mIzQzO3N0YXRpYyBib29sIGFjMjAwX2VwaHlfbm9kZV9uZWVkc19wcm9iZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAhb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobm9kZSwgXCYjMzQ7c3RhdHVzXCYjMzQ7LCBcdTAwMjZzdGF0dXMpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICAhc3RyY21wKHN0YXR1cywgXCYjMzQ7ZmFpbC1uZWVkcy1wcm9iZVwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9hZGRfZW5hYmxlX3BhdGgoc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBvZl9jaGFuZ2VzZXQgKm9jcyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgYm9vbCAqY2hhbmdlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBhcmVudCA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4mIzQzO1x0aWYgKHBhcmVudCkge1xuJiM0MztcdFx0cmV0ID0gYWMyMDBfZXBoeV9hZGRfZW5hYmxlX3BhdGgoZGV2LCBvY3MsIHBhcmVudCwgY2hhbmdlZCk7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChwYXJlbnQpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghYWMyMDBfZXBoeV9ub2RlX25lZWRzX3Byb2JlKG5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7JXBPRiBpcyB1bmF2YWlsYWJsZSB3aXRob3V0IGZhaWwtbmVlZHMtcHJvYmVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2ZfY2hhbmdlc2V0X3VwZGF0ZV9wcm9wX3N0cmluZyhvY3MsIG5vZGUsIFwmIzM0O3N0YXR1c1wmIzM0OywgXCYjMzQ7b2theVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHQqY2hhbmdlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9lbmFibGVfcGF0aChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb2ZfY2hhbmdlc2V0ICpvY3M7XG4mIzQzO1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0b2NzID0ga3phbGxvY19vYmooKm9jcyk7XG4mIzQzO1x0aWYgKCFvY3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0b2ZfY2hhbmdlc2V0X2luaXQob2NzKTtcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2FkZF9lbmFibGVfcGF0aChkZXYsIG9jcywgbm9kZSwgXHUwMDI2Y2hhbmdlZCk7XG4mIzQzO1x0aWYgKHJldCB8fCAhY2hhbmdlZClcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX2NoYW5nZXNldF9hcHBseShvY3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIHRoZSBhcHBsaWVkIHN0YXR1cyBwcm9wZXJ0aWVzIGFsaXZlIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIERULiAqL1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X2Rlc3Ryb3k6XG4mIzQzO1x0b2ZfY2hhbmdlc2V0X2Rlc3Ryb3kob2NzKTtcbiYjNDM7XHRrZnJlZShvY3MpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2N0bCB8XG4mIzQzO1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuJiM0MztcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSywgcHJpdi1cdTAwM2VwaHlfYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmVnLCBFUlJfUFRSKHJldCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHQgICBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRyZXQgPSBlcnI7XG4mIzQzO1x0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cmV0ID0gZXJyO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChwcml2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MzthYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxuJiM0MztcdFx0XHRcdFx0IGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdHUxNiBlcGh5X2N0bDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5X2FkZHIgXHUwMDNlIEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKSB7XG4mIzQzO1x0XHRyZXQgPSAwO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XHRwcml2LVx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XG4mIzQzO1xuJiM0MztcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xuJiM0MztcbiYjNDM7XHQvKiBTdGFydCBmcm9tIGEgZGlzYWJsZWQgc3RhdGUgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb25maWd1cmF0aW9uLiAqL1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuJiM0MztcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywgZXBoeV9jdGwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuJiM0MztcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO2Vycl9kaXNhYmxlOlxuJiM0MztcdC8qIEF0dGVtcHQgZXZlcnkgc3RlcCBvZiB0aGUgc2h1dGRvd24gc2VxdWVuY2UgYWZ0ZXIgYSBwYXJ0aWFsIHN0YXJ0LiAqL1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1x0YWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChwcml2KTtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0dW5zaWduZWQgaW50IGludGVybmFsX2NhbGlicmF0aW9uO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuJiM0MztcdHU4IGJwc19lZmZ1c2VfY29kZTtcbiYjNDM7XHRzdHJ1Y3QgY2xrICpjbGs7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0YWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCBcJiMzNDt4LXBvd2VycyxhYzIwMFwmIzM0OywgMCk7XG4mIzQzO1x0aWYgKCFhYzIwMF9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfRFlOQU1JQylcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2VuYWJsZV9wYXRoKGRldiwgYWMyMDBfbm9kZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xuJiM0MztcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xuJiM0MztcdGlmICghY2xpZW50KSB7XG4mIzQzO1x0XHRyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXG5cJiMzNDspKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXHUwMDI2Y2xpZW50LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0ICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWRldmljZV90cnlsb2NrKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGRldmljZV9pc19ib3VuZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2KSlcbiYjNDM7XHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4mIzQzO1x0ZGV2aWNlX3VubG9jayhcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcmVnbWFwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXG4mIzQzO1x0XHRcdFx0ICBcdTAwMjZpbnRlcm5hbF9jYWxpYnJhdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9lcnJvcjtcbiYjNDM7XHRcdGNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXG4mIzQzO1x0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuJiM0MztcdFx0XHQgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spO1xuJiM0MztcdHByaXYtXHUwMDNlZXBoeV9jdGwgPVxuJiM0MztcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcbiYjNDM7XHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4mIzQzO1xuJiM0MztcdGNsayA9IGNsa19nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihjbGspKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKGNsayk7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4mIzQzO1x0Y2xrX3B1dChjbGspO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4mIzQzO1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3Vuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBjbGtfcmF0ZSk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4mIzQzO1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cHJpdi1cdTAwM2Vjb250cm9sO1xuJiM0MztcbiYjNDM7b3V0X2Vycm9yOlxuJiM0MztcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXG5cJiMzNDspO1xuJiM0MztvdXRfcHV0X2NsaWVudDpcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuJiM0MztcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzMwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMzMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcwYTkwYjdhODVhNzlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmNcbkBAIC0wLDAgJiM0MzsxLDQwNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtwaHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4cG93ZXJzLWFjeDAwLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVFx0M1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaXHQyNTAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXHQyNzAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDBcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0tcdFx0XHRHRU5NQVNLKDcsIDYpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaXHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVx0XHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE9cdFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXHRcdEdFTk1BU0soMiwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1x0XHRcdDB4MDJcbiYjNDM7I2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVx0XHRCSVQoMTUpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19SRUdcdFx0XHQweDA1XG4mIzQzOyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTUsIDE0KVxuJiM0MzsjZGVmaW5lIEFDMzAwX01JSV9EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTEsIDEwKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yXHRcdFx0MlxuJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEVcdFx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEVcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHXHRcdFx0MHgwNlxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLXHRcdEdFTk1BU0soMTUsIDEyKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxuJiM0MztcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXG4mIzQzO1x0IEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwgXFxcbiYjNDM7XHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFxcXG4mIzQzO1x0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbiYjNDM7XHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4mIzQzO1x0IEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCBjbGsgKmNsaztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogU2VyaWFsaXplcyBwb3dlciBzZXF1ZW5jaW5nIGFuZCBzdGF0ZS4gKi9cbiYjNDM7XHR1MTYgc3lzX2NvbnRyb2w7XG4mIzQzO1x0dTE2IGVwaHlfY29uZmlnO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1x0Ym9vbCBwYWNrYWdlX2tub3duO1xuJiM0MztcdGJvb2wgaW50ZXJuYWxfZGxkbztcbiYjNDM7XHRib29sIHBvd2VyZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50XG4mIzQzO2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbiYjNDM7XHRcdFx0XHR1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuJiM0MztcdFx0XHRcdCB1MTYgbWFzaywgdTE2IHNldClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuJiM0MztcdFx0dTE2IHZhbCA9IChyZXQgXHUwMDI2IH5tYXNrKSB8IChzZXQgXHUwMDI2IG1hc2spO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcbiYjNDM7XHRcdFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsXG4mIzQzO1x0XHRcdFx0XHQgICAgcmVnbnVtLCB2YWwpO1xuJiM0MztcdH1cbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlZXBoeV9jb25maWcgfFxuJiM0MztcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdCBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZFxuJiM0MztcdCAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGVcbiYjNDM7XHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiAhcHJpdi1cdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVx1MDAzZWludGVybmFsX2RsZG8gP1xuJiM0MztcdFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vwb3dlcmVkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRyZXQgPSBlcnI7XG4mIzQzO1x0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldCA9IGVycjtcbiYjNDM7XG4mIzQzO1x0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChwcml2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MzthYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0dTggcGFja2FnZV9zdGF0dXM7XG4mIzQzO1x0dTE2IHJlc2V0X3ZhbHVlO1xuJiM0MztcdGludCBzeXNfY29udHJvbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSAwO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cbiYjNDM7XHRyZXNldF92YWx1ZSA9IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogUmV0YWluIHRoZSB2ZW5kb3IgY2xvY2stZW5hYmxlIGRlZmF1bHRzLCBpbmNsdWRpbmcgdGhlIGVGdXNlIGNsb2NrLiAqL1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBwcml2LVx1MDAzZXN5c19jb250cm9sKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRzeXNfY29udHJvbCA9IGFjMzAwX2VwaHlfY3RsX3JlYWQocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHKTtcbiYjNDM7XHRpZiAoc3lzX2NvbnRyb2wgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHN5c19jb250cm9sO1xuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpO1xuJiM0MztcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XG4mIzQzO1x0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xuJiM0MztcdHByaXYtXHUwMDNlcGFja2FnZV9rbm93biA9IHRydWU7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHByaXYsIEFDMzAwX1NZU19CSUFTMV9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxuJiM0MztcdFx0XHRcdCAgIHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4mIzQzO1x0XHRcdFx0ICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzMwMF9TWVNfSU9fVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdGZzbGVlcCgxMDAwMCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0ZnNsZWVwKDEwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcbiYjNDM7ZXJyX3Bvd2VyX29mZjpcbiYjNDM7XHRhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X3JlZ3VsYXRvcl9kaXNhYmxlKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRyZWd1bGF0b3JfZGlzYWJsZShkYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRjbGtfcHV0KGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4mIzQzO1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjMTtcbiYjNDM7XHR1OCBiZ3NfZWZmdXNlX2NvZGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxcblwmIzM0OykpO1xuJiM0MztcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0dmNjMSA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCYjMzQ7dmNjMVwmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUih2Y2MxKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHZjYzEpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IFZDQzEgc3VwcGx5XFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUodmNjMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgVkNDMSBzdXBwbHlcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9yZWd1bGF0b3JfZGlzYWJsZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgdmNjMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbiYjNDM7XHRmc2xlZXAoMTAwMDApO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlY2xrKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlY2xrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBpbnB1dCBjbG9ja1xcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgcHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDt1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgY2xrX3JhdGUpKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJpdi1cdTAwM2VzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUztcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuJiM0MztcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiAmIzQzOyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSBcdTAwMjZcbiYjNDM7XHRcdFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcbiYjNDM7XHRwcml2LVx1MDAzZWVwaHlfY29uZmlnID1cbiYjNDM7XHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0ssIGJnc19lZmZ1c2VfY29kZSk7XG4mIzQzO1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbiYjNDM7XHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cHJpdi1cdTAwM2Vjb250cm9sO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtbWFpbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjc3YzYxNjk4MjFjM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtbWFpbi5jXG5AQCAtMCwwICYjNDM7MSw1MzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyBcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L252bWVtLWNvbnN1bWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3BoeWxpYi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hwb3dlcnMtYWN4MDAuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0lEXHRcdFx0XHQweDAwNDQxNDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0tcdEdFTk1BU0soMywgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXHRcdEJJVCg4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPV1x0QklUKDkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1x0XHRcdDB4MWZcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLXHRcdFx0R0VOTUFTSygxMiwgOClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzBcdFx0XHRcdDBcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzFcdFx0XHRcdDFcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzJcdFx0XHRcdDJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzZcdFx0XHRcdDZcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzhcdFx0XHRcdDhcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXHRCSVQoMTIpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTS1x0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1x0XHQyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFR1x0XHQweDEyXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFXHQweDQ4MjRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXHRcdDB4MTNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRVx0XHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUdcdDB4MTdcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXHRCSVQoMylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1x0XHQweDE4XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFRcdDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXHRcdDB4MTBcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFXHQweDU1MjNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXHRcdDB4ZjAwMFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUdcdDB4MTRcbiYjNDM7I2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGZcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUUgMHg3ODA5XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXHRcdFx0MHgxNVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLXHRcdEdFTk1BU0soNywgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXFxcbiYjNDM7XHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcbiYjNDM7XHQgRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTSywgKF8xMG0pKSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFIFxcXG4mIzQzO1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFxcXG4mIzQzO1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMylcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHXHRcdDB4MThcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVx0XHQweDAwYmNcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1x0XHQweDFkXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyBCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUU1x0MHgwMDQ0XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXG4mIzQzO1x0KEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgfCBcXFxuJiM0MztcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXG4mIzQzOyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxuJiM0MzsgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZVxuJiM0MzsgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7XG4mIzQzO1x0Ym9vbCBpc19hYzMwMDtcbiYjNDM7XHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuJiM0MztcdGJvb2wgeG1paV9yeF9jbG9ja19pbnZlcnRlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLFxuJiM0MztcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWNvbnRyb2wtXHUwMDNlcG93ZXJfb24ocHJpdi1cdTAwM2Vjb250cm9sLFxuJiM0MztcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWNvbnRyb2wtXHUwMDNlcG93ZXJfb2ZmKHByaXYtXHUwMDNlY29udHJvbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbiYjNDM7XHRcdFx0XHRcdCAgICBwaHlkZXYtXHUwMDNlaW50ZXJmYWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHBoeWRldl93YXJuKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9mZiBjb250cm9sIGJsb2NrOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBFUlJfUFRSKHJldCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuJiM0MztcdHNpemVfdCBpO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dTggKmJ1ZjtcbiYjNDM7XHR1MTYgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xuJiM0MztcdGlmIChJU19FUlIoY2VsbCkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihjZWxsKTtcbiYjNDM7XG4mIzQzO1x0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4mIzQzO1x0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XG4mIzQzO1x0aWYgKElTX0VSUihidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcbiYjNDM7XHRpZiAoIWxlbiB8fCBsZW4gXHUwMDNlIHNpemVvZigqdmFsdWUpKSB7XG4mIzQzO1x0XHRrZnJlZShidWYpO1xuJiM0MztcdFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHZhbCB8PSAodTE2KWJ1ZltpXSBcdTAwM2NcdTAwM2MgKDggKiBpKTtcbiYjNDM7XHRrZnJlZShidWYpO1xuJiM0MztcdCp2YWx1ZSA9IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9pbml0X3BhY2thZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuJiM0MztcdGJvb2wgc2VsZWN0YWJsZTtcbiYjNDM7XHRib29sIGZpeGVkX2FjMzAwO1xuJiM0MztcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XG4mIzQzO1x0dTggY2FsaWJyYXRpb247XG4mIzQzO1x0dTMyIGJhc2VfYWRkcjtcbiYjNDM7XHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4mIzQzO1x0aWYgKCFwYWNrYWdlX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O1BIWSBpcyBub3QgaW4gYW4gRXRoZXJuZXQgUEhZIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2YmFzZV9hZGRyKTtcbiYjNDM7XHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcJiMzNDspO1xuJiM0MztcdGlmICghc2VsZWN0YWJsZSBcdTAwMjZcdTAwMjYgIWZpeGVkX2FjMzAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3Vuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1xuJiM0MztcdGhhc19jb25maWd1cmF0aW9uID1cbiYjNDM7XHRcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFwmIzM0O252bWVtLWNlbGwtbmFtZXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OykgXHUwMDNlPSAwO1xuJiM0MztcdGlmIChoYXNfY29uZmlndXJhdGlvbikge1xuJiM0MztcdFx0cmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsIFwmIzM0O2NvbmZpZ3VyYXRpb25cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNmNvbmZpZ3VyYXRpb24pO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzZWxlY3RhYmxlKSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID1cbiYjNDM7XHRcdFx0Y29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xuJiM0MztcdFx0aWYgKGhhc19jb25maWd1cmF0aW9uIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XG4mIzQzO1x0XHQgICAgcHJpdi1cdTAwM2Vpc19hYzMwMCkge1xuJiM0MztcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICBcJiMzNDtjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXG4mIzQzO1x0XHRcdFx0Y29uZmlndXJhdGlvbik7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XG4mIzQzO1x0cHJpdi1cdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cbiYjNDM7XHRcdG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgXCYjMzQ7eC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwKVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb250cm9sID1cbiYjNDM7XHRcdFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4mIzQzO1x0XHRcdGFjMjAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGhhc19jb25maWd1cmF0aW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuJiM0MztcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVx1MDAzZWNvbnRyb2wpO1xuJiM0MztcbiYjNDM7b3V0X3B1dF9ub2RlOlxuJiM0MztcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLFxuJiM0MztcdFx0XHRcdEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWRldi1cdTAwM2VvZl9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlLCBwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqL1xuJiM0MztcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4mIzQzO1x0XHRBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFIDpcbiYjNDM7XHRcdEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7XG4mIzQzO1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbiYjNDM7XHR1MTYgZ2xvYmFsX2NvbmZpZztcbiYjNDM7XHRpbnQgb2xkcGFnZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLFxuJiM0MztcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpXG4mIzQzO1x0XHRnbG9iYWxfY29uZmlnIHw9IEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLFxuJiM0MztcdFx0XHQgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbiYjNDM7XHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuJiM0MztcdFx0XHRBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7XG4mIzQzO1x0XHR0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvbGRwYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8xKTtcbiYjNDM7XHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuJiM0MztcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuJiM0MztcdFx0XHRcdCAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICBhZmVfZXFfcnhfZGV0ZWN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRywgdHhfbGV2ZWxfdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuJiM0MztcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcbiYjNDM7XG4mIzQzO291dF9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovXG4mIzQzO1x0cmV0dXJuIGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cbiYjNDM7XHRyZXR1cm4gYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJlc3VtZV9yZXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmVzdW1lX3JldClcbiYjNDM7XHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gcmVjb3ZlciBmcm9tIHN1c3BlbmQgZXJyb3I6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XG4mIzQzO1x0Ym9vbCBtYXRjaDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFnZW5waHlfbWF0Y2hfcGh5X2RldmljZShwaHlkZXYsIHBoeWRydikgfHwgIW5vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogUks2MzAgcmVwb3J0cyB0aGUgc2FtZSBQSFkgSUQsIHNvIGFsc28gbWF0Y2ggdGhlIHBhY2thZ2UgaWRlbnRpdHkuICovXG4mIzQzO1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcbiYjNDM7XHRpZiAoIXBhY2thZ2Vfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdG1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXCYjMzQ7KSB8fFxuJiM0MztcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCYjMzQ7KSB8fFxuJiM0MztcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCYjMzQ7KTtcbiYjNDM7XHRvZl9ub2RlX3B1dChwYWNrYWdlX25vZGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWF0Y2g7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhY3gwMF9lcGh5X2RyaXZlcltdID0ge1xuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRVBIWVwmIzM0OyxcbiYjNDM7XHRcdC5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLFxuJiM0MztcdFx0LnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSxcbiYjNDM7XHRcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcbiYjNDM7XHRcdC53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLFxuJiM0MztcdFx0LnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsXG4mIzQzO1x0XHQuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCxcbiYjNDM7XHRcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7XG4mIzQzO1x0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcbiYjNDM7XHR7IH1cbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XG4mIzQzO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0phbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAuaCBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGY2MDg0YzdhNzcyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC5oXG5AQCAtMCwwICYjNDM7MSwyOCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOyNpZm5kZWYgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9IXG4mIzQzOyNkZWZpbmUgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVRcdDE2XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGV2aWNlX25vZGU7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIHtcbiYjNDM7XHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IHBoeV9hZGRyKTtcbiYjNDM7XHRpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpO1xuJiM0MztcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdCAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbik7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbik7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZcyBhbmQgdGhlIEFDMjAwIE1GRC4gVGhlc2UgZHJpdmVycyBhcmUgaGVhdmlseSBkZXBlbmRlbnQgb24gRGV2aWNlIFRyZWUgKE9GKSBmb3IgcHJvYmluZyBhbmQgY29uZmlndXJhdGlvbiAoZS5nLiwgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncyBhbmQgYGRldi1cdTAwM2VvZl9ub2RlYCkuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdXNlZCBmb3IgZnV6emluZyBkbyBub3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIG5vZGVzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjJjMTMxMzlkMjhiNjdhNjMxMzliMDZlZDFkNzBhYzVmNWJkMjdkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMDY6MjI6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjdlOGQ5YmQ1NjYxYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbApAQCAtMCwwICYjNDM7MSw2OSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQomIzQzOyVZQU1MIDEuMgomIzQzOy0tLQomIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFgtUG93ZXJzIEFDMjAwIG1peGVkLXNpZ25hbCBJQwomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRoZSBBQzIwMCBpcyBhIG1peGVkLXNpZ25hbCBjb21wYW5pb24gSUMgY29udGFpbmluZyBhdWRpbywgdmlkZW8sIFJUQyBhbmQKJiM0MzsgIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucy4gSXRzIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBvdmVyIEkyQy4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIEFDMjAwIGlucHV0IGNsb2NrLiBXaGVuIHVzaW5nIHRoZSBFdGhlcm5ldCBQSFksIGl0cyBjb25maWd1cmVkIHJhdGUgbXVzdAomIzQzOyAgICAgIGJlIDI0IG9yIDI3IE1IeiwgbWF0Y2hpbmcgdGhlIHJhdGVzIGVuY29kZWQgYnkgdGhlIGRvY3VtZW50ZWQgRVBIWSBjbG9jawomIzQzOyAgICAgIHNlbGVjdG9yLgomIzQzOwomIzQzOyAgYWMtbGRvaW4tc3VwcGx5OgomIzQzOyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgYXVkaW8tY29kZWMgTERPIGlucHV0CiYjNDM7CiYjNDM7ICBlcGh5LXZjYy1zdXBwbHk6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZAomIzQzOwomIzQzOyAgcnRjLXZjYy1zdXBwbHk6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBSVEMKJiM0MzsKJiM0MzsgIHR2LXZjYy1zdXBwbHk6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBUViBlbmNvZGVyIERBQwomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIHJlZwomIzQzOyAgLSBjbG9ja3MKJiM0MzsgIC0gYWMtbGRvaW4tc3VwcGx5CiYjNDM7ICAtIGVwaHktdmNjLXN1cHBseQomIzQzOyAgLSBydGMtdmNjLXN1cHBseQomIzQzOyAgLSB0di12Y2Mtc3VwcGx5CiYjNDM7CiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgaTJjIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBtaXhlZC1zaWduYWxAMTAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3gtcG93ZXJzLGFjMjAwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzB4MTAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICBhYy1sZG9pbi1zdXBwbHkgPSAmbHQ7JmFtcDtyZWdfM3YzJmd0OzsKJiM0MzsgICAgICAgICAgICBlcGh5LXZjYy1zdXBwbHkgPSAmbHQ7JmFtcDtyZWdfM3YzJmd0OzsKJiM0MzsgICAgICAgICAgICBydGMtdmNjLXN1cHBseSA9ICZsdDsmYW1wO3JlZ18zdjMmZ3Q7OwomIzQzOyAgICAgICAgICAgIHR2LXZjYy1zdXBwbHkgPSAmbHQ7JmFtcDtyZWdfM3YzJmd0OzsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7Li4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yMmJkZGM3YTJmOTQxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApAQCAtMCwwICYjNDM7MSwyMDggQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlcwomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnQKJiM0MzsgIHRoZSBzYW1lIENsYXVzZSAyMiBQSFkgSUQgYW5kIHVzZSB0aGUgc2FtZSBsaW5rLXNpZGUgcmVnaXN0ZXIgbGF5b3V0LiBUaGUKJiM0MzsgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBwYXJ0IG9mIGFuIEkyQyBNRkQsCiYjNDM7ICB3aGlsZSBBQzMwMCBjb250cm9sIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYKJiM0MzsgIHBsdXMgdGhlIGxpbmsgUEhZIGFkZHJlc3MuCiYjNDM7CiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLgomIzQzOyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGEKJiM0MzsgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLgomIzQzOwomIzQzOyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzCiYjNDM7ICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kCiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvCiYjNDM7ICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC4KJiM0MzsKJiM0MztzZWxlY3Q6CiYjNDM7ICBwcm9wZXJ0aWVzOgomIzQzOyAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgIGVudW06CiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7ICByZXF1aXJlZDoKJiM0MzsgICAgLSBjb21wYXRpYmxlCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heGltdW06IDMxCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6LiBUaGUgQUMyMDAgaW5wdXQgY2xvY2sKJiM0MzsgICAgICBiZWxvbmdzIHRvIHRoZSByZWZlcmVuY2VkIEFDMjAwIE1GRCBpbnN0ZWFkLgomIzQzOwomIzQzOyAgdmNjMS1zdXBwbHk6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIDMuMyBWIHN1cHBseSBmb3IgdGhlIEFDMzAwIEkvTywgYmFuZGdhcCwgRXRoZXJuZXQgUEhZIGFuYWxvZyBmcm9udCBlbmQsCiYjNDM7ICAgICAgYW5kIGludGVybmFsIGRpZ2l0YWwgTERPCiYjNDM7CiYjNDM7ICBudm1lbS1jZWxsczoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2cKJiM0MzsgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMAomIzQzOyAgICAgIHdoZW4gc2V0IGFuZCBBQzIwMCB3aGVuIGNsZWFyLCBhbmQgYml0IDkgcmVxdWVzdHMgdGhlIEFDMzAwCiYjNDM7ICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHkKJiM0MzsgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZQomIzQzOyAgICAgIGNvcHkgaW5zdGVhZC4KJiM0MzsKJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6CiYjNDM7ICAgIGNvbnN0OiBjb25maWd1cmF0aW9uCiYjNDM7CiYjNDM7ICB4LXBvd2VycyxhYzIwMDoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZQomIzQzOyAgICBkZXNjcmlwdGlvbjogUmVmZXJlbmNlIHRvIHRoZSBBQzIwMCBNRkQgY29udGFpbmluZyB0aGlzIEV0aGVybmV0IFBIWQomIzQzOwomIzQzOyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDoKJiM0MzsgICAgdHlwZTogYm9vbGVhbgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lCiYjNDM7ICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi4KJiM0MzsKJiM0MztwYXR0ZXJuUHJvcGVydGllczoKJiM0MzsgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6CiYjNDM7ICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sIwomIzQzOyAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwCiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gY29tcGF0aWJsZQomIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsKJiM0MztkZXBlbmRlbnRSZXF1aXJlZDoKJiM0MzsgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXQomIzQzOyAgbnZtZW0tY2VsbC1uYW1lczogWyBudm1lbS1jZWxscyBdCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNsb2NrczogZmFsc2UKJiM0MzsgICAgICAgIHZjYzEtc3VwcGx5OiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMAomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBjbG9ja3MKJiM0MzsgICAgICAgIC0gdmNjMS1zdXBwbHkKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHMKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lcwomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gY2xvY2tzCiYjNDM7ICAgICAgICAtIHZjYzEtc3VwcGx5CiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGxzCiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXMKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDAKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICB2Y2MxLXN1cHBseSA9ICZsdDsmYW1wO3JlZ18zdjMmZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gJmx0OyZhbXA7ZXBoeV9jb25maWd1cmF0aW9uJmd0OzsKJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gJiMzNDtjb25maWd1cmF0aW9uJiMzNDs7CiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSAmbHQ7JmFtcDthYzIwMCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAgewomIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDtldGhlcm5ldC1waHktaWQwMDQ0LjE0MDAmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOwomIzQzOyAgLSB8CiYjNDM7ICAgIG1kaW8gewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZSYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICBjbG9ja3MgPSAmbHQ7JmFtcDtwd20gNSZndDs7CiYjNDM7ICAgICAgICAgICAgdmNjMS1zdXBwbHkgPSAmbHQ7JmFtcDtyZWdfM3YzJmd0OzsKJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxscyA9ICZsdDsmYW1wO2VwaHlfY29uZmlndXJhdGlvbiZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9ICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHsKJiM0MzsgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKJiM0MzsKJiM0MzsgIC0gfAomIzQzOyAgICBtZGlvIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAxIHsKJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UmIzM0OzsKJiM0MzsgICAgICAgICAgICByZWcgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSAmbHQ7JmFtcDthYzIwMCZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSAmbHQ7JmFtcDtlcGh5X2NvbmZpZ3VyYXRpb24mZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMSB7CiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7Li4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCA3NjNjZTZhMzQ3ODJiLi40OTkyNjljODU4MTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTIwNSw2ICYjNDM7MjA1LDE3IEBAIGNvbmZpZyBNRkRfQUMxMDAKIAkgIFRoaXMgZHJpdmVyIGluY2x1ZGUgb25seSB0aGUgY29yZSBBUElzLiBZb3UgaGF2ZSB0byBzZWxlY3QgaW5kaXZpZHVhbAogCSAgY29tcG9uZW50cyBsaWtlIGNvZGVjcyBvciBSVEMgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuCiAKJiM0Mztjb25maWcgTUZEX0FDMjAwCiYjNDM7CXRyaXN0YXRlICYjMzQ7WC1Qb3dlcnMgQUMyMDAmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEkyQwomIzQzOwlkZXBlbmRzIG9uIE9GCiYjNDM7CXNlbGVjdCBSRUdNQVBfSTJDCiYjNDM7CWhlbHAKJiM0MzsJICBTdXBwb3J0IGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIGNvbXBhbmlvbiBJQy4gVGhlIEFDMjAwCiYjNDM7CSAgY29udGFpbnMgYXVkaW8sIHZpZGVvLCBSVEMgYW5kIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucyBhbmQgaXMKJiM0MzsJICBjby1wYWNrYWdlZCB3aXRoIHNvbWUgQWxsd2lubmVyIEg2IGFuZCBINjE2IFNvQ3MuIFRoaXMgZHJpdmVyIHByb3ZpZGVzCiYjNDM7CSAgdGhlIHNoYXJlZCByZWdpc3RlciBhY2Nlc3MgdXNlZCBieSB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBkcml2ZXJzLgomIzQzOwogY29uZmlnIE1GRF9BWFAyMFgKIAl0cmlzdGF0ZQogCXNlbGVjdCBNRkRfQ09SRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvTWFrZWZpbGUgYi9kcml2ZXJzL21mZC9NYWtlZmlsZQppbmRleCBkZDRiYjdlNzdjMzM2Li44OTBlNzZhOWFkMDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9NYWtlZmlsZQpAQCAtMTUwLDYgJiM0MzsxNTAsNyBAQCBvYmotJChDT05GSUdfTUZEX0RBOTA1Ml9TUEkpCSYjNDM7PSBkYTkwNTItc3BpLm8KIG9iai0kKENPTkZJR19NRkRfREE5MDUyX0kyQykJJiM0Mzs9IGRhOTA1Mi1pMmMubwogCiBvYmotJChDT05GSUdfTUZEX0FDMTAwKQkJJiM0Mzs9IGFjMTAwLm8KJiM0MztvYmotJChDT05GSUdfTUZEX0FDMjAwKQkJJiM0Mzs9IGFjMjAwLm8KIG9iai0kKENPTkZJR19NRkRfQVhQMjBYKQkmIzQzOz0gYXhwMjB4Lm8KIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX0kyQykJJiM0Mzs9IGF4cDIweC1pMmMubwogb2JqLSQoQ09ORklHX01GRF9BWFAyMFhfUlNCKQkmIzQzOz0gYXhwMjB4LXJzYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYzIwMC5jIGIvZHJpdmVycy9tZmQvYWMyMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi43OThiYjQxNzNiMTRiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZmQvYWMyMDAuYwpAQCAtMCwwICYjNDM7MSwxNzYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBNRkQgY29yZSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycyBBQzIwMAomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjICZsdDtqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20mZ3Q7CiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqCiYjNDM7ICogQmFzZWQgb24gdGhlIEFDMTAwIGRyaXZlcjoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2hlbi1ZdSBUc2FpCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pMmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1JFRwkJCTB4MDAwMAomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLCQlHRU5NQVNLKDE1LCAxNCkKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTSwkJR0VOTUFTSygxMSwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX1JFRwkJCTB4MDAwMgomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVAlCSVQoMCkKJiM0MzsKJiM0MzsvKiBJbnRlcmZhY2UgcmVnaXN0ZXIgYWNjZXNzaWJsZSBmcm9tIGV2ZXJ5IHJlZ2lzdGVyIHBhZ2UuICovCiYjNDM7I2RlZmluZSBBQzIwMF9UV0lfUkVHX0FERFJfSAkweDAwZmUKJiM0MzsjZGVmaW5lIEFDMjAwX01BWF9SRUcJCTB4YTFmMgomIzQzOwomIzQzO3N0cnVjdCBhYzIwMCB7CiYjNDM7CXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYWMyMDBfc3VwcGxpZXNbXSA9IHsKJiM0MzsJJiMzNDthYy1sZG9pbiYjMzQ7LAomIzQzOwkmIzM0O2VwaHktdmNjJiMzNDssCiYjNDM7CSYjMzQ7cnRjLXZjYyYjMzQ7LAomIzQzOwkmIzM0O3R2LXZjYyYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2VfY2ZnIGFjMjAwX3JhbmdlX2NmZ1tdID0gewomIzQzOwl7CiYjNDM7CQkucmFuZ2VfbWF4ID0gQUMyMDBfTUFYX1JFRywKJiM0MzsJCS5zZWxlY3Rvcl9yZWcgPSBBQzIwMF9UV0lfUkVHX0FERFJfSCwKJiM0MzsJCS5zZWxlY3Rvcl9tYXNrID0gMHhmZiwKJiM0MzsJCS53aW5kb3dfbGVuID0gMjU2LAomIzQzOwl9LAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBFYWNoIEFDMjAwIHN1Yi1ibG9jayBjYW4gcmVzZXQgaW5kZXBlbmRlbnRseSwgaW52YWxpZGF0aW5nIGl0cyByZWdpc3RlcgomIzQzOyAqIGNvbnRlbnRzIHdpdGhvdXQgcmVnbWFwJiMzOTtzIGtub3dsZWRnZS4gQ2FjaGUgb25seSB0aGUgY29tbW9uIHBhZ2Ugc2VsZWN0b3I7CiYjNDM7ICogdGhpcyBhdm9pZHMgYSBzZWxlY3RvciByZWFkLW1vZGlmeS13cml0ZSBmb3IgZXZlcnkgYWNjZXNzIG9uIHRoZSBzYW1lIHBhZ2UKJiM0MzsgKiB3aXRob3V0IGV2ZXIgcmV0dXJuaW5nIHN0YWxlIGZ1bmN0aW9uYWwtcmVnaXN0ZXIgdmFsdWVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGFjMjAwX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVnICE9IEFDMjAwX1RXSV9SRUdfQUREUl9IOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWMyMDBfcmVnbWFwX2NvbmZpZyA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O2FjMjAwJiMzNDssCiYjNDM7CS5yZWdfYml0cyA9IDgsCiYjNDM7CS5yZWdfc3RyaWRlID0gMiwKJiM0MzsJLnZhbF9iaXRzID0gMTYsCiYjNDM7CS5yYW5nZXMgPSBhYzIwMF9yYW5nZV9jZmcsCiYjNDM7CS5udW1fcmFuZ2VzID0gQVJSQVlfU0laRShhYzIwMF9yYW5nZV9jZmcpLAomIzQzOwkubWF4X3JlZ2lzdGVyID0gQUMyMDBfTUFYX1JFRywKJiM0MzsJLnZvbGF0aWxlX3JlZyA9IGFjMjAwX3ZvbGF0aWxlX3JlZywKJiM0MzsJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9NQVBMRSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjMjAwX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzIwMCAqZGRhdGEgPSBkYXRhOwomIzQzOwomIzQzOwlyZWdtYXBfd3JpdGUoZGRhdGEtJmd0O3JlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtjbGllbnQtJmd0O2RldjsKJiM0MzsJdW5zaWduZWQgaW50IHZlcnNpb247CiYjNDM7CXN0cnVjdCBhYzIwMCAqZGRhdGE7CiYjNDM7CXN0cnVjdCBjbGsgKmNsazsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRkYXRhKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZGRhdGEpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXRfZW5hYmxlKGRldiwgQVJSQVlfU0laRShhYzIwMF9zdXBwbGllcyksCiYjNDM7CQkJCQkgICAgIGFjMjAwX3N1cHBsaWVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXNcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihjbGspKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGNsayksCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGlucHV0IGNsb2NrXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIGNsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWRkYXRhLSZndDtyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZhbXA7YWMyMDBfcmVnbWFwX2NvbmZpZyk7CiYjNDM7CWlmIChJU19FUlIoZGRhdGEtJmd0O3JlZ21hcCkpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZGRhdGEtJmd0O3JlZ21hcCksCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGRhdGEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBObyBtaW5pbXVtIGRlbGF5IGlzIGRvY3VtZW50ZWQuIE1hdGNoIHRoZSB2ZW5kb3IgZHJpdmVyJiMzOTtzIDQwIG1zIGRlbGF5CiYjNDM7CSAqIGJlZm9yZSBpdHMgZmlyc3QgQUMyMDAgcmVnaXN0ZXIgYWNjZXNzIGFmdGVyIGVuYWJsaW5nIHRoZSBpbnB1dCBjbG9jay4KJiM0MzsJICovCiYjNDM7CW1zbGVlcCg0MCk7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ21hcF9yZWFkKGRkYXRhLSZndDtyZWdtYXAsIEFDMjAwX1NZU19WRVJTSU9OX1JFRywgJmFtcDt2ZXJzaW9uKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHJlYWQgY2hpcCB2ZXJzaW9uXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWRldl9pbmZvKGRldiwgJiMzNDtBQzIwMCByZXZpc2lvbiAlI2x4IGluIHBhY2thZ2UgJWx1XG4mIzM0OywKJiM0MzsJCSBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fQ0hJUF9NQVNLLCB2ZXJzaW9uKSwKJiM0MzsJCSBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLLCB2ZXJzaW9uKSk7CiYjNDM7CiYjNDM7CS8qIFJlc2V0IHRoZSBjaGlwIGFmdGVyIGRlcGVuZGVudCBmdW5jdGlvbiBkcml2ZXJzIGhhdmUgdW5ib3VuZC4gKi8KJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMyMDBfZGlzYWJsZSwgZGRhdGEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnbWFwX3dyaXRlKGRkYXRhLSZndDtyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWdtYXBfd3JpdGUoZGRhdGEtJmd0O3JlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDMjAwX1NZU19DT05UUk9MX0NISVBfUkVTRVRfREVBU1NFUlQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjMjAwX3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiYjNDM7ewomIzQzOwlhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0OyB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjMjAwX29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWMyMDBfaTJjX2lkc1tdID0gewomIzQzOwl7IC5uYW1lID0gJiMzNDthYzIwMCYjMzQ7IH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFjMjAwX2kyY19pZHMpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhYzIwMF9kcml2ZXIgPSB7CiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZSA9ICYjMzQ7YWMyMDAmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLAomIzQzOwl9LAomIzQzOwkucHJvYmUgPSBhYzIwMF9wcm9iZSwKJiM0MzsJLnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sCiYjNDM7CS5pZF90YWJsZSA9IGFjMjAwX2kyY19pZHMsCiYjNDM7fTsKJiM0Mzttb2R1bGVfaTJjX2RyaXZlcihhYzIwMF9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7WC1Qb3dlcnMgQUMyMDAgTUZEIGNvcmUgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwppbmRleCBhMjlkM2ZlZDhhMDUzLi4yN2I4ZmZlNGI1MzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtNDc1LDYgJiM0Mzs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZCiAJaGVscAogCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSB2c2M4MjQ0CiAKJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFkKJiM0MzsJdHJpc3RhdGUgJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkmIzM0OwomIzQzOwlkZXBlbmRzIG9uIENPTU1PTl9DTEsgJmFtcDsmYW1wOyBOVk1FTSAmYW1wOyZhbXA7IE9GX01ESU8gJmFtcDsmYW1wOyBSRUdVTEFUT1IKJiM0MzsJZGVwZW5kcyBvbiBJMkMgfHwgIUkyQwomIzQzOwlzZWxlY3QgUEhZX1BBQ0tBR0UKJiM0MzsJaGVscAomIzQzOwkgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDAKJiM0MzsJICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWQomIzQzOwkgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbAomIzQzOwkgIHJlZ2lzdGVycy4KJiM0MzsKIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSQogCXRyaXN0YXRlICYjMzQ7WGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlciYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCmluZGV4IGUyM2RmNWU4MzZlOWUuLmI4YTUyZDgxZWFjNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKQEAgLTEwMCw0ICYjNDM7MTAwLDcgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKQkJJiM0Mzs9IHNtc2Mubwogb2JqLSQoQ09ORklHX1NURTEwWFApCQkmIzQzOz0gc3RlMTBYcC5vCiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpCSYjNDM7PSB0ZXJhbmV0aWNzLm8KIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSkJJiM0Mzs9IHZpdGVzc2UubwomIzQzO3hwb3dlcnMtYWN4MDAteQkJCTo9IHhwb3dlcnMtYWN4MDAtbWFpbi5vIHhwb3dlcnMtYWN4MDAtYWMyMDAubyBcCiYjNDM7CQkJCSAgIHhwb3dlcnMtYWN4MDAtYWMzMDAubwomIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkJJiM0Mzs9IHhwb3dlcnMtYWN4MDAubwogb2JqLSQoQ09ORklHX1hJTElOWF9HTUlJMlJHTUlJKSAmIzQzOz0geGlsaW54X2dtaWkycmdtaWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMyMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYmM2OGY2NWIxN2Y2ZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMjAwLmMKQEAgLTAsMCAmIzQzOzEsMzg4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZAomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSAmbHQ7YW5kcmUucHJ6eXdhcmFAYXJtLmNvbSZndDspCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaTJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3hwb3dlcnMtYWN4MDAuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUCTMKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaCTI0MDAwMDAwCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWgkyNzAwMDAwMAomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcJCQkweDAwMTQKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFCQkJQklUKDEpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRwkJCTB4MDAxNgomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7LyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqLwomIzQzOyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUcJCQkweDgwMDQKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFRwkJCTB4NjAwMAomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWgkJQklUKDIpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0sJCQlHRU5NQVNLKDgsIDQpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0sJCUdFTk1BU0soMTUsIDEyKQomIzQzOwomIzQzO3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDsKJiM0MzsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXN0cnVjdCBtdXRleCBsb2NrOyAvKiBTZXJpYWxpemVzIHBvd2VyIHNlcXVlbmNpbmcgYW5kIHN0YXRlLiAqLwomIzQzOwl1MTYgZXBoeV9jdGw7CiYjNDM7CXVuc2lnbmVkIGludCBwaHlfYWRkcjsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsJYm9vbCBwb3dlcmVkOwomIzQzO307CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpCiYjNDM7c3RhdGljIGJvb2wgYWMyMDBfZXBoeV9ub2RlX25lZWRzX3Byb2JlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IGNoYXIgKnN0YXR1czsKJiM0MzsKJiM0MzsJcmV0dXJuICFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhub2RlLCAmIzM0O3N0YXR1cyYjMzQ7LCAmYW1wO3N0YXR1cykgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIXN0cmNtcChzdGF0dXMsICYjMzQ7ZmFpbC1uZWVkcy1wcm9iZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2FkZF9lbmFibGVfcGF0aChzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBvZl9jaGFuZ2VzZXQgKm9jcywKJiM0MzsJCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAomIzQzOwkJCQkgICAgICBib29sICpjaGFuZ2VkKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhcmVudCA9IG9mX2dldF9wYXJlbnQobm9kZSk7CiYjNDM7CWlmIChwYXJlbnQpIHsKJiM0MzsJCXJldCA9IGFjMjAwX2VwaHlfYWRkX2VuYWJsZV9wYXRoKGRldiwgb2NzLCBwYXJlbnQsIGNoYW5nZWQpOwomIzQzOwkJb2Zfbm9kZV9wdXQocGFyZW50KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIWFjMjAwX2VwaHlfbm9kZV9uZWVkc19wcm9iZShub2RlKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwKJiM0MzsJCQkJICAgICAmIzM0OyVwT0YgaXMgdW5hdmFpbGFibGUgd2l0aG91dCBmYWlsLW5lZWRzLXByb2JlXG4mIzM0OywKJiM0MzsJCQkJICAgICBub2RlKTsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfY2hhbmdlc2V0X3VwZGF0ZV9wcm9wX3N0cmluZyhvY3MsIG5vZGUsICYjMzQ7c3RhdHVzJiMzNDssICYjMzQ7b2theSYjMzQ7KTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQkqY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9lbmFibGVfcGF0aChzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IG9mX2NoYW5nZXNldCAqb2NzOwomIzQzOwlib29sIGNoYW5nZWQgPSBmYWxzZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJb2NzID0ga3phbGxvY19vYmooKm9jcyk7CiYjNDM7CWlmICghb2NzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW9mX2NoYW5nZXNldF9pbml0KG9jcyk7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfYWRkX2VuYWJsZV9wYXRoKGRldiwgb2NzLCBub2RlLCAmYW1wO2NoYW5nZWQpOwomIzQzOwlpZiAocmV0IHx8ICFjaGFuZ2VkKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfY2hhbmdlc2V0X2FwcGx5KG9jcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBhcHBsaWVkIHN0YXR1cyBwcm9wZXJ0aWVzIGFsaXZlIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIERULiAqLwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfZGVzdHJveToKJiM0MzsJb2ZfY2hhbmdlc2V0X2Rlc3Ryb3kob2NzKTsKJiM0MzsJa2ZyZWUob2NzKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7c3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2VwaHlfY3RsIHwKJiM0MzsJCShwcml2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJIEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8CiYjNDM7CQlGSUVMRF9QUkVQKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSywgcHJpdi0mZ3Q7cGh5X2FkZHIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHJlZywgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtJmd0O3JlZ21hcCwgcmVnLCB2YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkZXZfZXJyKHByaXYtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXIgJSN4OiAlcGVcbiYjMzQ7LAomIzQzOwkJCXJlZywgRVJSX1BUUihyZXQpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsCiYjNDM7CQkJCSAgIGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCSAgIEFDMjAwX0VQSFlfU0hVVERPV04pOwomIzQzOwllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJCSBBQzIwMF9FUEhZX1JNSUlfU0VMLAomIzQzOwkJCQkJIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkJCQkgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXByaXYtJmd0O2ludGVyZmFjZSA9IGludGVyZmFjZTsKJiM0MzsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CXUxNiBlcGh5X2N0bDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeV9hZGRyICZndDsgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCAmYW1wOyZhbXA7IHByaXYtJmd0O3BoeV9hZGRyID09IHBoeV9hZGRyKSB7CiYjNDM7CQlyZXQgPSAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkKSB7CiYjNDM7CQlyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7cGh5X2FkZHIgPSBwaHlfYWRkcjsKJiM0MzsKJiM0MzsJZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7CiYjNDM7CiYjNDM7CS8qIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uICovCiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLAomIzQzOwkJCQkgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsCiYjNDM7CQkJCSAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9kaXNhYmxlOwomIzQzOwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gdHJ1ZTsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzO2Vycl9kaXNhYmxlOgomIzQzOwkvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi8KJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CWFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQocHJpdik7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlOwomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXU4IGJwc19lZmZ1c2VfY29kZTsKJiM0MzsJc3RydWN0IGNsayAqY2xrOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlwcml2LSZndDtkZXYgPSBkZXY7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwcml2LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJYWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCAmIzM0O3gtcG93ZXJzLGFjMjAwJiMzNDssIDApOwomIzQzOwlpZiAoIWFjMjAwX25vZGUpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDttaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxuJiMzNDspKTsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfRFlOQU1JQykKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9lbmFibGVfcGF0aChkZXYsIGFjMjAwX25vZGUpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CX0KJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsJY2xpZW50ID0gb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGUoYWMyMDBfbm9kZSk7CiYjNDM7CW9mX25vZGVfcHV0KGFjMjAwX25vZGUpOwomIzQzOwlpZiAoIWNsaWVudCkgewomIzQzOwkJcmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcbiYjMzQ7KSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCAmYW1wO2NsaWVudC0mZ3Q7ZGV2LAomIzQzOwkJCSAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O2ZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X2NsaWVudDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldmljZV90cnlsb2NrKCZhbXA7Y2xpZW50LSZndDtkZXYpKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUiwKJiM0MzsJCQkJICAgICYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X2NsaWVudDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZGV2aWNlX2lzX2JvdW5kKCZhbXA7Y2xpZW50LSZndDtkZXYpKQomIzQzOwkJcHJpdi0mZ3Q7cmVnbWFwID0gZGV2X2dldF9yZWdtYXAoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7CiYjNDM7CWRldmljZV91bmxvY2soJmFtcDtjbGllbnQtJmd0O2Rldik7CiYjNDM7CWlmICghcHJpdi0mZ3Q7cmVnbWFwKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUiwKJiM0MzsJCQkJICAgICYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFoYXNfY2FsaWJyYXRpb24pIHsKJiM0MzsJCXJldCA9IHJlZ21hcF9yZWFkKHByaXYtJmd0O3JlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsCiYjNDM7CQkJCSAgJmFtcDtpbnRlcm5hbF9jYWxpYnJhdGlvbik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X2Vycm9yOwomIzQzOwkJY2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovCiYjNDM7CWJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiAmIzQzOyBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUKSAmYW1wOwomIzQzOwkJCSAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7CiYjNDM7CXByaXYtJmd0O2VwaHlfY3RsID0KJiM0MzsJCUZJRUxEX1BSRVAoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0ssIGJwc19lZmZ1c2VfY29kZSk7CiYjNDM7CS8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi8KJiM0MzsKJiM0MzsJY2xrID0gY2xrX2dldCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihjbGspKSB7CiYjNDM7CQlyZXQgPSBQVFJfRVJSKGNsayk7CiYjNDM7CQlnb3RvIG91dF9lcnJvcjsKJiM0MzsJfQomIzQzOwomIzQzOwljbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOwomIzQzOwljbGtfcHV0KGNsayk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoY2xrX3JhdGUpIHsKJiM0MzsJY2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWjoKJiM0MzsJCXByaXYtJmd0O2VwaHlfY3RsIHw9IEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjoKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O3Vuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XG4mIzM0OywKJiM0MzsJCQkJICAgIGNsa19yYXRlKTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9jbGllbnQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vbiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29mZiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTsKJiM0MzsJLyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqLwomIzQzOwlwcml2LSZndDtpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJOwomIzQzOwlwdXRfZGV2aWNlKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDtwcml2LSZndDtjb250cm9sOwomIzQzOwomIzQzO291dF9lcnJvcjoKJiM0MzsJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXG4mIzM0Oyk7CiYjNDM7b3V0X3B1dF9jbGllbnQ6CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDtjbGllbnQtJmd0O2Rldik7CiYjNDM7CXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMzMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNzBhOTBiN2E4NWE3OQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmMKQEAgLTAsMCAmIzQzOzEsNDA0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZAomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7cGh5bGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eHBvd2Vycy1hY3gwMC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQJMwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFoJMjQwMDAwMDAKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaCTI1MDAwMDAwCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWgkyNzAwMDAwMAomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfUkVHCQkJMHgwMAomIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSwkJR0VOTUFTSygxMSwgOCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLCQkJR0VOTUFTSyg3LCA2KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWgkJRklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFoJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaCQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKQomIzQzOyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRQkJCUJJVCg1KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRQkJQklUKDQpCiYjNDM7I2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFCQlCSVQoMikKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQJCUJJVCgxKQomIzQzOyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVAkJQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPCQlCSVQoMykKJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSwkJR0VOTUFTSygyLCAwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFRwkJCTB4MDIKJiM0MzsjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFCQlCSVQoMTUpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHCQkJMHgwNQomIzQzOyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTSwkJCUdFTk1BU0soMTUsIDE0KQomIzQzOyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLCQkJR0VOTUFTSygxMSwgMTApCiYjNDM7I2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMgkJCTIKJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUJCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRQkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHCQkJMHgwNgomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0sJCUdFTk1BU0soMTUsIDEyKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9STUlJX1NFTAkJCUJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV04JCQlCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTIFwKJiM0MzsJKEFDMzAwX0VGVVNFX0NMS19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFIHwgXAomIzQzOwkgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcCiYjNDM7CSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFwKJiM0MzsJKEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXAomIzQzOwkgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFwKJiM0MzsJIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpCiYjNDM7CiYjNDM7c3RydWN0IGFjMzAwX2VwaHlfY3RsIHsKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sOwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CXN0cnVjdCBtdXRleCBsb2NrOyAvKiBTZXJpYWxpemVzIHBvd2VyIHNlcXVlbmNpbmcgYW5kIHN0YXRlLiAqLwomIzQzOwl1MTYgc3lzX2NvbnRyb2w7CiYjNDM7CXUxNiBlcGh5X2NvbmZpZzsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsJYm9vbCBwYWNrYWdlX2tub3duOwomIzQzOwlib29sIGludGVybmFsX2RsZG87CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpOwomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJIHUxNiBtYXNrLCB1MTYgc2V0KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQl1MTYgdmFsID0gKHJldCAmYW1wOyB+bWFzaykgfCAoc2V0ICZhbXA7IG1hc2spOwomIzQzOwomIzQzOwkJcmV0ID0gdmFsID09IHJldCA/IDAgOgomIzQzOwkJCV9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwKJiM0MzsJCQkJCSAgICByZWdudW0sIHZhbCk7CiYjNDM7CX0KJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jb25maWcgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkCiYjNDM7CSAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGUKJiM0MzsJICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhcHJpdi0mZ3Q7cGFja2FnZV9rbm93biB8fCAhcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA/CiYjNDM7CQlBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghcHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCSAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCSAgQUMzMDBfRVBIWV9TSFVURE9XTik7CiYjNDM7CWVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXJldCA9IGVycjsKJiM0MzsJZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwomIzQzOwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQocHJpdik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7YWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwsCiYjNDM7CQkJCQkgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID8KJiM0MzsJCQkJCSAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gaW50ZXJmYWNlOwomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBwaHlfYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJdTggcGFja2FnZV9zdGF0dXM7CiYjNDM7CXUxNiByZXNldF92YWx1ZTsKJiM0MzsJaW50IHN5c19jb250cm9sOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtsb2NrKTsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IDA7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CXByaXYtJmd0O3Bvd2VyZWQgPSB0cnVlOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBleHRlcm5hbC1zdXBwbHkgY29uZmlndXJhdGlvbiBhY3Jvc3MgY2hpcCByZXNldHMuICovCiYjNDM7CXJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBUaGUgbWFudWFsIHJlcXVpcmVzIGJvdGggcmVzZXRzIHRvIGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgY2xvY2tzLiAqLwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCSAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfAomIzQzOwkJCQkgIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkJICAgcHJpdi0mZ3Q7c3lzX2NvbnRyb2wpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlzeXNfY29udHJvbCA9IGFjMzAwX2VwaHlfY3RsX3JlYWQocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHKTsKJiM0MzsJaWYgKHN5c19jb250cm9sICZsdDsgMCkgewomIzQzOwkJcmV0ID0gc3lzX2NvbnRyb2w7CiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpOwomIzQzOwlpZiAoKH5wYWNrYWdlX3N0YXR1cyAmYW1wOyBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9CiYjNDM7CSAgICBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzICZhbXA7IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87CiYjNDM7CXByaXYtJmd0O3BhY2thZ2Vfa25vd24gPSB0cnVlOwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRywKJiM0MzsJCQkJICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLAomIzQzOwkJCQkgICBwcml2LSZndDtpbnRlcm5hbF9kbGRvID8KJiM0MzsJCQkJICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLAomIzQzOwkJCQkgICBBQzMwMF9TWVNfSU9fVkFMVUUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlmc2xlZXAoMTAwMDApOwomIzQzOwomIzQzOwlyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCSAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCSAgQUMzMDBfRVBIWV9TSFVURE9XTik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CWZzbGVlcCgxMDAwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzO2Vycl9wb3dlcl9vZmY6CiYjNDM7CWFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQocHJpdik7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjMzAwX2VwaHlfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXJlZ3VsYXRvcl9kaXNhYmxlKGRhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWNsa19wdXQoZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXN0cnVjdCByZWd1bGF0b3IgKnZjYzE7CiYjNDM7CXU4IGJnc19lZmZ1c2VfY29kZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5hZGRyICZndDsgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxuJiMzNDspKTsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXZjYzEgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsICYjMzQ7dmNjMSYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUih2Y2MxKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHZjYzEpLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgVkNDMSBzdXBwbHlcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ3VsYXRvcl9lbmFibGUodmNjMSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBlbmFibGUgVkNDMSBzdXBwbHlcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfcmVndWxhdG9yX2Rpc2FibGUsCiYjNDM7CQkJCSAgICAgICB2Y2MxKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi8KJiM0MzsJZnNsZWVwKDEwMDAwKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7Y2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O2NsaykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LSZndDtjbGspLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CWNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtJmd0O2Nsayk7CiYjNDM7CXN3aXRjaCAoY2xrX3JhdGUpIHsKJiM0MzsJY2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjoKJiM0MzsJCXByaXYtJmd0O3N5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6CiYjNDM7CQlwcml2LSZndDtzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O3Vuc3VwcG9ydGVkIGlucHV0IGNsb2NrIHJhdGUgJWx1IEh6XG4mIzM0OywKJiM0MzsJCQkJCSAgICAgY2xrX3JhdGUpKTsKJiM0MzsJfQomIzQzOwlwcml2LSZndDtzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUzsKJiM0MzsKJiM0MzsJLyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqLwomIzQzOwliZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVCkgJmFtcDsKJiM0MzsJCQkgICBGSUVMRF9NQVgoQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0spOwomIzQzOwlwcml2LSZndDtlcGh5X2NvbmZpZyA9CiYjNDM7CQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpOwomIzQzOwkvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovCiYjNDM7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb24gPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vZmYgPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmY7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7CiYjNDM7CS8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi8KJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cHJpdi0mZ3Q7Y29udHJvbDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1tYWluLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjc3YzYxNjk4MjFjMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uYwpAQCAtMCwwICYjNDM7MSw1MzYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgJmx0O2plcm5lai5za3JhYmVjQGdtYWlsLmNvbSZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbnZtZW0tY29uc3VtZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3BoeWxpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hwb3dlcnMtYWN4MDAuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0lECQkJCTB4MDA0NDE0MDAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0sJR0VOTUFTSygzLCAwKQomIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMAkJQklUKDgpCiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cJQklUKDkpCiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcJCQkweDFmCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLCQkJR0VOTUFTSygxMiwgOCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMAkJCQkwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzEJCQkJMQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV8yCQkJCTIKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfNgkJCQk2CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzgJCQkJOAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcJCTB4MTMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUCUJJVCgxMikKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0sJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8JCTIKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRwkJMHgxMgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFCTB4NDgyNAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUJCQlCSVQoMTUpCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcJMHgxNwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRQlCSVQoMykKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUcJCTB4MTgKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLCQlHRU5NQVNLKDE0LCAxMikKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUCTAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRwkJMHgxMAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRQkweDU1MjMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUJCTB4ZjAwMAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRwkweDE0CiYjNDM7I2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFCTB4NzA4ZgomIzQzOyNkZWZpbmUgQUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRQkweDcwOGIKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRwkJCTB4MTUKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSwkJR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLCQlHRU5NQVNLKDcsIDApCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXAomIzQzOwkoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXAomIzQzOwkgRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTSywgKF8xMG0pKSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXAomIzQzOwlBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcCiYjNDM7CUFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpCiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcJCTB4MTgKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFCQkweDAwYmMKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHCQkweDFkCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMJMHgwMDQ0CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXAomIzQzOwkoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFwKJiM0MzsJIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3IKJiM0MzsgKiByZWdpc3RlciBtYXAsIHdoaWNoIGFsc28gbWF0Y2hlcyB0aGUgb2JzZXJ2ZWQgQUN4MDAgcmVzZXQgdmFsdWVzLiBUaGUgQUN4MDAKJiM0MzsgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZQomIzQzOyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLgomIzQzOyAqLwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYgewomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sOwomIzQzOwlib29sIGlzX2FjMzAwOwomIzQzOwlib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nOwomIzQzOwlib29sIHhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLAomIzQzOwkJCSAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcGFnZSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2NvbnRyb2wtJmd0O3Bvd2VyX29uKHByaXYtJmd0O2NvbnRyb2wsCiYjNDM7CQkJCSAgICAgICBwcml2LSZndDtwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2NvbnRyb2wtJmd0O3Bvd2VyX29mZihwcml2LSZndDtjb250cm9sKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGh5ZGV2LSZndDtpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2NvbnRyb2wtJmd0O3NldF9pbnRlcmZhY2UocHJpdi0mZ3Q7Y29udHJvbCwKJiM0MzsJCQkJCSAgICBwaHlkZXYtJmd0O2ludGVyZmFjZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gZGF0YTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXBoeWRldl93YXJuKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkgICAgJiMzNDtmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxuJiMzNDssCiYjNDM7CQkJICAgIEVSUl9QVFIocmV0KSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiYjNDM7CQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudm1lbV9jZWxsICpjZWxsOwomIzQzOwlzaXplX3QgaTsKJiM0MzsJc2l6ZV90IGxlbjsKJiM0MzsJdTggKmJ1ZjsKJiM0MzsJdTE2IHZhbCA9IDA7CiYjNDM7CiYjNDM7CWNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChub2RlLCBuYW1lKTsKJiM0MzsJaWYgKElTX0VSUihjZWxsKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGNlbGwpOwomIzQzOwomIzQzOwlidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgJmFtcDtsZW4pOwomIzQzOwludm1lbV9jZWxsX3B1dChjZWxsKTsKJiM0MzsJaWYgKElTX0VSUihidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoYnVmKTsKJiM0MzsJaWYgKCFsZW4gfHwgbGVuICZndDsgc2l6ZW9mKCp2YWx1ZSkpIHsKJiM0MzsJCWtmcmVlKGJ1Zik7CiYjNDM7CQlyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGxlbjsgaSYjNDM7JiM0MzspCiYjNDM7CQl2YWwgfD0gKHUxNilidWZbaV0gJmx0OyZsdDsgKDggKiBpKTsKJiM0MzsJa2ZyZWUoYnVmKTsKJiM0MzsJKnZhbHVlID0gdmFsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTsKJiM0MzsJYm9vbCBzZWxlY3RhYmxlOwomIzQzOwlib29sIGZpeGVkX2FjMzAwOwomIzQzOwlib29sIGhhc19jb25maWd1cmF0aW9uOwomIzQzOwl1OCBjYWxpYnJhdGlvbjsKJiM0MzsJdTMyIGJhc2VfYWRkcjsKJiM0MzsJdTE2IGNvbmZpZ3VyYXRpb24gPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi0mZ3Q7b2Zfbm9kZSk7CiYjNDM7CWlmICghcGFja2FnZV9ub2RlKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgJiMzNDtldGhlcm5ldC1waHktcGFja2FnZSYjMzQ7KSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O1BIWSBpcyBub3QgaW4gYW4gRXRoZXJuZXQgUEhZIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgJiMzNDtyZWcmIzM0OywgJmFtcDtiYXNlX2FkZHIpOwomIzQzOwlpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtJmd0O21kaW8uYWRkcikgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O3BhY2thZ2UgYW5kIGxpbmsgUEhZIGFkZHJlc3NlcyBkaWZmZXJcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkgICAgICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDspOwomIzQzOwlmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgICYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDspOwomIzQzOwlpZiAoIXNlbGVjdGFibGUgJmFtcDsmYW1wOyAhZml4ZWRfYWMzMDAgJmFtcDsmYW1wOwomIzQzOwkgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJICAgICAmIzM0O3gtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZSYjMzQ7KSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O3Vuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CiYjNDM7CWhhc19jb25maWd1cmF0aW9uID0KJiM0MzsJCW9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsICYjMzQ7bnZtZW0tY2VsbC1uYW1lcyYjMzQ7LAomIzQzOwkJCQkJICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7KSAmZ3Q7PSAwOwomIzQzOwlpZiAoaGFzX2NvbmZpZ3VyYXRpb24pIHsKJiM0MzsJCXJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OywKJiM0MzsJCQkJCQkmYW1wO2NvbmZpZ3VyYXRpb24pOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgJiMzNDtmYWlsZWQgdG8gcmVhZCBwYWNrYWdlIGNvbmZpZ3VyYXRpb25cbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7cGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2VsZWN0YWJsZSkgewomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgPQomIzQzOwkJCWNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXByaXYtJmd0O2lzX2FjMzAwID0gZml4ZWRfYWMzMDA7CiYjNDM7CQlpZiAoaGFzX2NvbmZpZ3VyYXRpb24gJmFtcDsmYW1wOwomIzQzOwkJICAgICEhKGNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT0KJiM0MzsJCSAgICBwcml2LSZndDtpc19hYzMwMCkgewomIzQzOwkJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICYjMzQ7Y29uZmlndXJhdGlvbiBkb2VzIG5vdCBtYXRjaCBwYWNrYWdlXG4mIzM0Oyk7CiYjNDM7CQkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSywKJiM0MzsJCQkJY29uZmlndXJhdGlvbik7CiYjNDM7CiYjNDM7CXByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nID0KJiM0MzsJCXByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsKJiM0MzsJCSEhKGNvbmZpZ3VyYXRpb24gJmFtcDsgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTsKJiM0MzsJcHJpdi0mZ3Q7eG1paV9yeF9jbG9ja19pbnZlcnRlZCA9CiYjNDM7CQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLAomIzQzOwkJCQkgICAgICAmIzM0O3gtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCkKJiM0MzsJCXByaXYtJmd0O2NvbnRyb2wgPQomIzQzOwkJCWFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgIGNhbGlicmF0aW9uKTsKJiM0MzsJZWxzZQomIzQzOwkJcHJpdi0mZ3Q7Y29udHJvbCA9CiYjNDM7CQkJYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sCiYjNDM7CQkJCQkgICAgICBjYWxpYnJhdGlvbik7CiYjNDM7CXJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LSZndDtjb250cm9sKTsKJiM0MzsKJiM0MztvdXRfcHV0X25vZGU6CiYjNDM7CW9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSwKJiM0MzsJCQkJQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLAomIzQzOwkJCQlBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtvZl9ub2RlKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXByaXYtJmd0O3BoeWRldiA9IHBoeWRldjsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlLCBwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi8KJiM0MzsJcmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJdTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LSZndDtpc19hYzMwMCA/CiYjNDM7CQlBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFIDoKJiM0MzsJCUFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7CiYjNDM7CXUxNiB0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUU7CiYjNDM7CXUxNiBnbG9iYWxfY29uZmlnOwomIzQzOwlpbnQgb2xkcGFnZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSywKJiM0MzsJCQkJICAgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTyk7CiYjNDM7CWlmIChwcml2LSZndDt4bWlpX3J4X2Nsb2NrX2ludmVydGVkKQomIzQzOwkJZ2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMCwKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsCiYjNDM7CQkJICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHwKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSywgZ2xvYmFsX2NvbmZpZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aXNfYWMzMDAgJmFtcDsmYW1wOyBwcml2LSZndDt1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykgewomIzQzOwkJYWZlX2VxX3J4X2RldGVjdCA9CiYjNDM7CQkJQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFOwomIzQzOwkJdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpOwomIzQzOwlpZiAob2xkcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSywKJiM0MzsJCQkgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLAomIzQzOwkJCQkgICAgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVCkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBhZmVfZXFfcnhfZGV0ZWN0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRywKJiM0MzsJCQkJICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRywKJiM0MzsJCQkgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTsKJiM0MzsKJiM0MztvdXRfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovCiYjNDM7CXJldHVybiBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovCiYjNDM7CXJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXN1bWVfcmV0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcmVzdW1lX3JldCA9IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpOwomIzQzOwkJaWYgKHJlc3VtZV9yZXQpCiYjNDM7CQkJcGh5ZGV2X3dhcm4ocGh5ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtmYWlsZWQgdG8gcmVjb3ZlciBmcm9tIHN1c3BlbmQgZXJyb3I6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBoeWRldi0mZ3Q7bWRpby5kZXYub2Zfbm9kZTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7CiYjNDM7CWJvb2wgbWF0Y2g7CiYjNDM7CiYjNDM7CWlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqLwomIzQzOwlwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpOwomIzQzOwlpZiAoIXBhY2thZ2Vfbm9kZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwltYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDspIHx8CiYjNDM7CQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZSYjMzQ7KSB8fAomIzQzOwkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CW9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBtYXRjaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7CiYjNDM7CXsKJiM0MzsJCVBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSwKJiM0MzsJCS5uYW1lID0gJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZJiMzNDssCiYjNDM7CQkubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSwKJiM0MzsJCS5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsCiYjNDM7CQkucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZSA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZSwKJiM0MzsJCS5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LAomIzQzOwkJLmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCwKJiM0MzsJCS5kaXNhYmxlX2F1dG9ub21vdXNfZWVlID0gYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlLAomIzQzOwkJLnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsCiYjNDM7CX0sCiYjNDM7fTsKJiM0Mzttb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0gewomIzQzOwl7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC5oCkBAIC0wLDAgJiM0MzsxLDI4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOyNpZm5kZWYgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9ICiYjNDM7I2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VUCTE2CiYjNDM7CiYjNDM7c3RydWN0IGRldmljZV9ub2RlOwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgewomIzQzOwlpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQl1bnNpZ25lZCBpbnQgcGh5X2FkZHIpOwomIzQzOwlpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpOwomIzQzOwlpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICoKJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLAomIzQzOwkJICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTsKJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICoKJiM0MzthYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbik7CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzU4CgkJCQkJCQlvdXRwdXQ6IDEzMAoJCQkJCQkJdGhvdWdodHM6IDE2MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IFgtUG93ZXJzIEFDMjAwL0FDMzAwIFBIWSBEcml2ZXJzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBwYXRjaCBzZXJpZXMgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZcywgYWxvbmcgd2l0aCBhIG5ldyBNRkQgZHJpdmVyIGZvciB0aGUgQUMyMDAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSBRRU1VLCB3aGljaCBpcyB3aGF0IHN5emthbGxlciB0eXBpY2FsbHkgdXNlcy4KClRoZSBBQzIwMCBNRkQgZHJpdmVyIGlzIEkyQy1iYXNlZCwgYW5kIHRoZSBQSFkgZHJpdmVyIGlzIE1ESU8tYmFzZWQuIEkga25vdyB0aGF0LCBpbiBnZW5lcmFsLCBJMkMgYW5kIE1ESU8gZGV2aWNlcyBhcmVuJiMzOTt0IHRyaXZpYWxseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdlIG5lZWQgYW4gZW11bGF0ZWQgSTJDL01ESU8gY29udHJvbGxlciwgb3IgYXQgbGVhc3QgYWNjZXNzIHZpYSBgaTJjLWRldmAgb3IgYG1kaW8tZGV2YC4gU3l6a2FsbGVyICpjYW4qIGZ1enogSTJDIHZpYSBgL2Rldi9pMmMtKmAsIGJ1dCBpdCBkb2VzbiYjMzk7dCBuYXRpdmVseSB0YXJnZXQgc3BlY2lmaWMgSTJDIGNsaWVudCBkcml2ZXJzIHVubGVzcyB0aGV5IGV4cG9zZSBjaGFyYWN0ZXIgZGV2aWNlcy4gQW5kLCB3aGlsZSBzeXprYWxsZXIgaGFzIHNvbWUgSTJDIHN1cHBvcnQsIHRoZXJlJiMzOTtzIG5vIGdlbmVyaWMgTURJTyBmdXp6ZXIuIFNvLCB0aGF0JiMzOTtzIG5vdCBsb29raW5nIHByb21pc2luZy4KClRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQ2FuIHdlIGluc3RhbnRpYXRlIHRoZXNlIGRldmljZXM/IEkyQyBkZXZpY2VzICpjYW4qIGJlIGluc3RhbnRpYXRlZCB2aWEgc3lzZnMsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nLiBCdXQgTURJTyBkZXZpY2VzPyBUeXBpY2FsbHksIFBIWXMgYXJlIGluc3RhbnRpYXRlZCBlaXRoZXIgYnkgdGhlIE1BQyBkcml2ZXIsIG9yIHZpYSBhIGRldmljZSB0cmVlLiBDYW4gd2UgZXZlbiBpbmplY3QgdGhvc2Ugbm9kZXM/IE5vLCBzeXprYWxsZXIgZG9lc24mIzM5O3Qgc3VwcG9ydCBkeW5hbWljIGRldmljZSB0cmVlIG92ZXJsYXkgaW5qZWN0aW9uLiBTbywgYWxyZWFkeSwgdGhhdCYjMzk7cyBhIGJpZyByZWQgZmxhZy4KCkxldCYjMzk7cyBsb29rIGNsb3NlciBhdCB0aGUgZHJpdmVycy4gVGhlIE1GRCBkcml2ZXIsIGBhYzIwMC5jYCwgaXMgYW4gSTJDIGRyaXZlciwgYW5kIGl0cyBwcm9iZSBmdW5jdGlvbiBydW5zLiBJdCB1c2VzIGBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldF9lbmFibGVgLCB3aGljaCBjb3VsZCBmYWlsIGlmIHdlIGRvbiYjMzk7dCBoYXZlIHRoZSByaWdodCByZWd1bGF0b3JzLiBJdCBhbHNvIGdldHMgYSBjbG9jayB2aWEgYGRldm1fY2xrX2dldF9lbmFibGVkYCwgd2hpY2ggd2lsbCBsaWtlbHkgZmFpbCB3aXRob3V0IGEgc3BlY2lmaWMgY2xvY2sgaW4gdGhlIGRldmljZSB0cmVlLiBTbywgZXZlbiBnZXR0aW5nICpwYXN0KiB0aGUgcHJvYmUgZnVuY3Rpb24gbG9va3MgY2hhbGxlbmdpbmcgd2l0aG91dCBhIHNwZWNpZmljIGRldmljZSB0cmVlLgoKVGhlIFBIWSBkcml2ZXIgaGFzIHNpbWlsYXIgY2hhbGxlbmdlcy4gSXRzIG1hdGNoIGZ1bmN0aW9uLCBgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlYCwgY2hlY2tzIGZvciBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MgZnJvbSBhIHBhY2thZ2Ugbm9kZSBhbmQgY29tcGF0aWJsZSBzdHJpbmdzLiBUaGVzZSBhcmUgZXhwbGljaXQgZGV2aWNlIHRyZWUgZGVwZW5kZW5jaWVzLiBUaGlzIHdvbiYjMzk7dCB3b3JrIGluIGEgZ2VuZXJpYyBRRU1VIGVudmlyb25tZW50IOKAkyB0aGVyZSYjMzk7cyBubyBkZXZpY2UgdHJlZSB3aXRoIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uIEFuZCwgbG9va2luZyBhdCB0aGUgcHJvYmUgZnVuY3Rpb24gaXRzZWxmLCBpdCBhbHNvIGV4cGxpY2l0bHkgY2hlY2tzIGBkZXYtJmd0O29mX25vZGVgLCBtZWFuaW5nIGEgZGV2aWNlIHRyZWUgKmlzKiByZXF1aXJlZC4KCkkgc2VlIHRoYXQgYE1GRF9BQzIwMGAgZGVwZW5kcyBvbiBgT0ZgIGluIEtjb25maWcsIGFuZCBgWFBPV0VSU19BQ1gwMF9QSFlgIGRlcGVuZHMgb24gYE9GX01ESU9gLCBgQ09NTU9OX0NMS2AsIGFuZCBgUkVHVUxBVE9SYC4gVGhpcyBjb25maXJtcyBteSBzdXNwaWNpb24g4oCTIGl0JiMzOTtzIGFsbCBkZXZpY2UgdHJlZSBhbmQgaGFyZHdhcmUtZGVwZW5kZW50LiBTaW5jZSB0aGVzZSBkcml2ZXJzIGFyZSBzbyB0aWdodGx5IGNvdXBsZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGRlZmluZWQgaW4gdGhlIGRldmljZSB0cmVlLCBhbmQgd2UgY2FuJiMzOTt0IGluamVjdCB0aG9zZSBub2RlcyBkeW5hbWljYWxseSwgaXQmIzM5O3MgdmlydHVhbGx5IGltcG9zc2libGUgdG8gcmVhY2ggdGhvc2UgY29kZSBwYXRocyBpbiBhIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpc24mIzM5O3Qgd29ydGggZnV6emluZy4gSSYjMzk7bGwgc3VtbWFyaXplIHRoZSByZWFzb25pbmc6IFRoZSBkcml2ZXJzIGFyZSBoZWF2aWx5IGRlcGVuZGVudCBvbiB0aGUgZGV2aWNlIHRyZWUsIHdoaWNoIGlzIG5vdCBlYXNpbHkgZW11bGF0ZWQgb3IgaW5qZWN0ZWQuCkkgd2lsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWXMgYW5kIHRoZSBBQzIwMCBNRkQuIFRoZXNlIGRyaXZlcnMgYXJlIGhlYXZpbHkgZGVwZW5kZW50IG9uIERldmljZSBUcmVlIChPRikgZm9yIHByb2JpbmcgYW5kIGNvbmZpZ3VyYXRpb24gKGUuZy4sIGNoZWNraW5nIGZvciBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MgYW5kIGBkZXYtXHUwMDNlb2Zfbm9kZWApLiBTaW5jZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHVzZWQgZm9yIGZ1enppbmcgZG8gbm90IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBvciBkZXZpY2UgdHJlZSBub2RlcywgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZcyBhbmQgdGhlIEFDMjAwIE1GRC4gVGhlc2UgZHJpdmVycyBhcmUgaGVhdmlseSBkZXBlbmRlbnQgb24gRGV2aWNlIFRyZWUgKE9GKSBmb3IgcHJvYmluZyBhbmQgY29uZmlndXJhdGlvbiAoZS5nLiwgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGNvbXBhdGlibGUgc3RyaW5ncyBhbmQgYGRldi1cdTAwM2VvZl9ub2RlYCkuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdXNlZCBmb3IgZnV6emluZyBkbyBub3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIG5vZGVzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDY6MjI6NTUuNzk2NTU3NDM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU5MjM1OTE5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWXMgYW5kIHRoZSBBQzIwMCBNRkQuIFRoZXNlIGRyaXZlcnMgYXJlIGhlYXZpbHkgZGVwZW5kZW50IG9uIERldmljZSBUcmVlIChPRikgZm9yIHByb2JpbmcgYW5kIGNvbmZpZ3VyYXRpb24gKGUuZy4sIGNoZWNraW5nIGZvciBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MgYW5kIGBkZXYtXFx1MDAzZW9mX25vZGVgKS4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSB1c2VkIGZvciBmdXp6aW5nIGRvIG5vdCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgb3IgZGV2aWNlIHRyZWUgbm9kZXMsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGFuZCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA2OjIyOjU1Ljc5NjU2Mzk5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxOTU2NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjJjMTMxMzlkMjhiNjdhNjMxMzliMDZlZDFkNzBhYzVmNWJkMjdkN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDA2OjIyOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjdlOGQ5YmQ1NjYxYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWxcXG5AQCAtMCwwICsxLDY5IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxcbislWUFNTCAxLjJcXG4rLS0tXFxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIG1peGVkLXNpZ25hbCBJQ1xcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOlxcbisgIFRoZSBBQzIwMCBpcyBhIG1peGVkLXNpZ25hbCBjb21wYW5pb24gSUMgY29udGFpbmluZyBhdWRpbywgdmlkZW8sIFJUQyBhbmRcXG4rICBGYXN0IEV0aGVybmV0IFBIWSBmdW5jdGlvbnMuIEl0cyBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgb3ZlciBJMkMuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBjb25zdDogeC1wb3dlcnMsYWMyMDBcXG4rXFxuKyAgcmVnOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgY2xvY2tzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBBQzIwMCBpbnB1dCBjbG9jay4gV2hlbiB1c2luZyB0aGUgRXRoZXJuZXQgUEhZLCBpdHMgY29uZmlndXJlZCByYXRlIG11c3RcXG4rICAgICAgYmUgMjQgb3IgMjcgTUh6LCBtYXRjaGluZyB0aGUgcmF0ZXMgZW5jb2RlZCBieSB0aGUgZG9jdW1lbnRlZCBFUEhZIGNsb2NrXFxuKyAgICAgIHNlbGVjdG9yLlxcbitcXG4rICBhYy1sZG9pbi1zdXBwbHk6XFxuKyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgYXVkaW8tY29kZWMgTERPIGlucHV0XFxuK1xcbisgIGVwaHktdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZFxcbitcXG4rICBydGMtdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBSVENcXG4rXFxuKyAgdHYtdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOiAzLjMgViBzdXBwbHkgZm9yIHRoZSBUViBlbmNvZGVyIERBQ1xcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSByZWdcXG4rICAtIGNsb2Nrc1xcbisgIC0gYWMtbGRvaW4tc3VwcGx5XFxuKyAgLSBlcGh5LXZjYy1zdXBwbHlcXG4rICAtIHJ0Yy12Y2Mtc3VwcGx5XFxuKyAgLSB0di12Y2Mtc3VwcGx5XFxuK1xcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgaTJjIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgbWl4ZWQtc2lnbmFsQDEwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzIwMFxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MweDEwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZwd20gNVxcdTAwM2U7XFxuKyAgICAgICAgICAgIGFjLWxkb2luLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIGVwaHktdmNjLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIHJ0Yy12Y2Mtc3VwcGx5ID0gXFx1MDAzY1xcdTAwMjZyZWdfM3YzXFx1MDAzZTtcXG4rICAgICAgICAgICAgdHYtdmNjLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgfTtcXG4rICAgIH07XFxuKy4uLlxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjJiZGRjN2EyZjk0MVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXFxuQEAgLTAsMCArMSwyMDggQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXNcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XFxuKyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZVxcbisgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBwYXJ0IG9mIGFuIEkyQyBNRkQsXFxuKyAgd2hpbGUgQUMzMDAgY29udHJvbCByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2XFxuKyAgcGx1cyB0aGUgbGluayBQSFkgYWRkcmVzcy5cXG4rXFxuKyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS5cXG4rICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxcbisgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLlxcbitcXG4rICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcXG4rICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kXFxuKyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50b1xcbisgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxcbitcXG4rc2VsZWN0OlxcbisgIHByb3BlcnRpZXM6XFxuKyAgICBjb21wYXRpYmxlOlxcbisgICAgICBlbnVtOlxcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXG4rICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgIHJlcXVpcmVkOlxcbisgICAgLSBjb21wYXRpYmxlXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbitcXG4rICByZWc6XFxuKyAgICBtYXhpbXVtOiAzMVxcbitcXG4rICBjbG9ja3M6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6LiBUaGUgQUMyMDAgaW5wdXQgY2xvY2tcXG4rICAgICAgYmVsb25ncyB0byB0aGUgcmVmZXJlbmNlZCBBQzIwMCBNRkQgaW5zdGVhZC5cXG4rXFxuKyAgdmNjMS1zdXBwbHk6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgMy4zIFYgc3VwcGx5IGZvciB0aGUgQUMzMDAgSS9PLCBiYW5kZ2FwLCBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZCxcXG4rICAgICAgYW5kIGludGVybmFsIGRpZ2l0YWwgTERPXFxuK1xcbisgIG52bWVtLWNlbGxzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xcbisgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxcbisgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxcbisgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxcbisgICAgICBjb3B5IGluc3RlYWQuXFxuK1xcbisgIG52bWVtLWNlbGwtbmFtZXM6XFxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxcbitcXG4rICB4LXBvd2VycyxhYzIwMDpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcXG4rICAgIGRlc2NyaXB0aW9uOiBSZWZlcmVuY2UgdG8gdGhlIEFDMjAwIE1GRCBjb250YWluaW5nIHRoaXMgRXRoZXJuZXQgUEhZXFxuK1xcbisgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XFxuKyAgICB0eXBlOiBib29sZWFuXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxcbitcXG4rcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxcbisgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXFxuKyAgICBwcm9wZXJ0aWVzOlxcbisgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXG4rICAgIHJlcXVpcmVkOlxcbisgICAgICAtIGNvbXBhdGlibGVcXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbitcXG4rZGVwZW5kZW50UmVxdWlyZWQ6XFxuKyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXFxuKyAgbnZtZW0tY2VsbC1uYW1lczogWyBudm1lbS1jZWxscyBdXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjbG9ja3M6IGZhbHNlXFxuKyAgICAgICAgdmNjMS1zdXBwbHk6IGZhbHNlXFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHJlZzpcXG4rICAgICAgICAgIG1heGltdW06IDdcXG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSBjbG9ja3NcXG4rICAgICAgICAtIHZjYzEtc3VwcGx5XFxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXG4rICAgIHRoZW46XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgcmVnOlxcbisgICAgICAgICAgbWF4aW11bTogN1xcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIGNsb2Nrc1xcbisgICAgICAgIC0gdmNjMS1zdXBwbHlcXG4rICAgICAgICAtIG52bWVtLWNlbGxzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXFxuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICBtZGlvIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxcIjtcXG4rICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIGNsb2NrcyA9IFxcdTAwM2NcXHUwMDI2cHdtIDVcXHUwMDNlO1xcbisgICAgICAgICAgICB2Y2MxLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXFx1MDAzY1xcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXFxcImNvbmZpZ3VyYXRpb25cXFwiO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXFwiO1xcbisgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbitcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZwd20gNVxcdTAwM2U7XFxuKyAgICAgICAgICAgIHZjYzEtc3VwcGx5ID0gXFx1MDAzY1xcdTAwMjZyZWdfM3YzXFx1MDAzZTtcXG4rICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcXHUwMDNjXFx1MDAyNmVwaHlfY29uZmlndXJhdGlvblxcdTAwM2U7XFxuKyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcXFwiY29uZmlndXJhdGlvblxcXCI7XFxuK1xcbisgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7XFxuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxcXCI7XFxuKyAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIH07XFxuKyAgICAgICAgfTtcXG4rICAgIH07XFxuK1xcbisgIC0gfFxcbisgICAgbWRpbyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDEge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFxcdTAwM2NcXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXFx1MDAzZTtcXG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFxcXCJjb25maWd1cmF0aW9uXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAxIHtcXG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXFxcIjtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rLi4uXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnXFxuaW5kZXggNzYzY2U2YTM0NzgyYi4uNDk5MjY5Yzg1ODEyNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZ1xcbkBAIC0yMDUsNiArMjA1LDE3IEBAIGNvbmZpZyBNRkRfQUMxMDBcXG4gXFx0ICBUaGlzIGRyaXZlciBpbmNsdWRlIG9ubHkgdGhlIGNvcmUgQVBJcy4gWW91IGhhdmUgdG8gc2VsZWN0IGluZGl2aWR1YWxcXG4gXFx0ICBjb21wb25lbnRzIGxpa2UgY29kZWNzIG9yIFJUQyB1bmRlciB0aGUgY29ycmVzcG9uZGluZyBtZW51cy5cXG4gXFxuK2NvbmZpZyBNRkRfQUMyMDBcXG4rXFx0dHJpc3RhdGUgXFxcIlgtUG93ZXJzIEFDMjAwXFxcIlxcbitcXHRkZXBlbmRzIG9uIEkyQ1xcbitcXHRkZXBlbmRzIG9uIE9GXFxuK1xcdHNlbGVjdCBSRUdNQVBfSTJDXFxuK1xcdGhlbHBcXG4rXFx0ICBTdXBwb3J0IGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIGNvbXBhbmlvbiBJQy4gVGhlIEFDMjAwXFxuK1xcdCAgY29udGFpbnMgYXVkaW8sIHZpZGVvLCBSVEMgYW5kIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucyBhbmQgaXNcXG4rXFx0ICBjby1wYWNrYWdlZCB3aXRoIHNvbWUgQWxsd2lubmVyIEg2IGFuZCBINjE2IFNvQ3MuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXFxuK1xcdCAgdGhlIHNoYXJlZCByZWdpc3RlciBhY2Nlc3MgdXNlZCBieSB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBkcml2ZXJzLlxcbitcXG4gY29uZmlnIE1GRF9BWFAyMFhcXG4gXFx0dHJpc3RhdGVcXG4gXFx0c2VsZWN0IE1GRF9DT1JFXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcXG5pbmRleCBkZDRiYjdlNzdjMzM2Li44OTBlNzZhOWFkMDBhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcXG5AQCAtMTUwLDYgKzE1MCw3IEBAIG9iai0kKENPTkZJR19NRkRfREE5MDUyX1NQSSlcXHQrPSBkYTkwNTItc3BpLm9cXG4gb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfSTJDKVxcdCs9IGRhOTA1Mi1pMmMub1xcbiBcXG4gb2JqLSQoQ09ORklHX01GRF9BQzEwMClcXHRcXHQrPSBhYzEwMC5vXFxuK29iai0kKENPTkZJR19NRkRfQUMyMDApXFx0XFx0Kz0gYWMyMDAub1xcbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWClcXHQrPSBheHAyMHgub1xcbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWF9JMkMpXFx0Kz0gYXhwMjB4LWkyYy5vXFxuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX1JTQilcXHQrPSBheHAyMHgtcnNiLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWMyMDAuYyBiL2RyaXZlcnMvbWZkL2FjMjAwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjc5OGJiNDE3M2IxNGJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9tZmQvYWMyMDAuY1xcbkBAIC0wLDAgKzEsMTc2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogTUZEIGNvcmUgZHJpdmVyIGZvciB0aGUgWC1Qb3dlcnMgQUMyMDBcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFxcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICpcXG4rICogQmFzZWQgb24gdGhlIEFDMTAwIGRyaXZlcjpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE2IENoZW4tWXUgVHNhaVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1JFR1xcdFxcdFxcdDB4MDAwMFxcbisjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1BBQ0tBR0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDE0KVxcbisjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTS1xcdFxcdEdFTk1BU0soMTEsIDApXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX1JFR1xcdFxcdFxcdDB4MDAwMlxcbisjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX0NISVBfUkVTRVRfREVBU1NFUlRcXHRCSVQoMClcXG4rXFxuKy8qIEludGVyZmFjZSByZWdpc3RlciBhY2Nlc3NpYmxlIGZyb20gZXZlcnkgcmVnaXN0ZXIgcGFnZS4gKi9cXG4rI2RlZmluZSBBQzIwMF9UV0lfUkVHX0FERFJfSFxcdDB4MDBmZVxcbisjZGVmaW5lIEFDMjAwX01BWF9SRUdcXHRcXHQweGExZjJcXG4rXFxuK3N0cnVjdCBhYzIwMCB7XFxuK1xcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYWMyMDBfc3VwcGxpZXNbXSA9IHtcXG4rXFx0XFxcImFjLWxkb2luXFxcIixcXG4rXFx0XFxcImVwaHktdmNjXFxcIixcXG4rXFx0XFxcInJ0Yy12Y2NcXFwiLFxcbitcXHRcXFwidHYtdmNjXFxcIixcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlX2NmZyBhYzIwMF9yYW5nZV9jZmdbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHQucmFuZ2VfbWF4ID0gQUMyMDBfTUFYX1JFRyxcXG4rXFx0XFx0LnNlbGVjdG9yX3JlZyA9IEFDMjAwX1RXSV9SRUdfQUREUl9ILFxcbitcXHRcXHQuc2VsZWN0b3JfbWFzayA9IDB4ZmYsXFxuK1xcdFxcdC53aW5kb3dfbGVuID0gMjU2LFxcbitcXHR9LFxcbit9O1xcbitcXG4rLypcXG4rICogRWFjaCBBQzIwMCBzdWItYmxvY2sgY2FuIHJlc2V0IGluZGVwZW5kZW50bHksIGludmFsaWRhdGluZyBpdHMgcmVnaXN0ZXJcXG4rICogY29udGVudHMgd2l0aG91dCByZWdtYXAncyBrbm93bGVkZ2UuIENhY2hlIG9ubHkgdGhlIGNvbW1vbiBwYWdlIHNlbGVjdG9yO1xcbisgKiB0aGlzIGF2b2lkcyBhIHNlbGVjdG9yIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBldmVyeSBhY2Nlc3Mgb24gdGhlIHNhbWUgcGFnZVxcbisgKiB3aXRob3V0IGV2ZXIgcmV0dXJuaW5nIHN0YWxlIGZ1bmN0aW9uYWwtcmVnaXN0ZXIgdmFsdWVzLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgYWMyMDBfdm9sYXRpbGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZylcXG4re1xcbitcXHRyZXR1cm4gcmVnICE9IEFDMjAwX1RXSV9SRUdfQUREUl9IO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWMyMDBfcmVnbWFwX2NvbmZpZyA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwiYWMyMDBcXFwiLFxcbitcXHQucmVnX2JpdHMgPSA4LFxcbitcXHQucmVnX3N0cmlkZSA9IDIsXFxuK1xcdC52YWxfYml0cyA9IDE2LFxcbitcXHQucmFuZ2VzID0gYWMyMDBfcmFuZ2VfY2ZnLFxcbitcXHQubnVtX3JhbmdlcyA9IEFSUkFZX1NJWkUoYWMyMDBfcmFuZ2VfY2ZnKSxcXG4rXFx0Lm1heF9yZWdpc3RlciA9IEFDMjAwX01BWF9SRUcsXFxuK1xcdC52b2xhdGlsZV9yZWcgPSBhYzIwMF92b2xhdGlsZV9yZWcsXFxuK1xcdC5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTUFQTEUsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBhYzIwMF9kaXNhYmxlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGFjMjAwICpkZGF0YSA9IGRhdGE7XFxuK1xcbitcXHRyZWdtYXBfd3JpdGUoZGRhdGEtXFx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldjtcXG4rXFx0dW5zaWduZWQgaW50IHZlcnNpb247XFxuK1xcdHN0cnVjdCBhYzIwMCAqZGRhdGE7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWRkYXRhKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0X2VuYWJsZShkZXYsIEFSUkFZX1NJWkUoYWMyMDBfc3VwcGxpZXMpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGFjMjAwX3N1cHBsaWVzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGNsayA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIoY2xrKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGNsayksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBlbmFibGUgaW5wdXQgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgY2xrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGRkYXRhLVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFxcdTAwMjZhYzIwMF9yZWdtYXBfY29uZmlnKTtcXG4rXFx0aWYgKElTX0VSUihkZGF0YS1cXHUwMDNlcmVnbWFwKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGRkYXRhLVxcdTAwM2VyZWdtYXApLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcXFxcblxcXCIpO1xcbitcXG4rXFx0aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGRhdGEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm8gbWluaW11bSBkZWxheSBpcyBkb2N1bWVudGVkLiBNYXRjaCB0aGUgdmVuZG9yIGRyaXZlcidzIDQwIG1zIGRlbGF5XFxuK1xcdCAqIGJlZm9yZSBpdHMgZmlyc3QgQUMyMDAgcmVnaXN0ZXIgYWNjZXNzIGFmdGVyIGVuYWJsaW5nIHRoZSBpbnB1dCBjbG9jay5cXG4rXFx0ICovXFxuK1xcdG1zbGVlcCg0MCk7XFxuK1xcbitcXHRyZXQgPSByZWdtYXBfcmVhZChkZGF0YS1cXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfVkVSU0lPTl9SRUcsIFxcdTAwMjZ2ZXJzaW9uKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byByZWFkIGNoaXAgdmVyc2lvblxcXFxuXFxcIik7XFxuK1xcbitcXHRkZXZfaW5mbyhkZXYsIFxcXCJBQzIwMCByZXZpc2lvbiAlI2x4IGluIHBhY2thZ2UgJWx1XFxcXG5cXFwiLFxcbitcXHRcXHQgRklFTERfR0VUKEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTSywgdmVyc2lvbiksXFxuK1xcdFxcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLLCB2ZXJzaW9uKSk7XFxuK1xcbitcXHQvKiBSZXNldCB0aGUgY2hpcCBhZnRlciBkZXBlbmRlbnQgZnVuY3Rpb24gZHJpdmVycyBoYXZlIHVuYm91bmQuICovXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMjAwX2Rpc2FibGUsIGRkYXRhKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVnbWFwX3dyaXRlKGRkYXRhLVxcdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWMyMDBfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4re1xcbitcXHRhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzIwMFxcXCIgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjMjAwX29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYzIwMF9pMmNfaWRzW10gPSB7XFxuK1xcdHsgLm5hbWUgPSBcXFwiYWMyMDBcXFwiIH0sXFxuK1xcdHsgfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWMyMDBfaTJjX2lkcyk7XFxuK1xcbitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWMyMDBfZHJpdmVyID0ge1xcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJhYzIwMFxcXCIsXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLFxcbitcXHR9LFxcbitcXHQucHJvYmUgPSBhYzIwMF9wcm9iZSxcXG4rXFx0LnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sXFxuK1xcdC5pZF90YWJsZSA9IGFjMjAwX2kyY19pZHMsXFxuK307XFxuK21vZHVsZV9pMmNfZHJpdmVyKGFjMjAwX2RyaXZlcik7XFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJYLVBvd2VycyBBQzIwMCBNRkQgY29yZSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuaW5kZXggYTI5ZDNmZWQ4YTA1My4uMjdiOGZmZTRiNTM5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuQEAgLTQ3NSw2ICs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXFxuIFxcdGhlbHBcXG4gXFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDRcXG4gXFxuK2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWVxcbitcXHR0cmlzdGF0ZSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZXFxcIlxcbitcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXFx1MDAyNlxcdTAwMjYgTlZNRU0gXFx1MDAyNlxcdTAwMjYgT0ZfTURJTyBcXHUwMDI2XFx1MDAyNiBSRUdVTEFUT1JcXG4rXFx0ZGVwZW5kcyBvbiBJMkMgfHwgIUkyQ1xcbitcXHRzZWxlY3QgUEhZX1BBQ0tBR0VcXG4rXFx0aGVscFxcbitcXHQgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDBcXG4rXFx0ICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWVxcbitcXHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxcbitcXHQgIHJlZ2lzdGVycy5cXG4rXFxuIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSVxcbiBcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlclxcXCJcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcXG5pbmRleCBlMjNkZjVlODM2ZTllLi5iOGE1MmQ4MWVhYzYwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbkBAIC0xMDAsNCArMTAwLDcgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVxcdFxcdCs9IHNtc2Mub1xcbiBvYmotJChDT05GSUdfU1RFMTBYUClcXHRcXHQrPSBzdGUxMFhwLm9cXG4gb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKVxcdCs9IHRlcmFuZXRpY3Mub1xcbiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpXFx0Kz0gdml0ZXNzZS5vXFxuK3hwb3dlcnMtYWN4MDAteVxcdFxcdFxcdDo9IHhwb3dlcnMtYWN4MDAtbWFpbi5vIHhwb3dlcnMtYWN4MDAtYWMyMDAubyBcXFxcXFxuK1xcdFxcdFxcdFxcdCAgIHhwb3dlcnMtYWN4MDAtYWMzMDAub1xcbitvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpXFx0Kz0geHBvd2Vycy1hY3gwMC5vXFxuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgKz0geGlsaW54X2dtaWkycmdtaWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMyMDAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmM2OGY2NWIxN2Y2Zlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzIwMC5jXFxuQEAgLTAsMCArMSwzODggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMiBBcm0gTHRkLiAoQW5kcmUgUHJ6eXdhcmEgXFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cXHUwMDNlKVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwieHBvd2Vycy1hY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlxcdDI3MDAwMDAwXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXFx0XFx0XFx0MHgwMDE0XFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVxcdFxcdFxcdEJJVCgxKVxcbitcXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1xcdFxcdFxcdDB4MDAxNlxcbisjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVxcdFxcdFxcdEJJVCgwKVxcbitcXG4rLyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xcbisjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXFx0XFx0XFx0MHg4MDA0XFxuK1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1xcdFxcdFxcdDB4NjAwMFxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXFx0XFx0XFx0R0VOTUFTSyg4LCA0KVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rXFxuK3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcXG4rXFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK1xcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBTZXJpYWxpemVzIHBvd2VyIHNlcXVlbmNpbmcgYW5kIHN0YXRlLiAqL1xcbitcXHR1MTYgZXBoeV9jdGw7XFxuK1xcdHVuc2lnbmVkIGludCBwaHlfYWRkcjtcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4rXFx0Ym9vbCBwb3dlcmVkO1xcbit9O1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXFxuK3N0YXRpYyBib29sIGFjMjAwX2VwaHlfbm9kZV9uZWVkc19wcm9iZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqc3RhdHVzO1xcbitcXG4rXFx0cmV0dXJuICFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhub2RlLCBcXFwic3RhdHVzXFxcIiwgXFx1MDAyNnN0YXR1cykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgICFzdHJjbXAoc3RhdHVzLCBcXFwiZmFpbC1uZWVkcy1wcm9iZVxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfYWRkX2VuYWJsZV9wYXRoKHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG9mX2NoYW5nZXNldCAqb2NzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGJvb2wgKmNoYW5nZWQpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwYXJlbnQgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xcbitcXHRpZiAocGFyZW50KSB7XFxuK1xcdFxcdHJldCA9IGFjMjAwX2VwaHlfYWRkX2VuYWJsZV9wYXRoKGRldiwgb2NzLCBwYXJlbnQsIGNoYW5nZWQpO1xcbitcXHRcXHRvZl9ub2RlX3B1dChwYXJlbnQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIWFjMjAwX2VwaHlfbm9kZV9uZWVkc19wcm9iZShub2RlKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCIlcE9GIGlzIHVuYXZhaWxhYmxlIHdpdGhvdXQgZmFpbC1uZWVkcy1wcm9iZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBub2RlKTtcXG4rXFxuK1xcdHJldCA9IG9mX2NoYW5nZXNldF91cGRhdGVfcHJvcF9zdHJpbmcob2NzLCBub2RlLCBcXFwic3RhdHVzXFxcIiwgXFxcIm9rYXlcXFwiKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdCpjaGFuZ2VkID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9lbmFibGVfcGF0aChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBvZl9jaGFuZ2VzZXQgKm9jcztcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvY3MgPSBremFsbG9jX29iaigqb2NzKTtcXG4rXFx0aWYgKCFvY3MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0b2ZfY2hhbmdlc2V0X2luaXQob2NzKTtcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9hZGRfZW5hYmxlX3BhdGgoZGV2LCBvY3MsIG5vZGUsIFxcdTAwMjZjaGFuZ2VkKTtcXG4rXFx0aWYgKHJldCB8fCAhY2hhbmdlZClcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdHJldCA9IG9mX2NoYW5nZXNldF9hcHBseShvY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0LyogS2VlcCB0aGUgYXBwbGllZCBzdGF0dXMgcHJvcGVydGllcyBhbGl2ZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBEVC4gKi9cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfZGVzdHJveTpcXG4rXFx0b2ZfY2hhbmdlc2V0X2Rlc3Ryb3kob2NzKTtcXG4rXFx0a2ZyZWUob2NzKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlZXBoeV9jdGwgfFxcbitcXHRcXHQocHJpdi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XFxuK1xcdFxcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVxcdTAwM2VwaHlfYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIHJlZywgdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVnLCBFUlJfUFRSKHJldCkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJldCA9IGVycjtcXG4rXFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0cmV0ID0gZXJyO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbithYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4re1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxcbitcXHRcXHRcXHRcXHRcXHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0XFx0XFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcXG4rXFxuK291dF91bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0dTE2IGVwaHlfY3RsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeV9hZGRyIFxcdTAwM2UgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKSB7XFxuK1xcdFxcdHJldCA9IDA7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCkge1xcbitcXHRcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFx0cHJpdi1cXHUwMDNlcGh5X2FkZHIgPSBwaHlfYWRkcjtcXG4rXFxuK1xcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xcbitcXG4rXFx0LyogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gKi9cXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZGlzYWJsZTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitlcnJfZGlzYWJsZTpcXG4rXFx0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xcbitvdXRfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHR1bnNpZ25lZCBpbnQgaW50ZXJuYWxfY2FsaWJyYXRpb247XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50O1xcbitcXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xcbitcXHR1OCBicHNfZWZmdXNlX2NvZGU7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0cHJpdi1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXFxcIngtcG93ZXJzLGFjMjAwXFxcIiwgMCk7XFxuK1xcdGlmICghYWMyMDBfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxcXG5cXFwiKSk7XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfRFlOQU1JQylcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9lbmFibGVfcGF0aChkZXYsIGFjMjAwX25vZGUpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4rXFx0Y2xpZW50ID0gb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGUoYWMyMDBfbm9kZSk7XFxuK1xcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xcbitcXHRpZiAoIWNsaWVudCkge1xcbitcXHRcXHRyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkFDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxcXFxuXFxcIikpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWRldmljZV9saW5rX2FkZChkZXYsIFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZGV2aWNlX3RyeWxvY2soXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X2NsaWVudDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGRldmljZV9pc19ib3VuZChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpKVxcbitcXHRcXHRwcml2LVxcdTAwM2VyZWdtYXAgPSBkZXZfZ2V0X3JlZ21hcChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIE5VTEwpO1xcbitcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldik7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlcmVnbWFwKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIkFDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9lcnJvcjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFoYXNfY2FsaWJyYXRpb24pIHtcXG4rXFx0XFx0cmV0ID0gcmVnbWFwX3JlYWQocHJpdi1cXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2aW50ZXJuYWxfY2FsaWJyYXRpb24pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF9lcnJvcjtcXG4rXFx0XFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xcbitcXHRicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gKyBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XFxuK1xcdHByaXYtXFx1MDAzZWVwaHlfY3RsID1cXG4rXFx0XFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcXG4rXFx0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xcbitcXG4rXFx0Y2xrID0gY2xrX2dldChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIE5VTEwpO1xcbitcXHRpZiAoSVNfRVJSKGNsaykpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihjbGspO1xcbitcXHRcXHRnb3RvIG91dF9lcnJvcjtcXG4rXFx0fVxcbitcXG4rXFx0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4rXFx0Y2xrX3B1dChjbGspO1xcbitcXG4rXFx0c3dpdGNoIChjbGtfcmF0ZSkge1xcbitcXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxcbitcXHRcXHRwcml2LVxcdTAwM2VlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgY2xrX3JhdGUpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XFxuK1xcdHByaXYtXFx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xcbitcXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHJldHVybiBcXHUwMDI2cHJpdi1cXHUwMDNlY29udHJvbDtcXG4rXFxuK291dF9lcnJvcjpcXG4rXFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXFxcblxcXCIpO1xcbitvdXRfcHV0X2NsaWVudDpcXG4rXFx0cHV0X2RldmljZShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpO1xcbitcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzMwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MGE5MGI3YTg1YTc5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmNcXG5AQCAtMCwwICsxLDQwNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInBoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwieHBvd2Vycy1hY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWlxcdDI1MDAwMDAwXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcXHQyNzAwMDAwMFxcbisjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1xcdFxcdFxcdDB4MDBcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXFx0XFx0R0VOTUFTSygxMSwgOClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1xcdFxcdFxcdEdFTk1BU0soNywgNilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcXG4rI2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFXFx0XFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXFx0XFx0QklUKDMpXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXFx0XFx0R0VOTUFTSygyLCAwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHXFx0XFx0XFx0MHgwMlxcbisjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXFx0XFx0QklUKDE1KVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXFx0XFx0XFx0MHgwNVxcbisjZGVmaW5lIEFDMzAwX01ESU9fRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDE1LCAxNClcXG4rI2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDExLCAxMClcXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlxcdFxcdFxcdDJcXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9QQURfRU5BQkxFXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXFx0XFx0XFx0QklUKDApXFxuK1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09ORklHX1JFR1xcdFxcdFxcdDB4MDZcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDEyKVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlxcdFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxcXFxuK1xcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwgXFxcXFxcbitcXHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFxcXFxcXG4rXFx0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcXFxcbitcXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpXFxuK1xcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIFNlcmlhbGl6ZXMgcG93ZXIgc2VxdWVuY2luZyBhbmQgc3RhdGUuICovXFxuK1xcdHUxNiBzeXNfY29udHJvbDtcXG4rXFx0dTE2IGVwaHlfY29uZmlnO1xcbitcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xcbitcXHRib29sIHBhY2thZ2Vfa25vd247XFxuK1xcdGJvb2wgaW50ZXJuYWxfZGxkbztcXG4rXFx0Ym9vbCBwb3dlcmVkO1xcbit9O1xcbitcXG4rc3RhdGljIHVuc2lnbmVkIGludFxcbithYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0XFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcXG4rXFx0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXFxuK1xcdFxcdFxcdFxcdHUxNiB2YWwpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpO1xcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX21vZGlmeShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXFxuK1xcdFxcdFxcdFxcdCB1MTYgbWFzaywgdTE2IHNldClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0XFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdHUxNiB2YWwgPSAocmV0IFxcdTAwMjYgfm1hc2spIHwgKHNldCBcXHUwMDI2IG1hc2spO1xcbitcXG4rXFx0XFx0cmV0ID0gdmFsID09IHJldCA/IDAgOlxcbitcXHRcXHRcXHRfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHJlZ251bSwgdmFsKTtcXG4rXFx0fVxcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWVwaHlfY29uZmlnIHxcXG4rXFx0XFx0KHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XFxuK1xcdFxcdCBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkXFxuK1xcdCAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGVcXG4rXFx0ICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiAhcHJpdi1cXHUwMDNlcGFja2FnZV9rbm93biB8fCAhcHJpdi1cXHUwMDNlaW50ZXJuYWxfZGxkbyA/XFxuK1xcdFxcdEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQgOiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXBvd2VyZWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxcbitcXHRcXHRcXHRcXHQgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJldCA9IGVycjtcXG4rXFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRyZXQgPSBlcnI7XFxuK1xcbitcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbithYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XFxuK1xcbitvdXRfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXFxuK3tcXG4rXFx0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdHU4IHBhY2thZ2Vfc3RhdHVzO1xcbitcXHR1MTYgcmVzZXRfdmFsdWU7XFxuK1xcdGludCBzeXNfY29udHJvbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IDA7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IHRydWU7XFxuK1xcbitcXHQvKiBLZWVwIHRoZSBleHRlcm5hbC1zdXBwbHkgY29uZmlndXJhdGlvbiBhY3Jvc3MgY2hpcCByZXNldHMuICovXFxuK1xcdHJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7XFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHQvKiBUaGUgbWFudWFsIHJlcXVpcmVzIGJvdGggcmVzZXRzIHRvIGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgY2xvY2tzLiAqL1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxcbitcXHRcXHRcXHRcXHQgIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHQvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgcHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRzeXNfY29udHJvbCA9IGFjMzAwX2VwaHlfY3RsX3JlYWQocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHKTtcXG4rXFx0aWYgKHN5c19jb250cm9sIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyZXQgPSBzeXNfY29udHJvbDtcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXHR9XFxuK1xcbitcXHRwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7XFxuK1xcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFxcdTAwMjYgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSAhPVxcbitcXHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFx0fVxcbitcXG4rXFx0cHJpdi1cXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFxcdTAwMjYgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETztcXG4rXFx0cHJpdi1cXHUwMDNlcGFja2FnZV9rbm93biA9IHRydWU7XFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLFxcbitcXHRcXHRcXHRcXHQgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsXFxuK1xcdFxcdFxcdFxcdCAgIHByaXYtXFx1MDAzZWludGVybmFsX2RsZG8gP1xcbitcXHRcXHRcXHRcXHQgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMzAwX1NZU19JT19WQUxVRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdGZzbGVlcCgxMDAwMCk7XFxuK1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XFxuK1xcdFxcdFxcdFxcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdGZzbGVlcCgxMDAwMCk7XFxuK1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK2Vycl9wb3dlcl9vZmY6XFxuK1xcdGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQocHJpdik7XFxuK291dF91bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X3JlZ3VsYXRvcl9kaXNhYmxlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0cmVndWxhdG9yX2Rpc2FibGUoZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFjMzAwX2VwaHlfY2xrX3B1dCh2b2lkICpkYXRhKVxcbit7XFxuK1xcdGNsa19wdXQoZGF0YSk7XFxuK31cXG4rXFxuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XFxuK1xcdHN0cnVjdCByZWd1bGF0b3IgKnZjYzE7XFxuK1xcdHU4IGJnc19lZmZ1c2VfY29kZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5hZGRyIFxcdTAwM2UgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxcXFxuXFxcIikpO1xcbitcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0dmNjMSA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjYzFcXFwiKTtcXG4rXFx0aWYgKElTX0VSUih2Y2MxKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIodmNjMSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgVkNDMSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUodmNjMSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBlbmFibGUgVkNDMSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfcmVndWxhdG9yX2Rpc2FibGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB2Y2MxKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cXG4rXFx0ZnNsZWVwKDEwMDAwKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VjbGspKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2VjbGspLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LVxcdTAwM2VjbGspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRzd2l0Y2ggKGNsa19yYXRlKSB7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjbGtfcmF0ZSkpO1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xcbitcXG4rXFx0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xcbitcXHRiZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gKyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XFxuK1xcdHByaXYtXFx1MDAzZWVwaHlfY29uZmlnID1cXG4rXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcXG4rXFx0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcXG4rXFx0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZwcml2LVxcdTAwM2Vjb250cm9sO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjc3YzYxNjk4MjFjM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1tYWluLmNcXG5AQCAtMCwwICsxLDUzNiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFxcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInBoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwieHBvd2Vycy1hY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0lEXFx0XFx0XFx0XFx0MHgwMDQ0MTQwMFxcbitcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLXFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcXHRcXHRCSVQoOClcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1dcXHRCSVQoOSlcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXFx0XFx0XFx0MHgxZlxcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcXHRcXHRcXHRHRU5NQVNLKDEyLCA4KVxcbisjZGVmaW5lIEFDWDAwX1BBR0VfMFxcdFxcdFxcdFxcdDBcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzFcXHRcXHRcXHRcXHQxXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV8yXFx0XFx0XFx0XFx0MlxcbisjZGVmaW5lIEFDWDAwX1BBR0VfNlxcdFxcdFxcdFxcdDZcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzhcXHRcXHRcXHRcXHQ4XFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHXFx0XFx0MHgxM1xcbisjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXFx0QklUKDEyKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0tcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1xcdFxcdDJcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXFx0XFx0MHgxMlxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRVxcdDB4NDgyNFxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcXHRcXHQweDEzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEVcXHRcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHXFx0MHgxN1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcXHRCSVQoMylcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1xcdFxcdDB4MThcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1xcdFxcdEdFTk1BU0soMTQsIDEyKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUXFx0MFxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcXHRcXHQweDEwXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRVxcdDB4NTUyM1xcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFR1xcdFxcdDB4MTNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRVxcdFxcdDB4ZjAwMFxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUdcXHQweDE0XFxuKyNkZWZpbmUgQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVxcdDB4NzA4ZlxcbisjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcXHQweDcwOGJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUUgMHg3ODA5XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXFx0XFx0XFx0MHgxNVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1xcdFxcdEdFTk1BU0soMTUsIDgpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcXHRcXHRHRU5NQVNLKDcsIDApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoXzEwMG0sIF8xMG0pIFxcXFxcXG4rXFx0KEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLLCAoXzEwMG0pKSB8IFxcXFxcXG4rXFx0IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0ssIChfMTBtKSkpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcXFxcXFxuK1xcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MTUsIDB4MzApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcXFxcXFxuK1xcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFR1xcdFxcdDB4MThcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVxcdFxcdDB4MDBiY1xcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXFx0XFx0MHgxZFxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFNcXHQweDAwNDRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcXFxcbitcXHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXFxcXG4rXFx0IEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpXFxuK1xcbisvKlxcbisgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3JcXG4rICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXFxuKyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXFxuKyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLlxcbisgKi9cXG4rXFxuK3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYge1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sO1xcbitcXHRib29sIGlzX2FjMzAwO1xcbitcXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xcbitcXHRib29sIHhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLFxcbitcXHRcXHRcXHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlcG93ZXJfb24ocHJpdi1cXHUwMDNlY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZXBvd2VyX29mZihwcml2LVxcdTAwM2Vjb250cm9sKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlc2V0X2ludGVyZmFjZShwcml2LVxcdTAwM2Vjb250cm9sLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgRVJSX1BUUihyZXQpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xcbitcXHRzaXplX3QgaTtcXG4rXFx0c2l6ZV90IGxlbjtcXG4rXFx0dTggKmJ1ZjtcXG4rXFx0dTE2IHZhbCA9IDA7XFxuK1xcbitcXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobm9kZSwgbmFtZSk7XFxuK1xcdGlmIChJU19FUlIoY2VsbCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xcbitcXG4rXFx0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFxcdTAwMjZsZW4pO1xcbitcXHRudm1lbV9jZWxsX3B1dChjZWxsKTtcXG4rXFx0aWYgKElTX0VSUihidWYpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihidWYpO1xcbitcXHRpZiAoIWxlbiB8fCBsZW4gXFx1MDAzZSBzaXplb2YoKnZhbHVlKSkge1xcbitcXHRcXHRrZnJlZShidWYpO1xcbitcXHRcXHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsZW47IGkrKylcXG4rXFx0XFx0dmFsIHw9ICh1MTYpYnVmW2ldIFxcdTAwM2NcXHUwMDNjICg4ICogaSk7XFxuK1xcdGtmcmVlKGJ1Zik7XFxuK1xcdCp2YWx1ZSA9IHZhbDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xcbitcXHRib29sIHNlbGVjdGFibGU7XFxuK1xcdGJvb2wgZml4ZWRfYWMzMDA7XFxuK1xcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XFxuK1xcdHU4IGNhbGlicmF0aW9uO1xcbitcXHR1MzIgYmFzZV9hZGRyO1xcbitcXHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi1cXHUwMDNlb2Zfbm9kZSk7XFxuK1xcdGlmICghcGFja2FnZV9ub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCBcXFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQSFkgaXMgbm90IGluIGFuIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZiYXNlX2FkZHIpO1xcbitcXHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcikge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCIpO1xcbitcXHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcXCIpO1xcbitcXHRpZiAoIXNlbGVjdGFibGUgXFx1MDAyNlxcdTAwMjYgIWZpeGVkX2FjMzAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJ1bnN1cHBvcnRlZCBFdGhlcm5ldCBQSFkgcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFxuK1xcdGhhc19jb25maWd1cmF0aW9uID1cXG4rXFx0XFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXFxcIm52bWVtLWNlbGwtbmFtZXNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcImNvbmZpZ3VyYXRpb25cXFwiKSBcXHUwMDNlPSAwO1xcbitcXHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24pIHtcXG4rXFx0XFx0cmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsIFxcXCJjb25maWd1cmF0aW9uXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvbmZpZ3VyYXRpb24pO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlYWQgcGFja2FnZSBjb25maWd1cmF0aW9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc2VsZWN0YWJsZSkge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCA9XFxuK1xcdFxcdFxcdGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xcbitcXHRcXHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPVxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlaXNfYWMzMDApIHtcXG4rXFx0XFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXFwiY29uZmlndXJhdGlvbiBkb2VzIG5vdCBtYXRjaCBwYWNrYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcXG4rXFx0XFx0XFx0XFx0Y29uZmlndXJhdGlvbik7XFxuK1xcbitcXHRwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XFxuK1xcdFxcdHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCEhKGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpO1xcbitcXHRwcml2LVxcdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cXG4rXFx0XFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFxcIngtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWRcXFwiKTtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMClcXG4rXFx0XFx0cHJpdi1cXHUwMDNlY29udHJvbCA9XFxuK1xcdFxcdFxcdGFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FsaWJyYXRpb24pO1xcbitcXHRlbHNlXFxuK1xcdFxcdHByaXYtXFx1MDAzZWNvbnRyb2wgPVxcbitcXHRcXHRcXHRhYzIwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGhhc19jb25maWd1cmF0aW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBjYWxpYnJhdGlvbik7XFxuK1xcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVxcdTAwM2Vjb250cm9sKTtcXG4rXFxuK291dF9wdXRfbm9kZTpcXG4rXFx0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRyZXR1cm4gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSxcXG4rXFx0XFx0XFx0XFx0QUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlb2Zfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xcXFxuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXFxuK1xcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfc29mdF9yZXNldChwaHlkZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHR1MTYgYWZlX2VxX3J4X2RldGVjdCA9IHByaXYtXFx1MDAzZWlzX2FjMzAwID9cXG4rXFx0XFx0QUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRSA6XFxuK1xcdFxcdEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7XFxuK1xcdHUxNiB0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUU7XFxuK1xcdHUxNiBnbG9iYWxfY29uZmlnO1xcbitcXHRpbnQgb2xkcGFnZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xcbitcXHRpZiAocHJpdi1cXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcXG4rXFx0XFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdGFmZV9lcV9yeF9kZXRlY3QgPVxcbitcXHRcXHRcXHRBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7XFxuK1xcdFxcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcXG4rXFx0fVxcbitcXG4rXFx0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XFxuK1xcdGlmIChvbGRwYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgYWZlX2VxX3J4X2RldGVjdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcXG4rXFxuK291dF9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cXG4rXFx0cmV0dXJuIGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovXFxuK1xcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJlc3VtZV9yZXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXN1bWVfcmV0KVxcbitcXHRcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlY292ZXIgZnJvbSBzdXNwZW5kIGVycm9yOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4rXFx0Ym9vbCBtYXRjaDtcXG4rXFxuK1xcdGlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqL1xcbitcXHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xcbitcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdG1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxcIik7XFxuK1xcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gbWF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhY3gwMF9lcGh5X2RyaXZlcltdID0ge1xcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRVBIWVxcXCIsXFxuK1xcdFxcdC5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLFxcbitcXHRcXHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxcbitcXHRcXHQucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLFxcbitcXHRcXHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcXG4rXFx0XFx0LmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCxcXG4rXFx0XFx0LmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsXFxuK1xcdFxcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsXFxuK1xcdH0sXFxuK307XFxuK21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcXG4rXFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpO1xcbitcXG4rTU9EVUxFX0FVVEhPUihcXFwiSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGY2MDg0YzdhNzcyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLmhcXG5AQCAtMCwwICsxLDI4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rI2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVRcXHQxNlxcbitcXG4rc3RydWN0IGRldmljZV9ub2RlO1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XFxuK1xcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xcbitcXHRpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpO1xcbitcXHRpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpO1xcbit9O1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pO1xcbitcXG4rI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA2OjIyOjU2LjIzOTIyNjYwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM1NDgwOTE2MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFlzIGFuZCB0aGUgQUMyMDAgTUZELiBUaGVzZSBkcml2ZXJzIGFyZSBoZWF2aWx5IGRlcGVuZGVudCBvbiBEZXZpY2UgVHJlZSAoT0YpIGZvciBwcm9iaW5nIGFuZCBjb25maWd1cmF0aW9uIChlLmcuLCBjaGVja2luZyBmb3Igc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmdzIGFuZCBgZGV2LVxcdTAwM2VvZl9ub2RlYCkuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdXNlZCBmb3IgZnV6emluZyBkbyBub3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIG5vZGVzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMmMxMzEzOWQyOGI2N2E2MzEzOWIwNmVkMWQ3MGFjNWY1YmQyN2Q3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwNjoyMjo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI3ZThkOWJkNTY2MWFcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxuQEAgLTAsMCArMSw2OSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuKyVZQU1MIDEuMlxuKy0tLVxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIG1peGVkLXNpZ25hbCBJQ1xuK1xuK21haW50YWluZXJzOlxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBUaGUgQUMyMDAgaXMgYSBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDIGNvbnRhaW5pbmcgYXVkaW8sIHZpZGVvLCBSVEMgYW5kXG4rICBGYXN0IEV0aGVybmV0IFBIWSBmdW5jdGlvbnMuIEl0cyBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgb3ZlciBJMkMuXG4rXG4rcHJvcGVydGllczpcbisgIGNvbXBhdGlibGU6XG4rICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMFxuK1xuKyAgcmVnOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgY2xvY2tzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBBQzIwMCBpbnB1dCBjbG9jay4gV2hlbiB1c2luZyB0aGUgRXRoZXJuZXQgUEhZLCBpdHMgY29uZmlndXJlZCByYXRlIG11c3RcbisgICAgICBiZSAyNCBvciAyNyBNSHosIG1hdGNoaW5nIHRoZSByYXRlcyBlbmNvZGVkIGJ5IHRoZSBkb2N1bWVudGVkIEVQSFkgY2xvY2tcbisgICAgICBzZWxlY3Rvci5cbitcbisgIGFjLWxkb2luLXN1cHBseTpcbisgICAgZGVzY3JpcHRpb246IDMuMyBWIHN1cHBseSBmb3IgdGhlIGF1ZGlvLWNvZGVjIExETyBpbnB1dFxuK1xuKyAgZXBoeS12Y2Mtc3VwcGx5OlxuKyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgRXRoZXJuZXQgUEhZIGFuYWxvZyBmcm9udCBlbmRcbitcbisgIHJ0Yy12Y2Mtc3VwcGx5OlxuKyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgUlRDXG4rXG4rICB0di12Y2Mtc3VwcGx5OlxuKyAgICBkZXNjcmlwdGlvbjogMy4zIFYgc3VwcGx5IGZvciB0aGUgVFYgZW5jb2RlciBEQUNcbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuKyAgLSByZWdcbisgIC0gY2xvY2tzXG4rICAtIGFjLWxkb2luLXN1cHBseVxuKyAgLSBlcGh5LXZjYy1zdXBwbHlcbisgIC0gcnRjLXZjYy1zdXBwbHlcbisgIC0gdHYtdmNjLXN1cHBseVxuK1xuK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIGkyYyB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBtaXhlZC1zaWduYWxAMTAge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMjAwXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgxMFx1MDAzZTtcbisgICAgICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZwd20gNVx1MDAzZTtcbisgICAgICAgICAgICBhYy1sZG9pbi1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuKyAgICAgICAgICAgIGVwaHktdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4rICAgICAgICAgICAgcnRjLXZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuKyAgICAgICAgICAgIHR2LXZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuKyAgICAgICAgfTtcbisgICAgfTtcbisuLi5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIyYmRkYzdhMmY5NDFcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcbkBAIC0wLDAgKzEsMjA4IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXNcbitcbittYWludGFpbmVyczpcbisgIC0gSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOlxuKyAgVGhlIEFDMjAwIGFuZCBBQzMwMCBjb250YWluIGNvbXBhdGlibGUgRmFzdCBFdGhlcm5ldCBQSFkgYmxvY2tzIHdoaWNoIHJlcG9ydFxuKyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZVxuKyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgY29udHJvbCByZWdpc3RlcnMgYXJlIHBhcnQgb2YgYW4gSTJDIE1GRCxcbisgIHdoaWxlIEFDMzAwIGNvbnRyb2wgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNlxuKyAgcGx1cyB0aGUgbGluayBQSFkgYWRkcmVzcy5cbitcbisgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXG4rICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxuKyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4rXG4rICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcbisgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbisgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cbisgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxuK1xuK3NlbGVjdDpcbisgIHByb3BlcnRpZXM6XG4rICAgIGNvbXBhdGlibGU6XG4rICAgICAgZW51bTpcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuKyAgICAgICAgLSB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbisgIHJlcXVpcmVkOlxuKyAgICAtIGNvbXBhdGlibGVcbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgZW51bTpcbisgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuKyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgLSB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbitcbisgIHJlZzpcbisgICAgbWF4aW11bTogMzFcbitcbisgIGNsb2NrczpcbisgICAgbWF4SXRlbXM6IDFcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHouIFRoZSBBQzIwMCBpbnB1dCBjbG9ja1xuKyAgICAgIGJlbG9uZ3MgdG8gdGhlIHJlZmVyZW5jZWQgQUMyMDAgTUZEIGluc3RlYWQuXG4rXG4rICB2Y2MxLXN1cHBseTpcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgMy4zIFYgc3VwcGx5IGZvciB0aGUgQUMzMDAgSS9PLCBiYW5kZ2FwLCBFdGhlcm5ldCBQSFkgYW5hbG9nIGZyb250IGVuZCxcbisgICAgICBhbmQgaW50ZXJuYWwgZGlnaXRhbCBMRE9cbitcbisgIG52bWVtLWNlbGxzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xuKyAgICAgIGNhbGlicmF0aW9uIGNvZGUsIGJpdHMgNyB0aHJvdWdoIDQgYXJlIHJlc2VydmVkLCBiaXQgOCBzZWxlY3RzIEFDMzAwXG4rICAgICAgd2hlbiBzZXQgYW5kIEFDMjAwIHdoZW4gY2xlYXIsIGFuZCBiaXQgOSByZXF1ZXN0cyB0aGUgQUMzMDBcbisgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxuKyAgICAgIHRoZSBsb3cgY2FsaWJyYXRpb24gYml0cyBvciBvbWl0IHRoZSBjZWxsIGFuZCB1c2UgaXRzIGludGVybmFsIGVGdXNlXG4rICAgICAgY29weSBpbnN0ZWFkLlxuK1xuKyAgbnZtZW0tY2VsbC1uYW1lczpcbisgICAgY29uc3Q6IGNvbmZpZ3VyYXRpb25cbitcbisgIHgtcG93ZXJzLGFjMjAwOlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlXG4rICAgIGRlc2NyaXB0aW9uOiBSZWZlcmVuY2UgdG8gdGhlIEFDMjAwIE1GRCBjb250YWluaW5nIHRoaXMgRXRoZXJuZXQgUEhZXG4rXG4rICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxuKyAgICB0eXBlOiBib29sZWFuXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxuK1xuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxuKyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbisgICAgcHJvcGVydGllczpcbisgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxuKyAgICByZXF1aXJlZDpcbisgICAgICAtIGNvbXBhdGlibGVcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rXG4rZGVwZW5kZW50UmVxdWlyZWQ6XG4rICBudm1lbS1jZWxsczogWyBudm1lbS1jZWxsLW5hbWVzIF1cbisgIG52bWVtLWNlbGwtbmFtZXM6IFsgbnZtZW0tY2VsbHMgXVxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjbG9ja3M6IGZhbHNlXG4rICAgICAgICB2Y2MxLXN1cHBseTogZmFsc2VcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcmVnOlxuKyAgICAgICAgICBtYXhpbXVtOiA3XG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0gY2xvY2tzXG4rICAgICAgICAtIHZjYzEtc3VwcGx5XG4rICAgICAgICAtIG52bWVtLWNlbGxzXG4rICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcmVnOlxuKyAgICAgICAgICBtYXhpbXVtOiA3XG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIGNsb2Nrc1xuKyAgICAgICAgLSB2Y2MxLXN1cHBseVxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXG4rICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuKyAgICAgICAgICAgIHZjYzEtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCJjb25maWd1cmF0aW9uXCI7XG4rICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSBcdTAwM2NcdTAwMjZhYzIwMFx1MDAzZTtcbitcbisgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7XG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwiO1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuK1xuKyAgLSB8XG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuKyAgICAgICAgICAgIHZjYzEtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCJjb25maWd1cmF0aW9uXCI7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcIjtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisgIC0gfFxuKyAgICBtZGlvIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDEge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcImNvbmZpZ3VyYXRpb25cIjtcbitcbisgICAgICAgICAgICBldGhlcm5ldC1waHlAMSB7XG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwiO1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuKy4uLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnXG5pbmRleCA3NjNjZTZhMzQ3ODJiLi40OTkyNjljODU4MTI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZ1xuQEAgLTIwNSw2ICsyMDUsMTcgQEAgY29uZmlnIE1GRF9BQzEwMFxuIFx0ICBUaGlzIGRyaXZlciBpbmNsdWRlIG9ubHkgdGhlIGNvcmUgQVBJcy4gWW91IGhhdmUgdG8gc2VsZWN0IGluZGl2aWR1YWxcbiBcdCAgY29tcG9uZW50cyBsaWtlIGNvZGVjcyBvciBSVEMgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuXG4gXG4rY29uZmlnIE1GRF9BQzIwMFxuK1x0dHJpc3RhdGUgXCJYLVBvd2VycyBBQzIwMFwiXG4rXHRkZXBlbmRzIG9uIEkyQ1xuK1x0ZGVwZW5kcyBvbiBPRlxuK1x0c2VsZWN0IFJFR01BUF9JMkNcbitcdGhlbHBcbitcdCAgU3VwcG9ydCBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwIG1peGVkLXNpZ25hbCBjb21wYW5pb24gSUMuIFRoZSBBQzIwMFxuK1x0ICBjb250YWlucyBhdWRpbywgdmlkZW8sIFJUQyBhbmQgRmFzdCBFdGhlcm5ldCBQSFkgZnVuY3Rpb25zIGFuZCBpc1xuK1x0ICBjby1wYWNrYWdlZCB3aXRoIHNvbWUgQWxsd2lubmVyIEg2IGFuZCBINjE2IFNvQ3MuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXG4rXHQgIHRoZSBzaGFyZWQgcmVnaXN0ZXIgYWNjZXNzIHVzZWQgYnkgdGhlIGluZGl2aWR1YWwgZnVuY3Rpb24gZHJpdmVycy5cbitcbiBjb25maWcgTUZEX0FYUDIwWFxuIFx0dHJpc3RhdGVcbiBcdHNlbGVjdCBNRkRfQ09SRVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcbmluZGV4IGRkNGJiN2U3N2MzMzYuLjg5MGU3NmE5YWQwMGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21mZC9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcbkBAIC0xNTAsNiArMTUwLDcgQEAgb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfU1BJKVx0Kz0gZGE5MDUyLXNwaS5vXG4gb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfSTJDKVx0Kz0gZGE5MDUyLWkyYy5vXG4gXG4gb2JqLSQoQ09ORklHX01GRF9BQzEwMClcdFx0Kz0gYWMxMDAub1xuK29iai0kKENPTkZJR19NRkRfQUMyMDApXHRcdCs9IGFjMjAwLm9cbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWClcdCs9IGF4cDIweC5vXG4gb2JqLSQoQ09ORklHX01GRF9BWFAyMFhfSTJDKVx0Kz0gYXhwMjB4LWkyYy5vXG4gb2JqLSQoQ09ORklHX01GRF9BWFAyMFhfUlNCKVx0Kz0gYXhwMjB4LXJzYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWMyMDAuYyBiL2RyaXZlcnMvbWZkL2FjMjAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43OThiYjQxNzNiMTRiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL21mZC9hYzIwMC5jXG5AQCAtMCwwICsxLDE3NiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIE1GRCBjb3JlIGRyaXZlciBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKlxuKyAqIEJhc2VkIG9uIHRoZSBBQzEwMCBkcml2ZXI6XG4rICogQ29weXJpZ2h0IChDKSAyMDE2IENoZW4tWXUgVHNhaVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuK1xuKyNkZWZpbmUgQUMyMDBfU1lTX1ZFUlNJT05fUkVHXHRcdFx0MHgwMDAwXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9QQUNLQUdFX01BU0tcdFx0R0VOTUFTSygxNSwgMTQpXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9DSElQX01BU0tcdFx0R0VOTUFTSygxMSwgMClcbitcbisjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDAwMlxuKyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVFx0QklUKDApXG4rXG4rLyogSW50ZXJmYWNlIHJlZ2lzdGVyIGFjY2Vzc2libGUgZnJvbSBldmVyeSByZWdpc3RlciBwYWdlLiAqL1xuKyNkZWZpbmUgQUMyMDBfVFdJX1JFR19BRERSX0hcdDB4MDBmZVxuKyNkZWZpbmUgQUMyMDBfTUFYX1JFR1x0XHQweGExZjJcbitcbitzdHJ1Y3QgYWMyMDAge1xuK1x0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhYzIwMF9zdXBwbGllc1tdID0ge1xuK1x0XCJhYy1sZG9pblwiLFxuK1x0XCJlcGh5LXZjY1wiLFxuK1x0XCJydGMtdmNjXCIsXG4rXHRcInR2LXZjY1wiLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2VfY2ZnIGFjMjAwX3JhbmdlX2NmZ1tdID0ge1xuK1x0e1xuK1x0XHQucmFuZ2VfbWF4ID0gQUMyMDBfTUFYX1JFRyxcbitcdFx0LnNlbGVjdG9yX3JlZyA9IEFDMjAwX1RXSV9SRUdfQUREUl9ILFxuK1x0XHQuc2VsZWN0b3JfbWFzayA9IDB4ZmYsXG4rXHRcdC53aW5kb3dfbGVuID0gMjU2LFxuK1x0fSxcbit9O1xuK1xuKy8qXG4rICogRWFjaCBBQzIwMCBzdWItYmxvY2sgY2FuIHJlc2V0IGluZGVwZW5kZW50bHksIGludmFsaWRhdGluZyBpdHMgcmVnaXN0ZXJcbisgKiBjb250ZW50cyB3aXRob3V0IHJlZ21hcCdzIGtub3dsZWRnZS4gQ2FjaGUgb25seSB0aGUgY29tbW9uIHBhZ2Ugc2VsZWN0b3I7XG4rICogdGhpcyBhdm9pZHMgYSBzZWxlY3RvciByZWFkLW1vZGlmeS13cml0ZSBmb3IgZXZlcnkgYWNjZXNzIG9uIHRoZSBzYW1lIHBhZ2VcbisgKiB3aXRob3V0IGV2ZXIgcmV0dXJuaW5nIHN0YWxlIGZ1bmN0aW9uYWwtcmVnaXN0ZXIgdmFsdWVzLlxuKyAqL1xuK3N0YXRpYyBib29sIGFjMjAwX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpXG4re1xuK1x0cmV0dXJuIHJlZyAhPSBBQzIwMF9UV0lfUkVHX0FERFJfSDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGFjMjAwX3JlZ21hcF9jb25maWcgPSB7XG4rXHQubmFtZSA9IFwiYWMyMDBcIixcbitcdC5yZWdfYml0cyA9IDgsXG4rXHQucmVnX3N0cmlkZSA9IDIsXG4rXHQudmFsX2JpdHMgPSAxNixcbitcdC5yYW5nZXMgPSBhYzIwMF9yYW5nZV9jZmcsXG4rXHQubnVtX3JhbmdlcyA9IEFSUkFZX1NJWkUoYWMyMDBfcmFuZ2VfY2ZnKSxcbitcdC5tYXhfcmVnaXN0ZXIgPSBBQzIwMF9NQVhfUkVHLFxuK1x0LnZvbGF0aWxlX3JlZyA9IGFjMjAwX3ZvbGF0aWxlX3JlZyxcbitcdC5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTUFQTEUsXG4rfTtcbitcbitzdGF0aWMgdm9pZCBhYzIwMF9kaXNhYmxlKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGFjMjAwICpkZGF0YSA9IGRhdGE7XG4rXG4rXHRyZWdtYXBfd3JpdGUoZGRhdGEtXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsIDApO1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2Y2xpZW50LVx1MDAzZWRldjtcbitcdHVuc2lnbmVkIGludCB2ZXJzaW9uO1xuK1x0c3RydWN0IGFjMjAwICpkZGF0YTtcbitcdHN0cnVjdCBjbGsgKmNsaztcbitcdGludCByZXQ7XG4rXG4rXHRkZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRhdGEpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZGRhdGEpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXRfZW5hYmxlKGRldiwgQVJSQVlfU0laRShhYzIwMF9zdXBwbGllcyksXG4rXHRcdFx0XHRcdCAgICAgYWMyMDBfc3VwcGxpZXMpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllc1xcblwiKTtcbitcbitcdGNsayA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKGNsaykpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihjbGspLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBlbmFibGUgaW5wdXQgY2xvY2tcXG5cIik7XG4rXG4rXHRyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxcblwiKTtcbitcbitcdGRkYXRhLVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgXHUwMDI2YWMyMDBfcmVnbWFwX2NvbmZpZyk7XG4rXHRpZiAoSVNfRVJSKGRkYXRhLVx1MDAzZXJlZ21hcCkpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZGF0YS1cdTAwM2VyZWdtYXApLFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcFxcblwiKTtcbitcbitcdGkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRkYXRhKTtcbitcbitcdC8qXG4rXHQgKiBObyBtaW5pbXVtIGRlbGF5IGlzIGRvY3VtZW50ZWQuIE1hdGNoIHRoZSB2ZW5kb3IgZHJpdmVyJ3MgNDAgbXMgZGVsYXlcbitcdCAqIGJlZm9yZSBpdHMgZmlyc3QgQUMyMDAgcmVnaXN0ZXIgYWNjZXNzIGFmdGVyIGVuYWJsaW5nIHRoZSBpbnB1dCBjbG9jay5cbitcdCAqL1xuK1x0bXNsZWVwKDQwKTtcbitcbitcdHJldCA9IHJlZ21hcF9yZWFkKGRkYXRhLVx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX1ZFUlNJT05fUkVHLCBcdTAwMjZ2ZXJzaW9uKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byByZWFkIGNoaXAgdmVyc2lvblxcblwiKTtcbitcbitcdGRldl9pbmZvKGRldiwgXCJBQzIwMCByZXZpc2lvbiAlI2x4IGluIHBhY2thZ2UgJWx1XFxuXCIsXG4rXHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fQ0hJUF9NQVNLLCB2ZXJzaW9uKSxcbitcdFx0IEZJRUxEX0dFVChBQzIwMF9TWVNfVkVSU0lPTl9QQUNLQUdFX01BU0ssIHZlcnNpb24pKTtcbitcbitcdC8qIFJlc2V0IHRoZSBjaGlwIGFmdGVyIGRlcGVuZGVudCBmdW5jdGlvbiBkcml2ZXJzIGhhdmUgdW5ib3VuZC4gKi9cbitcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMjAwX2Rpc2FibGUsIGRkYXRhKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSByZWdtYXBfd3JpdGUoZGRhdGEtXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsIDApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQzIwMF9TWVNfQ09OVFJPTF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWMyMDBfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbit7XG4rXHRhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMjAwXCIgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYWMyMDBfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYzIwMF9pMmNfaWRzW10gPSB7XG4rXHR7IC5uYW1lID0gXCJhYzIwMFwiIH0sXG4rXHR7IH1cbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhYzIwMF9pMmNfaWRzKTtcbitcbitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWMyMDBfZHJpdmVyID0ge1xuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWUgPSBcImFjMjAwXCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLFxuK1x0fSxcbitcdC5wcm9iZSA9IGFjMjAwX3Byb2JlLFxuK1x0LnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sXG4rXHQuaWRfdGFibGUgPSBhYzIwMF9pMmNfaWRzLFxuK307XG4rbW9kdWxlX2kyY19kcml2ZXIoYWMyMDBfZHJpdmVyKTtcbitcbitNT0RVTEVfQVVUSE9SKFwiSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJYLVBvd2VycyBBQzIwMCBNRkQgY29yZSBkcml2ZXJcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuaW5kZXggYTI5ZDNmZWQ4YTA1My4uMjdiOGZmZTRiNTM5MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTQ3NSw2ICs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuK2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWVxuK1x0dHJpc3RhdGUgXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcIlxuK1x0ZGVwZW5kcyBvbiBDT01NT05fQ0xLIFx1MDAyNlx1MDAyNiBOVk1FTSBcdTAwMjZcdTAwMjYgT0ZfTURJTyBcdTAwMjZcdTAwMjYgUkVHVUxBVE9SXG4rXHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4rXHRzZWxlY3QgUEhZX1BBQ0tBR0VcbitcdGhlbHBcbitcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuK1x0ICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWVxuK1x0ICByZWdpc3RlcnMgYW5kIHRoZSBwYWNrYWdlLXNwZWNpZmljIEFDMjAwIEkyQyBvciBBQzMwMCBNRElPIGNvbnRyb2xcbitcdCAgcmVnaXN0ZXJzLlxuK1xuIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSVxuIFx0dHJpc3RhdGUgXCJYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyXCJcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IGUyM2RmNWU4MzZlOWUuLmI4YTUyZDgxZWFjNjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMCw0ICsxMDAsNyBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpXHRcdCs9IHNtc2Mub1xuIG9iai0kKENPTkZJR19TVEUxMFhQKVx0XHQrPSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQrPSB0ZXJhbmV0aWNzLm9cbiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpXHQrPSB2aXRlc3NlLm9cbit4cG93ZXJzLWFjeDAwLXlcdFx0XHQ6PSB4cG93ZXJzLWFjeDAwLW1haW4ubyB4cG93ZXJzLWFjeDAwLWFjMjAwLm8gXFxcbitcdFx0XHRcdCAgIHhwb3dlcnMtYWN4MDAtYWMzMDAub1xuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSlcdCs9IHhwb3dlcnMtYWN4MDAub1xuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgKz0geGlsaW54X2dtaWkycmdtaWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmM2OGY2NWIxN2Y2ZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMyMDAuY1xuQEAgLTAsMCArMSwzODggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhIFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cdTAwM2UpXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ4cG93ZXJzLWFjeDAwLmhcIlxuK1xuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVFx0M1xuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcdDI0MDAwMDAwXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbitcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXHRcdFx0MHgwMDE0XG4rI2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgwKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXHRcdFx0QklUKDEpXG4rXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1x0XHRcdDB4MDAxNlxuKyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4rXG4rLyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xuKyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcdFx0XHQweDgwMDRcbitcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1x0XHRcdDB4NjAwMFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRCSVQoMilcbisjZGVmaW5lIEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTS1x0XHRcdEdFTk1BU0soOCwgNClcbisjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbitcbitzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwge1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuK1x0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK1x0c3RydWN0IG11dGV4IGxvY2s7IC8qIFNlcmlhbGl6ZXMgcG93ZXIgc2VxdWVuY2luZyBhbmQgc3RhdGUuICovXG4rXHR1MTYgZXBoeV9jdGw7XG4rXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XG4rXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuK1x0Ym9vbCBwb3dlcmVkO1xuK307XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXG4rc3RhdGljIGJvb2wgYWMyMDBfZXBoeV9ub2RlX25lZWRzX3Byb2JlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbit7XG4rXHRjb25zdCBjaGFyICpzdGF0dXM7XG4rXG4rXHRyZXR1cm4gIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5vZGUsIFwic3RhdHVzXCIsIFx1MDAyNnN0YXR1cykgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgIXN0cmNtcChzdGF0dXMsIFwiZmFpbC1uZWVkcy1wcm9iZVwiKTtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2FkZF9lbmFibGVfcGF0aChzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgb2ZfY2hhbmdlc2V0ICpvY3MsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4rXHRcdFx0XHQgICAgICBib29sICpjaGFuZ2VkKVxuK3tcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50O1xuK1x0aW50IHJldDtcbitcbitcdHBhcmVudCA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4rXHRpZiAocGFyZW50KSB7XG4rXHRcdHJldCA9IGFjMjAwX2VwaHlfYWRkX2VuYWJsZV9wYXRoKGRldiwgb2NzLCBwYXJlbnQsIGNoYW5nZWQpO1xuK1x0XHRvZl9ub2RlX3B1dChwYXJlbnQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAob2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIWFjMjAwX2VwaHlfbm9kZV9uZWVkc19wcm9iZShub2RlKSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLFxuK1x0XHRcdFx0ICAgICBcIiVwT0YgaXMgdW5hdmFpbGFibGUgd2l0aG91dCBmYWlsLW5lZWRzLXByb2JlXFxuXCIsXG4rXHRcdFx0XHQgICAgIG5vZGUpO1xuK1xuK1x0cmV0ID0gb2ZfY2hhbmdlc2V0X3VwZGF0ZV9wcm9wX3N0cmluZyhvY3MsIG5vZGUsIFwic3RhdHVzXCIsIFwib2theVwiKTtcbitcdGlmICghcmV0KVxuK1x0XHQqY2hhbmdlZCA9IHRydWU7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfZW5hYmxlX3BhdGgoc3RydWN0IGRldmljZSAqZGV2LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4re1xuK1x0c3RydWN0IG9mX2NoYW5nZXNldCAqb2NzO1xuK1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b2NzID0ga3phbGxvY19vYmooKm9jcyk7XG4rXHRpZiAoIW9jcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRvZl9jaGFuZ2VzZXRfaW5pdChvY3MpO1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9hZGRfZW5hYmxlX3BhdGgoZGV2LCBvY3MsIG5vZGUsIFx1MDAyNmNoYW5nZWQpO1xuK1x0aWYgKHJldCB8fCAhY2hhbmdlZClcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdHJldCA9IG9mX2NoYW5nZXNldF9hcHBseShvY3MpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdC8qIEtlZXAgdGhlIGFwcGxpZWQgc3RhdHVzIHByb3BlcnRpZXMgYWxpdmUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgRFQuICovXG4rXHRyZXR1cm4gMDtcbitcbitvdXRfZGVzdHJveTpcbitcdG9mX2NoYW5nZXNldF9kZXN0cm95KG9jcyk7XG4rXHRrZnJlZShvY3MpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rI2VuZGlmXG4rXG4rc3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY3RsIHxcbitcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4rXHRcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwiLFxuK1x0XHRcdHJlZywgRVJSX1BUUihyZXQpKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlcG93ZXJlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4rXHRcdFx0XHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuK1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4rXHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0ID0gZXJyO1xuK1x0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHJldCA9IGVycjtcbitcbitcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuK1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXG4rXHRcdFx0XHRcdCBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuK1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuK1xuK291dF91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdHUxNiBlcGh5X2N0bDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5X2FkZHIgXHUwMDNlIEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlcGh5X2FkZHIgPT0gcGh5X2FkZHIpIHtcbitcdFx0cmV0ID0gMDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcdHByaXYtXHUwMDNlcGh5X2FkZHIgPSBwaHlfYWRkcjtcbitcbitcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xuK1xuK1x0LyogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gKi9cbitcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRyxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuK1x0XHRcdFx0ICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuK1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0Z290byBvdXRfdW5sb2NrO1xuK1xuK2Vycl9kaXNhYmxlOlxuK1x0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0YWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmX2xvY2tlZChwcml2KTtcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsXG4rXHRcdCAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHR1bnNpZ25lZCBpbnQgaW50ZXJuYWxfY2FsaWJyYXRpb247XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmFjMjAwX25vZGU7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7XG4rXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50O1xuK1x0dW5zaWduZWQgbG9uZyBjbGtfcmF0ZTtcbitcdHU4IGJwc19lZmZ1c2VfY29kZTtcbitcdHN0cnVjdCBjbGsgKmNsaztcbitcdGludCByZXQ7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0cHJpdi1cdTAwM2VkZXYgPSBkZXY7XG4rXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXG4rXHRhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsIFwieC1wb3dlcnMsYWMyMDBcIiwgMCk7XG4rXHRpZiAoIWFjMjAwX25vZGUpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwibWlzc2luZyB4LXBvd2VycyxhYzIwMCByZWZlcmVuY2VcXG5cIikpO1xuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9EWU5BTUlDKVxuK1x0cmV0ID0gYWMyMDBfZXBoeV9lbmFibGVfcGF0aChkZXYsIGFjMjAwX25vZGUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcdH1cbisjZW5kaWZcbitcbitcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xuK1x0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XG4rXHRpZiAoIWNsaWVudCkge1xuK1x0XHRyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7XG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXG5cIikpO1xuK1x0fVxuK1xuK1x0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZjbGllbnQtXHUwMDNlZGV2LFxuK1x0XHRcdCAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbitcdH1cbitcbitcdGlmICghZGV2aWNlX3RyeWxvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXG4rXHRcdFx0XHQgICAgXCJBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0aWYgKGRldmljZV9pc19ib3VuZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2KSlcbitcdFx0cHJpdi1cdTAwM2VyZWdtYXAgPSBkZXZfZ2V0X3JlZ21hcChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdGRldmljZV91bmxvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4rXHRpZiAoIXByaXYtXHUwMDNlcmVnbWFwKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLFxuK1x0XHRcdFx0ICAgIFwiQUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwiKTtcbitcdFx0Z290byBvdXRfZXJyb3I7XG4rXHR9XG4rXG4rXHRpZiAoIWhhc19jYWxpYnJhdGlvbikge1xuK1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXG4rXHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9lcnJvcjtcbitcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdH1cbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY3RsID1cbitcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdGNsayA9IGNsa19nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKGNsaykpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihjbGspO1xuK1x0XHRnb3RvIG91dF9lcnJvcjtcbitcdH1cbitcbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4rXHRjbGtfcHV0KGNsayk7XG4rXG4rXHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4rXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuK1x0XHRwcml2LVx1MDAzZWVwaHlfY3RsIHw9IEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxuXCIsXG4rXHRcdFx0XHQgICAgY2xrX3JhdGUpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuK1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rXG4rb3V0X2Vycm9yOlxuK1x0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxuXCIpO1xuK291dF9wdXRfY2xpZW50OlxuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLWFjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC1hYzMwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzBhOTBiN2E4NWE3OVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAtYWMzMDAuY1xuQEAgLTAsMCArMSw0MDQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInBoeWxpYi5oXCJcbisjaW5jbHVkZSBcInhwb3dlcnMtYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXHQzXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaXHQyNTAwMDAwMFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcdFx0XHQweDAwXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1x0XHRcdEdFTk1BU0soNywgNilcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcbisjZGVmaW5lIEFDMzAwX0VGVVNFX0NMS19FTkFCTEVcdFx0XHRCSVQoNSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcdFx0QklUKDQpXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXHRcdEJJVCgyKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMSlcbisjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXHRcdEJJVCgzKVxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXHRcdEdFTk1BU0soMiwgMClcbitcbisjZGVmaW5lIEFDMzAwX1NZU19CSUFTMV9SRUdcdFx0XHQweDAyXG4rI2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVx0XHRCSVQoMTUpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXHRcdFx0MHgwNVxuKyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTUsIDE0KVxuKyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxMSwgMTApXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlx0XHRcdDJcbisjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEVcdFx0XHRCSVQoNClcbisjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHXHRcdFx0MHgwNlxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcbitcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcXFxuK1x0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXFxcbitcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSlcbitcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcdHN0cnVjdCBjbGsgKmNsaztcbitcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBTZXJpYWxpemVzIHBvd2VyIHNlcXVlbmNpbmcgYW5kIHN0YXRlLiAqL1xuK1x0dTE2IHN5c19jb250cm9sO1xuK1x0dTE2IGVwaHlfY29uZmlnO1xuK1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbitcdGJvb2wgcGFja2FnZV9rbm93bjtcbitcdGJvb2wgaW50ZXJuYWxfZGxkbztcbitcdGJvb2wgcG93ZXJlZDtcbit9O1xuK1xuK3N0YXRpYyB1bnNpZ25lZCBpbnRcbithYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcmVhZChzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuK1x0XHRcdFx0dTE2IHZhbClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdCAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0sIHZhbCk7XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbitcdFx0XHRcdCB1MTYgbWFzaywgdTE2IHNldClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4rXHRcdHUxNiB2YWwgPSAocmV0IFx1MDAyNiB+bWFzaykgfCAoc2V0IFx1MDAyNiBtYXNrKTtcbitcbitcdFx0cmV0ID0gdmFsID09IHJldCA/IDAgOlxuK1x0XHRcdF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsXG4rXHRcdFx0XHRcdCAgICByZWdudW0sIHZhbCk7XG4rXHR9XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2NvbmZpZyB8XG4rXHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdCBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rfVxuK1xuK3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdC8qXG4rXHQgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZFxuK1x0ICogdGhlIHN1cHBseSBhcnJhbmdlbWVudCwgcHJlc2VydmUgYW55IGV4dGVybmFsLVZERCBzZXR1cCBsZWZ0IGJ5IHRoZVxuK1x0ICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC5cbitcdCAqL1xuK1x0cmV0dXJuICFwcml2LVx1MDAzZXBhY2thZ2Vfa25vd24gfHwgIXByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4rXHRcdEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQgOiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZl9sb2NrZWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdGludCBlcnI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4rXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcbitcdGlmICghcmV0KVxuK1x0XHRyZXQgPSBlcnI7XG4rXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0ID0gZXJyO1xuK1xuK1x0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbitcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuK1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcbitcdFx0XHRcdFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4rXG4rb3V0X3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxuK3tcbitcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuK1x0dTggcGFja2FnZV9zdGF0dXM7XG4rXHR1MTYgcmVzZXRfdmFsdWU7XG4rXHRpbnQgc3lzX2NvbnRyb2w7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeV9hZGRyICE9IGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4rXHRcdHJldCA9IDA7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVx1MDAzZWNsayk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1xuK1x0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xuK1x0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuK1x0XHRcdFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIHByaXYtXHUwMDNlc3lzX2NvbnRyb2wpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XG4rXHRpZiAoc3lzX2NvbnRyb2wgXHUwMDNjIDApIHtcbitcdFx0cmV0ID0gc3lzX2NvbnRyb2w7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcbitcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XG4rXHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xuK1x0cHJpdi1cdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLFxuK1x0XHRcdFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxuK1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbitcdFx0XHRcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxuK1x0XHRcdFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuK1x0XHRcdFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0Z290byBvdXRfdW5sb2NrO1xuK1xuK2Vycl9wb3dlcl9vZmY6XG4rXHRhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmZfbG9ja2VkKHByaXYpO1xuK291dF91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjMzAwX2VwaHlfcmVndWxhdG9yX2Rpc2FibGUodm9pZCAqZGF0YSlcbit7XG4rXHRyZWd1bGF0b3JfZGlzYWJsZShkYXRhKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4re1xuK1x0Y2xrX3B1dChkYXRhKTtcbit9XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjMTtcbitcdHU4IGJnc19lZmZ1c2VfY29kZTtcbitcdGludCByZXQ7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgXHUwMDNlIEZJRUxEX01BWChBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdFx0ICAgICBcImxpbmsgYWRkcmVzcyBpcyBvdXRzaWRlIHRoZSBwYWNrYWdlIHJhbmdlXFxuXCIpKTtcbitcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1xuK1x0dmNjMSA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCJ2Y2MxXCIpO1xuK1x0aWYgKElTX0VSUih2Y2MxKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIodmNjMSksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IFZDQzEgc3VwcGx5XFxuXCIpKTtcbitcbitcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUodmNjMSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGVuYWJsZSBWQ0MxIHN1cHBseVxcblwiKSk7XG4rXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X3JlZ3VsYXRvcl9kaXNhYmxlLFxuK1x0XHRcdFx0ICAgICAgIHZjYzEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRwcml2LVx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VjbGspKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWNsayksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxuXCIpKTtcbitcbitcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXHUwMDNlY2xrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxuXCIpKTtcbitcbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbitcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwidW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cIixcbitcdFx0XHRcdFx0ICAgICBjbGtfcmF0ZSkpO1xuK1x0fVxuK1x0cHJpdi1cdTAwM2VzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUztcbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY29uZmlnID1cbitcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbitcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbitcdC8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi9cbitcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI3N2M2MTY5ODIxYzNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLW1haW4uY1xuQEAgLTAsMCArMSw1MzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L252bWVtLWNvbnN1bWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInBoeWxpYi5oXCJcbisjaW5jbHVkZSBcInhwb3dlcnMtYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0lEXHRcdFx0XHQweDAwNDQxNDAwXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLXHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXHRcdEJJVCg4KVxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbitcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1x0XHRcdDB4MWZcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRV8wXHRcdFx0XHQwXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzFcdFx0XHRcdDFcbisjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuKyNkZWZpbmUgQUNYMDBfUEFHRV82XHRcdFx0XHQ2XG4rI2RlZmluZSBBQ1gwMF9QQUdFXzhcdFx0XHRcdDhcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXHRCSVQoMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE9cdFx0MlxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRVx0MHg0ODI0XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHXHQweDE3XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXHRCSVQoMylcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXHRcdDB4MTBcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXHRcdDB4ZjAwMFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuKyNkZWZpbmUgQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVx0MHg3MDhmXG4rI2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGJcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFR1x0XHRcdDB4MTVcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoXzEwMG0sIF8xMG0pIFxcXG4rXHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcbitcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcXFxuK1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbitcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUVcdFx0MHgwMGJjXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1x0XHQweDFkXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFNcdDB4MDA0NFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXG4rXHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4rXHQgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUylcbitcbisvKlxuKyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvclxuKyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxuKyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4rICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuXG4rICovXG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbitcdGJvb2wgaXNfYWMzMDA7XG4rXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuK1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuK307XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRwaHlkZXZfd2Fybihwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcblwiLFxuK1x0XHRcdCAgICBFUlJfUFRSKHJldCkpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuK1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuK1x0c2l6ZV90IGk7XG4rXHRzaXplX3QgbGVuO1xuK1x0dTggKmJ1ZjtcbitcdHUxNiB2YWwgPSAwO1xuK1xuK1x0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xuK1x0aWYgKElTX0VSUihjZWxsKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoY2VsbCk7XG4rXG4rXHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbitcdG52bWVtX2NlbGxfcHV0KGNlbGwpO1xuK1x0aWYgKElTX0VSUihidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuK1x0aWYgKCFsZW4gfHwgbGVuIFx1MDAzZSBzaXplb2YoKnZhbHVlKSkge1xuK1x0XHRrZnJlZShidWYpO1xuK1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKylcbitcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuK1x0a2ZyZWUoYnVmKTtcbitcdCp2YWx1ZSA9IHZhbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuK1x0Ym9vbCBzZWxlY3RhYmxlO1xuK1x0Ym9vbCBmaXhlZF9hYzMwMDtcbitcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XG4rXHR1OCBjYWxpYnJhdGlvbjtcbitcdHUzMiBiYXNlX2FkZHI7XG4rXHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJQSFkgaXMgbm90IGluIGFuIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCJyZWdcIiwgXHUwMDI2YmFzZV9hZGRyKTtcbitcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRpZiAoIXNlbGVjdGFibGUgXHUwMDI2XHUwMDI2ICFmaXhlZF9hYzMwMCBcdTAwMjZcdTAwMjZcbitcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiKSkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcbitcdGhhc19jb25maWd1cmF0aW9uID1cbitcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCJudm1lbS1jZWxsLW5hbWVzXCIsXG4rXHRcdFx0XHRcdCBcImNvbmZpZ3VyYXRpb25cIikgXHUwMDNlPSAwO1xuK1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4rXHRcdHJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCBcImNvbmZpZ3VyYXRpb25cIixcbitcdFx0XHRcdFx0XHRcdTAwMjZjb25maWd1cmF0aW9uKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwicGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdGlmIChzZWxlY3RhYmxlKSB7XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuK1x0XHRcdGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDA7XG4rXHR9IGVsc2Uge1xuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4rXHRcdGlmIChoYXNfY29uZmlndXJhdGlvbiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XG4rXHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4rXHRcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICBcImNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbitcdFx0XHRcdGNvbmZpZ3VyYXRpb24pO1xuK1xuK1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2XG4rXHRcdCEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XG4rXHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuK1x0XHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICAgXCJ4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCIpO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4rXHRlbHNlXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBoYXNfY29uZmlndXJhdGlvbixcbitcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuK1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4rXG4rb3V0X3B1dF9ub2RlOlxuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VvZl9ub2RlKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbitcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxuXCIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXG4rXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4rXHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuK1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuK1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbitcdHUxNiBnbG9iYWxfY29uZmlnO1xuK1x0aW50IG9sZHBhZ2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSyxcbitcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuK1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbitcdFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuK1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbitcdFx0dHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFO1xuK1x0fVxuK1xuK1x0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XG4rXHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuK1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBhZmVfZXFfcnhfZGV0ZWN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzgpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRyxcbitcdFx0XHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcbitcbitvdXRfcmVzdG9yZV9wYWdlOlxuK1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbitcdHJldHVybiBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cbitcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJlc3VtZV9yZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rXHRcdGlmIChyZXN1bWVfcmV0KVxuK1x0XHRcdHBoeWRldl93YXJuKHBoeWRldixcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgbWF0Y2g7XG4rXG4rXHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikgfHxcbitcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHRcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiKSB8fFxuK1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcbitcdFx0Lm5hbWUgPSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcIixcbitcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4rXHRcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXG4rXHRcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcbitcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4rXHRcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxuK1x0XHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxuK1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbitcdFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcbitcdH0sXG4rfTtcbittb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xuK1x0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy1hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMtYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzLWFjeDAwLmhcbkBAIC0wLDAgKzEsMjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbisjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbitcbitzdHJ1Y3QgZGV2aWNlX25vZGU7XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XG4rXHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuK1x0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcbitcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbit9O1xuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA2OjIyOjU2LjIzOTIzODAzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDgwODc2NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBYLVBvd2VycyBBQzIwMC9BQzMwMCBQSFkgRHJpdmVycyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWXMsIGFsb25nIHdpdGggYSBuZXcgTUZEIGRyaXZlciBmb3IgdGhlIEFDMjAwLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyByZWFjaGFiaWxpdHkgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgUUVNVSwgd2hpY2ggaXMgd2hhdCBzeXprYWxsZXIgdHlwaWNhbGx5IHVzZXMuXG5cblRoZSBBQzIwMCBNRkQgZHJpdmVyIGlzIEkyQy1iYXNlZCwgYW5kIHRoZSBQSFkgZHJpdmVyIGlzIE1ESU8tYmFzZWQuIEkga25vdyB0aGF0LCBpbiBnZW5lcmFsLCBJMkMgYW5kIE1ESU8gZGV2aWNlcyBhcmVuJ3QgdHJpdmlhbGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2UgbmVlZCBhbiBlbXVsYXRlZCBJMkMvTURJTyBjb250cm9sbGVyLCBvciBhdCBsZWFzdCBhY2Nlc3MgdmlhIGBpMmMtZGV2YCBvciBgbWRpby1kZXZgLiBTeXprYWxsZXIgKmNhbiogZnV6eiBJMkMgdmlhIGAvZGV2L2kyYy0qYCwgYnV0IGl0IGRvZXNuJ3QgbmF0aXZlbHkgdGFyZ2V0IHNwZWNpZmljIEkyQyBjbGllbnQgZHJpdmVycyB1bmxlc3MgdGhleSBleHBvc2UgY2hhcmFjdGVyIGRldmljZXMuIEFuZCwgd2hpbGUgc3l6a2FsbGVyIGhhcyBzb21lIEkyQyBzdXBwb3J0LCB0aGVyZSdzIG5vIGdlbmVyaWMgTURJTyBmdXp6ZXIuIFNvLCB0aGF0J3Mgbm90IGxvb2tpbmcgcHJvbWlzaW5nLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIENhbiB3ZSBpbnN0YW50aWF0ZSB0aGVzZSBkZXZpY2VzPyBJMkMgZGV2aWNlcyAqY2FuKiBiZSBpbnN0YW50aWF0ZWQgdmlhIHN5c2ZzLCBzbyB0aGF0J3Mgc29tZXRoaW5nLiBCdXQgTURJTyBkZXZpY2VzPyBUeXBpY2FsbHksIFBIWXMgYXJlIGluc3RhbnRpYXRlZCBlaXRoZXIgYnkgdGhlIE1BQyBkcml2ZXIsIG9yIHZpYSBhIGRldmljZSB0cmVlLiBDYW4gd2UgZXZlbiBpbmplY3QgdGhvc2Ugbm9kZXM/IE5vLCBzeXprYWxsZXIgZG9lc24ndCBzdXBwb3J0IGR5bmFtaWMgZGV2aWNlIHRyZWUgb3ZlcmxheSBpbmplY3Rpb24uIFNvLCBhbHJlYWR5LCB0aGF0J3MgYSBiaWcgcmVkIGZsYWcuXG5cbkxldCdzIGxvb2sgY2xvc2VyIGF0IHRoZSBkcml2ZXJzLiBUaGUgTUZEIGRyaXZlciwgYGFjMjAwLmNgLCBpcyBhbiBJMkMgZHJpdmVyLCBhbmQgaXRzIHByb2JlIGZ1bmN0aW9uIHJ1bnMuIEl0IHVzZXMgYGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0X2VuYWJsZWAsIHdoaWNoIGNvdWxkIGZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcmlnaHQgcmVndWxhdG9ycy4gSXQgYWxzbyBnZXRzIGEgY2xvY2sgdmlhIGBkZXZtX2Nsa19nZXRfZW5hYmxlZGAsIHdoaWNoIHdpbGwgbGlrZWx5IGZhaWwgd2l0aG91dCBhIHNwZWNpZmljIGNsb2NrIGluIHRoZSBkZXZpY2UgdHJlZS4gU28sIGV2ZW4gZ2V0dGluZyAqcGFzdCogdGhlIHByb2JlIGZ1bmN0aW9uIGxvb2tzIGNoYWxsZW5naW5nIHdpdGhvdXQgYSBzcGVjaWZpYyBkZXZpY2UgdHJlZS5cblxuVGhlIFBIWSBkcml2ZXIgaGFzIHNpbWlsYXIgY2hhbGxlbmdlcy4gSXRzIG1hdGNoIGZ1bmN0aW9uLCBgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlYCwgY2hlY2tzIGZvciBzcGVjaWZpYyBjb21wYXRpYmxlIHN0cmluZ3MgZnJvbSBhIHBhY2thZ2Ugbm9kZSBhbmQgY29tcGF0aWJsZSBzdHJpbmdzLiBUaGVzZSBhcmUgZXhwbGljaXQgZGV2aWNlIHRyZWUgZGVwZW5kZW5jaWVzLiBUaGlzIHdvbid0IHdvcmsgaW4gYSBnZW5lcmljIFFFTVUgZW52aXJvbm1lbnQg4oCTIHRoZXJlJ3Mgbm8gZGV2aWNlIHRyZWUgd2l0aCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLiBBbmQsIGxvb2tpbmcgYXQgdGhlIHByb2JlIGZ1bmN0aW9uIGl0c2VsZiwgaXQgYWxzbyBleHBsaWNpdGx5IGNoZWNrcyBgZGV2LVx1MDAzZW9mX25vZGVgLCBtZWFuaW5nIGEgZGV2aWNlIHRyZWUgKmlzKiByZXF1aXJlZC5cblxuSSBzZWUgdGhhdCBgTUZEX0FDMjAwYCBkZXBlbmRzIG9uIGBPRmAgaW4gS2NvbmZpZywgYW5kIGBYUE9XRVJTX0FDWDAwX1BIWWAgZGVwZW5kcyBvbiBgT0ZfTURJT2AsIGBDT01NT05fQ0xLYCwgYW5kIGBSRUdVTEFUT1JgLiBUaGlzIGNvbmZpcm1zIG15IHN1c3BpY2lvbiDigJMgaXQncyBhbGwgZGV2aWNlIHRyZWUgYW5kIGhhcmR3YXJlLWRlcGVuZGVudC4gU2luY2UgdGhlc2UgZHJpdmVycyBhcmUgc28gdGlnaHRseSBjb3VwbGVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBkZWZpbmVkIGluIHRoZSBkZXZpY2UgdHJlZSwgYW5kIHdlIGNhbid0IGluamVjdCB0aG9zZSBub2RlcyBkeW5hbWljYWxseSwgaXQncyB2aXJ0dWFsbHkgaW1wb3NzaWJsZSB0byByZWFjaCB0aG9zZSBjb2RlIHBhdGhzIGluIGEgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwLlxuXG5UaGVyZWZvcmUsIEknbSBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpc24ndCB3b3J0aCBmdXp6aW5nLiBJJ2xsIHN1bW1hcml6ZSB0aGUgcmVhc29uaW5nOiBUaGUgZHJpdmVycyBhcmUgaGVhdmlseSBkZXBlbmRlbnQgb24gdGhlIGRldmljZSB0cmVlLCB3aGljaCBpcyBub3QgZWFzaWx5IGVtdWxhdGVkIG9yIGluamVjdGVkLlxuSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM1OCwiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDY6MjM6MzEuNzIwMTE4MDU4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFlzIGFuZCB0aGUgQUMyMDAgTUZELiBUaGVzZSBkcml2ZXJzIGFyZSBoZWF2aWx5IGRlcGVuZGVudCBvbiBEZXZpY2UgVHJlZSAoT0YpIGZvciBwcm9iaW5nIGFuZCBjb25maWd1cmF0aW9uIChlLmcuLCBjaGVja2luZyBmb3Igc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmdzIGFuZCBgZGV2LVxcdTAwM2VvZl9ub2RlYCkuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdXNlZCBmb3IgZnV6emluZyBkbyBub3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIG5vZGVzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFlzIGFuZCB0aGUgQUMyMDAgTUZELiBUaGVzZSBkcml2ZXJzIGFyZSBoZWF2aWx5IGRlcGVuZGVudCBvbiBEZXZpY2UgVHJlZSAoT0YpIGZvciBwcm9iaW5nIGFuZCBjb25maWd1cmF0aW9uIChlLmcuLCBjaGVja2luZyBmb3Igc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmdzIGFuZCBgZGV2LVxcdTAwM2VvZl9ub2RlYCkuIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgdXNlZCBmb3IgZnV6emluZyBkbyBub3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIG5vZGVzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6wl8w[1] Phase: Running StartedAt: 2026-08-07 06:23:42 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6wl8w[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-07 06:23:42 +0000 UTC FinishedAt: 2026-08-07 06:23:47 +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,}