Name: series-workflows296k Phase: Failed StartedAt: 2026-07-02 13:42:51 +0000 UTC FinishedAt: 2026-07-02 13:57:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflows296k[0] Phase: Succeeded StartedAt: 2026-07-02 13:42:51 +0000 UTC FinishedAt: 2026-07-02 13:57:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflows296k[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 13:42:51 +0000 UTC FinishedAt: 2026-07-02 13:57:35 +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+CgkJCTx0ZD4yMDI2LzA3LzAyIDEzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiB0aGUgTWljcm9jaGlwIEtTWiBEU0EgZHJpdmVyLiBJdCBtb3ZlcyBjaGlwLXNwZWNpZmljIGZ1bmN0aW9ucyAobGlrZSBNVFUgY29uZmlndXJhdGlvbiwgVEMgc2V0dXAsIE1JQiBzdGF0cyByZWFkaW5nLCBhbmQgZHJpdmUgc3RyZW5ndGggcGFyc2luZykgZnJvbSB0aGUgY29tbW9uIGBrc3pfY29tbW9uLmNgIGZpbGUgdG8gdGhlaXIgcmVzcGVjdGl2ZSBjaGlwLXNwZWNpZmljIGZpbGVzIChga3N6OC5jYCBhbmQgYGtzejk0NzcuY2ApLiBJdCBhbHNvIHJlbW92ZXMgYSBuby1vcCBjYWxsIHRvIGBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGhgIGluIGBsYW45Mzd4X21haW4uY2Agd2hpY2ggb25seSBwcmludGVkIHdhcm5pbmdzIGZvciB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLiBObyBuZXcgZnVuY3Rpb25hbCBsb2dpYyBvciByZWFjaGFibGUgY29kZSBwYXRocyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTM6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNmVkYmJkOGZhYjkxMDViMWFiYTBmNmY5NDE3ZjU0Nzk0NzZhNzlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxMzo1NjoyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG5pbmRleCA1ODY5MTY1NzBhODQxYi4uYzRjNzY5MDI4YTIwYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbkBAIC0zNiw2ICYjNDM7MzYsNTIgQEBcbiAjaW5jbHVkZSBcJiMzNDtrc3o4X3JlZy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3N6OC5oXCYjMzQ7XG4gXG4mIzQzOy8qIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaODg2MywgS1NaODg3MywgLi5cbiYjNDM7ICpcdFx0XHQgICAgIHZhcmlhbnRzLlxuJiM0MzsgKiBUaGlzIHZhbHVlcyBhcmUgZG9jdW1lbnRlZCBpbiBLU1o4ODczIGFuZCBLU1o4ODYzIGRhdGFzaGVldHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCBrc3o4OHgzX2RyaXZlX3N0cmVuZ3Roc1tdID0ge1xuJiM0MztcdHsgMCwgIDgwMDAgfSxcbiYjNDM7XHR7IEtTWjg4NzNfRFJJVkVfU1RSRU5HVEhfMTZNQSwgMTYwMDAgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyB7XG4mIzQzO1x0dTY0IHJ4O1xuJiM0MztcdHU2NCByeF9oaTtcbiYjNDM7XHR1NjQgcnhfdW5kZXJzaXplO1xuJiM0MztcdHU2NCByeF9mcmFnbWVudHM7XG4mIzQzO1x0dTY0IHJ4X292ZXJzaXplO1xuJiM0MztcdHU2NCByeF9qYWJiZXJzO1xuJiM0MztcdHU2NCByeF9zeW1ib2xfZXJyO1xuJiM0MztcdHU2NCByeF9jcmNfZXJyO1xuJiM0MztcdHU2NCByeF9hbGlnbl9lcnI7XG4mIzQzO1x0dTY0IHJ4X21hY19jdHJsO1xuJiM0MztcdHU2NCByeF9wYXVzZTtcbiYjNDM7XHR1NjQgcnhfYmNhc3Q7XG4mIzQzO1x0dTY0IHJ4X21jYXN0O1xuJiM0MztcdHU2NCByeF91Y2FzdDtcbiYjNDM7XHR1NjQgcnhfNjRfb3JfbGVzcztcbiYjNDM7XHR1NjQgcnhfNjVfMTI3O1xuJiM0MztcdHU2NCByeF8xMjhfMjU1O1xuJiM0MztcdHU2NCByeF8yNTZfNTExO1xuJiM0MztcdHU2NCByeF81MTJfMTAyMztcbiYjNDM7XHR1NjQgcnhfMTAyNF8xNTIyO1xuJiM0MztcdHU2NCB0eDtcbiYjNDM7XHR1NjQgdHhfaGk7XG4mIzQzO1x0dTY0IHR4X2xhdGVfY29sO1xuJiM0MztcdHU2NCB0eF9wYXVzZTtcbiYjNDM7XHR1NjQgdHhfYmNhc3Q7XG4mIzQzO1x0dTY0IHR4X21jYXN0O1xuJiM0MztcdHU2NCB0eF91Y2FzdDtcbiYjNDM7XHR1NjQgdHhfZGVmZXJyZWQ7XG4mIzQzO1x0dTY0IHR4X3RvdGFsX2NvbDtcbiYjNDM7XHR1NjQgdHhfZXhjX2NvbDtcbiYjNDM7XHR1NjQgdHhfc2luZ2xlX2NvbDtcbiYjNDM7XHR1NjQgdHhfbXVsdF9jb2w7XG4mIzQzO1x0dTY0IHJ4X2Rpc2NhcmRzO1xuJiM0MztcdHU2NCB0eF9kaXNjYXJkcztcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIHZvaWQga3N6X2NmZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1MzIgYWRkciwgdTggYml0cywgYm9vbCBzZXQpXG4ge1xuIFx0a3N6X3JtdzgoZGV2LCBhZGRyLCBiaXRzLCBzZXQgPyBiaXRzIDogMCk7XG5AQCAtMTU4LDEwICYjNDM7MjA0LDE3IEBAIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzejg4NjNfY2hhbmdlX210dShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgZnJhbWVfc2l6ZSlcbiYjNDM7c3RhdGljIGludCBrc3o4OHh4X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG10dSlcbiB7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IGZyYW1lX3NpemU7XG4gXHR1OCBjdHJsMiA9IDA7XG4gXG4mIzQzO1x0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZGV2LVx1MDAzZWRzLCBwb3J0KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmcmFtZV9zaXplID0gbXR1ICYjNDM7IFZMQU5fRVRIX0hMRU4gJiM0MzsgRVRIX0ZDU19MRU47XG4mIzQzO1xuIFx0aWYgKGZyYW1lX3NpemUgXHUwMDNjPSBLU1o4X0xFR0FMX1BBQ0tFVF9TSVpFKVxuIFx0XHRjdHJsMiB8PSBLU1o4ODYzX0xFR0FMX1BBQ0tFVF9FTkFCTEU7XG4gXHRlbHNlIGlmIChmcmFtZV9zaXplIFx1MDAzZSBLU1o4ODYzX05PUk1BTF9QQUNLRVRfU0laRSlcbkBAIC0xNzEsMTEgJiM0MzsyMjQsMTggQEAgc3RhdGljIGludCBrc3o4ODYzX2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXG4gXHRcdFx0S1NaODg2M19IVUdFX1BBQ0tFVF9FTkFCTEUsIGN0cmwyKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3o4Nzk1X2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXG4mIzQzO3N0YXRpYyBpbnQga3N6ODd4eF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBtdHUpXG4ge1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0dTggY3RybDEgPSAwLCBjdHJsMiA9IDA7XG4mIzQzO1x0dTE2IGZyYW1lX3NpemU7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmICghZHNhX2lzX2NwdV9wb3J0KGRldi1cdTAwM2VkcywgcG9ydCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZnJhbWVfc2l6ZSA9IG10dSAmIzQzOyBWTEFOX0VUSF9ITEVOICYjNDM7IEVUSF9GQ1NfTEVOO1xuJiM0MztcbiBcdGlmIChmcmFtZV9zaXplIFx1MDAzZSBLU1o4X0xFR0FMX1BBQ0tFVF9TSVpFKVxuIFx0XHRjdHJsMiB8PSBTV19MRUdBTF9QQUNLRVRfRElTQUJMRTtcbiBcdGlmIChmcmFtZV9zaXplIFx1MDAzZSBLU1o4ODYzX05PUk1BTF9QQUNLRVRfU0laRSlcbkBAIC0xODgsMjkgJiM0MzsyNDgsMTQgQEAgc3RhdGljIGludCBrc3o4Nzk1X2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXG4gXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8yLCBTV19MRUdBTF9QQUNLRVRfRElTQUJMRSwgY3RybDIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzejhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxuJiM0MztzdGF0aWMgaW50IGtzejg3eHhfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIHtcbi1cdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuLVx0dTE2IGZyYW1lX3NpemU7XG4tXG4tXHRpZiAoIWRzYV9pc19jcHVfcG9ydChkZXYtXHUwMDNlZHMsIHBvcnQpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGZyYW1lX3NpemUgPSBtdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTjtcbi1cbi1cdHN3aXRjaCAoZGV2LVx1MDAzZWNoaXBfaWQpIHtcbi1cdGNhc2UgS1NaODc5NV9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4Nzk0X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIGtzejg3OTVfY2hhbmdlX210dShkZXYsIGZyYW1lX3NpemUpO1xuLVx0Y2FzZSBLU1o4NDYzX0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg4WDNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODg2NF9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4ODk1X0NISVBfSUQ6XG4tXHRcdHJldHVybiBrc3o4ODYzX2NoYW5nZV9tdHUoZGV2LCBmcmFtZV9zaXplKTtcbi1cdH1cbiYjNDM7XHRyZXR1cm4gS1NaODc5NV9IVUdFX1BBQ0tFVF9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xuJiM0Mzt9XG4gXG4tXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODh4eF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gS1NaODg2M19IVUdFX1BBQ0tFVF9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xuIH1cbiBcbiBzdGF0aWMgaW50IGtzejhfcG9ydF9xdWV1ZV9zcGxpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IHF1ZXVlcylcbkBAIC0xNzQ2LDYgJiM0MzsxNzkxLDE1OSBAQCBzdGF0aWMgdm9pZCBrc3o4X3BvcnRfbWlycm9yX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdCAgICAgUE9SVF9NSVJST1JfU05JRkZFUiwgZmFsc2UpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0dTggcmVnO1xuJiM0MztcbiYjNDM7XHRyZWcgPSAweEM4ICYjNDM7IHBvcnQgKiA0O1xuJiM0MztcdHJlZyAmIzQzOz0gKCgzIC0gcXVldWUpIC8gMikgKiAyO1xuJiM0MztcdHJlZyYjNDM7JiM0Mzs7XG4mIzQzO1x0cmVnIC09IChxdWV1ZSBcdTAwMjYgMSk7XG4mIzQzO1x0cmV0dXJuIHJlZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGtzejg4eDNfdGNfZXRzX2FkZCAtIENvbmZpZ3VyZSBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2hcbiYjNDM7ICogQGRldjogUG9pbnRlciB0byB0aGUgS1NaIHN3aXRjaCBkZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqIEBwb3J0OiBQb3J0IG51bWJlciB0byBjb25maWd1cmVcbiYjNDM7ICogQHA6IFBvaW50ZXIgdG8gb2ZmbG9hZCByZXBsYWNlIHBhcmFtZXRlcnMgZGVzY3JpYmluZyBFVFMgYmFuZHMgYW5kIG1hcHBpbmdcbiYjNDM7ICpcbiYjNDM7ICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgdHdvIHNjaGVkdWxpbmcgbW9kZXM6IFN0cmljdCBQcmlvcml0eSBhbmRcbiYjNDM7ICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLiBCb3RoIG1vZGVzIGhhdmUgZml4ZWQgYmVoYXZpb3I6XG4mIzQzOyAqICAgLSBObyBjb25maWd1cmFibGUgcXVldWUtdG8tcHJpb3JpdHkgbWFwcGluZ1xuJiM0MzsgKiAgIC0gTm8gd2VpZ2h0IGFkanVzdG1lbnQgaW4gV0ZRIG1vZGVcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBzd2l0Y2ggdG8gdXNlIHN0cmljdCBwcmlvcml0eSBtb2RlIGJ5XG4mIzQzOyAqIGNsZWFyaW5nIHRoZSBXRlEgZW5hYmxlIGJpdCBmb3IgYWxsIHF1ZXVlcyBhc3NvY2lhdGVkIHdpdGggRVRTIGJhbmRzLlxuJiM0MzsgKiBJZiBzdHJpY3QgcHJpb3JpdHkgaXMgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCB0aGUgc3dpdGNoIHdpbGwgZGVmYXVsdFxuJiM0MzsgKiB0byBXRlEgbW9kZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGtzejg4eDNfdGNfZXRzX2FkZChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0LCBiYW5kO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IHN0cmljdCBwcmlvcml0eSBtb2RlIGlzIHN1cHBvcnRlZCBmb3Igbm93LlxuJiM0MztcdCAqIFdGUSBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbiBzdHJpY3QgbW9kZSBpcyBkaXNhYmxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGJhbmQgPSAwOyBiYW5kIFx1MDAzYyBwLVx1MDAzZWJhbmRzOyBiYW5kJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpO1xuJiM0MztcdFx0dTggcmVnO1xuJiM0MztcbiYjNDM7XHRcdC8qIENhbGN1bGF0ZSBUWFEgU3BsaXQgQ29udHJvbCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzXG4mIzQzO1x0XHQgKiBwb3J0L3F1ZXVlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcbiYjNDM7XHRcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxuJiM0MztcdFx0XHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xuJiM0MztcbiYjNDM7XHRcdC8qIENsZWFyIFdGUSBlbmFibGUgYml0IHRvIHNlbGVjdCBzdHJpY3QgcHJpb3JpdHkgc2NoZWR1bGluZyAqL1xuJiM0MztcdFx0cmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsIDApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICoga3N6ODh4M190Y19ldHNfZGVsIC0gUmVzZXQgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKSBjb25maWdcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxuJiM0MzsgKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBLU1ogc3dpdGNoIGRldmljZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIHJlc2V0XG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBLU1o4OHgzIHN1cHBvcnRzIG9ubHkgZml4ZWQgc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IG9yXG4mIzQzOyAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKSwgd2l0aCBubyByZWNvbmZpZ3VyYXRpb24gb2Ygd2VpZ2h0cyBvclxuJiM0MzsgKiBxdWV1ZSBtYXBwaW5nLiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgcG9ydOKAmXMgc2NoZWR1bGluZyBtb2RlIHRvXG4mIzQzOyAqIHRoZSBkZWZhdWx0LCB3aGljaCBpcyBXRlEsIGJ5IGVuYWJsaW5nIHRoZSBXRlEgYml0IGZvciBhbGwgcXVldWVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCwgcXVldWU7XG4mIzQzO1xuJiM0MztcdC8qIEl0ZXJhdGUgb3ZlciBhbGwgdHJhbnNtaXQgcXVldWVzIGZvciB0aGlzIHBvcnQgKi9cbiYjNDM7XHRmb3IgKHF1ZXVlID0gMDsgcXVldWUgXHUwMDNjIGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV90eF9xdWV1ZXM7IHF1ZXVlJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTggcmVnO1xuJiM0MztcbiYjNDM7XHRcdC8qIENhbGN1bGF0ZSBUWFEgU3BsaXQgQ29udHJvbCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzXG4mIzQzO1x0XHQgKiBwb3J0L3F1ZXVlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcbiYjNDM7XHRcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxuJiM0MztcdFx0XHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNldCBXRlEgZW5hYmxlIGJpdCB0byByZXZlcnQgYmFjayB0byBkZWZhdWx0IHNjaGVkdWxpbmdcbiYjNDM7XHRcdCAqIG1vZGVcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsXG4mIzQzO1x0XHRcdCAgICAgICBLU1o4ODczX1RYUV9XRlFfRU5BQkxFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc3o4X3RjX3NldHVwX3FkaXNjX2V0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpxb3B0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlcGFyZW50ICE9IFRDX0hfUk9PVCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtQYXJlbnQgc2hvdWxkIGJlIFxcXCYjMzQ7cm9vdFxcXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocW9wdC1cdTAwM2Vjb21tYW5kKSB7XG4mIzQzO1x0Y2FzZSBUQ19FVFNfUkVQTEFDRTpcbiYjNDM7XHRcdHJldCA9IGtzel90Y19ldHNfdmFsaWRhdGUoZGV2LCBwb3J0LCBcdTAwMjZxb3B0LVx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGtzejg4eDNfdGNfZXRzX2FkZChkZXYsIHBvcnQsIFx1MDAyNnFvcHQtXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xuJiM0MztcdGNhc2UgVENfRVRTX0RFU1RST1k6XG4mIzQzO1x0XHRyZXR1cm4ga3N6ODh4M190Y19ldHNfZGVsKGRldiwgcG9ydCk7XG4mIzQzO1x0Y2FzZSBUQ19FVFNfU1RBVFM6XG4mIzQzO1x0Y2FzZSBUQ19FVFNfR1JBRlQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODd4eF9zZXR1cF90YyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgICAgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxuJiM0MztcdFx0cmV0dXJuIGtzel9zZXR1cF90Y19jYnMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6OF9zZXR1cF90YyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxuJiM0MztcdFx0cmV0dXJuIGtzel9zZXR1cF90Y19jYnMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19FVFM6XG4mIzQzO1x0XHRyZXR1cm4ga3N6OF90Y19zZXR1cF9xZGlzY19ldHMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQga3N6ODc5NV9jcHVfaW50ZXJmYWNlX3NlbGVjdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiB7XG4gXHRzdHJ1Y3Qga3N6X3BvcnQgKnAgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbcG9ydF07XG5AQCAtMjA1Myw2ICYjNDM7MjI1MSwxNzEgQEAgc3RhdGljIGludCBrc3o4X2VuYWJsZV9zdHBfYWRkcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIGtzejhfd19zdGFfbWFjX3RhYmxlKGRldiwgMCwgXHUwMDI2YWx1KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwc3RhdHM7XG4mIzQzO1x0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cztcbiYjNDM7XHRzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKnJhdztcbiYjNDM7XHRzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7XG4mIzQzO1xuJiM0MztcdG1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4mIzQzO1x0c3RhdHMgPSBcdTAwMjZtaWItXHUwMDNlc3RhdHM2NDtcbiYjNDM7XHRwc3RhdHMgPSBcdTAwMjZtaWItXHUwMDNlcGF1c2Vfc3RhdHM7XG4mIzQzO1x0cmF3ID0gKHN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyAqKW1pYi1cdTAwM2Vjb3VudGVycztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0X2xvY2spO1xuJiM0MztcbiYjNDM7XHRzdGF0cy1cdTAwM2VyeF9wYWNrZXRzID0gcmF3LVx1MDAzZXJ4X2JjYXN0ICYjNDM7IHJhdy1cdTAwM2VyeF9tY2FzdCAmIzQzOyByYXctXHUwMDNlcnhfdWNhc3QgJiM0MztcbiYjNDM7XHRcdHJhdy1cdTAwM2VyeF9wYXVzZTtcbiYjNDM7XHRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzID0gcmF3LVx1MDAzZXR4X2JjYXN0ICYjNDM7IHJhdy1cdTAwM2V0eF9tY2FzdCAmIzQzOyByYXctXHUwMDNldHhfdWNhc3QgJiM0MztcbiYjNDM7XHRcdHJhdy1cdTAwM2V0eF9wYXVzZTtcbiYjNDM7XG4mIzQzO1x0LyogSFcgY291bnRlcnMgYXJlIGNvdW50aW5nIGJ5dGVzICYjNDM7IEZDUyB3aGljaCBpcyBub3QgYWNjZXB0YWJsZVxuJiM0MztcdCAqIGZvciBydG5sX2xpbmtfc3RhdHM2NCBpbnRlcmZhY2VcbiYjNDM7XHQgKi9cbiYjNDM7XHRzdGF0cy1cdTAwM2VyeF9ieXRlcyA9IHJhdy1cdTAwM2VyeCAmIzQzOyByYXctXHUwMDNlcnhfaGkgLSBzdGF0cy1cdTAwM2VyeF9wYWNrZXRzICogRVRIX0ZDU19MRU47XG4mIzQzO1x0c3RhdHMtXHUwMDNldHhfYnl0ZXMgPSByYXctXHUwMDNldHggJiM0MzsgcmF3LVx1MDAzZXR4X2hpIC0gc3RhdHMtXHUwMDNldHhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOO1xuJiM0MztcbiYjNDM7XHRzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzID0gcmF3LVx1MDAzZXJ4X3VuZGVyc2l6ZSAmIzQzOyByYXctXHUwMDNlcnhfZnJhZ21lbnRzICYjNDM7XG4mIzQzO1x0XHRyYXctXHUwMDNlcnhfb3ZlcnNpemU7XG4mIzQzO1xuJiM0MztcdHN0YXRzLVx1MDAzZXJ4X2NyY19lcnJvcnMgPSByYXctXHUwMDNlcnhfY3JjX2VycjtcbiYjNDM7XHRzdGF0cy1cdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSByYXctXHUwMDNlcnhfYWxpZ25fZXJyO1xuJiM0MztcdHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQgPSByYXctXHUwMDNlcnhfZGlzY2FyZHM7XG4mIzQzO1x0c3RhdHMtXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyAmIzQzOyBzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzICYjNDM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9mcmFtZV9lcnJvcnMgICYjNDM7IHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQ7XG4mIzQzO1xuJiM0MztcdHN0YXRzLVx1MDAzZXR4X3dpbmRvd19lcnJvcnMgPSByYXctXHUwMDNldHhfbGF0ZV9jb2w7XG4mIzQzO1x0c3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgPSByYXctXHUwMDNldHhfZGlzY2FyZHM7XG4mIzQzO1x0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSByYXctXHUwMDNldHhfZXhjX2NvbDtcbiYjNDM7XHRzdGF0cy1cdTAwM2V0eF9lcnJvcnMgPSBzdGF0cy1cdTAwM2V0eF93aW5kb3dfZXJyb3JzICYjNDM7IHN0YXRzLVx1MDAzZXR4X2ZpZm9fZXJyb3JzICYjNDM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycztcbiYjNDM7XG4mIzQzO1x0c3RhdHMtXHUwMDNlbXVsdGljYXN0ID0gcmF3LVx1MDAzZXJ4X21jYXN0O1xuJiM0MztcdHN0YXRzLVx1MDAzZWNvbGxpc2lvbnMgPSByYXctXHUwMDNldHhfdG90YWxfY29sO1xuJiM0MztcbiYjNDM7XHRwc3RhdHMtXHUwMDNldHhfcGF1c2VfZnJhbWVzID0gcmF3LVx1MDAzZXR4X3BhdXNlO1xuJiM0MztcdHBzdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSByYXctXHUwMDNlcnhfcGF1c2U7XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0X2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICoga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBjb25maWd1cmF0aW9uIGZvclxuJiM0MzsgKlx0XHRcdFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxuJiM0MzsgKiBAZGV2OiAgICAgICBrc3ogZGV2aWNlXG4mIzQzOyAqIEBwcm9wczogICAgIEFycmF5IG9mIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgdG8gYmUgc2V0XG4mIzQzOyAqIEBudW1fcHJvcHM6IE51bWJlciBvZiBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheVxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBzZXR0aW5ncyB0byBLU1o4OFgzIGNoaXBcbiYjNDM7ICogdmFyaWFudHMgKEtTWjg4NzMsIEtTWjg4NjMpLlxuJiM0MzsgKiBJdCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9ucyBhbGlnbiB3aXRoIHdoYXQgdGhlIGNoaXAgdmFyaWFudCBzdXBwb3J0cyBhbmRcbiYjNDM7ICogd2FybnMgb3IgZXJyb3JzIG91dCBvbiB1bnN1cHBvcnRlZCBzZXR0aW5ncy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLFxuJiM0MztcdFx0XHRcdFx0aW50IG51bV9wcm9wcylcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBhcnJheV9zaXplID0gQVJSQVlfU0laRShrc3o4OHgzX2RyaXZlX3N0cmVuZ3Rocyk7XG4mIzQzO1x0aW50IG1pY3JvYW1wO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wcm9wczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwcm9wc1tpXS52YWx1ZSA9PSAtMSB8fCBpID09IEtTWl9EUklWRVJfU1RSRU5HVEhfSU8pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGRldl93YXJuKGRldi1cdTAwM2VkZXYsIFwmIzM0OyVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBwcm9wc1tpXS5uYW1lKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1pY3JvYW1wID0gcHJvcHNbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10udmFsdWU7XG4mIzQzO1x0cmV0ID0ga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocywgYXJyYXlfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdG1pY3JvYW1wKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3IoZGV2LCBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyxcbiYjNDM7XHRcdFx0XHRcdCBhcnJheV9zaXplLCBtaWNyb2FtcCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9ybXc4KGRldiwgS1NaODg3M19SRUdfR0xPQkFMX0NUUkxfMTIsXG4mIzQzO1x0XHRcdEtTWjg4NzNfRFJJVkVfU1RSRU5HVEhfMTZNQSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoKSAtIEV4dHJhY3QgYW5kIGFwcGx5IGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb25zXG4mIzQzOyAqXHRcdFx0XHQgZnJvbSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLlxuJiM0MzsgKiBAZGV2Olx0a3N6IGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZVxuJiM0MzsgKiBkZXZpY2UgdHJlZSwgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHN1cHBvcnRlZCBjaGlwIHZhcmlhbnRzLCBhbmQgc2V0c1xuJiM0MzsgKiB0aGVtIGFjY29yZGluZ2x5LiBBbiBlcnJvciBzaG91bGQgYmUgY3JpdGljYWwgaGVyZSwgYXMgdGhlIGRyaXZlIHN0cmVuZ3RoXG4mIzQzOyAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHtcbiYjNDM7XHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0hJXSA9IHtcbiYjNDM7XHRcdFx0Lm5hbWUgPSBcJiMzNDttaWNyb2NoaXAsaGktZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcJiMzNDssXG4mIzQzO1x0XHRcdC5vZmZzZXQgPSBTV19ISV9TUEVFRF9EUklWRV9TVFJFTkdUSF9TLFxuJiM0MztcdFx0XHQudmFsdWUgPSAtMSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9MT10gPSB7XG4mIzQzO1x0XHRcdC5uYW1lID0gXCYjMzQ7bWljcm9jaGlwLGxvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCYjMzQ7LFxuJiM0MztcdFx0XHQub2Zmc2V0ID0gU1dfTE9fU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcbiYjNDM7XHRcdFx0LnZhbHVlID0gLTEsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dID0ge1xuJiM0MztcdFx0XHQubmFtZSA9IFwmIzM0O21pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwmIzM0OyxcbiYjNDM7XHRcdFx0Lm9mZnNldCA9IDAsIC8qIGRvbiYjMzk7dCBjYXJlICovXG4mIzQzO1x0XHRcdC52YWx1ZSA9IC0xLFxuJiM0MztcdFx0fSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGU7XG4mIzQzO1x0Ym9vbCBoYXZlX2FueV9wcm9wID0gZmFsc2U7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgb2ZfcHJvcHNbaV0ubmFtZSxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNm9mX3Byb3BzW2ldLnZhbHVlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVkFMKVxuJiM0MztcdFx0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhZCAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgb2ZfcHJvcHNbaV0ubmFtZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRoYXZlX2FueV9wcm9wID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghaGF2ZV9hbnlfcHJvcClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGRldi1cdTAwM2VjaGlwX2lkKSB7XG4mIzQzO1x0Y2FzZSBLU1o4OFgzX0NISVBfSUQ6XG4mIzQzO1x0XHRyZXR1cm4ga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShvZl9wcm9wcykpO1xuJiM0MztcdGNhc2UgS1NaODc5NV9DSElQX0lEOlxuJiM0MztcdGNhc2UgS1NaODc5NF9DSElQX0lEOlxuJiM0MztcdGNhc2UgS1NaODc2NV9DSElQX0lEOlxuJiM0MztcdFx0cmV0dXJuIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxuJiM0MztcdFx0XHRcdFx0XHRBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdC8qIEtTWjg4NjQsIEtTWjg4OTUgKi9cbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAob2ZfcHJvcHNbaV0udmFsdWUgPT0gLTEpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcJiMzNDslcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBvZl9wcm9wc1tpXS5uYW1lKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtMjA3NSw3ICYjNDM7MjQzOCw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoZGV2KTtcbiYjNDM7XHRyZXQgPSBrc3o4X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTI1NTEsOCAmIzQzOzI5MTQsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfbWlycm9yX2RlbFx0PSBrc3o4X3BvcnRfbWlycm9yX2RlbCxcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbi1cdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OF9jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuJiM0MztcdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6ODh4eF9jaGFuZ2VfbXR1LFxuJiM0MztcdC5wb3J0X21heF9tdHVcdFx0PSBrc3o4OHh4X21heF9tdHUsXG4gXHQuc3VzcGVuZFx0XHQ9IGtzel9zdXNwZW5kLFxuIFx0LnJlc3VtZVx0XHRcdD0ga3N6X3Jlc3VtZSxcbiBcdC5nZXRfdHNfaW5mb1x0XHQ9IGtzel9nZXRfdHNfaW5mbyxcbkBAIC0yNTYwLDcgJiM0MzsyOTIzLDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxuIFx0LnBvcnRfdHh0c3RhbXBcdFx0PSBrc3pfcG9ydF90eHRzdGFtcCxcbiBcdC5wb3J0X3J4dHN0YW1wXHRcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXG4tXHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzel9zZXR1cF90YyxcbiYjNDM7XHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzejhfc2V0dXBfdGMsXG4gXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4gXHQucG9ydF9zZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X3NldF9kZWZhdWx0X3ByaW8sXG4gXHQucG9ydF9nZXRfZHNjcF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kc2NwX3ByaW8sXG5AQCAtMjYwMSw4ICYjNDM7Mjk2NCw4IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4N3h4X3N3aXRjaF9vcHMgPSB7XG4gXHQucG9ydF9taXJyb3JfZGVsXHQ9IGtzejhfcG9ydF9taXJyb3JfZGVsLFxuIFx0LmdldF9zdGF0czY0XHRcdD0ga3N6X2dldF9zdGF0czY0LFxuIFx0LmdldF9wYXVzZV9zdGF0c1x0PSBrc3pfZ2V0X3BhdXNlX3N0YXRzLFxuLVx0LnBvcnRfY2hhbmdlX210dVx0PSBrc3o4X2NoYW5nZV9tdHUsXG4tXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6X21heF9tdHUsXG4mIzQzO1x0LnBvcnRfY2hhbmdlX210dVx0PSBrc3o4N3h4X2NoYW5nZV9tdHUsXG4mIzQzO1x0LnBvcnRfbWF4X210dVx0XHQ9IGtzejg3eHhfbWF4X210dSxcbiBcdC5zdXNwZW5kXHRcdD0ga3N6X3N1c3BlbmQsXG4gXHQucmVzdW1lXHRcdFx0PSBrc3pfcmVzdW1lLFxuIFx0LmdldF90c19pbmZvXHRcdD0ga3N6X2dldF90c19pbmZvLFxuQEAgLTI2MTAsNyAmIzQzOzI5NzMsNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfaHd0c3RhbXBfc2V0XHQ9IGtzel9od3RzdGFtcF9zZXQsXG4gXHQucG9ydF90eHRzdGFtcFx0XHQ9IGtzel9wb3J0X3R4dHN0YW1wLFxuIFx0LnBvcnRfcnh0c3RhbXBcdFx0PSBrc3pfcG9ydF9yeHRzdGFtcCxcbi1cdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6X3NldHVwX3RjLFxuJiM0MztcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6ODd4eF9zZXR1cF90YyxcbiBcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X3NldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X2dldF9kc2NwX3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbyxcbkBAIC0yNjUyLDggJiM0MzszMDE1LDggQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg4eHhfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X21pcnJvcl9kZWxcdD0ga3N6OF9wb3J0X21pcnJvcl9kZWwsXG4gXHQuZ2V0X3N0YXRzNjRcdFx0PSBrc3pfZ2V0X3N0YXRzNjQsXG4gXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IGtzel9nZXRfcGF1c2Vfc3RhdHMsXG4tXHQucG9ydF9jaGFuZ2VfbXR1XHQ9IGtzejhfY2hhbmdlX210dSxcbi1cdC5wb3J0X21heF9tdHVcdFx0PSBrc3pfbWF4X210dSxcbiYjNDM7XHQucG9ydF9jaGFuZ2VfbXR1XHQ9IGtzejg4eHhfY2hhbmdlX210dSxcbiYjNDM7XHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6ODh4eF9tYXhfbXR1LFxuIFx0LmdldF93b2xcdFx0PSBrc3pfZ2V0X3dvbCxcbiBcdC5zZXRfd29sXHRcdD0ga3N6X3NldF93b2wsXG4gXHQuc3VzcGVuZFx0XHQ9IGtzel9zdXNwZW5kLFxuQEAgLTI2NjMsNyAmIzQzOzMwMjYsNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODh4eF9zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfaHd0c3RhbXBfc2V0XHQ9IGtzel9od3RzdGFtcF9zZXQsXG4gXHQucG9ydF90eHRzdGFtcFx0XHQ9IGtzel9wb3J0X3R4dHN0YW1wLFxuIFx0LnBvcnRfcnh0c3RhbXBcdFx0PSBrc3pfcG9ydF9yeHRzdGFtcCxcbi1cdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6X3NldHVwX3RjLFxuJiM0MztcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6OF9zZXR1cF90YyxcbiBcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X3NldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X2dldF9kc2NwX3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5pbmRleCBmM2YwYzk4ZGZiNWE3Zi4uM2VlOTk1NTQ1YzU3OTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zd2l0Y2hkZXYuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2tzejk0NzdfcmVnLmhcJiMzNDtcbkBAIC02MCw2ICYjNDM7NjEsMTEgQEAgc3RhdGljIGludCBrc3o5NDc3X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG10dSlcbiBcdFx0XHRcdCAgUkVHX1NXX01UVV9NQVNLLCBmcmFtZV9zaXplKTtcbiB9XG4gXG4mIzQzO2ludCBrc3o5NDc3X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBLU1o5NDc3X01BWF9GUkFNRV9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6OTQ3N193YWl0X3ZsYW5fY3RybF9yZWFkeShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGludCB2YWw7XG5AQCAtNDc4LDggJiM0Mzs0ODQsOCBAQCBzdGF0aWMgaW50IGtzejk0NzdfaGFsZl9kdXBsZXhfbW9uaXRvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLWludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuLVx0XHRcdCAgIHU2NCB0eF9sYXRlX2NvbClcbiYjNDM7c3RhdGljIGludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgdTY0IHR4X2xhdGVfY29sKVxuIHtcbiBcdHU4IHN0YXR1cztcbiBcdGludCByZXQ7XG5AQCAtNDk3LDYgJiM0Mzs1MDMsMjQgQEAgaW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3N6OTQ3N19yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9zdGF0c19yYXcgKnJhdztcbiYjNDM7XHRzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0a3N6X3JfbWliX3N0YXRzNjQoZGV2LCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VpbmZvLVx1MDAzZXBoeV9lcnJhdGFfOTQ3NyBcdTAwMjZcdTAwMjYgIWtzel9pc19zZ21paV9wb3J0KGRldiwgcG9ydCkpIHtcbiYjNDM7XHRcdG1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4mIzQzO1x0XHRyYXcgPSAoc3RydWN0IGtzel9zdGF0c19yYXcgKiltaWItXHUwMDNlY291bnRlcnM7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0ga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihkZXYsIHBvcnQsIHJhdy1cdTAwM2V0eF9sYXRlX2NvbCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBtb25pdG9yIHRyYW5zbWlzc2lvbiBoYWx0XFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO307XG4mIzQzO1xuIHZvaWQga3N6OTQ3N19wb3J0X2luaXRfY250KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIHtcbiBcdHN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG5AQCAtMTE3Niw2ICYjNDM7MTIwMCw1OCBAQCB2b2lkIGtzejk0NzdfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgICBQT1JUX01JUlJPUl9TTklGRkVSLCBmYWxzZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBrc3o5NDc3X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdTggKmJpdHZhbCA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXhtaWlfY3RybDE7XG4mIzQzO1x0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbiYjNDM7XHRib29sIGdiaXQgPSBmYWxzZTtcbiYjNDM7XHR1OCBkYXRhODtcbiYjNDM7XHRib29sIHZhbDtcbiYjNDM7XG4mIzQzO1x0a3N6X3ByZWFkOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sIFx1MDAyNmRhdGE4KTtcbiYjNDM7XG4mIzQzO1x0dmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7XG4mIzQzO1xuJiM0MztcdGlmICh2YWwgPT0gYml0dmFsW1BfR01JSV8xR0JJVF0pXG4mIzQzO1x0XHRnYml0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdiaXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBwaHlfaW50ZXJmYWNlX3Qga3N6OTQ3N19nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgZ2JpdClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2V4bWlpX2N0cmwxO1xuJiM0MztcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XHR1OCBkYXRhODtcbiYjNDM7XHR1OCB2YWw7XG4mIzQzO1xuJiM0MztcdGtzel9wcmVhZDgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBcdTAwMjZkYXRhOCk7XG4mIzQzO1xuJiM0MztcdHZhbCA9IEZJRUxEX0dFVChQX01JSV9TRUxfTSwgZGF0YTgpO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsID09IGJpdHZhbFtQX01JSV9TRUxdKSB7XG4mIzQzO1x0XHRpZiAoZ2JpdClcbiYjNDM7XHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4mIzQzO1x0fSBlbHNlIGlmICh2YWwgPT0gYml0dmFsW1BfUk1JSV9TRUxdKSB7XG4mIzQzO1x0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJO1xuJiM0MztcdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcbiYjNDM7XHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ7XG4mIzQzO1x0XHRpZiAoZGF0YTggXHUwMDI2IFBfUkdNSUlfSURfSUdfRU5BQkxFKSB7XG4mIzQzO1x0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEO1xuJiM0MztcdFx0XHRpZiAoZGF0YTggXHUwMDI2IFBfUkdNSUlfSURfRUdfRU5BQkxFKVxuJiM0MztcdFx0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBpbnRlcmZhY2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF9pbnRlcmZhY2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4ge1xuIFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbkBAIC0xMTg0LDkgJiM0MzsxMjYwLDkgQEAgc3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF9pbnRlcmZhY2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlaW50ZXJuYWxfcGh5W3BvcnRdKVxuIFx0XHRyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuIFxuLVx0Z2JpdCA9IGtzel9nZXRfZ2JpdChkZXYsIHBvcnQpO1xuJiM0MztcdGdiaXQgPSBrc3o5NDc3X2dldF9nYml0KGRldiwgcG9ydCk7XG4gXG4tXHRpbnRlcmZhY2UgPSBrc3pfZ2V0X3htaWkoZGV2LCBwb3J0LCBnYml0KTtcbiYjNDM7XHRpbnRlcmZhY2UgPSBrc3o5NDc3X2dldF94bWlpKGRldiwgcG9ydCwgZ2JpdCk7XG4gXG4gXHRyZXR1cm4gaW50ZXJmYWNlO1xuIH1cbkBAIC0xMzM1LDYgJiM0MzsxNDExLDI4IEBAIHN0YXRpYyB2b2lkIGtzejk0NzdfcG9ydF9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBjcHVfcG9ydClcbiBcdGtzel9wd3JpdGU4KGRldiwgcG9ydCwgcmVnc1tSRUdfUE9SVF9QTUVfQ1RSTF0sIDApO1xuIH1cbiBcbiYjNDM7aW50IGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHF1ZXVlX21hcCA9IDA7XG4mIzQzO1x0aW50IGlwbTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpcG0gPSAwOyBpcG0gXHUwMDNjIGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV9pcG1zOyBpcG0mIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgcXVldWU7XG4mIzQzO1xuJiM0MztcdFx0LyogVHJhZmZpYyBUeXBlIChUVCkgaXMgY29ycmVzcG9uZGluZyB0byB0aGUgSW50ZXJuYWwgUHJpb3JpdHlcbiYjNDM7XHRcdCAqIE1hcCAoSVBNKSBpbiB0aGUgc3dpdGNoLiBUcmFmZmljIENsYXNzIChUQykgaXNcbiYjNDM7XHRcdCAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHF1ZXVlIGluIHRoZSBzd2l0Y2guXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHF1ZXVlID0gaWVlZTgwMjFxX3R0X3RvX3RjKGlwbSwgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4mIzQzO1x0XHRpZiAocXVldWUgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBxdWV1ZTtcbiYjNDM7XG4mIzQzO1x0XHRxdWV1ZV9tYXAgfD0gcXVldWUgXHUwMDNjXHUwMDNjIChpcG0gKiBLU1o5NDc3X1BPUlRfVENfTUFQX1MpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9wd3JpdGUzMihkZXYsIHBvcnQsIEtTWjk0NzdfUE9SVF9NUklfVENfTUFQX180LCBxdWV1ZV9tYXApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6OTQ3N19kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTE1MTcsNiAmIzQzOzE2MTUsNTggQEAgaW50IGtzejk0NzdfZW5hYmxlX3N0cF9hZGRyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBrc3o5NDc3X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKCkgLSBFeHRyYWN0IGFuZCBhcHBseSBkcml2ZSBzdHJlbmd0aFxuJiM0MzsgKlx0XHRcdFx0ICAgIGNvbmZpZ3VyYXRpb25zIGZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy5cbiYjNDM7ICogQGRldjpcdGtzeiBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgZnJvbSB0aGVcbiYjNDM7ICogZGV2aWNlIHRyZWUsIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBzdXBwb3J0ZWQgY2hpcCB2YXJpYW50cywgYW5kIHNldHNcbiYjNDM7ICogdGhlbSBhY2NvcmRpbmdseS4gQW4gZXJyb3Igc2hvdWxkIGJlIGNyaXRpY2FsIGhlcmUsIGFzIHRoZSBkcml2ZSBzdHJlbmd0aFxuJiM0MzsgKiBzZXR0aW5ncyBhcmUgY3J1Y2lhbCBmb3IgRU1JIGNvbXBsaWFuY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBrc3o5NDc3X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIG9mX3Byb3BzW10gPSB7XG4mIzQzO1x0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9ISV0gPSB7XG4mIzQzO1x0XHRcdC5uYW1lID0gXCYjMzQ7bWljcm9jaGlwLGhpLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCYjMzQ7LFxuJiM0MztcdFx0XHQub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcbiYjNDM7XHRcdFx0LnZhbHVlID0gLTEsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfTE9dID0ge1xuJiM0MztcdFx0XHQubmFtZSA9IFwmIzM0O21pY3JvY2hpcCxsby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwmIzM0OyxcbiYjNDM7XHRcdFx0Lm9mZnNldCA9IFNXX0xPX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXG4mIzQzO1x0XHRcdC52YWx1ZSA9IC0xLFxuJiM0MztcdFx0fSxcbiYjNDM7XHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0lPXSA9IHtcbiYjNDM7XHRcdFx0Lm5hbWUgPSBcJiMzNDttaWNyb2NoaXAsaW8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcJiMzNDssXG4mIzQzO1x0XHRcdC5vZmZzZXQgPSAwLCAvKiBkb24mIzM5O3QgY2FyZSAqL1xuJiM0MztcdFx0XHQudmFsdWUgPSAtMSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlO1xuJiM0MztcdGJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIG9mX3Byb3BzW2ldLm5hbWUsXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZvZl9wcm9wc1tpXS52YWx1ZSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTClcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IG9mX3Byb3BzW2ldLm5hbWUpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aGF2ZV9hbnlfcHJvcCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWhhdmVfYW55X3Byb3ApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLCBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4mIzQzO31cbiBzdGF0aWMgaW50IGtzejk0Nzdfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTE1MzksNyAmIzQzOzE2ODksNyBAQCBzdGF0aWMgaW50IGtzejk0Nzdfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0cmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7XG4mIzQzO1x0cmV0ID0ga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMDUyLDcgJiM0MzsyMjAyLDcgQEAgY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejk0NzdfZGV2X29wcyA9IHtcbiBcdC5jZmdfcG9ydF9tZW1iZXIgPSBrc3o5NDc3X2NmZ19wb3J0X21lbWJlcixcbiBcdC5yX21pYl9jbnQgPSBrc3o5NDc3X3JfbWliX2NudCxcbiBcdC5yX21pYl9wa3QgPSBrc3o5NDc3X3JfbWliX3BrdCxcbi1cdC5yX21pYl9zdGF0NjQgPSBrc3pfcl9taWJfc3RhdHM2NCxcbiYjNDM7XHQucl9taWJfc3RhdDY0ID0ga3N6OTQ3N19yX21pYl9zdGF0czY0LFxuIFx0LmZyZWV6ZV9taWIgPSBrc3o5NDc3X2ZyZWV6ZV9taWIsXG4gXHQucG9ydF9pbml0X2NudCA9IGtzejk0NzdfcG9ydF9pbml0X2NudCxcbiBcdC5wbWVfd3JpdGU4ID0ga3N6X3dyaXRlOCxcbkBAIC0yMDk4LDcgJiM0MzsyMjQ4LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejk0Nzdfc3dpdGNoX29wcyA9IHtcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbiBcdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OTQ3N19jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuJiM0MztcdC5wb3J0X21heF9tdHVcdFx0PSBrc3o5NDc3X21heF9tdHUsXG4gXHQuZ2V0X3dvbFx0XHQ9IGtzel9nZXRfd29sLFxuIFx0LnNldF93b2xcdFx0PSBrc3pfc2V0X3dvbCxcbiBcdC5zdXNwZW5kXHRcdD0ga3N6X3N1c3BlbmQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaFxuaW5kZXggOTJhMWQ4ODkyMjRkM2UuLmE4NGMwMDAwMDBlNjZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5oXG5AQCAtMjEsNiAmIzQzOzIxLDcgQEAgdm9pZCBrc3o5NDc3X2ZyZWV6ZV9taWIoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgZnJlZXplKTtcbiB2b2lkIGtzejk0NzdfcG9ydF9pbml0X2NudChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4gaW50IGtzejk0NzdfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdFx0Ym9vbCBmbGFnLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuJiM0MztpbnQga3N6OTQ3N19tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpO1xuIGludCBrc3o5NDc3X3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcbiBcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5AQCAtMzEsOCAmIzQzOzMyLDYgQEAgaW50IGtzejk0NzdfcG9ydF9taXJyb3JfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgIGJvb2wgaW5ncmVzcywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiB2b2lkIGtzejk0NzdfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgZHNhX21hbGxfbWlycm9yX3RjX2VudHJ5ICptaXJyb3IpO1xuLWludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuLVx0XHRcdCAgIHU2NCB0eF9sYXRlX2NvbCk7XG4gaW50IGtzejk0NzdfZmRiX2R1bXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgICBkc2FfZmRiX2R1bXBfY2JfdCAqY2IsIHZvaWQgKmRhdGEpO1xuIGludCBrc3o5NDc3X2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbkBAIC00NSw2ICYjNDM7NDQsNyBAQCBpbnQga3N6OTQ3N19tZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X21kYiAqbWRiLCBzdHJ1Y3QgZHNhX2RiIGRiKTtcbiBpbnQga3N6OTQ3N19lbmFibGVfc3RwX2FkZHIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG4gdm9pZCBrc3o5NDc3X3BvcnRfcXVldWVfc3BsaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuJiM0MztpbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuIFxuIGludCBrc3o5NDc3X3BvcnRfYWNsX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuIHZvaWQga3N6OTQ3N19wb3J0X2FjbF9mcmVlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5pbmRleCBkMTcyNjc3OGJiNDg4ZS4uNjdhYjZkZGI5ZTUzZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbkBAIC0zNyw4MiAmIzQzOzM3LDYgQEBcbiBcbiAjZGVmaW5lIE1JQl9DT1VOVEVSX05VTSAweDIwXG4gXG4tc3RydWN0IGtzel9zdGF0c19yYXcge1xuLVx0dTY0IHJ4X2hpO1xuLVx0dTY0IHJ4X3VuZGVyc2l6ZTtcbi1cdHU2NCByeF9mcmFnbWVudHM7XG4tXHR1NjQgcnhfb3ZlcnNpemU7XG4tXHR1NjQgcnhfamFiYmVycztcbi1cdHU2NCByeF9zeW1ib2xfZXJyO1xuLVx0dTY0IHJ4X2NyY19lcnI7XG4tXHR1NjQgcnhfYWxpZ25fZXJyO1xuLVx0dTY0IHJ4X21hY19jdHJsO1xuLVx0dTY0IHJ4X3BhdXNlO1xuLVx0dTY0IHJ4X2JjYXN0O1xuLVx0dTY0IHJ4X21jYXN0O1xuLVx0dTY0IHJ4X3VjYXN0O1xuLVx0dTY0IHJ4XzY0X29yX2xlc3M7XG4tXHR1NjQgcnhfNjVfMTI3O1xuLVx0dTY0IHJ4XzEyOF8yNTU7XG4tXHR1NjQgcnhfMjU2XzUxMTtcbi1cdHU2NCByeF81MTJfMTAyMztcbi1cdHU2NCByeF8xMDI0XzE1MjI7XG4tXHR1NjQgcnhfMTUyM18yMDAwO1xuLVx0dTY0IHJ4XzIwMDE7XG4tXHR1NjQgdHhfaGk7XG4tXHR1NjQgdHhfbGF0ZV9jb2w7XG4tXHR1NjQgdHhfcGF1c2U7XG4tXHR1NjQgdHhfYmNhc3Q7XG4tXHR1NjQgdHhfbWNhc3Q7XG4tXHR1NjQgdHhfdWNhc3Q7XG4tXHR1NjQgdHhfZGVmZXJyZWQ7XG4tXHR1NjQgdHhfdG90YWxfY29sO1xuLVx0dTY0IHR4X2V4Y19jb2w7XG4tXHR1NjQgdHhfc2luZ2xlX2NvbDtcbi1cdHU2NCB0eF9tdWx0X2NvbDtcbi1cdHU2NCByeF90b3RhbDtcbi1cdHU2NCB0eF90b3RhbDtcbi1cdHU2NCByeF9kaXNjYXJkcztcbi1cdHU2NCB0eF9kaXNjYXJkcztcbi19O1xuLVxuLXN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyB7XG4tXHR1NjQgcng7XG4tXHR1NjQgcnhfaGk7XG4tXHR1NjQgcnhfdW5kZXJzaXplO1xuLVx0dTY0IHJ4X2ZyYWdtZW50cztcbi1cdHU2NCByeF9vdmVyc2l6ZTtcbi1cdHU2NCByeF9qYWJiZXJzO1xuLVx0dTY0IHJ4X3N5bWJvbF9lcnI7XG4tXHR1NjQgcnhfY3JjX2Vycjtcbi1cdHU2NCByeF9hbGlnbl9lcnI7XG4tXHR1NjQgcnhfbWFjX2N0cmw7XG4tXHR1NjQgcnhfcGF1c2U7XG4tXHR1NjQgcnhfYmNhc3Q7XG4tXHR1NjQgcnhfbWNhc3Q7XG4tXHR1NjQgcnhfdWNhc3Q7XG4tXHR1NjQgcnhfNjRfb3JfbGVzcztcbi1cdHU2NCByeF82NV8xMjc7XG4tXHR1NjQgcnhfMTI4XzI1NTtcbi1cdHU2NCByeF8yNTZfNTExO1xuLVx0dTY0IHJ4XzUxMl8xMDIzO1xuLVx0dTY0IHJ4XzEwMjRfMTUyMjtcbi1cdHU2NCB0eDtcbi1cdHU2NCB0eF9oaTtcbi1cdHU2NCB0eF9sYXRlX2NvbDtcbi1cdHU2NCB0eF9wYXVzZTtcbi1cdHU2NCB0eF9iY2FzdDtcbi1cdHU2NCB0eF9tY2FzdDtcbi1cdHU2NCB0eF91Y2FzdDtcbi1cdHU2NCB0eF9kZWZlcnJlZDtcbi1cdHU2NCB0eF90b3RhbF9jb2w7XG4tXHR1NjQgdHhfZXhjX2NvbDtcbi1cdHU2NCB0eF9zaW5nbGVfY29sO1xuLVx0dTY0IHR4X211bHRfY29sO1xuLVx0dTY0IHJ4X2Rpc2NhcmRzO1xuLVx0dTY0IHR4X2Rpc2NhcmRzO1xuLX07XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfbWliX25hbWVzIGtzejg4eHhfbWliX25hbWVzW10gPSB7XG4gXHR7IDB4MDAsIFwmIzM0O3J4XCYjMzQ7IH0sXG4gXHR7IDB4MDEsIFwmIzM0O3J4X2hpXCYjMzQ7IH0sXG5AQCAtMTg5LDI4ICYjNDM7MTEzLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfbWliX25hbWVzIGtzejk0NzdfbWliX25hbWVzW10gPSB7XG4gXHR7IDB4ODMsIFwmIzM0O3R4X2Rpc2NhcmRzXCYjMzQ7IH0sXG4gfTtcbiBcbi1zdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIHtcbi1cdGNvbnN0IGNoYXIgKm5hbWU7XG4tXHRpbnQgb2Zmc2V0O1xuLVx0aW50IHZhbHVlO1xuLX07XG4tXG4tZW51bSBrc3pfZHJpdmVyX3N0cmVuZ3RoX3R5cGUge1xuLVx0S1NaX0RSSVZFUl9TVFJFTkdUSF9ISSxcbi1cdEtTWl9EUklWRVJfU1RSRU5HVEhfTE8sXG4tXHRLU1pfRFJJVkVSX1NUUkVOR1RIX0lPLFxuLX07XG4tXG4tLyoqXG4tICogc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAtIGRyaXZlIHN0cmVuZ3RoIG1hcHBpbmdcbi0gKiBAcmVnX3ZhbDpcdHJlZ2lzdGVyIHZhbHVlXG4tICogQG1pY3JvYW1wOlx0bWljcm9hbXAgdmFsdWVcbi0gKi9cbi1zdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIHtcbi1cdHUzMiByZWdfdmFsO1xuLVx0dTMyIG1pY3JvYW1wO1xuLX07XG4tXG4gLyoga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHMgLSBEcml2ZSBzdHJlbmd0aCBtYXBwaW5nIGZvciBLU1o5NDc3IHZhcmlhbnRzXG4gICpcbiAgKiBUaGlzIHZhbHVlcyBhcmUgbm90IGRvY3VtZW50ZWQgaW4gS1NaOTQ3NyB2YXJpYW50cyBidXQgY29uZmlybWVkIGJ5XG5AQCAtMjQ2LDE1ICYjNDM7MTQ4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHNbXSA9IHtcbiBcdHsgU1dfRFJJVkVfU1RSRU5HVEhfMjhNQSwgMjgwMDAgfSxcbiB9O1xuIFxuLS8qIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaODg2MywgS1NaODg3MywgLi5cbi0gKlx0XHRcdCAgICAgdmFyaWFudHMuXG4tICogVGhpcyB2YWx1ZXMgYXJlIGRvY3VtZW50ZWQgaW4gS1NaODg3MyBhbmQgS1NaODg2MyBkYXRhc2hlZXRzLlxuLSAqL1xuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7XG4tXHR7IDAsICA4MDAwIH0sXG4tXHR7IEtTWjg4NzNfRFJJVkVfU1RSRU5HVEhfMTZNQSwgMTYwMDAgfSxcbi19O1xuLVxuIC8qKlxuICAqIGtzel9waHlsaW5rX21hY19kaXNhYmxlX3R4X2xwaSgpIC0gQ2FsbGJhY2sgdG8gc2lnbmFsIExQSSBzdXBwb3J0IChEdW1teSlcbiAgKiBAY29uZmlnOiBwaHlsaW5rIGNvbmZpZyBzdHJ1Y3R1cmVcbkBAIC0yMDEzLDcgJiM0MzsxOTA2LDYgQEAgdm9pZCBrc3pfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiBcdHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHM7XG4gXHRzdHJ1Y3Qga3N6X3N0YXRzX3JhdyAqcmF3O1xuIFx0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xuLVx0aW50IHJldDtcbiBcbiBcdG1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4gXHRzdGF0cyA9IFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0O1xuQEAgLTIwNTUsNjEgJiM0MzsxOTQ3LDYgQEAgdm9pZCBrc3pfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiBcdHBzdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSByYXctXHUwMDNlcnhfcGF1c2U7XG4gXG4gXHRzcGluX3VubG9jayhcdTAwMjZtaWItXHUwMDNlc3RhdHM2NF9sb2NrKTtcbi1cbi1cdGlmIChkZXYtXHUwMDNlaW5mby1cdTAwM2VwaHlfZXJyYXRhXzk0NzcgXHUwMDI2XHUwMDI2ICFrc3pfaXNfc2dtaWlfcG9ydChkZXYsIHBvcnQpKSB7XG4tXHRcdHJldCA9IGtzejk0NzdfZXJyYXRhX21vbml0b3IoZGV2LCBwb3J0LCByYXctXHUwMDNldHhfbGF0ZV9jb2wpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIG1vbml0b3IgdHJhbnNtaXNzaW9uIGhhbHRcXG5cJiMzNDspO1xuLVx0fVxuLX1cbi1cbi12b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcHN0YXRzO1xuLVx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cztcbi1cdHN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyAqcmF3O1xuLVx0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xuLVxuLVx0bWliID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYjtcbi1cdHN0YXRzID0gXHUwMDI2bWliLVx1MDAzZXN0YXRzNjQ7XG4tXHRwc3RhdHMgPSBcdTAwMjZtaWItXHUwMDNlcGF1c2Vfc3RhdHM7XG4tXHRyYXcgPSAoc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3ICopbWliLVx1MDAzZWNvdW50ZXJzO1xuLVxuLVx0c3Bpbl9sb2NrKFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0X2xvY2spO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfcGFja2V0cyA9IHJhdy1cdTAwM2VyeF9iY2FzdCAmIzQzOyByYXctXHUwMDNlcnhfbWNhc3QgJiM0MzsgcmF3LVx1MDAzZXJ4X3VjYXN0ICYjNDM7XG4tXHRcdHJhdy1cdTAwM2VyeF9wYXVzZTtcbi1cdHN0YXRzLVx1MDAzZXR4X3BhY2tldHMgPSByYXctXHUwMDNldHhfYmNhc3QgJiM0MzsgcmF3LVx1MDAzZXR4X21jYXN0ICYjNDM7IHJhdy1cdTAwM2V0eF91Y2FzdCAmIzQzO1xuLVx0XHRyYXctXHUwMDNldHhfcGF1c2U7XG4tXG4tXHQvKiBIVyBjb3VudGVycyBhcmUgY291bnRpbmcgYnl0ZXMgJiM0MzsgRkNTIHdoaWNoIGlzIG5vdCBhY2NlcHRhYmxlXG4tXHQgKiBmb3IgcnRubF9saW5rX3N0YXRzNjQgaW50ZXJmYWNlXG4tXHQgKi9cbi1cdHN0YXRzLVx1MDAzZXJ4X2J5dGVzID0gcmF3LVx1MDAzZXJ4ICYjNDM7IHJhdy1cdTAwM2VyeF9oaSAtIHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgKiBFVEhfRkNTX0xFTjtcbi1cdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gcmF3LVx1MDAzZXR4ICYjNDM7IHJhdy1cdTAwM2V0eF9oaSAtIHN0YXRzLVx1MDAzZXR4X3BhY2tldHMgKiBFVEhfRkNTX0xFTjtcbi1cbi1cdHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPSByYXctXHUwMDNlcnhfdW5kZXJzaXplICYjNDM7IHJhdy1cdTAwM2VyeF9mcmFnbWVudHMgJiM0Mztcbi1cdFx0cmF3LVx1MDAzZXJ4X292ZXJzaXplO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyA9IHJhdy1cdTAwM2VyeF9jcmNfZXJyO1xuLVx0c3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzID0gcmF3LVx1MDAzZXJ4X2FsaWduX2Vycjtcbi1cdHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQgPSByYXctXHUwMDNlcnhfZGlzY2FyZHM7XG4tXHRzdGF0cy1cdTAwM2VyeF9lcnJvcnMgPSBzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzICYjNDM7IHN0YXRzLVx1MDAzZXJ4X2NyY19lcnJvcnMgJiM0Mztcbi1cdFx0c3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzICAmIzQzOyBzdGF0cy1cdTAwM2VyeF9kcm9wcGVkO1xuLVxuLVx0c3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHJhdy1cdTAwM2V0eF9sYXRlX2NvbDtcbi1cdHN0YXRzLVx1MDAzZXR4X2ZpZm9fZXJyb3JzID0gcmF3LVx1MDAzZXR4X2Rpc2NhcmRzO1xuLVx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSByYXctXHUwMDNldHhfZXhjX2NvbDtcbi1cdHN0YXRzLVx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVx1MDAzZXR4X3dpbmRvd19lcnJvcnMgJiM0Mzsgc3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgJiM0Mztcbi1cdFx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnM7XG4tXG4tXHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgPSByYXctXHUwMDNlcnhfbWNhc3Q7XG4tXHRzdGF0cy1cdTAwM2Vjb2xsaXNpb25zID0gcmF3LVx1MDAzZXR4X3RvdGFsX2NvbDtcbi1cbi1cdHBzdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSByYXctXHUwMDNldHhfcGF1c2U7XG4tXHRwc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcmF3LVx1MDAzZXJ4X3BhdXNlO1xuLVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2bWliLVx1MDAzZXN0YXRzNjRfbG9jayk7XG4gfVxuIFxuIHZvaWQga3N6X2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5AQCAtMjg4NSwyOCAmIzQzOzI3MjIsNiBAQCB2b2lkIGtzel9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0ICovXG4gfVxuIFxuLWludCBrc3o5NDc3X3NldF9kZWZhdWx0X3ByaW9fcXVldWVfbWFwcGluZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHR1MzIgcXVldWVfbWFwID0gMDtcbi1cdGludCBpcG07XG4tXG4tXHRmb3IgKGlwbSA9IDA7IGlwbSBcdTAwM2MgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX2lwbXM7IGlwbSYjNDM7JiM0MzspIHtcbi1cdFx0aW50IHF1ZXVlO1xuLVxuLVx0XHQvKiBUcmFmZmljIFR5cGUgKFRUKSBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBJbnRlcm5hbCBQcmlvcml0eVxuLVx0XHQgKiBNYXAgKElQTSkgaW4gdGhlIHN3aXRjaC4gVHJhZmZpYyBDbGFzcyAoVEMpIGlzXG4tXHRcdCAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHF1ZXVlIGluIHRoZSBzd2l0Y2guXG4tXHRcdCAqL1xuLVx0XHRxdWV1ZSA9IGllZWU4MDIxcV90dF90b190YyhpcG0sIGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV90eF9xdWV1ZXMpO1xuLVx0XHRpZiAocXVldWUgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHF1ZXVlO1xuLVxuLVx0XHRxdWV1ZV9tYXAgfD0gcXVldWUgXHUwMDNjXHUwMDNjIChpcG0gKiBLU1o5NDc3X1BPUlRfVENfTUFQX1MpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGtzel9wd3JpdGUzMihkZXYsIHBvcnQsIEtTWjk0NzdfUE9SVF9NUklfVENfTUFQX180LCBxdWV1ZV9tYXApO1xuLX1cbi1cbiB2b2lkIGtzel9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtMjk4NCw0MCAmIzQzOzI3OTksNiBAQCBpbnQga3N6X3BvcnRfYnJpZGdlX2ZsYWdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4te1xuLVx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4tXG4tXHRzd2l0Y2ggKGRldi1cdTAwM2VjaGlwX2lkKSB7XG4tXHRjYXNlIEtTWjg3OTVfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODc5NF9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NzY1X0NISVBfSUQ6XG4tXHRcdHJldHVybiBLU1o4Nzk1X0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XG4tXHRjYXNlIEtTWjg0NjNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODhYM19DSElQX0lEOlxuLVx0Y2FzZSBLU1o4ODY0X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg4OTVfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIEtTWjg4NjNfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjtcbi1cdGNhc2UgS1NaODU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk0NzdfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o5NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk4OTNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTg5Nl9DSElQX0lEOlxuLVx0Y2FzZSBLU1o5ODk3X0NISVBfSUQ6XG4tXHRjYXNlIExBTjkzNzBfQ0hJUF9JRDpcbi1cdGNhc2UgTEFOOTM3MV9DSElQX0lEOlxuLVx0Y2FzZSBMQU45MzcyX0NISVBfSUQ6XG4tXHRjYXNlIExBTjkzNzNfQ0hJUF9JRDpcbi1cdGNhc2UgTEFOOTM3NF9DSElQX0lEOlxuLVx0Y2FzZSBMQU45NjQ2X0NISVBfSUQ6XG4tXHRcdHJldHVybiBLU1o5NDc3X01BWF9GUkFNRV9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xuLVx0fVxuLVxuLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLX1cbi1cbiBpbnQga3N6X3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuIHtcbkBAIC0zMDg2LDM5ICYjNDM7Mjg2Nyw2IEBAIHZvaWQga3N6X3NldF94bWlpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuIFx0a3N6X3B3cml0ZTgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBkYXRhOCk7XG4gfVxuIFxuLXBoeV9pbnRlcmZhY2VfdCBrc3pfZ2V0X3htaWkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgZ2JpdClcbi17XG4tXHRjb25zdCB1OCAqYml0dmFsID0gZGV2LVx1MDAzZWluZm8tXHUwMDNleG1paV9jdHJsMTtcbi1cdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4tXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuLVx0dTggZGF0YTg7XG4tXHR1OCB2YWw7XG4tXG4tXHRrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgXHUwMDI2ZGF0YTgpO1xuLVxuLVx0dmFsID0gRklFTERfR0VUKFBfTUlJX1NFTF9NLCBkYXRhOCk7XG4tXG4tXHRpZiAodmFsID09IGJpdHZhbFtQX01JSV9TRUxdKSB7XG4tXHRcdGlmIChnYml0KVxuLVx0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJO1xuLVx0XHRlbHNlXG4tXHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbi1cdH0gZWxzZSBpZiAodmFsID09IGJpdHZhbFtQX1JNSUlfU0VMXSkge1xuLVx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTtcbi1cdH0gZWxzZSB7XG4tXHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTtcbi1cdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcbi1cdFx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDtcbi1cdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0lHX0VOQUJMRSkge1xuLVx0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEO1xuLVx0XHRcdGlmIChkYXRhOCBcdTAwMjYgUF9SR01JSV9JRF9FR19FTkFCTEUpXG4tXHRcdFx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJldHVybiBpbnRlcmZhY2U7XG4tfVxuLVxuIGJvb2wga3N6X3BoeWxpbmtfbmVlZF9jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbW9kZSlcbiB7XG5AQCAtMzE1NCwyNCAmIzQzOzI5MDIsNiBAQCB2b2lkIGtzel9waHlsaW5rX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRcdGtzel9zZXRfeG1paShkZXYsIHBvcnQsIHN0YXRlLVx1MDAzZWludGVyZmFjZSk7XG4gfVxuIFxuLWJvb2wga3N6X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuLXtcbi1cdGNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2V4bWlpX2N0cmwxO1xuLVx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbi1cdGJvb2wgZ2JpdCA9IGZhbHNlO1xuLVx0dTggZGF0YTg7XG4tXHRib29sIHZhbDtcbi1cbi1cdGtzel9wcmVhZDgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBcdTAwMjZkYXRhOCk7XG4tXG4tXHR2YWwgPSBGSUVMRF9HRVQoUF9HTUlJXzFHQklUX00sIGRhdGE4KTtcbi1cbi1cdGlmICh2YWwgPT0gYml0dmFsW1BfR01JSV8xR0JJVF0pXG4tXHRcdGdiaXQgPSB0cnVlO1xuLVxuLVx0cmV0dXJuIGdiaXQ7XG4tfVxuLVxuIHN0YXRpYyBpbnQga3N6X3N3aXRjaF9kZXRlY3Qoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4gXHR1OCBpZDEsIGlkMiwgaWQ0O1xuQEAgLTMzMTQsOCAmIzQzOzMwNDQsOCBAQCBzdGF0aWMgaW50IGtzel9zZXR1cF90Y19tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCB1OCBzY2hlZHVsZXIsXG4gXHRcdFx0ICAgRklFTERfUFJFUChNVElfU0hBUElOR19NLCBzaGFwZXIpKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfc2V0dXBfdGNfY2JzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0ICAgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxuJiM0MztpbnQga3N6X3NldHVwX3RjX2NicyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0ICAgICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbiB7XG4gXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdGludCByZXQ7XG5AQCAtMzM4MCw4ICYjNDM7MzExMCw4IEBAIHN0YXRpYyBpbnQga3N6X2Rpc2FibGVfZWdyZXNzX3JhdGVfbGltaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsXG4tXHRcdFx0XHQgaW50IGJhbmQpXG4mIzQzO2ludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsXG4mIzQzO1x0XHRcdCAgaW50IGJhbmQpXG4ge1xuIFx0LyogQ29tcGFyZWQgdG8gcXVldWVzLCBiYW5kcyBwcmlvcml0aXplIHBhY2tldHMgZGlmZmVyZW50bHkuIEluIHN0cmljdFxuIFx0ICogcHJpb3JpdHkgbW9kZSwgdGhlIGxvd2VzdCBwcmlvcml0eSBpcyBhc3NpZ25lZCB0byBRdWV1ZSAwIHdoaWxlIHRoZVxuQEAgLTMzOTAsMTA0ICYjNDM7MzEyMCw2IEBAIHN0YXRpYyBpbnQga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwLFxuIFx0cmV0dXJuIHAtXHUwMDNlYmFuZHMgLSAxIC0gYmFuZDtcbiB9XG4gXG4tc3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKVxuLXtcbi1cdHU4IHJlZztcbi1cbi1cdHJlZyA9IDB4QzggJiM0MzsgcG9ydCAqIDQ7XG4tXHRyZWcgJiM0Mzs9ICgoMyAtIHF1ZXVlKSAvIDIpICogMjtcbi1cdHJlZyYjNDM7JiM0Mzs7XG4tXHRyZWcgLT0gKHF1ZXVlIFx1MDAyNiAxKTtcbi1cdHJldHVybiByZWc7XG4tfVxuLVxuLS8qKlxuLSAqIGtzejg4eDNfdGNfZXRzX2FkZCAtIENvbmZpZ3VyZSBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pXG4tICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxuLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZVxuLSAqIEBwb3J0OiBQb3J0IG51bWJlciB0byBjb25maWd1cmVcbi0gKiBAcDogUG9pbnRlciB0byBvZmZsb2FkIHJlcGxhY2UgcGFyYW1ldGVycyBkZXNjcmliaW5nIEVUUyBiYW5kcyBhbmQgbWFwcGluZ1xuLSAqXG4tICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgdHdvIHNjaGVkdWxpbmcgbW9kZXM6IFN0cmljdCBQcmlvcml0eSBhbmRcbi0gKiBXZWlnaHRlZCBGYWlyIFF1ZXVpbmcgKFdGUSkuIEJvdGggbW9kZXMgaGF2ZSBmaXhlZCBiZWhhdmlvcjpcbi0gKiAgIC0gTm8gY29uZmlndXJhYmxlIHF1ZXVlLXRvLXByaW9yaXR5IG1hcHBpbmdcbi0gKiAgIC0gTm8gd2VpZ2h0IGFkanVzdG1lbnQgaW4gV0ZRIG1vZGVcbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgc3dpdGNoIHRvIHVzZSBzdHJpY3QgcHJpb3JpdHkgbW9kZSBieVxuLSAqIGNsZWFyaW5nIHRoZSBXRlEgZW5hYmxlIGJpdCBmb3IgYWxsIHF1ZXVlcyBhc3NvY2lhdGVkIHdpdGggRVRTIGJhbmRzLlxuLSAqIElmIHN0cmljdCBwcmlvcml0eSBpcyBub3QgZXhwbGljaXRseSByZXF1ZXN0ZWQsIHRoZSBzd2l0Y2ggd2lsbCBkZWZhdWx0XG4tICogdG8gV0ZRIG1vZGUuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbi0gKi9cbi1zdGF0aWMgaW50IGtzejg4eDNfdGNfZXRzX2FkZChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcClcbi17XG4tXHRpbnQgcmV0LCBiYW5kO1xuLVxuLVx0LyogT25seSBzdHJpY3QgcHJpb3JpdHkgbW9kZSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy5cbi1cdCAqIFdGUSBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbiBzdHJpY3QgbW9kZSBpcyBkaXNhYmxlZC5cbi1cdCAqL1xuLVx0Zm9yIChiYW5kID0gMDsgYmFuZCBcdTAwM2MgcC1cdTAwM2ViYW5kczsgYmFuZCYjNDM7JiM0MzspIHtcbi1cdFx0aW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpO1xuLVx0XHR1OCByZWc7XG4tXG4tXHRcdC8qIENhbGN1bGF0ZSBUWFEgU3BsaXQgQ29udHJvbCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzXG4tXHRcdCAqIHBvcnQvcXVldWVcbi1cdFx0ICovXG4tXHRcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcbi1cdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcbi1cbi1cdFx0LyogQ2xlYXIgV0ZRIGVuYWJsZSBiaXQgdG8gc2VsZWN0IHN0cmljdCBwcmlvcml0eSBzY2hlZHVsaW5nICovXG4tXHRcdHJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLCAwKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLS8qKlxuLSAqIGtzejg4eDNfdGNfZXRzX2RlbCAtIFJlc2V0IEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgY29uZmlnXG4tICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxuLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZVxuLSAqIEBwb3J0OiBQb3J0IG51bWJlciB0byByZXNldFxuLSAqXG4tICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgb25seSBmaXhlZCBzY2hlZHVsaW5nIG1vZGVzOiBTdHJpY3QgUHJpb3JpdHkgb3Jcbi0gKiBXZWlnaHRlZCBGYWlyIFF1ZXVpbmcgKFdGUSksIHdpdGggbm8gcmVjb25maWd1cmF0aW9uIG9mIHdlaWdodHMgb3Jcbi0gKiBxdWV1ZSBtYXBwaW5nLiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgcG9ydOKAmXMgc2NoZWR1bGluZyBtb2RlIHRvXG4tICogdGhlIGRlZmF1bHQsIHdoaWNoIGlzIFdGUSwgYnkgZW5hYmxpbmcgdGhlIFdGUSBiaXQgZm9yIGFsbCBxdWV1ZXMuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbi0gKi9cbi1zdGF0aWMgaW50IGtzejg4eDNfdGNfZXRzX2RlbChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHRpbnQgcmV0LCBxdWV1ZTtcbi1cbi1cdC8qIEl0ZXJhdGUgb3ZlciBhbGwgdHJhbnNtaXQgcXVldWVzIGZvciB0aGlzIHBvcnQgKi9cbi1cdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcdTAwM2MgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3R4X3F1ZXVlczsgcXVldWUmIzQzOyYjNDM7KSB7XG4tXHRcdHU4IHJlZztcbi1cbi1cdFx0LyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXNcbi1cdFx0ICogcG9ydC9xdWV1ZVxuLVx0XHQgKi9cbi1cdFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xuLVx0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbi1cdFx0XHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xuLVxuLVx0XHQvKiBTZXQgV0ZRIGVuYWJsZSBiaXQgdG8gcmV2ZXJ0IGJhY2sgdG8gZGVmYXVsdCBzY2hlZHVsaW5nXG4tXHRcdCAqIG1vZGVcbi1cdFx0ICovXG4tXHRcdHJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLFxuLVx0XHRcdCAgICAgICBLU1o4ODczX1RYUV9XRlFfRU5BQkxFKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbnQga3N6X3F1ZXVlX3NldF9zdHJpY3Qoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGludCBxdWV1ZSlcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTM1ODAsOCAmIzQzOzMyMTIsOCBAQCBzdGF0aWMgaW50IGtzel90Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIFx0cmV0dXJuIGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKGRldiwgcG9ydCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3RjX2V0c192YWxpZGF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbi1cdFx0XHQgICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXG4mIzQzO2ludCBrc3pfdGNfZXRzX3ZhbGlkYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuJiM0MztcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcClcbiB7XG4gXHRpbnQgYmFuZDtcbiBcbkBAIC0zNjIyLDkgJiM0MzszMjU0LDYgQEAgc3RhdGljIGludCBrc3pfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoaXNfa3N6OChkZXYpIFx1MDAyNlx1MDAyNiAhKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSkpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbiBcdGlmIChxb3B0LVx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcbiBcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtQYXJlbnQgc2hvdWxkIGJlIFxcXCYjMzQ7cm9vdFxcXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTM2MzYsMTYgJiM0MzszMjY1LDkgQEAgc3RhdGljIGludCBrc3pfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcbi1cdFx0aWYgKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSlcbi1cdFx0XHRyZXR1cm4ga3N6ODh4M190Y19ldHNfYWRkKGRldiwgcG9ydCxcbi1cdFx0XHRcdFx0XHQgIFx1MDAyNnFvcHQtXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0dXJuIGtzel90Y19ldHNfYWRkKGRldiwgcG9ydCwgXHUwMDI2cW9wdC1cdTAwM2VyZXBsYWNlX3BhcmFtcyk7XG4mIzQzO1x0XHRyZXR1cm4ga3N6X3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcdTAwMjZxb3B0LVx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcbiBcdGNhc2UgVENfRVRTX0RFU1RST1k6XG4tXHRcdGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmV0dXJuIGtzejg4eDNfdGNfZXRzX2RlbChkZXYsIHBvcnQpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0dXJuIGtzel90Y19ldHNfZGVsKGRldiwgcG9ydCk7XG4mIzQzO1x0XHRyZXR1cm4ga3N6X3RjX2V0c19kZWwoZGV2LCBwb3J0KTtcbiBcdGNhc2UgVENfRVRTX1NUQVRTOlxuIFx0Y2FzZSBUQ19FVFNfR1JBRlQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbkBAIC0zNzA0LDYgJiM0MzszMzI2LDM0IEBAIGludCBrc3pfaGFuZGxlX3dha2VfcmVhc29uKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIFx0XHRcdFx0cG1lX3N0YXR1cyk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICoga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUgLSBDaGVjayBpZiB0aGUgTUFDIGFkZHJlc3Mgb24gYSBnaXZlbiBwb3J0XG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcy5cbiYjNDM7ICogQGRzOiBQb2ludGVyIHRvIHRoZSBEU0Egc3dpdGNoIHN0cnVjdHVyZS5cbiYjNDM7ICogQHBvcnQ6IFRoZSBwb3J0IG51bWJlciBvbiB3aGljaCB0aGUgTUFDIGFkZHJlc3MgaXMgdG8gYmUgY2hlY2tlZC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBleGFtaW5lcyB0aGUgTUFDIGFkZHJlc3Mgc2V0IG9uIHRoZSBzcGVjaWZpZWQgcG9ydCBhbmRcbiYjNDM7ICogZGV0ZXJtaW5lcyBpZiBpdCBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzIGZvciB0aGUgc3dpdGNoLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBvcnQmIzM5O3MgTUFDIGFkZHJlc3MgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcywgZmFsc2VcbiYjNDM7ICogb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpLVx1MDAzZXVzZXI7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgY2hhciAqYWRkciA9IHVzZXItXHUwMDNlZGV2X2FkZHI7XG4mIzQzO1x0c3RydWN0IGtzel9zd2l0Y2hfbWFjYWRkciAqc3dpdGNoX21hY2FkZHI7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaF9tYWNhZGRyID0gZGV2LVx1MDAzZXN3aXRjaF9tYWNhZGRyO1xuJiM0MztcdGlmIChzd2l0Y2hfbWFjYWRkciBcdTAwMjZcdTAwMjYgIWV0aGVyX2FkZHJfZXF1YWwoc3dpdGNoX21hY2FkZHItXHUwMDNlYWRkciwgYWRkcikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGtzel9nZXRfd29sIC0gR2V0IFdha2Utb24tTEFOIHNldHRpbmdzIGZvciBhIHNwZWNpZmllZCBwb3J0LlxuICAqIEBkczogVGhlIGRzYV9zd2l0Y2ggc3RydWN0dXJlLlxuQEAgLTM4OTcsMzQgJiM0MzszNTQ3LDYgQEAgaW50IGtzel9wb3J0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qKlxuLSAqIGtzel9pc19wb3J0X21hY19nbG9iYWxfdXNhYmxlIC0gQ2hlY2sgaWYgdGhlIE1BQyBhZGRyZXNzIG9uIGEgZ2l2ZW4gcG9ydFxuLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcy5cbi0gKiBAZHM6IFBvaW50ZXIgdG8gdGhlIERTQSBzd2l0Y2ggc3RydWN0dXJlLlxuLSAqIEBwb3J0OiBUaGUgcG9ydCBudW1iZXIgb24gd2hpY2ggdGhlIE1BQyBhZGRyZXNzIGlzIHRvIGJlIGNoZWNrZWQuXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGV4YW1pbmVzIHRoZSBNQUMgYWRkcmVzcyBzZXQgb24gdGhlIHNwZWNpZmllZCBwb3J0IGFuZFxuLSAqIGRldGVybWluZXMgaWYgaXQgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcyBmb3IgdGhlIHN3aXRjaC5cbi0gKlxuLSAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcG9ydCYjMzk7cyBNQUMgYWRkcmVzcyBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzLCBmYWxzZVxuLSAqIG90aGVyd2lzZS5cbi0gKi9cbi1ib29sIGtzel9pc19wb3J0X21hY19nbG9iYWxfdXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4te1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKnVzZXIgPSBkc2FfdG9fcG9ydChkcywgcG9ydCktXHUwMDNldXNlcjtcbi1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIgPSB1c2VyLVx1MDAzZWRldl9hZGRyO1xuLVx0c3RydWN0IGtzel9zd2l0Y2hfbWFjYWRkciAqc3dpdGNoX21hY2FkZHI7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbi1cbi1cdEFTU0VSVF9SVE5MKCk7XG4tXG4tXHRzd2l0Y2hfbWFjYWRkciA9IGRldi1cdTAwM2Vzd2l0Y2hfbWFjYWRkcjtcbi1cdGlmIChzd2l0Y2hfbWFjYWRkciBcdTAwMjZcdTAwMjYgIWV0aGVyX2FkZHJfZXF1YWwoc3dpdGNoX21hY2FkZHItXHUwMDNlYWRkciwgYWRkcikpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbiAvKipcbiAgKiBrc3pfc3dpdGNoX21hY2FkZHJfZ2V0IC0gUHJvZ3JhbSB0aGUgc3dpdGNoJiMzOTtzIE1BQyBhZGRyZXNzIHJlZ2lzdGVyLlxuICAqIEBkczogRFNBIHN3aXRjaCBpbnN0YW5jZS5cbkBAIC00MTMyLDggJiM0MzszNzU0LDggQEAgc3RhdGljIHZvaWQga3N6X3BhcnNlX3JnbWlpX2RlbGF5KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0X251bSxcbiAgKiBSZXR1cm5zOiBJZiBmb3VuZCwgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgdmFsdWUgZm9yIHRoYXQgZHJpdmUgc3RyZW5ndGhcbiAgKiBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCAtRUlOVkFMIGlzIHJldHVybmVkIGluZGljYXRpbmcgYW4gaW52YWxpZCB2YWx1ZS5cbiAgKi9cbi1zdGF0aWMgaW50IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXG4tXHRcdFx0XHQgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApXG4mIzQzO2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuJiM0MztcdFx0XHQgICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKVxuIHtcbiBcdGludCBpO1xuIFxuQEAgLTQxNTYsOSAmIzQzOzM3NzgsOSBAQCBzdGF0aWMgaW50IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXG4gICogaXMgZGV0ZWN0ZWQuIEl0IGxpc3RzIG91dCBhbGwgdGhlIHN1cHBvcnRlZCBkcml2ZSBzdHJlbmd0aCB2YWx1ZXMgZm9yXG4gICogcmVmZXJlbmNlIGluIHRoZSBlcnJvciBtZXNzYWdlLlxuICAqL1xuLXN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcbi1cdFx0XHRcdCAgICAgc2l6ZV90IGFycmF5X3NpemUsIGludCBtaWNyb2FtcClcbiYjNDM7dm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXG4mIzQzO1x0XHRcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApXG4ge1xuIFx0Y2hhciBzdXBwb3J0ZWRfdmFsdWVzWzEwMF07XG4gXHRzaXplX3QgcmVtYWluaW5nX3NpemU7XG5AQCAtNDE4NSw4ICYjNDM7MzgwNyw4IEBAIHN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIH1cbiBcbiAvKipcbi0gKiBrc3o5NDc3X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGZvciBzcGVjaWZpYyBLU1o5NDc3XG4tICpcdFx0XHRcdCAgICBjaGlwIHZhcmlhbnRzLlxuJiM0MzsgKiBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggZm9yIHNwZWNpZmljIEtTWjk0NzdcbiYjNDM7ICpcdFx0XHRcdGFuZCB0aGUgS1NaODd4eCBjaGlwIHZhcmlhbnRzLlxuICAqIEBkZXY6ICAgICAgIGtzeiBkZXZpY2VcbiAgKiBAcHJvcHM6ICAgICBBcnJheSBvZiBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIHRvIGJlIGFwcGxpZWRcbiAgKiBAbnVtX3Byb3BzOiBOdW1iZXIgb2YgcHJvcGVydGllcyBpbiB0aGUgYXJyYXlcbkBAIC00MTk3LDkgJiM0MzszODE5LDkgQEAgc3RhdGljIHZvaWQga3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzc2Z1bCBjb25maWd1cmF0aW9uLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IGtzejk0NzdfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4tXHRcdFx0XHRcdGludCBudW1fcHJvcHMpXG4mIzQzO2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wICpwcm9wcyxcbiYjNDM7XHRcdFx0ICAgICBpbnQgbnVtX3Byb3BzKVxuIHtcbiBcdHNpemVfdCBhcnJheV9zaXplID0gQVJSQVlfU0laRShrc3o5NDc3X2RyaXZlX3N0cmVuZ3Rocyk7XG4gXHRpbnQgaSwgcmV0LCByZWc7XG5AQCAtNDIzNiwxMzAgJiM0MzszODU4LDYgQEAgc3RhdGljIGludCBrc3o5NDc3X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCByZWcsIG1hc2ssIHZhbCk7XG4gfVxuIFxuLS8qKlxuLSAqIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbiBmb3Jcbi0gKlx0XHRcdFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxuLSAqIEBkZXY6ICAgICAgIGtzeiBkZXZpY2Vcbi0gKiBAcHJvcHM6ICAgICBBcnJheSBvZiBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIHRvIGJlIHNldFxuLSAqIEBudW1fcHJvcHM6IE51bWJlciBvZiBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheVxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggc2V0dGluZ3MgdG8gS1NaODhYMyBjaGlwXG4tICogdmFyaWFudHMgKEtTWjg4NzMsIEtTWjg4NjMpLlxuLSAqIEl0IGVuc3VyZXMgdGhlIGNvbmZpZ3VyYXRpb25zIGFsaWduIHdpdGggd2hhdCB0aGUgY2hpcCB2YXJpYW50IHN1cHBvcnRzIGFuZFxuLSAqIHdhcm5zIG9yIGVycm9ycyBvdXQgb24gdW5zdXBwb3J0ZWQgc2V0dGluZ3MuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2Vcbi0gKi9cbi1zdGF0aWMgaW50IGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4tXHRcdFx0XHRcdGludCBudW1fcHJvcHMpXG4te1xuLVx0c2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzKTtcbi1cdGludCBtaWNyb2FtcDtcbi1cdGludCBpLCByZXQ7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcHJvcHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChwcm9wc1tpXS52YWx1ZSA9PSAtMSB8fCBpID09IEtTWl9EUklWRVJfU1RSRU5HVEhfSU8pXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGRldl93YXJuKGRldi1cdTAwM2VkZXYsIFwmIzM0OyVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcXG5cJiMzNDssXG4tXHRcdFx0IHByb3BzW2ldLm5hbWUpO1xuLVx0fVxuLVxuLVx0bWljcm9hbXAgPSBwcm9wc1tLU1pfRFJJVkVSX1NUUkVOR1RIX0lPXS52YWx1ZTtcbi1cdHJldCA9IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoa3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsIGFycmF5X3NpemUsXG4tXHRcdFx0XHRcdG1pY3JvYW1wKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0a3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKGRldiwga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsXG4tXHRcdFx0XHRcdCBhcnJheV9zaXplLCBtaWNyb2FtcCk7XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4tXG4tXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCBLU1o4ODczX1JFR19HTE9CQUxfQ1RSTF8xMixcbi1cdFx0XHRLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIHJldCk7XG4tfVxuLVxuLS8qKlxuLSAqIGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aCgpIC0gRXh0cmFjdCBhbmQgYXBwbHkgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbnNcbi0gKlx0XHRcdFx0ZnJvbSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLlxuLSAqIEBkZXY6XHRrc3ogZGV2aWNlXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZVxuLSAqIGRldmljZSB0cmVlLCB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGNoaXAgdmFyaWFudHMsIGFuZCBzZXRzXG4tICogdGhlbSBhY2NvcmRpbmdseS4gQW4gZXJyb3Igc2hvdWxkIGJlIGNyaXRpY2FsIGhlcmUsIGFzIHRoZSBkcml2ZSBzdHJlbmd0aFxuLSAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS5cbi0gKlxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZVxuLSAqL1xuLWludCBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi17XG4tXHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIG9mX3Byb3BzW10gPSB7XG4tXHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0hJXSA9IHtcbi1cdFx0XHQubmFtZSA9IFwmIzM0O21pY3JvY2hpcCxoaS1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwmIzM0Oyxcbi1cdFx0XHQub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcbi1cdFx0XHQudmFsdWUgPSAtMSxcbi1cdFx0fSxcbi1cdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfTE9dID0ge1xuLVx0XHRcdC5uYW1lID0gXCYjMzQ7bWljcm9jaGlwLGxvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCYjMzQ7LFxuLVx0XHRcdC5vZmZzZXQgPSBTV19MT19TUEVFRF9EUklWRV9TVFJFTkdUSF9TLFxuLVx0XHRcdC52YWx1ZSA9IC0xLFxuLVx0XHR9LFxuLVx0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10gPSB7XG4tXHRcdFx0Lm5hbWUgPSBcJiMzNDttaWNyb2NoaXAsaW8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcJiMzNDssXG4tXHRcdFx0Lm9mZnNldCA9IDAsIC8qIGRvbiYjMzk7dCBjYXJlICovXG4tXHRcdFx0LnZhbHVlID0gLTEsXG4tXHRcdH0sXG4tXHR9O1xuLVx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZTtcbi1cdGJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlO1xuLVx0aW50IGksIHJldDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgb2ZfcHJvcHNbaV0ubmFtZSxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2b2ZfcHJvcHNbaV0udmFsdWUpO1xuLVx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTClcbi1cdFx0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhZCAlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdCBvZl9wcm9wc1tpXS5uYW1lKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aGF2ZV9hbnlfcHJvcCA9IHRydWU7XG4tXHR9XG4tXG4tXHRpZiAoIWhhdmVfYW55X3Byb3ApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0c3dpdGNoIChkZXYtXHUwMDNlY2hpcF9pZCkge1xuLVx0Y2FzZSBLU1o4OFgzX0NISVBfSUQ6XG4tXHRcdHJldHVybiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKGRldiwgb2ZfcHJvcHMsXG4tXHRcdFx0XHRcdFx0ICAgIEFSUkFZX1NJWkUob2ZfcHJvcHMpKTtcbi1cdGNhc2UgS1NaODc5NV9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4Nzk0X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk0NzdfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o5NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk4OTNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTg5Nl9DSElQX0lEOlxuLVx0Y2FzZSBLU1o5ODk3X0NISVBfSUQ6XG4tXHRjYXNlIExBTjk2NDZfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIGtzejk0NzdfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcyxcbi1cdFx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShvZl9wcm9wcykpO1xuLVx0ZGVmYXVsdDpcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0aWYgKG9mX3Byb3BzW2ldLnZhbHVlID09IC0xKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0ZGV2X3dhcm4oZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgdmFyaWFudFxcblwmIzM0Oyxcbi1cdFx0XHRcdCBvZl9wcm9wc1tpXS5uYW1lKTtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbnQga3N6ODQ2M19jb25maWd1cmVfc3RyYXBzX3NwaShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBwaW5jdHJsICpwaW5jdHJsO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbmluZGV4IGI0YTU2NzNiYTM2NWNiLi5hY2FmNzBlNmYzOTNjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kYXRhL21pY3JvY2hpcC1rc3ouaFx1MDAzZVxuIFxuQEAgLTQwLDYgJiM0Mzs0MSw0NSBAQCBzdHJ1Y3Qgdmxhbl90YWJsZSB7XG4gXHR1MzIgdGFibGVbM107XG4gfTtcbiBcbiYjNDM7c3RydWN0IGtzel9zdGF0c19yYXcge1xuJiM0MztcdHU2NCByeF9oaTtcbiYjNDM7XHR1NjQgcnhfdW5kZXJzaXplO1xuJiM0MztcdHU2NCByeF9mcmFnbWVudHM7XG4mIzQzO1x0dTY0IHJ4X292ZXJzaXplO1xuJiM0MztcdHU2NCByeF9qYWJiZXJzO1xuJiM0MztcdHU2NCByeF9zeW1ib2xfZXJyO1xuJiM0MztcdHU2NCByeF9jcmNfZXJyO1xuJiM0MztcdHU2NCByeF9hbGlnbl9lcnI7XG4mIzQzO1x0dTY0IHJ4X21hY19jdHJsO1xuJiM0MztcdHU2NCByeF9wYXVzZTtcbiYjNDM7XHR1NjQgcnhfYmNhc3Q7XG4mIzQzO1x0dTY0IHJ4X21jYXN0O1xuJiM0MztcdHU2NCByeF91Y2FzdDtcbiYjNDM7XHR1NjQgcnhfNjRfb3JfbGVzcztcbiYjNDM7XHR1NjQgcnhfNjVfMTI3O1xuJiM0MztcdHU2NCByeF8xMjhfMjU1O1xuJiM0MztcdHU2NCByeF8yNTZfNTExO1xuJiM0MztcdHU2NCByeF81MTJfMTAyMztcbiYjNDM7XHR1NjQgcnhfMTAyNF8xNTIyO1xuJiM0MztcdHU2NCByeF8xNTIzXzIwMDA7XG4mIzQzO1x0dTY0IHJ4XzIwMDE7XG4mIzQzO1x0dTY0IHR4X2hpO1xuJiM0MztcdHU2NCB0eF9sYXRlX2NvbDtcbiYjNDM7XHR1NjQgdHhfcGF1c2U7XG4mIzQzO1x0dTY0IHR4X2JjYXN0O1xuJiM0MztcdHU2NCB0eF9tY2FzdDtcbiYjNDM7XHR1NjQgdHhfdWNhc3Q7XG4mIzQzO1x0dTY0IHR4X2RlZmVycmVkO1xuJiM0MztcdHU2NCB0eF90b3RhbF9jb2w7XG4mIzQzO1x0dTY0IHR4X2V4Y19jb2w7XG4mIzQzO1x0dTY0IHR4X3NpbmdsZV9jb2w7XG4mIzQzO1x0dTY0IHR4X211bHRfY29sO1xuJiM0MztcdHU2NCByeF90b3RhbDtcbiYjNDM7XHR1NjQgdHhfdG90YWw7XG4mIzQzO1x0dTY0IHJ4X2Rpc2NhcmRzO1xuJiM0MztcdHU2NCB0eF9kaXNjYXJkcztcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGtzel9wb3J0X21pYiB7XG4gXHRzdHJ1Y3QgbXV0ZXggY250X211dGV4O1x0XHQvKiBzdHJ1Y3R1cmUgYWNjZXNzICovXG4gXHR1OCBjbnRfcHRyO1xuQEAgLTM5MywxMiAmIzQzOzQzMyw4IEBAIGludCBrc3pfc3dpdGNoX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4gXG4gdm9pZCBrc3pfaW5pdF9taWJfdGltZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG4tYm9vbCBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KTtcbiB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcbi12b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4gdm9pZCBrc3pfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKTtcbi1ib29sIGtzel9nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4tcGh5X2ludGVyZmFjZV90IGtzel9nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBnYml0KTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdO1xuIGludCBrc3pfc3dpdGNoX21hY2FkZHJfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbkBAIC00NDMsMTEgJiM0Mzs0NzksMTUgQEAgdm9pZCBrc3pfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSxcbiBcdFx0XHQgICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7XG4gXG4taW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpO1xuLVxuIGludCBrc3pfc2V0X21hY19lZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpO1xuIFxuJiM0MztpbnQga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwLFxuJiM0MztcdFx0XHQgIGludCBiYW5kKTtcbiYjNDM7aW50IGtzel9zZXR1cF90Y19jYnMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdCAgICAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpO1xuJiM0MztpbnQga3N6X3RjX2V0c192YWxpZGF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApO1xuIGludCBrc3pfc2V0dXBfdGMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0IGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLCB2b2lkICp0eXBlX2RhdGEpO1xuIFxuQEAgLTQ3MSw4ICYjNDM7NTExLDM3IEBAIGludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcCk7XG4gaW50IGtzel9naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6X2lycV9mcmVlKHN0cnVjdCBrc3pfaXJxICpraXJxKTtcbi1pbnQga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuLWludCBrc3o5NDc3X3NldF9kZWZhdWx0X3ByaW9fcXVldWVfbWFwcGluZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIHtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0MztcdGludCBvZmZzZXQ7XG4mIzQzO1x0aW50IHZhbHVlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSBrc3pfZHJpdmVyX3N0cmVuZ3RoX3R5cGUge1xuJiM0MztcdEtTWl9EUklWRVJfU1RSRU5HVEhfSEksXG4mIzQzO1x0S1NaX0RSSVZFUl9TVFJFTkdUSF9MTyxcbiYjNDM7XHRLU1pfRFJJVkVSX1NUUkVOR1RIX0lPLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggLSBkcml2ZSBzdHJlbmd0aCBtYXBwaW5nXG4mIzQzOyAqIEByZWdfdmFsOlx0cmVnaXN0ZXIgdmFsdWVcbiYjNDM7ICogQG1pY3JvYW1wOlx0bWljcm9hbXAgdmFsdWVcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgge1xuJiM0MztcdHUzMiByZWdfdmFsO1xuJiM0MztcdHUzMiBtaWNyb2FtcDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQga3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuJiM0MztcdFx0XHQgICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKTtcbiYjNDM7aW50IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXG4mIzQzO1x0XHRcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApO1xuJiM0MztpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4mIzQzO1x0XHRcdCAgICAgaW50IG51bV9wcm9wcyk7XG4gXG4gLyogQ29tbW9uIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMgKi9cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWdtYXAgKmtzel9yZWdtYXBfOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5pbmRleCA4ZWI1MzM3YjBjMTAyZS4uODZjZTNhODY3MDVmOTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5AQCAtNzg3LDEwICYjNDM7Nzg3LDYgQEAgc3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdC8qIHNldCBicm9hZGNhc3Qgc3Rvcm0gcHJvdGVjdGlvbiAxMCUgcmF0ZSAqL1xuIFx0c3Rvcm1fbWFzayA9IEJST0FEQ0FTVF9TVE9STV9SQVRFO1xuIFx0c3Rvcm1fcmF0ZSA9IChCUk9BRENBU1RfU1RPUk1fVkFMVUUgKiBCUk9BRENBU1RfU1RPUk1fUFJPVF9SQVRFKSAvIDEwMDtcbkBAIC05ODMsNyAmIzQzOzk3OSw3IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBsYW45Mzd4X3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3N0YXRzNjRcdFx0PSBrc3pfZ2V0X3N0YXRzNjQsXG4gXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IGtzel9nZXRfcGF1c2Vfc3RhdHMsXG4gXHQucG9ydF9jaGFuZ2VfbXR1XHQ9IGxhbjkzN3hfY2hhbmdlX210dSxcbi1cdC5wb3J0X21heF9tdHVcdFx0PSBrc3pfbWF4X210dSxcbiYjNDM7XHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6OTQ3N19tYXhfbXR1LFxuIFx0LnN1c3BlbmRcdFx0PSBrc3pfc3VzcGVuZCxcbiBcdC5yZXN1bWVcdFx0XHQ9IGtzel9yZXN1bWUsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBrc3pfZ2V0X3RzX2luZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBNaWNyb2NoaXAgS1NaIERTQSBkcml2ZXIuIEl0IG1vdmVzIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb25zIChsaWtlIE1UVSBjb25maWd1cmF0aW9uLCBUQyBzZXR1cCwgTUlCIHN0YXRzIHJlYWRpbmcsIGFuZCBkcml2ZSBzdHJlbmd0aCBwYXJzaW5nKSBmcm9tIHRoZSBjb21tb24gYGtzel9jb21tb24uY2AgZmlsZSB0byB0aGVpciByZXNwZWN0aXZlIGNoaXAtc3BlY2lmaWMgZmlsZXMgKGBrc3o4LmNgIGFuZCBga3N6OTQ3Ny5jYCkuIEl0IGFsc28gcmVtb3ZlcyBhIG5vLW9wIGNhbGwgdG8gYGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aGAgaW4gYGxhbjkzN3hfbWFpbi5jYCB3aGljaCBvbmx5IHByaW50ZWQgd2FybmluZ3MgZm9yIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMuIE5vIG5ldyBmdW5jdGlvbmFsIGxvZ2ljIG9yIHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDZlZGJiZDhmYWI5MTA1YjFhYmEwZjZmOTQxN2Y1NDc5NDc2YTc5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTM6NTY6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jCmluZGV4IDU4NjkxNjU3MGE4NDFiLi5jNGM3NjkwMjhhMjBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKQEAgLTM2LDYgJiM0MzszNiw1MiBAQAogI2luY2x1ZGUgJiMzNDtrc3o4X3JlZy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3N6OC5oJiMzNDsKIAomIzQzOy8qIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaODg2MywgS1NaODg3MywgLi4KJiM0MzsgKgkJCSAgICAgdmFyaWFudHMuCiYjNDM7ICogVGhpcyB2YWx1ZXMgYXJlIGRvY3VtZW50ZWQgaW4gS1NaODg3MyBhbmQgS1NaODg2MyBkYXRhc2hlZXRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7CiYjNDM7CXsgMCwgIDgwMDAgfSwKJiM0MzsJeyBLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIDE2MDAwIH0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgewomIzQzOwl1NjQgcng7CiYjNDM7CXU2NCByeF9oaTsKJiM0MzsJdTY0IHJ4X3VuZGVyc2l6ZTsKJiM0MzsJdTY0IHJ4X2ZyYWdtZW50czsKJiM0MzsJdTY0IHJ4X292ZXJzaXplOwomIzQzOwl1NjQgcnhfamFiYmVyczsKJiM0MzsJdTY0IHJ4X3N5bWJvbF9lcnI7CiYjNDM7CXU2NCByeF9jcmNfZXJyOwomIzQzOwl1NjQgcnhfYWxpZ25fZXJyOwomIzQzOwl1NjQgcnhfbWFjX2N0cmw7CiYjNDM7CXU2NCByeF9wYXVzZTsKJiM0MzsJdTY0IHJ4X2JjYXN0OwomIzQzOwl1NjQgcnhfbWNhc3Q7CiYjNDM7CXU2NCByeF91Y2FzdDsKJiM0MzsJdTY0IHJ4XzY0X29yX2xlc3M7CiYjNDM7CXU2NCByeF82NV8xMjc7CiYjNDM7CXU2NCByeF8xMjhfMjU1OwomIzQzOwl1NjQgcnhfMjU2XzUxMTsKJiM0MzsJdTY0IHJ4XzUxMl8xMDIzOwomIzQzOwl1NjQgcnhfMTAyNF8xNTIyOwomIzQzOwl1NjQgdHg7CiYjNDM7CXU2NCB0eF9oaTsKJiM0MzsJdTY0IHR4X2xhdGVfY29sOwomIzQzOwl1NjQgdHhfcGF1c2U7CiYjNDM7CXU2NCB0eF9iY2FzdDsKJiM0MzsJdTY0IHR4X21jYXN0OwomIzQzOwl1NjQgdHhfdWNhc3Q7CiYjNDM7CXU2NCB0eF9kZWZlcnJlZDsKJiM0MzsJdTY0IHR4X3RvdGFsX2NvbDsKJiM0MzsJdTY0IHR4X2V4Y19jb2w7CiYjNDM7CXU2NCB0eF9zaW5nbGVfY29sOwomIzQzOwl1NjQgdHhfbXVsdF9jb2w7CiYjNDM7CXU2NCByeF9kaXNjYXJkczsKJiM0MzsJdTY0IHR4X2Rpc2NhcmRzOwomIzQzO307CiYjNDM7CiBzdGF0aWMgdm9pZCBrc3pfY2ZnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1OCBiaXRzLCBib29sIHNldCkKIHsKIAlrc3pfcm13OChkZXYsIGFkZHIsIGJpdHMsIHNldCA/IGJpdHMgOiAwKTsKQEAgLTE1OCwxMCAmIzQzOzIwNCwxNyBAQCBzdGF0aWMgaW50IGtzejhfcmVzZXRfc3dpdGNoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQga3N6ODg2M19jaGFuZ2VfbXR1KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBmcmFtZV9zaXplKQomIzQzO3N0YXRpYyBpbnQga3N6ODh4eF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBtdHUpCiB7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJaW50IGZyYW1lX3NpemU7CiAJdTggY3RybDIgPSAwOwogCiYjNDM7CWlmICghZHNhX2lzX2NwdV9wb3J0KGRldi0mZ3Q7ZHMsIHBvcnQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZyYW1lX3NpemUgPSBtdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTjsKJiM0MzsKIAlpZiAoZnJhbWVfc2l6ZSAmbHQ7PSBLU1o4X0xFR0FMX1BBQ0tFVF9TSVpFKQogCQljdHJsMiB8PSBLU1o4ODYzX0xFR0FMX1BBQ0tFVF9FTkFCTEU7CiAJZWxzZSBpZiAoZnJhbWVfc2l6ZSAmZ3Q7IEtTWjg4NjNfTk9STUFMX1BBQ0tFVF9TSVpFKQpAQCAtMTcxLDExICYjNDM7MjI0LDE4IEBAIHN0YXRpYyBpbnQga3N6ODg2M19jaGFuZ2VfbXR1KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBmcmFtZV9zaXplKQogCQkJS1NaODg2M19IVUdFX1BBQ0tFVF9FTkFCTEUsIGN0cmwyKTsKIH0KIAotc3RhdGljIGludCBrc3o4Nzk1X2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpCiYjNDM7c3RhdGljIGludCBrc3o4N3h4X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG10dSkKIHsKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwogCXU4IGN0cmwxID0gMCwgY3RybDIgPSAwOwomIzQzOwl1MTYgZnJhbWVfc2l6ZTsKIAlpbnQgcmV0OwogCiYjNDM7CWlmICghZHNhX2lzX2NwdV9wb3J0KGRldi0mZ3Q7ZHMsIHBvcnQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZyYW1lX3NpemUgPSBtdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTjsKJiM0MzsKIAlpZiAoZnJhbWVfc2l6ZSAmZ3Q7IEtTWjhfTEVHQUxfUEFDS0VUX1NJWkUpCiAJCWN0cmwyIHw9IFNXX0xFR0FMX1BBQ0tFVF9ESVNBQkxFOwogCWlmIChmcmFtZV9zaXplICZndDsgS1NaODg2M19OT1JNQUxfUEFDS0VUX1NJWkUpCkBAIC0xODgsMjkgJiM0MzsyNDgsMTQgQEAgc3RhdGljIGludCBrc3o4Nzk1X2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpCiAJcmV0dXJuIGtzel9ybXc4KGRldiwgUkVHX1NXX0NUUkxfMiwgU1dfTEVHQUxfUEFDS0VUX0RJU0FCTEUsIGN0cmwyKTsKIH0KIAotc3RhdGljIGludCBrc3o4X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG10dSkKJiM0MztzdGF0aWMgaW50IGtzejg3eHhfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQogewotCXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKLQl1MTYgZnJhbWVfc2l6ZTsKLQotCWlmICghZHNhX2lzX2NwdV9wb3J0KGRldi0mZ3Q7ZHMsIHBvcnQpKQotCQlyZXR1cm4gMDsKLQotCWZyYW1lX3NpemUgPSBtdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTjsKLQotCXN3aXRjaCAoZGV2LSZndDtjaGlwX2lkKSB7Ci0JY2FzZSBLU1o4Nzk1X0NISVBfSUQ6Ci0JY2FzZSBLU1o4Nzk0X0NISVBfSUQ6Ci0JY2FzZSBLU1o4NzY1X0NISVBfSUQ6Ci0JCXJldHVybiBrc3o4Nzk1X2NoYW5nZV9tdHUoZGV2LCBmcmFtZV9zaXplKTsKLQljYXNlIEtTWjg0NjNfQ0hJUF9JRDoKLQljYXNlIEtTWjg4WDNfQ0hJUF9JRDoKLQljYXNlIEtTWjg4NjRfQ0hJUF9JRDoKLQljYXNlIEtTWjg4OTVfQ0hJUF9JRDoKLQkJcmV0dXJuIGtzejg4NjNfY2hhbmdlX210dShkZXYsIGZyYW1lX3NpemUpOwotCX0KJiM0MzsJcmV0dXJuIEtTWjg3OTVfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjsKJiM0Mzt9CiAKLQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7c3RhdGljIGludCBrc3o4OHh4X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CXJldHVybiBLU1o4ODYzX0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47CiB9CiAKIHN0YXRpYyBpbnQga3N6OF9wb3J0X3F1ZXVlX3NwbGl0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBpbnQgcXVldWVzKQpAQCAtMTc0Niw2ICYjNDM7MTc5MSwxNTkgQEAgc3RhdGljIHZvaWQga3N6OF9wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCSAgICAgUE9SVF9NSVJST1JfU05JRkZFUiwgZmFsc2UpOwogfQogCiYjNDM7c3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKQomIzQzO3sKJiM0MzsJdTggcmVnOwomIzQzOwomIzQzOwlyZWcgPSAweEM4ICYjNDM7IHBvcnQgKiA0OwomIzQzOwlyZWcgJiM0Mzs9ICgoMyAtIHF1ZXVlKSAvIDIpICogMjsKJiM0MzsJcmVnJiM0MzsmIzQzOzsKJiM0MzsJcmVnIC09IChxdWV1ZSAmYW1wOyAxKTsKJiM0MzsJcmV0dXJuIHJlZzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICoga3N6ODh4M190Y19ldHNfYWRkIC0gQ29uZmlndXJlIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBwb3J0IG9uIEtTWjg4eDMgc3dpdGNoCiYjNDM7ICogQGRldjogUG9pbnRlciB0byB0aGUgS1NaIHN3aXRjaCBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGNvbmZpZ3VyZQomIzQzOyAqIEBwOiBQb2ludGVyIHRvIG9mZmxvYWQgcmVwbGFjZSBwYXJhbWV0ZXJzIGRlc2NyaWJpbmcgRVRTIGJhbmRzIGFuZCBtYXBwaW5nCiYjNDM7ICoKJiM0MzsgKiBUaGUgS1NaODh4MyBzdXBwb3J0cyB0d28gc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IGFuZAomIzQzOyAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKS4gQm90aCBtb2RlcyBoYXZlIGZpeGVkIGJlaGF2aW9yOgomIzQzOyAqICAgLSBObyBjb25maWd1cmFibGUgcXVldWUtdG8tcHJpb3JpdHkgbWFwcGluZwomIzQzOyAqICAgLSBObyB3ZWlnaHQgYWRqdXN0bWVudCBpbiBXRlEgbW9kZQomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBzd2l0Y2ggdG8gdXNlIHN0cmljdCBwcmlvcml0eSBtb2RlIGJ5CiYjNDM7ICogY2xlYXJpbmcgdGhlIFdGUSBlbmFibGUgYml0IGZvciBhbGwgcXVldWVzIGFzc29jaWF0ZWQgd2l0aCBFVFMgYmFuZHMuCiYjNDM7ICogSWYgc3RyaWN0IHByaW9yaXR5IGlzIG5vdCBleHBsaWNpdGx5IHJlcXVlc3RlZCwgdGhlIHN3aXRjaCB3aWxsIGRlZmF1bHQKJiM0MzsgKiB0byBXRlEgbW9kZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfYWRkKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAomIzQzOwkJCSAgICAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKQomIzQzO3sKJiM0MzsJaW50IHJldCwgYmFuZDsKJiM0MzsKJiM0MzsJLyogT25seSBzdHJpY3QgcHJpb3JpdHkgbW9kZSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KJiM0MzsJICogV0ZRIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkLgomIzQzOwkgKi8KJiM0MzsJZm9yIChiYW5kID0gMDsgYmFuZCAmbHQ7IHAtJmd0O2JhbmRzOyBiYW5kJiM0MzsmIzQzOykgewomIzQzOwkJaW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpOwomIzQzOwkJdTggcmVnOwomIzQzOwomIzQzOwkJLyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXMKJiM0MzsJCSAqIHBvcnQvcXVldWUKJiM0MzsJCSAqLwomIzQzOwkJcmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpOwomIzQzOwkJaWYgKGtzel9pc19rc3o4NDYzKGRldikpCiYjNDM7CQkJcmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTsKJiM0MzsKJiM0MzsJCS8qIENsZWFyIFdGUSBlbmFibGUgYml0IHRvIHNlbGVjdCBzdHJpY3QgcHJpb3JpdHkgc2NoZWR1bGluZyAqLwomIzQzOwkJcmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsIDApOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBrc3o4OHgzX3RjX2V0c19kZWwgLSBSZXNldCBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pIGNvbmZpZwomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2gKJiM0MzsgKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBLU1ogc3dpdGNoIGRldmljZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gcmVzZXQKJiM0MzsgKgomIzQzOyAqIFRoZSBLU1o4OHgzIHN1cHBvcnRzIG9ubHkgZml4ZWQgc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IG9yCiYjNDM7ICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLCB3aXRoIG5vIHJlY29uZmlndXJhdGlvbiBvZiB3ZWlnaHRzIG9yCiYjNDM7ICogcXVldWUgbWFwcGluZy4gVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIHBvcnTigJlzIHNjaGVkdWxpbmcgbW9kZSB0bwomIzQzOyAqIHRoZSBkZWZhdWx0LCB3aGljaCBpcyBXRlEsIGJ5IGVuYWJsaW5nIHRoZSBXRlEgYml0IGZvciBhbGwgcXVldWVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19kZWwoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlpbnQgcmV0LCBxdWV1ZTsKJiM0MzsKJiM0MzsJLyogSXRlcmF0ZSBvdmVyIGFsbCB0cmFuc21pdCBxdWV1ZXMgZm9yIHRoaXMgcG9ydCAqLwomIzQzOwlmb3IgKHF1ZXVlID0gMDsgcXVldWUgJmx0OyBkZXYtJmd0O2luZm8tJmd0O251bV90eF9xdWV1ZXM7IHF1ZXVlJiM0MzsmIzQzOykgewomIzQzOwkJdTggcmVnOwomIzQzOwomIzQzOwkJLyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXMKJiM0MzsJCSAqIHBvcnQvcXVldWUKJiM0MzsJCSAqLwomIzQzOwkJcmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpOwomIzQzOwkJaWYgKGtzel9pc19rc3o4NDYzKGRldikpCiYjNDM7CQkJcmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTsKJiM0MzsKJiM0MzsJCS8qIFNldCBXRlEgZW5hYmxlIGJpdCB0byByZXZlcnQgYmFjayB0byBkZWZhdWx0IHNjaGVkdWxpbmcKJiM0MzsJCSAqIG1vZGUKJiM0MzsJCSAqLwomIzQzOwkJcmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsCiYjNDM7CQkJICAgICAgIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejhfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJCSAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIShrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAocW9wdC0mZ3Q7cGFyZW50ICE9IFRDX0hfUk9PVCkgewomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtQYXJlbnQgc2hvdWxkIGJlIFwmIzM0O3Jvb3RcJiMzNDtcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKHFvcHQtJmd0O2NvbW1hbmQpIHsKJiM0MzsJY2FzZSBUQ19FVFNfUkVQTEFDRToKJiM0MzsJCXJldCA9IGtzel90Y19ldHNfdmFsaWRhdGUoZGV2LCBwb3J0LCAmYW1wO3FvcHQtJmd0O3JlcGxhY2VfcGFyYW1zKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldHVybiBrc3o4OHgzX3RjX2V0c19hZGQoZGV2LCBwb3J0LCAmYW1wO3FvcHQtJmd0O3JlcGxhY2VfcGFyYW1zKTsKJiM0MzsJY2FzZSBUQ19FVFNfREVTVFJPWToKJiM0MzsJCXJldHVybiBrc3o4OHgzX3RjX2V0c19kZWwoZGV2LCBwb3J0KTsKJiM0MzsJY2FzZSBUQ19FVFNfU1RBVFM6CiYjNDM7CWNhc2UgVENfRVRTX0dSQUZUOgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrc3o4N3h4X3NldHVwX3RjKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJICAgIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLCB2b2lkICp0eXBlX2RhdGEpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6CiYjNDM7CQlyZXR1cm4ga3N6X3NldHVwX3RjX2NicyhkcywgcG9ydCwgdHlwZV9kYXRhKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejhfc2V0dXBfdGMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX0NCUzoKJiM0MzsJCXJldHVybiBrc3pfc2V0dXBfdGNfY2JzKGRzLCBwb3J0LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX0VUUzoKJiM0MzsJCXJldHVybiBrc3o4X3RjX3NldHVwX3FkaXNjX2V0cyhkcywgcG9ydCwgdHlwZV9kYXRhKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGtzejg3OTVfY3B1X2ludGVyZmFjZV9zZWxlY3Qoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiB7CiAJc3RydWN0IGtzel9wb3J0ICpwID0gJmFtcDtkZXYtJmd0O3BvcnRzW3BvcnRdOwpAQCAtMjA1Myw2ICYjNDM7MjI1MSwxNzEgQEAgc3RhdGljIGludCBrc3o4X2VuYWJsZV9zdHBfYWRkcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQogCXJldHVybiBrc3o4X3dfc3RhX21hY190YWJsZShkZXYsIDAsICZhbXA7YWx1KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwc3RhdHM7CiYjNDM7CXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHM7CiYjNDM7CXN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyAqcmF3OwomIzQzOwlzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7CiYjNDM7CiYjNDM7CW1pYiA9ICZhbXA7ZGV2LSZndDtwb3J0c1twb3J0XS5taWI7CiYjNDM7CXN0YXRzID0gJmFtcDttaWItJmd0O3N0YXRzNjQ7CiYjNDM7CXBzdGF0cyA9ICZhbXA7bWliLSZndDtwYXVzZV9zdGF0czsKJiM0MzsJcmF3ID0gKHN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyAqKW1pYi0mZ3Q7Y291bnRlcnM7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO21pYi0mZ3Q7c3RhdHM2NF9sb2NrKTsKJiM0MzsKJiM0MzsJc3RhdHMtJmd0O3J4X3BhY2tldHMgPSByYXctJmd0O3J4X2JjYXN0ICYjNDM7IHJhdy0mZ3Q7cnhfbWNhc3QgJiM0MzsgcmF3LSZndDtyeF91Y2FzdCAmIzQzOwomIzQzOwkJcmF3LSZndDtyeF9wYXVzZTsKJiM0MzsJc3RhdHMtJmd0O3R4X3BhY2tldHMgPSByYXctJmd0O3R4X2JjYXN0ICYjNDM7IHJhdy0mZ3Q7dHhfbWNhc3QgJiM0MzsgcmF3LSZndDt0eF91Y2FzdCAmIzQzOwomIzQzOwkJcmF3LSZndDt0eF9wYXVzZTsKJiM0MzsKJiM0MzsJLyogSFcgY291bnRlcnMgYXJlIGNvdW50aW5nIGJ5dGVzICYjNDM7IEZDUyB3aGljaCBpcyBub3QgYWNjZXB0YWJsZQomIzQzOwkgKiBmb3IgcnRubF9saW5rX3N0YXRzNjQgaW50ZXJmYWNlCiYjNDM7CSAqLwomIzQzOwlzdGF0cy0mZ3Q7cnhfYnl0ZXMgPSByYXctJmd0O3J4ICYjNDM7IHJhdy0mZ3Q7cnhfaGkgLSBzdGF0cy0mZ3Q7cnhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOOwomIzQzOwlzdGF0cy0mZ3Q7dHhfYnl0ZXMgPSByYXctJmd0O3R4ICYjNDM7IHJhdy0mZ3Q7dHhfaGkgLSBzdGF0cy0mZ3Q7dHhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOOwomIzQzOwomIzQzOwlzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9ycyA9IHJhdy0mZ3Q7cnhfdW5kZXJzaXplICYjNDM7IHJhdy0mZ3Q7cnhfZnJhZ21lbnRzICYjNDM7CiYjNDM7CQlyYXctJmd0O3J4X292ZXJzaXplOwomIzQzOwomIzQzOwlzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyA9IHJhdy0mZ3Q7cnhfY3JjX2VycjsKJiM0MzsJc3RhdHMtJmd0O3J4X2ZyYW1lX2Vycm9ycyA9IHJhdy0mZ3Q7cnhfYWxpZ25fZXJyOwomIzQzOwlzdGF0cy0mZ3Q7cnhfZHJvcHBlZCA9IHJhdy0mZ3Q7cnhfZGlzY2FyZHM7CiYjNDM7CXN0YXRzLSZndDtyeF9lcnJvcnMgPSBzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9ycyAmIzQzOyBzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyAmIzQzOwomIzQzOwkJc3RhdHMtJmd0O3J4X2ZyYW1lX2Vycm9ycyAgJiM0Mzsgc3RhdHMtJmd0O3J4X2Ryb3BwZWQ7CiYjNDM7CiYjNDM7CXN0YXRzLSZndDt0eF93aW5kb3dfZXJyb3JzID0gcmF3LSZndDt0eF9sYXRlX2NvbDsKJiM0MzsJc3RhdHMtJmd0O3R4X2ZpZm9fZXJyb3JzID0gcmF3LSZndDt0eF9kaXNjYXJkczsKJiM0MzsJc3RhdHMtJmd0O3R4X2Fib3J0ZWRfZXJyb3JzID0gcmF3LSZndDt0eF9leGNfY29sOwomIzQzOwlzdGF0cy0mZ3Q7dHhfZXJyb3JzID0gc3RhdHMtJmd0O3R4X3dpbmRvd19lcnJvcnMgJiM0Mzsgc3RhdHMtJmd0O3R4X2ZpZm9fZXJyb3JzICYjNDM7CiYjNDM7CQlzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnM7CiYjNDM7CiYjNDM7CXN0YXRzLSZndDttdWx0aWNhc3QgPSByYXctJmd0O3J4X21jYXN0OwomIzQzOwlzdGF0cy0mZ3Q7Y29sbGlzaW9ucyA9IHJhdy0mZ3Q7dHhfdG90YWxfY29sOwomIzQzOwomIzQzOwlwc3RhdHMtJmd0O3R4X3BhdXNlX2ZyYW1lcyA9IHJhdy0mZ3Q7dHhfcGF1c2U7CiYjNDM7CXBzdGF0cy0mZ3Q7cnhfcGF1c2VfZnJhbWVzID0gcmF3LSZndDtyeF9wYXVzZTsKJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDttaWItJmd0O3N0YXRzNjRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbiBmb3IKJiM0MzsgKgkJCQkgICAgS1NaODg2MyBjb21wYXRpYmxlIGNoaXAgdmFyaWFudHMuCiYjNDM7ICogQGRldjogICAgICAga3N6IGRldmljZQomIzQzOyAqIEBwcm9wczogICAgIEFycmF5IG9mIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgdG8gYmUgc2V0CiYjNDM7ICogQG51bV9wcm9wczogTnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5CiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBzZXR0aW5ncyB0byBLU1o4OFgzIGNoaXAKJiM0MzsgKiB2YXJpYW50cyAoS1NaODg3MywgS1NaODg2MykuCiYjNDM7ICogSXQgZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbnMgYWxpZ24gd2l0aCB3aGF0IHRoZSBjaGlwIHZhcmlhbnQgc3VwcG9ydHMgYW5kCiYjNDM7ICogd2FybnMgb3IgZXJyb3JzIG91dCBvbiB1bnN1cHBvcnRlZCBzZXR0aW5ncy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkJc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsCiYjNDM7CQkJCQlpbnQgbnVtX3Byb3BzKQomIzQzO3sKJiM0MzsJc2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzKTsKJiM0MzsJaW50IG1pY3JvYW1wOwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3Byb3BzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHByb3BzW2ldLnZhbHVlID09IC0xIHx8IGkgPT0gS1NaX0RSSVZFUl9TVFJFTkdUSF9JTykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWRldl93YXJuKGRldi0mZ3Q7ZGV2LCAmIzM0OyVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcbiYjMzQ7LAomIzQzOwkJCSBwcm9wc1tpXS5uYW1lKTsKJiM0MzsJfQomIzQzOwomIzQzOwltaWNyb2FtcCA9IHByb3BzW0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dLnZhbHVlOwomIzQzOwlyZXQgPSBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzLCBhcnJheV9zaXplLAomIzQzOwkJCQkJbWljcm9hbXApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJa3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKGRldiwga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsCiYjNDM7CQkJCQkgYXJyYXlfc2l6ZSwgbWljcm9hbXApOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4ga3N6X3JtdzgoZGV2LCBLU1o4ODczX1JFR19HTE9CQUxfQ1RSTF8xMiwKJiM0MzsJCQlLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoKSAtIEV4dHJhY3QgYW5kIGFwcGx5IGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb25zCiYjNDM7ICoJCQkJIGZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy4KJiM0MzsgKiBAZGV2Oglrc3ogZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZQomIzQzOyAqIGRldmljZSB0cmVlLCB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGNoaXAgdmFyaWFudHMsIGFuZCBzZXRzCiYjNDM7ICogdGhlbSBhY2NvcmRpbmdseS4gQW4gZXJyb3Igc2hvdWxkIGJlIGNyaXRpY2FsIGhlcmUsIGFzIHRoZSBkcml2ZSBzdHJlbmd0aAomIzQzOyAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQga3N6OF9wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCBvZl9wcm9wc1tdID0gewomIzQzOwkJW0tTWl9EUklWRVJfU1RSRU5HVEhfSEldID0gewomIzQzOwkJCS5uYW1lID0gJiMzNDttaWNyb2NoaXAsaGktZHJpdmUtc3RyZW5ndGgtbWljcm9hbXAmIzM0OywKJiM0MzsJCQkub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUywKJiM0MzsJCQkudmFsdWUgPSAtMSwKJiM0MzsJCX0sCiYjNDM7CQlbS1NaX0RSSVZFUl9TVFJFTkdUSF9MT10gPSB7CiYjNDM7CQkJLm5hbWUgPSAmIzM0O21pY3JvY2hpcCxsby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcCYjMzQ7LAomIzQzOwkJCS5vZmZzZXQgPSBTV19MT19TUEVFRF9EUklWRV9TVFJFTkdUSF9TLAomIzQzOwkJCS52YWx1ZSA9IC0xLAomIzQzOwkJfSwKJiM0MzsJCVtLU1pfRFJJVkVSX1NUUkVOR1RIX0lPXSA9IHsKJiM0MzsJCQkubmFtZSA9ICYjMzQ7bWljcm9jaGlwLGlvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wJiMzNDssCiYjNDM7CQkJLm9mZnNldCA9IDAsIC8qIGRvbiYjMzk7dCBjYXJlICovCiYjNDM7CQkJLnZhbHVlID0gLTEsCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LSZndDtkZXYtJmd0O29mX25vZGU7CiYjNDM7CWJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlOwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgb2ZfcHJvcHNbaV0ubmFtZSwKJiM0MzsJCQkJCSAgICZhbXA7b2ZfcHJvcHNbaV0udmFsdWUpOwomIzQzOwkJaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRUlOVkFMKQomIzQzOwkJCWRldl93YXJuKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkICVzXG4mIzM0OywKJiM0MzsJCQkJIG9mX3Byb3BzW2ldLm5hbWUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWhhdmVfYW55X3Byb3AgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaGF2ZV9hbnlfcHJvcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKGRldi0mZ3Q7Y2hpcF9pZCkgewomIzQzOwljYXNlIEtTWjg4WDNfQ0hJUF9JRDoKJiM0MzsJCXJldHVybiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKGRldiwgb2ZfcHJvcHMsCiYjNDM7CQkJCQkJICAgIEFSUkFZX1NJWkUob2ZfcHJvcHMpKTsKJiM0MzsJY2FzZSBLU1o4Nzk1X0NISVBfSUQ6CiYjNDM7CWNhc2UgS1NaODc5NF9DSElQX0lEOgomIzQzOwljYXNlIEtTWjg3NjVfQ0hJUF9JRDoKJiM0MzsJCXJldHVybiBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcywKJiM0MzsJCQkJCQlBUlJBWV9TSVpFKG9mX3Byb3BzKSk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkvKiBLU1o4ODY0LCBLU1o4ODk1ICovCiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKG9mX3Byb3BzW2ldLnZhbHVlID09IC0xKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlkZXZfd2FybihkZXYtJmd0O2RldiwgJiMzNDslcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XG4mIzM0OywKJiM0MzsJCQkJIG9mX3Byb3BzW2ldLm5hbWUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwpAQCAtMjA3NSw3ICYjNDM7MjQzOCw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7CiYjNDM7CXJldCA9IGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNTUxLDggJiM0MzsyOTE0LDggQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHsKIAkucG9ydF9taXJyb3JfZGVsCT0ga3N6OF9wb3J0X21pcnJvcl9kZWwsCiAJLmdldF9zdGF0czY0CQk9IGtzel9nZXRfc3RhdHM2NCwKIAkuZ2V0X3BhdXNlX3N0YXRzCT0ga3N6X2dldF9wYXVzZV9zdGF0cywKLQkucG9ydF9jaGFuZ2VfbXR1CT0ga3N6OF9jaGFuZ2VfbXR1LAotCS5wb3J0X21heF9tdHUJCT0ga3N6X21heF9tdHUsCiYjNDM7CS5wb3J0X2NoYW5nZV9tdHUJPSBrc3o4OHh4X2NoYW5nZV9tdHUsCiYjNDM7CS5wb3J0X21heF9tdHUJCT0ga3N6ODh4eF9tYXhfbXR1LAogCS5zdXNwZW5kCQk9IGtzel9zdXNwZW5kLAogCS5yZXN1bWUJCQk9IGtzel9yZXN1bWUsCiAJLmdldF90c19pbmZvCQk9IGtzel9nZXRfdHNfaW5mbywKQEAgLTI1NjAsNyAmIzQzOzI5MjMsNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0gewogCS5wb3J0X2h3dHN0YW1wX3NldAk9IGtzel9od3RzdGFtcF9zZXQsCiAJLnBvcnRfdHh0c3RhbXAJCT0ga3N6X3BvcnRfdHh0c3RhbXAsCiAJLnBvcnRfcnh0c3RhbXAJCT0ga3N6X3BvcnRfcnh0c3RhbXAsCi0JLnBvcnRfc2V0dXBfdGMJCT0ga3N6X3NldHVwX3RjLAomIzQzOwkucG9ydF9zZXR1cF90YwkJPSBrc3o4X3NldHVwX3RjLAogCS5wb3J0X2dldF9kZWZhdWx0X3ByaW8JPSBrc3pfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLAogCS5wb3J0X3NldF9kZWZhdWx0X3ByaW8JPSBrc3pfcG9ydF9zZXRfZGVmYXVsdF9wcmlvLAogCS5wb3J0X2dldF9kc2NwX3ByaW8JPSBrc3pfcG9ydF9nZXRfZHNjcF9wcmlvLApAQCAtMjYwMSw4ICYjNDM7Mjk2NCw4IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4N3h4X3N3aXRjaF9vcHMgPSB7CiAJLnBvcnRfbWlycm9yX2RlbAk9IGtzejhfcG9ydF9taXJyb3JfZGVsLAogCS5nZXRfc3RhdHM2NAkJPSBrc3pfZ2V0X3N0YXRzNjQsCiAJLmdldF9wYXVzZV9zdGF0cwk9IGtzel9nZXRfcGF1c2Vfc3RhdHMsCi0JLnBvcnRfY2hhbmdlX210dQk9IGtzejhfY2hhbmdlX210dSwKLQkucG9ydF9tYXhfbXR1CQk9IGtzel9tYXhfbXR1LAomIzQzOwkucG9ydF9jaGFuZ2VfbXR1CT0ga3N6ODd4eF9jaGFuZ2VfbXR1LAomIzQzOwkucG9ydF9tYXhfbXR1CQk9IGtzejg3eHhfbWF4X210dSwKIAkuc3VzcGVuZAkJPSBrc3pfc3VzcGVuZCwKIAkucmVzdW1lCQkJPSBrc3pfcmVzdW1lLAogCS5nZXRfdHNfaW5mbwkJPSBrc3pfZ2V0X3RzX2luZm8sCkBAIC0yNjEwLDcgJiM0MzsyOTczLDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg3eHhfc3dpdGNoX29wcyA9IHsKIAkucG9ydF9od3RzdGFtcF9zZXQJPSBrc3pfaHd0c3RhbXBfc2V0LAogCS5wb3J0X3R4dHN0YW1wCQk9IGtzel9wb3J0X3R4dHN0YW1wLAogCS5wb3J0X3J4dHN0YW1wCQk9IGtzel9wb3J0X3J4dHN0YW1wLAotCS5wb3J0X3NldHVwX3RjCQk9IGtzel9zZXR1cF90YywKJiM0MzsJLnBvcnRfc2V0dXBfdGMJCT0ga3N6ODd4eF9zZXR1cF90YywKIAkucG9ydF9nZXRfZGVmYXVsdF9wcmlvCT0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbywKIAkucG9ydF9zZXRfZGVmYXVsdF9wcmlvCT0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbywKIAkucG9ydF9nZXRfZHNjcF9wcmlvCT0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbywKQEAgLTI2NTIsOCAmIzQzOzMwMTUsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODh4eF9zd2l0Y2hfb3BzID0gewogCS5wb3J0X21pcnJvcl9kZWwJPSBrc3o4X3BvcnRfbWlycm9yX2RlbCwKIAkuZ2V0X3N0YXRzNjQJCT0ga3N6X2dldF9zdGF0czY0LAogCS5nZXRfcGF1c2Vfc3RhdHMJPSBrc3pfZ2V0X3BhdXNlX3N0YXRzLAotCS5wb3J0X2NoYW5nZV9tdHUJPSBrc3o4X2NoYW5nZV9tdHUsCi0JLnBvcnRfbWF4X210dQkJPSBrc3pfbWF4X210dSwKJiM0MzsJLnBvcnRfY2hhbmdlX210dQk9IGtzejg4eHhfY2hhbmdlX210dSwKJiM0MzsJLnBvcnRfbWF4X210dQkJPSBrc3o4OHh4X21heF9tdHUsCiAJLmdldF93b2wJCT0ga3N6X2dldF93b2wsCiAJLnNldF93b2wJCT0ga3N6X3NldF93b2wsCiAJLnN1c3BlbmQJCT0ga3N6X3N1c3BlbmQsCkBAIC0yNjYzLDcgJiM0MzszMDI2LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg4eHhfc3dpdGNoX29wcyA9IHsKIAkucG9ydF9od3RzdGFtcF9zZXQJPSBrc3pfaHd0c3RhbXBfc2V0LAogCS5wb3J0X3R4dHN0YW1wCQk9IGtzel9wb3J0X3R4dHN0YW1wLAogCS5wb3J0X3J4dHN0YW1wCQk9IGtzel9wb3J0X3J4dHN0YW1wLAotCS5wb3J0X3NldHVwX3RjCQk9IGtzel9zZXR1cF90YywKJiM0MzsJLnBvcnRfc2V0dXBfdGMJCT0ga3N6OF9zZXR1cF90YywKIAkucG9ydF9nZXRfZGVmYXVsdF9wcmlvCT0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbywKIAkucG9ydF9zZXRfZGVmYXVsdF9wcmlvCT0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbywKIAkucG9ydF9nZXRfZHNjcF9wcmlvCT0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMKaW5kZXggZjNmMGM5OGRmYjVhN2YuLjNlZTk5NTU0NWM1Nzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pZl9oc3IuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2RzYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvaWVlZTgwMjFxLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3N3aXRjaGRldi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2tzejk0NzdfcmVnLmgmIzM0OwpAQCAtNjAsNiAmIzQzOzYxLDExIEBAIHN0YXRpYyBpbnQga3N6OTQ3N19jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBtdHUpCiAJCQkJICBSRUdfU1dfTVRVX01BU0ssIGZyYW1lX3NpemUpOwogfQogCiYjNDM7aW50IGtzejk0NzdfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJcmV0dXJuIEtTWjk0NzdfTUFYX0ZSQU1FX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBrc3o5NDc3X3dhaXRfdmxhbl9jdHJsX3JlYWR5KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IHZhbDsKQEAgLTQ3OCw4ICYjNDM7NDg0LDggQEAgc3RhdGljIGludCBrc3o5NDc3X2hhbGZfZHVwbGV4X21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsCiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsCi0JCQkgICB1NjQgdHhfbGF0ZV9jb2wpCiYjNDM7c3RhdGljIGludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAomIzQzOwkJCQkgIHU2NCB0eF9sYXRlX2NvbCkKIHsKIAl1OCBzdGF0dXM7CiAJaW50IHJldDsKQEAgLTQ5Nyw2ICYjNDM7NTAzLDI0IEBAIGludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBrc3o5NDc3X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X3N0YXRzX3JhdyAqcmF3OwomIzQzOwlzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWtzel9yX21pYl9zdGF0czY0KGRldiwgcG9ydCk7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O2luZm8tJmd0O3BoeV9lcnJhdGFfOTQ3NyAmYW1wOyZhbXA7ICFrc3pfaXNfc2dtaWlfcG9ydChkZXYsIHBvcnQpKSB7CiYjNDM7CQltaWIgPSAmYW1wO2Rldi0mZ3Q7cG9ydHNbcG9ydF0ubWliOwomIzQzOwkJcmF3ID0gKHN0cnVjdCBrc3pfc3RhdHNfcmF3ICopbWliLSZndDtjb3VudGVyczsKJiM0MzsKJiM0MzsJCXJldCA9IGtzejk0NzdfZXJyYXRhX21vbml0b3IoZGV2LCBwb3J0LCByYXctJmd0O3R4X2xhdGVfY29sKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gbW9uaXRvciB0cmFuc21pc3Npb24gaGFsdFxuJiMzNDspOwomIzQzOwl9CiYjNDM7fTsKJiM0MzsKIHZvaWQga3N6OTQ3N19wb3J0X2luaXRfY250KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQogewogCXN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYiA9ICZhbXA7ZGV2LSZndDtwb3J0c1twb3J0XS5taWI7CkBAIC0xMTc2LDYgJiM0MzsxMjAwLDU4IEBAIHZvaWQga3N6OTQ3N19wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCSAgICAgUE9SVF9NSVJST1JfU05JRkZFUiwgZmFsc2UpOwogfQogCiYjNDM7c3RhdGljIGJvb2wga3N6OTQ3N19nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtJmd0O2luZm8tJmd0O3htaWlfY3RybDE7CiYjNDM7CWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKJiM0MzsJYm9vbCBnYml0ID0gZmFsc2U7CiYjNDM7CXU4IGRhdGE4OwomIzQzOwlib29sIHZhbDsKJiM0MzsKJiM0MzsJa3N6X3ByZWFkOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sICZhbXA7ZGF0YTgpOwomIzQzOwomIzQzOwl2YWwgPSBGSUVMRF9HRVQoUF9HTUlJXzFHQklUX00sIGRhdGE4KTsKJiM0MzsKJiM0MzsJaWYgKHZhbCA9PSBiaXR2YWxbUF9HTUlJXzFHQklUXSkKJiM0MzsJCWdiaXQgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZ2JpdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF94bWlpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAomIzQzOwkJCQkJYm9vbCBnYml0KQomIzQzO3sKJiM0MzsJY29uc3QgdTggKmJpdHZhbCA9IGRldi0mZ3Q7aW5mby0mZ3Q7eG1paV9jdHJsMTsKJiM0MzsJY29uc3QgdTE2ICpyZWdzID0gZGV2LSZndDtpbmZvLSZndDtyZWdzOwomIzQzOwlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlOwomIzQzOwl1OCBkYXRhODsKJiM0MzsJdTggdmFsOwomIzQzOwomIzQzOwlrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgJmFtcDtkYXRhOCk7CiYjNDM7CiYjNDM7CXZhbCA9IEZJRUxEX0dFVChQX01JSV9TRUxfTSwgZGF0YTgpOwomIzQzOwomIzQzOwlpZiAodmFsID09IGJpdHZhbFtQX01JSV9TRUxdKSB7CiYjNDM7CQlpZiAoZ2JpdCkKJiM0MzsJCQlpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfR01JSTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJOwomIzQzOwl9IGVsc2UgaWYgKHZhbCA9PSBiaXR2YWxbUF9STUlJX1NFTF0pIHsKJiM0MzsJCWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOwomIzQzOwkJaWYgKGRhdGE4ICZhbXA7IFBfUkdNSUlfSURfRUdfRU5BQkxFKQomIzQzOwkJCWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEOwomIzQzOwkJaWYgKGRhdGE4ICZhbXA7IFBfUkdNSUlfSURfSUdfRU5BQkxFKSB7CiYjNDM7CQkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ7CiYjNDM7CQkJaWYgKGRhdGE4ICZhbXA7IFBfUkdNSUlfSURfRUdfRU5BQkxFKQomIzQzOwkJCQlpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGludGVyZmFjZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgcGh5X2ludGVyZmFjZV90IGtzejk0NzdfZ2V0X2ludGVyZmFjZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCkKIHsKIAlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlOwpAQCAtMTE4NCw5ICYjNDM7MTI2MCw5IEBAIHN0YXRpYyBwaHlfaW50ZXJmYWNlX3Qga3N6OTQ3N19nZXRfaW50ZXJmYWNlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQogCWlmIChkZXYtJmd0O2luZm8tJmd0O2ludGVybmFsX3BoeVtwb3J0XSkKIAkJcmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTsKIAotCWdiaXQgPSBrc3pfZ2V0X2diaXQoZGV2LCBwb3J0KTsKJiM0MzsJZ2JpdCA9IGtzejk0NzdfZ2V0X2diaXQoZGV2LCBwb3J0KTsKIAotCWludGVyZmFjZSA9IGtzel9nZXRfeG1paShkZXYsIHBvcnQsIGdiaXQpOwomIzQzOwlpbnRlcmZhY2UgPSBrc3o5NDc3X2dldF94bWlpKGRldiwgcG9ydCwgZ2JpdCk7CiAKIAlyZXR1cm4gaW50ZXJmYWNlOwogfQpAQCAtMTMzNSw2ICYjNDM7MTQxMSwyOCBAQCBzdGF0aWMgdm9pZCBrc3o5NDc3X3BvcnRfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgY3B1X3BvcnQpCiAJa3N6X3B3cml0ZTgoZGV2LCBwb3J0LCByZWdzW1JFR19QT1JUX1BNRV9DVFJMXSwgMCk7CiB9CiAKJiM0MztpbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwl1MzIgcXVldWVfbWFwID0gMDsKJiM0MzsJaW50IGlwbTsKJiM0MzsKJiM0MzsJZm9yIChpcG0gPSAwOyBpcG0gJmx0OyBkZXYtJmd0O2luZm8tJmd0O251bV9pcG1zOyBpcG0mIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgcXVldWU7CiYjNDM7CiYjNDM7CQkvKiBUcmFmZmljIFR5cGUgKFRUKSBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBJbnRlcm5hbCBQcmlvcml0eQomIzQzOwkJICogTWFwIChJUE0pIGluIHRoZSBzd2l0Y2guIFRyYWZmaWMgQ2xhc3MgKFRDKSBpcwomIzQzOwkJICogY29ycmVzcG9uZGluZyB0byB0aGUgcXVldWUgaW4gdGhlIHN3aXRjaC4KJiM0MzsJCSAqLwomIzQzOwkJcXVldWUgPSBpZWVlODAyMXFfdHRfdG9fdGMoaXBtLCBkZXYtJmd0O2luZm8tJmd0O251bV90eF9xdWV1ZXMpOwomIzQzOwkJaWYgKHF1ZXVlICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcXVldWU7CiYjNDM7CiYjNDM7CQlxdWV1ZV9tYXAgfD0gcXVldWUgJmx0OyZsdDsgKGlwbSAqIEtTWjk0NzdfUE9SVF9UQ19NQVBfUyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9wd3JpdGUzMihkZXYsIHBvcnQsIEtTWjk0NzdfUE9SVF9NUklfVENfTUFQX180LCBxdWV1ZV9tYXApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6OTQ3N19kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQogewogCXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKQEAgLTE1MTcsNiAmIzQzOzE2MTUsNTggQEAgaW50IGtzejk0NzdfZW5hYmxlX3N0cF9hZGRyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBrc3o5NDc3X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKCkgLSBFeHRyYWN0IGFuZCBhcHBseSBkcml2ZSBzdHJlbmd0aAomIzQzOyAqCQkJCSAgICBjb25maWd1cmF0aW9ucyBmcm9tIGRldmljZSB0cmVlIHByb3BlcnRpZXMuCiYjNDM7ICogQGRldjoJa3N6IGRldmljZQomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgZnJvbSB0aGUKJiM0MzsgKiBkZXZpY2UgdHJlZSwgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHN1cHBvcnRlZCBjaGlwIHZhcmlhbnRzLCBhbmQgc2V0cwomIzQzOyAqIHRoZW0gYWNjb3JkaW5nbHkuIEFuIGVycm9yIHNob3VsZCBiZSBjcml0aWNhbCBoZXJlLCBhcyB0aGUgZHJpdmUgc3RyZW5ndGgKJiM0MzsgKiBzZXR0aW5ncyBhcmUgY3J1Y2lhbCBmb3IgRU1JIGNvbXBsaWFuY2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGtzejk0NzdfcGFyc2VfZHJpdmVfc3RyZW5ndGgoc3RydWN0IGtzel9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHsKJiM0MzsJCVtLU1pfRFJJVkVSX1NUUkVOR1RIX0hJXSA9IHsKJiM0MzsJCQkubmFtZSA9ICYjMzQ7bWljcm9jaGlwLGhpLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wJiMzNDssCiYjNDM7CQkJLm9mZnNldCA9IFNXX0hJX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsCiYjNDM7CQkJLnZhbHVlID0gLTEsCiYjNDM7CQl9LAomIzQzOwkJW0tTWl9EUklWRVJfU1RSRU5HVEhfTE9dID0gewomIzQzOwkJCS5uYW1lID0gJiMzNDttaWNyb2NoaXAsbG8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXAmIzM0OywKJiM0MzsJCQkub2Zmc2V0ID0gU1dfTE9fU1BFRURfRFJJVkVfU1RSRU5HVEhfUywKJiM0MzsJCQkudmFsdWUgPSAtMSwKJiM0MzsJCX0sCiYjNDM7CQlbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10gPSB7CiYjNDM7CQkJLm5hbWUgPSAmIzM0O21pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcCYjMzQ7LAomIzQzOwkJCS5vZmZzZXQgPSAwLCAvKiBkb24mIzM5O3QgY2FyZSAqLwomIzQzOwkJCS52YWx1ZSA9IC0xLAomIzQzOwkJfSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0mZ3Q7ZGV2LSZndDtvZl9ub2RlOwomIzQzOwlib29sIGhhdmVfYW55X3Byb3AgPSBmYWxzZTsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIG9mX3Byb3BzW2ldLm5hbWUsCiYjNDM7CQkJCQkgICAmYW1wO29mX3Byb3BzW2ldLnZhbHVlKTsKJiM0MzsJCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVJTlZBTCkKJiM0MzsJCQlkZXZfd2FybihkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVhZCAlc1xuJiMzNDssCiYjNDM7CQkJCSBvZl9wcm9wc1tpXS5uYW1lKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQloYXZlX2FueV9wcm9wID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWhhdmVfYW55X3Byb3ApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLCBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7CiYjNDM7fQogc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CkBAIC0xNTM5LDcgJiM0MzsxNjg5LDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoZGV2KTsKJiM0MzsJcmV0ID0ga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIwNTIsNyAmIzQzOzIyMDIsNyBAQCBjb25zdCBzdHJ1Y3Qga3N6X2Rldl9vcHMga3N6OTQ3N19kZXZfb3BzID0gewogCS5jZmdfcG9ydF9tZW1iZXIgPSBrc3o5NDc3X2NmZ19wb3J0X21lbWJlciwKIAkucl9taWJfY250ID0ga3N6OTQ3N19yX21pYl9jbnQsCiAJLnJfbWliX3BrdCA9IGtzejk0Nzdfcl9taWJfcGt0LAotCS5yX21pYl9zdGF0NjQgPSBrc3pfcl9taWJfc3RhdHM2NCwKJiM0MzsJLnJfbWliX3N0YXQ2NCA9IGtzejk0Nzdfcl9taWJfc3RhdHM2NCwKIAkuZnJlZXplX21pYiA9IGtzejk0NzdfZnJlZXplX21pYiwKIAkucG9ydF9pbml0X2NudCA9IGtzejk0NzdfcG9ydF9pbml0X2NudCwKIAkucG1lX3dyaXRlOCA9IGtzel93cml0ZTgsCkBAIC0yMDk4LDcgJiM0MzsyMjQ4LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejk0Nzdfc3dpdGNoX29wcyA9IHsKIAkuZ2V0X3N0YXRzNjQJCT0ga3N6X2dldF9zdGF0czY0LAogCS5nZXRfcGF1c2Vfc3RhdHMJPSBrc3pfZ2V0X3BhdXNlX3N0YXRzLAogCS5wb3J0X2NoYW5nZV9tdHUJPSBrc3o5NDc3X2NoYW5nZV9tdHUsCi0JLnBvcnRfbWF4X210dQkJPSBrc3pfbWF4X210dSwKJiM0MzsJLnBvcnRfbWF4X210dQkJPSBrc3o5NDc3X21heF9tdHUsCiAJLmdldF93b2wJCT0ga3N6X2dldF93b2wsCiAJLnNldF93b2wJCT0ga3N6X3NldF93b2wsCiAJLnN1c3BlbmQJCT0ga3N6X3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5oCmluZGV4IDkyYTFkODg5MjI0ZDNlLi5hODRjMDAwMDAwZTY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmgKQEAgLTIxLDYgJiM0MzsyMSw3IEBAIHZvaWQga3N6OTQ3N19mcmVlemVfbWliKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGZyZWV6ZSk7CiB2b2lkIGtzejk0NzdfcG9ydF9pbml0X2NudChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7CiBpbnQga3N6OTQ3N19wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCQkJYm9vbCBmbGFnLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzO2ludCBrc3o5NDc3X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCk7CiBpbnQga3N6OTQ3N19wb3J0X3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCQkgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbiwKIAkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKQEAgLTMxLDggJiM0MzszMiw2IEBAIGludCBrc3o5NDc3X3BvcnRfbWlycm9yX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkJICAgIGJvb2wgaW5ncmVzcywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIHZvaWQga3N6OTQ3N19wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCSAgICAgc3RydWN0IGRzYV9tYWxsX21pcnJvcl90Y19lbnRyeSAqbWlycm9yKTsKLWludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAotCQkJICAgdTY0IHR4X2xhdGVfY29sKTsKIGludCBrc3o5NDc3X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCSAgICAgZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKTsKIGludCBrc3o5NDc3X2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKQEAgLTQ1LDYgJiM0Mzs0NCw3IEBAIGludCBrc3o5NDc3X21kYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfbWRiICptZGIsIHN0cnVjdCBkc2FfZGIgZGIpOwogaW50IGtzejk0NzdfZW5hYmxlX3N0cF9hZGRyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpOwogdm9pZCBrc3o5NDc3X3BvcnRfcXVldWVfc3BsaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpOwomIzQzO2ludCBrc3o5NDc3X3NldF9kZWZhdWx0X3ByaW9fcXVldWVfbWFwcGluZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7CiAKIGludCBrc3o5NDc3X3BvcnRfYWNsX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpOwogdm9pZCBrc3o5NDc3X3BvcnRfYWNsX2ZyZWUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYwppbmRleCBkMTcyNjc3OGJiNDg4ZS4uNjdhYjZkZGI5ZTUzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jCkBAIC0zNyw4MiAmIzQzOzM3LDYgQEAKIAogI2RlZmluZSBNSUJfQ09VTlRFUl9OVU0gMHgyMAogCi1zdHJ1Y3Qga3N6X3N0YXRzX3JhdyB7Ci0JdTY0IHJ4X2hpOwotCXU2NCByeF91bmRlcnNpemU7Ci0JdTY0IHJ4X2ZyYWdtZW50czsKLQl1NjQgcnhfb3ZlcnNpemU7Ci0JdTY0IHJ4X2phYmJlcnM7Ci0JdTY0IHJ4X3N5bWJvbF9lcnI7Ci0JdTY0IHJ4X2NyY19lcnI7Ci0JdTY0IHJ4X2FsaWduX2VycjsKLQl1NjQgcnhfbWFjX2N0cmw7Ci0JdTY0IHJ4X3BhdXNlOwotCXU2NCByeF9iY2FzdDsKLQl1NjQgcnhfbWNhc3Q7Ci0JdTY0IHJ4X3VjYXN0OwotCXU2NCByeF82NF9vcl9sZXNzOwotCXU2NCByeF82NV8xMjc7Ci0JdTY0IHJ4XzEyOF8yNTU7Ci0JdTY0IHJ4XzI1Nl81MTE7Ci0JdTY0IHJ4XzUxMl8xMDIzOwotCXU2NCByeF8xMDI0XzE1MjI7Ci0JdTY0IHJ4XzE1MjNfMjAwMDsKLQl1NjQgcnhfMjAwMTsKLQl1NjQgdHhfaGk7Ci0JdTY0IHR4X2xhdGVfY29sOwotCXU2NCB0eF9wYXVzZTsKLQl1NjQgdHhfYmNhc3Q7Ci0JdTY0IHR4X21jYXN0OwotCXU2NCB0eF91Y2FzdDsKLQl1NjQgdHhfZGVmZXJyZWQ7Ci0JdTY0IHR4X3RvdGFsX2NvbDsKLQl1NjQgdHhfZXhjX2NvbDsKLQl1NjQgdHhfc2luZ2xlX2NvbDsKLQl1NjQgdHhfbXVsdF9jb2w7Ci0JdTY0IHJ4X3RvdGFsOwotCXU2NCB0eF90b3RhbDsKLQl1NjQgcnhfZGlzY2FyZHM7Ci0JdTY0IHR4X2Rpc2NhcmRzOwotfTsKLQotc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3IHsKLQl1NjQgcng7Ci0JdTY0IHJ4X2hpOwotCXU2NCByeF91bmRlcnNpemU7Ci0JdTY0IHJ4X2ZyYWdtZW50czsKLQl1NjQgcnhfb3ZlcnNpemU7Ci0JdTY0IHJ4X2phYmJlcnM7Ci0JdTY0IHJ4X3N5bWJvbF9lcnI7Ci0JdTY0IHJ4X2NyY19lcnI7Ci0JdTY0IHJ4X2FsaWduX2VycjsKLQl1NjQgcnhfbWFjX2N0cmw7Ci0JdTY0IHJ4X3BhdXNlOwotCXU2NCByeF9iY2FzdDsKLQl1NjQgcnhfbWNhc3Q7Ci0JdTY0IHJ4X3VjYXN0OwotCXU2NCByeF82NF9vcl9sZXNzOwotCXU2NCByeF82NV8xMjc7Ci0JdTY0IHJ4XzEyOF8yNTU7Ci0JdTY0IHJ4XzI1Nl81MTE7Ci0JdTY0IHJ4XzUxMl8xMDIzOwotCXU2NCByeF8xMDI0XzE1MjI7Ci0JdTY0IHR4OwotCXU2NCB0eF9oaTsKLQl1NjQgdHhfbGF0ZV9jb2w7Ci0JdTY0IHR4X3BhdXNlOwotCXU2NCB0eF9iY2FzdDsKLQl1NjQgdHhfbWNhc3Q7Ci0JdTY0IHR4X3VjYXN0OwotCXU2NCB0eF9kZWZlcnJlZDsKLQl1NjQgdHhfdG90YWxfY29sOwotCXU2NCB0eF9leGNfY29sOwotCXU2NCB0eF9zaW5nbGVfY29sOwotCXU2NCB0eF9tdWx0X2NvbDsKLQl1NjQgcnhfZGlzY2FyZHM7Ci0JdTY0IHR4X2Rpc2NhcmRzOwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfbWliX25hbWVzIGtzejg4eHhfbWliX25hbWVzW10gPSB7CiAJeyAweDAwLCAmIzM0O3J4JiMzNDsgfSwKIAl7IDB4MDEsICYjMzQ7cnhfaGkmIzM0OyB9LApAQCAtMTg5LDI4ICYjNDM7MTEzLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfbWliX25hbWVzIGtzejk0NzdfbWliX25hbWVzW10gPSB7CiAJeyAweDgzLCAmIzM0O3R4X2Rpc2NhcmRzJiMzNDsgfSwKIH07CiAKLXN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50IG9mZnNldDsKLQlpbnQgdmFsdWU7Ci19OwotCi1lbnVtIGtzel9kcml2ZXJfc3RyZW5ndGhfdHlwZSB7Ci0JS1NaX0RSSVZFUl9TVFJFTkdUSF9ISSwKLQlLU1pfRFJJVkVSX1NUUkVOR1RIX0xPLAotCUtTWl9EUklWRVJfU1RSRU5HVEhfSU8sCi19OwotCi0vKioKLSAqIHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggLSBkcml2ZSBzdHJlbmd0aCBtYXBwaW5nCi0gKiBAcmVnX3ZhbDoJcmVnaXN0ZXIgdmFsdWUKLSAqIEBtaWNyb2FtcDoJbWljcm9hbXAgdmFsdWUKLSAqLwotc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCB7Ci0JdTMyIHJlZ192YWw7Ci0JdTMyIG1pY3JvYW1wOwotfTsKLQogLyoga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHMgLSBEcml2ZSBzdHJlbmd0aCBtYXBwaW5nIGZvciBLU1o5NDc3IHZhcmlhbnRzCiAgKgogICogVGhpcyB2YWx1ZXMgYXJlIG5vdCBkb2N1bWVudGVkIGluIEtTWjk0NzcgdmFyaWFudHMgYnV0IGNvbmZpcm1lZCBieQpAQCAtMjQ2LDE1ICYjNDM7MTQ4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHNbXSA9IHsKIAl7IFNXX0RSSVZFX1NUUkVOR1RIXzI4TUEsIDI4MDAwIH0sCiB9OwogCi0vKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyAtIERyaXZlIHN0cmVuZ3RoIG1hcHBpbmcgZm9yIEtTWjg4NjMsIEtTWjg4NzMsIC4uCi0gKgkJCSAgICAgdmFyaWFudHMuCi0gKiBUaGlzIHZhbHVlcyBhcmUgZG9jdW1lbnRlZCBpbiBLU1o4ODczIGFuZCBLU1o4ODYzIGRhdGFzaGVldHMuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7Ci0JeyAwLCAgODAwMCB9LAotCXsgS1NaODg3M19EUklWRV9TVFJFTkdUSF8xNk1BLCAxNjAwMCB9LAotfTsKLQogLyoqCiAgKiBrc3pfcGh5bGlua19tYWNfZGlzYWJsZV90eF9scGkoKSAtIENhbGxiYWNrIHRvIHNpZ25hbCBMUEkgc3VwcG9ydCAoRHVtbXkpCiAgKiBAY29uZmlnOiBwaHlsaW5rIGNvbmZpZyBzdHJ1Y3R1cmUKQEAgLTIwMTMsNyAmIzQzOzE5MDYsNiBAQCB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQogCXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHM7CiAJc3RydWN0IGtzel9zdGF0c19yYXcgKnJhdzsKIAlzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7Ci0JaW50IHJldDsKIAogCW1pYiA9ICZhbXA7ZGV2LSZndDtwb3J0c1twb3J0XS5taWI7CiAJc3RhdHMgPSAmYW1wO21pYi0mZ3Q7c3RhdHM2NDsKQEAgLTIwNTUsNjEgJiM0MzsxOTQ3LDYgQEAgdm9pZCBrc3pfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCkKIAlwc3RhdHMtJmd0O3J4X3BhdXNlX2ZyYW1lcyA9IHJhdy0mZ3Q7cnhfcGF1c2U7CiAKIAlzcGluX3VubG9jaygmYW1wO21pYi0mZ3Q7c3RhdHM2NF9sb2NrKTsKLQotCWlmIChkZXYtJmd0O2luZm8tJmd0O3BoeV9lcnJhdGFfOTQ3NyAmYW1wOyZhbXA7ICFrc3pfaXNfc2dtaWlfcG9ydChkZXYsIHBvcnQpKSB7Ci0JCXJldCA9IGtzejk0NzdfZXJyYXRhX21vbml0b3IoZGV2LCBwb3J0LCByYXctJmd0O3R4X2xhdGVfY29sKTsKLQkJaWYgKHJldCkKLQkJCWRldl9lcnIoZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIG1vbml0b3IgdHJhbnNtaXNzaW9uIGhhbHRcbiYjMzQ7KTsKLQl9Ci19Ci0KLXZvaWQga3N6ODh4eF9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQotewotCXN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwc3RhdHM7Ci0Jc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0czsKLQlzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKnJhdzsKLQlzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7Ci0KLQltaWIgPSAmYW1wO2Rldi0mZ3Q7cG9ydHNbcG9ydF0ubWliOwotCXN0YXRzID0gJmFtcDttaWItJmd0O3N0YXRzNjQ7Ci0JcHN0YXRzID0gJmFtcDttaWItJmd0O3BhdXNlX3N0YXRzOwotCXJhdyA9IChzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKiltaWItJmd0O2NvdW50ZXJzOwotCi0Jc3Bpbl9sb2NrKCZhbXA7bWliLSZndDtzdGF0czY0X2xvY2spOwotCi0Jc3RhdHMtJmd0O3J4X3BhY2tldHMgPSByYXctJmd0O3J4X2JjYXN0ICYjNDM7IHJhdy0mZ3Q7cnhfbWNhc3QgJiM0MzsgcmF3LSZndDtyeF91Y2FzdCAmIzQzOwotCQlyYXctJmd0O3J4X3BhdXNlOwotCXN0YXRzLSZndDt0eF9wYWNrZXRzID0gcmF3LSZndDt0eF9iY2FzdCAmIzQzOyByYXctJmd0O3R4X21jYXN0ICYjNDM7IHJhdy0mZ3Q7dHhfdWNhc3QgJiM0MzsKLQkJcmF3LSZndDt0eF9wYXVzZTsKLQotCS8qIEhXIGNvdW50ZXJzIGFyZSBjb3VudGluZyBieXRlcyAmIzQzOyBGQ1Mgd2hpY2ggaXMgbm90IGFjY2VwdGFibGUKLQkgKiBmb3IgcnRubF9saW5rX3N0YXRzNjQgaW50ZXJmYWNlCi0JICovCi0Jc3RhdHMtJmd0O3J4X2J5dGVzID0gcmF3LSZndDtyeCAmIzQzOyByYXctJmd0O3J4X2hpIC0gc3RhdHMtJmd0O3J4X3BhY2tldHMgKiBFVEhfRkNTX0xFTjsKLQlzdGF0cy0mZ3Q7dHhfYnl0ZXMgPSByYXctJmd0O3R4ICYjNDM7IHJhdy0mZ3Q7dHhfaGkgLSBzdGF0cy0mZ3Q7dHhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOOwotCi0Jc3RhdHMtJmd0O3J4X2xlbmd0aF9lcnJvcnMgPSByYXctJmd0O3J4X3VuZGVyc2l6ZSAmIzQzOyByYXctJmd0O3J4X2ZyYWdtZW50cyAmIzQzOwotCQlyYXctJmd0O3J4X292ZXJzaXplOwotCi0Jc3RhdHMtJmd0O3J4X2NyY19lcnJvcnMgPSByYXctJmd0O3J4X2NyY19lcnI7Ci0Jc3RhdHMtJmd0O3J4X2ZyYW1lX2Vycm9ycyA9IHJhdy0mZ3Q7cnhfYWxpZ25fZXJyOwotCXN0YXRzLSZndDtyeF9kcm9wcGVkID0gcmF3LSZndDtyeF9kaXNjYXJkczsKLQlzdGF0cy0mZ3Q7cnhfZXJyb3JzID0gc3RhdHMtJmd0O3J4X2xlbmd0aF9lcnJvcnMgJiM0Mzsgc3RhdHMtJmd0O3J4X2NyY19lcnJvcnMgJiM0MzsKLQkJc3RhdHMtJmd0O3J4X2ZyYW1lX2Vycm9ycyAgJiM0Mzsgc3RhdHMtJmd0O3J4X2Ryb3BwZWQ7Ci0KLQlzdGF0cy0mZ3Q7dHhfd2luZG93X2Vycm9ycyA9IHJhdy0mZ3Q7dHhfbGF0ZV9jb2w7Ci0Jc3RhdHMtJmd0O3R4X2ZpZm9fZXJyb3JzID0gcmF3LSZndDt0eF9kaXNjYXJkczsKLQlzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMgPSByYXctJmd0O3R4X2V4Y19jb2w7Ci0Jc3RhdHMtJmd0O3R4X2Vycm9ycyA9IHN0YXRzLSZndDt0eF93aW5kb3dfZXJyb3JzICYjNDM7IHN0YXRzLSZndDt0eF9maWZvX2Vycm9ycyAmIzQzOwotCQlzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnM7Ci0KLQlzdGF0cy0mZ3Q7bXVsdGljYXN0ID0gcmF3LSZndDtyeF9tY2FzdDsKLQlzdGF0cy0mZ3Q7Y29sbGlzaW9ucyA9IHJhdy0mZ3Q7dHhfdG90YWxfY29sOwotCi0JcHN0YXRzLSZndDt0eF9wYXVzZV9mcmFtZXMgPSByYXctJmd0O3R4X3BhdXNlOwotCXBzdGF0cy0mZ3Q7cnhfcGF1c2VfZnJhbWVzID0gcmF3LSZndDtyeF9wYXVzZTsKLQotCXNwaW5fdW5sb2NrKCZhbXA7bWliLSZndDtzdGF0czY0X2xvY2spOwogfQogCiB2b2lkIGtzel9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LApAQCAtMjg4NSwyOCAmIzQzOzI3MjIsNiBAQCB2b2lkIGtzel9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCSAqLwogfQogCi1pbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCi17Ci0JdTMyIHF1ZXVlX21hcCA9IDA7Ci0JaW50IGlwbTsKLQotCWZvciAoaXBtID0gMDsgaXBtICZsdDsgZGV2LSZndDtpbmZvLSZndDtudW1faXBtczsgaXBtJiM0MzsmIzQzOykgewotCQlpbnQgcXVldWU7Ci0KLQkJLyogVHJhZmZpYyBUeXBlIChUVCkgaXMgY29ycmVzcG9uZGluZyB0byB0aGUgSW50ZXJuYWwgUHJpb3JpdHkKLQkJICogTWFwIChJUE0pIGluIHRoZSBzd2l0Y2guIFRyYWZmaWMgQ2xhc3MgKFRDKSBpcwotCQkgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZSBpbiB0aGUgc3dpdGNoLgotCQkgKi8KLQkJcXVldWUgPSBpZWVlODAyMXFfdHRfdG9fdGMoaXBtLCBkZXYtJmd0O2luZm8tJmd0O251bV90eF9xdWV1ZXMpOwotCQlpZiAocXVldWUgJmx0OyAwKQotCQkJcmV0dXJuIHF1ZXVlOwotCi0JCXF1ZXVlX21hcCB8PSBxdWV1ZSAmbHQ7Jmx0OyAoaXBtICogS1NaOTQ3N19QT1JUX1RDX01BUF9TKTsKLQl9Ci0KLQlyZXR1cm4ga3N6X3B3cml0ZTMyKGRldiwgcG9ydCwgS1NaOTQ3N19QT1JUX01SSV9UQ19NQVBfXzQsIHF1ZXVlX21hcCk7Ci19Ci0KIHZvaWQga3N6X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1OCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CkBAIC0yOTg0LDQwICYjNDM7Mjc5OSw2IEBAIGludCBrc3pfcG9ydF9icmlkZ2VfZmxhZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAlyZXR1cm4gMDsKIH0KIAotaW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpCi17Ci0Jc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwotCi0Jc3dpdGNoIChkZXYtJmd0O2NoaXBfaWQpIHsKLQljYXNlIEtTWjg3OTVfQ0hJUF9JRDoKLQljYXNlIEtTWjg3OTRfQ0hJUF9JRDoKLQljYXNlIEtTWjg3NjVfQ0hJUF9JRDoKLQkJcmV0dXJuIEtTWjg3OTVfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjsKLQljYXNlIEtTWjg0NjNfQ0hJUF9JRDoKLQljYXNlIEtTWjg4WDNfQ0hJUF9JRDoKLQljYXNlIEtTWjg4NjRfQ0hJUF9JRDoKLQljYXNlIEtTWjg4OTVfQ0hJUF9JRDoKLQkJcmV0dXJuIEtTWjg4NjNfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjsKLQljYXNlIEtTWjg1NjNfQ0hJUF9JRDoKLQljYXNlIEtTWjg1NjdfQ0hJUF9JRDoKLQljYXNlIEtTWjk0NzdfQ0hJUF9JRDoKLQljYXNlIEtTWjk1NjNfQ0hJUF9JRDoKLQljYXNlIEtTWjk1NjdfQ0hJUF9JRDoKLQljYXNlIEtTWjk4OTNfQ0hJUF9JRDoKLQljYXNlIEtTWjk4OTZfQ0hJUF9JRDoKLQljYXNlIEtTWjk4OTdfQ0hJUF9JRDoKLQljYXNlIExBTjkzNzBfQ0hJUF9JRDoKLQljYXNlIExBTjkzNzFfQ0hJUF9JRDoKLQljYXNlIExBTjkzNzJfQ0hJUF9JRDoKLQljYXNlIExBTjkzNzNfQ0hJUF9JRDoKLQljYXNlIExBTjkzNzRfQ0hJUF9JRDoKLQljYXNlIExBTjk2NDZfQ0hJUF9JRDoKLQkJcmV0dXJuIEtTWjk0NzdfTUFYX0ZSQU1FX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47Ci0JfQotCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCiBpbnQga3N6X3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCSAgICBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKQogewpAQCAtMzA4NiwzOSAmIzQzOzI4NjcsNiBAQCB2b2lkIGtzel9zZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKIAlrc3pfcHdyaXRlOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sIGRhdGE4KTsKIH0KIAotcGh5X2ludGVyZmFjZV90IGtzel9nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBnYml0KQotewotCWNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtJmd0O2luZm8tJmd0O3htaWlfY3RybDE7Ci0JY29uc3QgdTE2ICpyZWdzID0gZGV2LSZndDtpbmZvLSZndDtyZWdzOwotCXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7Ci0JdTggZGF0YTg7Ci0JdTggdmFsOwotCi0Ja3N6X3ByZWFkOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sICZhbXA7ZGF0YTgpOwotCi0JdmFsID0gRklFTERfR0VUKFBfTUlJX1NFTF9NLCBkYXRhOCk7Ci0KLQlpZiAodmFsID09IGJpdHZhbFtQX01JSV9TRUxdKSB7Ci0JCWlmIChnYml0KQotCQkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk7Ci0JCWVsc2UKLQkJCWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7Ci0JfSBlbHNlIGlmICh2YWwgPT0gYml0dmFsW1BfUk1JSV9TRUxdKSB7Ci0JCWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJOwotCX0gZWxzZSB7Ci0JCWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTsKLQkJaWYgKGRhdGE4ICZhbXA7IFBfUkdNSUlfSURfRUdfRU5BQkxFKQotCQkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ7Ci0JCWlmIChkYXRhOCAmYW1wOyBQX1JHTUlJX0lEX0lHX0VOQUJMRSkgewotCQkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ7Ci0JCQlpZiAoZGF0YTggJmFtcDsgUF9SR01JSV9JRF9FR19FTkFCTEUpCi0JCQkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEOwotCQl9Ci0JfQotCi0JcmV0dXJuIGludGVyZmFjZTsKLX0KLQogYm9vbCBrc3pfcGh5bGlua19uZWVkX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAkJCSAgICAgdW5zaWduZWQgaW50IG1vZGUpCiB7CkBAIC0zMTU0LDI0ICYjNDM7MjkwMiw2IEBAIHZvaWQga3N6X3BoeWxpbmtfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAkJa3N6X3NldF94bWlpKGRldiwgcG9ydCwgc3RhdGUtJmd0O2ludGVyZmFjZSk7CiB9CiAKLWJvb2wga3N6X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQotewotCWNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtJmd0O2luZm8tJmd0O3htaWlfY3RybDE7Ci0JY29uc3QgdTE2ICpyZWdzID0gZGV2LSZndDtpbmZvLSZndDtyZWdzOwotCWJvb2wgZ2JpdCA9IGZhbHNlOwotCXU4IGRhdGE4OwotCWJvb2wgdmFsOwotCi0Ja3N6X3ByZWFkOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sICZhbXA7ZGF0YTgpOwotCi0JdmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7Ci0KLQlpZiAodmFsID09IGJpdHZhbFtQX0dNSUlfMUdCSVRdKQotCQlnYml0ID0gdHJ1ZTsKLQotCXJldHVybiBnYml0OwotfQotCiBzdGF0aWMgaW50IGtzel9zd2l0Y2hfZGV0ZWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiB7CiAJdTggaWQxLCBpZDIsIGlkNDsKQEAgLTMzMTQsOCAmIzQzOzMwNDQsOCBAQCBzdGF0aWMgaW50IGtzel9zZXR1cF90Y19tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCB1OCBzY2hlZHVsZXIsCiAJCQkgICBGSUVMRF9QUkVQKE1USV9TSEFQSU5HX00sIHNoYXBlcikpOwogfQogCi1zdGF0aWMgaW50IGtzel9zZXR1cF90Y19jYnMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKLQkJCSAgICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdCkKJiM0MztpbnQga3N6X3NldHVwX3RjX2NicyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJICAgICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdCkKIHsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiAJaW50IHJldDsKQEAgLTMzODAsOCAmIzQzOzMxMTAsOCBAQCBzdGF0aWMgaW50IGtzel9kaXNhYmxlX2VncmVzc19yYXRlX2xpbWl0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCwKLQkJCQkgaW50IGJhbmQpCiYjNDM7aW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCwKJiM0MzsJCQkgIGludCBiYW5kKQogewogCS8qIENvbXBhcmVkIHRvIHF1ZXVlcywgYmFuZHMgcHJpb3JpdGl6ZSBwYWNrZXRzIGRpZmZlcmVudGx5LiBJbiBzdHJpY3QKIAkgKiBwcmlvcml0eSBtb2RlLCB0aGUgbG93ZXN0IHByaW9yaXR5IGlzIGFzc2lnbmVkIHRvIFF1ZXVlIDAgd2hpbGUgdGhlCkBAIC0zMzkwLDEwNCAmIzQzOzMxMjAsNiBAQCBzdGF0aWMgaW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCwKIAlyZXR1cm4gcC0mZ3Q7YmFuZHMgLSAxIC0gYmFuZDsKIH0KIAotc3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKQotewotCXU4IHJlZzsKLQotCXJlZyA9IDB4QzggJiM0MzsgcG9ydCAqIDQ7Ci0JcmVnICYjNDM7PSAoKDMgLSBxdWV1ZSkgLyAyKSAqIDI7Ci0JcmVnJiM0MzsmIzQzOzsKLQlyZWcgLT0gKHF1ZXVlICZhbXA7IDEpOwotCXJldHVybiByZWc7Ci19Ci0KLS8qKgotICoga3N6ODh4M190Y19ldHNfYWRkIC0gQ29uZmlndXJlIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikKLSAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2gKLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZQotICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGNvbmZpZ3VyZQotICogQHA6IFBvaW50ZXIgdG8gb2ZmbG9hZCByZXBsYWNlIHBhcmFtZXRlcnMgZGVzY3JpYmluZyBFVFMgYmFuZHMgYW5kIG1hcHBpbmcKLSAqCi0gKiBUaGUgS1NaODh4MyBzdXBwb3J0cyB0d28gc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IGFuZAotICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLiBCb3RoIG1vZGVzIGhhdmUgZml4ZWQgYmVoYXZpb3I6Ci0gKiAgIC0gTm8gY29uZmlndXJhYmxlIHF1ZXVlLXRvLXByaW9yaXR5IG1hcHBpbmcKLSAqICAgLSBObyB3ZWlnaHQgYWRqdXN0bWVudCBpbiBXRlEgbW9kZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgc3dpdGNoIHRvIHVzZSBzdHJpY3QgcHJpb3JpdHkgbW9kZSBieQotICogY2xlYXJpbmcgdGhlIFdGUSBlbmFibGUgYml0IGZvciBhbGwgcXVldWVzIGFzc29jaWF0ZWQgd2l0aCBFVFMgYmFuZHMuCi0gKiBJZiBzdHJpY3QgcHJpb3JpdHkgaXMgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCB0aGUgc3dpdGNoIHdpbGwgZGVmYXVsdAotICogdG8gV0ZRIG1vZGUuCi0gKgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCi0gKi8KLXN0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfYWRkKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAotCQkJICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApCi17Ci0JaW50IHJldCwgYmFuZDsKLQotCS8qIE9ubHkgc3RyaWN0IHByaW9yaXR5IG1vZGUgaXMgc3VwcG9ydGVkIGZvciBub3cuCi0JICogV0ZRIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkLgotCSAqLwotCWZvciAoYmFuZCA9IDA7IGJhbmQgJmx0OyBwLSZndDtiYW5kczsgYmFuZCYjNDM7JiM0MzspIHsKLQkJaW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpOwotCQl1OCByZWc7Ci0KLQkJLyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXMKLQkJICogcG9ydC9xdWV1ZQotCQkgKi8KLQkJcmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpOwotCQlpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSkKLQkJCXJlZyA9IGtzejg0NjNfdGNfY3RybChwb3J0LCBxdWV1ZSk7Ci0KLQkJLyogQ2xlYXIgV0ZRIGVuYWJsZSBiaXQgdG8gc2VsZWN0IHN0cmljdCBwcmlvcml0eSBzY2hlZHVsaW5nICovCi0JCXJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLCAwKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoga3N6ODh4M190Y19ldHNfZGVsIC0gUmVzZXQgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKSBjb25maWcKLSAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2gKLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZQotICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIHJlc2V0Ci0gKgotICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgb25seSBmaXhlZCBzY2hlZHVsaW5nIG1vZGVzOiBTdHJpY3QgUHJpb3JpdHkgb3IKLSAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKSwgd2l0aCBubyByZWNvbmZpZ3VyYXRpb24gb2Ygd2VpZ2h0cyBvcgotICogcXVldWUgbWFwcGluZy4gVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIHBvcnTigJlzIHNjaGVkdWxpbmcgbW9kZSB0bwotICogdGhlIGRlZmF1bHQsIHdoaWNoIGlzIFdGUSwgYnkgZW5hYmxpbmcgdGhlIFdGUSBiaXQgZm9yIGFsbCBxdWV1ZXMuCi0gKgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCi0gKi8KLXN0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQotewotCWludCByZXQsIHF1ZXVlOwotCi0JLyogSXRlcmF0ZSBvdmVyIGFsbCB0cmFuc21pdCBxdWV1ZXMgZm9yIHRoaXMgcG9ydCAqLwotCWZvciAocXVldWUgPSAwOyBxdWV1ZSAmbHQ7IGRldi0mZ3Q7aW5mby0mZ3Q7bnVtX3R4X3F1ZXVlczsgcXVldWUmIzQzOyYjNDM7KSB7Ci0JCXU4IHJlZzsKLQotCQkvKiBDYWxjdWxhdGUgVFhRIFNwbGl0IENvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhpcwotCQkgKiBwb3J0L3F1ZXVlCi0JCSAqLwotCQlyZWcgPSBLU1o4ODczX1RYUV9TUExJVF9DVFJMX1JFRyhwb3J0LCBxdWV1ZSk7Ci0JCWlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKQotCQkJcmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTsKLQotCQkvKiBTZXQgV0ZRIGVuYWJsZSBiaXQgdG8gcmV2ZXJ0IGJhY2sgdG8gZGVmYXVsdCBzY2hlZHVsaW5nCi0JCSAqIG1vZGUKLQkJICovCi0JCXJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLAotCQkJICAgICAgIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBrc3pfcXVldWVfc2V0X3N0cmljdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IHF1ZXVlKQogewogCWludCByZXQ7CkBAIC0zNTgwLDggJiM0MzszMjEyLDggQEAgc3RhdGljIGludCBrc3pfdGNfZXRzX2RlbChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCkKIAlyZXR1cm4ga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoZGV2LCBwb3J0KTsKIH0KIAotc3RhdGljIGludCBrc3pfdGNfZXRzX3ZhbGlkYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAotCQkJICAgICAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKQomIzQzO2ludCBrc3pfdGNfZXRzX3ZhbGlkYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAomIzQzOwkJCXN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKQogewogCWludCBiYW5kOwogCkBAIC0zNjIyLDkgJiM0MzszMjU0LDYgQEAgc3RhdGljIGludCBrc3pfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwogCWludCByZXQ7CiAKLQlpZiAoaXNfa3N6OChkZXYpICZhbXA7JmFtcDsgIShrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlpZiAocW9wdC0mZ3Q7cGFyZW50ICE9IFRDX0hfUk9PVCkgewogCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0O1BhcmVudCBzaG91bGQgYmUgXCYjMzQ7cm9vdFwmIzM0O1xuJiMzNDspOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0zNjM2LDE2ICYjNDM7MzI2NSw5IEBAIHN0YXRpYyBpbnQga3N6X3RjX3NldHVwX3FkaXNjX2V0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQlpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKQotCQkJcmV0dXJuIGtzejg4eDNfdGNfZXRzX2FkZChkZXYsIHBvcnQsCi0JCQkJCQkgICZhbXA7cW9wdC0mZ3Q7cmVwbGFjZV9wYXJhbXMpOwotCQllbHNlCi0JCQlyZXR1cm4ga3N6X3RjX2V0c19hZGQoZGV2LCBwb3J0LCAmYW1wO3FvcHQtJmd0O3JlcGxhY2VfcGFyYW1zKTsKJiM0MzsJCXJldHVybiBrc3pfdGNfZXRzX2FkZChkZXYsIHBvcnQsICZhbXA7cW9wdC0mZ3Q7cmVwbGFjZV9wYXJhbXMpOwogCWNhc2UgVENfRVRTX0RFU1RST1k6Ci0JCWlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpCi0JCQlyZXR1cm4ga3N6ODh4M190Y19ldHNfZGVsKGRldiwgcG9ydCk7Ci0JCWVsc2UKLQkJCXJldHVybiBrc3pfdGNfZXRzX2RlbChkZXYsIHBvcnQpOwomIzQzOwkJcmV0dXJuIGtzel90Y19ldHNfZGVsKGRldiwgcG9ydCk7CiAJY2FzZSBUQ19FVFNfU1RBVFM6CiAJY2FzZSBUQ19FVFNfR1JBRlQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTM3MDQsNiAmIzQzOzMzMjYsMzQgQEAgaW50IGtzel9oYW5kbGVfd2FrZV9yZWFzb24oc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiAJCQkJcG1lX3N0YXR1cyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZSAtIENoZWNrIGlmIHRoZSBNQUMgYWRkcmVzcyBvbiBhIGdpdmVuIHBvcnQKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MuCiYjNDM7ICogQGRzOiBQb2ludGVyIHRvIHRoZSBEU0Egc3dpdGNoIHN0cnVjdHVyZS4KJiM0MzsgKiBAcG9ydDogVGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZSBNQUMgYWRkcmVzcyBpcyB0byBiZSBjaGVja2VkLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBleGFtaW5lcyB0aGUgTUFDIGFkZHJlc3Mgc2V0IG9uIHRoZSBzcGVjaWZpZWQgcG9ydCBhbmQKJiM0MzsgKiBkZXRlcm1pbmVzIGlmIGl0IGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MgZm9yIHRoZSBzd2l0Y2guCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBvcnQmIzM5O3MgTUFDIGFkZHJlc3MgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcywgZmFsc2UKJiM0MzsgKiBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICp1c2VyID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpLSZndDt1c2VyOwomIzQzOwljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyID0gdXNlci0mZ3Q7ZGV2X2FkZHI7CiYjNDM7CXN0cnVjdCBrc3pfc3dpdGNoX21hY2FkZHIgKnN3aXRjaF9tYWNhZGRyOwomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CXN3aXRjaF9tYWNhZGRyID0gZGV2LSZndDtzd2l0Y2hfbWFjYWRkcjsKJiM0MzsJaWYgKHN3aXRjaF9tYWNhZGRyICZhbXA7JmFtcDsgIWV0aGVyX2FkZHJfZXF1YWwoc3dpdGNoX21hY2FkZHItJmd0O2FkZHIsIGFkZHIpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGtzel9nZXRfd29sIC0gR2V0IFdha2Utb24tTEFOIHNldHRpbmdzIGZvciBhIHNwZWNpZmllZCBwb3J0LgogICogQGRzOiBUaGUgZHNhX3N3aXRjaCBzdHJ1Y3R1cmUuCkBAIC0zODk3LDM0ICYjNDM7MzU0Nyw2IEBAIGludCBrc3pfcG9ydF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZSAtIENoZWNrIGlmIHRoZSBNQUMgYWRkcmVzcyBvbiBhIGdpdmVuIHBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcy4KLSAqIEBkczogUG9pbnRlciB0byB0aGUgRFNBIHN3aXRjaCBzdHJ1Y3R1cmUuCi0gKiBAcG9ydDogVGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZSBNQUMgYWRkcmVzcyBpcyB0byBiZSBjaGVja2VkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZXhhbWluZXMgdGhlIE1BQyBhZGRyZXNzIHNldCBvbiB0aGUgc3BlY2lmaWVkIHBvcnQgYW5kCi0gKiBkZXRlcm1pbmVzIGlmIGl0IGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MgZm9yIHRoZSBzd2l0Y2guCi0gKgotICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwb3J0JiMzOTtzIE1BQyBhZGRyZXNzIGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MsIGZhbHNlCi0gKiBvdGhlcndpc2UuCi0gKi8KLWJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqdXNlciA9IGRzYV90b19wb3J0KGRzLCBwb3J0KS0mZ3Q7dXNlcjsKLQljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyID0gdXNlci0mZ3Q7ZGV2X2FkZHI7Ci0Jc3RydWN0IGtzel9zd2l0Y2hfbWFjYWRkciAqc3dpdGNoX21hY2FkZHI7Ci0Jc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwotCi0JQVNTRVJUX1JUTkwoKTsKLQotCXN3aXRjaF9tYWNhZGRyID0gZGV2LSZndDtzd2l0Y2hfbWFjYWRkcjsKLQlpZiAoc3dpdGNoX21hY2FkZHIgJmFtcDsmYW1wOyAhZXRoZXJfYWRkcl9lcXVhbChzd2l0Y2hfbWFjYWRkci0mZ3Q7YWRkciwgYWRkcikpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCiAvKioKICAqIGtzel9zd2l0Y2hfbWFjYWRkcl9nZXQgLSBQcm9ncmFtIHRoZSBzd2l0Y2gmIzM5O3MgTUFDIGFkZHJlc3MgcmVnaXN0ZXIuCiAgKiBAZHM6IERTQSBzd2l0Y2ggaW5zdGFuY2UuCkBAIC00MTMyLDggJiM0MzszNzU0LDggQEAgc3RhdGljIHZvaWQga3N6X3BhcnNlX3JnbWlpX2RlbGF5KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0X251bSwKICAqIFJldHVybnM6IElmIGZvdW5kLCB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlciB2YWx1ZSBmb3IgdGhhdCBkcml2ZSBzdHJlbmd0aAogICogaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgLUVJTlZBTCBpcyByZXR1cm5lZCBpbmRpY2F0aW5nIGFuIGludmFsaWQgdmFsdWUuCiAgKi8KLXN0YXRpYyBpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSwKLQkJCQkgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApCiYjNDM7aW50IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksCiYjNDM7CQkJICAgICAgc2l6ZV90IGFycmF5X3NpemUsIGludCBtaWNyb2FtcCkKIHsKIAlpbnQgaTsKIApAQCAtNDE1Niw5ICYjNDM7Mzc3OCw5IEBAIHN0YXRpYyBpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSwKICAqIGlzIGRldGVjdGVkLiBJdCBsaXN0cyBvdXQgYWxsIHRoZSBzdXBwb3J0ZWQgZHJpdmUgc3RyZW5ndGggdmFsdWVzIGZvcgogICogcmVmZXJlbmNlIGluIHRoZSBlcnJvciBtZXNzYWdlLgogICovCi1zdGF0aWMgdm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LAotCQkJCSAgICAgc2l6ZV90IGFycmF5X3NpemUsIGludCBtaWNyb2FtcCkKJiM0Mzt2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LAomIzQzOwkJCSAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApCiB7CiAJY2hhciBzdXBwb3J0ZWRfdmFsdWVzWzEwMF07CiAJc2l6ZV90IHJlbWFpbmluZ19zaXplOwpAQCAtNDE4NSw4ICYjNDM7MzgwNyw4IEBAIHN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogfQogCiAvKioKLSAqIGtzejk0NzdfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggZm9yIHNwZWNpZmljIEtTWjk0NzcKLSAqCQkJCSAgICBjaGlwIHZhcmlhbnRzLgomIzQzOyAqIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBmb3Igc3BlY2lmaWMgS1NaOTQ3NwomIzQzOyAqCQkJCWFuZCB0aGUgS1NaODd4eCBjaGlwIHZhcmlhbnRzLgogICogQGRldjogICAgICAga3N6IGRldmljZQogICogQHByb3BzOiAgICAgQXJyYXkgb2YgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyB0byBiZSBhcHBsaWVkCiAgKiBAbnVtX3Byb3BzOiBOdW1iZXIgb2YgcHJvcGVydGllcyBpbiB0aGUgYXJyYXkKQEAgLTQxOTcsOSAmIzQzOzM4MTksOSBAQCBzdGF0aWMgdm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwKICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzc2Z1bCBjb25maWd1cmF0aW9uLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBrc3o5NDc3X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCi0JCQkJCXN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLAotCQkJCQlpbnQgbnVtX3Byb3BzKQomIzQzO2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLAomIzQzOwkJCSAgICAgaW50IG51bV9wcm9wcykKIHsKIAlzaXplX3QgYXJyYXlfc2l6ZSA9IEFSUkFZX1NJWkUoa3N6OTQ3N19kcml2ZV9zdHJlbmd0aHMpOwogCWludCBpLCByZXQsIHJlZzsKQEAgLTQyMzYsMTMwICYjNDM7Mzg1OCw2IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCXJldHVybiBrc3pfcm13OChkZXYsIHJlZywgbWFzaywgdmFsKTsKIH0KIAotLyoqCi0gKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb24gZm9yCi0gKgkJCQkgICAgS1NaODg2MyBjb21wYXRpYmxlIGNoaXAgdmFyaWFudHMuCi0gKiBAZGV2OiAgICAgICBrc3ogZGV2aWNlCi0gKiBAcHJvcHM6ICAgICBBcnJheSBvZiBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIHRvIGJlIHNldAotICogQG51bV9wcm9wczogTnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5Ci0gKgotICogVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggc2V0dGluZ3MgdG8gS1NaODhYMyBjaGlwCi0gKiB2YXJpYW50cyAoS1NaODg3MywgS1NaODg2MykuCi0gKiBJdCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9ucyBhbGlnbiB3aXRoIHdoYXQgdGhlIGNoaXAgdmFyaWFudCBzdXBwb3J0cyBhbmQKLSAqIHdhcm5zIG9yIGVycm9ycyBvdXQgb24gdW5zdXBwb3J0ZWQgc2V0dGluZ3MuCi0gKgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wICpwcm9wcywKLQkJCQkJaW50IG51bV9wcm9wcykKLXsKLQlzaXplX3QgYXJyYXlfc2l6ZSA9IEFSUkFZX1NJWkUoa3N6ODh4M19kcml2ZV9zdHJlbmd0aHMpOwotCWludCBtaWNyb2FtcDsKLQlpbnQgaSwgcmV0OwotCi0JZm9yIChpID0gMDsgaSAmbHQ7IG51bV9wcm9wczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHByb3BzW2ldLnZhbHVlID09IC0xIHx8IGkgPT0gS1NaX0RSSVZFUl9TVFJFTkdUSF9JTykKLQkJCWNvbnRpbnVlOwotCi0JCWRldl93YXJuKGRldi0mZ3Q7ZGV2LCAmIzM0OyVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcbiYjMzQ7LAotCQkJIHByb3BzW2ldLm5hbWUpOwotCX0KLQotCW1pY3JvYW1wID0gcHJvcHNbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10udmFsdWU7Ci0JcmV0ID0ga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocywgYXJyYXlfc2l6ZSwKLQkJCQkJbWljcm9hbXApOwotCWlmIChyZXQgJmx0OyAwKSB7Ci0JCWtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihkZXYsIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzLAotCQkJCQkgYXJyYXlfc2l6ZSwgbWljcm9hbXApOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiBrc3pfcm13OChkZXYsIEtTWjg4NzNfUkVHX0dMT0JBTF9DVFJMXzEyLAotCQkJS1NaODg3M19EUklWRV9TVFJFTkdUSF8xNk1BLCByZXQpOwotfQotCi0vKioKLSAqIGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aCgpIC0gRXh0cmFjdCBhbmQgYXBwbHkgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbnMKLSAqCQkJCWZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy4KLSAqIEBkZXY6CWtzeiBkZXZpY2UKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZQotICogZGV2aWNlIHRyZWUsIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBzdXBwb3J0ZWQgY2hpcCB2YXJpYW50cywgYW5kIHNldHMKLSAqIHRoZW0gYWNjb3JkaW5nbHkuIEFuIGVycm9yIHNob3VsZCBiZSBjcml0aWNhbCBoZXJlLCBhcyB0aGUgZHJpdmUgc3RyZW5ndGgKLSAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS4KLSAqCi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKLSAqLwotaW50IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHsKLQkJW0tTWl9EUklWRVJfU1RSRU5HVEhfSEldID0gewotCQkJLm5hbWUgPSAmIzM0O21pY3JvY2hpcCxoaS1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcCYjMzQ7LAotCQkJLm9mZnNldCA9IFNXX0hJX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsCi0JCQkudmFsdWUgPSAtMSwKLQkJfSwKLQkJW0tTWl9EUklWRVJfU1RSRU5HVEhfTE9dID0gewotCQkJLm5hbWUgPSAmIzM0O21pY3JvY2hpcCxsby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcCYjMzQ7LAotCQkJLm9mZnNldCA9IFNXX0xPX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsCi0JCQkudmFsdWUgPSAtMSwKLQkJfSwKLQkJW0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dID0gewotCQkJLm5hbWUgPSAmIzM0O21pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcCYjMzQ7LAotCQkJLm9mZnNldCA9IDAsIC8qIGRvbiYjMzk7dCBjYXJlICovCi0JCQkudmFsdWUgPSAtMSwKLQkJfSwKLQl9OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtJmd0O2Rldi0mZ3Q7b2Zfbm9kZTsKLQlib29sIGhhdmVfYW55X3Byb3AgPSBmYWxzZTsKLQlpbnQgaSwgcmV0OwotCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgb2ZfcHJvcHNbaV0ubmFtZSwKLQkJCQkJICAgJmFtcDtvZl9wcm9wc1tpXS52YWx1ZSk7Ci0JCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVJTlZBTCkKLQkJCWRldl93YXJuKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkICVzXG4mIzM0OywKLQkJCQkgb2ZfcHJvcHNbaV0ubmFtZSk7Ci0JCWlmIChyZXQpCi0JCQljb250aW51ZTsKLQotCQloYXZlX2FueV9wcm9wID0gdHJ1ZTsKLQl9Ci0KLQlpZiAoIWhhdmVfYW55X3Byb3ApCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoIChkZXYtJmd0O2NoaXBfaWQpIHsKLQljYXNlIEtTWjg4WDNfQ0hJUF9JRDoKLQkJcmV0dXJuIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcywKLQkJCQkJCSAgICBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7Ci0JY2FzZSBLU1o4Nzk1X0NISVBfSUQ6Ci0JY2FzZSBLU1o4Nzk0X0NISVBfSUQ6Ci0JY2FzZSBLU1o4NzY1X0NISVBfSUQ6Ci0JY2FzZSBLU1o4NTYzX0NISVBfSUQ6Ci0JY2FzZSBLU1o4NTY3X0NISVBfSUQ6Ci0JY2FzZSBLU1o5NDc3X0NISVBfSUQ6Ci0JY2FzZSBLU1o5NTYzX0NISVBfSUQ6Ci0JY2FzZSBLU1o5NTY3X0NISVBfSUQ6Ci0JY2FzZSBLU1o5ODkzX0NISVBfSUQ6Ci0JY2FzZSBLU1o5ODk2X0NISVBfSUQ6Ci0JY2FzZSBLU1o5ODk3X0NISVBfSUQ6Ci0JY2FzZSBMQU45NjQ2X0NISVBfSUQ6Ci0JCXJldHVybiBrc3o5NDc3X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKGRldiwgb2ZfcHJvcHMsCi0JCQkJCQkgICAgQVJSQVlfU0laRShvZl9wcm9wcykpOwotCWRlZmF1bHQ6Ci0JCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG9mX3Byb3BzKTsgaSYjNDM7JiM0MzspIHsKLQkJCWlmIChvZl9wcm9wc1tpXS52YWx1ZSA9PSAtMSkKLQkJCQljb250aW51ZTsKLQotCQkJZGV2X3dhcm4oZGV2LSZndDtkZXYsICYjMzQ7JXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgdmFyaWFudFxuJiMzNDssCi0JCQkJIG9mX3Byb3BzW2ldLm5hbWUpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQga3N6ODQ2M19jb25maWd1cmVfc3RyYXBzX3NwaShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwaW5jdHJsICpwaW5jdHJsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaAppbmRleCBiNGE1NjczYmEzNjVjYi4uYWNhZjcwZTZmMzkzYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc2EuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kYXRhL21pY3JvY2hpcC1rc3ouaCZndDsKIApAQCAtNDAsNiAmIzQzOzQxLDQ1IEBAIHN0cnVjdCB2bGFuX3RhYmxlIHsKIAl1MzIgdGFibGVbM107CiB9OwogCiYjNDM7c3RydWN0IGtzel9zdGF0c19yYXcgewomIzQzOwl1NjQgcnhfaGk7CiYjNDM7CXU2NCByeF91bmRlcnNpemU7CiYjNDM7CXU2NCByeF9mcmFnbWVudHM7CiYjNDM7CXU2NCByeF9vdmVyc2l6ZTsKJiM0MzsJdTY0IHJ4X2phYmJlcnM7CiYjNDM7CXU2NCByeF9zeW1ib2xfZXJyOwomIzQzOwl1NjQgcnhfY3JjX2VycjsKJiM0MzsJdTY0IHJ4X2FsaWduX2VycjsKJiM0MzsJdTY0IHJ4X21hY19jdHJsOwomIzQzOwl1NjQgcnhfcGF1c2U7CiYjNDM7CXU2NCByeF9iY2FzdDsKJiM0MzsJdTY0IHJ4X21jYXN0OwomIzQzOwl1NjQgcnhfdWNhc3Q7CiYjNDM7CXU2NCByeF82NF9vcl9sZXNzOwomIzQzOwl1NjQgcnhfNjVfMTI3OwomIzQzOwl1NjQgcnhfMTI4XzI1NTsKJiM0MzsJdTY0IHJ4XzI1Nl81MTE7CiYjNDM7CXU2NCByeF81MTJfMTAyMzsKJiM0MzsJdTY0IHJ4XzEwMjRfMTUyMjsKJiM0MzsJdTY0IHJ4XzE1MjNfMjAwMDsKJiM0MzsJdTY0IHJ4XzIwMDE7CiYjNDM7CXU2NCB0eF9oaTsKJiM0MzsJdTY0IHR4X2xhdGVfY29sOwomIzQzOwl1NjQgdHhfcGF1c2U7CiYjNDM7CXU2NCB0eF9iY2FzdDsKJiM0MzsJdTY0IHR4X21jYXN0OwomIzQzOwl1NjQgdHhfdWNhc3Q7CiYjNDM7CXU2NCB0eF9kZWZlcnJlZDsKJiM0MzsJdTY0IHR4X3RvdGFsX2NvbDsKJiM0MzsJdTY0IHR4X2V4Y19jb2w7CiYjNDM7CXU2NCB0eF9zaW5nbGVfY29sOwomIzQzOwl1NjQgdHhfbXVsdF9jb2w7CiYjNDM7CXU2NCByeF90b3RhbDsKJiM0MzsJdTY0IHR4X3RvdGFsOwomIzQzOwl1NjQgcnhfZGlzY2FyZHM7CiYjNDM7CXU2NCB0eF9kaXNjYXJkczsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGtzel9wb3J0X21pYiB7CiAJc3RydWN0IG11dGV4IGNudF9tdXRleDsJCS8qIHN0cnVjdHVyZSBhY2Nlc3MgKi8KIAl1OCBjbnRfcHRyOwpAQCAtMzkzLDEyICYjNDM7NDMzLDggQEAgaW50IGtzel9zd2l0Y2hfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CiB2b2lkIGtzel90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpOwogCiB2b2lkIGtzel9pbml0X21pYl90aW1lcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTsKLWJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCk7CiB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTsKLXZvaWQga3N6ODh4eF9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTsKIHZvaWQga3N6X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1OCBzdGF0ZSk7Ci1ib29sIGtzel9nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7Ci1waHlfaW50ZXJmYWNlX3Qga3N6X2dldF94bWlpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGdiaXQpOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXTsKIGludCBrc3pfc3dpdGNoX21hY2FkZHJfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwpAQCAtNDQzLDExICYjNDM7NDc5LDE1IEBAIHZvaWQga3N6X3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSwKIAkJCSAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKIAotaW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpOwotCiBpbnQga3N6X3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCSAgICBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKTsKIAomIzQzO2ludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsCiYjNDM7CQkJICBpbnQgYmFuZCk7CiYjNDM7aW50IGtzel9zZXR1cF90Y19jYnMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCSAgICAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpOwomIzQzO2ludCBrc3pfdGNfZXRzX3ZhbGlkYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAomIzQzOwkJCXN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKTsKIGludCBrc3pfc2V0dXBfdGMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLCB2b2lkICp0eXBlX2RhdGEpOwogCkBAIC00NzEsOCAmIzQzOzUxMSwzNyBAQCBpbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7CiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcCk7CiBpbnQga3N6X2dpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldik7CiB2b2lkIGtzel9pcnFfZnJlZShzdHJ1Y3Qga3N6X2lycSAqa2lycSk7Ci1pbnQga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpOwotaW50IGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTsKJiM0MzsKJiM0MztzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIHsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJaW50IG9mZnNldDsKJiM0MzsJaW50IHZhbHVlOwomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBrc3pfZHJpdmVyX3N0cmVuZ3RoX3R5cGUgewomIzQzOwlLU1pfRFJJVkVSX1NUUkVOR1RIX0hJLAomIzQzOwlLU1pfRFJJVkVSX1NUUkVOR1RIX0xPLAomIzQzOwlLU1pfRFJJVkVSX1NUUkVOR1RIX0lPLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAtIGRyaXZlIHN0cmVuZ3RoIG1hcHBpbmcKJiM0MzsgKiBAcmVnX3ZhbDoJcmVnaXN0ZXIgdmFsdWUKJiM0MzsgKiBAbWljcm9hbXA6CW1pY3JvYW1wIHZhbHVlCiYjNDM7ICovCiYjNDM7c3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCB7CiYjNDM7CXUzMiByZWdfdmFsOwomIzQzOwl1MzIgbWljcm9hbXA7CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LAomIzQzOwkJCSAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApOwomIzQzO2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LAomIzQzOwkJCSAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApOwomIzQzO2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLAomIzQzOwkJCSAgICAgaW50IG51bV9wcm9wcyk7CiAKIC8qIENvbW1vbiByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWdtYXAgKmtzel9yZWdtYXBfOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMKaW5kZXggOGViNTMzN2IwYzEwMmUuLjg2Y2UzYTg2NzA1ZjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMKQEAgLTc4NywxMCAmIzQzOzc4Nyw2IEBAIHN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIHNldCBicm9hZGNhc3Qgc3Rvcm0gcHJvdGVjdGlvbiAxMCUgcmF0ZSAqLwogCXN0b3JtX21hc2sgPSBCUk9BRENBU1RfU1RPUk1fUkFURTsKIAlzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwOwpAQCAtOTgzLDcgJiM0Mzs5NzksNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbGFuOTM3eF9zd2l0Y2hfb3BzID0gewogCS5nZXRfc3RhdHM2NAkJPSBrc3pfZ2V0X3N0YXRzNjQsCiAJLmdldF9wYXVzZV9zdGF0cwk9IGtzel9nZXRfcGF1c2Vfc3RhdHMsCiAJLnBvcnRfY2hhbmdlX210dQk9IGxhbjkzN3hfY2hhbmdlX210dSwKLQkucG9ydF9tYXhfbXR1CQk9IGtzel9tYXhfbXR1LAomIzQzOwkucG9ydF9tYXhfbXR1CQk9IGtzejk0NzdfbWF4X210dSwKIAkuc3VzcGVuZAkJPSBrc3pfc3VzcGVuZCwKIAkucmVzdW1lCQkJPSBrc3pfcmVzdW1lLAogCS5nZXRfdHNfaW5mbwkJPSBrc3pfZ2V0X3RzX2luZm8sCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTMzCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDMyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgdGhlIE1pY3JvY2hpcCBEU0EgRHJpdmVyKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGRlYWwuIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHNlcmllcyB0aGF0JiMzOTtzIGNsZWFybHkgZm9jdXNlZCBvbiByZWZhY3RvcmluZyB0aGUgYGtzemAgRFNBIGRyaXZlciBmb3IgTWljcm9jaGlwIHN3aXRjaGVzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIHB1cmVseSBhYm91dCB0aWR5aW5nIHRoaW5ncyB1cCwgbWFraW5nIHRoZSBjb2RlIG1vcmUgb3JnYW5pemVkIGFuZCBlYXNpZXIgdG8gbWFpbnRhaW4uIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vdmluZyBmdW5jdGlvbnMgZnJvbSBga3N6X2NvbW1vbi5jYCB0byBtb3JlIHNwZWNpZmljIGZpbGVzIGxpa2UgYGtzejguY2AgYW5kIGBrc3o5NDc3LmNgLCBiYXNlZCBvbiB0aGUgY2hpcCBmYW1pbGllcyB0aGV5JiMzOTtyZSBpbnRlbmRlZCBmb3IuIFRoZSBmdW5jdGlvbiBuYW1lcyBoYXZlIGJlZW4gdXBkYXRlZCB0byByZWZsZWN0IHRoaXMgc3BlY2lmaWNpdHksIHdpdGggdGhlIG9sZCBga3N6X2AgcHJlZml4IGJlaW5nIHJlcGxhY2VkIHdpdGggY2hpcC1zcGVjaWZpYyBwcmVmaXhlcywgbGlrZSBga3N6ODd4eF9gLCBga3N6ODh4eF9gLCBhbmQgYGtzejk0NzdfYC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBjb21wYXJlZCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb25zIHdpdGggdGhlaXIgcmVmYWN0b3JlZCBjb3VudGVycGFydHMuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmdW5jdGlvbnMgbGlrZSBga3N6X2NoYW5nZV9tdHVgLCBga3N6X21heF9tdHVgLCBhbmQgYGtzel9zZXR1cF90Y2AgKGFuZCB0aGVpciBjaGlwLXNwZWNpZmljIHZhcmlhdGlvbnMpIHNlZW1zIGlkZW50aWNhbC4gTm8gbmV3IGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gaW50cm9kdWNlZCBpbiB0aGUgZHJpdmVyLCBpdCBsb29rcyBsaWtlLCBqdXN0IGEgcmVvcmdhbml6YXRpb24gb2YgZXhpc3RpbmcgY29kZS4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIGBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGhgIHdoaWNoIGhhcyBiZWVuIHJlZmFjdG9yZWQgaW4gYGxhbjkzN3hfc2V0dXBgIGFuZCBub3RpY2VkIHRoYXQgdGhlIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcy4gSXQgaGFzIGJlZW4gY29uZmlybWVkIHRoZSByZW1vdmFsIGp1c3QgZ2V0cyByaWQgb2Ygd2FybmluZ3MgYW5kIGRvZXNuJiMzOTt0IGFmZmVjdCBvcGVyYXRpb24uCgpUaGUgZnVuY3Rpb25zIGxpa2UgYGtzejg4eHhfcl9taWJfc3RhdHM2NGAsIHRoZSBga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoYCBjYWxscywgYW5kIHRoZSBga3N6OTQ3N18qYCBmdW5jdGlvbnMgd2VyZSBhbHNvIG1vdmVkIHRvIGJlIG1vcmUgY2hpcC1zcGVjaWZpYy4KClNvLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgZXhlcmNpc2UuIEl0JiMzOTtzIGFib3V0IGltcHJvdmVkIGNvZGUgc3RydWN0dXJlLCBub3QgYWRkaW5nIG5ldyBmZWF0dXJlcyBvciBmaXhpbmcgYnVncy4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyByZWFzb24gdG8gZmxhZyB0aGlzIGFzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcyBvciBjb21wbGV4IGxvZ2ljIHRoYXQgd291bGQgYmUgZXhwb3NlZCB0byBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBNaWNyb2NoaXAgS1NaIERTQSBkcml2ZXIuIEl0IG1vdmVzIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb25zIChsaWtlIE1UVSBjb25maWd1cmF0aW9uLCBUQyBzZXR1cCwgTUlCIHN0YXRzIHJlYWRpbmcsIGFuZCBkcml2ZSBzdHJlbmd0aCBwYXJzaW5nKSBmcm9tIHRoZSBjb21tb24gYGtzel9jb21tb24uY2AgZmlsZSB0byB0aGVpciByZXNwZWN0aXZlIGNoaXAtc3BlY2lmaWMgZmlsZXMgKGBrc3o4LmNgIGFuZCBga3N6OTQ3Ny5jYCkuIEl0IGFsc28gcmVtb3ZlcyBhIG5vLW9wIGNhbGwgdG8gYGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aGAgaW4gYGxhbjkzN3hfbWFpbi5jYCB3aGljaCBvbmx5IHByaW50ZWQgd2FybmluZ3MgZm9yIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMuIE5vIG5ldyBmdW5jdGlvbmFsIGxvZ2ljIG9yIHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBNaWNyb2NoaXAgS1NaIERTQSBkcml2ZXIuIEl0IG1vdmVzIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb25zIChsaWtlIE1UVSBjb25maWd1cmF0aW9uLCBUQyBzZXR1cCwgTUlCIHN0YXRzIHJlYWRpbmcsIGFuZCBkcml2ZSBzdHJlbmd0aCBwYXJzaW5nKSBmcm9tIHRoZSBjb21tb24gYGtzel9jb21tb24uY2AgZmlsZSB0byB0aGVpciByZXNwZWN0aXZlIGNoaXAtc3BlY2lmaWMgZmlsZXMgKGBrc3o4LmNgIGFuZCBga3N6OTQ3Ny5jYCkuIEl0IGFsc28gcmVtb3ZlcyBhIG5vLW9wIGNhbGwgdG8gYGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aGAgaW4gYGxhbjkzN3hfbWFpbi5jYCB3aGljaCBvbmx5IHByaW50ZWQgd2FybmluZ3MgZm9yIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMuIE5vIG5ldyBmdW5jdGlvbmFsIGxvZ2ljIG9yIHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEzOjU2OjI2LjUwMDUwNTE0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwNzAxMjI5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiB0aGUgTWljcm9jaGlwIEtTWiBEU0EgZHJpdmVyLiBJdCBtb3ZlcyBjaGlwLXNwZWNpZmljIGZ1bmN0aW9ucyAobGlrZSBNVFUgY29uZmlndXJhdGlvbiwgVEMgc2V0dXAsIE1JQiBzdGF0cyByZWFkaW5nLCBhbmQgZHJpdmUgc3RyZW5ndGggcGFyc2luZykgZnJvbSB0aGUgY29tbW9uIGBrc3pfY29tbW9uLmNgIGZpbGUgdG8gdGhlaXIgcmVzcGVjdGl2ZSBjaGlwLXNwZWNpZmljIGZpbGVzIChga3N6OC5jYCBhbmQgYGtzejk0NzcuY2ApLiBJdCBhbHNvIHJlbW92ZXMgYSBuby1vcCBjYWxsIHRvIGBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGhgIGluIGBsYW45Mzd4X21haW4uY2Agd2hpY2ggb25seSBwcmludGVkIHdhcm5pbmdzIGZvciB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLiBObyBuZXcgZnVuY3Rpb25hbCBsb2dpYyBvciByZWFjaGFibGUgY29kZSBwYXRocyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEzOjU2OjI2LjUwMDUxMzc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDYzNDcxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNmVkYmJkOGZhYjkxMDViMWFiYTBmNmY5NDE3ZjU0Nzk0NzZhNzlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTM6NTY6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xcbmluZGV4IDU4NjkxNjU3MGE4NDFiLi5jNGM3NjkwMjhhMjBjOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXFxuQEAgLTM2LDYgKzM2LDUyIEBAXFxuICNpbmNsdWRlIFxcXCJrc3o4X3JlZy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3N6OC5oXFxcIlxcbiBcXG4rLyoga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMgLSBEcml2ZSBzdHJlbmd0aCBtYXBwaW5nIGZvciBLU1o4ODYzLCBLU1o4ODczLCAuLlxcbisgKlxcdFxcdFxcdCAgICAgdmFyaWFudHMuXFxuKyAqIFRoaXMgdmFsdWVzIGFyZSBkb2N1bWVudGVkIGluIEtTWjg4NzMgYW5kIEtTWjg4NjMgZGF0YXNoZWV0cy5cXG4rICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7XFxuK1xcdHsgMCwgIDgwMDAgfSxcXG4rXFx0eyBLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIDE2MDAwIH0sXFxuK307XFxuK1xcbitzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcge1xcbitcXHR1NjQgcng7XFxuK1xcdHU2NCByeF9oaTtcXG4rXFx0dTY0IHJ4X3VuZGVyc2l6ZTtcXG4rXFx0dTY0IHJ4X2ZyYWdtZW50cztcXG4rXFx0dTY0IHJ4X292ZXJzaXplO1xcbitcXHR1NjQgcnhfamFiYmVycztcXG4rXFx0dTY0IHJ4X3N5bWJvbF9lcnI7XFxuK1xcdHU2NCByeF9jcmNfZXJyO1xcbitcXHR1NjQgcnhfYWxpZ25fZXJyO1xcbitcXHR1NjQgcnhfbWFjX2N0cmw7XFxuK1xcdHU2NCByeF9wYXVzZTtcXG4rXFx0dTY0IHJ4X2JjYXN0O1xcbitcXHR1NjQgcnhfbWNhc3Q7XFxuK1xcdHU2NCByeF91Y2FzdDtcXG4rXFx0dTY0IHJ4XzY0X29yX2xlc3M7XFxuK1xcdHU2NCByeF82NV8xMjc7XFxuK1xcdHU2NCByeF8xMjhfMjU1O1xcbitcXHR1NjQgcnhfMjU2XzUxMTtcXG4rXFx0dTY0IHJ4XzUxMl8xMDIzO1xcbitcXHR1NjQgcnhfMTAyNF8xNTIyO1xcbitcXHR1NjQgdHg7XFxuK1xcdHU2NCB0eF9oaTtcXG4rXFx0dTY0IHR4X2xhdGVfY29sO1xcbitcXHR1NjQgdHhfcGF1c2U7XFxuK1xcdHU2NCB0eF9iY2FzdDtcXG4rXFx0dTY0IHR4X21jYXN0O1xcbitcXHR1NjQgdHhfdWNhc3Q7XFxuK1xcdHU2NCB0eF9kZWZlcnJlZDtcXG4rXFx0dTY0IHR4X3RvdGFsX2NvbDtcXG4rXFx0dTY0IHR4X2V4Y19jb2w7XFxuK1xcdHU2NCB0eF9zaW5nbGVfY29sO1xcbitcXHR1NjQgdHhfbXVsdF9jb2w7XFxuK1xcdHU2NCByeF9kaXNjYXJkcztcXG4rXFx0dTY0IHR4X2Rpc2NhcmRzO1xcbit9O1xcbitcXG4gc3RhdGljIHZvaWQga3N6X2NmZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1MzIgYWRkciwgdTggYml0cywgYm9vbCBzZXQpXFxuIHtcXG4gXFx0a3N6X3JtdzgoZGV2LCBhZGRyLCBiaXRzLCBzZXQgPyBiaXRzIDogMCk7XFxuQEAgLTE1OCwxMCArMjA0LDE3IEBAIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQga3N6ODg2M19jaGFuZ2VfbXR1KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBmcmFtZV9zaXplKVxcbitzdGF0aWMgaW50IGtzejg4eHhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxcbiB7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGZyYW1lX3NpemU7XFxuIFxcdHU4IGN0cmwyID0gMDtcXG4gXFxuK1xcdGlmICghZHNhX2lzX2NwdV9wb3J0KGRldi1cXHUwMDNlZHMsIHBvcnQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZyYW1lX3NpemUgPSBtdHUgKyBWTEFOX0VUSF9ITEVOICsgRVRIX0ZDU19MRU47XFxuK1xcbiBcXHRpZiAoZnJhbWVfc2l6ZSBcXHUwMDNjPSBLU1o4X0xFR0FMX1BBQ0tFVF9TSVpFKVxcbiBcXHRcXHRjdHJsMiB8PSBLU1o4ODYzX0xFR0FMX1BBQ0tFVF9FTkFCTEU7XFxuIFxcdGVsc2UgaWYgKGZyYW1lX3NpemUgXFx1MDAzZSBLU1o4ODYzX05PUk1BTF9QQUNLRVRfU0laRSlcXG5AQCAtMTcxLDExICsyMjQsMTggQEAgc3RhdGljIGludCBrc3o4ODYzX2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXFxuIFxcdFxcdFxcdEtTWjg4NjNfSFVHRV9QQUNLRVRfRU5BQkxFLCBjdHJsMik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQga3N6ODc5NV9jaGFuZ2VfbXR1KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBmcmFtZV9zaXplKVxcbitzdGF0aWMgaW50IGtzejg3eHhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxcbiB7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4gXFx0dTggY3RybDEgPSAwLCBjdHJsMiA9IDA7XFxuK1xcdHUxNiBmcmFtZV9zaXplO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZGV2LVxcdTAwM2VkcywgcG9ydCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZnJhbWVfc2l6ZSA9IG10dSArIFZMQU5fRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjtcXG4rXFxuIFxcdGlmIChmcmFtZV9zaXplIFxcdTAwM2UgS1NaOF9MRUdBTF9QQUNLRVRfU0laRSlcXG4gXFx0XFx0Y3RybDIgfD0gU1dfTEVHQUxfUEFDS0VUX0RJU0FCTEU7XFxuIFxcdGlmIChmcmFtZV9zaXplIFxcdTAwM2UgS1NaODg2M19OT1JNQUxfUEFDS0VUX1NJWkUpXFxuQEAgLTE4OCwyOSArMjQ4LDE0IEBAIHN0YXRpYyBpbnQga3N6ODc5NV9jaGFuZ2VfbXR1KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBmcmFtZV9zaXplKVxcbiBcXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8yLCBTV19MRUdBTF9QQUNLRVRfRElTQUJMRSwgY3RybDIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzejhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxcbitzdGF0aWMgaW50IGtzejg3eHhfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbiB7XFxuLVxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4tXFx0dTE2IGZyYW1lX3NpemU7XFxuLVxcbi1cXHRpZiAoIWRzYV9pc19jcHVfcG9ydChkZXYtXFx1MDAzZWRzLCBwb3J0KSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRmcmFtZV9zaXplID0gbXR1ICsgVkxBTl9FVEhfSExFTiArIEVUSF9GQ1NfTEVOO1xcbi1cXG4tXFx0c3dpdGNoIChkZXYtXFx1MDAzZWNoaXBfaWQpIHtcXG4tXFx0Y2FzZSBLU1o4Nzk1X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaODc5NF9DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcXG4tXFx0XFx0cmV0dXJuIGtzejg3OTVfY2hhbmdlX210dShkZXYsIGZyYW1lX3NpemUpO1xcbi1cXHRjYXNlIEtTWjg0NjNfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o4OFgzX0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaODg2NF9DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg4OTVfQ0hJUF9JRDpcXG4tXFx0XFx0cmV0dXJuIGtzejg4NjNfY2hhbmdlX210dShkZXYsIGZyYW1lX3NpemUpO1xcbi1cXHR9XFxuK1xcdHJldHVybiBLU1o4Nzk1X0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XFxuK31cXG4gXFxuLVxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rc3RhdGljIGludCBrc3o4OHh4X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4re1xcbitcXHRyZXR1cm4gS1NaODg2M19IVUdFX1BBQ0tFVF9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGtzejhfcG9ydF9xdWV1ZV9zcGxpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IHF1ZXVlcylcXG5AQCAtMTc0Niw2ICsxNzkxLDE1OSBAQCBzdGF0aWMgdm9pZCBrc3o4X3BvcnRfbWlycm9yX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRcXHQgICAgIFBPUlRfTUlSUk9SX1NOSUZGRVIsIGZhbHNlKTtcXG4gfVxcbiBcXG4rc3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKVxcbit7XFxuK1xcdHU4IHJlZztcXG4rXFxuK1xcdHJlZyA9IDB4QzggKyBwb3J0ICogNDtcXG4rXFx0cmVnICs9ICgoMyAtIHF1ZXVlKSAvIDIpICogMjtcXG4rXFx0cmVnKys7XFxuK1xcdHJlZyAtPSAocXVldWUgXFx1MDAyNiAxKTtcXG4rXFx0cmV0dXJuIHJlZztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGtzejg4eDNfdGNfZXRzX2FkZCAtIENvbmZpZ3VyZSBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2hcXG4rICogQGRldjogUG9pbnRlciB0byB0aGUgS1NaIHN3aXRjaCBkZXZpY2Ugc3RydWN0dXJlXFxuKyAqIEBwb3J0OiBQb3J0IG51bWJlciB0byBjb25maWd1cmVcXG4rICogQHA6IFBvaW50ZXIgdG8gb2ZmbG9hZCByZXBsYWNlIHBhcmFtZXRlcnMgZGVzY3JpYmluZyBFVFMgYmFuZHMgYW5kIG1hcHBpbmdcXG4rICpcXG4rICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgdHdvIHNjaGVkdWxpbmcgbW9kZXM6IFN0cmljdCBQcmlvcml0eSBhbmRcXG4rICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLiBCb3RoIG1vZGVzIGhhdmUgZml4ZWQgYmVoYXZpb3I6XFxuKyAqICAgLSBObyBjb25maWd1cmFibGUgcXVldWUtdG8tcHJpb3JpdHkgbWFwcGluZ1xcbisgKiAgIC0gTm8gd2VpZ2h0IGFkanVzdG1lbnQgaW4gV0ZRIG1vZGVcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBzd2l0Y2ggdG8gdXNlIHN0cmljdCBwcmlvcml0eSBtb2RlIGJ5XFxuKyAqIGNsZWFyaW5nIHRoZSBXRlEgZW5hYmxlIGJpdCBmb3IgYWxsIHF1ZXVlcyBhc3NvY2lhdGVkIHdpdGggRVRTIGJhbmRzLlxcbisgKiBJZiBzdHJpY3QgcHJpb3JpdHkgaXMgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCB0aGUgc3dpdGNoIHdpbGwgZGVmYXVsdFxcbisgKiB0byBXRlEgbW9kZS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXFxuKyAqL1xcbitzdGF0aWMgaW50IGtzejg4eDNfdGNfZXRzX2FkZChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXFxuK3tcXG4rXFx0aW50IHJldCwgYmFuZDtcXG4rXFxuK1xcdC8qIE9ubHkgc3RyaWN0IHByaW9yaXR5IG1vZGUgaXMgc3VwcG9ydGVkIGZvciBub3cuXFxuK1xcdCAqIFdGUSBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbiBzdHJpY3QgbW9kZSBpcyBkaXNhYmxlZC5cXG4rXFx0ICovXFxuK1xcdGZvciAoYmFuZCA9IDA7IGJhbmQgXFx1MDAzYyBwLVxcdTAwM2ViYW5kczsgYmFuZCsrKSB7XFxuK1xcdFxcdGludCBxdWV1ZSA9IGtzel9ldHNfYmFuZF90b19xdWV1ZShwLCBiYW5kKTtcXG4rXFx0XFx0dTggcmVnO1xcbitcXG4rXFx0XFx0LyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXNcXG4rXFx0XFx0ICogcG9ydC9xdWV1ZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xcbitcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG4rXFx0XFx0XFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcXG4rXFxuK1xcdFxcdC8qIENsZWFyIFdGUSBlbmFibGUgYml0IHRvIHNlbGVjdCBzdHJpY3QgcHJpb3JpdHkgc2NoZWR1bGluZyAqL1xcbitcXHRcXHRyZXQgPSBrc3pfcm13OChkZXYsIHJlZywgS1NaODg3M19UWFFfV0ZRX0VOQUJMRSwgMCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICoga3N6ODh4M190Y19ldHNfZGVsIC0gUmVzZXQgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKSBjb25maWdcXG4rICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxcbisgKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBLU1ogc3dpdGNoIGRldmljZSBzdHJ1Y3R1cmVcXG4rICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIHJlc2V0XFxuKyAqXFxuKyAqIFRoZSBLU1o4OHgzIHN1cHBvcnRzIG9ubHkgZml4ZWQgc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IG9yXFxuKyAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKSwgd2l0aCBubyByZWNvbmZpZ3VyYXRpb24gb2Ygd2VpZ2h0cyBvclxcbisgKiBxdWV1ZSBtYXBwaW5nLiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgcG9ydOKAmXMgc2NoZWR1bGluZyBtb2RlIHRvXFxuKyAqIHRoZSBkZWZhdWx0LCB3aGljaCBpcyBXRlEsIGJ5IGVuYWJsaW5nIHRoZSBXRlEgYml0IGZvciBhbGwgcXVldWVzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcXG4rICovXFxuK3N0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbit7XFxuK1xcdGludCByZXQsIHF1ZXVlO1xcbitcXG4rXFx0LyogSXRlcmF0ZSBvdmVyIGFsbCB0cmFuc21pdCBxdWV1ZXMgZm9yIHRoaXMgcG9ydCAqL1xcbitcXHRmb3IgKHF1ZXVlID0gMDsgcXVldWUgXFx1MDAzYyBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZW51bV90eF9xdWV1ZXM7IHF1ZXVlKyspIHtcXG4rXFx0XFx0dTggcmVnO1xcbitcXG4rXFx0XFx0LyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXNcXG4rXFx0XFx0ICogcG9ydC9xdWV1ZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xcbitcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG4rXFx0XFx0XFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcXG4rXFxuK1xcdFxcdC8qIFNldCBXRlEgZW5hYmxlIGJpdCB0byByZXZlcnQgYmFjayB0byBkZWZhdWx0IHNjaGVkdWxpbmdcXG4rXFx0XFx0ICogbW9kZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsXFxuK1xcdFxcdFxcdCAgICAgICBLU1o4ODczX1RYUV9XRlFfRU5BQkxFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6OF90Y19zZXR1cF9xZGlzY19ldHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCEoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIlBhcmVudCBzaG91bGQgYmUgXFxcXFxcXCJyb290XFxcXFxcXCJcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAocW9wdC1cXHUwMDNlY29tbWFuZCkge1xcbitcXHRjYXNlIFRDX0VUU19SRVBMQUNFOlxcbitcXHRcXHRyZXQgPSBrc3pfdGNfZXRzX3ZhbGlkYXRlKGRldiwgcG9ydCwgXFx1MDAyNnFvcHQtXFx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHJldHVybiBrc3o4OHgzX3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcXHUwMDI2cW9wdC1cXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xcbitcXHRjYXNlIFRDX0VUU19ERVNUUk9ZOlxcbitcXHRcXHRyZXR1cm4ga3N6ODh4M190Y19ldHNfZGVsKGRldiwgcG9ydCk7XFxuK1xcdGNhc2UgVENfRVRTX1NUQVRTOlxcbitcXHRjYXNlIFRDX0VUU19HUkFGVDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6ODd4eF9zZXR1cF90YyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHQgICAgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6XFxuK1xcdFxcdHJldHVybiBrc3pfc2V0dXBfdGNfY2JzKGRzLCBwb3J0LCB0eXBlX2RhdGEpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3o4X3NldHVwX3RjKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxcbit7XFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX0NCUzpcXG4rXFx0XFx0cmV0dXJuIGtzel9zZXR1cF90Y19jYnMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfRVRTOlxcbitcXHRcXHRyZXR1cm4ga3N6OF90Y19zZXR1cF9xZGlzY19ldHMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBrc3o4Nzk1X2NwdV9pbnRlcmZhY2Vfc2VsZWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfcG9ydCAqcCA9IFxcdTAwMjZkZXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbkBAIC0yMDUzLDYgKzIyNTEsMTcxIEBAIHN0YXRpYyBpbnQga3N6OF9lbmFibGVfc3RwX2FkZHIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIGtzejhfd19zdGFfbWFjX3RhYmxlKGRldiwgMCwgXFx1MDAyNmFsdSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcHN0YXRzO1xcbitcXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzO1xcbitcXHRzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKnJhdztcXG4rXFx0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xcbitcXG4rXFx0bWliID0gXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xcbitcXHRzdGF0cyA9IFxcdTAwMjZtaWItXFx1MDAzZXN0YXRzNjQ7XFxuK1xcdHBzdGF0cyA9IFxcdTAwMjZtaWItXFx1MDAzZXBhdXNlX3N0YXRzO1xcbitcXHRyYXcgPSAoc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3ICopbWliLVxcdTAwM2Vjb3VudGVycztcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2bWliLVxcdTAwM2VzdGF0czY0X2xvY2spO1xcbitcXG4rXFx0c3RhdHMtXFx1MDAzZXJ4X3BhY2tldHMgPSByYXctXFx1MDAzZXJ4X2JjYXN0ICsgcmF3LVxcdTAwM2VyeF9tY2FzdCArIHJhdy1cXHUwMDNlcnhfdWNhc3QgK1xcbitcXHRcXHRyYXctXFx1MDAzZXJ4X3BhdXNlO1xcbitcXHRzdGF0cy1cXHUwMDNldHhfcGFja2V0cyA9IHJhdy1cXHUwMDNldHhfYmNhc3QgKyByYXctXFx1MDAzZXR4X21jYXN0ICsgcmF3LVxcdTAwM2V0eF91Y2FzdCArXFxuK1xcdFxcdHJhdy1cXHUwMDNldHhfcGF1c2U7XFxuK1xcbitcXHQvKiBIVyBjb3VudGVycyBhcmUgY291bnRpbmcgYnl0ZXMgKyBGQ1Mgd2hpY2ggaXMgbm90IGFjY2VwdGFibGVcXG4rXFx0ICogZm9yIHJ0bmxfbGlua19zdGF0czY0IGludGVyZmFjZVxcbitcXHQgKi9cXG4rXFx0c3RhdHMtXFx1MDAzZXJ4X2J5dGVzID0gcmF3LVxcdTAwM2VyeCArIHJhdy1cXHUwMDNlcnhfaGkgLSBzdGF0cy1cXHUwMDNlcnhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOO1xcbitcXHRzdGF0cy1cXHUwMDNldHhfYnl0ZXMgPSByYXctXFx1MDAzZXR4ICsgcmF3LVxcdTAwM2V0eF9oaSAtIHN0YXRzLVxcdTAwM2V0eF9wYWNrZXRzICogRVRIX0ZDU19MRU47XFxuK1xcbitcXHRzdGF0cy1cXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9IHJhdy1cXHUwMDNlcnhfdW5kZXJzaXplICsgcmF3LVxcdTAwM2VyeF9mcmFnbWVudHMgK1xcbitcXHRcXHRyYXctXFx1MDAzZXJ4X292ZXJzaXplO1xcbitcXG4rXFx0c3RhdHMtXFx1MDAzZXJ4X2NyY19lcnJvcnMgPSByYXctXFx1MDAzZXJ4X2NyY19lcnI7XFxuK1xcdHN0YXRzLVxcdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSByYXctXFx1MDAzZXJ4X2FsaWduX2VycjtcXG4rXFx0c3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQgPSByYXctXFx1MDAzZXJ4X2Rpc2NhcmRzO1xcbitcXHRzdGF0cy1cXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXFx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgKyBzdGF0cy1cXHUwMDNlcnhfY3JjX2Vycm9ycyArXFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9mcmFtZV9lcnJvcnMgICsgc3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQ7XFxuK1xcbitcXHRzdGF0cy1cXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfbGF0ZV9jb2w7XFxuK1xcdHN0YXRzLVxcdTAwM2V0eF9maWZvX2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfZGlzY2FyZHM7XFxuK1xcdHN0YXRzLVxcdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfZXhjX2NvbDtcXG4rXFx0c3RhdHMtXFx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVxcdTAwM2V0eF93aW5kb3dfZXJyb3JzICsgc3RhdHMtXFx1MDAzZXR4X2ZpZm9fZXJyb3JzICtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzO1xcbitcXG4rXFx0c3RhdHMtXFx1MDAzZW11bHRpY2FzdCA9IHJhdy1cXHUwMDNlcnhfbWNhc3Q7XFxuK1xcdHN0YXRzLVxcdTAwM2Vjb2xsaXNpb25zID0gcmF3LVxcdTAwM2V0eF90b3RhbF9jb2w7XFxuK1xcbitcXHRwc3RhdHMtXFx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9IHJhdy1cXHUwMDNldHhfcGF1c2U7XFxuK1xcdHBzdGF0cy1cXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcmF3LVxcdTAwM2VyeF9wYXVzZTtcXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZtaWItXFx1MDAzZXN0YXRzNjRfbG9jayk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb24gZm9yXFxuKyAqXFx0XFx0XFx0XFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxcbisgKiBAZGV2OiAgICAgICBrc3ogZGV2aWNlXFxuKyAqIEBwcm9wczogICAgIEFycmF5IG9mIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgdG8gYmUgc2V0XFxuKyAqIEBudW1fcHJvcHM6IE51bWJlciBvZiBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheVxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBzZXR0aW5ncyB0byBLU1o4OFgzIGNoaXBcXG4rICogdmFyaWFudHMgKEtTWjg4NzMsIEtTWjg4NjMpLlxcbisgKiBJdCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9ucyBhbGlnbiB3aXRoIHdoYXQgdGhlIGNoaXAgdmFyaWFudCBzdXBwb3J0cyBhbmRcXG4rICogd2FybnMgb3IgZXJyb3JzIG91dCBvbiB1bnN1cHBvcnRlZCBzZXR0aW5ncy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuKyAqL1xcbitzdGF0aWMgaW50IGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXFxuK1xcdFxcdFxcdFxcdFxcdGludCBudW1fcHJvcHMpXFxuK3tcXG4rXFx0c2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzKTtcXG4rXFx0aW50IG1pY3JvYW1wO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wcm9wczsgaSsrKSB7XFxuK1xcdFxcdGlmIChwcm9wc1tpXS52YWx1ZSA9PSAtMSB8fCBpID09IEtTWl9EUklWRVJfU1RSRU5HVEhfSU8pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZGV2X3dhcm4oZGV2LVxcdTAwM2VkZXYsIFxcXCIlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgcHJvcHNbaV0ubmFtZSk7XFxuK1xcdH1cXG4rXFxuK1xcdG1pY3JvYW1wID0gcHJvcHNbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10udmFsdWU7XFxuK1xcdHJldCA9IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoa3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsIGFycmF5X3NpemUsXFxuK1xcdFxcdFxcdFxcdFxcdG1pY3JvYW1wKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKGRldiwga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsXFxuK1xcdFxcdFxcdFxcdFxcdCBhcnJheV9zaXplLCBtaWNyb2FtcCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBrc3pfcm13OChkZXYsIEtTWjg4NzNfUkVHX0dMT0JBTF9DVFJMXzEyLFxcbitcXHRcXHRcXHRLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBrc3o4X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKCkgLSBFeHRyYWN0IGFuZCBhcHBseSBkcml2ZSBzdHJlbmd0aCBjb25maWd1cmF0aW9uc1xcbisgKlxcdFxcdFxcdFxcdCBmcm9tIGRldmljZSB0cmVlIHByb3BlcnRpZXMuXFxuKyAqIEBkZXY6XFx0a3N6IGRldmljZVxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZVxcbisgKiBkZXZpY2UgdHJlZSwgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHN1cHBvcnRlZCBjaGlwIHZhcmlhbnRzLCBhbmQgc2V0c1xcbisgKiB0aGVtIGFjY29yZGluZ2x5LiBBbiBlcnJvciBzaG91bGQgYmUgY3JpdGljYWwgaGVyZSwgYXMgdGhlIGRyaXZlIHN0cmVuZ3RoXFxuKyAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuKyAqL1xcbitzdGF0aWMgaW50IGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIG9mX3Byb3BzW10gPSB7XFxuK1xcdFxcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0hJXSA9IHtcXG4rXFx0XFx0XFx0Lm5hbWUgPSBcXFwibWljcm9jaGlwLGhpLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXFxcIixcXG4rXFx0XFx0XFx0Lm9mZnNldCA9IFNXX0hJX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXFxuK1xcdFxcdFxcdC52YWx1ZSA9IC0xLFxcbitcXHRcXHR9LFxcbitcXHRcXHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9MT10gPSB7XFxuK1xcdFxcdFxcdC5uYW1lID0gXFxcIm1pY3JvY2hpcCxsby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFxcXCIsXFxuK1xcdFxcdFxcdC5vZmZzZXQgPSBTV19MT19TUEVFRF9EUklWRV9TVFJFTkdUSF9TLFxcbitcXHRcXHRcXHQudmFsdWUgPSAtMSxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dID0ge1xcbitcXHRcXHRcXHQubmFtZSA9IFxcXCJtaWNyb2NoaXAsaW8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcXFwiLFxcbitcXHRcXHRcXHQub2Zmc2V0ID0gMCwgLyogZG9uJ3QgY2FyZSAqL1xcbitcXHRcXHRcXHQudmFsdWUgPSAtMSxcXG4rXFx0XFx0fSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlO1xcbitcXHRib29sIGhhdmVfYW55X3Byb3AgPSBmYWxzZTtcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG9mX3Byb3BzKTsgaSsrKSB7XFxuK1xcdFxcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBvZl9wcm9wc1tpXS5uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2b2ZfcHJvcHNbaV0udmFsdWUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVkFMKVxcbitcXHRcXHRcXHRkZXZfd2FybihkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWFkICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgb2ZfcHJvcHNbaV0ubmFtZSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aGF2ZV9hbnlfcHJvcCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaGF2ZV9hbnlfcHJvcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRzd2l0Y2ggKGRldi1cXHUwMDNlY2hpcF9pZCkge1xcbitcXHRjYXNlIEtTWjg4WDNfQ0hJUF9JRDpcXG4rXFx0XFx0cmV0dXJuIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIEFSUkFZX1NJWkUob2ZfcHJvcHMpKTtcXG4rXFx0Y2FzZSBLU1o4Nzk1X0NISVBfSUQ6XFxuK1xcdGNhc2UgS1NaODc5NF9DSElQX0lEOlxcbitcXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcXG4rXFx0XFx0cmV0dXJuIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdC8qIEtTWjg4NjQsIEtTWjg4OTUgKi9cXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKG9mX3Byb3BzW2ldLnZhbHVlID09IC0xKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGRldl93YXJuKGRldi1cXHUwMDNlZGV2LCBcXFwiJXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgdmFyaWFudFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IG9mX3Byb3BzW2ldLm5hbWUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5AQCAtMjA3NSw3ICsyNDM4LDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7XFxuK1xcdHJldCA9IGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoZGV2KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTI1NTEsOCArMjkxNCw4IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XFxuIFxcdC5wb3J0X21pcnJvcl9kZWxcXHQ9IGtzejhfcG9ydF9taXJyb3JfZGVsLFxcbiBcXHQuZ2V0X3N0YXRzNjRcXHRcXHQ9IGtzel9nZXRfc3RhdHM2NCxcXG4gXFx0LmdldF9wYXVzZV9zdGF0c1xcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcXG4tXFx0LnBvcnRfY2hhbmdlX210dVxcdD0ga3N6OF9jaGFuZ2VfbXR1LFxcbi1cXHQucG9ydF9tYXhfbXR1XFx0XFx0PSBrc3pfbWF4X210dSxcXG4rXFx0LnBvcnRfY2hhbmdlX210dVxcdD0ga3N6ODh4eF9jaGFuZ2VfbXR1LFxcbitcXHQucG9ydF9tYXhfbXR1XFx0XFx0PSBrc3o4OHh4X21heF9tdHUsXFxuIFxcdC5zdXNwZW5kXFx0XFx0PSBrc3pfc3VzcGVuZCxcXG4gXFx0LnJlc3VtZVxcdFxcdFxcdD0ga3N6X3Jlc3VtZSxcXG4gXFx0LmdldF90c19pbmZvXFx0XFx0PSBrc3pfZ2V0X3RzX2luZm8sXFxuQEAgLTI1NjAsNyArMjkyMyw3IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XFxuIFxcdC5wb3J0X2h3dHN0YW1wX3NldFxcdD0ga3N6X2h3dHN0YW1wX3NldCxcXG4gXFx0LnBvcnRfdHh0c3RhbXBcXHRcXHQ9IGtzel9wb3J0X3R4dHN0YW1wLFxcbiBcXHQucG9ydF9yeHRzdGFtcFxcdFxcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXFxuLVxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3pfc2V0dXBfdGMsXFxuK1xcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3o4X3NldHVwX3RjLFxcbiBcXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXFx0PSBrc3pfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLFxcbiBcXHQucG9ydF9zZXRfZGVmYXVsdF9wcmlvXFx0PSBrc3pfcG9ydF9zZXRfZGVmYXVsdF9wcmlvLFxcbiBcXHQucG9ydF9nZXRfZHNjcF9wcmlvXFx0PSBrc3pfcG9ydF9nZXRfZHNjcF9wcmlvLFxcbkBAIC0yNjAxLDggKzI5NjQsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzID0ge1xcbiBcXHQucG9ydF9taXJyb3JfZGVsXFx0PSBrc3o4X3BvcnRfbWlycm9yX2RlbCxcXG4gXFx0LmdldF9zdGF0czY0XFx0XFx0PSBrc3pfZ2V0X3N0YXRzNjQsXFxuIFxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IGtzel9nZXRfcGF1c2Vfc3RhdHMsXFxuLVxcdC5wb3J0X2NoYW5nZV9tdHVcXHQ9IGtzejhfY2hhbmdlX210dSxcXG4tXFx0LnBvcnRfbWF4X210dVxcdFxcdD0ga3N6X21heF9tdHUsXFxuK1xcdC5wb3J0X2NoYW5nZV9tdHVcXHQ9IGtzejg3eHhfY2hhbmdlX210dSxcXG4rXFx0LnBvcnRfbWF4X210dVxcdFxcdD0ga3N6ODd4eF9tYXhfbXR1LFxcbiBcXHQuc3VzcGVuZFxcdFxcdD0ga3N6X3N1c3BlbmQsXFxuIFxcdC5yZXN1bWVcXHRcXHRcXHQ9IGtzel9yZXN1bWUsXFxuIFxcdC5nZXRfdHNfaW5mb1xcdFxcdD0ga3N6X2dldF90c19pbmZvLFxcbkBAIC0yNjEwLDcgKzI5NzMsNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzID0ge1xcbiBcXHQucG9ydF9od3RzdGFtcF9zZXRcXHQ9IGtzel9od3RzdGFtcF9zZXQsXFxuIFxcdC5wb3J0X3R4dHN0YW1wXFx0XFx0PSBrc3pfcG9ydF90eHRzdGFtcCxcXG4gXFx0LnBvcnRfcnh0c3RhbXBcXHRcXHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxcbi1cXHQucG9ydF9zZXR1cF90Y1xcdFxcdD0ga3N6X3NldHVwX3RjLFxcbitcXHQucG9ydF9zZXR1cF90Y1xcdFxcdD0ga3N6ODd4eF9zZXR1cF90YyxcXG4gXFx0LnBvcnRfZ2V0X2RlZmF1bHRfcHJpb1xcdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcXG4gXFx0LnBvcnRfc2V0X2RlZmF1bHRfcHJpb1xcdD0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcXG4gXFx0LnBvcnRfZ2V0X2RzY3BfcHJpb1xcdD0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbyxcXG5AQCAtMjY1Miw4ICszMDE1LDggQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg4eHhfc3dpdGNoX29wcyA9IHtcXG4gXFx0LnBvcnRfbWlycm9yX2RlbFxcdD0ga3N6OF9wb3J0X21pcnJvcl9kZWwsXFxuIFxcdC5nZXRfc3RhdHM2NFxcdFxcdD0ga3N6X2dldF9zdGF0czY0LFxcbiBcXHQuZ2V0X3BhdXNlX3N0YXRzXFx0PSBrc3pfZ2V0X3BhdXNlX3N0YXRzLFxcbi1cXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBrc3o4X2NoYW5nZV9tdHUsXFxuLVxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGtzel9tYXhfbXR1LFxcbitcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBrc3o4OHh4X2NoYW5nZV9tdHUsXFxuK1xcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGtzejg4eHhfbWF4X210dSxcXG4gXFx0LmdldF93b2xcXHRcXHQ9IGtzel9nZXRfd29sLFxcbiBcXHQuc2V0X3dvbFxcdFxcdD0ga3N6X3NldF93b2wsXFxuIFxcdC5zdXNwZW5kXFx0XFx0PSBrc3pfc3VzcGVuZCxcXG5AQCAtMjY2Myw3ICszMDI2LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg4eHhfc3dpdGNoX29wcyA9IHtcXG4gXFx0LnBvcnRfaHd0c3RhbXBfc2V0XFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxcbiBcXHQucG9ydF90eHRzdGFtcFxcdFxcdD0ga3N6X3BvcnRfdHh0c3RhbXAsXFxuIFxcdC5wb3J0X3J4dHN0YW1wXFx0XFx0PSBrc3pfcG9ydF9yeHRzdGFtcCxcXG4tXFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IGtzel9zZXR1cF90YyxcXG4rXFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IGtzejhfc2V0dXBfdGMsXFxuIFxcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXFxuIFxcdC5wb3J0X3NldF9kZWZhdWx0X3ByaW9cXHQ9IGtzel9wb3J0X3NldF9kZWZhdWx0X3ByaW8sXFxuIFxcdC5wb3J0X2dldF9kc2NwX3ByaW9cXHQ9IGtzel9wb3J0X2dldF9kc2NwX3ByaW8sXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcXG5pbmRleCBmM2YwYzk4ZGZiNWE3Zi4uM2VlOTk1NTQ1YzU3OTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9oc3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc2EuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pZWVlODAyMXEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zd2l0Y2hkZXYuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrc3o5NDc3X3JlZy5oXFxcIlxcbkBAIC02MCw2ICs2MSwxMSBAQCBzdGF0aWMgaW50IGtzejk0NzdfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxcbiBcXHRcXHRcXHRcXHQgIFJFR19TV19NVFVfTUFTSywgZnJhbWVfc2l6ZSk7XFxuIH1cXG4gXFxuK2ludCBrc3o5NDc3X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4re1xcbitcXHRyZXR1cm4gS1NaOTQ3N19NQVhfRlJBTUVfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBrc3o5NDc3X3dhaXRfdmxhbl9jdHJsX3JlYWR5KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHZhbDtcXG5AQCAtNDc4LDggKzQ4NCw4IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19oYWxmX2R1cGxleF9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1pbnQga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcXG4tXFx0XFx0XFx0ICAgdTY0IHR4X2xhdGVfY29sKVxcbitzdGF0aWMgaW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgdTY0IHR4X2xhdGVfY29sKVxcbiB7XFxuIFxcdHU4IHN0YXR1cztcXG4gXFx0aW50IHJldDtcXG5AQCAtNDk3LDYgKzUwMywyNCBAQCBpbnQga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3N6OTQ3N19yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfc3RhdHNfcmF3ICpyYXc7XFxuK1xcdHN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGtzel9yX21pYl9zdGF0czY0KGRldiwgcG9ydCk7XFxuK1xcbitcXHRpZiAoZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VwaHlfZXJyYXRhXzk0NzcgXFx1MDAyNlxcdTAwMjYgIWtzel9pc19zZ21paV9wb3J0KGRldiwgcG9ydCkpIHtcXG4rXFx0XFx0bWliID0gXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xcbitcXHRcXHRyYXcgPSAoc3RydWN0IGtzel9zdGF0c19yYXcgKiltaWItXFx1MDAzZWNvdW50ZXJzO1xcbitcXG4rXFx0XFx0cmV0ID0ga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihkZXYsIHBvcnQsIHJhdy1cXHUwMDNldHhfbGF0ZV9jb2wpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIG1vbml0b3IgdHJhbnNtaXNzaW9uIGhhbHRcXFxcblxcXCIpO1xcbitcXHR9XFxuK307XFxuK1xcbiB2b2lkIGtzejk0NzdfcG9ydF9pbml0X2NudChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWIgPSBcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1twb3J0XS5taWI7XFxuQEAgLTExNzYsNiArMTIwMCw1OCBAQCB2b2lkIGtzejk0NzdfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdCAgICAgUE9SVF9NSVJST1JfU05JRkZFUiwgZmFsc2UpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBrc3o5NDc3X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbit7XFxuK1xcdGNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXhtaWlfY3RybDE7XFxuK1xcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4rXFx0Ym9vbCBnYml0ID0gZmFsc2U7XFxuK1xcdHU4IGRhdGE4O1xcbitcXHRib29sIHZhbDtcXG4rXFxuK1xcdGtzel9wcmVhZDgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBcXHUwMDI2ZGF0YTgpO1xcbitcXG4rXFx0dmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7XFxuK1xcbitcXHRpZiAodmFsID09IGJpdHZhbFtQX0dNSUlfMUdCSVRdKVxcbitcXHRcXHRnYml0ID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBnYml0O1xcbit9XFxuK1xcbitzdGF0aWMgcGh5X2ludGVyZmFjZV90IGtzejk0NzdfZ2V0X3htaWkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgZ2JpdClcXG4re1xcbitcXHRjb25zdCB1OCAqYml0dmFsID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2V4bWlpX2N0cmwxO1xcbitcXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcdHU4IGRhdGE4O1xcbitcXHR1OCB2YWw7XFxuK1xcbitcXHRrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgXFx1MDAyNmRhdGE4KTtcXG4rXFxuK1xcdHZhbCA9IEZJRUxEX0dFVChQX01JSV9TRUxfTSwgZGF0YTgpO1xcbitcXG4rXFx0aWYgKHZhbCA9PSBiaXR2YWxbUF9NSUlfU0VMXSkge1xcbitcXHRcXHRpZiAoZ2JpdClcXG4rXFx0XFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcXG4rXFx0fSBlbHNlIGlmICh2YWwgPT0gYml0dmFsW1BfUk1JSV9TRUxdKSB7XFxuK1xcdFxcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk7XFxuK1xcdFxcdGlmIChkYXRhOCBcXHUwMDI2IFBfUkdNSUlfSURfRUdfRU5BQkxFKVxcbitcXHRcXHRcXHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDtcXG4rXFx0XFx0aWYgKGRhdGE4IFxcdTAwMjYgUF9SR01JSV9JRF9JR19FTkFCTEUpIHtcXG4rXFx0XFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ7XFxuK1xcdFxcdFxcdGlmIChkYXRhOCBcXHUwMDI2IFBfUkdNSUlfSURfRUdfRU5BQkxFKVxcbitcXHRcXHRcXHRcXHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGludGVyZmFjZTtcXG4rfVxcbitcXG4gc3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF9pbnRlcmZhY2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuIHtcXG4gXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG5AQCAtMTE4NCw5ICsxMjYwLDkgQEAgc3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF9pbnRlcmZhY2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuIFxcdGlmIChkZXYtXFx1MDAzZWluZm8tXFx1MDAzZWludGVybmFsX3BoeVtwb3J0XSlcXG4gXFx0XFx0cmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTtcXG4gXFxuLVxcdGdiaXQgPSBrc3pfZ2V0X2diaXQoZGV2LCBwb3J0KTtcXG4rXFx0Z2JpdCA9IGtzejk0NzdfZ2V0X2diaXQoZGV2LCBwb3J0KTtcXG4gXFxuLVxcdGludGVyZmFjZSA9IGtzel9nZXRfeG1paShkZXYsIHBvcnQsIGdiaXQpO1xcbitcXHRpbnRlcmZhY2UgPSBrc3o5NDc3X2dldF94bWlpKGRldiwgcG9ydCwgZ2JpdCk7XFxuIFxcbiBcXHRyZXR1cm4gaW50ZXJmYWNlO1xcbiB9XFxuQEAgLTEzMzUsNiArMTQxMSwyOCBAQCBzdGF0aWMgdm9pZCBrc3o5NDc3X3BvcnRfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgY3B1X3BvcnQpXFxuIFxcdGtzel9wd3JpdGU4KGRldiwgcG9ydCwgcmVnc1tSRUdfUE9SVF9QTUVfQ1RSTF0sIDApO1xcbiB9XFxuIFxcbitpbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuK3tcXG4rXFx0dTMyIHF1ZXVlX21hcCA9IDA7XFxuK1xcdGludCBpcG07XFxuK1xcbitcXHRmb3IgKGlwbSA9IDA7IGlwbSBcXHUwMDNjIGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbnVtX2lwbXM7IGlwbSsrKSB7XFxuK1xcdFxcdGludCBxdWV1ZTtcXG4rXFxuK1xcdFxcdC8qIFRyYWZmaWMgVHlwZSAoVFQpIGlzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEludGVybmFsIFByaW9yaXR5XFxuK1xcdFxcdCAqIE1hcCAoSVBNKSBpbiB0aGUgc3dpdGNoLiBUcmFmZmljIENsYXNzIChUQykgaXNcXG4rXFx0XFx0ICogY29ycmVzcG9uZGluZyB0byB0aGUgcXVldWUgaW4gdGhlIHN3aXRjaC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHF1ZXVlID0gaWVlZTgwMjFxX3R0X3RvX3RjKGlwbSwgZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fdHhfcXVldWVzKTtcXG4rXFx0XFx0aWYgKHF1ZXVlIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHF1ZXVlO1xcbitcXG4rXFx0XFx0cXVldWVfbWFwIHw9IHF1ZXVlIFxcdTAwM2NcXHUwMDNjIChpcG0gKiBLU1o5NDc3X1BPUlRfVENfTUFQX1MpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4ga3N6X3B3cml0ZTMyKGRldiwgcG9ydCwgS1NaOTQ3N19QT1JUX01SSV9UQ19NQVBfXzQsIHF1ZXVlX21hcCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6OTQ3N19kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5AQCAtMTUxNyw2ICsxNjE1LDU4IEBAIGludCBrc3o5NDc3X2VuYWJsZV9zdHBfYWRkcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGtzejk0NzdfcGFyc2VfZHJpdmVfc3RyZW5ndGgoKSAtIEV4dHJhY3QgYW5kIGFwcGx5IGRyaXZlIHN0cmVuZ3RoXFxuKyAqXFx0XFx0XFx0XFx0ICAgIGNvbmZpZ3VyYXRpb25zIGZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy5cXG4rICogQGRldjpcXHRrc3ogZGV2aWNlXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIGZyb20gdGhlXFxuKyAqIGRldmljZSB0cmVlLCB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGNoaXAgdmFyaWFudHMsIGFuZCBzZXRzXFxuKyAqIHRoZW0gYWNjb3JkaW5nbHkuIEFuIGVycm9yIHNob3VsZCBiZSBjcml0aWNhbCBoZXJlLCBhcyB0aGUgZHJpdmUgc3RyZW5ndGhcXG4rICogc2V0dGluZ3MgYXJlIGNydWNpYWwgZm9yIEVNSSBjb21wbGlhbmNlLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbnQga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHtcXG4rXFx0XFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSEldID0ge1xcbitcXHRcXHRcXHQubmFtZSA9IFxcXCJtaWNyb2NoaXAsaGktZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcXFwiLFxcbitcXHRcXHRcXHQub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcXG4rXFx0XFx0XFx0LnZhbHVlID0gLTEsXFxuK1xcdFxcdH0sXFxuK1xcdFxcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0xPXSA9IHtcXG4rXFx0XFx0XFx0Lm5hbWUgPSBcXFwibWljcm9jaGlwLGxvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXFxcIixcXG4rXFx0XFx0XFx0Lm9mZnNldCA9IFNXX0xPX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXFxuK1xcdFxcdFxcdC52YWx1ZSA9IC0xLFxcbitcXHRcXHR9LFxcbitcXHRcXHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10gPSB7XFxuK1xcdFxcdFxcdC5uYW1lID0gXFxcIm1pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFxcXCIsXFxuK1xcdFxcdFxcdC5vZmZzZXQgPSAwLCAvKiBkb24ndCBjYXJlICovXFxuK1xcdFxcdFxcdC52YWx1ZSA9IC0xLFxcbitcXHRcXHR9LFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGU7XFxuK1xcdGJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpKyspIHtcXG4rXFx0XFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIG9mX3Byb3BzW2ldLm5hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZvZl9wcm9wc1tpXS52YWx1ZSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FSU5WQUwpXFxuK1xcdFxcdFxcdGRldl93YXJuKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWQgJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBvZl9wcm9wc1tpXS5uYW1lKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRoYXZlX2FueV9wcm9wID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFoYXZlX2FueV9wcm9wKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcywgQVJSQVlfU0laRShvZl9wcm9wcykpO1xcbit9XFxuIHN0YXRpYyBpbnQga3N6OTQ3N19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbkBAIC0xNTM5LDcgKzE2ODksNyBAQCBzdGF0aWMgaW50IGtzejk0Nzdfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoZGV2KTtcXG4rXFx0cmV0ID0ga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjA1Miw3ICsyMjAyLDcgQEAgY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejk0NzdfZGV2X29wcyA9IHtcXG4gXFx0LmNmZ19wb3J0X21lbWJlciA9IGtzejk0NzdfY2ZnX3BvcnRfbWVtYmVyLFxcbiBcXHQucl9taWJfY250ID0ga3N6OTQ3N19yX21pYl9jbnQsXFxuIFxcdC5yX21pYl9wa3QgPSBrc3o5NDc3X3JfbWliX3BrdCxcXG4tXFx0LnJfbWliX3N0YXQ2NCA9IGtzel9yX21pYl9zdGF0czY0LFxcbitcXHQucl9taWJfc3RhdDY0ID0ga3N6OTQ3N19yX21pYl9zdGF0czY0LFxcbiBcXHQuZnJlZXplX21pYiA9IGtzejk0NzdfZnJlZXplX21pYixcXG4gXFx0LnBvcnRfaW5pdF9jbnQgPSBrc3o5NDc3X3BvcnRfaW5pdF9jbnQsXFxuIFxcdC5wbWVfd3JpdGU4ID0ga3N6X3dyaXRlOCxcXG5AQCAtMjA5OCw3ICsyMjQ4LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejk0Nzdfc3dpdGNoX29wcyA9IHtcXG4gXFx0LmdldF9zdGF0czY0XFx0XFx0PSBrc3pfZ2V0X3N0YXRzNjQsXFxuIFxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IGtzel9nZXRfcGF1c2Vfc3RhdHMsXFxuIFxcdC5wb3J0X2NoYW5nZV9tdHVcXHQ9IGtzejk0NzdfY2hhbmdlX210dSxcXG4tXFx0LnBvcnRfbWF4X210dVxcdFxcdD0ga3N6X21heF9tdHUsXFxuK1xcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGtzejk0NzdfbWF4X210dSxcXG4gXFx0LmdldF93b2xcXHRcXHQ9IGtzel9nZXRfd29sLFxcbiBcXHQuc2V0X3dvbFxcdFxcdD0ga3N6X3NldF93b2wsXFxuIFxcdC5zdXNwZW5kXFx0XFx0PSBrc3pfc3VzcGVuZCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaFxcbmluZGV4IDkyYTFkODg5MjI0ZDNlLi5hODRjMDAwMDAwZTY2ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5oXFxuQEAgLTIxLDYgKzIxLDcgQEAgdm9pZCBrc3o5NDc3X2ZyZWV6ZV9taWIoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgZnJlZXplKTtcXG4gdm9pZCBrc3o5NDc3X3BvcnRfaW5pdF9jbnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xcbiBpbnQga3N6OTQ3N19wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdFxcdGJvb2wgZmxhZywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4raW50IGtzejk0NzdfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KTtcXG4gaW50IGtzejk0NzdfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbkBAIC0zMSw4ICszMiw2IEBAIGludCBrc3o5NDc3X3BvcnRfbWlycm9yX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRcXHQgICAgYm9vbCBpbmdyZXNzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiB2b2lkIGtzejk0NzdfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGRzYV9tYWxsX21pcnJvcl90Y19lbnRyeSAqbWlycm9yKTtcXG4taW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXFxuLVxcdFxcdFxcdCAgIHU2NCB0eF9sYXRlX2NvbCk7XFxuIGludCBrc3o5NDc3X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdCAgICAgZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKTtcXG4gaW50IGtzejk0NzdfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbkBAIC00NSw2ICs0NCw3IEBAIGludCBrc3o5NDc3X21kYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfbWRiICptZGIsIHN0cnVjdCBkc2FfZGIgZGIpO1xcbiBpbnQga3N6OTQ3N19lbmFibGVfc3RwX2FkZHIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuIHZvaWQga3N6OTQ3N19wb3J0X3F1ZXVlX3NwbGl0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcXG4raW50IGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcXG4gXFxuIGludCBrc3o5NDc3X3BvcnRfYWNsX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xcbiB2b2lkIGtzejk0NzdfcG9ydF9hY2xfZnJlZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG5pbmRleCBkMTcyNjc3OGJiNDg4ZS4uNjdhYjZkZGI5ZTUzZjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xcbkBAIC0zNyw4MiArMzcsNiBAQFxcbiBcXG4gI2RlZmluZSBNSUJfQ09VTlRFUl9OVU0gMHgyMFxcbiBcXG4tc3RydWN0IGtzel9zdGF0c19yYXcge1xcbi1cXHR1NjQgcnhfaGk7XFxuLVxcdHU2NCByeF91bmRlcnNpemU7XFxuLVxcdHU2NCByeF9mcmFnbWVudHM7XFxuLVxcdHU2NCByeF9vdmVyc2l6ZTtcXG4tXFx0dTY0IHJ4X2phYmJlcnM7XFxuLVxcdHU2NCByeF9zeW1ib2xfZXJyO1xcbi1cXHR1NjQgcnhfY3JjX2VycjtcXG4tXFx0dTY0IHJ4X2FsaWduX2VycjtcXG4tXFx0dTY0IHJ4X21hY19jdHJsO1xcbi1cXHR1NjQgcnhfcGF1c2U7XFxuLVxcdHU2NCByeF9iY2FzdDtcXG4tXFx0dTY0IHJ4X21jYXN0O1xcbi1cXHR1NjQgcnhfdWNhc3Q7XFxuLVxcdHU2NCByeF82NF9vcl9sZXNzO1xcbi1cXHR1NjQgcnhfNjVfMTI3O1xcbi1cXHR1NjQgcnhfMTI4XzI1NTtcXG4tXFx0dTY0IHJ4XzI1Nl81MTE7XFxuLVxcdHU2NCByeF81MTJfMTAyMztcXG4tXFx0dTY0IHJ4XzEwMjRfMTUyMjtcXG4tXFx0dTY0IHJ4XzE1MjNfMjAwMDtcXG4tXFx0dTY0IHJ4XzIwMDE7XFxuLVxcdHU2NCB0eF9oaTtcXG4tXFx0dTY0IHR4X2xhdGVfY29sO1xcbi1cXHR1NjQgdHhfcGF1c2U7XFxuLVxcdHU2NCB0eF9iY2FzdDtcXG4tXFx0dTY0IHR4X21jYXN0O1xcbi1cXHR1NjQgdHhfdWNhc3Q7XFxuLVxcdHU2NCB0eF9kZWZlcnJlZDtcXG4tXFx0dTY0IHR4X3RvdGFsX2NvbDtcXG4tXFx0dTY0IHR4X2V4Y19jb2w7XFxuLVxcdHU2NCB0eF9zaW5nbGVfY29sO1xcbi1cXHR1NjQgdHhfbXVsdF9jb2w7XFxuLVxcdHU2NCByeF90b3RhbDtcXG4tXFx0dTY0IHR4X3RvdGFsO1xcbi1cXHR1NjQgcnhfZGlzY2FyZHM7XFxuLVxcdHU2NCB0eF9kaXNjYXJkcztcXG4tfTtcXG4tXFxuLXN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyB7XFxuLVxcdHU2NCByeDtcXG4tXFx0dTY0IHJ4X2hpO1xcbi1cXHR1NjQgcnhfdW5kZXJzaXplO1xcbi1cXHR1NjQgcnhfZnJhZ21lbnRzO1xcbi1cXHR1NjQgcnhfb3ZlcnNpemU7XFxuLVxcdHU2NCByeF9qYWJiZXJzO1xcbi1cXHR1NjQgcnhfc3ltYm9sX2VycjtcXG4tXFx0dTY0IHJ4X2NyY19lcnI7XFxuLVxcdHU2NCByeF9hbGlnbl9lcnI7XFxuLVxcdHU2NCByeF9tYWNfY3RybDtcXG4tXFx0dTY0IHJ4X3BhdXNlO1xcbi1cXHR1NjQgcnhfYmNhc3Q7XFxuLVxcdHU2NCByeF9tY2FzdDtcXG4tXFx0dTY0IHJ4X3VjYXN0O1xcbi1cXHR1NjQgcnhfNjRfb3JfbGVzcztcXG4tXFx0dTY0IHJ4XzY1XzEyNztcXG4tXFx0dTY0IHJ4XzEyOF8yNTU7XFxuLVxcdHU2NCByeF8yNTZfNTExO1xcbi1cXHR1NjQgcnhfNTEyXzEwMjM7XFxuLVxcdHU2NCByeF8xMDI0XzE1MjI7XFxuLVxcdHU2NCB0eDtcXG4tXFx0dTY0IHR4X2hpO1xcbi1cXHR1NjQgdHhfbGF0ZV9jb2w7XFxuLVxcdHU2NCB0eF9wYXVzZTtcXG4tXFx0dTY0IHR4X2JjYXN0O1xcbi1cXHR1NjQgdHhfbWNhc3Q7XFxuLVxcdHU2NCB0eF91Y2FzdDtcXG4tXFx0dTY0IHR4X2RlZmVycmVkO1xcbi1cXHR1NjQgdHhfdG90YWxfY29sO1xcbi1cXHR1NjQgdHhfZXhjX2NvbDtcXG4tXFx0dTY0IHR4X3NpbmdsZV9jb2w7XFxuLVxcdHU2NCB0eF9tdWx0X2NvbDtcXG4tXFx0dTY0IHJ4X2Rpc2NhcmRzO1xcbi1cXHR1NjQgdHhfZGlzY2FyZHM7XFxuLX07XFxuLVxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGtzel9taWJfbmFtZXMga3N6ODh4eF9taWJfbmFtZXNbXSA9IHtcXG4gXFx0eyAweDAwLCBcXFwicnhcXFwiIH0sXFxuIFxcdHsgMHgwMSwgXFxcInJ4X2hpXFxcIiB9LFxcbkBAIC0xODksMjggKzExMyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X21pYl9uYW1lcyBrc3o5NDc3X21pYl9uYW1lc1tdID0ge1xcbiBcXHR7IDB4ODMsIFxcXCJ0eF9kaXNjYXJkc1xcXCIgfSxcXG4gfTtcXG4gXFxuLXN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Age1xcbi1cXHRjb25zdCBjaGFyICpuYW1lO1xcbi1cXHRpbnQgb2Zmc2V0O1xcbi1cXHRpbnQgdmFsdWU7XFxuLX07XFxuLVxcbi1lbnVtIGtzel9kcml2ZXJfc3RyZW5ndGhfdHlwZSB7XFxuLVxcdEtTWl9EUklWRVJfU1RSRU5HVEhfSEksXFxuLVxcdEtTWl9EUklWRVJfU1RSRU5HVEhfTE8sXFxuLVxcdEtTWl9EUklWRVJfU1RSRU5HVEhfSU8sXFxuLX07XFxuLVxcbi0vKipcXG4tICogc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAtIGRyaXZlIHN0cmVuZ3RoIG1hcHBpbmdcXG4tICogQHJlZ192YWw6XFx0cmVnaXN0ZXIgdmFsdWVcXG4tICogQG1pY3JvYW1wOlxcdG1pY3JvYW1wIHZhbHVlXFxuLSAqL1xcbi1zdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIHtcXG4tXFx0dTMyIHJlZ192YWw7XFxuLVxcdHUzMiBtaWNyb2FtcDtcXG4tfTtcXG4tXFxuIC8qIGtzejk0NzdfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaOTQ3NyB2YXJpYW50c1xcbiAgKlxcbiAgKiBUaGlzIHZhbHVlcyBhcmUgbm90IGRvY3VtZW50ZWQgaW4gS1NaOTQ3NyB2YXJpYW50cyBidXQgY29uZmlybWVkIGJ5XFxuQEAgLTI0NiwxNSArMTQ4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHNbXSA9IHtcXG4gXFx0eyBTV19EUklWRV9TVFJFTkdUSF8yOE1BLCAyODAwMCB9LFxcbiB9O1xcbiBcXG4tLyoga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMgLSBEcml2ZSBzdHJlbmd0aCBtYXBwaW5nIGZvciBLU1o4ODYzLCBLU1o4ODczLCAuLlxcbi0gKlxcdFxcdFxcdCAgICAgdmFyaWFudHMuXFxuLSAqIFRoaXMgdmFsdWVzIGFyZSBkb2N1bWVudGVkIGluIEtTWjg4NzMgYW5kIEtTWjg4NjMgZGF0YXNoZWV0cy5cXG4tICovXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7XFxuLVxcdHsgMCwgIDgwMDAgfSxcXG4tXFx0eyBLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIDE2MDAwIH0sXFxuLX07XFxuLVxcbiAvKipcXG4gICoga3N6X3BoeWxpbmtfbWFjX2Rpc2FibGVfdHhfbHBpKCkgLSBDYWxsYmFjayB0byBzaWduYWwgTFBJIHN1cHBvcnQgKER1bW15KVxcbiAgKiBAY29uZmlnOiBwaHlsaW5rIGNvbmZpZyBzdHJ1Y3R1cmVcXG5AQCAtMjAxMyw3ICsxOTA2LDYgQEAgdm9pZCBrc3pfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4gXFx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cztcXG4gXFx0c3RydWN0IGtzel9zdGF0c19yYXcgKnJhdztcXG4gXFx0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xcbi1cXHRpbnQgcmV0O1xcbiBcXG4gXFx0bWliID0gXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xcbiBcXHRzdGF0cyA9IFxcdTAwMjZtaWItXFx1MDAzZXN0YXRzNjQ7XFxuQEAgLTIwNTUsNjEgKzE5NDcsNiBAQCB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbiBcXHRwc3RhdHMtXFx1MDAzZXJ4X3BhdXNlX2ZyYW1lcyA9IHJhdy1cXHUwMDNlcnhfcGF1c2U7XFxuIFxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2bWliLVxcdTAwM2VzdGF0czY0X2xvY2spO1xcbi1cXG4tXFx0aWYgKGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcGh5X2VycmF0YV85NDc3IFxcdTAwMjZcXHUwMDI2ICFrc3pfaXNfc2dtaWlfcG9ydChkZXYsIHBvcnQpKSB7XFxuLVxcdFxcdHJldCA9IGtzejk0NzdfZXJyYXRhX21vbml0b3IoZGV2LCBwb3J0LCByYXctXFx1MDAzZXR4X2xhdGVfY29sKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBtb25pdG9yIHRyYW5zbWlzc2lvbiBoYWx0XFxcXG5cXFwiKTtcXG4tXFx0fVxcbi19XFxuLVxcbi12b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4te1xcbi1cXHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcHN0YXRzO1xcbi1cXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzO1xcbi1cXHRzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKnJhdztcXG4tXFx0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xcbi1cXG4tXFx0bWliID0gXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xcbi1cXHRzdGF0cyA9IFxcdTAwMjZtaWItXFx1MDAzZXN0YXRzNjQ7XFxuLVxcdHBzdGF0cyA9IFxcdTAwMjZtaWItXFx1MDAzZXBhdXNlX3N0YXRzO1xcbi1cXHRyYXcgPSAoc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3ICopbWliLVxcdTAwM2Vjb3VudGVycztcXG4tXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2bWliLVxcdTAwM2VzdGF0czY0X2xvY2spO1xcbi1cXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X3BhY2tldHMgPSByYXctXFx1MDAzZXJ4X2JjYXN0ICsgcmF3LVxcdTAwM2VyeF9tY2FzdCArIHJhdy1cXHUwMDNlcnhfdWNhc3QgK1xcbi1cXHRcXHRyYXctXFx1MDAzZXJ4X3BhdXNlO1xcbi1cXHRzdGF0cy1cXHUwMDNldHhfcGFja2V0cyA9IHJhdy1cXHUwMDNldHhfYmNhc3QgKyByYXctXFx1MDAzZXR4X21jYXN0ICsgcmF3LVxcdTAwM2V0eF91Y2FzdCArXFxuLVxcdFxcdHJhdy1cXHUwMDNldHhfcGF1c2U7XFxuLVxcbi1cXHQvKiBIVyBjb3VudGVycyBhcmUgY291bnRpbmcgYnl0ZXMgKyBGQ1Mgd2hpY2ggaXMgbm90IGFjY2VwdGFibGVcXG4tXFx0ICogZm9yIHJ0bmxfbGlua19zdGF0czY0IGludGVyZmFjZVxcbi1cXHQgKi9cXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X2J5dGVzID0gcmF3LVxcdTAwM2VyeCArIHJhdy1cXHUwMDNlcnhfaGkgLSBzdGF0cy1cXHUwMDNlcnhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOO1xcbi1cXHRzdGF0cy1cXHUwMDNldHhfYnl0ZXMgPSByYXctXFx1MDAzZXR4ICsgcmF3LVxcdTAwM2V0eF9oaSAtIHN0YXRzLVxcdTAwM2V0eF9wYWNrZXRzICogRVRIX0ZDU19MRU47XFxuLVxcbi1cXHRzdGF0cy1cXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9IHJhdy1cXHUwMDNlcnhfdW5kZXJzaXplICsgcmF3LVxcdTAwM2VyeF9mcmFnbWVudHMgK1xcbi1cXHRcXHRyYXctXFx1MDAzZXJ4X292ZXJzaXplO1xcbi1cXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X2NyY19lcnJvcnMgPSByYXctXFx1MDAzZXJ4X2NyY19lcnI7XFxuLVxcdHN0YXRzLVxcdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSByYXctXFx1MDAzZXJ4X2FsaWduX2VycjtcXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQgPSByYXctXFx1MDAzZXJ4X2Rpc2NhcmRzO1xcbi1cXHRzdGF0cy1cXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXFx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgKyBzdGF0cy1cXHUwMDNlcnhfY3JjX2Vycm9ycyArXFxuLVxcdFxcdHN0YXRzLVxcdTAwM2VyeF9mcmFtZV9lcnJvcnMgICsgc3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQ7XFxuLVxcbi1cXHRzdGF0cy1cXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfbGF0ZV9jb2w7XFxuLVxcdHN0YXRzLVxcdTAwM2V0eF9maWZvX2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfZGlzY2FyZHM7XFxuLVxcdHN0YXRzLVxcdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfZXhjX2NvbDtcXG4tXFx0c3RhdHMtXFx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVxcdTAwM2V0eF93aW5kb3dfZXJyb3JzICsgc3RhdHMtXFx1MDAzZXR4X2ZpZm9fZXJyb3JzICtcXG4tXFx0XFx0c3RhdHMtXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzO1xcbi1cXG4tXFx0c3RhdHMtXFx1MDAzZW11bHRpY2FzdCA9IHJhdy1cXHUwMDNlcnhfbWNhc3Q7XFxuLVxcdHN0YXRzLVxcdTAwM2Vjb2xsaXNpb25zID0gcmF3LVxcdTAwM2V0eF90b3RhbF9jb2w7XFxuLVxcbi1cXHRwc3RhdHMtXFx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9IHJhdy1cXHUwMDNldHhfcGF1c2U7XFxuLVxcdHBzdGF0cy1cXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcmF3LVxcdTAwM2VyeF9wYXVzZTtcXG4tXFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtaWItXFx1MDAzZXN0YXRzNjRfbG9jayk7XFxuIH1cXG4gXFxuIHZvaWQga3N6X2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuQEAgLTI4ODUsMjggKzI3MjIsNiBAQCB2b2lkIGtzel9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHQgKi9cXG4gfVxcbiBcXG4taW50IGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbi17XFxuLVxcdHUzMiBxdWV1ZV9tYXAgPSAwO1xcbi1cXHRpbnQgaXBtO1xcbi1cXG4tXFx0Zm9yIChpcG0gPSAwOyBpcG0gXFx1MDAzYyBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZW51bV9pcG1zOyBpcG0rKykge1xcbi1cXHRcXHRpbnQgcXVldWU7XFxuLVxcbi1cXHRcXHQvKiBUcmFmZmljIFR5cGUgKFRUKSBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBJbnRlcm5hbCBQcmlvcml0eVxcbi1cXHRcXHQgKiBNYXAgKElQTSkgaW4gdGhlIHN3aXRjaC4gVHJhZmZpYyBDbGFzcyAoVEMpIGlzXFxuLVxcdFxcdCAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHF1ZXVlIGluIHRoZSBzd2l0Y2guXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRxdWV1ZSA9IGllZWU4MDIxcV90dF90b190YyhpcG0sIGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XFxuLVxcdFxcdGlmIChxdWV1ZSBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBxdWV1ZTtcXG4tXFxuLVxcdFxcdHF1ZXVlX21hcCB8PSBxdWV1ZSBcXHUwMDNjXFx1MDAzYyAoaXBtICogS1NaOTQ3N19QT1JUX1RDX01BUF9TKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIGtzel9wd3JpdGUzMihkZXYsIHBvcnQsIEtTWjk0NzdfUE9SVF9NUklfVENfTUFQX180LCBxdWV1ZV9tYXApO1xcbi19XFxuLVxcbiB2b2lkIGtzel9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpXFxuIHtcXG4gXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbkBAIC0yOTg0LDQwICsyNzk5LDYgQEAgaW50IGtzel9wb3J0X2JyaWRnZV9mbGFncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4taW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuLXtcXG4tXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbi1cXG4tXFx0c3dpdGNoIChkZXYtXFx1MDAzZWNoaXBfaWQpIHtcXG4tXFx0Y2FzZSBLU1o4Nzk1X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaODc5NF9DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcXG4tXFx0XFx0cmV0dXJuIEtTWjg3OTVfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjtcXG4tXFx0Y2FzZSBLU1o4NDYzX0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaODhYM19DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg4NjRfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o4ODk1X0NISVBfSUQ6XFxuLVxcdFxcdHJldHVybiBLU1o4ODYzX0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XFxuLVxcdGNhc2UgS1NaODU2M19DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg1NjdfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o5NDc3X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaOTU2M19DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjk1NjdfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o5ODkzX0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaOTg5Nl9DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjk4OTdfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBMQU45MzcwX0NISVBfSUQ6XFxuLVxcdGNhc2UgTEFOOTM3MV9DSElQX0lEOlxcbi1cXHRjYXNlIExBTjkzNzJfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBMQU45MzczX0NISVBfSUQ6XFxuLVxcdGNhc2UgTEFOOTM3NF9DSElQX0lEOlxcbi1cXHRjYXNlIExBTjk2NDZfQ0hJUF9JRDpcXG4tXFx0XFx0cmV0dXJuIEtTWjk0NzdfTUFYX0ZSQU1FX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tfVxcbi1cXG4gaW50IGtzel9zZXRfbWFjX2VlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHQgICAgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSlcXG4ge1xcbkBAIC0zMDg2LDM5ICsyODY3LDYgQEAgdm9pZCBrc3pfc2V0X3htaWkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuIFxcdGtzel9wd3JpdGU4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgZGF0YTgpO1xcbiB9XFxuIFxcbi1waHlfaW50ZXJmYWNlX3Qga3N6X2dldF94bWlpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGdiaXQpXFxuLXtcXG4tXFx0Y29uc3QgdTggKmJpdHZhbCA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNleG1paV9jdHJsMTtcXG4tXFx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VyZWdzO1xcbi1cXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xcbi1cXHR1OCBkYXRhODtcXG4tXFx0dTggdmFsO1xcbi1cXG4tXFx0a3N6X3ByZWFkOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sIFxcdTAwMjZkYXRhOCk7XFxuLVxcbi1cXHR2YWwgPSBGSUVMRF9HRVQoUF9NSUlfU0VMX00sIGRhdGE4KTtcXG4tXFxuLVxcdGlmICh2YWwgPT0gYml0dmFsW1BfTUlJX1NFTF0pIHtcXG4tXFx0XFx0aWYgKGdiaXQpXFxuLVxcdFxcdFxcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuLVxcdH0gZWxzZSBpZiAodmFsID09IGJpdHZhbFtQX1JNSUlfU0VMXSkge1xcbi1cXHRcXHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJO1xcbi1cXHRcXHRpZiAoZGF0YTggXFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcXG4tXFx0XFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ7XFxuLVxcdFxcdGlmIChkYXRhOCBcXHUwMDI2IFBfUkdNSUlfSURfSUdfRU5BQkxFKSB7XFxuLVxcdFxcdFxcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEO1xcbi1cXHRcXHRcXHRpZiAoZGF0YTggXFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcXG4tXFx0XFx0XFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBpbnRlcmZhY2U7XFxuLX1cXG4tXFxuIGJvb2wga3N6X3BoeWxpbmtfbmVlZF9jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuIFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG1vZGUpXFxuIHtcXG5AQCAtMzE1NCwyNCArMjkwMiw2IEBAIHZvaWQga3N6X3BoeWxpbmtfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFx0XFx0a3N6X3NldF94bWlpKGRldiwgcG9ydCwgc3RhdGUtXFx1MDAzZWludGVyZmFjZSk7XFxuIH1cXG4gXFxuLWJvb2wga3N6X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbi17XFxuLVxcdGNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXhtaWlfY3RybDE7XFxuLVxcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4tXFx0Ym9vbCBnYml0ID0gZmFsc2U7XFxuLVxcdHU4IGRhdGE4O1xcbi1cXHRib29sIHZhbDtcXG4tXFxuLVxcdGtzel9wcmVhZDgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBcXHUwMDI2ZGF0YTgpO1xcbi1cXG4tXFx0dmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7XFxuLVxcbi1cXHRpZiAodmFsID09IGJpdHZhbFtQX0dNSUlfMUdCSVRdKVxcbi1cXHRcXHRnYml0ID0gdHJ1ZTtcXG4tXFxuLVxcdHJldHVybiBnYml0O1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGtzel9zd2l0Y2hfZGV0ZWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0dTggaWQxLCBpZDIsIGlkNDtcXG5AQCAtMzMxNCw4ICszMDQ0LDggQEAgc3RhdGljIGludCBrc3pfc2V0dXBfdGNfbW9kZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgdTggc2NoZWR1bGVyLFxcbiBcXHRcXHRcXHQgICBGSUVMRF9QUkVQKE1USV9TSEFQSU5HX00sIHNoYXBlcikpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9zZXR1cF90Y19jYnMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxcbitpbnQga3N6X3NldHVwX3RjX2NicyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHQgICAgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4gXFx0aW50IHJldDtcXG5AQCAtMzM4MCw4ICszMTEwLDggQEAgc3RhdGljIGludCBrc3pfZGlzYWJsZV9lZ3Jlc3NfcmF0ZV9saW1pdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwLFxcbi1cXHRcXHRcXHRcXHQgaW50IGJhbmQpXFxuK2ludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsXFxuK1xcdFxcdFxcdCAgaW50IGJhbmQpXFxuIHtcXG4gXFx0LyogQ29tcGFyZWQgdG8gcXVldWVzLCBiYW5kcyBwcmlvcml0aXplIHBhY2tldHMgZGlmZmVyZW50bHkuIEluIHN0cmljdFxcbiBcXHQgKiBwcmlvcml0eSBtb2RlLCB0aGUgbG93ZXN0IHByaW9yaXR5IGlzIGFzc2lnbmVkIHRvIFF1ZXVlIDAgd2hpbGUgdGhlXFxuQEAgLTMzOTAsMTA0ICszMTIwLDYgQEAgc3RhdGljIGludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsXFxuIFxcdHJldHVybiBwLVxcdTAwM2ViYW5kcyAtIDEgLSBiYW5kO1xcbiB9XFxuIFxcbi1zdGF0aWMgdTgga3N6ODQ2M190Y19jdHJsKGludCBwb3J0LCBpbnQgcXVldWUpXFxuLXtcXG4tXFx0dTggcmVnO1xcbi1cXG4tXFx0cmVnID0gMHhDOCArIHBvcnQgKiA0O1xcbi1cXHRyZWcgKz0gKCgzIC0gcXVldWUpIC8gMikgKiAyO1xcbi1cXHRyZWcrKztcXG4tXFx0cmVnIC09IChxdWV1ZSBcXHUwMDI2IDEpO1xcbi1cXHRyZXR1cm4gcmVnO1xcbi19XFxuLVxcbi0vKipcXG4tICoga3N6ODh4M190Y19ldHNfYWRkIC0gQ29uZmlndXJlIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbilcXG4tICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxcbi0gKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBLU1ogc3dpdGNoIGRldmljZSBzdHJ1Y3R1cmVcXG4tICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGNvbmZpZ3VyZVxcbi0gKiBAcDogUG9pbnRlciB0byBvZmZsb2FkIHJlcGxhY2UgcGFyYW1ldGVycyBkZXNjcmliaW5nIEVUUyBiYW5kcyBhbmQgbWFwcGluZ1xcbi0gKlxcbi0gKiBUaGUgS1NaODh4MyBzdXBwb3J0cyB0d28gc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IGFuZFxcbi0gKiBXZWlnaHRlZCBGYWlyIFF1ZXVpbmcgKFdGUSkuIEJvdGggbW9kZXMgaGF2ZSBmaXhlZCBiZWhhdmlvcjpcXG4tICogICAtIE5vIGNvbmZpZ3VyYWJsZSBxdWV1ZS10by1wcmlvcml0eSBtYXBwaW5nXFxuLSAqICAgLSBObyB3ZWlnaHQgYWRqdXN0bWVudCBpbiBXRlEgbW9kZVxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHN3aXRjaCB0byB1c2Ugc3RyaWN0IHByaW9yaXR5IG1vZGUgYnlcXG4tICogY2xlYXJpbmcgdGhlIFdGUSBlbmFibGUgYml0IGZvciBhbGwgcXVldWVzIGFzc29jaWF0ZWQgd2l0aCBFVFMgYmFuZHMuXFxuLSAqIElmIHN0cmljdCBwcmlvcml0eSBpcyBub3QgZXhwbGljaXRseSByZXF1ZXN0ZWQsIHRoZSBzd2l0Y2ggd2lsbCBkZWZhdWx0XFxuLSAqIHRvIFdGUSBtb2RlLlxcbi0gKlxcbi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcXG4tICovXFxuLXN0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfYWRkKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcClcXG4te1xcbi1cXHRpbnQgcmV0LCBiYW5kO1xcbi1cXG4tXFx0LyogT25seSBzdHJpY3QgcHJpb3JpdHkgbW9kZSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy5cXG4tXFx0ICogV0ZRIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkLlxcbi1cXHQgKi9cXG4tXFx0Zm9yIChiYW5kID0gMDsgYmFuZCBcXHUwMDNjIHAtXFx1MDAzZWJhbmRzOyBiYW5kKyspIHtcXG4tXFx0XFx0aW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpO1xcbi1cXHRcXHR1OCByZWc7XFxuLVxcbi1cXHRcXHQvKiBDYWxjdWxhdGUgVFhRIFNwbGl0IENvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhpc1xcbi1cXHRcXHQgKiBwb3J0L3F1ZXVlXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZWcgPSBLU1o4ODczX1RYUV9TUExJVF9DVFJMX1JFRyhwb3J0LCBxdWV1ZSk7XFxuLVxcdFxcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxcbi1cXHRcXHRcXHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xcbi1cXG4tXFx0XFx0LyogQ2xlYXIgV0ZRIGVuYWJsZSBiaXQgdG8gc2VsZWN0IHN0cmljdCBwcmlvcml0eSBzY2hlZHVsaW5nICovXFxuLVxcdFxcdHJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLCAwKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLS8qKlxcbi0gKiBrc3o4OHgzX3RjX2V0c19kZWwgLSBSZXNldCBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pIGNvbmZpZ1xcbi0gKiAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBwb3J0IG9uIEtTWjg4eDMgc3dpdGNoXFxuLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZVxcbi0gKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gcmVzZXRcXG4tICpcXG4tICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgb25seSBmaXhlZCBzY2hlZHVsaW5nIG1vZGVzOiBTdHJpY3QgUHJpb3JpdHkgb3JcXG4tICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLCB3aXRoIG5vIHJlY29uZmlndXJhdGlvbiBvZiB3ZWlnaHRzIG9yXFxuLSAqIHF1ZXVlIG1hcHBpbmcuIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBwb3J04oCZcyBzY2hlZHVsaW5nIG1vZGUgdG9cXG4tICogdGhlIGRlZmF1bHQsIHdoaWNoIGlzIFdGUSwgYnkgZW5hYmxpbmcgdGhlIFdGUSBiaXQgZm9yIGFsbCBxdWV1ZXMuXFxuLSAqXFxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxcbi0gKi9cXG4tc3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19kZWwoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuLXtcXG4tXFx0aW50IHJldCwgcXVldWU7XFxuLVxcbi1cXHQvKiBJdGVyYXRlIG92ZXIgYWxsIHRyYW5zbWl0IHF1ZXVlcyBmb3IgdGhpcyBwb3J0ICovXFxuLVxcdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcXHUwMDNjIGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgcXVldWUrKykge1xcbi1cXHRcXHR1OCByZWc7XFxuLVxcbi1cXHRcXHQvKiBDYWxjdWxhdGUgVFhRIFNwbGl0IENvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhpc1xcbi1cXHRcXHQgKiBwb3J0L3F1ZXVlXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZWcgPSBLU1o4ODczX1RYUV9TUExJVF9DVFJMX1JFRyhwb3J0LCBxdWV1ZSk7XFxuLVxcdFxcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxcbi1cXHRcXHRcXHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xcbi1cXG4tXFx0XFx0LyogU2V0IFdGUSBlbmFibGUgYml0IHRvIHJldmVydCBiYWNrIHRvIGRlZmF1bHQgc2NoZWR1bGluZ1xcbi1cXHRcXHQgKiBtb2RlXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXQgPSBrc3pfcm13OChkZXYsIHJlZywgS1NaODg3M19UWFFfV0ZRX0VOQUJMRSxcXG4tXFx0XFx0XFx0ICAgICAgIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBrc3pfcXVldWVfc2V0X3N0cmljdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IHF1ZXVlKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTM1ODAsOCArMzIxMiw4IEBAIHN0YXRpYyBpbnQga3N6X3RjX2V0c19kZWwoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuIFxcdHJldHVybiBrc3o5NDc3X3NldF9kZWZhdWx0X3ByaW9fcXVldWVfbWFwcGluZyhkZXYsIHBvcnQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel90Y19ldHNfdmFsaWRhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcClcXG4raW50IGtzel90Y19ldHNfdmFsaWRhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKVxcbiB7XFxuIFxcdGludCBiYW5kO1xcbiBcXG5AQCAtMzYyMiw5ICszMjU0LDYgQEAgc3RhdGljIGludCBrc3pfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmIChpc19rc3o4KGRldikgXFx1MDAyNlxcdTAwMjYgIShrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpKVxcbi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLVxcbiBcXHRpZiAocW9wdC1cXHUwMDNlcGFyZW50ICE9IFRDX0hfUk9PVCkge1xcbiBcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiUGFyZW50IHNob3VsZCBiZSBcXFxcXFxcInJvb3RcXFxcXFxcIlxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtMzYzNiwxNiArMzI2NSw5IEBAIHN0YXRpYyBpbnQga3N6X3RjX3NldHVwX3FkaXNjX2V0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0XFx0aWYgKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSlcXG4tXFx0XFx0XFx0cmV0dXJuIGtzejg4eDNfdGNfZXRzX2FkZChkZXYsIHBvcnQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnFvcHQtXFx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXR1cm4ga3N6X3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcXHUwMDI2cW9wdC1cXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xcbitcXHRcXHRyZXR1cm4ga3N6X3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcXHUwMDI2cW9wdC1cXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xcbiBcXHRjYXNlIFRDX0VUU19ERVNUUk9ZOlxcbi1cXHRcXHRpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKVxcbi1cXHRcXHRcXHRyZXR1cm4ga3N6ODh4M190Y19ldHNfZGVsKGRldiwgcG9ydCk7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0cmV0dXJuIGtzel90Y19ldHNfZGVsKGRldiwgcG9ydCk7XFxuK1xcdFxcdHJldHVybiBrc3pfdGNfZXRzX2RlbChkZXYsIHBvcnQpO1xcbiBcXHRjYXNlIFRDX0VUU19TVEFUUzpcXG4gXFx0Y2FzZSBUQ19FVFNfR1JBRlQ6XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtMzcwNCw2ICszMzI2LDM0IEBAIGludCBrc3pfaGFuZGxlX3dha2VfcmVhc29uKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbiBcXHRcXHRcXHRcXHRwbWVfc3RhdHVzKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGtzel9pc19wb3J0X21hY19nbG9iYWxfdXNhYmxlIC0gQ2hlY2sgaWYgdGhlIE1BQyBhZGRyZXNzIG9uIGEgZ2l2ZW4gcG9ydFxcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MuXFxuKyAqIEBkczogUG9pbnRlciB0byB0aGUgRFNBIHN3aXRjaCBzdHJ1Y3R1cmUuXFxuKyAqIEBwb3J0OiBUaGUgcG9ydCBudW1iZXIgb24gd2hpY2ggdGhlIE1BQyBhZGRyZXNzIGlzIHRvIGJlIGNoZWNrZWQuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gZXhhbWluZXMgdGhlIE1BQyBhZGRyZXNzIHNldCBvbiB0aGUgc3BlY2lmaWVkIHBvcnQgYW5kXFxuKyAqIGRldGVybWluZXMgaWYgaXQgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcyBmb3IgdGhlIHN3aXRjaC5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwb3J0J3MgTUFDIGFkZHJlc3MgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcywgZmFsc2VcXG4rICogb3RoZXJ3aXNlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXNlciA9IGRzYV90b19wb3J0KGRzLCBwb3J0KS1cXHUwMDNldXNlcjtcXG4rXFx0Y29uc3QgdW5zaWduZWQgY2hhciAqYWRkciA9IHVzZXItXFx1MDAzZWRldl9hZGRyO1xcbitcXHRzdHJ1Y3Qga3N6X3N3aXRjaF9tYWNhZGRyICpzd2l0Y2hfbWFjYWRkcjtcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuK1xcdHN3aXRjaF9tYWNhZGRyID0gZGV2LVxcdTAwM2Vzd2l0Y2hfbWFjYWRkcjtcXG4rXFx0aWYgKHN3aXRjaF9tYWNhZGRyIFxcdTAwMjZcXHUwMDI2ICFldGhlcl9hZGRyX2VxdWFsKHN3aXRjaF9tYWNhZGRyLVxcdTAwM2VhZGRyLCBhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrc3pfZ2V0X3dvbCAtIEdldCBXYWtlLW9uLUxBTiBzZXR0aW5ncyBmb3IgYSBzcGVjaWZpZWQgcG9ydC5cXG4gICogQGRzOiBUaGUgZHNhX3N3aXRjaCBzdHJ1Y3R1cmUuXFxuQEAgLTM4OTcsMzQgKzM1NDcsNiBAQCBpbnQga3N6X3BvcnRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKipcXG4tICoga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUgLSBDaGVjayBpZiB0aGUgTUFDIGFkZHJlc3Mgb24gYSBnaXZlbiBwb3J0XFxuLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcy5cXG4tICogQGRzOiBQb2ludGVyIHRvIHRoZSBEU0Egc3dpdGNoIHN0cnVjdHVyZS5cXG4tICogQHBvcnQ6IFRoZSBwb3J0IG51bWJlciBvbiB3aGljaCB0aGUgTUFDIGFkZHJlc3MgaXMgdG8gYmUgY2hlY2tlZC5cXG4tICpcXG4tICogVGhpcyBmdW5jdGlvbiBleGFtaW5lcyB0aGUgTUFDIGFkZHJlc3Mgc2V0IG9uIHRoZSBzcGVjaWZpZWQgcG9ydCBhbmRcXG4tICogZGV0ZXJtaW5lcyBpZiBpdCBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzIGZvciB0aGUgc3dpdGNoLlxcbi0gKlxcbi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIHBvcnQncyBNQUMgYWRkcmVzcyBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzLCBmYWxzZVxcbi0gKiBvdGhlcndpc2UuXFxuLSAqL1xcbi1ib29sIGtzel9pc19wb3J0X21hY19nbG9iYWxfdXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuLXtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKnVzZXIgPSBkc2FfdG9fcG9ydChkcywgcG9ydCktXFx1MDAzZXVzZXI7XFxuLVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIgPSB1c2VyLVxcdTAwM2VkZXZfYWRkcjtcXG4tXFx0c3RydWN0IGtzel9zd2l0Y2hfbWFjYWRkciAqc3dpdGNoX21hY2FkZHI7XFxuLVxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4tXFxuLVxcdEFTU0VSVF9SVE5MKCk7XFxuLVxcbi1cXHRzd2l0Y2hfbWFjYWRkciA9IGRldi1cXHUwMDNlc3dpdGNoX21hY2FkZHI7XFxuLVxcdGlmIChzd2l0Y2hfbWFjYWRkciBcXHUwMDI2XFx1MDAyNiAhZXRoZXJfYWRkcl9lcXVhbChzd2l0Y2hfbWFjYWRkci1cXHUwMDNlYWRkciwgYWRkcikpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdHJldHVybiB0cnVlO1xcbi19XFxuLVxcbiAvKipcXG4gICoga3N6X3N3aXRjaF9tYWNhZGRyX2dldCAtIFByb2dyYW0gdGhlIHN3aXRjaCdzIE1BQyBhZGRyZXNzIHJlZ2lzdGVyLlxcbiAgKiBAZHM6IERTQSBzd2l0Y2ggaW5zdGFuY2UuXFxuQEAgLTQxMzIsOCArMzc1NCw4IEBAIHN0YXRpYyB2b2lkIGtzel9wYXJzZV9yZ21paV9kZWxheShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydF9udW0sXFxuICAqIFJldHVybnM6IElmIGZvdW5kLCB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlciB2YWx1ZSBmb3IgdGhhdCBkcml2ZSBzdHJlbmd0aFxcbiAgKiBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCAtRUlOVkFMIGlzIHJldHVybmVkIGluZGljYXRpbmcgYW4gaW52YWxpZCB2YWx1ZS5cXG4gICovXFxuLXN0YXRpYyBpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKVxcbitpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcXG4rXFx0XFx0XFx0ICAgICAgc2l6ZV90IGFycmF5X3NpemUsIGludCBtaWNyb2FtcClcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTQxNTYsOSArMzc3OCw5IEBAIHN0YXRpYyBpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcXG4gICogaXMgZGV0ZWN0ZWQuIEl0IGxpc3RzIG91dCBhbGwgdGhlIHN1cHBvcnRlZCBkcml2ZSBzdHJlbmd0aCB2YWx1ZXMgZm9yXFxuICAqIHJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cXG4gICovXFxuLXN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxcbi1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApXFxuK3ZvaWQga3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxcbitcXHRcXHRcXHQgICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKVxcbiB7XFxuIFxcdGNoYXIgc3VwcG9ydGVkX3ZhbHVlc1sxMDBdO1xcbiBcXHRzaXplX3QgcmVtYWluaW5nX3NpemU7XFxuQEAgLTQxODUsOCArMzgwNyw4IEBAIHN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiB9XFxuIFxcbiAvKipcXG4tICoga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBmb3Igc3BlY2lmaWMgS1NaOTQ3N1xcbi0gKlxcdFxcdFxcdFxcdCAgICBjaGlwIHZhcmlhbnRzLlxcbisgKiBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggZm9yIHNwZWNpZmljIEtTWjk0NzdcXG4rICpcXHRcXHRcXHRcXHRhbmQgdGhlIEtTWjg3eHggY2hpcCB2YXJpYW50cy5cXG4gICogQGRldjogICAgICAga3N6IGRldmljZVxcbiAgKiBAcHJvcHM6ICAgICBBcnJheSBvZiBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIHRvIGJlIGFwcGxpZWRcXG4gICogQG51bV9wcm9wczogTnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5XFxuQEAgLTQxOTcsOSArMzgxOSw5IEBAIHN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzc2Z1bCBjb25maWd1cmF0aW9uLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4gICovXFxuLXN0YXRpYyBpbnQga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wICpwcm9wcyxcXG4tXFx0XFx0XFx0XFx0XFx0aW50IG51bV9wcm9wcylcXG4raW50IGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLFxcbitcXHRcXHRcXHQgICAgIGludCBudW1fcHJvcHMpXFxuIHtcXG4gXFx0c2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejk0NzdfZHJpdmVfc3RyZW5ndGhzKTtcXG4gXFx0aW50IGksIHJldCwgcmVnO1xcbkBAIC00MjM2LDEzMCArMzg1OCw2IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCByZWcsIG1hc2ssIHZhbCk7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb24gZm9yXFxuLSAqXFx0XFx0XFx0XFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxcbi0gKiBAZGV2OiAgICAgICBrc3ogZGV2aWNlXFxuLSAqIEBwcm9wczogICAgIEFycmF5IG9mIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgdG8gYmUgc2V0XFxuLSAqIEBudW1fcHJvcHM6IE51bWJlciBvZiBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheVxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBzZXR0aW5ncyB0byBLU1o4OFgzIGNoaXBcXG4tICogdmFyaWFudHMgKEtTWjg4NzMsIEtTWjg4NjMpLlxcbi0gKiBJdCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9ucyBhbGlnbiB3aXRoIHdoYXQgdGhlIGNoaXAgdmFyaWFudCBzdXBwb3J0cyBhbmRcXG4tICogd2FybnMgb3IgZXJyb3JzIG91dCBvbiB1bnN1cHBvcnRlZCBzZXR0aW5ncy5cXG4tICpcXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuLSAqL1xcbi1zdGF0aWMgaW50IGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXFxuLVxcdFxcdFxcdFxcdFxcdGludCBudW1fcHJvcHMpXFxuLXtcXG4tXFx0c2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzKTtcXG4tXFx0aW50IG1pY3JvYW1wO1xcbi1cXHRpbnQgaSwgcmV0O1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wcm9wczsgaSsrKSB7XFxuLVxcdFxcdGlmIChwcm9wc1tpXS52YWx1ZSA9PSAtMSB8fCBpID09IEtTWl9EUklWRVJfU1RSRU5HVEhfSU8pXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0ZGV2X3dhcm4oZGV2LVxcdTAwM2VkZXYsIFxcXCIlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgcHJvcHNbaV0ubmFtZSk7XFxuLVxcdH1cXG4tXFxuLVxcdG1pY3JvYW1wID0gcHJvcHNbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10udmFsdWU7XFxuLVxcdHJldCA9IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoa3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsIGFycmF5X3NpemUsXFxuLVxcdFxcdFxcdFxcdFxcdG1pY3JvYW1wKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0a3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKGRldiwga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsXFxuLVxcdFxcdFxcdFxcdFxcdCBhcnJheV9zaXplLCBtaWNyb2FtcCk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBrc3pfcm13OChkZXYsIEtTWjg4NzNfUkVHX0dMT0JBTF9DVFJMXzEyLFxcbi1cXHRcXHRcXHRLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIHJldCk7XFxuLX1cXG4tXFxuLS8qKlxcbi0gKiBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoKSAtIEV4dHJhY3QgYW5kIGFwcGx5IGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb25zXFxuLSAqXFx0XFx0XFx0XFx0ZnJvbSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLlxcbi0gKiBAZGV2OlxcdGtzeiBkZXZpY2VcXG4tICpcXG4tICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgZnJvbSB0aGVcXG4tICogZGV2aWNlIHRyZWUsIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBzdXBwb3J0ZWQgY2hpcCB2YXJpYW50cywgYW5kIHNldHNcXG4tICogdGhlbSBhY2NvcmRpbmdseS4gQW4gZXJyb3Igc2hvdWxkIGJlIGNyaXRpY2FsIGhlcmUsIGFzIHRoZSBkcml2ZSBzdHJlbmd0aFxcbi0gKiBzZXR0aW5ncyBhcmUgY3J1Y2lhbCBmb3IgRU1JIGNvbXBsaWFuY2UuXFxuLSAqXFxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZVxcbi0gKi9cXG4taW50IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi17XFxuLVxcdHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHtcXG4tXFx0XFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSEldID0ge1xcbi1cXHRcXHRcXHQubmFtZSA9IFxcXCJtaWNyb2NoaXAsaGktZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcXFwiLFxcbi1cXHRcXHRcXHQub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcXG4tXFx0XFx0XFx0LnZhbHVlID0gLTEsXFxuLVxcdFxcdH0sXFxuLVxcdFxcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0xPXSA9IHtcXG4tXFx0XFx0XFx0Lm5hbWUgPSBcXFwibWljcm9jaGlwLGxvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXFxcIixcXG4tXFx0XFx0XFx0Lm9mZnNldCA9IFNXX0xPX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXFxuLVxcdFxcdFxcdC52YWx1ZSA9IC0xLFxcbi1cXHRcXHR9LFxcbi1cXHRcXHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10gPSB7XFxuLVxcdFxcdFxcdC5uYW1lID0gXFxcIm1pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFxcXCIsXFxuLVxcdFxcdFxcdC5vZmZzZXQgPSAwLCAvKiBkb24ndCBjYXJlICovXFxuLVxcdFxcdFxcdC52YWx1ZSA9IC0xLFxcbi1cXHRcXHR9LFxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGU7XFxuLVxcdGJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlO1xcbi1cXHRpbnQgaSwgcmV0O1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIG9mX3Byb3BzW2ldLm5hbWUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZvZl9wcm9wc1tpXS52YWx1ZSk7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FSU5WQUwpXFxuLVxcdFxcdFxcdGRldl93YXJuKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWQgJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCBvZl9wcm9wc1tpXS5uYW1lKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRoYXZlX2FueV9wcm9wID0gdHJ1ZTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFoYXZlX2FueV9wcm9wKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHN3aXRjaCAoZGV2LVxcdTAwM2VjaGlwX2lkKSB7XFxuLVxcdGNhc2UgS1NaODhYM19DSElQX0lEOlxcbi1cXHRcXHRyZXR1cm4ga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgQVJSQVlfU0laRShvZl9wcm9wcykpO1xcbi1cXHRjYXNlIEtTWjg3OTVfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o4Nzk0X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaODc2NV9DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg1NjNfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o4NTY3X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaOTQ3N19DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjk1NjNfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o5NTY3X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaOTg5M19DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjk4OTZfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o5ODk3X0NISVBfSUQ6XFxuLVxcdGNhc2UgTEFOOTY0Nl9DSElQX0lEOlxcbi1cXHRcXHRyZXR1cm4ga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgQVJSQVlfU0laRShvZl9wcm9wcykpO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkrKykge1xcbi1cXHRcXHRcXHRpZiAob2ZfcHJvcHNbaV0udmFsdWUgPT0gLTEpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0ZGV2X3dhcm4oZGV2LVxcdTAwM2VkZXYsIFxcXCIlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgb2ZfcHJvcHNbaV0ubmFtZSk7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQga3N6ODQ2M19jb25maWd1cmVfc3RyYXBzX3NwaShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBwaW5jdHJsICpwaW5jdHJsO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXFxuaW5kZXggYjRhNTY3M2JhMzY1Y2IuLmFjYWY3MGU2ZjM5M2M5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc2EuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RhdGEvbWljcm9jaGlwLWtzei5oXFx1MDAzZVxcbiBcXG5AQCAtNDAsNiArNDEsNDUgQEAgc3RydWN0IHZsYW5fdGFibGUge1xcbiBcXHR1MzIgdGFibGVbM107XFxuIH07XFxuIFxcbitzdHJ1Y3Qga3N6X3N0YXRzX3JhdyB7XFxuK1xcdHU2NCByeF9oaTtcXG4rXFx0dTY0IHJ4X3VuZGVyc2l6ZTtcXG4rXFx0dTY0IHJ4X2ZyYWdtZW50cztcXG4rXFx0dTY0IHJ4X292ZXJzaXplO1xcbitcXHR1NjQgcnhfamFiYmVycztcXG4rXFx0dTY0IHJ4X3N5bWJvbF9lcnI7XFxuK1xcdHU2NCByeF9jcmNfZXJyO1xcbitcXHR1NjQgcnhfYWxpZ25fZXJyO1xcbitcXHR1NjQgcnhfbWFjX2N0cmw7XFxuK1xcdHU2NCByeF9wYXVzZTtcXG4rXFx0dTY0IHJ4X2JjYXN0O1xcbitcXHR1NjQgcnhfbWNhc3Q7XFxuK1xcdHU2NCByeF91Y2FzdDtcXG4rXFx0dTY0IHJ4XzY0X29yX2xlc3M7XFxuK1xcdHU2NCByeF82NV8xMjc7XFxuK1xcdHU2NCByeF8xMjhfMjU1O1xcbitcXHR1NjQgcnhfMjU2XzUxMTtcXG4rXFx0dTY0IHJ4XzUxMl8xMDIzO1xcbitcXHR1NjQgcnhfMTAyNF8xNTIyO1xcbitcXHR1NjQgcnhfMTUyM18yMDAwO1xcbitcXHR1NjQgcnhfMjAwMTtcXG4rXFx0dTY0IHR4X2hpO1xcbitcXHR1NjQgdHhfbGF0ZV9jb2w7XFxuK1xcdHU2NCB0eF9wYXVzZTtcXG4rXFx0dTY0IHR4X2JjYXN0O1xcbitcXHR1NjQgdHhfbWNhc3Q7XFxuK1xcdHU2NCB0eF91Y2FzdDtcXG4rXFx0dTY0IHR4X2RlZmVycmVkO1xcbitcXHR1NjQgdHhfdG90YWxfY29sO1xcbitcXHR1NjQgdHhfZXhjX2NvbDtcXG4rXFx0dTY0IHR4X3NpbmdsZV9jb2w7XFxuK1xcdHU2NCB0eF9tdWx0X2NvbDtcXG4rXFx0dTY0IHJ4X3RvdGFsO1xcbitcXHR1NjQgdHhfdG90YWw7XFxuK1xcdHU2NCByeF9kaXNjYXJkcztcXG4rXFx0dTY0IHR4X2Rpc2NhcmRzO1xcbit9O1xcbitcXG4gc3RydWN0IGtzel9wb3J0X21pYiB7XFxuIFxcdHN0cnVjdCBtdXRleCBjbnRfbXV0ZXg7XFx0XFx0Lyogc3RydWN0dXJlIGFjY2VzcyAqL1xcbiBcXHR1OCBjbnRfcHRyO1xcbkBAIC0zOTMsMTIgKzQzMyw4IEBAIGludCBrc3pfc3dpdGNoX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbiB2b2lkIGtzel90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbiBcXG4gdm9pZCBrc3pfaW5pdF9taWJfdGltZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuLWJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCk7XFxuIHZvaWQga3N6X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xcbi12b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XFxuIHZvaWQga3N6X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1OCBzdGF0ZSk7XFxuLWJvb2wga3N6X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcXG4tcGh5X2ludGVyZmFjZV90IGtzel9nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBnYml0KTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXTtcXG4gaW50IGtzel9zd2l0Y2hfbWFjYWRkcl9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5AQCAtNDQzLDExICs0NzksMTUgQEAgdm9pZCBrc3pfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG1vZGUsXFxuIFxcdFxcdFxcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcXG4gXFxuLWludCBrc3pfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KTtcXG4tXFxuIGludCBrc3pfc2V0X21hY19lZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpO1xcbiBcXG4raW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCxcXG4rXFx0XFx0XFx0ICBpbnQgYmFuZCk7XFxuK2ludCBrc3pfc2V0dXBfdGNfY2JzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdCAgICAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpO1xcbitpbnQga3N6X3RjX2V0c192YWxpZGF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApO1xcbiBpbnQga3N6X3NldHVwX3RjKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKTtcXG4gXFxuQEAgLTQ3MSw4ICs1MTEsMzcgQEAgaW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xcbiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcCk7XFxuIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcXG4gdm9pZCBrc3pfaXJxX2ZyZWUoc3RydWN0IGtzel9pcnEgKmtpcnEpO1xcbi1pbnQga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xcbi1pbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xcbitcXG4rc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdGludCBvZmZzZXQ7XFxuK1xcdGludCB2YWx1ZTtcXG4rfTtcXG4rXFxuK2VudW0ga3N6X2RyaXZlcl9zdHJlbmd0aF90eXBlIHtcXG4rXFx0S1NaX0RSSVZFUl9TVFJFTkdUSF9ISSxcXG4rXFx0S1NaX0RSSVZFUl9TVFJFTkdUSF9MTyxcXG4rXFx0S1NaX0RSSVZFUl9TVFJFTkdUSF9JTyxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIC0gZHJpdmUgc3RyZW5ndGggbWFwcGluZ1xcbisgKiBAcmVnX3ZhbDpcXHRyZWdpc3RlciB2YWx1ZVxcbisgKiBAbWljcm9hbXA6XFx0bWljcm9hbXAgdmFsdWVcXG4rICovXFxuK3N0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgge1xcbitcXHR1MzIgcmVnX3ZhbDtcXG4rXFx0dTMyIG1pY3JvYW1wO1xcbit9O1xcbitcXG4rdm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXFxuK1xcdFxcdFxcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApO1xcbitpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcXG4rXFx0XFx0XFx0ICAgICAgc2l6ZV90IGFycmF5X3NpemUsIGludCBtaWNyb2FtcCk7XFxuK2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wICpwcm9wcyxcXG4rXFx0XFx0XFx0ICAgICBpbnQgbnVtX3Byb3BzKTtcXG4gXFxuIC8qIENvbW1vbiByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zICovXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqa3N6X3JlZ21hcF84KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXFxuaW5kZXggOGViNTMzN2IwYzEwMmUuLjg2Y2UzYTg2NzA1ZjkzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXFxuQEAgLTc4NywxMCArNzg3LDYgQEAgc3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbiBcXHQvKiBzZXQgYnJvYWRjYXN0IHN0b3JtIHByb3RlY3Rpb24gMTAlIHJhdGUgKi9cXG4gXFx0c3Rvcm1fbWFzayA9IEJST0FEQ0FTVF9TVE9STV9SQVRFO1xcbiBcXHRzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwO1xcbkBAIC05ODMsNyArOTc5LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGxhbjkzN3hfc3dpdGNoX29wcyA9IHtcXG4gXFx0LmdldF9zdGF0czY0XFx0XFx0PSBrc3pfZ2V0X3N0YXRzNjQsXFxuIFxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IGtzel9nZXRfcGF1c2Vfc3RhdHMsXFxuIFxcdC5wb3J0X2NoYW5nZV9tdHVcXHQ9IGxhbjkzN3hfY2hhbmdlX210dSxcXG4tXFx0LnBvcnRfbWF4X210dVxcdFxcdD0ga3N6X21heF9tdHUsXFxuK1xcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGtzejk0NzdfbWF4X210dSxcXG4gXFx0LnN1c3BlbmRcXHRcXHQ9IGtzel9zdXNwZW5kLFxcbiBcXHQucmVzdW1lXFx0XFx0XFx0PSBrc3pfcmVzdW1lLFxcbiBcXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGtzel9nZXRfdHNfaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTM6NTY6MjYuOTA3NjMwMDQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjY2Mjk5MTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBNaWNyb2NoaXAgS1NaIERTQSBkcml2ZXIuIEl0IG1vdmVzIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb25zIChsaWtlIE1UVSBjb25maWd1cmF0aW9uLCBUQyBzZXR1cCwgTUlCIHN0YXRzIHJlYWRpbmcsIGFuZCBkcml2ZSBzdHJlbmd0aCBwYXJzaW5nKSBmcm9tIHRoZSBjb21tb24gYGtzel9jb21tb24uY2AgZmlsZSB0byB0aGVpciByZXNwZWN0aXZlIGNoaXAtc3BlY2lmaWMgZmlsZXMgKGBrc3o4LmNgIGFuZCBga3N6OTQ3Ny5jYCkuIEl0IGFsc28gcmVtb3ZlcyBhIG5vLW9wIGNhbGwgdG8gYGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aGAgaW4gYGxhbjkzN3hfbWFpbi5jYCB3aGljaCBvbmx5IHByaW50ZWQgd2FybmluZ3MgZm9yIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMuIE5vIG5ldyBmdW5jdGlvbmFsIGxvZ2ljIG9yIHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNmVkYmJkOGZhYjkxMDViMWFiYTBmNmY5NDE3ZjU0Nzk0NzZhNzlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxMzo1NjoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbmluZGV4IDU4NjkxNjU3MGE4NDFiLi5jNGM3NjkwMjhhMjBjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuQEAgLTM2LDYgKzM2LDUyIEBAXG4gI2luY2x1ZGUgXCJrc3o4X3JlZy5oXCJcbiAjaW5jbHVkZSBcImtzejguaFwiXG4gXG4rLyoga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMgLSBEcml2ZSBzdHJlbmd0aCBtYXBwaW5nIGZvciBLU1o4ODYzLCBLU1o4ODczLCAuLlxuKyAqXHRcdFx0ICAgICB2YXJpYW50cy5cbisgKiBUaGlzIHZhbHVlcyBhcmUgZG9jdW1lbnRlZCBpbiBLU1o4ODczIGFuZCBLU1o4ODYzIGRhdGFzaGVldHMuXG4rICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6ODh4M19kcml2ZV9zdHJlbmd0aHNbXSA9IHtcbitcdHsgMCwgIDgwMDAgfSxcbitcdHsgS1NaODg3M19EUklWRV9TVFJFTkdUSF8xNk1BLCAxNjAwMCB9LFxuK307XG4rXG4rc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3IHtcbitcdHU2NCByeDtcbitcdHU2NCByeF9oaTtcbitcdHU2NCByeF91bmRlcnNpemU7XG4rXHR1NjQgcnhfZnJhZ21lbnRzO1xuK1x0dTY0IHJ4X292ZXJzaXplO1xuK1x0dTY0IHJ4X2phYmJlcnM7XG4rXHR1NjQgcnhfc3ltYm9sX2VycjtcbitcdHU2NCByeF9jcmNfZXJyO1xuK1x0dTY0IHJ4X2FsaWduX2VycjtcbitcdHU2NCByeF9tYWNfY3RybDtcbitcdHU2NCByeF9wYXVzZTtcbitcdHU2NCByeF9iY2FzdDtcbitcdHU2NCByeF9tY2FzdDtcbitcdHU2NCByeF91Y2FzdDtcbitcdHU2NCByeF82NF9vcl9sZXNzO1xuK1x0dTY0IHJ4XzY1XzEyNztcbitcdHU2NCByeF8xMjhfMjU1O1xuK1x0dTY0IHJ4XzI1Nl81MTE7XG4rXHR1NjQgcnhfNTEyXzEwMjM7XG4rXHR1NjQgcnhfMTAyNF8xNTIyO1xuK1x0dTY0IHR4O1xuK1x0dTY0IHR4X2hpO1xuK1x0dTY0IHR4X2xhdGVfY29sO1xuK1x0dTY0IHR4X3BhdXNlO1xuK1x0dTY0IHR4X2JjYXN0O1xuK1x0dTY0IHR4X21jYXN0O1xuK1x0dTY0IHR4X3VjYXN0O1xuK1x0dTY0IHR4X2RlZmVycmVkO1xuK1x0dTY0IHR4X3RvdGFsX2NvbDtcbitcdHU2NCB0eF9leGNfY29sO1xuK1x0dTY0IHR4X3NpbmdsZV9jb2w7XG4rXHR1NjQgdHhfbXVsdF9jb2w7XG4rXHR1NjQgcnhfZGlzY2FyZHM7XG4rXHR1NjQgdHhfZGlzY2FyZHM7XG4rfTtcbitcbiBzdGF0aWMgdm9pZCBrc3pfY2ZnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1OCBiaXRzLCBib29sIHNldClcbiB7XG4gXHRrc3pfcm13OChkZXYsIGFkZHIsIGJpdHMsIHNldCA/IGJpdHMgOiAwKTtcbkBAIC0xNTgsMTAgKzIwNCwxNyBAQCBzdGF0aWMgaW50IGtzejhfcmVzZXRfc3dpdGNoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3o4ODYzX2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXG4rc3RhdGljIGludCBrc3o4OHh4X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG10dSlcbiB7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdGludCBmcmFtZV9zaXplO1xuIFx0dTggY3RybDIgPSAwO1xuIFxuK1x0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZGV2LVx1MDAzZWRzLCBwb3J0KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmcmFtZV9zaXplID0gbXR1ICsgVkxBTl9FVEhfSExFTiArIEVUSF9GQ1NfTEVOO1xuK1xuIFx0aWYgKGZyYW1lX3NpemUgXHUwMDNjPSBLU1o4X0xFR0FMX1BBQ0tFVF9TSVpFKVxuIFx0XHRjdHJsMiB8PSBLU1o4ODYzX0xFR0FMX1BBQ0tFVF9FTkFCTEU7XG4gXHRlbHNlIGlmIChmcmFtZV9zaXplIFx1MDAzZSBLU1o4ODYzX05PUk1BTF9QQUNLRVRfU0laRSlcbkBAIC0xNzEsMTEgKzIyNCwxOCBAQCBzdGF0aWMgaW50IGtzejg4NjNfY2hhbmdlX210dShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgZnJhbWVfc2l6ZSlcbiBcdFx0XHRLU1o4ODYzX0hVR0VfUEFDS0VUX0VOQUJMRSwgY3RybDIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzejg3OTVfY2hhbmdlX210dShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgZnJhbWVfc2l6ZSlcbitzdGF0aWMgaW50IGtzejg3eHhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxuIHtcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0dTggY3RybDEgPSAwLCBjdHJsMiA9IDA7XG4rXHR1MTYgZnJhbWVfc2l6ZTtcbiBcdGludCByZXQ7XG4gXG4rXHRpZiAoIWRzYV9pc19jcHVfcG9ydChkZXYtXHUwMDNlZHMsIHBvcnQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZyYW1lX3NpemUgPSBtdHUgKyBWTEFOX0VUSF9ITEVOICsgRVRIX0ZDU19MRU47XG4rXG4gXHRpZiAoZnJhbWVfc2l6ZSBcdTAwM2UgS1NaOF9MRUdBTF9QQUNLRVRfU0laRSlcbiBcdFx0Y3RybDIgfD0gU1dfTEVHQUxfUEFDS0VUX0RJU0FCTEU7XG4gXHRpZiAoZnJhbWVfc2l6ZSBcdTAwM2UgS1NaODg2M19OT1JNQUxfUEFDS0VUX1NJWkUpXG5AQCAtMTg4LDI5ICsyNDgsMTQgQEAgc3RhdGljIGludCBrc3o4Nzk1X2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXG4gXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8yLCBTV19MRUdBTF9QQUNLRVRfRElTQUJMRSwgY3RybDIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzejhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxuK3N0YXRpYyBpbnQga3N6ODd4eF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4ge1xuLVx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4tXHR1MTYgZnJhbWVfc2l6ZTtcbi1cbi1cdGlmICghZHNhX2lzX2NwdV9wb3J0KGRldi1cdTAwM2VkcywgcG9ydCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0ZnJhbWVfc2l6ZSA9IG10dSArIFZMQU5fRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjtcbi1cbi1cdHN3aXRjaCAoZGV2LVx1MDAzZWNoaXBfaWQpIHtcbi1cdGNhc2UgS1NaODc5NV9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4Nzk0X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIGtzejg3OTVfY2hhbmdlX210dShkZXYsIGZyYW1lX3NpemUpO1xuLVx0Y2FzZSBLU1o4NDYzX0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg4WDNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODg2NF9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4ODk1X0NISVBfSUQ6XG4tXHRcdHJldHVybiBrc3o4ODYzX2NoYW5nZV9tdHUoZGV2LCBmcmFtZV9zaXplKTtcbi1cdH1cbitcdHJldHVybiBLU1o4Nzk1X0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XG4rfVxuIFxuLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK3N0YXRpYyBpbnQga3N6ODh4eF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4re1xuK1x0cmV0dXJuIEtTWjg4NjNfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjtcbiB9XG4gXG4gc3RhdGljIGludCBrc3o4X3BvcnRfcXVldWVfc3BsaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGludCBxdWV1ZXMpXG5AQCAtMTc0Niw2ICsxNzkxLDE1OSBAQCBzdGF0aWMgdm9pZCBrc3o4X3BvcnRfbWlycm9yX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdCAgICAgUE9SVF9NSVJST1JfU05JRkZFUiwgZmFsc2UpO1xuIH1cbiBcbitzdGF0aWMgdTgga3N6ODQ2M190Y19jdHJsKGludCBwb3J0LCBpbnQgcXVldWUpXG4re1xuK1x0dTggcmVnO1xuK1xuK1x0cmVnID0gMHhDOCArIHBvcnQgKiA0O1xuK1x0cmVnICs9ICgoMyAtIHF1ZXVlKSAvIDIpICogMjtcbitcdHJlZysrO1xuK1x0cmVnIC09IChxdWV1ZSBcdTAwMjYgMSk7XG4rXHRyZXR1cm4gcmVnO1xuK31cbitcbisvKipcbisgKiBrc3o4OHgzX3RjX2V0c19hZGQgLSBDb25maWd1cmUgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKVxuKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2hcbisgKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBLU1ogc3dpdGNoIGRldmljZSBzdHJ1Y3R1cmVcbisgKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gY29uZmlndXJlXG4rICogQHA6IFBvaW50ZXIgdG8gb2ZmbG9hZCByZXBsYWNlIHBhcmFtZXRlcnMgZGVzY3JpYmluZyBFVFMgYmFuZHMgYW5kIG1hcHBpbmdcbisgKlxuKyAqIFRoZSBLU1o4OHgzIHN1cHBvcnRzIHR3byBzY2hlZHVsaW5nIG1vZGVzOiBTdHJpY3QgUHJpb3JpdHkgYW5kXG4rICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLiBCb3RoIG1vZGVzIGhhdmUgZml4ZWQgYmVoYXZpb3I6XG4rICogICAtIE5vIGNvbmZpZ3VyYWJsZSBxdWV1ZS10by1wcmlvcml0eSBtYXBwaW5nXG4rICogICAtIE5vIHdlaWdodCBhZGp1c3RtZW50IGluIFdGUSBtb2RlXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHN3aXRjaCB0byB1c2Ugc3RyaWN0IHByaW9yaXR5IG1vZGUgYnlcbisgKiBjbGVhcmluZyB0aGUgV0ZRIGVuYWJsZSBiaXQgZm9yIGFsbCBxdWV1ZXMgYXNzb2NpYXRlZCB3aXRoIEVUUyBiYW5kcy5cbisgKiBJZiBzdHJpY3QgcHJpb3JpdHkgaXMgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCB0aGUgc3dpdGNoIHdpbGwgZGVmYXVsdFxuKyAqIHRvIFdGUSBtb2RlLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXG4rICovXG4rc3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19hZGQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4rXHRcdFx0ICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXG4re1xuK1x0aW50IHJldCwgYmFuZDtcbitcbitcdC8qIE9ubHkgc3RyaWN0IHByaW9yaXR5IG1vZGUgaXMgc3VwcG9ydGVkIGZvciBub3cuXG4rXHQgKiBXRlEgaXMgaW1wbGljaXRseSBlbmFibGVkIHdoZW4gc3RyaWN0IG1vZGUgaXMgZGlzYWJsZWQuXG4rXHQgKi9cbitcdGZvciAoYmFuZCA9IDA7IGJhbmQgXHUwMDNjIHAtXHUwMDNlYmFuZHM7IGJhbmQrKykge1xuK1x0XHRpbnQgcXVldWUgPSBrc3pfZXRzX2JhbmRfdG9fcXVldWUocCwgYmFuZCk7XG4rXHRcdHU4IHJlZztcbitcbitcdFx0LyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXNcbitcdFx0ICogcG9ydC9xdWV1ZVxuK1x0XHQgKi9cbitcdFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xuK1x0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbitcdFx0XHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xuK1xuK1x0XHQvKiBDbGVhciBXRlEgZW5hYmxlIGJpdCB0byBzZWxlY3Qgc3RyaWN0IHByaW9yaXR5IHNjaGVkdWxpbmcgKi9cbitcdFx0cmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsIDApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICoga3N6ODh4M190Y19ldHNfZGVsIC0gUmVzZXQgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKSBjb25maWdcbisgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBwb3J0IG9uIEtTWjg4eDMgc3dpdGNoXG4rICogQGRldjogUG9pbnRlciB0byB0aGUgS1NaIHN3aXRjaCBkZXZpY2Ugc3RydWN0dXJlXG4rICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIHJlc2V0XG4rICpcbisgKiBUaGUgS1NaODh4MyBzdXBwb3J0cyBvbmx5IGZpeGVkIHNjaGVkdWxpbmcgbW9kZXM6IFN0cmljdCBQcmlvcml0eSBvclxuKyAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKSwgd2l0aCBubyByZWNvbmZpZ3VyYXRpb24gb2Ygd2VpZ2h0cyBvclxuKyAqIHF1ZXVlIG1hcHBpbmcuIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBwb3J04oCZcyBzY2hlZHVsaW5nIG1vZGUgdG9cbisgKiB0aGUgZGVmYXVsdCwgd2hpY2ggaXMgV0ZRLCBieSBlbmFibGluZyB0aGUgV0ZRIGJpdCBmb3IgYWxsIHF1ZXVlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuKyAqL1xuK3N0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuK3tcbitcdGludCByZXQsIHF1ZXVlO1xuK1xuK1x0LyogSXRlcmF0ZSBvdmVyIGFsbCB0cmFuc21pdCBxdWV1ZXMgZm9yIHRoaXMgcG9ydCAqL1xuK1x0Zm9yIChxdWV1ZSA9IDA7IHF1ZXVlIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2VudW1fdHhfcXVldWVzOyBxdWV1ZSsrKSB7XG4rXHRcdHU4IHJlZztcbitcbitcdFx0LyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXNcbitcdFx0ICogcG9ydC9xdWV1ZVxuK1x0XHQgKi9cbitcdFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xuK1x0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbitcdFx0XHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xuK1xuK1x0XHQvKiBTZXQgV0ZRIGVuYWJsZSBiaXQgdG8gcmV2ZXJ0IGJhY2sgdG8gZGVmYXVsdCBzY2hlZHVsaW5nXG4rXHRcdCAqIG1vZGVcbitcdFx0ICovXG4rXHRcdHJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLFxuK1x0XHRcdCAgICAgICBLU1o4ODczX1RYUV9XRlFfRU5BQkxFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6OF90Y19zZXR1cF9xZGlzY19ldHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpxb3B0KVxuK3tcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmICghKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChxb3B0LVx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIlBhcmVudCBzaG91bGQgYmUgXFxcInJvb3RcXFwiXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKHFvcHQtXHUwMDNlY29tbWFuZCkge1xuK1x0Y2FzZSBUQ19FVFNfUkVQTEFDRTpcbitcdFx0cmV0ID0ga3N6X3RjX2V0c192YWxpZGF0ZShkZXYsIHBvcnQsIFx1MDAyNnFvcHQtXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldHVybiBrc3o4OHgzX3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcdTAwMjZxb3B0LVx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcbitcdGNhc2UgVENfRVRTX0RFU1RST1k6XG4rXHRcdHJldHVybiBrc3o4OHgzX3RjX2V0c19kZWwoZGV2LCBwb3J0KTtcbitcdGNhc2UgVENfRVRTX1NUQVRTOlxuK1x0Y2FzZSBUQ19FVFNfR1JBRlQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGludCBrc3o4N3h4X3NldHVwX3RjKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICAgIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLCB2b2lkICp0eXBlX2RhdGEpXG4re1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX0NCUzpcbitcdFx0cmV0dXJuIGtzel9zZXR1cF90Y19jYnMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6OF9zZXR1cF90YyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6XG4rXHRcdHJldHVybiBrc3pfc2V0dXBfdGNfY2JzKGRzLCBwb3J0LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19FVFM6XG4rXHRcdHJldHVybiBrc3o4X3RjX3NldHVwX3FkaXNjX2V0cyhkcywgcG9ydCwgdHlwZV9kYXRhKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQga3N6ODc5NV9jcHVfaW50ZXJmYWNlX3NlbGVjdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiB7XG4gXHRzdHJ1Y3Qga3N6X3BvcnQgKnAgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbcG9ydF07XG5AQCAtMjA1Myw2ICsyMjUxLDE3MSBAQCBzdGF0aWMgaW50IGtzejhfZW5hYmxlX3N0cF9hZGRyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4ga3N6OF93X3N0YV9tYWNfdGFibGUoZGV2LCAwLCBcdTAwMjZhbHUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBrc3o4OHh4X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4re1xuK1x0c3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBzdGF0cztcbitcdHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHM7XG4rXHRzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKnJhdztcbitcdHN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYjtcbitcbitcdG1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4rXHRzdGF0cyA9IFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0O1xuK1x0cHN0YXRzID0gXHUwMDI2bWliLVx1MDAzZXBhdXNlX3N0YXRzO1xuK1x0cmF3ID0gKHN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyAqKW1pYi1cdTAwM2Vjb3VudGVycztcbitcbitcdHNwaW5fbG9jayhcdTAwMjZtaWItXHUwMDNlc3RhdHM2NF9sb2NrKTtcbitcbitcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSByYXctXHUwMDNlcnhfYmNhc3QgKyByYXctXHUwMDNlcnhfbWNhc3QgKyByYXctXHUwMDNlcnhfdWNhc3QgK1xuK1x0XHRyYXctXHUwMDNlcnhfcGF1c2U7XG4rXHRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzID0gcmF3LVx1MDAzZXR4X2JjYXN0ICsgcmF3LVx1MDAzZXR4X21jYXN0ICsgcmF3LVx1MDAzZXR4X3VjYXN0ICtcbitcdFx0cmF3LVx1MDAzZXR4X3BhdXNlO1xuK1xuK1x0LyogSFcgY291bnRlcnMgYXJlIGNvdW50aW5nIGJ5dGVzICsgRkNTIHdoaWNoIGlzIG5vdCBhY2NlcHRhYmxlXG4rXHQgKiBmb3IgcnRubF9saW5rX3N0YXRzNjQgaW50ZXJmYWNlXG4rXHQgKi9cbitcdHN0YXRzLVx1MDAzZXJ4X2J5dGVzID0gcmF3LVx1MDAzZXJ4ICsgcmF3LVx1MDAzZXJ4X2hpIC0gc3RhdHMtXHUwMDNlcnhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOO1xuK1x0c3RhdHMtXHUwMDNldHhfYnl0ZXMgPSByYXctXHUwMDNldHggKyByYXctXHUwMDNldHhfaGkgLSBzdGF0cy1cdTAwM2V0eF9wYWNrZXRzICogRVRIX0ZDU19MRU47XG4rXG4rXHRzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzID0gcmF3LVx1MDAzZXJ4X3VuZGVyc2l6ZSArIHJhdy1cdTAwM2VyeF9mcmFnbWVudHMgK1xuK1x0XHRyYXctXHUwMDNlcnhfb3ZlcnNpemU7XG4rXG4rXHRzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzID0gcmF3LVx1MDAzZXJ4X2NyY19lcnI7XG4rXHRzdGF0cy1cdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSByYXctXHUwMDNlcnhfYWxpZ25fZXJyO1xuK1x0c3RhdHMtXHUwMDNlcnhfZHJvcHBlZCA9IHJhdy1cdTAwM2VyeF9kaXNjYXJkcztcbitcdHN0YXRzLVx1MDAzZXJ4X2Vycm9ycyA9IHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgKyBzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzICtcbitcdFx0c3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzICArIHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQ7XG4rXG4rXHRzdGF0cy1cdTAwM2V0eF93aW5kb3dfZXJyb3JzID0gcmF3LVx1MDAzZXR4X2xhdGVfY29sO1xuK1x0c3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgPSByYXctXHUwMDNldHhfZGlzY2FyZHM7XG4rXHRzdGF0cy1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyA9IHJhdy1cdTAwM2V0eF9leGNfY29sO1xuK1x0c3RhdHMtXHUwMDNldHhfZXJyb3JzID0gc3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycyArIHN0YXRzLVx1MDAzZXR4X2ZpZm9fZXJyb3JzICtcbitcdFx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnM7XG4rXG4rXHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgPSByYXctXHUwMDNlcnhfbWNhc3Q7XG4rXHRzdGF0cy1cdTAwM2Vjb2xsaXNpb25zID0gcmF3LVx1MDAzZXR4X3RvdGFsX2NvbDtcbitcbitcdHBzdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSByYXctXHUwMDNldHhfcGF1c2U7XG4rXHRwc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcmF3LVx1MDAzZXJ4X3BhdXNlO1xuK1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2bWliLVx1MDAzZXN0YXRzNjRfbG9jayk7XG4rfVxuK1xuKy8qKlxuKyAqIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbiBmb3JcbisgKlx0XHRcdFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxuKyAqIEBkZXY6ICAgICAgIGtzeiBkZXZpY2VcbisgKiBAcHJvcHM6ICAgICBBcnJheSBvZiBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIHRvIGJlIHNldFxuKyAqIEBudW1fcHJvcHM6IE51bWJlciBvZiBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheVxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggc2V0dGluZ3MgdG8gS1NaODhYMyBjaGlwXG4rICogdmFyaWFudHMgKEtTWjg4NzMsIEtTWjg4NjMpLlxuKyAqIEl0IGVuc3VyZXMgdGhlIGNvbmZpZ3VyYXRpb25zIGFsaWduIHdpdGggd2hhdCB0aGUgY2hpcCB2YXJpYW50IHN1cHBvcnRzIGFuZFxuKyAqIHdhcm5zIG9yIGVycm9ycyBvdXQgb24gdW5zdXBwb3J0ZWQgc2V0dGluZ3MuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW50IGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4rXHRcdFx0XHRcdGludCBudW1fcHJvcHMpXG4re1xuK1x0c2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzKTtcbitcdGludCBtaWNyb2FtcDtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcHJvcHM7IGkrKykge1xuK1x0XHRpZiAocHJvcHNbaV0udmFsdWUgPT0gLTEgfHwgaSA9PSBLU1pfRFJJVkVSX1NUUkVOR1RIX0lPKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcIiVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcXG5cIixcbitcdFx0XHQgcHJvcHNbaV0ubmFtZSk7XG4rXHR9XG4rXG4rXHRtaWNyb2FtcCA9IHByb3BzW0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dLnZhbHVlO1xuK1x0cmV0ID0ga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocywgYXJyYXlfc2l6ZSxcbitcdFx0XHRcdFx0bWljcm9hbXApO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3IoZGV2LCBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyxcbitcdFx0XHRcdFx0IGFycmF5X3NpemUsIG1pY3JvYW1wKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiBrc3pfcm13OChkZXYsIEtTWjg4NzNfUkVHX0dMT0JBTF9DVFJMXzEyLFxuK1x0XHRcdEtTWjg4NzNfRFJJVkVfU1RSRU5HVEhfMTZNQSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICoga3N6OF9wYXJzZV9kcml2ZV9zdHJlbmd0aCgpIC0gRXh0cmFjdCBhbmQgYXBwbHkgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbnNcbisgKlx0XHRcdFx0IGZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy5cbisgKiBAZGV2Olx0a3N6IGRldmljZVxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgZnJvbSB0aGVcbisgKiBkZXZpY2UgdHJlZSwgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHN1cHBvcnRlZCBjaGlwIHZhcmlhbnRzLCBhbmQgc2V0c1xuKyAqIHRoZW0gYWNjb3JkaW5nbHkuIEFuIGVycm9yIHNob3VsZCBiZSBjcml0aWNhbCBoZXJlLCBhcyB0aGUgZHJpdmUgc3RyZW5ndGhcbisgKiBzZXR0aW5ncyBhcmUgY3J1Y2lhbCBmb3IgRU1JIGNvbXBsaWFuY2UuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW50IGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIG9mX3Byb3BzW10gPSB7XG4rXHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0hJXSA9IHtcbitcdFx0XHQubmFtZSA9IFwibWljcm9jaGlwLGhpLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCIsXG4rXHRcdFx0Lm9mZnNldCA9IFNXX0hJX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXG4rXHRcdFx0LnZhbHVlID0gLTEsXG4rXHRcdH0sXG4rXHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0xPXSA9IHtcbitcdFx0XHQubmFtZSA9IFwibWljcm9jaGlwLGxvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCIsXG4rXHRcdFx0Lm9mZnNldCA9IFNXX0xPX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXG4rXHRcdFx0LnZhbHVlID0gLTEsXG4rXHRcdH0sXG4rXHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0lPXSA9IHtcbitcdFx0XHQubmFtZSA9IFwibWljcm9jaGlwLGlvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCIsXG4rXHRcdFx0Lm9mZnNldCA9IDAsIC8qIGRvbid0IGNhcmUgKi9cbitcdFx0XHQudmFsdWUgPSAtMSxcbitcdFx0fSxcbitcdH07XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlO1xuK1x0Ym9vbCBoYXZlX2FueV9wcm9wID0gZmFsc2U7XG4rXHRpbnQgaSwgcmV0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkrKykge1xuK1x0XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgb2ZfcHJvcHNbaV0ubmFtZSxcbitcdFx0XHRcdFx0ICAgXHUwMDI2b2ZfcHJvcHNbaV0udmFsdWUpO1xuK1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTClcbitcdFx0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWFkICVzXFxuXCIsXG4rXHRcdFx0XHQgb2ZfcHJvcHNbaV0ubmFtZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGhhdmVfYW55X3Byb3AgPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKCFoYXZlX2FueV9wcm9wKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHN3aXRjaCAoZGV2LVx1MDAzZWNoaXBfaWQpIHtcbitcdGNhc2UgS1NaODhYM19DSElQX0lEOlxuK1x0XHRyZXR1cm4ga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxuK1x0XHRcdFx0XHRcdCAgICBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4rXHRjYXNlIEtTWjg3OTVfQ0hJUF9JRDpcbitcdGNhc2UgS1NaODc5NF9DSElQX0lEOlxuK1x0Y2FzZSBLU1o4NzY1X0NISVBfSUQ6XG4rXHRcdHJldHVybiBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcyxcbitcdFx0XHRcdFx0XHRBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4rXHRkZWZhdWx0OlxuK1x0XHQvKiBLU1o4ODY0LCBLU1o4ODk1ICovXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpKyspIHtcbitcdFx0XHRpZiAob2ZfcHJvcHNbaV0udmFsdWUgPT0gLTEpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcIiVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcXG5cIixcbitcdFx0XHRcdCBvZl9wcm9wc1tpXS5uYW1lKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtMjA3NSw3ICsyNDM4LDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuK1x0cmV0ID0ga3N6OF9wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yNTUxLDggKzI5MTQsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfbWlycm9yX2RlbFx0PSBrc3o4X3BvcnRfbWlycm9yX2RlbCxcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbi1cdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OF9jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuK1x0LnBvcnRfY2hhbmdlX210dVx0PSBrc3o4OHh4X2NoYW5nZV9tdHUsXG4rXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6ODh4eF9tYXhfbXR1LFxuIFx0LnN1c3BlbmRcdFx0PSBrc3pfc3VzcGVuZCxcbiBcdC5yZXN1bWVcdFx0XHQ9IGtzel9yZXN1bWUsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBrc3pfZ2V0X3RzX2luZm8sXG5AQCAtMjU2MCw3ICsyOTIzLDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxuIFx0LnBvcnRfdHh0c3RhbXBcdFx0PSBrc3pfcG9ydF90eHRzdGFtcCxcbiBcdC5wb3J0X3J4dHN0YW1wXHRcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXG4tXHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzel9zZXR1cF90YyxcbitcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6OF9zZXR1cF90YyxcbiBcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X3NldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X2dldF9kc2NwX3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbyxcbkBAIC0yNjAxLDggKzI5NjQsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfbWlycm9yX2RlbFx0PSBrc3o4X3BvcnRfbWlycm9yX2RlbCxcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbi1cdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OF9jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuK1x0LnBvcnRfY2hhbmdlX210dVx0PSBrc3o4N3h4X2NoYW5nZV9tdHUsXG4rXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6ODd4eF9tYXhfbXR1LFxuIFx0LnN1c3BlbmRcdFx0PSBrc3pfc3VzcGVuZCxcbiBcdC5yZXN1bWVcdFx0XHQ9IGtzel9yZXN1bWUsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBrc3pfZ2V0X3RzX2luZm8sXG5AQCAtMjYxMCw3ICsyOTczLDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg3eHhfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxuIFx0LnBvcnRfdHh0c3RhbXBcdFx0PSBrc3pfcG9ydF90eHRzdGFtcCxcbiBcdC5wb3J0X3J4dHN0YW1wXHRcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXG4tXHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzel9zZXR1cF90YyxcbitcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6ODd4eF9zZXR1cF90YyxcbiBcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X3NldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X2dldF9kc2NwX3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbyxcbkBAIC0yNjUyLDggKzMwMTUsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODh4eF9zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfbWlycm9yX2RlbFx0PSBrc3o4X3BvcnRfbWlycm9yX2RlbCxcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbi1cdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OF9jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuK1x0LnBvcnRfY2hhbmdlX210dVx0PSBrc3o4OHh4X2NoYW5nZV9tdHUsXG4rXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6ODh4eF9tYXhfbXR1LFxuIFx0LmdldF93b2xcdFx0PSBrc3pfZ2V0X3dvbCxcbiBcdC5zZXRfd29sXHRcdD0ga3N6X3NldF93b2wsXG4gXHQuc3VzcGVuZFx0XHQ9IGtzel9zdXNwZW5kLFxuQEAgLTI2NjMsNyArMzAyNiw3IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4OHh4X3N3aXRjaF9vcHMgPSB7XG4gXHQucG9ydF9od3RzdGFtcF9zZXRcdD0ga3N6X2h3dHN0YW1wX3NldCxcbiBcdC5wb3J0X3R4dHN0YW1wXHRcdD0ga3N6X3BvcnRfdHh0c3RhbXAsXG4gXHQucG9ydF9yeHRzdGFtcFx0XHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxuLVx0LnBvcnRfc2V0dXBfdGNcdFx0PSBrc3pfc2V0dXBfdGMsXG4rXHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzejhfc2V0dXBfdGMsXG4gXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4gXHQucG9ydF9zZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X3NldF9kZWZhdWx0X3ByaW8sXG4gXHQucG9ydF9nZXRfZHNjcF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kc2NwX3ByaW8sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xuaW5kZXggZjNmMGM5OGRmYjVhN2YuLjNlZTk5NTU0NWM1Nzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5AQCAtMTUsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3N3aXRjaGRldi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJrc3o5NDc3X3JlZy5oXCJcbkBAIC02MCw2ICs2MSwxMSBAQCBzdGF0aWMgaW50IGtzejk0NzdfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxuIFx0XHRcdFx0ICBSRUdfU1dfTVRVX01BU0ssIGZyYW1lX3NpemUpO1xuIH1cbiBcbitpbnQga3N6OTQ3N19tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4re1xuK1x0cmV0dXJuIEtTWjk0NzdfTUFYX0ZSQU1FX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6OTQ3N193YWl0X3ZsYW5fY3RybF9yZWFkeShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGludCB2YWw7XG5AQCAtNDc4LDggKzQ4NCw4IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19oYWxmX2R1cGxleF9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4tXHRcdFx0ICAgdTY0IHR4X2xhdGVfY29sKVxuK3N0YXRpYyBpbnQga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgdTY0IHR4X2xhdGVfY29sKVxuIHtcbiBcdHU4IHN0YXR1cztcbiBcdGludCByZXQ7XG5AQCAtNDk3LDYgKzUwMywyNCBAQCBpbnQga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGtzejk0Nzdfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbit7XG4rXHRzdHJ1Y3Qga3N6X3N0YXRzX3JhdyAqcmF3O1xuK1x0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xuK1x0aW50IHJldDtcbitcbitcdGtzel9yX21pYl9zdGF0czY0KGRldiwgcG9ydCk7XG4rXG4rXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlcGh5X2VycmF0YV85NDc3IFx1MDAyNlx1MDAyNiAha3N6X2lzX3NnbWlpX3BvcnQoZGV2LCBwb3J0KSkge1xuK1x0XHRtaWIgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xuK1x0XHRyYXcgPSAoc3RydWN0IGtzel9zdGF0c19yYXcgKiltaWItXHUwMDNlY291bnRlcnM7XG4rXG4rXHRcdHJldCA9IGtzejk0NzdfZXJyYXRhX21vbml0b3IoZGV2LCBwb3J0LCByYXctXHUwMDNldHhfbGF0ZV9jb2wpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gbW9uaXRvciB0cmFuc21pc3Npb24gaGFsdFxcblwiKTtcbitcdH1cbit9O1xuK1xuIHZvaWQga3N6OTQ3N19wb3J0X2luaXRfY250KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIHtcbiBcdHN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG5AQCAtMTE3Niw2ICsxMjAwLDU4IEBAIHZvaWQga3N6OTQ3N19wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgICAgIFBPUlRfTUlSUk9SX1NOSUZGRVIsIGZhbHNlKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wga3N6OTQ3N19nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbit7XG4rXHRjb25zdCB1OCAqYml0dmFsID0gZGV2LVx1MDAzZWluZm8tXHUwMDNleG1paV9jdHJsMTtcbitcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4rXHRib29sIGdiaXQgPSBmYWxzZTtcbitcdHU4IGRhdGE4O1xuK1x0Ym9vbCB2YWw7XG4rXG4rXHRrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgXHUwMDI2ZGF0YTgpO1xuK1xuK1x0dmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7XG4rXG4rXHRpZiAodmFsID09IGJpdHZhbFtQX0dNSUlfMUdCSVRdKVxuK1x0XHRnYml0ID0gdHJ1ZTtcbitcbitcdHJldHVybiBnYml0O1xuK31cbitcbitzdGF0aWMgcGh5X2ludGVyZmFjZV90IGtzejk0NzdfZ2V0X3htaWkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4rXHRcdFx0XHRcdGJvb2wgZ2JpdClcbit7XG4rXHRjb25zdCB1OCAqYml0dmFsID0gZGV2LVx1MDAzZWluZm8tXHUwMDNleG1paV9jdHJsMTtcbitcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4rXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuK1x0dTggZGF0YTg7XG4rXHR1OCB2YWw7XG4rXG4rXHRrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgXHUwMDI2ZGF0YTgpO1xuK1xuK1x0dmFsID0gRklFTERfR0VUKFBfTUlJX1NFTF9NLCBkYXRhOCk7XG4rXG4rXHRpZiAodmFsID09IGJpdHZhbFtQX01JSV9TRUxdKSB7XG4rXHRcdGlmIChnYml0KVxuK1x0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJO1xuK1x0XHRlbHNlXG4rXHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbitcdH0gZWxzZSBpZiAodmFsID09IGJpdHZhbFtQX1JNSUlfU0VMXSkge1xuK1x0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTtcbitcdH0gZWxzZSB7XG4rXHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTtcbitcdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcbitcdFx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDtcbitcdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0lHX0VOQUJMRSkge1xuK1x0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEO1xuK1x0XHRcdGlmIChkYXRhOCBcdTAwMjYgUF9SR01JSV9JRF9FR19FTkFCTEUpXG4rXHRcdFx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBpbnRlcmZhY2U7XG4rfVxuK1xuIHN0YXRpYyBwaHlfaW50ZXJmYWNlX3Qga3N6OTQ3N19nZXRfaW50ZXJmYWNlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIHtcbiBcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG5AQCAtMTE4NCw5ICsxMjYwLDkgQEAgc3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF9pbnRlcmZhY2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlaW50ZXJuYWxfcGh5W3BvcnRdKVxuIFx0XHRyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuIFxuLVx0Z2JpdCA9IGtzel9nZXRfZ2JpdChkZXYsIHBvcnQpO1xuK1x0Z2JpdCA9IGtzejk0NzdfZ2V0X2diaXQoZGV2LCBwb3J0KTtcbiBcbi1cdGludGVyZmFjZSA9IGtzel9nZXRfeG1paShkZXYsIHBvcnQsIGdiaXQpO1xuK1x0aW50ZXJmYWNlID0ga3N6OTQ3N19nZXRfeG1paShkZXYsIHBvcnQsIGdiaXQpO1xuIFxuIFx0cmV0dXJuIGludGVyZmFjZTtcbiB9XG5AQCAtMTMzNSw2ICsxNDExLDI4IEBAIHN0YXRpYyB2b2lkIGtzejk0NzdfcG9ydF9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBjcHVfcG9ydClcbiBcdGtzel9wd3JpdGU4KGRldiwgcG9ydCwgcmVnc1tSRUdfUE9SVF9QTUVfQ1RSTF0sIDApO1xuIH1cbiBcbitpbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4re1xuK1x0dTMyIHF1ZXVlX21hcCA9IDA7XG4rXHRpbnQgaXBtO1xuK1xuK1x0Zm9yIChpcG0gPSAwOyBpcG0gXHUwMDNjIGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV9pcG1zOyBpcG0rKykge1xuK1x0XHRpbnQgcXVldWU7XG4rXG4rXHRcdC8qIFRyYWZmaWMgVHlwZSAoVFQpIGlzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEludGVybmFsIFByaW9yaXR5XG4rXHRcdCAqIE1hcCAoSVBNKSBpbiB0aGUgc3dpdGNoLiBUcmFmZmljIENsYXNzIChUQykgaXNcbitcdFx0ICogY29ycmVzcG9uZGluZyB0byB0aGUgcXVldWUgaW4gdGhlIHN3aXRjaC5cbitcdFx0ICovXG4rXHRcdHF1ZXVlID0gaWVlZTgwMjFxX3R0X3RvX3RjKGlwbSwgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4rXHRcdGlmIChxdWV1ZSBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcXVldWU7XG4rXG4rXHRcdHF1ZXVlX21hcCB8PSBxdWV1ZSBcdTAwM2NcdTAwM2MgKGlwbSAqIEtTWjk0NzdfUE9SVF9UQ19NQVBfUyk7XG4rXHR9XG4rXG4rXHRyZXR1cm4ga3N6X3B3cml0ZTMyKGRldiwgcG9ydCwgS1NaOTQ3N19QT1JUX01SSV9UQ19NQVBfXzQsIHF1ZXVlX21hcCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6OTQ3N19kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTE1MTcsNiArMTYxNSw1OCBAQCBpbnQga3N6OTQ3N19lbmFibGVfc3RwX2FkZHIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiBrc3o5NDc3X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKCkgLSBFeHRyYWN0IGFuZCBhcHBseSBkcml2ZSBzdHJlbmd0aFxuKyAqXHRcdFx0XHQgICAgY29uZmlndXJhdGlvbnMgZnJvbSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLlxuKyAqIEBkZXY6XHRrc3ogZGV2aWNlXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZVxuKyAqIGRldmljZSB0cmVlLCB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGNoaXAgdmFyaWFudHMsIGFuZCBzZXRzXG4rICogdGhlbSBhY2NvcmRpbmdseS4gQW4gZXJyb3Igc2hvdWxkIGJlIGNyaXRpY2FsIGhlcmUsIGFzIHRoZSBkcml2ZSBzdHJlbmd0aFxuKyAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBpbnQga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHtcbitcdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSEldID0ge1xuK1x0XHRcdC5uYW1lID0gXCJtaWNyb2NoaXAsaGktZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcIixcbitcdFx0XHQub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcbitcdFx0XHQudmFsdWUgPSAtMSxcbitcdFx0fSxcbitcdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfTE9dID0ge1xuK1x0XHRcdC5uYW1lID0gXCJtaWNyb2NoaXAsbG8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcIixcbitcdFx0XHQub2Zmc2V0ID0gU1dfTE9fU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcbitcdFx0XHQudmFsdWUgPSAtMSxcbitcdFx0fSxcbitcdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dID0ge1xuK1x0XHRcdC5uYW1lID0gXCJtaWNyb2NoaXAsaW8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcIixcbitcdFx0XHQub2Zmc2V0ID0gMCwgLyogZG9uJ3QgY2FyZSAqL1xuK1x0XHRcdC52YWx1ZSA9IC0xLFxuK1x0XHR9LFxuK1x0fTtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGU7XG4rXHRib29sIGhhdmVfYW55X3Byb3AgPSBmYWxzZTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG9mX3Byb3BzKTsgaSsrKSB7XG4rXHRcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBvZl9wcm9wc1tpXS5uYW1lLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZvZl9wcm9wc1tpXS52YWx1ZSk7XG4rXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVkFMKVxuK1x0XHRcdGRldl93YXJuKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgJXNcXG5cIixcbitcdFx0XHRcdCBvZl9wcm9wc1tpXS5uYW1lKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aGF2ZV9hbnlfcHJvcCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoIWhhdmVfYW55X3Byb3ApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLCBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4rfVxuIHN0YXRpYyBpbnQga3N6OTQ3N19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtMTUzOSw3ICsxNjg5LDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuK1x0cmV0ID0ga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMDUyLDcgKzIyMDIsNyBAQCBjb25zdCBzdHJ1Y3Qga3N6X2Rldl9vcHMga3N6OTQ3N19kZXZfb3BzID0ge1xuIFx0LmNmZ19wb3J0X21lbWJlciA9IGtzejk0NzdfY2ZnX3BvcnRfbWVtYmVyLFxuIFx0LnJfbWliX2NudCA9IGtzejk0Nzdfcl9taWJfY250LFxuIFx0LnJfbWliX3BrdCA9IGtzejk0Nzdfcl9taWJfcGt0LFxuLVx0LnJfbWliX3N0YXQ2NCA9IGtzel9yX21pYl9zdGF0czY0LFxuK1x0LnJfbWliX3N0YXQ2NCA9IGtzejk0Nzdfcl9taWJfc3RhdHM2NCxcbiBcdC5mcmVlemVfbWliID0ga3N6OTQ3N19mcmVlemVfbWliLFxuIFx0LnBvcnRfaW5pdF9jbnQgPSBrc3o5NDc3X3BvcnRfaW5pdF9jbnQsXG4gXHQucG1lX3dyaXRlOCA9IGtzel93cml0ZTgsXG5AQCAtMjA5OCw3ICsyMjQ4LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejk0Nzdfc3dpdGNoX29wcyA9IHtcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbiBcdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OTQ3N19jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuK1x0LnBvcnRfbWF4X210dVx0XHQ9IGtzejk0NzdfbWF4X210dSxcbiBcdC5nZXRfd29sXHRcdD0ga3N6X2dldF93b2wsXG4gXHQuc2V0X3dvbFx0XHQ9IGtzel9zZXRfd29sLFxuIFx0LnN1c3BlbmRcdFx0PSBrc3pfc3VzcGVuZCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5oXG5pbmRleCA5MmExZDg4OTIyNGQzZS4uYTg0YzAwMDAwMGU2NmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmhcbkBAIC0yMSw2ICsyMSw3IEBAIHZvaWQga3N6OTQ3N19mcmVlemVfbWliKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGZyZWV6ZSk7XG4gdm9pZCBrc3o5NDc3X3BvcnRfaW5pdF9jbnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuIGludCBrc3o5NDc3X3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdGJvb2wgZmxhZywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitpbnQga3N6OTQ3N19tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpO1xuIGludCBrc3o5NDc3X3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcbiBcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5AQCAtMzEsOCArMzIsNiBAQCBpbnQga3N6OTQ3N19wb3J0X21pcnJvcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgICAgYm9vbCBpbmdyZXNzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHZvaWQga3N6OTQ3N19wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgICAgIHN0cnVjdCBkc2FfbWFsbF9taXJyb3JfdGNfZW50cnkgKm1pcnJvcik7XG4taW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4tXHRcdFx0ICAgdTY0IHR4X2xhdGVfY29sKTtcbiBpbnQga3N6OTQ3N19mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHQgICAgIGRzYV9mZGJfZHVtcF9jYl90ICpjYiwgdm9pZCAqZGF0YSk7XG4gaW50IGtzejk0NzdfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuQEAgLTQ1LDYgKzQ0LDcgQEAgaW50IGtzejk0NzdfbWRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHQgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYiwgc3RydWN0IGRzYV9kYiBkYik7XG4gaW50IGtzejk0NzdfZW5hYmxlX3N0cF9hZGRyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6OTQ3N19wb3J0X3F1ZXVlX3NwbGl0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcbitpbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuIFxuIGludCBrc3o5NDc3X3BvcnRfYWNsX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuIHZvaWQga3N6OTQ3N19wb3J0X2FjbF9mcmVlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5pbmRleCBkMTcyNjc3OGJiNDg4ZS4uNjdhYjZkZGI5ZTUzZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbkBAIC0zNyw4MiArMzcsNiBAQFxuIFxuICNkZWZpbmUgTUlCX0NPVU5URVJfTlVNIDB4MjBcbiBcbi1zdHJ1Y3Qga3N6X3N0YXRzX3JhdyB7XG4tXHR1NjQgcnhfaGk7XG4tXHR1NjQgcnhfdW5kZXJzaXplO1xuLVx0dTY0IHJ4X2ZyYWdtZW50cztcbi1cdHU2NCByeF9vdmVyc2l6ZTtcbi1cdHU2NCByeF9qYWJiZXJzO1xuLVx0dTY0IHJ4X3N5bWJvbF9lcnI7XG4tXHR1NjQgcnhfY3JjX2Vycjtcbi1cdHU2NCByeF9hbGlnbl9lcnI7XG4tXHR1NjQgcnhfbWFjX2N0cmw7XG4tXHR1NjQgcnhfcGF1c2U7XG4tXHR1NjQgcnhfYmNhc3Q7XG4tXHR1NjQgcnhfbWNhc3Q7XG4tXHR1NjQgcnhfdWNhc3Q7XG4tXHR1NjQgcnhfNjRfb3JfbGVzcztcbi1cdHU2NCByeF82NV8xMjc7XG4tXHR1NjQgcnhfMTI4XzI1NTtcbi1cdHU2NCByeF8yNTZfNTExO1xuLVx0dTY0IHJ4XzUxMl8xMDIzO1xuLVx0dTY0IHJ4XzEwMjRfMTUyMjtcbi1cdHU2NCByeF8xNTIzXzIwMDA7XG4tXHR1NjQgcnhfMjAwMTtcbi1cdHU2NCB0eF9oaTtcbi1cdHU2NCB0eF9sYXRlX2NvbDtcbi1cdHU2NCB0eF9wYXVzZTtcbi1cdHU2NCB0eF9iY2FzdDtcbi1cdHU2NCB0eF9tY2FzdDtcbi1cdHU2NCB0eF91Y2FzdDtcbi1cdHU2NCB0eF9kZWZlcnJlZDtcbi1cdHU2NCB0eF90b3RhbF9jb2w7XG4tXHR1NjQgdHhfZXhjX2NvbDtcbi1cdHU2NCB0eF9zaW5nbGVfY29sO1xuLVx0dTY0IHR4X211bHRfY29sO1xuLVx0dTY0IHJ4X3RvdGFsO1xuLVx0dTY0IHR4X3RvdGFsO1xuLVx0dTY0IHJ4X2Rpc2NhcmRzO1xuLVx0dTY0IHR4X2Rpc2NhcmRzO1xuLX07XG4tXG4tc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3IHtcbi1cdHU2NCByeDtcbi1cdHU2NCByeF9oaTtcbi1cdHU2NCByeF91bmRlcnNpemU7XG4tXHR1NjQgcnhfZnJhZ21lbnRzO1xuLVx0dTY0IHJ4X292ZXJzaXplO1xuLVx0dTY0IHJ4X2phYmJlcnM7XG4tXHR1NjQgcnhfc3ltYm9sX2Vycjtcbi1cdHU2NCByeF9jcmNfZXJyO1xuLVx0dTY0IHJ4X2FsaWduX2Vycjtcbi1cdHU2NCByeF9tYWNfY3RybDtcbi1cdHU2NCByeF9wYXVzZTtcbi1cdHU2NCByeF9iY2FzdDtcbi1cdHU2NCByeF9tY2FzdDtcbi1cdHU2NCByeF91Y2FzdDtcbi1cdHU2NCByeF82NF9vcl9sZXNzO1xuLVx0dTY0IHJ4XzY1XzEyNztcbi1cdHU2NCByeF8xMjhfMjU1O1xuLVx0dTY0IHJ4XzI1Nl81MTE7XG4tXHR1NjQgcnhfNTEyXzEwMjM7XG4tXHR1NjQgcnhfMTAyNF8xNTIyO1xuLVx0dTY0IHR4O1xuLVx0dTY0IHR4X2hpO1xuLVx0dTY0IHR4X2xhdGVfY29sO1xuLVx0dTY0IHR4X3BhdXNlO1xuLVx0dTY0IHR4X2JjYXN0O1xuLVx0dTY0IHR4X21jYXN0O1xuLVx0dTY0IHR4X3VjYXN0O1xuLVx0dTY0IHR4X2RlZmVycmVkO1xuLVx0dTY0IHR4X3RvdGFsX2NvbDtcbi1cdHU2NCB0eF9leGNfY29sO1xuLVx0dTY0IHR4X3NpbmdsZV9jb2w7XG4tXHR1NjQgdHhfbXVsdF9jb2w7XG4tXHR1NjQgcnhfZGlzY2FyZHM7XG4tXHR1NjQgdHhfZGlzY2FyZHM7XG4tfTtcbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGtzel9taWJfbmFtZXMga3N6ODh4eF9taWJfbmFtZXNbXSA9IHtcbiBcdHsgMHgwMCwgXCJyeFwiIH0sXG4gXHR7IDB4MDEsIFwicnhfaGlcIiB9LFxuQEAgLTE4OSwyOCArMTEzLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfbWliX25hbWVzIGtzejk0NzdfbWliX25hbWVzW10gPSB7XG4gXHR7IDB4ODMsIFwidHhfZGlzY2FyZHNcIiB9LFxuIH07XG4gXG4tc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCB7XG4tXHRjb25zdCBjaGFyICpuYW1lO1xuLVx0aW50IG9mZnNldDtcbi1cdGludCB2YWx1ZTtcbi19O1xuLVxuLWVudW0ga3N6X2RyaXZlcl9zdHJlbmd0aF90eXBlIHtcbi1cdEtTWl9EUklWRVJfU1RSRU5HVEhfSEksXG4tXHRLU1pfRFJJVkVSX1NUUkVOR1RIX0xPLFxuLVx0S1NaX0RSSVZFUl9TVFJFTkdUSF9JTyxcbi19O1xuLVxuLS8qKlxuLSAqIHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggLSBkcml2ZSBzdHJlbmd0aCBtYXBwaW5nXG4tICogQHJlZ192YWw6XHRyZWdpc3RlciB2YWx1ZVxuLSAqIEBtaWNyb2FtcDpcdG1pY3JvYW1wIHZhbHVlXG4tICovXG4tc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCB7XG4tXHR1MzIgcmVnX3ZhbDtcbi1cdHUzMiBtaWNyb2FtcDtcbi19O1xuLVxuIC8qIGtzejk0NzdfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaOTQ3NyB2YXJpYW50c1xuICAqXG4gICogVGhpcyB2YWx1ZXMgYXJlIG5vdCBkb2N1bWVudGVkIGluIEtTWjk0NzcgdmFyaWFudHMgYnV0IGNvbmZpcm1lZCBieVxuQEAgLTI0NiwxNSArMTQ4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHNbXSA9IHtcbiBcdHsgU1dfRFJJVkVfU1RSRU5HVEhfMjhNQSwgMjgwMDAgfSxcbiB9O1xuIFxuLS8qIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaODg2MywgS1NaODg3MywgLi5cbi0gKlx0XHRcdCAgICAgdmFyaWFudHMuXG4tICogVGhpcyB2YWx1ZXMgYXJlIGRvY3VtZW50ZWQgaW4gS1NaODg3MyBhbmQgS1NaODg2MyBkYXRhc2hlZXRzLlxuLSAqL1xuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7XG4tXHR7IDAsICA4MDAwIH0sXG4tXHR7IEtTWjg4NzNfRFJJVkVfU1RSRU5HVEhfMTZNQSwgMTYwMDAgfSxcbi19O1xuLVxuIC8qKlxuICAqIGtzel9waHlsaW5rX21hY19kaXNhYmxlX3R4X2xwaSgpIC0gQ2FsbGJhY2sgdG8gc2lnbmFsIExQSSBzdXBwb3J0IChEdW1teSlcbiAgKiBAY29uZmlnOiBwaHlsaW5rIGNvbmZpZyBzdHJ1Y3R1cmVcbkBAIC0yMDEzLDcgKzE5MDYsNiBAQCB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIFx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cztcbiBcdHN0cnVjdCBrc3pfc3RhdHNfcmF3ICpyYXc7XG4gXHRzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7XG4tXHRpbnQgcmV0O1xuIFxuIFx0bWliID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYjtcbiBcdHN0YXRzID0gXHUwMDI2bWliLVx1MDAzZXN0YXRzNjQ7XG5AQCAtMjA1NSw2MSArMTk0Nyw2IEBAIHZvaWQga3N6X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRwc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcmF3LVx1MDAzZXJ4X3BhdXNlO1xuIFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2bWliLVx1MDAzZXN0YXRzNjRfbG9jayk7XG4tXG4tXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlcGh5X2VycmF0YV85NDc3IFx1MDAyNlx1MDAyNiAha3N6X2lzX3NnbWlpX3BvcnQoZGV2LCBwb3J0KSkge1xuLVx0XHRyZXQgPSBrc3o5NDc3X2VycmF0YV9tb25pdG9yKGRldiwgcG9ydCwgcmF3LVx1MDAzZXR4X2xhdGVfY29sKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIG1vbml0b3IgdHJhbnNtaXNzaW9uIGhhbHRcXG5cIik7XG4tXHR9XG4tfVxuLVxuLXZvaWQga3N6ODh4eF9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuLXtcbi1cdHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwc3RhdHM7XG4tXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzO1xuLVx0c3RydWN0IGtzejg4eHhfc3RhdHNfcmF3ICpyYXc7XG4tXHRzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7XG4tXG4tXHRtaWIgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xuLVx0c3RhdHMgPSBcdTAwMjZtaWItXHUwMDNlc3RhdHM2NDtcbi1cdHBzdGF0cyA9IFx1MDAyNm1pYi1cdTAwM2VwYXVzZV9zdGF0cztcbi1cdHJhdyA9IChzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKiltaWItXHUwMDNlY291bnRlcnM7XG4tXG4tXHRzcGluX2xvY2soXHUwMDI2bWliLVx1MDAzZXN0YXRzNjRfbG9jayk7XG4tXG4tXHRzdGF0cy1cdTAwM2VyeF9wYWNrZXRzID0gcmF3LVx1MDAzZXJ4X2JjYXN0ICsgcmF3LVx1MDAzZXJ4X21jYXN0ICsgcmF3LVx1MDAzZXJ4X3VjYXN0ICtcbi1cdFx0cmF3LVx1MDAzZXJ4X3BhdXNlO1xuLVx0c3RhdHMtXHUwMDNldHhfcGFja2V0cyA9IHJhdy1cdTAwM2V0eF9iY2FzdCArIHJhdy1cdTAwM2V0eF9tY2FzdCArIHJhdy1cdTAwM2V0eF91Y2FzdCArXG4tXHRcdHJhdy1cdTAwM2V0eF9wYXVzZTtcbi1cbi1cdC8qIEhXIGNvdW50ZXJzIGFyZSBjb3VudGluZyBieXRlcyArIEZDUyB3aGljaCBpcyBub3QgYWNjZXB0YWJsZVxuLVx0ICogZm9yIHJ0bmxfbGlua19zdGF0czY0IGludGVyZmFjZVxuLVx0ICovXG4tXHRzdGF0cy1cdTAwM2VyeF9ieXRlcyA9IHJhdy1cdTAwM2VyeCArIHJhdy1cdTAwM2VyeF9oaSAtIHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgKiBFVEhfRkNTX0xFTjtcbi1cdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gcmF3LVx1MDAzZXR4ICsgcmF3LVx1MDAzZXR4X2hpIC0gc3RhdHMtXHUwMDNldHhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9IHJhdy1cdTAwM2VyeF91bmRlcnNpemUgKyByYXctXHUwMDNlcnhfZnJhZ21lbnRzICtcbi1cdFx0cmF3LVx1MDAzZXJ4X292ZXJzaXplO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyA9IHJhdy1cdTAwM2VyeF9jcmNfZXJyO1xuLVx0c3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzID0gcmF3LVx1MDAzZXJ4X2FsaWduX2Vycjtcbi1cdHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQgPSByYXctXHUwMDNlcnhfZGlzY2FyZHM7XG4tXHRzdGF0cy1cdTAwM2VyeF9lcnJvcnMgPSBzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzICsgc3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyArXG4tXHRcdHN0YXRzLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyAgKyBzdGF0cy1cdTAwM2VyeF9kcm9wcGVkO1xuLVxuLVx0c3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHJhdy1cdTAwM2V0eF9sYXRlX2NvbDtcbi1cdHN0YXRzLVx1MDAzZXR4X2ZpZm9fZXJyb3JzID0gcmF3LVx1MDAzZXR4X2Rpc2NhcmRzO1xuLVx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSByYXctXHUwMDNldHhfZXhjX2NvbDtcbi1cdHN0YXRzLVx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVx1MDAzZXR4X3dpbmRvd19lcnJvcnMgKyBzdGF0cy1cdTAwM2V0eF9maWZvX2Vycm9ycyArXG4tXHRcdHN0YXRzLVx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzO1xuLVxuLVx0c3RhdHMtXHUwMDNlbXVsdGljYXN0ID0gcmF3LVx1MDAzZXJ4X21jYXN0O1xuLVx0c3RhdHMtXHUwMDNlY29sbGlzaW9ucyA9IHJhdy1cdTAwM2V0eF90b3RhbF9jb2w7XG4tXG4tXHRwc3RhdHMtXHUwMDNldHhfcGF1c2VfZnJhbWVzID0gcmF3LVx1MDAzZXR4X3BhdXNlO1xuLVx0cHN0YXRzLVx1MDAzZXJ4X3BhdXNlX2ZyYW1lcyA9IHJhdy1cdTAwM2VyeF9wYXVzZTtcbi1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0X2xvY2spO1xuIH1cbiBcbiB2b2lkIGtzel9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuQEAgLTI4ODUsMjggKzI3MjIsNiBAQCB2b2lkIGtzel9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0ICovXG4gfVxuIFxuLWludCBrc3o5NDc3X3NldF9kZWZhdWx0X3ByaW9fcXVldWVfbWFwcGluZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHR1MzIgcXVldWVfbWFwID0gMDtcbi1cdGludCBpcG07XG4tXG4tXHRmb3IgKGlwbSA9IDA7IGlwbSBcdTAwM2MgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX2lwbXM7IGlwbSsrKSB7XG4tXHRcdGludCBxdWV1ZTtcbi1cbi1cdFx0LyogVHJhZmZpYyBUeXBlIChUVCkgaXMgY29ycmVzcG9uZGluZyB0byB0aGUgSW50ZXJuYWwgUHJpb3JpdHlcbi1cdFx0ICogTWFwIChJUE0pIGluIHRoZSBzd2l0Y2guIFRyYWZmaWMgQ2xhc3MgKFRDKSBpc1xuLVx0XHQgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZSBpbiB0aGUgc3dpdGNoLlxuLVx0XHQgKi9cbi1cdFx0cXVldWUgPSBpZWVlODAyMXFfdHRfdG9fdGMoaXBtLCBkZXYtXHUwMDNlaW5mby1cdTAwM2VudW1fdHhfcXVldWVzKTtcbi1cdFx0aWYgKHF1ZXVlIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBxdWV1ZTtcbi1cbi1cdFx0cXVldWVfbWFwIHw9IHF1ZXVlIFx1MDAzY1x1MDAzYyAoaXBtICogS1NaOTQ3N19QT1JUX1RDX01BUF9TKTtcbi1cdH1cbi1cbi1cdHJldHVybiBrc3pfcHdyaXRlMzIoZGV2LCBwb3J0LCBLU1o5NDc3X1BPUlRfTVJJX1RDX01BUF9fNCwgcXVldWVfbWFwKTtcbi19XG4tXG4gdm9pZCBrc3pfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTI5ODQsNDAgKzI3OTksNiBAQCBpbnQga3N6X3BvcnRfYnJpZGdlX2ZsYWdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4te1xuLVx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4tXG4tXHRzd2l0Y2ggKGRldi1cdTAwM2VjaGlwX2lkKSB7XG4tXHRjYXNlIEtTWjg3OTVfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODc5NF9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NzY1X0NISVBfSUQ6XG4tXHRcdHJldHVybiBLU1o4Nzk1X0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XG4tXHRjYXNlIEtTWjg0NjNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODhYM19DSElQX0lEOlxuLVx0Y2FzZSBLU1o4ODY0X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg4OTVfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIEtTWjg4NjNfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjtcbi1cdGNhc2UgS1NaODU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk0NzdfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o5NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk4OTNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTg5Nl9DSElQX0lEOlxuLVx0Y2FzZSBLU1o5ODk3X0NISVBfSUQ6XG4tXHRjYXNlIExBTjkzNzBfQ0hJUF9JRDpcbi1cdGNhc2UgTEFOOTM3MV9DSElQX0lEOlxuLVx0Y2FzZSBMQU45MzcyX0NISVBfSUQ6XG4tXHRjYXNlIExBTjkzNzNfQ0hJUF9JRDpcbi1cdGNhc2UgTEFOOTM3NF9DSElQX0lEOlxuLVx0Y2FzZSBMQU45NjQ2X0NISVBfSUQ6XG4tXHRcdHJldHVybiBLU1o5NDc3X01BWF9GUkFNRV9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xuLVx0fVxuLVxuLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLX1cbi1cbiBpbnQga3N6X3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuIHtcbkBAIC0zMDg2LDM5ICsyODY3LDYgQEAgdm9pZCBrc3pfc2V0X3htaWkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4gXHRrc3pfcHdyaXRlOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sIGRhdGE4KTtcbiB9XG4gXG4tcGh5X2ludGVyZmFjZV90IGtzel9nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBnYml0KVxuLXtcbi1cdGNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2V4bWlpX2N0cmwxO1xuLVx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbi1cdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4tXHR1OCBkYXRhODtcbi1cdHU4IHZhbDtcbi1cbi1cdGtzel9wcmVhZDgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBcdTAwMjZkYXRhOCk7XG4tXG4tXHR2YWwgPSBGSUVMRF9HRVQoUF9NSUlfU0VMX00sIGRhdGE4KTtcbi1cbi1cdGlmICh2YWwgPT0gYml0dmFsW1BfTUlJX1NFTF0pIHtcbi1cdFx0aWYgKGdiaXQpXG4tXHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuLVx0fSBlbHNlIGlmICh2YWwgPT0gYml0dmFsW1BfUk1JSV9TRUxdKSB7XG4tXHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJO1xuLVx0fSBlbHNlIHtcbi1cdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJO1xuLVx0XHRpZiAoZGF0YTggXHUwMDI2IFBfUkdNSUlfSURfRUdfRU5BQkxFKVxuLVx0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEO1xuLVx0XHRpZiAoZGF0YTggXHUwMDI2IFBfUkdNSUlfSURfSUdfRU5BQkxFKSB7XG4tXHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ7XG4tXHRcdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcbi1cdFx0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0cmV0dXJuIGludGVyZmFjZTtcbi19XG4tXG4gYm9vbCBrc3pfcGh5bGlua19uZWVkX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGludCBtb2RlKVxuIHtcbkBAIC0zMTU0LDI0ICsyOTAyLDYgQEAgdm9pZCBrc3pfcGh5bGlua19tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFx0XHRrc3pfc2V0X3htaWkoZGV2LCBwb3J0LCBzdGF0ZS1cdTAwM2VpbnRlcmZhY2UpO1xuIH1cbiBcbi1ib29sIGtzel9nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHRjb25zdCB1OCAqYml0dmFsID0gZGV2LVx1MDAzZWluZm8tXHUwMDNleG1paV9jdHJsMTtcbi1cdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4tXHRib29sIGdiaXQgPSBmYWxzZTtcbi1cdHU4IGRhdGE4O1xuLVx0Ym9vbCB2YWw7XG4tXG4tXHRrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgXHUwMDI2ZGF0YTgpO1xuLVxuLVx0dmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7XG4tXG4tXHRpZiAodmFsID09IGJpdHZhbFtQX0dNSUlfMUdCSVRdKVxuLVx0XHRnYml0ID0gdHJ1ZTtcbi1cbi1cdHJldHVybiBnYml0O1xuLX1cbi1cbiBzdGF0aWMgaW50IGtzel9zd2l0Y2hfZGV0ZWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4ge1xuIFx0dTggaWQxLCBpZDIsIGlkNDtcbkBAIC0zMzE0LDggKzMwNDQsOCBAQCBzdGF0aWMgaW50IGtzel9zZXR1cF90Y19tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCB1OCBzY2hlZHVsZXIsXG4gXHRcdFx0ICAgRklFTERfUFJFUChNVElfU0hBUElOR19NLCBzaGFwZXIpKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfc2V0dXBfdGNfY2JzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0ICAgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxuK2ludCBrc3pfc2V0dXBfdGNfY2JzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdCAgICAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuQEAgLTMzODAsOCArMzExMCw4IEBAIHN0YXRpYyBpbnQga3N6X2Rpc2FibGVfZWdyZXNzX3JhdGVfbGltaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsXG4tXHRcdFx0XHQgaW50IGJhbmQpXG4raW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCxcbitcdFx0XHQgIGludCBiYW5kKVxuIHtcbiBcdC8qIENvbXBhcmVkIHRvIHF1ZXVlcywgYmFuZHMgcHJpb3JpdGl6ZSBwYWNrZXRzIGRpZmZlcmVudGx5LiBJbiBzdHJpY3RcbiBcdCAqIHByaW9yaXR5IG1vZGUsIHRoZSBsb3dlc3QgcHJpb3JpdHkgaXMgYXNzaWduZWQgdG8gUXVldWUgMCB3aGlsZSB0aGVcbkBAIC0zMzkwLDEwNCArMzEyMCw2IEBAIHN0YXRpYyBpbnQga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwLFxuIFx0cmV0dXJuIHAtXHUwMDNlYmFuZHMgLSAxIC0gYmFuZDtcbiB9XG4gXG4tc3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKVxuLXtcbi1cdHU4IHJlZztcbi1cbi1cdHJlZyA9IDB4QzggKyBwb3J0ICogNDtcbi1cdHJlZyArPSAoKDMgLSBxdWV1ZSkgLyAyKSAqIDI7XG4tXHRyZWcrKztcbi1cdHJlZyAtPSAocXVldWUgXHUwMDI2IDEpO1xuLVx0cmV0dXJuIHJlZztcbi19XG4tXG4tLyoqXG4tICoga3N6ODh4M190Y19ldHNfYWRkIC0gQ29uZmlndXJlIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbilcbi0gKiAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBwb3J0IG9uIEtTWjg4eDMgc3dpdGNoXG4tICogQGRldjogUG9pbnRlciB0byB0aGUgS1NaIHN3aXRjaCBkZXZpY2Ugc3RydWN0dXJlXG4tICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGNvbmZpZ3VyZVxuLSAqIEBwOiBQb2ludGVyIHRvIG9mZmxvYWQgcmVwbGFjZSBwYXJhbWV0ZXJzIGRlc2NyaWJpbmcgRVRTIGJhbmRzIGFuZCBtYXBwaW5nXG4tICpcbi0gKiBUaGUgS1NaODh4MyBzdXBwb3J0cyB0d28gc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IGFuZFxuLSAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKS4gQm90aCBtb2RlcyBoYXZlIGZpeGVkIGJlaGF2aW9yOlxuLSAqICAgLSBObyBjb25maWd1cmFibGUgcXVldWUtdG8tcHJpb3JpdHkgbWFwcGluZ1xuLSAqICAgLSBObyB3ZWlnaHQgYWRqdXN0bWVudCBpbiBXRlEgbW9kZVxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBzd2l0Y2ggdG8gdXNlIHN0cmljdCBwcmlvcml0eSBtb2RlIGJ5XG4tICogY2xlYXJpbmcgdGhlIFdGUSBlbmFibGUgYml0IGZvciBhbGwgcXVldWVzIGFzc29jaWF0ZWQgd2l0aCBFVFMgYmFuZHMuXG4tICogSWYgc3RyaWN0IHByaW9yaXR5IGlzIG5vdCBleHBsaWNpdGx5IHJlcXVlc3RlZCwgdGhlIHN3aXRjaCB3aWxsIGRlZmF1bHRcbi0gKiB0byBXRlEgbW9kZS5cbi0gKlxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuLSAqL1xuLXN0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfYWRkKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuLVx0XHRcdCAgICAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKVxuLXtcbi1cdGludCByZXQsIGJhbmQ7XG4tXG4tXHQvKiBPbmx5IHN0cmljdCBwcmlvcml0eSBtb2RlIGlzIHN1cHBvcnRlZCBmb3Igbm93LlxuLVx0ICogV0ZRIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkLlxuLVx0ICovXG4tXHRmb3IgKGJhbmQgPSAwOyBiYW5kIFx1MDAzYyBwLVx1MDAzZWJhbmRzOyBiYW5kKyspIHtcbi1cdFx0aW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpO1xuLVx0XHR1OCByZWc7XG4tXG4tXHRcdC8qIENhbGN1bGF0ZSBUWFEgU3BsaXQgQ29udHJvbCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzXG4tXHRcdCAqIHBvcnQvcXVldWVcbi1cdFx0ICovXG4tXHRcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcbi1cdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcbi1cbi1cdFx0LyogQ2xlYXIgV0ZRIGVuYWJsZSBiaXQgdG8gc2VsZWN0IHN0cmljdCBwcmlvcml0eSBzY2hlZHVsaW5nICovXG4tXHRcdHJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLCAwKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLS8qKlxuLSAqIGtzejg4eDNfdGNfZXRzX2RlbCAtIFJlc2V0IEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgY29uZmlnXG4tICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxuLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZVxuLSAqIEBwb3J0OiBQb3J0IG51bWJlciB0byByZXNldFxuLSAqXG4tICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgb25seSBmaXhlZCBzY2hlZHVsaW5nIG1vZGVzOiBTdHJpY3QgUHJpb3JpdHkgb3Jcbi0gKiBXZWlnaHRlZCBGYWlyIFF1ZXVpbmcgKFdGUSksIHdpdGggbm8gcmVjb25maWd1cmF0aW9uIG9mIHdlaWdodHMgb3Jcbi0gKiBxdWV1ZSBtYXBwaW5nLiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgcG9ydOKAmXMgc2NoZWR1bGluZyBtb2RlIHRvXG4tICogdGhlIGRlZmF1bHQsIHdoaWNoIGlzIFdGUSwgYnkgZW5hYmxpbmcgdGhlIFdGUSBiaXQgZm9yIGFsbCBxdWV1ZXMuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbi0gKi9cbi1zdGF0aWMgaW50IGtzejg4eDNfdGNfZXRzX2RlbChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHRpbnQgcmV0LCBxdWV1ZTtcbi1cbi1cdC8qIEl0ZXJhdGUgb3ZlciBhbGwgdHJhbnNtaXQgcXVldWVzIGZvciB0aGlzIHBvcnQgKi9cbi1cdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcdTAwM2MgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3R4X3F1ZXVlczsgcXVldWUrKykge1xuLVx0XHR1OCByZWc7XG4tXG4tXHRcdC8qIENhbGN1bGF0ZSBUWFEgU3BsaXQgQ29udHJvbCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzXG4tXHRcdCAqIHBvcnQvcXVldWVcbi1cdFx0ICovXG4tXHRcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcbi1cdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcbi1cbi1cdFx0LyogU2V0IFdGUSBlbmFibGUgYml0IHRvIHJldmVydCBiYWNrIHRvIGRlZmF1bHQgc2NoZWR1bGluZ1xuLVx0XHQgKiBtb2RlXG4tXHRcdCAqL1xuLVx0XHRyZXQgPSBrc3pfcm13OChkZXYsIHJlZywgS1NaODg3M19UWFFfV0ZRX0VOQUJMRSxcbi1cdFx0XHQgICAgICAgS1NaODg3M19UWFFfV0ZRX0VOQUJMRSk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGtzel9xdWV1ZV9zZXRfc3RyaWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBpbnQgcXVldWUpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0zNTgwLDggKzMyMTIsOCBAQCBzdGF0aWMgaW50IGtzel90Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIFx0cmV0dXJuIGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKGRldiwgcG9ydCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3RjX2V0c192YWxpZGF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbi1cdFx0XHQgICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXG4raW50IGtzel90Y19ldHNfdmFsaWRhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4rXHRcdFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXG4ge1xuIFx0aW50IGJhbmQ7XG4gXG5AQCAtMzYyMiw5ICszMjU0LDYgQEAgc3RhdGljIGludCBrc3pfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoaXNfa3N6OChkZXYpIFx1MDAyNlx1MDAyNiAhKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSkpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbiBcdGlmIChxb3B0LVx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcbiBcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIlBhcmVudCBzaG91bGQgYmUgXFxcInJvb3RcXFwiXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5AQCAtMzYzNiwxNiArMzI2NSw5IEBAIHN0YXRpYyBpbnQga3N6X3RjX3NldHVwX3FkaXNjX2V0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXG4tXHRcdGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmV0dXJuIGtzejg4eDNfdGNfZXRzX2FkZChkZXYsIHBvcnQsXG4tXHRcdFx0XHRcdFx0ICBcdTAwMjZxb3B0LVx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldHVybiBrc3pfdGNfZXRzX2FkZChkZXYsIHBvcnQsIFx1MDAyNnFvcHQtXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xuK1x0XHRyZXR1cm4ga3N6X3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcdTAwMjZxb3B0LVx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcbiBcdGNhc2UgVENfRVRTX0RFU1RST1k6XG4tXHRcdGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmV0dXJuIGtzejg4eDNfdGNfZXRzX2RlbChkZXYsIHBvcnQpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0dXJuIGtzel90Y19ldHNfZGVsKGRldiwgcG9ydCk7XG4rXHRcdHJldHVybiBrc3pfdGNfZXRzX2RlbChkZXYsIHBvcnQpO1xuIFx0Y2FzZSBUQ19FVFNfU1RBVFM6XG4gXHRjYXNlIFRDX0VUU19HUkFGVDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTM3MDQsNiArMzMyNiwzNCBAQCBpbnQga3N6X2hhbmRsZV93YWtlX3JlYXNvbihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiBcdFx0XHRcdHBtZV9zdGF0dXMpO1xuIH1cbiBcbisvKipcbisgKiBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZSAtIENoZWNrIGlmIHRoZSBNQUMgYWRkcmVzcyBvbiBhIGdpdmVuIHBvcnRcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MuXG4rICogQGRzOiBQb2ludGVyIHRvIHRoZSBEU0Egc3dpdGNoIHN0cnVjdHVyZS5cbisgKiBAcG9ydDogVGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZSBNQUMgYWRkcmVzcyBpcyB0byBiZSBjaGVja2VkLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBleGFtaW5lcyB0aGUgTUFDIGFkZHJlc3Mgc2V0IG9uIHRoZSBzcGVjaWZpZWQgcG9ydCBhbmRcbisgKiBkZXRlcm1pbmVzIGlmIGl0IGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MgZm9yIHRoZSBzd2l0Y2guXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBvcnQncyBNQUMgYWRkcmVzcyBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzLCBmYWxzZVxuKyAqIG90aGVyd2lzZS5cbisgKi9cbitzdGF0aWMgYm9vbCBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpLVx1MDAzZXVzZXI7XG4rXHRjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyID0gdXNlci1cdTAwM2VkZXZfYWRkcjtcbitcdHN0cnVjdCBrc3pfc3dpdGNoX21hY2FkZHIgKnN3aXRjaF9tYWNhZGRyO1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0c3dpdGNoX21hY2FkZHIgPSBkZXYtXHUwMDNlc3dpdGNoX21hY2FkZHI7XG4rXHRpZiAoc3dpdGNoX21hY2FkZHIgXHUwMDI2XHUwMDI2ICFldGhlcl9hZGRyX2VxdWFsKHN3aXRjaF9tYWNhZGRyLVx1MDAzZWFkZHIsIGFkZHIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLyoqXG4gICoga3N6X2dldF93b2wgLSBHZXQgV2FrZS1vbi1MQU4gc2V0dGluZ3MgZm9yIGEgc3BlY2lmaWVkIHBvcnQuXG4gICogQGRzOiBUaGUgZHNhX3N3aXRjaCBzdHJ1Y3R1cmUuXG5AQCAtMzg5NywzNCArMzU0Nyw2IEBAIGludCBrc3pfcG9ydF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKipcbi0gKiBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZSAtIENoZWNrIGlmIHRoZSBNQUMgYWRkcmVzcyBvbiBhIGdpdmVuIHBvcnRcbi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MuXG4tICogQGRzOiBQb2ludGVyIHRvIHRoZSBEU0Egc3dpdGNoIHN0cnVjdHVyZS5cbi0gKiBAcG9ydDogVGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZSBNQUMgYWRkcmVzcyBpcyB0byBiZSBjaGVja2VkLlxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBleGFtaW5lcyB0aGUgTUFDIGFkZHJlc3Mgc2V0IG9uIHRoZSBzcGVjaWZpZWQgcG9ydCBhbmRcbi0gKiBkZXRlcm1pbmVzIGlmIGl0IGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MgZm9yIHRoZSBzd2l0Y2guXG4tICpcbi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIHBvcnQncyBNQUMgYWRkcmVzcyBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzLCBmYWxzZVxuLSAqIG90aGVyd2lzZS5cbi0gKi9cbi1ib29sIGtzel9pc19wb3J0X21hY19nbG9iYWxfdXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4te1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKnVzZXIgPSBkc2FfdG9fcG9ydChkcywgcG9ydCktXHUwMDNldXNlcjtcbi1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIgPSB1c2VyLVx1MDAzZWRldl9hZGRyO1xuLVx0c3RydWN0IGtzel9zd2l0Y2hfbWFjYWRkciAqc3dpdGNoX21hY2FkZHI7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbi1cbi1cdEFTU0VSVF9SVE5MKCk7XG4tXG4tXHRzd2l0Y2hfbWFjYWRkciA9IGRldi1cdTAwM2Vzd2l0Y2hfbWFjYWRkcjtcbi1cdGlmIChzd2l0Y2hfbWFjYWRkciBcdTAwMjZcdTAwMjYgIWV0aGVyX2FkZHJfZXF1YWwoc3dpdGNoX21hY2FkZHItXHUwMDNlYWRkciwgYWRkcikpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbiAvKipcbiAgKiBrc3pfc3dpdGNoX21hY2FkZHJfZ2V0IC0gUHJvZ3JhbSB0aGUgc3dpdGNoJ3MgTUFDIGFkZHJlc3MgcmVnaXN0ZXIuXG4gICogQGRzOiBEU0Egc3dpdGNoIGluc3RhbmNlLlxuQEAgLTQxMzIsOCArMzc1NCw4IEBAIHN0YXRpYyB2b2lkIGtzel9wYXJzZV9yZ21paV9kZWxheShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydF9udW0sXG4gICogUmV0dXJuczogSWYgZm91bmQsIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIHZhbHVlIGZvciB0aGF0IGRyaXZlIHN0cmVuZ3RoXG4gICogaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgLUVJTlZBTCBpcyByZXR1cm5lZCBpbmRpY2F0aW5nIGFuIGludmFsaWQgdmFsdWUuXG4gICovXG4tc3RhdGljIGludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuLVx0XHRcdFx0ICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKVxuK2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuK1x0XHRcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApXG4ge1xuIFx0aW50IGk7XG4gXG5AQCAtNDE1Niw5ICszNzc4LDkgQEAgc3RhdGljIGludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuICAqIGlzIGRldGVjdGVkLiBJdCBsaXN0cyBvdXQgYWxsIHRoZSBzdXBwb3J0ZWQgZHJpdmUgc3RyZW5ndGggdmFsdWVzIGZvclxuICAqIHJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXG4tXHRcdFx0XHQgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApXG4rdm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcbitcdFx0XHQgICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKVxuIHtcbiBcdGNoYXIgc3VwcG9ydGVkX3ZhbHVlc1sxMDBdO1xuIFx0c2l6ZV90IHJlbWFpbmluZ19zaXplO1xuQEAgLTQxODUsOCArMzgwNyw4IEBAIHN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIH1cbiBcbiAvKipcbi0gKiBrc3o5NDc3X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGZvciBzcGVjaWZpYyBLU1o5NDc3XG4tICpcdFx0XHRcdCAgICBjaGlwIHZhcmlhbnRzLlxuKyAqIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBmb3Igc3BlY2lmaWMgS1NaOTQ3N1xuKyAqXHRcdFx0XHRhbmQgdGhlIEtTWjg3eHggY2hpcCB2YXJpYW50cy5cbiAgKiBAZGV2OiAgICAgICBrc3ogZGV2aWNlXG4gICogQHByb3BzOiAgICAgQXJyYXkgb2YgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyB0byBiZSBhcHBsaWVkXG4gICogQG51bV9wcm9wczogTnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5XG5AQCAtNDE5Nyw5ICszODE5LDkgQEAgc3RhdGljIHZvaWQga3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzc2Z1bCBjb25maWd1cmF0aW9uLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IGtzejk0NzdfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4tXHRcdFx0XHRcdGludCBudW1fcHJvcHMpXG4raW50IGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICAgc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4rXHRcdFx0ICAgICBpbnQgbnVtX3Byb3BzKVxuIHtcbiBcdHNpemVfdCBhcnJheV9zaXplID0gQVJSQVlfU0laRShrc3o5NDc3X2RyaXZlX3N0cmVuZ3Rocyk7XG4gXHRpbnQgaSwgcmV0LCByZWc7XG5AQCAtNDIzNiwxMzAgKzM4NTgsNiBAQCBzdGF0aWMgaW50IGtzejk0NzdfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdHJldHVybiBrc3pfcm13OChkZXYsIHJlZywgbWFzaywgdmFsKTtcbiB9XG4gXG4tLyoqXG4tICoga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBjb25maWd1cmF0aW9uIGZvclxuLSAqXHRcdFx0XHQgICAgS1NaODg2MyBjb21wYXRpYmxlIGNoaXAgdmFyaWFudHMuXG4tICogQGRldjogICAgICAga3N6IGRldmljZVxuLSAqIEBwcm9wczogICAgIEFycmF5IG9mIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgdG8gYmUgc2V0XG4tICogQG51bV9wcm9wczogTnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5XG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBzZXR0aW5ncyB0byBLU1o4OFgzIGNoaXBcbi0gKiB2YXJpYW50cyAoS1NaODg3MywgS1NaODg2MykuXG4tICogSXQgZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbnMgYWxpZ24gd2l0aCB3aGF0IHRoZSBjaGlwIHZhcmlhbnQgc3VwcG9ydHMgYW5kXG4tICogd2FybnMgb3IgZXJyb3JzIG91dCBvbiB1bnN1cHBvcnRlZCBzZXR0aW5ncy5cbi0gKlxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZVxuLSAqL1xuLXN0YXRpYyBpbnQga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wICpwcm9wcyxcbi1cdFx0XHRcdFx0aW50IG51bV9wcm9wcylcbi17XG4tXHRzaXplX3QgYXJyYXlfc2l6ZSA9IEFSUkFZX1NJWkUoa3N6ODh4M19kcml2ZV9zdHJlbmd0aHMpO1xuLVx0aW50IG1pY3JvYW1wO1xuLVx0aW50IGksIHJldDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wcm9wczsgaSsrKSB7XG4tXHRcdGlmIChwcm9wc1tpXS52YWx1ZSA9PSAtMSB8fCBpID09IEtTWl9EUklWRVJfU1RSRU5HVEhfSU8pXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGRldl93YXJuKGRldi1cdTAwM2VkZXYsIFwiJXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgdmFyaWFudFxcblwiLFxuLVx0XHRcdCBwcm9wc1tpXS5uYW1lKTtcbi1cdH1cbi1cbi1cdG1pY3JvYW1wID0gcHJvcHNbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10udmFsdWU7XG4tXHRyZXQgPSBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzLCBhcnJheV9zaXplLFxuLVx0XHRcdFx0XHRtaWNyb2FtcCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihkZXYsIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzLFxuLVx0XHRcdFx0XHQgYXJyYXlfc2l6ZSwgbWljcm9hbXApO1xuLVx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIGtzel9ybXc4KGRldiwgS1NaODg3M19SRUdfR0xPQkFMX0NUUkxfMTIsXG4tXHRcdFx0S1NaODg3M19EUklWRV9TVFJFTkdUSF8xNk1BLCByZXQpO1xuLX1cbi1cbi0vKipcbi0gKiBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoKSAtIEV4dHJhY3QgYW5kIGFwcGx5IGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb25zXG4tICpcdFx0XHRcdGZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy5cbi0gKiBAZGV2Olx0a3N6IGRldmljZVxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgZnJvbSB0aGVcbi0gKiBkZXZpY2UgdHJlZSwgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHN1cHBvcnRlZCBjaGlwIHZhcmlhbnRzLCBhbmQgc2V0c1xuLSAqIHRoZW0gYWNjb3JkaW5nbHkuIEFuIGVycm9yIHNob3VsZCBiZSBjcml0aWNhbCBoZXJlLCBhcyB0aGUgZHJpdmUgc3RyZW5ndGhcbi0gKiBzZXR0aW5ncyBhcmUgY3J1Y2lhbCBmb3IgRU1JIGNvbXBsaWFuY2UuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2Vcbi0gKi9cbi1pbnQga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4te1xuLVx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCBvZl9wcm9wc1tdID0ge1xuLVx0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9ISV0gPSB7XG4tXHRcdFx0Lm5hbWUgPSBcIm1pY3JvY2hpcCxoaS1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwiLFxuLVx0XHRcdC5vZmZzZXQgPSBTV19ISV9TUEVFRF9EUklWRV9TVFJFTkdUSF9TLFxuLVx0XHRcdC52YWx1ZSA9IC0xLFxuLVx0XHR9LFxuLVx0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9MT10gPSB7XG4tXHRcdFx0Lm5hbWUgPSBcIm1pY3JvY2hpcCxsby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwiLFxuLVx0XHRcdC5vZmZzZXQgPSBTV19MT19TUEVFRF9EUklWRV9TVFJFTkdUSF9TLFxuLVx0XHRcdC52YWx1ZSA9IC0xLFxuLVx0XHR9LFxuLVx0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10gPSB7XG4tXHRcdFx0Lm5hbWUgPSBcIm1pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwiLFxuLVx0XHRcdC5vZmZzZXQgPSAwLCAvKiBkb24ndCBjYXJlICovXG4tXHRcdFx0LnZhbHVlID0gLTEsXG4tXHRcdH0sXG4tXHR9O1xuLVx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZTtcbi1cdGJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlO1xuLVx0aW50IGksIHJldDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpKyspIHtcbi1cdFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIG9mX3Byb3BzW2ldLm5hbWUsXG4tXHRcdFx0XHRcdCAgIFx1MDAyNm9mX3Byb3BzW2ldLnZhbHVlKTtcbi1cdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5WQUwpXG4tXHRcdFx0ZGV2X3dhcm4oZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVhZCAlc1xcblwiLFxuLVx0XHRcdFx0IG9mX3Byb3BzW2ldLm5hbWUpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRoYXZlX2FueV9wcm9wID0gdHJ1ZTtcbi1cdH1cbi1cbi1cdGlmICghaGF2ZV9hbnlfcHJvcClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRzd2l0Y2ggKGRldi1cdTAwM2VjaGlwX2lkKSB7XG4tXHRjYXNlIEtTWjg4WDNfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcyxcbi1cdFx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShvZl9wcm9wcykpO1xuLVx0Y2FzZSBLU1o4Nzk1X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg3OTRfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODc2NV9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NTYzX0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg1NjdfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTQ3N19DSElQX0lEOlxuLVx0Y2FzZSBLU1o5NTYzX0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk1NjdfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTg5M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o5ODk2X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk4OTdfQ0hJUF9JRDpcbi1cdGNhc2UgTEFOOTY0Nl9DSElQX0lEOlxuLVx0XHRyZXR1cm4ga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxuLVx0XHRcdFx0XHRcdCAgICBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4tXHRkZWZhdWx0OlxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG9mX3Byb3BzKTsgaSsrKSB7XG4tXHRcdFx0aWYgKG9mX3Byb3BzW2ldLnZhbHVlID09IC0xKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0ZGV2X3dhcm4oZGV2LVx1MDAzZWRldiwgXCIlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XFxuXCIsXG4tXHRcdFx0XHQgb2ZfcHJvcHNbaV0ubmFtZSk7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgcGluY3RybCAqcGluY3RybDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG5pbmRleCBiNGE1NjczYmEzNjVjYi4uYWNhZjcwZTZmMzkzYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RhdGEvbWljcm9jaGlwLWtzei5oXHUwMDNlXG4gXG5AQCAtNDAsNiArNDEsNDUgQEAgc3RydWN0IHZsYW5fdGFibGUge1xuIFx0dTMyIHRhYmxlWzNdO1xuIH07XG4gXG4rc3RydWN0IGtzel9zdGF0c19yYXcge1xuK1x0dTY0IHJ4X2hpO1xuK1x0dTY0IHJ4X3VuZGVyc2l6ZTtcbitcdHU2NCByeF9mcmFnbWVudHM7XG4rXHR1NjQgcnhfb3ZlcnNpemU7XG4rXHR1NjQgcnhfamFiYmVycztcbitcdHU2NCByeF9zeW1ib2xfZXJyO1xuK1x0dTY0IHJ4X2NyY19lcnI7XG4rXHR1NjQgcnhfYWxpZ25fZXJyO1xuK1x0dTY0IHJ4X21hY19jdHJsO1xuK1x0dTY0IHJ4X3BhdXNlO1xuK1x0dTY0IHJ4X2JjYXN0O1xuK1x0dTY0IHJ4X21jYXN0O1xuK1x0dTY0IHJ4X3VjYXN0O1xuK1x0dTY0IHJ4XzY0X29yX2xlc3M7XG4rXHR1NjQgcnhfNjVfMTI3O1xuK1x0dTY0IHJ4XzEyOF8yNTU7XG4rXHR1NjQgcnhfMjU2XzUxMTtcbitcdHU2NCByeF81MTJfMTAyMztcbitcdHU2NCByeF8xMDI0XzE1MjI7XG4rXHR1NjQgcnhfMTUyM18yMDAwO1xuK1x0dTY0IHJ4XzIwMDE7XG4rXHR1NjQgdHhfaGk7XG4rXHR1NjQgdHhfbGF0ZV9jb2w7XG4rXHR1NjQgdHhfcGF1c2U7XG4rXHR1NjQgdHhfYmNhc3Q7XG4rXHR1NjQgdHhfbWNhc3Q7XG4rXHR1NjQgdHhfdWNhc3Q7XG4rXHR1NjQgdHhfZGVmZXJyZWQ7XG4rXHR1NjQgdHhfdG90YWxfY29sO1xuK1x0dTY0IHR4X2V4Y19jb2w7XG4rXHR1NjQgdHhfc2luZ2xlX2NvbDtcbitcdHU2NCB0eF9tdWx0X2NvbDtcbitcdHU2NCByeF90b3RhbDtcbitcdHU2NCB0eF90b3RhbDtcbitcdHU2NCByeF9kaXNjYXJkcztcbitcdHU2NCB0eF9kaXNjYXJkcztcbit9O1xuK1xuIHN0cnVjdCBrc3pfcG9ydF9taWIge1xuIFx0c3RydWN0IG11dGV4IGNudF9tdXRleDtcdFx0Lyogc3RydWN0dXJlIGFjY2VzcyAqL1xuIFx0dTggY250X3B0cjtcbkBAIC0zOTMsMTIgKzQzMyw4IEBAIGludCBrc3pfc3dpdGNoX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4gXG4gdm9pZCBrc3pfaW5pdF9taWJfdGltZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG4tYm9vbCBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KTtcbiB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcbi12b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4gdm9pZCBrc3pfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKTtcbi1ib29sIGtzel9nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4tcGh5X2ludGVyZmFjZV90IGtzel9nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBnYml0KTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdO1xuIGludCBrc3pfc3dpdGNoX21hY2FkZHJfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbkBAIC00NDMsMTEgKzQ3OSwxNSBAQCB2b2lkIGtzel9waHlsaW5rX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBtb2RlLFxuIFx0XHRcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbiBcbi1pbnQga3N6X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCk7XG4tXG4gaW50IGtzel9zZXRfbWFjX2VlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHQgICAgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSk7XG4gXG4raW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCxcbitcdFx0XHQgIGludCBiYW5kKTtcbitpbnQga3N6X3NldHVwX3RjX2NicyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHQgICAgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KTtcbitpbnQga3N6X3RjX2V0c192YWxpZGF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbitcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCk7XG4gaW50IGtzel9zZXR1cF90YyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHQgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSk7XG4gXG5AQCAtNDcxLDggKzUxMSwzNyBAQCBpbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG4gaW50IGtzel9waXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHApO1xuIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbiB2b2lkIGtzel9pcnFfZnJlZShzdHJ1Y3Qga3N6X2lycSAqa2lycSk7XG4taW50IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbi1pbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuK1xuK3N0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Age1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdGludCBvZmZzZXQ7XG4rXHRpbnQgdmFsdWU7XG4rfTtcbitcbitlbnVtIGtzel9kcml2ZXJfc3RyZW5ndGhfdHlwZSB7XG4rXHRLU1pfRFJJVkVSX1NUUkVOR1RIX0hJLFxuK1x0S1NaX0RSSVZFUl9TVFJFTkdUSF9MTyxcbitcdEtTWl9EUklWRVJfU1RSRU5HVEhfSU8sXG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIC0gZHJpdmUgc3RyZW5ndGggbWFwcGluZ1xuKyAqIEByZWdfdmFsOlx0cmVnaXN0ZXIgdmFsdWVcbisgKiBAbWljcm9hbXA6XHRtaWNyb2FtcCB2YWx1ZVxuKyAqL1xuK3N0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgge1xuK1x0dTMyIHJlZ192YWw7XG4rXHR1MzIgbWljcm9hbXA7XG4rfTtcbitcbit2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuK1x0XHRcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApO1xuK2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuK1x0XHRcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApO1xuK2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgIHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLFxuK1x0XHRcdCAgICAgaW50IG51bV9wcm9wcyk7XG4gXG4gLyogQ29tbW9uIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMgKi9cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWdtYXAgKmtzel9yZWdtYXBfOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5pbmRleCA4ZWI1MzM3YjBjMTAyZS4uODZjZTNhODY3MDVmOTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5AQCAtNzg3LDEwICs3ODcsNiBAQCBzdGF0aWMgaW50IGxhbjkzN3hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0cmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0Lyogc2V0IGJyb2FkY2FzdCBzdG9ybSBwcm90ZWN0aW9uIDEwJSByYXRlICovXG4gXHRzdG9ybV9tYXNrID0gQlJPQURDQVNUX1NUT1JNX1JBVEU7XG4gXHRzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwO1xuQEAgLTk4Myw3ICs5NzksNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbGFuOTM3eF9zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF9zdGF0czY0XHRcdD0ga3N6X2dldF9zdGF0czY0LFxuIFx0LmdldF9wYXVzZV9zdGF0c1x0PSBrc3pfZ2V0X3BhdXNlX3N0YXRzLFxuIFx0LnBvcnRfY2hhbmdlX210dVx0PSBsYW45Mzd4X2NoYW5nZV9tdHUsXG4tXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6X21heF9tdHUsXG4rXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6OTQ3N19tYXhfbXR1LFxuIFx0LnN1c3BlbmRcdFx0PSBrc3pfc3VzcGVuZCxcbiBcdC5yZXN1bWVcdFx0XHQ9IGtzel9yZXN1bWUsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBrc3pfZ2V0X3RzX2luZm8sXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMzo1NjoyNi45MDc2MzE0NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjY2Mjk2NTE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyB0aGUgTWljcm9jaGlwIERTQSBEcml2ZXIqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGRlYWwuIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQncyBjbGVhcmx5IGZvY3VzZWQgb24gcmVmYWN0b3JpbmcgdGhlIGBrc3pgIERTQSBkcml2ZXIgZm9yIE1pY3JvY2hpcCBzd2l0Y2hlcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBwdXJlbHkgYWJvdXQgdGlkeWluZyB0aGluZ3MgdXAsIG1ha2luZyB0aGUgY29kZSBtb3JlIG9yZ2FuaXplZCBhbmQgZWFzaWVyIHRvIG1haW50YWluLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vdmluZyBmdW5jdGlvbnMgZnJvbSBga3N6X2NvbW1vbi5jYCB0byBtb3JlIHNwZWNpZmljIGZpbGVzIGxpa2UgYGtzejguY2AgYW5kIGBrc3o5NDc3LmNgLCBiYXNlZCBvbiB0aGUgY2hpcCBmYW1pbGllcyB0aGV5J3JlIGludGVuZGVkIGZvci4gVGhlIGZ1bmN0aW9uIG5hbWVzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhpcyBzcGVjaWZpY2l0eSwgd2l0aCB0aGUgb2xkIGBrc3pfYCBwcmVmaXggYmVpbmcgcmVwbGFjZWQgd2l0aCBjaGlwLXNwZWNpZmljIHByZWZpeGVzLCBsaWtlIGBrc3o4N3h4X2AsIGBrc3o4OHh4X2AsIGFuZCBga3N6OTQ3N19gLlxuXG5JJ3ZlIGNhcmVmdWxseSBjb21wYXJlZCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb25zIHdpdGggdGhlaXIgcmVmYWN0b3JlZCBjb3VudGVycGFydHMuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmdW5jdGlvbnMgbGlrZSBga3N6X2NoYW5nZV9tdHVgLCBga3N6X21heF9tdHVgLCBhbmQgYGtzel9zZXR1cF90Y2AgKGFuZCB0aGVpciBjaGlwLXNwZWNpZmljIHZhcmlhdGlvbnMpIHNlZW1zIGlkZW50aWNhbC4gTm8gbmV3IGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gaW50cm9kdWNlZCBpbiB0aGUgZHJpdmVyLCBpdCBsb29rcyBsaWtlLCBqdXN0IGEgcmVvcmdhbml6YXRpb24gb2YgZXhpc3RpbmcgY29kZS4gSSd2ZSBhbHNvIGNoZWNrZWQgYGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aGAgd2hpY2ggaGFzIGJlZW4gcmVmYWN0b3JlZCBpbiBgbGFuOTM3eF9zZXR1cGAgYW5kIG5vdGljZWQgdGhhdCB0aGUgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMuIEl0IGhhcyBiZWVuIGNvbmZpcm1lZCB0aGUgcmVtb3ZhbCBqdXN0IGdldHMgcmlkIG9mIHdhcm5pbmdzIGFuZCBkb2Vzbid0IGFmZmVjdCBvcGVyYXRpb24uXG5cblRoZSBmdW5jdGlvbnMgbGlrZSBga3N6ODh4eF9yX21pYl9zdGF0czY0YCwgdGhlIGBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGhgIGNhbGxzLCBhbmQgdGhlIGBrc3o5NDc3XypgIGZ1bmN0aW9ucyB3ZXJlIGFsc28gbW92ZWQgdG8gYmUgbW9yZSBjaGlwLXNwZWNpZmljLlxuXG5TbywgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgZXhlcmNpc2UuIEl0J3MgYWJvdXQgaW1wcm92ZWQgY29kZSBzdHJ1Y3R1cmUsIG5vdCBhZGRpbmcgbmV3IGZlYXR1cmVzIG9yIGZpeGluZyBidWdzLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBhcyBcIldvcnRoRnV6emluZ1wiLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcyBvciBjb21wbGV4IGxvZ2ljIHRoYXQgd291bGQgYmUgZXhwb3NlZCB0byBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDUzMywiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTM6NTc6MjMuNTcwNTk4NDc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgdGhlIE1pY3JvY2hpcCBLU1ogRFNBIGRyaXZlci4gSXQgbW92ZXMgY2hpcC1zcGVjaWZpYyBmdW5jdGlvbnMgKGxpa2UgTVRVIGNvbmZpZ3VyYXRpb24sIFRDIHNldHVwLCBNSUIgc3RhdHMgcmVhZGluZywgYW5kIGRyaXZlIHN0cmVuZ3RoIHBhcnNpbmcpIGZyb20gdGhlIGNvbW1vbiBga3N6X2NvbW1vbi5jYCBmaWxlIHRvIHRoZWlyIHJlc3BlY3RpdmUgY2hpcC1zcGVjaWZpYyBmaWxlcyAoYGtzejguY2AgYW5kIGBrc3o5NDc3LmNgKS4gSXQgYWxzbyByZW1vdmVzIGEgbm8tb3AgY2FsbCB0byBga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoYCBpbiBgbGFuOTM3eF9tYWluLmNgIHdoaWNoIG9ubHkgcHJpbnRlZCB3YXJuaW5ncyBmb3IgdW5zdXBwb3J0ZWQgcHJvcGVydGllcy4gTm8gbmV3IGZ1bmN0aW9uYWwgbG9naWMgb3IgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgdGhlIE1pY3JvY2hpcCBLU1ogRFNBIGRyaXZlci4gSXQgbW92ZXMgY2hpcC1zcGVjaWZpYyBmdW5jdGlvbnMgKGxpa2UgTVRVIGNvbmZpZ3VyYXRpb24sIFRDIHNldHVwLCBNSUIgc3RhdHMgcmVhZGluZywgYW5kIGRyaXZlIHN0cmVuZ3RoIHBhcnNpbmcpIGZyb20gdGhlIGNvbW1vbiBga3N6X2NvbW1vbi5jYCBmaWxlIHRvIHRoZWlyIHJlc3BlY3RpdmUgY2hpcC1zcGVjaWZpYyBmaWxlcyAoYGtzejguY2AgYW5kIGBrc3o5NDc3LmNgKS4gSXQgYWxzbyByZW1vdmVzIGEgbm8tb3AgY2FsbCB0byBga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoYCBpbiBgbGFuOTM3eF9tYWluLmNgIHdoaWNoIG9ubHkgcHJpbnRlZCB3YXJuaW5ncyBmb3IgdW5zdXBwb3J0ZWQgcHJvcGVydGllcy4gTm8gbmV3IGZ1bmN0aW9uYWwgbG9naWMgb3IgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflows296k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 13:42:51 +0000 UTC FinishedAt: 2026-07-02 13:57:25 +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+CgkJCTx0ZD4yMDI2LzA3LzAyIDEzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiB0aGUgTWljcm9jaGlwIEtTWiBEU0EgZHJpdmVyLiBJdCBtb3ZlcyBjaGlwLXNwZWNpZmljIGZ1bmN0aW9ucyAobGlrZSBNVFUgY29uZmlndXJhdGlvbiwgVEMgc2V0dXAsIE1JQiBzdGF0cyByZWFkaW5nLCBhbmQgZHJpdmUgc3RyZW5ndGggcGFyc2luZykgZnJvbSB0aGUgY29tbW9uIGBrc3pfY29tbW9uLmNgIGZpbGUgdG8gdGhlaXIgcmVzcGVjdGl2ZSBjaGlwLXNwZWNpZmljIGZpbGVzIChga3N6OC5jYCBhbmQgYGtzejk0NzcuY2ApLiBJdCBhbHNvIHJlbW92ZXMgYSBuby1vcCBjYWxsIHRvIGBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGhgIGluIGBsYW45Mzd4X21haW4uY2Agd2hpY2ggb25seSBwcmludGVkIHdhcm5pbmdzIGZvciB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLiBObyBuZXcgZnVuY3Rpb25hbCBsb2dpYyBvciByZWFjaGFibGUgY29kZSBwYXRocyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTM6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNmVkYmJkOGZhYjkxMDViMWFiYTBmNmY5NDE3ZjU0Nzk0NzZhNzlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxMzo1NjoyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG5pbmRleCA1ODY5MTY1NzBhODQxYi4uYzRjNzY5MDI4YTIwYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbkBAIC0zNiw2ICYjNDM7MzYsNTIgQEBcbiAjaW5jbHVkZSBcJiMzNDtrc3o4X3JlZy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3N6OC5oXCYjMzQ7XG4gXG4mIzQzOy8qIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaODg2MywgS1NaODg3MywgLi5cbiYjNDM7ICpcdFx0XHQgICAgIHZhcmlhbnRzLlxuJiM0MzsgKiBUaGlzIHZhbHVlcyBhcmUgZG9jdW1lbnRlZCBpbiBLU1o4ODczIGFuZCBLU1o4ODYzIGRhdGFzaGVldHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCBrc3o4OHgzX2RyaXZlX3N0cmVuZ3Roc1tdID0ge1xuJiM0MztcdHsgMCwgIDgwMDAgfSxcbiYjNDM7XHR7IEtTWjg4NzNfRFJJVkVfU1RSRU5HVEhfMTZNQSwgMTYwMDAgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyB7XG4mIzQzO1x0dTY0IHJ4O1xuJiM0MztcdHU2NCByeF9oaTtcbiYjNDM7XHR1NjQgcnhfdW5kZXJzaXplO1xuJiM0MztcdHU2NCByeF9mcmFnbWVudHM7XG4mIzQzO1x0dTY0IHJ4X292ZXJzaXplO1xuJiM0MztcdHU2NCByeF9qYWJiZXJzO1xuJiM0MztcdHU2NCByeF9zeW1ib2xfZXJyO1xuJiM0MztcdHU2NCByeF9jcmNfZXJyO1xuJiM0MztcdHU2NCByeF9hbGlnbl9lcnI7XG4mIzQzO1x0dTY0IHJ4X21hY19jdHJsO1xuJiM0MztcdHU2NCByeF9wYXVzZTtcbiYjNDM7XHR1NjQgcnhfYmNhc3Q7XG4mIzQzO1x0dTY0IHJ4X21jYXN0O1xuJiM0MztcdHU2NCByeF91Y2FzdDtcbiYjNDM7XHR1NjQgcnhfNjRfb3JfbGVzcztcbiYjNDM7XHR1NjQgcnhfNjVfMTI3O1xuJiM0MztcdHU2NCByeF8xMjhfMjU1O1xuJiM0MztcdHU2NCByeF8yNTZfNTExO1xuJiM0MztcdHU2NCByeF81MTJfMTAyMztcbiYjNDM7XHR1NjQgcnhfMTAyNF8xNTIyO1xuJiM0MztcdHU2NCB0eDtcbiYjNDM7XHR1NjQgdHhfaGk7XG4mIzQzO1x0dTY0IHR4X2xhdGVfY29sO1xuJiM0MztcdHU2NCB0eF9wYXVzZTtcbiYjNDM7XHR1NjQgdHhfYmNhc3Q7XG4mIzQzO1x0dTY0IHR4X21jYXN0O1xuJiM0MztcdHU2NCB0eF91Y2FzdDtcbiYjNDM7XHR1NjQgdHhfZGVmZXJyZWQ7XG4mIzQzO1x0dTY0IHR4X3RvdGFsX2NvbDtcbiYjNDM7XHR1NjQgdHhfZXhjX2NvbDtcbiYjNDM7XHR1NjQgdHhfc2luZ2xlX2NvbDtcbiYjNDM7XHR1NjQgdHhfbXVsdF9jb2w7XG4mIzQzO1x0dTY0IHJ4X2Rpc2NhcmRzO1xuJiM0MztcdHU2NCB0eF9kaXNjYXJkcztcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIHZvaWQga3N6X2NmZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1MzIgYWRkciwgdTggYml0cywgYm9vbCBzZXQpXG4ge1xuIFx0a3N6X3JtdzgoZGV2LCBhZGRyLCBiaXRzLCBzZXQgPyBiaXRzIDogMCk7XG5AQCAtMTU4LDEwICYjNDM7MjA0LDE3IEBAIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzejg4NjNfY2hhbmdlX210dShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgZnJhbWVfc2l6ZSlcbiYjNDM7c3RhdGljIGludCBrc3o4OHh4X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG10dSlcbiB7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IGZyYW1lX3NpemU7XG4gXHR1OCBjdHJsMiA9IDA7XG4gXG4mIzQzO1x0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZGV2LVx1MDAzZWRzLCBwb3J0KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmcmFtZV9zaXplID0gbXR1ICYjNDM7IFZMQU5fRVRIX0hMRU4gJiM0MzsgRVRIX0ZDU19MRU47XG4mIzQzO1xuIFx0aWYgKGZyYW1lX3NpemUgXHUwMDNjPSBLU1o4X0xFR0FMX1BBQ0tFVF9TSVpFKVxuIFx0XHRjdHJsMiB8PSBLU1o4ODYzX0xFR0FMX1BBQ0tFVF9FTkFCTEU7XG4gXHRlbHNlIGlmIChmcmFtZV9zaXplIFx1MDAzZSBLU1o4ODYzX05PUk1BTF9QQUNLRVRfU0laRSlcbkBAIC0xNzEsMTEgJiM0MzsyMjQsMTggQEAgc3RhdGljIGludCBrc3o4ODYzX2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXG4gXHRcdFx0S1NaODg2M19IVUdFX1BBQ0tFVF9FTkFCTEUsIGN0cmwyKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3o4Nzk1X2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXG4mIzQzO3N0YXRpYyBpbnQga3N6ODd4eF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBtdHUpXG4ge1xuJiM0MztcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0dTggY3RybDEgPSAwLCBjdHJsMiA9IDA7XG4mIzQzO1x0dTE2IGZyYW1lX3NpemU7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmICghZHNhX2lzX2NwdV9wb3J0KGRldi1cdTAwM2VkcywgcG9ydCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZnJhbWVfc2l6ZSA9IG10dSAmIzQzOyBWTEFOX0VUSF9ITEVOICYjNDM7IEVUSF9GQ1NfTEVOO1xuJiM0MztcbiBcdGlmIChmcmFtZV9zaXplIFx1MDAzZSBLU1o4X0xFR0FMX1BBQ0tFVF9TSVpFKVxuIFx0XHRjdHJsMiB8PSBTV19MRUdBTF9QQUNLRVRfRElTQUJMRTtcbiBcdGlmIChmcmFtZV9zaXplIFx1MDAzZSBLU1o4ODYzX05PUk1BTF9QQUNLRVRfU0laRSlcbkBAIC0xODgsMjkgJiM0MzsyNDgsMTQgQEAgc3RhdGljIGludCBrc3o4Nzk1X2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXG4gXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8yLCBTV19MRUdBTF9QQUNLRVRfRElTQUJMRSwgY3RybDIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzejhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxuJiM0MztzdGF0aWMgaW50IGtzejg3eHhfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIHtcbi1cdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuLVx0dTE2IGZyYW1lX3NpemU7XG4tXG4tXHRpZiAoIWRzYV9pc19jcHVfcG9ydChkZXYtXHUwMDNlZHMsIHBvcnQpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGZyYW1lX3NpemUgPSBtdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTjtcbi1cbi1cdHN3aXRjaCAoZGV2LVx1MDAzZWNoaXBfaWQpIHtcbi1cdGNhc2UgS1NaODc5NV9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4Nzk0X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIGtzejg3OTVfY2hhbmdlX210dShkZXYsIGZyYW1lX3NpemUpO1xuLVx0Y2FzZSBLU1o4NDYzX0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg4WDNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODg2NF9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4ODk1X0NISVBfSUQ6XG4tXHRcdHJldHVybiBrc3o4ODYzX2NoYW5nZV9tdHUoZGV2LCBmcmFtZV9zaXplKTtcbi1cdH1cbiYjNDM7XHRyZXR1cm4gS1NaODc5NV9IVUdFX1BBQ0tFVF9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xuJiM0Mzt9XG4gXG4tXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODh4eF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gS1NaODg2M19IVUdFX1BBQ0tFVF9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xuIH1cbiBcbiBzdGF0aWMgaW50IGtzejhfcG9ydF9xdWV1ZV9zcGxpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IHF1ZXVlcylcbkBAIC0xNzQ2LDYgJiM0MzsxNzkxLDE1OSBAQCBzdGF0aWMgdm9pZCBrc3o4X3BvcnRfbWlycm9yX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdCAgICAgUE9SVF9NSVJST1JfU05JRkZFUiwgZmFsc2UpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0dTggcmVnO1xuJiM0MztcbiYjNDM7XHRyZWcgPSAweEM4ICYjNDM7IHBvcnQgKiA0O1xuJiM0MztcdHJlZyAmIzQzOz0gKCgzIC0gcXVldWUpIC8gMikgKiAyO1xuJiM0MztcdHJlZyYjNDM7JiM0Mzs7XG4mIzQzO1x0cmVnIC09IChxdWV1ZSBcdTAwMjYgMSk7XG4mIzQzO1x0cmV0dXJuIHJlZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGtzejg4eDNfdGNfZXRzX2FkZCAtIENvbmZpZ3VyZSBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2hcbiYjNDM7ICogQGRldjogUG9pbnRlciB0byB0aGUgS1NaIHN3aXRjaCBkZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqIEBwb3J0OiBQb3J0IG51bWJlciB0byBjb25maWd1cmVcbiYjNDM7ICogQHA6IFBvaW50ZXIgdG8gb2ZmbG9hZCByZXBsYWNlIHBhcmFtZXRlcnMgZGVzY3JpYmluZyBFVFMgYmFuZHMgYW5kIG1hcHBpbmdcbiYjNDM7ICpcbiYjNDM7ICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgdHdvIHNjaGVkdWxpbmcgbW9kZXM6IFN0cmljdCBQcmlvcml0eSBhbmRcbiYjNDM7ICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLiBCb3RoIG1vZGVzIGhhdmUgZml4ZWQgYmVoYXZpb3I6XG4mIzQzOyAqICAgLSBObyBjb25maWd1cmFibGUgcXVldWUtdG8tcHJpb3JpdHkgbWFwcGluZ1xuJiM0MzsgKiAgIC0gTm8gd2VpZ2h0IGFkanVzdG1lbnQgaW4gV0ZRIG1vZGVcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBzd2l0Y2ggdG8gdXNlIHN0cmljdCBwcmlvcml0eSBtb2RlIGJ5XG4mIzQzOyAqIGNsZWFyaW5nIHRoZSBXRlEgZW5hYmxlIGJpdCBmb3IgYWxsIHF1ZXVlcyBhc3NvY2lhdGVkIHdpdGggRVRTIGJhbmRzLlxuJiM0MzsgKiBJZiBzdHJpY3QgcHJpb3JpdHkgaXMgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCB0aGUgc3dpdGNoIHdpbGwgZGVmYXVsdFxuJiM0MzsgKiB0byBXRlEgbW9kZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGtzejg4eDNfdGNfZXRzX2FkZChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0LCBiYW5kO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IHN0cmljdCBwcmlvcml0eSBtb2RlIGlzIHN1cHBvcnRlZCBmb3Igbm93LlxuJiM0MztcdCAqIFdGUSBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbiBzdHJpY3QgbW9kZSBpcyBkaXNhYmxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGJhbmQgPSAwOyBiYW5kIFx1MDAzYyBwLVx1MDAzZWJhbmRzOyBiYW5kJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpO1xuJiM0MztcdFx0dTggcmVnO1xuJiM0MztcbiYjNDM7XHRcdC8qIENhbGN1bGF0ZSBUWFEgU3BsaXQgQ29udHJvbCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzXG4mIzQzO1x0XHQgKiBwb3J0L3F1ZXVlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcbiYjNDM7XHRcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxuJiM0MztcdFx0XHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xuJiM0MztcbiYjNDM7XHRcdC8qIENsZWFyIFdGUSBlbmFibGUgYml0IHRvIHNlbGVjdCBzdHJpY3QgcHJpb3JpdHkgc2NoZWR1bGluZyAqL1xuJiM0MztcdFx0cmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsIDApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICoga3N6ODh4M190Y19ldHNfZGVsIC0gUmVzZXQgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKSBjb25maWdcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxuJiM0MzsgKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBLU1ogc3dpdGNoIGRldmljZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIHJlc2V0XG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBLU1o4OHgzIHN1cHBvcnRzIG9ubHkgZml4ZWQgc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IG9yXG4mIzQzOyAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKSwgd2l0aCBubyByZWNvbmZpZ3VyYXRpb24gb2Ygd2VpZ2h0cyBvclxuJiM0MzsgKiBxdWV1ZSBtYXBwaW5nLiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgcG9ydOKAmXMgc2NoZWR1bGluZyBtb2RlIHRvXG4mIzQzOyAqIHRoZSBkZWZhdWx0LCB3aGljaCBpcyBXRlEsIGJ5IGVuYWJsaW5nIHRoZSBXRlEgYml0IGZvciBhbGwgcXVldWVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCwgcXVldWU7XG4mIzQzO1xuJiM0MztcdC8qIEl0ZXJhdGUgb3ZlciBhbGwgdHJhbnNtaXQgcXVldWVzIGZvciB0aGlzIHBvcnQgKi9cbiYjNDM7XHRmb3IgKHF1ZXVlID0gMDsgcXVldWUgXHUwMDNjIGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV90eF9xdWV1ZXM7IHF1ZXVlJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTggcmVnO1xuJiM0MztcbiYjNDM7XHRcdC8qIENhbGN1bGF0ZSBUWFEgU3BsaXQgQ29udHJvbCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzXG4mIzQzO1x0XHQgKiBwb3J0L3F1ZXVlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcbiYjNDM7XHRcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxuJiM0MztcdFx0XHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNldCBXRlEgZW5hYmxlIGJpdCB0byByZXZlcnQgYmFjayB0byBkZWZhdWx0IHNjaGVkdWxpbmdcbiYjNDM7XHRcdCAqIG1vZGVcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsXG4mIzQzO1x0XHRcdCAgICAgICBLU1o4ODczX1RYUV9XRlFfRU5BQkxFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc3o4X3RjX3NldHVwX3FkaXNjX2V0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpxb3B0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlcGFyZW50ICE9IFRDX0hfUk9PVCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtQYXJlbnQgc2hvdWxkIGJlIFxcXCYjMzQ7cm9vdFxcXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocW9wdC1cdTAwM2Vjb21tYW5kKSB7XG4mIzQzO1x0Y2FzZSBUQ19FVFNfUkVQTEFDRTpcbiYjNDM7XHRcdHJldCA9IGtzel90Y19ldHNfdmFsaWRhdGUoZGV2LCBwb3J0LCBcdTAwMjZxb3B0LVx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGtzejg4eDNfdGNfZXRzX2FkZChkZXYsIHBvcnQsIFx1MDAyNnFvcHQtXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xuJiM0MztcdGNhc2UgVENfRVRTX0RFU1RST1k6XG4mIzQzO1x0XHRyZXR1cm4ga3N6ODh4M190Y19ldHNfZGVsKGRldiwgcG9ydCk7XG4mIzQzO1x0Y2FzZSBUQ19FVFNfU1RBVFM6XG4mIzQzO1x0Y2FzZSBUQ19FVFNfR1JBRlQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODd4eF9zZXR1cF90YyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgICAgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxuJiM0MztcdFx0cmV0dXJuIGtzel9zZXR1cF90Y19jYnMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6OF9zZXR1cF90YyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0XHQgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOlxuJiM0MztcdFx0cmV0dXJuIGtzel9zZXR1cF90Y19jYnMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19FVFM6XG4mIzQzO1x0XHRyZXR1cm4ga3N6OF90Y19zZXR1cF9xZGlzY19ldHMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQga3N6ODc5NV9jcHVfaW50ZXJmYWNlX3NlbGVjdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiB7XG4gXHRzdHJ1Y3Qga3N6X3BvcnQgKnAgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbcG9ydF07XG5AQCAtMjA1Myw2ICYjNDM7MjI1MSwxNzEgQEAgc3RhdGljIGludCBrc3o4X2VuYWJsZV9zdHBfYWRkcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIGtzejhfd19zdGFfbWFjX3RhYmxlKGRldiwgMCwgXHUwMDI2YWx1KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwc3RhdHM7XG4mIzQzO1x0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cztcbiYjNDM7XHRzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKnJhdztcbiYjNDM7XHRzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7XG4mIzQzO1xuJiM0MztcdG1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4mIzQzO1x0c3RhdHMgPSBcdTAwMjZtaWItXHUwMDNlc3RhdHM2NDtcbiYjNDM7XHRwc3RhdHMgPSBcdTAwMjZtaWItXHUwMDNlcGF1c2Vfc3RhdHM7XG4mIzQzO1x0cmF3ID0gKHN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyAqKW1pYi1cdTAwM2Vjb3VudGVycztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0X2xvY2spO1xuJiM0MztcbiYjNDM7XHRzdGF0cy1cdTAwM2VyeF9wYWNrZXRzID0gcmF3LVx1MDAzZXJ4X2JjYXN0ICYjNDM7IHJhdy1cdTAwM2VyeF9tY2FzdCAmIzQzOyByYXctXHUwMDNlcnhfdWNhc3QgJiM0MztcbiYjNDM7XHRcdHJhdy1cdTAwM2VyeF9wYXVzZTtcbiYjNDM7XHRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzID0gcmF3LVx1MDAzZXR4X2JjYXN0ICYjNDM7IHJhdy1cdTAwM2V0eF9tY2FzdCAmIzQzOyByYXctXHUwMDNldHhfdWNhc3QgJiM0MztcbiYjNDM7XHRcdHJhdy1cdTAwM2V0eF9wYXVzZTtcbiYjNDM7XG4mIzQzO1x0LyogSFcgY291bnRlcnMgYXJlIGNvdW50aW5nIGJ5dGVzICYjNDM7IEZDUyB3aGljaCBpcyBub3QgYWNjZXB0YWJsZVxuJiM0MztcdCAqIGZvciBydG5sX2xpbmtfc3RhdHM2NCBpbnRlcmZhY2VcbiYjNDM7XHQgKi9cbiYjNDM7XHRzdGF0cy1cdTAwM2VyeF9ieXRlcyA9IHJhdy1cdTAwM2VyeCAmIzQzOyByYXctXHUwMDNlcnhfaGkgLSBzdGF0cy1cdTAwM2VyeF9wYWNrZXRzICogRVRIX0ZDU19MRU47XG4mIzQzO1x0c3RhdHMtXHUwMDNldHhfYnl0ZXMgPSByYXctXHUwMDNldHggJiM0MzsgcmF3LVx1MDAzZXR4X2hpIC0gc3RhdHMtXHUwMDNldHhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOO1xuJiM0MztcbiYjNDM7XHRzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzID0gcmF3LVx1MDAzZXJ4X3VuZGVyc2l6ZSAmIzQzOyByYXctXHUwMDNlcnhfZnJhZ21lbnRzICYjNDM7XG4mIzQzO1x0XHRyYXctXHUwMDNlcnhfb3ZlcnNpemU7XG4mIzQzO1xuJiM0MztcdHN0YXRzLVx1MDAzZXJ4X2NyY19lcnJvcnMgPSByYXctXHUwMDNlcnhfY3JjX2VycjtcbiYjNDM7XHRzdGF0cy1cdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSByYXctXHUwMDNlcnhfYWxpZ25fZXJyO1xuJiM0MztcdHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQgPSByYXctXHUwMDNlcnhfZGlzY2FyZHM7XG4mIzQzO1x0c3RhdHMtXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyAmIzQzOyBzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzICYjNDM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9mcmFtZV9lcnJvcnMgICYjNDM7IHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQ7XG4mIzQzO1xuJiM0MztcdHN0YXRzLVx1MDAzZXR4X3dpbmRvd19lcnJvcnMgPSByYXctXHUwMDNldHhfbGF0ZV9jb2w7XG4mIzQzO1x0c3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgPSByYXctXHUwMDNldHhfZGlzY2FyZHM7XG4mIzQzO1x0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSByYXctXHUwMDNldHhfZXhjX2NvbDtcbiYjNDM7XHRzdGF0cy1cdTAwM2V0eF9lcnJvcnMgPSBzdGF0cy1cdTAwM2V0eF93aW5kb3dfZXJyb3JzICYjNDM7IHN0YXRzLVx1MDAzZXR4X2ZpZm9fZXJyb3JzICYjNDM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycztcbiYjNDM7XG4mIzQzO1x0c3RhdHMtXHUwMDNlbXVsdGljYXN0ID0gcmF3LVx1MDAzZXJ4X21jYXN0O1xuJiM0MztcdHN0YXRzLVx1MDAzZWNvbGxpc2lvbnMgPSByYXctXHUwMDNldHhfdG90YWxfY29sO1xuJiM0MztcbiYjNDM7XHRwc3RhdHMtXHUwMDNldHhfcGF1c2VfZnJhbWVzID0gcmF3LVx1MDAzZXR4X3BhdXNlO1xuJiM0MztcdHBzdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSByYXctXHUwMDNlcnhfcGF1c2U7XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0X2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICoga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBjb25maWd1cmF0aW9uIGZvclxuJiM0MzsgKlx0XHRcdFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxuJiM0MzsgKiBAZGV2OiAgICAgICBrc3ogZGV2aWNlXG4mIzQzOyAqIEBwcm9wczogICAgIEFycmF5IG9mIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgdG8gYmUgc2V0XG4mIzQzOyAqIEBudW1fcHJvcHM6IE51bWJlciBvZiBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheVxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBzZXR0aW5ncyB0byBLU1o4OFgzIGNoaXBcbiYjNDM7ICogdmFyaWFudHMgKEtTWjg4NzMsIEtTWjg4NjMpLlxuJiM0MzsgKiBJdCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9ucyBhbGlnbiB3aXRoIHdoYXQgdGhlIGNoaXAgdmFyaWFudCBzdXBwb3J0cyBhbmRcbiYjNDM7ICogd2FybnMgb3IgZXJyb3JzIG91dCBvbiB1bnN1cHBvcnRlZCBzZXR0aW5ncy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLFxuJiM0MztcdFx0XHRcdFx0aW50IG51bV9wcm9wcylcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBhcnJheV9zaXplID0gQVJSQVlfU0laRShrc3o4OHgzX2RyaXZlX3N0cmVuZ3Rocyk7XG4mIzQzO1x0aW50IG1pY3JvYW1wO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wcm9wczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwcm9wc1tpXS52YWx1ZSA9PSAtMSB8fCBpID09IEtTWl9EUklWRVJfU1RSRU5HVEhfSU8pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGRldl93YXJuKGRldi1cdTAwM2VkZXYsIFwmIzM0OyVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBwcm9wc1tpXS5uYW1lKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1pY3JvYW1wID0gcHJvcHNbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10udmFsdWU7XG4mIzQzO1x0cmV0ID0ga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocywgYXJyYXlfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdG1pY3JvYW1wKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3IoZGV2LCBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyxcbiYjNDM7XHRcdFx0XHRcdCBhcnJheV9zaXplLCBtaWNyb2FtcCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9ybXc4KGRldiwgS1NaODg3M19SRUdfR0xPQkFMX0NUUkxfMTIsXG4mIzQzO1x0XHRcdEtTWjg4NzNfRFJJVkVfU1RSRU5HVEhfMTZNQSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoKSAtIEV4dHJhY3QgYW5kIGFwcGx5IGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb25zXG4mIzQzOyAqXHRcdFx0XHQgZnJvbSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLlxuJiM0MzsgKiBAZGV2Olx0a3N6IGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZVxuJiM0MzsgKiBkZXZpY2UgdHJlZSwgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHN1cHBvcnRlZCBjaGlwIHZhcmlhbnRzLCBhbmQgc2V0c1xuJiM0MzsgKiB0aGVtIGFjY29yZGluZ2x5LiBBbiBlcnJvciBzaG91bGQgYmUgY3JpdGljYWwgaGVyZSwgYXMgdGhlIGRyaXZlIHN0cmVuZ3RoXG4mIzQzOyAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHtcbiYjNDM7XHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0hJXSA9IHtcbiYjNDM7XHRcdFx0Lm5hbWUgPSBcJiMzNDttaWNyb2NoaXAsaGktZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcJiMzNDssXG4mIzQzO1x0XHRcdC5vZmZzZXQgPSBTV19ISV9TUEVFRF9EUklWRV9TVFJFTkdUSF9TLFxuJiM0MztcdFx0XHQudmFsdWUgPSAtMSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9MT10gPSB7XG4mIzQzO1x0XHRcdC5uYW1lID0gXCYjMzQ7bWljcm9jaGlwLGxvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCYjMzQ7LFxuJiM0MztcdFx0XHQub2Zmc2V0ID0gU1dfTE9fU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcbiYjNDM7XHRcdFx0LnZhbHVlID0gLTEsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dID0ge1xuJiM0MztcdFx0XHQubmFtZSA9IFwmIzM0O21pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwmIzM0OyxcbiYjNDM7XHRcdFx0Lm9mZnNldCA9IDAsIC8qIGRvbiYjMzk7dCBjYXJlICovXG4mIzQzO1x0XHRcdC52YWx1ZSA9IC0xLFxuJiM0MztcdFx0fSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGU7XG4mIzQzO1x0Ym9vbCBoYXZlX2FueV9wcm9wID0gZmFsc2U7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgb2ZfcHJvcHNbaV0ubmFtZSxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNm9mX3Byb3BzW2ldLnZhbHVlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVkFMKVxuJiM0MztcdFx0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhZCAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgb2ZfcHJvcHNbaV0ubmFtZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRoYXZlX2FueV9wcm9wID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghaGF2ZV9hbnlfcHJvcClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGRldi1cdTAwM2VjaGlwX2lkKSB7XG4mIzQzO1x0Y2FzZSBLU1o4OFgzX0NISVBfSUQ6XG4mIzQzO1x0XHRyZXR1cm4ga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShvZl9wcm9wcykpO1xuJiM0MztcdGNhc2UgS1NaODc5NV9DSElQX0lEOlxuJiM0MztcdGNhc2UgS1NaODc5NF9DSElQX0lEOlxuJiM0MztcdGNhc2UgS1NaODc2NV9DSElQX0lEOlxuJiM0MztcdFx0cmV0dXJuIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxuJiM0MztcdFx0XHRcdFx0XHRBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdC8qIEtTWjg4NjQsIEtTWjg4OTUgKi9cbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAob2ZfcHJvcHNbaV0udmFsdWUgPT0gLTEpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcJiMzNDslcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBvZl9wcm9wc1tpXS5uYW1lKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtMjA3NSw3ICYjNDM7MjQzOCw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoZGV2KTtcbiYjNDM7XHRyZXQgPSBrc3o4X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTI1NTEsOCAmIzQzOzI5MTQsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfbWlycm9yX2RlbFx0PSBrc3o4X3BvcnRfbWlycm9yX2RlbCxcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbi1cdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OF9jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuJiM0MztcdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6ODh4eF9jaGFuZ2VfbXR1LFxuJiM0MztcdC5wb3J0X21heF9tdHVcdFx0PSBrc3o4OHh4X21heF9tdHUsXG4gXHQuc3VzcGVuZFx0XHQ9IGtzel9zdXNwZW5kLFxuIFx0LnJlc3VtZVx0XHRcdD0ga3N6X3Jlc3VtZSxcbiBcdC5nZXRfdHNfaW5mb1x0XHQ9IGtzel9nZXRfdHNfaW5mbyxcbkBAIC0yNTYwLDcgJiM0MzsyOTIzLDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxuIFx0LnBvcnRfdHh0c3RhbXBcdFx0PSBrc3pfcG9ydF90eHRzdGFtcCxcbiBcdC5wb3J0X3J4dHN0YW1wXHRcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXG4tXHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzel9zZXR1cF90YyxcbiYjNDM7XHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzejhfc2V0dXBfdGMsXG4gXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4gXHQucG9ydF9zZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X3NldF9kZWZhdWx0X3ByaW8sXG4gXHQucG9ydF9nZXRfZHNjcF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kc2NwX3ByaW8sXG5AQCAtMjYwMSw4ICYjNDM7Mjk2NCw4IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4N3h4X3N3aXRjaF9vcHMgPSB7XG4gXHQucG9ydF9taXJyb3JfZGVsXHQ9IGtzejhfcG9ydF9taXJyb3JfZGVsLFxuIFx0LmdldF9zdGF0czY0XHRcdD0ga3N6X2dldF9zdGF0czY0LFxuIFx0LmdldF9wYXVzZV9zdGF0c1x0PSBrc3pfZ2V0X3BhdXNlX3N0YXRzLFxuLVx0LnBvcnRfY2hhbmdlX210dVx0PSBrc3o4X2NoYW5nZV9tdHUsXG4tXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6X21heF9tdHUsXG4mIzQzO1x0LnBvcnRfY2hhbmdlX210dVx0PSBrc3o4N3h4X2NoYW5nZV9tdHUsXG4mIzQzO1x0LnBvcnRfbWF4X210dVx0XHQ9IGtzejg3eHhfbWF4X210dSxcbiBcdC5zdXNwZW5kXHRcdD0ga3N6X3N1c3BlbmQsXG4gXHQucmVzdW1lXHRcdFx0PSBrc3pfcmVzdW1lLFxuIFx0LmdldF90c19pbmZvXHRcdD0ga3N6X2dldF90c19pbmZvLFxuQEAgLTI2MTAsNyAmIzQzOzI5NzMsNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfaHd0c3RhbXBfc2V0XHQ9IGtzel9od3RzdGFtcF9zZXQsXG4gXHQucG9ydF90eHRzdGFtcFx0XHQ9IGtzel9wb3J0X3R4dHN0YW1wLFxuIFx0LnBvcnRfcnh0c3RhbXBcdFx0PSBrc3pfcG9ydF9yeHRzdGFtcCxcbi1cdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6X3NldHVwX3RjLFxuJiM0MztcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6ODd4eF9zZXR1cF90YyxcbiBcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X3NldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X2dldF9kc2NwX3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbyxcbkBAIC0yNjUyLDggJiM0MzszMDE1LDggQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg4eHhfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X21pcnJvcl9kZWxcdD0ga3N6OF9wb3J0X21pcnJvcl9kZWwsXG4gXHQuZ2V0X3N0YXRzNjRcdFx0PSBrc3pfZ2V0X3N0YXRzNjQsXG4gXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IGtzel9nZXRfcGF1c2Vfc3RhdHMsXG4tXHQucG9ydF9jaGFuZ2VfbXR1XHQ9IGtzejhfY2hhbmdlX210dSxcbi1cdC5wb3J0X21heF9tdHVcdFx0PSBrc3pfbWF4X210dSxcbiYjNDM7XHQucG9ydF9jaGFuZ2VfbXR1XHQ9IGtzejg4eHhfY2hhbmdlX210dSxcbiYjNDM7XHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6ODh4eF9tYXhfbXR1LFxuIFx0LmdldF93b2xcdFx0PSBrc3pfZ2V0X3dvbCxcbiBcdC5zZXRfd29sXHRcdD0ga3N6X3NldF93b2wsXG4gXHQuc3VzcGVuZFx0XHQ9IGtzel9zdXNwZW5kLFxuQEAgLTI2NjMsNyAmIzQzOzMwMjYsNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODh4eF9zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfaHd0c3RhbXBfc2V0XHQ9IGtzel9od3RzdGFtcF9zZXQsXG4gXHQucG9ydF90eHRzdGFtcFx0XHQ9IGtzel9wb3J0X3R4dHN0YW1wLFxuIFx0LnBvcnRfcnh0c3RhbXBcdFx0PSBrc3pfcG9ydF9yeHRzdGFtcCxcbi1cdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6X3NldHVwX3RjLFxuJiM0MztcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6OF9zZXR1cF90YyxcbiBcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X3NldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X2dldF9kc2NwX3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5pbmRleCBmM2YwYzk4ZGZiNWE3Zi4uM2VlOTk1NTQ1YzU3OTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zd2l0Y2hkZXYuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2tzejk0NzdfcmVnLmhcJiMzNDtcbkBAIC02MCw2ICYjNDM7NjEsMTEgQEAgc3RhdGljIGludCBrc3o5NDc3X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG10dSlcbiBcdFx0XHRcdCAgUkVHX1NXX01UVV9NQVNLLCBmcmFtZV9zaXplKTtcbiB9XG4gXG4mIzQzO2ludCBrc3o5NDc3X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBLU1o5NDc3X01BWF9GUkFNRV9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6OTQ3N193YWl0X3ZsYW5fY3RybF9yZWFkeShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGludCB2YWw7XG5AQCAtNDc4LDggJiM0Mzs0ODQsOCBAQCBzdGF0aWMgaW50IGtzejk0NzdfaGFsZl9kdXBsZXhfbW9uaXRvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLWludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuLVx0XHRcdCAgIHU2NCB0eF9sYXRlX2NvbClcbiYjNDM7c3RhdGljIGludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgdTY0IHR4X2xhdGVfY29sKVxuIHtcbiBcdHU4IHN0YXR1cztcbiBcdGludCByZXQ7XG5AQCAtNDk3LDYgJiM0Mzs1MDMsMjQgQEAgaW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQga3N6OTQ3N19yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9zdGF0c19yYXcgKnJhdztcbiYjNDM7XHRzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0a3N6X3JfbWliX3N0YXRzNjQoZGV2LCBwb3J0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2VpbmZvLVx1MDAzZXBoeV9lcnJhdGFfOTQ3NyBcdTAwMjZcdTAwMjYgIWtzel9pc19zZ21paV9wb3J0KGRldiwgcG9ydCkpIHtcbiYjNDM7XHRcdG1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4mIzQzO1x0XHRyYXcgPSAoc3RydWN0IGtzel9zdGF0c19yYXcgKiltaWItXHUwMDNlY291bnRlcnM7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0ga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihkZXYsIHBvcnQsIHJhdy1cdTAwM2V0eF9sYXRlX2NvbCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBtb25pdG9yIHRyYW5zbWlzc2lvbiBoYWx0XFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO307XG4mIzQzO1xuIHZvaWQga3N6OTQ3N19wb3J0X2luaXRfY250KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIHtcbiBcdHN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG5AQCAtMTE3Niw2ICYjNDM7MTIwMCw1OCBAQCB2b2lkIGtzejk0NzdfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgICBQT1JUX01JUlJPUl9TTklGRkVSLCBmYWxzZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBrc3o5NDc3X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdTggKmJpdHZhbCA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXhtaWlfY3RybDE7XG4mIzQzO1x0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbiYjNDM7XHRib29sIGdiaXQgPSBmYWxzZTtcbiYjNDM7XHR1OCBkYXRhODtcbiYjNDM7XHRib29sIHZhbDtcbiYjNDM7XG4mIzQzO1x0a3N6X3ByZWFkOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sIFx1MDAyNmRhdGE4KTtcbiYjNDM7XG4mIzQzO1x0dmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7XG4mIzQzO1xuJiM0MztcdGlmICh2YWwgPT0gYml0dmFsW1BfR01JSV8xR0JJVF0pXG4mIzQzO1x0XHRnYml0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGdiaXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBwaHlfaW50ZXJmYWNlX3Qga3N6OTQ3N19nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgZ2JpdClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2V4bWlpX2N0cmwxO1xuJiM0MztcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XHR1OCBkYXRhODtcbiYjNDM7XHR1OCB2YWw7XG4mIzQzO1xuJiM0MztcdGtzel9wcmVhZDgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBcdTAwMjZkYXRhOCk7XG4mIzQzO1xuJiM0MztcdHZhbCA9IEZJRUxEX0dFVChQX01JSV9TRUxfTSwgZGF0YTgpO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsID09IGJpdHZhbFtQX01JSV9TRUxdKSB7XG4mIzQzO1x0XHRpZiAoZ2JpdClcbiYjNDM7XHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4mIzQzO1x0fSBlbHNlIGlmICh2YWwgPT0gYml0dmFsW1BfUk1JSV9TRUxdKSB7XG4mIzQzO1x0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJO1xuJiM0MztcdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcbiYjNDM7XHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ7XG4mIzQzO1x0XHRpZiAoZGF0YTggXHUwMDI2IFBfUkdNSUlfSURfSUdfRU5BQkxFKSB7XG4mIzQzO1x0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEO1xuJiM0MztcdFx0XHRpZiAoZGF0YTggXHUwMDI2IFBfUkdNSUlfSURfRUdfRU5BQkxFKVxuJiM0MztcdFx0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBpbnRlcmZhY2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF9pbnRlcmZhY2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4ge1xuIFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbkBAIC0xMTg0LDkgJiM0MzsxMjYwLDkgQEAgc3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF9pbnRlcmZhY2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlaW50ZXJuYWxfcGh5W3BvcnRdKVxuIFx0XHRyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuIFxuLVx0Z2JpdCA9IGtzel9nZXRfZ2JpdChkZXYsIHBvcnQpO1xuJiM0MztcdGdiaXQgPSBrc3o5NDc3X2dldF9nYml0KGRldiwgcG9ydCk7XG4gXG4tXHRpbnRlcmZhY2UgPSBrc3pfZ2V0X3htaWkoZGV2LCBwb3J0LCBnYml0KTtcbiYjNDM7XHRpbnRlcmZhY2UgPSBrc3o5NDc3X2dldF94bWlpKGRldiwgcG9ydCwgZ2JpdCk7XG4gXG4gXHRyZXR1cm4gaW50ZXJmYWNlO1xuIH1cbkBAIC0xMzM1LDYgJiM0MzsxNDExLDI4IEBAIHN0YXRpYyB2b2lkIGtzejk0NzdfcG9ydF9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBjcHVfcG9ydClcbiBcdGtzel9wd3JpdGU4KGRldiwgcG9ydCwgcmVnc1tSRUdfUE9SVF9QTUVfQ1RSTF0sIDApO1xuIH1cbiBcbiYjNDM7aW50IGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHF1ZXVlX21hcCA9IDA7XG4mIzQzO1x0aW50IGlwbTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpcG0gPSAwOyBpcG0gXHUwMDNjIGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV9pcG1zOyBpcG0mIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgcXVldWU7XG4mIzQzO1xuJiM0MztcdFx0LyogVHJhZmZpYyBUeXBlIChUVCkgaXMgY29ycmVzcG9uZGluZyB0byB0aGUgSW50ZXJuYWwgUHJpb3JpdHlcbiYjNDM7XHRcdCAqIE1hcCAoSVBNKSBpbiB0aGUgc3dpdGNoLiBUcmFmZmljIENsYXNzIChUQykgaXNcbiYjNDM7XHRcdCAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHF1ZXVlIGluIHRoZSBzd2l0Y2guXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHF1ZXVlID0gaWVlZTgwMjFxX3R0X3RvX3RjKGlwbSwgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4mIzQzO1x0XHRpZiAocXVldWUgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBxdWV1ZTtcbiYjNDM7XG4mIzQzO1x0XHRxdWV1ZV9tYXAgfD0gcXVldWUgXHUwMDNjXHUwMDNjIChpcG0gKiBLU1o5NDc3X1BPUlRfVENfTUFQX1MpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9wd3JpdGUzMihkZXYsIHBvcnQsIEtTWjk0NzdfUE9SVF9NUklfVENfTUFQX180LCBxdWV1ZV9tYXApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6OTQ3N19kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTE1MTcsNiAmIzQzOzE2MTUsNTggQEAgaW50IGtzejk0NzdfZW5hYmxlX3N0cF9hZGRyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBrc3o5NDc3X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKCkgLSBFeHRyYWN0IGFuZCBhcHBseSBkcml2ZSBzdHJlbmd0aFxuJiM0MzsgKlx0XHRcdFx0ICAgIGNvbmZpZ3VyYXRpb25zIGZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy5cbiYjNDM7ICogQGRldjpcdGtzeiBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgZnJvbSB0aGVcbiYjNDM7ICogZGV2aWNlIHRyZWUsIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBzdXBwb3J0ZWQgY2hpcCB2YXJpYW50cywgYW5kIHNldHNcbiYjNDM7ICogdGhlbSBhY2NvcmRpbmdseS4gQW4gZXJyb3Igc2hvdWxkIGJlIGNyaXRpY2FsIGhlcmUsIGFzIHRoZSBkcml2ZSBzdHJlbmd0aFxuJiM0MzsgKiBzZXR0aW5ncyBhcmUgY3J1Y2lhbCBmb3IgRU1JIGNvbXBsaWFuY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBrc3o5NDc3X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIG9mX3Byb3BzW10gPSB7XG4mIzQzO1x0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9ISV0gPSB7XG4mIzQzO1x0XHRcdC5uYW1lID0gXCYjMzQ7bWljcm9jaGlwLGhpLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCYjMzQ7LFxuJiM0MztcdFx0XHQub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcbiYjNDM7XHRcdFx0LnZhbHVlID0gLTEsXG4mIzQzO1x0XHR9LFxuJiM0MztcdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfTE9dID0ge1xuJiM0MztcdFx0XHQubmFtZSA9IFwmIzM0O21pY3JvY2hpcCxsby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwmIzM0OyxcbiYjNDM7XHRcdFx0Lm9mZnNldCA9IFNXX0xPX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXG4mIzQzO1x0XHRcdC52YWx1ZSA9IC0xLFxuJiM0MztcdFx0fSxcbiYjNDM7XHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0lPXSA9IHtcbiYjNDM7XHRcdFx0Lm5hbWUgPSBcJiMzNDttaWNyb2NoaXAsaW8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcJiMzNDssXG4mIzQzO1x0XHRcdC5vZmZzZXQgPSAwLCAvKiBkb24mIzM5O3QgY2FyZSAqL1xuJiM0MztcdFx0XHQudmFsdWUgPSAtMSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlO1xuJiM0MztcdGJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIG9mX3Byb3BzW2ldLm5hbWUsXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZvZl9wcm9wc1tpXS52YWx1ZSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTClcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IG9mX3Byb3BzW2ldLm5hbWUpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aGF2ZV9hbnlfcHJvcCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWhhdmVfYW55X3Byb3ApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLCBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4mIzQzO31cbiBzdGF0aWMgaW50IGtzejk0Nzdfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTE1MzksNyAmIzQzOzE2ODksNyBAQCBzdGF0aWMgaW50IGtzejk0Nzdfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0cmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7XG4mIzQzO1x0cmV0ID0ga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMDUyLDcgJiM0MzsyMjAyLDcgQEAgY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejk0NzdfZGV2X29wcyA9IHtcbiBcdC5jZmdfcG9ydF9tZW1iZXIgPSBrc3o5NDc3X2NmZ19wb3J0X21lbWJlcixcbiBcdC5yX21pYl9jbnQgPSBrc3o5NDc3X3JfbWliX2NudCxcbiBcdC5yX21pYl9wa3QgPSBrc3o5NDc3X3JfbWliX3BrdCxcbi1cdC5yX21pYl9zdGF0NjQgPSBrc3pfcl9taWJfc3RhdHM2NCxcbiYjNDM7XHQucl9taWJfc3RhdDY0ID0ga3N6OTQ3N19yX21pYl9zdGF0czY0LFxuIFx0LmZyZWV6ZV9taWIgPSBrc3o5NDc3X2ZyZWV6ZV9taWIsXG4gXHQucG9ydF9pbml0X2NudCA9IGtzejk0NzdfcG9ydF9pbml0X2NudCxcbiBcdC5wbWVfd3JpdGU4ID0ga3N6X3dyaXRlOCxcbkBAIC0yMDk4LDcgJiM0MzsyMjQ4LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejk0Nzdfc3dpdGNoX29wcyA9IHtcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbiBcdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OTQ3N19jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuJiM0MztcdC5wb3J0X21heF9tdHVcdFx0PSBrc3o5NDc3X21heF9tdHUsXG4gXHQuZ2V0X3dvbFx0XHQ9IGtzel9nZXRfd29sLFxuIFx0LnNldF93b2xcdFx0PSBrc3pfc2V0X3dvbCxcbiBcdC5zdXNwZW5kXHRcdD0ga3N6X3N1c3BlbmQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaFxuaW5kZXggOTJhMWQ4ODkyMjRkM2UuLmE4NGMwMDAwMDBlNjZlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5oXG5AQCAtMjEsNiAmIzQzOzIxLDcgQEAgdm9pZCBrc3o5NDc3X2ZyZWV6ZV9taWIoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgZnJlZXplKTtcbiB2b2lkIGtzejk0NzdfcG9ydF9pbml0X2NudChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4gaW50IGtzejk0NzdfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdFx0Ym9vbCBmbGFnLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuJiM0MztpbnQga3N6OTQ3N19tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpO1xuIGludCBrc3o5NDc3X3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcbiBcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5AQCAtMzEsOCAmIzQzOzMyLDYgQEAgaW50IGtzejk0NzdfcG9ydF9taXJyb3JfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgIGJvb2wgaW5ncmVzcywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiB2b2lkIGtzejk0NzdfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgZHNhX21hbGxfbWlycm9yX3RjX2VudHJ5ICptaXJyb3IpO1xuLWludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuLVx0XHRcdCAgIHU2NCB0eF9sYXRlX2NvbCk7XG4gaW50IGtzejk0NzdfZmRiX2R1bXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgICBkc2FfZmRiX2R1bXBfY2JfdCAqY2IsIHZvaWQgKmRhdGEpO1xuIGludCBrc3o5NDc3X2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbkBAIC00NSw2ICYjNDM7NDQsNyBAQCBpbnQga3N6OTQ3N19tZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X21kYiAqbWRiLCBzdHJ1Y3QgZHNhX2RiIGRiKTtcbiBpbnQga3N6OTQ3N19lbmFibGVfc3RwX2FkZHIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG4gdm9pZCBrc3o5NDc3X3BvcnRfcXVldWVfc3BsaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuJiM0MztpbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuIFxuIGludCBrc3o5NDc3X3BvcnRfYWNsX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuIHZvaWQga3N6OTQ3N19wb3J0X2FjbF9mcmVlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5pbmRleCBkMTcyNjc3OGJiNDg4ZS4uNjdhYjZkZGI5ZTUzZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbkBAIC0zNyw4MiAmIzQzOzM3LDYgQEBcbiBcbiAjZGVmaW5lIE1JQl9DT1VOVEVSX05VTSAweDIwXG4gXG4tc3RydWN0IGtzel9zdGF0c19yYXcge1xuLVx0dTY0IHJ4X2hpO1xuLVx0dTY0IHJ4X3VuZGVyc2l6ZTtcbi1cdHU2NCByeF9mcmFnbWVudHM7XG4tXHR1NjQgcnhfb3ZlcnNpemU7XG4tXHR1NjQgcnhfamFiYmVycztcbi1cdHU2NCByeF9zeW1ib2xfZXJyO1xuLVx0dTY0IHJ4X2NyY19lcnI7XG4tXHR1NjQgcnhfYWxpZ25fZXJyO1xuLVx0dTY0IHJ4X21hY19jdHJsO1xuLVx0dTY0IHJ4X3BhdXNlO1xuLVx0dTY0IHJ4X2JjYXN0O1xuLVx0dTY0IHJ4X21jYXN0O1xuLVx0dTY0IHJ4X3VjYXN0O1xuLVx0dTY0IHJ4XzY0X29yX2xlc3M7XG4tXHR1NjQgcnhfNjVfMTI3O1xuLVx0dTY0IHJ4XzEyOF8yNTU7XG4tXHR1NjQgcnhfMjU2XzUxMTtcbi1cdHU2NCByeF81MTJfMTAyMztcbi1cdHU2NCByeF8xMDI0XzE1MjI7XG4tXHR1NjQgcnhfMTUyM18yMDAwO1xuLVx0dTY0IHJ4XzIwMDE7XG4tXHR1NjQgdHhfaGk7XG4tXHR1NjQgdHhfbGF0ZV9jb2w7XG4tXHR1NjQgdHhfcGF1c2U7XG4tXHR1NjQgdHhfYmNhc3Q7XG4tXHR1NjQgdHhfbWNhc3Q7XG4tXHR1NjQgdHhfdWNhc3Q7XG4tXHR1NjQgdHhfZGVmZXJyZWQ7XG4tXHR1NjQgdHhfdG90YWxfY29sO1xuLVx0dTY0IHR4X2V4Y19jb2w7XG4tXHR1NjQgdHhfc2luZ2xlX2NvbDtcbi1cdHU2NCB0eF9tdWx0X2NvbDtcbi1cdHU2NCByeF90b3RhbDtcbi1cdHU2NCB0eF90b3RhbDtcbi1cdHU2NCByeF9kaXNjYXJkcztcbi1cdHU2NCB0eF9kaXNjYXJkcztcbi19O1xuLVxuLXN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyB7XG4tXHR1NjQgcng7XG4tXHR1NjQgcnhfaGk7XG4tXHR1NjQgcnhfdW5kZXJzaXplO1xuLVx0dTY0IHJ4X2ZyYWdtZW50cztcbi1cdHU2NCByeF9vdmVyc2l6ZTtcbi1cdHU2NCByeF9qYWJiZXJzO1xuLVx0dTY0IHJ4X3N5bWJvbF9lcnI7XG4tXHR1NjQgcnhfY3JjX2Vycjtcbi1cdHU2NCByeF9hbGlnbl9lcnI7XG4tXHR1NjQgcnhfbWFjX2N0cmw7XG4tXHR1NjQgcnhfcGF1c2U7XG4tXHR1NjQgcnhfYmNhc3Q7XG4tXHR1NjQgcnhfbWNhc3Q7XG4tXHR1NjQgcnhfdWNhc3Q7XG4tXHR1NjQgcnhfNjRfb3JfbGVzcztcbi1cdHU2NCByeF82NV8xMjc7XG4tXHR1NjQgcnhfMTI4XzI1NTtcbi1cdHU2NCByeF8yNTZfNTExO1xuLVx0dTY0IHJ4XzUxMl8xMDIzO1xuLVx0dTY0IHJ4XzEwMjRfMTUyMjtcbi1cdHU2NCB0eDtcbi1cdHU2NCB0eF9oaTtcbi1cdHU2NCB0eF9sYXRlX2NvbDtcbi1cdHU2NCB0eF9wYXVzZTtcbi1cdHU2NCB0eF9iY2FzdDtcbi1cdHU2NCB0eF9tY2FzdDtcbi1cdHU2NCB0eF91Y2FzdDtcbi1cdHU2NCB0eF9kZWZlcnJlZDtcbi1cdHU2NCB0eF90b3RhbF9jb2w7XG4tXHR1NjQgdHhfZXhjX2NvbDtcbi1cdHU2NCB0eF9zaW5nbGVfY29sO1xuLVx0dTY0IHR4X211bHRfY29sO1xuLVx0dTY0IHJ4X2Rpc2NhcmRzO1xuLVx0dTY0IHR4X2Rpc2NhcmRzO1xuLX07XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfbWliX25hbWVzIGtzejg4eHhfbWliX25hbWVzW10gPSB7XG4gXHR7IDB4MDAsIFwmIzM0O3J4XCYjMzQ7IH0sXG4gXHR7IDB4MDEsIFwmIzM0O3J4X2hpXCYjMzQ7IH0sXG5AQCAtMTg5LDI4ICYjNDM7MTEzLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfbWliX25hbWVzIGtzejk0NzdfbWliX25hbWVzW10gPSB7XG4gXHR7IDB4ODMsIFwmIzM0O3R4X2Rpc2NhcmRzXCYjMzQ7IH0sXG4gfTtcbiBcbi1zdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIHtcbi1cdGNvbnN0IGNoYXIgKm5hbWU7XG4tXHRpbnQgb2Zmc2V0O1xuLVx0aW50IHZhbHVlO1xuLX07XG4tXG4tZW51bSBrc3pfZHJpdmVyX3N0cmVuZ3RoX3R5cGUge1xuLVx0S1NaX0RSSVZFUl9TVFJFTkdUSF9ISSxcbi1cdEtTWl9EUklWRVJfU1RSRU5HVEhfTE8sXG4tXHRLU1pfRFJJVkVSX1NUUkVOR1RIX0lPLFxuLX07XG4tXG4tLyoqXG4tICogc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAtIGRyaXZlIHN0cmVuZ3RoIG1hcHBpbmdcbi0gKiBAcmVnX3ZhbDpcdHJlZ2lzdGVyIHZhbHVlXG4tICogQG1pY3JvYW1wOlx0bWljcm9hbXAgdmFsdWVcbi0gKi9cbi1zdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIHtcbi1cdHUzMiByZWdfdmFsO1xuLVx0dTMyIG1pY3JvYW1wO1xuLX07XG4tXG4gLyoga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHMgLSBEcml2ZSBzdHJlbmd0aCBtYXBwaW5nIGZvciBLU1o5NDc3IHZhcmlhbnRzXG4gICpcbiAgKiBUaGlzIHZhbHVlcyBhcmUgbm90IGRvY3VtZW50ZWQgaW4gS1NaOTQ3NyB2YXJpYW50cyBidXQgY29uZmlybWVkIGJ5XG5AQCAtMjQ2LDE1ICYjNDM7MTQ4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHNbXSA9IHtcbiBcdHsgU1dfRFJJVkVfU1RSRU5HVEhfMjhNQSwgMjgwMDAgfSxcbiB9O1xuIFxuLS8qIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaODg2MywgS1NaODg3MywgLi5cbi0gKlx0XHRcdCAgICAgdmFyaWFudHMuXG4tICogVGhpcyB2YWx1ZXMgYXJlIGRvY3VtZW50ZWQgaW4gS1NaODg3MyBhbmQgS1NaODg2MyBkYXRhc2hlZXRzLlxuLSAqL1xuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7XG4tXHR7IDAsICA4MDAwIH0sXG4tXHR7IEtTWjg4NzNfRFJJVkVfU1RSRU5HVEhfMTZNQSwgMTYwMDAgfSxcbi19O1xuLVxuIC8qKlxuICAqIGtzel9waHlsaW5rX21hY19kaXNhYmxlX3R4X2xwaSgpIC0gQ2FsbGJhY2sgdG8gc2lnbmFsIExQSSBzdXBwb3J0IChEdW1teSlcbiAgKiBAY29uZmlnOiBwaHlsaW5rIGNvbmZpZyBzdHJ1Y3R1cmVcbkBAIC0yMDEzLDcgJiM0MzsxOTA2LDYgQEAgdm9pZCBrc3pfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiBcdHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHM7XG4gXHRzdHJ1Y3Qga3N6X3N0YXRzX3JhdyAqcmF3O1xuIFx0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xuLVx0aW50IHJldDtcbiBcbiBcdG1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4gXHRzdGF0cyA9IFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0O1xuQEAgLTIwNTUsNjEgJiM0MzsxOTQ3LDYgQEAgdm9pZCBrc3pfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiBcdHBzdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSByYXctXHUwMDNlcnhfcGF1c2U7XG4gXG4gXHRzcGluX3VubG9jayhcdTAwMjZtaWItXHUwMDNlc3RhdHM2NF9sb2NrKTtcbi1cbi1cdGlmIChkZXYtXHUwMDNlaW5mby1cdTAwM2VwaHlfZXJyYXRhXzk0NzcgXHUwMDI2XHUwMDI2ICFrc3pfaXNfc2dtaWlfcG9ydChkZXYsIHBvcnQpKSB7XG4tXHRcdHJldCA9IGtzejk0NzdfZXJyYXRhX21vbml0b3IoZGV2LCBwb3J0LCByYXctXHUwMDNldHhfbGF0ZV9jb2wpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIG1vbml0b3IgdHJhbnNtaXNzaW9uIGhhbHRcXG5cJiMzNDspO1xuLVx0fVxuLX1cbi1cbi12b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcHN0YXRzO1xuLVx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cztcbi1cdHN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyAqcmF3O1xuLVx0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xuLVxuLVx0bWliID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYjtcbi1cdHN0YXRzID0gXHUwMDI2bWliLVx1MDAzZXN0YXRzNjQ7XG4tXHRwc3RhdHMgPSBcdTAwMjZtaWItXHUwMDNlcGF1c2Vfc3RhdHM7XG4tXHRyYXcgPSAoc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3ICopbWliLVx1MDAzZWNvdW50ZXJzO1xuLVxuLVx0c3Bpbl9sb2NrKFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0X2xvY2spO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfcGFja2V0cyA9IHJhdy1cdTAwM2VyeF9iY2FzdCAmIzQzOyByYXctXHUwMDNlcnhfbWNhc3QgJiM0MzsgcmF3LVx1MDAzZXJ4X3VjYXN0ICYjNDM7XG4tXHRcdHJhdy1cdTAwM2VyeF9wYXVzZTtcbi1cdHN0YXRzLVx1MDAzZXR4X3BhY2tldHMgPSByYXctXHUwMDNldHhfYmNhc3QgJiM0MzsgcmF3LVx1MDAzZXR4X21jYXN0ICYjNDM7IHJhdy1cdTAwM2V0eF91Y2FzdCAmIzQzO1xuLVx0XHRyYXctXHUwMDNldHhfcGF1c2U7XG4tXG4tXHQvKiBIVyBjb3VudGVycyBhcmUgY291bnRpbmcgYnl0ZXMgJiM0MzsgRkNTIHdoaWNoIGlzIG5vdCBhY2NlcHRhYmxlXG4tXHQgKiBmb3IgcnRubF9saW5rX3N0YXRzNjQgaW50ZXJmYWNlXG4tXHQgKi9cbi1cdHN0YXRzLVx1MDAzZXJ4X2J5dGVzID0gcmF3LVx1MDAzZXJ4ICYjNDM7IHJhdy1cdTAwM2VyeF9oaSAtIHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgKiBFVEhfRkNTX0xFTjtcbi1cdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gcmF3LVx1MDAzZXR4ICYjNDM7IHJhdy1cdTAwM2V0eF9oaSAtIHN0YXRzLVx1MDAzZXR4X3BhY2tldHMgKiBFVEhfRkNTX0xFTjtcbi1cbi1cdHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPSByYXctXHUwMDNlcnhfdW5kZXJzaXplICYjNDM7IHJhdy1cdTAwM2VyeF9mcmFnbWVudHMgJiM0Mztcbi1cdFx0cmF3LVx1MDAzZXJ4X292ZXJzaXplO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyA9IHJhdy1cdTAwM2VyeF9jcmNfZXJyO1xuLVx0c3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzID0gcmF3LVx1MDAzZXJ4X2FsaWduX2Vycjtcbi1cdHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQgPSByYXctXHUwMDNlcnhfZGlzY2FyZHM7XG4tXHRzdGF0cy1cdTAwM2VyeF9lcnJvcnMgPSBzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzICYjNDM7IHN0YXRzLVx1MDAzZXJ4X2NyY19lcnJvcnMgJiM0Mztcbi1cdFx0c3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzICAmIzQzOyBzdGF0cy1cdTAwM2VyeF9kcm9wcGVkO1xuLVxuLVx0c3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHJhdy1cdTAwM2V0eF9sYXRlX2NvbDtcbi1cdHN0YXRzLVx1MDAzZXR4X2ZpZm9fZXJyb3JzID0gcmF3LVx1MDAzZXR4X2Rpc2NhcmRzO1xuLVx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSByYXctXHUwMDNldHhfZXhjX2NvbDtcbi1cdHN0YXRzLVx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVx1MDAzZXR4X3dpbmRvd19lcnJvcnMgJiM0Mzsgc3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgJiM0Mztcbi1cdFx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnM7XG4tXG4tXHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgPSByYXctXHUwMDNlcnhfbWNhc3Q7XG4tXHRzdGF0cy1cdTAwM2Vjb2xsaXNpb25zID0gcmF3LVx1MDAzZXR4X3RvdGFsX2NvbDtcbi1cbi1cdHBzdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSByYXctXHUwMDNldHhfcGF1c2U7XG4tXHRwc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcmF3LVx1MDAzZXJ4X3BhdXNlO1xuLVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2bWliLVx1MDAzZXN0YXRzNjRfbG9jayk7XG4gfVxuIFxuIHZvaWQga3N6X2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5AQCAtMjg4NSwyOCAmIzQzOzI3MjIsNiBAQCB2b2lkIGtzel9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0ICovXG4gfVxuIFxuLWludCBrc3o5NDc3X3NldF9kZWZhdWx0X3ByaW9fcXVldWVfbWFwcGluZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHR1MzIgcXVldWVfbWFwID0gMDtcbi1cdGludCBpcG07XG4tXG4tXHRmb3IgKGlwbSA9IDA7IGlwbSBcdTAwM2MgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX2lwbXM7IGlwbSYjNDM7JiM0MzspIHtcbi1cdFx0aW50IHF1ZXVlO1xuLVxuLVx0XHQvKiBUcmFmZmljIFR5cGUgKFRUKSBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBJbnRlcm5hbCBQcmlvcml0eVxuLVx0XHQgKiBNYXAgKElQTSkgaW4gdGhlIHN3aXRjaC4gVHJhZmZpYyBDbGFzcyAoVEMpIGlzXG4tXHRcdCAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHF1ZXVlIGluIHRoZSBzd2l0Y2guXG4tXHRcdCAqL1xuLVx0XHRxdWV1ZSA9IGllZWU4MDIxcV90dF90b190YyhpcG0sIGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV90eF9xdWV1ZXMpO1xuLVx0XHRpZiAocXVldWUgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHF1ZXVlO1xuLVxuLVx0XHRxdWV1ZV9tYXAgfD0gcXVldWUgXHUwMDNjXHUwMDNjIChpcG0gKiBLU1o5NDc3X1BPUlRfVENfTUFQX1MpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGtzel9wd3JpdGUzMihkZXYsIHBvcnQsIEtTWjk0NzdfUE9SVF9NUklfVENfTUFQX180LCBxdWV1ZV9tYXApO1xuLX1cbi1cbiB2b2lkIGtzel9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtMjk4NCw0MCAmIzQzOzI3OTksNiBAQCBpbnQga3N6X3BvcnRfYnJpZGdlX2ZsYWdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4te1xuLVx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4tXG4tXHRzd2l0Y2ggKGRldi1cdTAwM2VjaGlwX2lkKSB7XG4tXHRjYXNlIEtTWjg3OTVfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODc5NF9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NzY1X0NISVBfSUQ6XG4tXHRcdHJldHVybiBLU1o4Nzk1X0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XG4tXHRjYXNlIEtTWjg0NjNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODhYM19DSElQX0lEOlxuLVx0Y2FzZSBLU1o4ODY0X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg4OTVfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIEtTWjg4NjNfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjtcbi1cdGNhc2UgS1NaODU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk0NzdfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o5NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk4OTNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTg5Nl9DSElQX0lEOlxuLVx0Y2FzZSBLU1o5ODk3X0NISVBfSUQ6XG4tXHRjYXNlIExBTjkzNzBfQ0hJUF9JRDpcbi1cdGNhc2UgTEFOOTM3MV9DSElQX0lEOlxuLVx0Y2FzZSBMQU45MzcyX0NISVBfSUQ6XG4tXHRjYXNlIExBTjkzNzNfQ0hJUF9JRDpcbi1cdGNhc2UgTEFOOTM3NF9DSElQX0lEOlxuLVx0Y2FzZSBMQU45NjQ2X0NISVBfSUQ6XG4tXHRcdHJldHVybiBLU1o5NDc3X01BWF9GUkFNRV9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xuLVx0fVxuLVxuLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLX1cbi1cbiBpbnQga3N6X3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuIHtcbkBAIC0zMDg2LDM5ICYjNDM7Mjg2Nyw2IEBAIHZvaWQga3N6X3NldF94bWlpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuIFx0a3N6X3B3cml0ZTgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBkYXRhOCk7XG4gfVxuIFxuLXBoeV9pbnRlcmZhY2VfdCBrc3pfZ2V0X3htaWkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgZ2JpdClcbi17XG4tXHRjb25zdCB1OCAqYml0dmFsID0gZGV2LVx1MDAzZWluZm8tXHUwMDNleG1paV9jdHJsMTtcbi1cdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4tXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuLVx0dTggZGF0YTg7XG4tXHR1OCB2YWw7XG4tXG4tXHRrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgXHUwMDI2ZGF0YTgpO1xuLVxuLVx0dmFsID0gRklFTERfR0VUKFBfTUlJX1NFTF9NLCBkYXRhOCk7XG4tXG4tXHRpZiAodmFsID09IGJpdHZhbFtQX01JSV9TRUxdKSB7XG4tXHRcdGlmIChnYml0KVxuLVx0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJO1xuLVx0XHRlbHNlXG4tXHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbi1cdH0gZWxzZSBpZiAodmFsID09IGJpdHZhbFtQX1JNSUlfU0VMXSkge1xuLVx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTtcbi1cdH0gZWxzZSB7XG4tXHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTtcbi1cdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcbi1cdFx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDtcbi1cdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0lHX0VOQUJMRSkge1xuLVx0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEO1xuLVx0XHRcdGlmIChkYXRhOCBcdTAwMjYgUF9SR01JSV9JRF9FR19FTkFCTEUpXG4tXHRcdFx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJldHVybiBpbnRlcmZhY2U7XG4tfVxuLVxuIGJvb2wga3N6X3BoeWxpbmtfbmVlZF9jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbW9kZSlcbiB7XG5AQCAtMzE1NCwyNCAmIzQzOzI5MDIsNiBAQCB2b2lkIGtzel9waHlsaW5rX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRcdGtzel9zZXRfeG1paShkZXYsIHBvcnQsIHN0YXRlLVx1MDAzZWludGVyZmFjZSk7XG4gfVxuIFxuLWJvb2wga3N6X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuLXtcbi1cdGNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2V4bWlpX2N0cmwxO1xuLVx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbi1cdGJvb2wgZ2JpdCA9IGZhbHNlO1xuLVx0dTggZGF0YTg7XG4tXHRib29sIHZhbDtcbi1cbi1cdGtzel9wcmVhZDgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBcdTAwMjZkYXRhOCk7XG4tXG4tXHR2YWwgPSBGSUVMRF9HRVQoUF9HTUlJXzFHQklUX00sIGRhdGE4KTtcbi1cbi1cdGlmICh2YWwgPT0gYml0dmFsW1BfR01JSV8xR0JJVF0pXG4tXHRcdGdiaXQgPSB0cnVlO1xuLVxuLVx0cmV0dXJuIGdiaXQ7XG4tfVxuLVxuIHN0YXRpYyBpbnQga3N6X3N3aXRjaF9kZXRlY3Qoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4gXHR1OCBpZDEsIGlkMiwgaWQ0O1xuQEAgLTMzMTQsOCAmIzQzOzMwNDQsOCBAQCBzdGF0aWMgaW50IGtzel9zZXR1cF90Y19tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCB1OCBzY2hlZHVsZXIsXG4gXHRcdFx0ICAgRklFTERfUFJFUChNVElfU0hBUElOR19NLCBzaGFwZXIpKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfc2V0dXBfdGNfY2JzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0ICAgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxuJiM0MztpbnQga3N6X3NldHVwX3RjX2NicyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuJiM0MztcdFx0ICAgICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdClcbiB7XG4gXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdGludCByZXQ7XG5AQCAtMzM4MCw4ICYjNDM7MzExMCw4IEBAIHN0YXRpYyBpbnQga3N6X2Rpc2FibGVfZWdyZXNzX3JhdGVfbGltaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsXG4tXHRcdFx0XHQgaW50IGJhbmQpXG4mIzQzO2ludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsXG4mIzQzO1x0XHRcdCAgaW50IGJhbmQpXG4ge1xuIFx0LyogQ29tcGFyZWQgdG8gcXVldWVzLCBiYW5kcyBwcmlvcml0aXplIHBhY2tldHMgZGlmZmVyZW50bHkuIEluIHN0cmljdFxuIFx0ICogcHJpb3JpdHkgbW9kZSwgdGhlIGxvd2VzdCBwcmlvcml0eSBpcyBhc3NpZ25lZCB0byBRdWV1ZSAwIHdoaWxlIHRoZVxuQEAgLTMzOTAsMTA0ICYjNDM7MzEyMCw2IEBAIHN0YXRpYyBpbnQga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwLFxuIFx0cmV0dXJuIHAtXHUwMDNlYmFuZHMgLSAxIC0gYmFuZDtcbiB9XG4gXG4tc3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKVxuLXtcbi1cdHU4IHJlZztcbi1cbi1cdHJlZyA9IDB4QzggJiM0MzsgcG9ydCAqIDQ7XG4tXHRyZWcgJiM0Mzs9ICgoMyAtIHF1ZXVlKSAvIDIpICogMjtcbi1cdHJlZyYjNDM7JiM0Mzs7XG4tXHRyZWcgLT0gKHF1ZXVlIFx1MDAyNiAxKTtcbi1cdHJldHVybiByZWc7XG4tfVxuLVxuLS8qKlxuLSAqIGtzejg4eDNfdGNfZXRzX2FkZCAtIENvbmZpZ3VyZSBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pXG4tICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxuLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZVxuLSAqIEBwb3J0OiBQb3J0IG51bWJlciB0byBjb25maWd1cmVcbi0gKiBAcDogUG9pbnRlciB0byBvZmZsb2FkIHJlcGxhY2UgcGFyYW1ldGVycyBkZXNjcmliaW5nIEVUUyBiYW5kcyBhbmQgbWFwcGluZ1xuLSAqXG4tICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgdHdvIHNjaGVkdWxpbmcgbW9kZXM6IFN0cmljdCBQcmlvcml0eSBhbmRcbi0gKiBXZWlnaHRlZCBGYWlyIFF1ZXVpbmcgKFdGUSkuIEJvdGggbW9kZXMgaGF2ZSBmaXhlZCBiZWhhdmlvcjpcbi0gKiAgIC0gTm8gY29uZmlndXJhYmxlIHF1ZXVlLXRvLXByaW9yaXR5IG1hcHBpbmdcbi0gKiAgIC0gTm8gd2VpZ2h0IGFkanVzdG1lbnQgaW4gV0ZRIG1vZGVcbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgc3dpdGNoIHRvIHVzZSBzdHJpY3QgcHJpb3JpdHkgbW9kZSBieVxuLSAqIGNsZWFyaW5nIHRoZSBXRlEgZW5hYmxlIGJpdCBmb3IgYWxsIHF1ZXVlcyBhc3NvY2lhdGVkIHdpdGggRVRTIGJhbmRzLlxuLSAqIElmIHN0cmljdCBwcmlvcml0eSBpcyBub3QgZXhwbGljaXRseSByZXF1ZXN0ZWQsIHRoZSBzd2l0Y2ggd2lsbCBkZWZhdWx0XG4tICogdG8gV0ZRIG1vZGUuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbi0gKi9cbi1zdGF0aWMgaW50IGtzejg4eDNfdGNfZXRzX2FkZChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcClcbi17XG4tXHRpbnQgcmV0LCBiYW5kO1xuLVxuLVx0LyogT25seSBzdHJpY3QgcHJpb3JpdHkgbW9kZSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy5cbi1cdCAqIFdGUSBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbiBzdHJpY3QgbW9kZSBpcyBkaXNhYmxlZC5cbi1cdCAqL1xuLVx0Zm9yIChiYW5kID0gMDsgYmFuZCBcdTAwM2MgcC1cdTAwM2ViYW5kczsgYmFuZCYjNDM7JiM0MzspIHtcbi1cdFx0aW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpO1xuLVx0XHR1OCByZWc7XG4tXG4tXHRcdC8qIENhbGN1bGF0ZSBUWFEgU3BsaXQgQ29udHJvbCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzXG4tXHRcdCAqIHBvcnQvcXVldWVcbi1cdFx0ICovXG4tXHRcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcbi1cdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcbi1cbi1cdFx0LyogQ2xlYXIgV0ZRIGVuYWJsZSBiaXQgdG8gc2VsZWN0IHN0cmljdCBwcmlvcml0eSBzY2hlZHVsaW5nICovXG4tXHRcdHJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLCAwKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLS8qKlxuLSAqIGtzejg4eDNfdGNfZXRzX2RlbCAtIFJlc2V0IEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgY29uZmlnXG4tICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxuLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZVxuLSAqIEBwb3J0OiBQb3J0IG51bWJlciB0byByZXNldFxuLSAqXG4tICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgb25seSBmaXhlZCBzY2hlZHVsaW5nIG1vZGVzOiBTdHJpY3QgUHJpb3JpdHkgb3Jcbi0gKiBXZWlnaHRlZCBGYWlyIFF1ZXVpbmcgKFdGUSksIHdpdGggbm8gcmVjb25maWd1cmF0aW9uIG9mIHdlaWdodHMgb3Jcbi0gKiBxdWV1ZSBtYXBwaW5nLiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgcG9ydOKAmXMgc2NoZWR1bGluZyBtb2RlIHRvXG4tICogdGhlIGRlZmF1bHQsIHdoaWNoIGlzIFdGUSwgYnkgZW5hYmxpbmcgdGhlIFdGUSBiaXQgZm9yIGFsbCBxdWV1ZXMuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbi0gKi9cbi1zdGF0aWMgaW50IGtzejg4eDNfdGNfZXRzX2RlbChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHRpbnQgcmV0LCBxdWV1ZTtcbi1cbi1cdC8qIEl0ZXJhdGUgb3ZlciBhbGwgdHJhbnNtaXQgcXVldWVzIGZvciB0aGlzIHBvcnQgKi9cbi1cdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcdTAwM2MgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3R4X3F1ZXVlczsgcXVldWUmIzQzOyYjNDM7KSB7XG4tXHRcdHU4IHJlZztcbi1cbi1cdFx0LyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXNcbi1cdFx0ICogcG9ydC9xdWV1ZVxuLVx0XHQgKi9cbi1cdFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xuLVx0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbi1cdFx0XHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xuLVxuLVx0XHQvKiBTZXQgV0ZRIGVuYWJsZSBiaXQgdG8gcmV2ZXJ0IGJhY2sgdG8gZGVmYXVsdCBzY2hlZHVsaW5nXG4tXHRcdCAqIG1vZGVcbi1cdFx0ICovXG4tXHRcdHJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLFxuLVx0XHRcdCAgICAgICBLU1o4ODczX1RYUV9XRlFfRU5BQkxFKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbnQga3N6X3F1ZXVlX3NldF9zdHJpY3Qoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGludCBxdWV1ZSlcbiB7XG4gXHRpbnQgcmV0O1xuQEAgLTM1ODAsOCAmIzQzOzMyMTIsOCBAQCBzdGF0aWMgaW50IGtzel90Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIFx0cmV0dXJuIGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKGRldiwgcG9ydCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3RjX2V0c192YWxpZGF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbi1cdFx0XHQgICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXG4mIzQzO2ludCBrc3pfdGNfZXRzX3ZhbGlkYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuJiM0MztcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcClcbiB7XG4gXHRpbnQgYmFuZDtcbiBcbkBAIC0zNjIyLDkgJiM0MzszMjU0LDYgQEAgc3RhdGljIGludCBrc3pfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoaXNfa3N6OChkZXYpIFx1MDAyNlx1MDAyNiAhKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSkpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbiBcdGlmIChxb3B0LVx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcbiBcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtQYXJlbnQgc2hvdWxkIGJlIFxcXCYjMzQ7cm9vdFxcXCYjMzQ7XFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTM2MzYsMTYgJiM0MzszMjY1LDkgQEAgc3RhdGljIGludCBrc3pfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcbi1cdFx0aWYgKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSlcbi1cdFx0XHRyZXR1cm4ga3N6ODh4M190Y19ldHNfYWRkKGRldiwgcG9ydCxcbi1cdFx0XHRcdFx0XHQgIFx1MDAyNnFvcHQtXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0dXJuIGtzel90Y19ldHNfYWRkKGRldiwgcG9ydCwgXHUwMDI2cW9wdC1cdTAwM2VyZXBsYWNlX3BhcmFtcyk7XG4mIzQzO1x0XHRyZXR1cm4ga3N6X3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcdTAwMjZxb3B0LVx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcbiBcdGNhc2UgVENfRVRTX0RFU1RST1k6XG4tXHRcdGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmV0dXJuIGtzejg4eDNfdGNfZXRzX2RlbChkZXYsIHBvcnQpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0dXJuIGtzel90Y19ldHNfZGVsKGRldiwgcG9ydCk7XG4mIzQzO1x0XHRyZXR1cm4ga3N6X3RjX2V0c19kZWwoZGV2LCBwb3J0KTtcbiBcdGNhc2UgVENfRVRTX1NUQVRTOlxuIFx0Y2FzZSBUQ19FVFNfR1JBRlQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbkBAIC0zNzA0LDYgJiM0MzszMzI2LDM0IEBAIGludCBrc3pfaGFuZGxlX3dha2VfcmVhc29uKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIFx0XHRcdFx0cG1lX3N0YXR1cyk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICoga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUgLSBDaGVjayBpZiB0aGUgTUFDIGFkZHJlc3Mgb24gYSBnaXZlbiBwb3J0XG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcy5cbiYjNDM7ICogQGRzOiBQb2ludGVyIHRvIHRoZSBEU0Egc3dpdGNoIHN0cnVjdHVyZS5cbiYjNDM7ICogQHBvcnQ6IFRoZSBwb3J0IG51bWJlciBvbiB3aGljaCB0aGUgTUFDIGFkZHJlc3MgaXMgdG8gYmUgY2hlY2tlZC5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBleGFtaW5lcyB0aGUgTUFDIGFkZHJlc3Mgc2V0IG9uIHRoZSBzcGVjaWZpZWQgcG9ydCBhbmRcbiYjNDM7ICogZGV0ZXJtaW5lcyBpZiBpdCBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzIGZvciB0aGUgc3dpdGNoLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBvcnQmIzM5O3MgTUFDIGFkZHJlc3MgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcywgZmFsc2VcbiYjNDM7ICogb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpLVx1MDAzZXVzZXI7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgY2hhciAqYWRkciA9IHVzZXItXHUwMDNlZGV2X2FkZHI7XG4mIzQzO1x0c3RydWN0IGtzel9zd2l0Y2hfbWFjYWRkciAqc3dpdGNoX21hY2FkZHI7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaF9tYWNhZGRyID0gZGV2LVx1MDAzZXN3aXRjaF9tYWNhZGRyO1xuJiM0MztcdGlmIChzd2l0Y2hfbWFjYWRkciBcdTAwMjZcdTAwMjYgIWV0aGVyX2FkZHJfZXF1YWwoc3dpdGNoX21hY2FkZHItXHUwMDNlYWRkciwgYWRkcikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGtzel9nZXRfd29sIC0gR2V0IFdha2Utb24tTEFOIHNldHRpbmdzIGZvciBhIHNwZWNpZmllZCBwb3J0LlxuICAqIEBkczogVGhlIGRzYV9zd2l0Y2ggc3RydWN0dXJlLlxuQEAgLTM4OTcsMzQgJiM0MzszNTQ3LDYgQEAgaW50IGtzel9wb3J0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qKlxuLSAqIGtzel9pc19wb3J0X21hY19nbG9iYWxfdXNhYmxlIC0gQ2hlY2sgaWYgdGhlIE1BQyBhZGRyZXNzIG9uIGEgZ2l2ZW4gcG9ydFxuLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcy5cbi0gKiBAZHM6IFBvaW50ZXIgdG8gdGhlIERTQSBzd2l0Y2ggc3RydWN0dXJlLlxuLSAqIEBwb3J0OiBUaGUgcG9ydCBudW1iZXIgb24gd2hpY2ggdGhlIE1BQyBhZGRyZXNzIGlzIHRvIGJlIGNoZWNrZWQuXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGV4YW1pbmVzIHRoZSBNQUMgYWRkcmVzcyBzZXQgb24gdGhlIHNwZWNpZmllZCBwb3J0IGFuZFxuLSAqIGRldGVybWluZXMgaWYgaXQgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcyBmb3IgdGhlIHN3aXRjaC5cbi0gKlxuLSAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcG9ydCYjMzk7cyBNQUMgYWRkcmVzcyBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzLCBmYWxzZVxuLSAqIG90aGVyd2lzZS5cbi0gKi9cbi1ib29sIGtzel9pc19wb3J0X21hY19nbG9iYWxfdXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4te1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKnVzZXIgPSBkc2FfdG9fcG9ydChkcywgcG9ydCktXHUwMDNldXNlcjtcbi1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIgPSB1c2VyLVx1MDAzZWRldl9hZGRyO1xuLVx0c3RydWN0IGtzel9zd2l0Y2hfbWFjYWRkciAqc3dpdGNoX21hY2FkZHI7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbi1cbi1cdEFTU0VSVF9SVE5MKCk7XG4tXG4tXHRzd2l0Y2hfbWFjYWRkciA9IGRldi1cdTAwM2Vzd2l0Y2hfbWFjYWRkcjtcbi1cdGlmIChzd2l0Y2hfbWFjYWRkciBcdTAwMjZcdTAwMjYgIWV0aGVyX2FkZHJfZXF1YWwoc3dpdGNoX21hY2FkZHItXHUwMDNlYWRkciwgYWRkcikpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbiAvKipcbiAgKiBrc3pfc3dpdGNoX21hY2FkZHJfZ2V0IC0gUHJvZ3JhbSB0aGUgc3dpdGNoJiMzOTtzIE1BQyBhZGRyZXNzIHJlZ2lzdGVyLlxuICAqIEBkczogRFNBIHN3aXRjaCBpbnN0YW5jZS5cbkBAIC00MTMyLDggJiM0MzszNzU0LDggQEAgc3RhdGljIHZvaWQga3N6X3BhcnNlX3JnbWlpX2RlbGF5KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0X251bSxcbiAgKiBSZXR1cm5zOiBJZiBmb3VuZCwgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgdmFsdWUgZm9yIHRoYXQgZHJpdmUgc3RyZW5ndGhcbiAgKiBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCAtRUlOVkFMIGlzIHJldHVybmVkIGluZGljYXRpbmcgYW4gaW52YWxpZCB2YWx1ZS5cbiAgKi9cbi1zdGF0aWMgaW50IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXG4tXHRcdFx0XHQgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApXG4mIzQzO2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuJiM0MztcdFx0XHQgICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKVxuIHtcbiBcdGludCBpO1xuIFxuQEAgLTQxNTYsOSAmIzQzOzM3NzgsOSBAQCBzdGF0aWMgaW50IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXG4gICogaXMgZGV0ZWN0ZWQuIEl0IGxpc3RzIG91dCBhbGwgdGhlIHN1cHBvcnRlZCBkcml2ZSBzdHJlbmd0aCB2YWx1ZXMgZm9yXG4gICogcmVmZXJlbmNlIGluIHRoZSBlcnJvciBtZXNzYWdlLlxuICAqL1xuLXN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcbi1cdFx0XHRcdCAgICAgc2l6ZV90IGFycmF5X3NpemUsIGludCBtaWNyb2FtcClcbiYjNDM7dm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXG4mIzQzO1x0XHRcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApXG4ge1xuIFx0Y2hhciBzdXBwb3J0ZWRfdmFsdWVzWzEwMF07XG4gXHRzaXplX3QgcmVtYWluaW5nX3NpemU7XG5AQCAtNDE4NSw4ICYjNDM7MzgwNyw4IEBAIHN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIH1cbiBcbiAvKipcbi0gKiBrc3o5NDc3X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGZvciBzcGVjaWZpYyBLU1o5NDc3XG4tICpcdFx0XHRcdCAgICBjaGlwIHZhcmlhbnRzLlxuJiM0MzsgKiBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggZm9yIHNwZWNpZmljIEtTWjk0NzdcbiYjNDM7ICpcdFx0XHRcdGFuZCB0aGUgS1NaODd4eCBjaGlwIHZhcmlhbnRzLlxuICAqIEBkZXY6ICAgICAgIGtzeiBkZXZpY2VcbiAgKiBAcHJvcHM6ICAgICBBcnJheSBvZiBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIHRvIGJlIGFwcGxpZWRcbiAgKiBAbnVtX3Byb3BzOiBOdW1iZXIgb2YgcHJvcGVydGllcyBpbiB0aGUgYXJyYXlcbkBAIC00MTk3LDkgJiM0MzszODE5LDkgQEAgc3RhdGljIHZvaWQga3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzc2Z1bCBjb25maWd1cmF0aW9uLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IGtzejk0NzdfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4tXHRcdFx0XHRcdGludCBudW1fcHJvcHMpXG4mIzQzO2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wICpwcm9wcyxcbiYjNDM7XHRcdFx0ICAgICBpbnQgbnVtX3Byb3BzKVxuIHtcbiBcdHNpemVfdCBhcnJheV9zaXplID0gQVJSQVlfU0laRShrc3o5NDc3X2RyaXZlX3N0cmVuZ3Rocyk7XG4gXHRpbnQgaSwgcmV0LCByZWc7XG5AQCAtNDIzNiwxMzAgJiM0MzszODU4LDYgQEAgc3RhdGljIGludCBrc3o5NDc3X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCByZWcsIG1hc2ssIHZhbCk7XG4gfVxuIFxuLS8qKlxuLSAqIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbiBmb3Jcbi0gKlx0XHRcdFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxuLSAqIEBkZXY6ICAgICAgIGtzeiBkZXZpY2Vcbi0gKiBAcHJvcHM6ICAgICBBcnJheSBvZiBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIHRvIGJlIHNldFxuLSAqIEBudW1fcHJvcHM6IE51bWJlciBvZiBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheVxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggc2V0dGluZ3MgdG8gS1NaODhYMyBjaGlwXG4tICogdmFyaWFudHMgKEtTWjg4NzMsIEtTWjg4NjMpLlxuLSAqIEl0IGVuc3VyZXMgdGhlIGNvbmZpZ3VyYXRpb25zIGFsaWduIHdpdGggd2hhdCB0aGUgY2hpcCB2YXJpYW50IHN1cHBvcnRzIGFuZFxuLSAqIHdhcm5zIG9yIGVycm9ycyBvdXQgb24gdW5zdXBwb3J0ZWQgc2V0dGluZ3MuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2Vcbi0gKi9cbi1zdGF0aWMgaW50IGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4tXHRcdFx0XHRcdGludCBudW1fcHJvcHMpXG4te1xuLVx0c2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzKTtcbi1cdGludCBtaWNyb2FtcDtcbi1cdGludCBpLCByZXQ7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcHJvcHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChwcm9wc1tpXS52YWx1ZSA9PSAtMSB8fCBpID09IEtTWl9EUklWRVJfU1RSRU5HVEhfSU8pXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGRldl93YXJuKGRldi1cdTAwM2VkZXYsIFwmIzM0OyVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcXG5cJiMzNDssXG4tXHRcdFx0IHByb3BzW2ldLm5hbWUpO1xuLVx0fVxuLVxuLVx0bWljcm9hbXAgPSBwcm9wc1tLU1pfRFJJVkVSX1NUUkVOR1RIX0lPXS52YWx1ZTtcbi1cdHJldCA9IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoa3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsIGFycmF5X3NpemUsXG4tXHRcdFx0XHRcdG1pY3JvYW1wKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0a3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKGRldiwga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsXG4tXHRcdFx0XHRcdCBhcnJheV9zaXplLCBtaWNyb2FtcCk7XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4tXG4tXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCBLU1o4ODczX1JFR19HTE9CQUxfQ1RSTF8xMixcbi1cdFx0XHRLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIHJldCk7XG4tfVxuLVxuLS8qKlxuLSAqIGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aCgpIC0gRXh0cmFjdCBhbmQgYXBwbHkgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbnNcbi0gKlx0XHRcdFx0ZnJvbSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLlxuLSAqIEBkZXY6XHRrc3ogZGV2aWNlXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZVxuLSAqIGRldmljZSB0cmVlLCB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGNoaXAgdmFyaWFudHMsIGFuZCBzZXRzXG4tICogdGhlbSBhY2NvcmRpbmdseS4gQW4gZXJyb3Igc2hvdWxkIGJlIGNyaXRpY2FsIGhlcmUsIGFzIHRoZSBkcml2ZSBzdHJlbmd0aFxuLSAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS5cbi0gKlxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZVxuLSAqL1xuLWludCBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi17XG4tXHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIG9mX3Byb3BzW10gPSB7XG4tXHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0hJXSA9IHtcbi1cdFx0XHQubmFtZSA9IFwmIzM0O21pY3JvY2hpcCxoaS1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwmIzM0Oyxcbi1cdFx0XHQub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcbi1cdFx0XHQudmFsdWUgPSAtMSxcbi1cdFx0fSxcbi1cdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfTE9dID0ge1xuLVx0XHRcdC5uYW1lID0gXCYjMzQ7bWljcm9jaGlwLGxvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCYjMzQ7LFxuLVx0XHRcdC5vZmZzZXQgPSBTV19MT19TUEVFRF9EUklWRV9TVFJFTkdUSF9TLFxuLVx0XHRcdC52YWx1ZSA9IC0xLFxuLVx0XHR9LFxuLVx0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10gPSB7XG4tXHRcdFx0Lm5hbWUgPSBcJiMzNDttaWNyb2NoaXAsaW8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcJiMzNDssXG4tXHRcdFx0Lm9mZnNldCA9IDAsIC8qIGRvbiYjMzk7dCBjYXJlICovXG4tXHRcdFx0LnZhbHVlID0gLTEsXG4tXHRcdH0sXG4tXHR9O1xuLVx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZTtcbi1cdGJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlO1xuLVx0aW50IGksIHJldDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgb2ZfcHJvcHNbaV0ubmFtZSxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2b2ZfcHJvcHNbaV0udmFsdWUpO1xuLVx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTClcbi1cdFx0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhZCAlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdCBvZl9wcm9wc1tpXS5uYW1lKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aGF2ZV9hbnlfcHJvcCA9IHRydWU7XG4tXHR9XG4tXG4tXHRpZiAoIWhhdmVfYW55X3Byb3ApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0c3dpdGNoIChkZXYtXHUwMDNlY2hpcF9pZCkge1xuLVx0Y2FzZSBLU1o4OFgzX0NISVBfSUQ6XG4tXHRcdHJldHVybiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKGRldiwgb2ZfcHJvcHMsXG4tXHRcdFx0XHRcdFx0ICAgIEFSUkFZX1NJWkUob2ZfcHJvcHMpKTtcbi1cdGNhc2UgS1NaODc5NV9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4Nzk0X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk0NzdfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o5NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk4OTNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTg5Nl9DSElQX0lEOlxuLVx0Y2FzZSBLU1o5ODk3X0NISVBfSUQ6XG4tXHRjYXNlIExBTjk2NDZfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIGtzejk0NzdfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcyxcbi1cdFx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShvZl9wcm9wcykpO1xuLVx0ZGVmYXVsdDpcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0aWYgKG9mX3Byb3BzW2ldLnZhbHVlID09IC0xKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0ZGV2X3dhcm4oZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgdmFyaWFudFxcblwmIzM0Oyxcbi1cdFx0XHRcdCBvZl9wcm9wc1tpXS5uYW1lKTtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbnQga3N6ODQ2M19jb25maWd1cmVfc3RyYXBzX3NwaShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBwaW5jdHJsICpwaW5jdHJsO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbmluZGV4IGI0YTU2NzNiYTM2NWNiLi5hY2FmNzBlNmYzOTNjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kYXRhL21pY3JvY2hpcC1rc3ouaFx1MDAzZVxuIFxuQEAgLTQwLDYgJiM0Mzs0MSw0NSBAQCBzdHJ1Y3Qgdmxhbl90YWJsZSB7XG4gXHR1MzIgdGFibGVbM107XG4gfTtcbiBcbiYjNDM7c3RydWN0IGtzel9zdGF0c19yYXcge1xuJiM0MztcdHU2NCByeF9oaTtcbiYjNDM7XHR1NjQgcnhfdW5kZXJzaXplO1xuJiM0MztcdHU2NCByeF9mcmFnbWVudHM7XG4mIzQzO1x0dTY0IHJ4X292ZXJzaXplO1xuJiM0MztcdHU2NCByeF9qYWJiZXJzO1xuJiM0MztcdHU2NCByeF9zeW1ib2xfZXJyO1xuJiM0MztcdHU2NCByeF9jcmNfZXJyO1xuJiM0MztcdHU2NCByeF9hbGlnbl9lcnI7XG4mIzQzO1x0dTY0IHJ4X21hY19jdHJsO1xuJiM0MztcdHU2NCByeF9wYXVzZTtcbiYjNDM7XHR1NjQgcnhfYmNhc3Q7XG4mIzQzO1x0dTY0IHJ4X21jYXN0O1xuJiM0MztcdHU2NCByeF91Y2FzdDtcbiYjNDM7XHR1NjQgcnhfNjRfb3JfbGVzcztcbiYjNDM7XHR1NjQgcnhfNjVfMTI3O1xuJiM0MztcdHU2NCByeF8xMjhfMjU1O1xuJiM0MztcdHU2NCByeF8yNTZfNTExO1xuJiM0MztcdHU2NCByeF81MTJfMTAyMztcbiYjNDM7XHR1NjQgcnhfMTAyNF8xNTIyO1xuJiM0MztcdHU2NCByeF8xNTIzXzIwMDA7XG4mIzQzO1x0dTY0IHJ4XzIwMDE7XG4mIzQzO1x0dTY0IHR4X2hpO1xuJiM0MztcdHU2NCB0eF9sYXRlX2NvbDtcbiYjNDM7XHR1NjQgdHhfcGF1c2U7XG4mIzQzO1x0dTY0IHR4X2JjYXN0O1xuJiM0MztcdHU2NCB0eF9tY2FzdDtcbiYjNDM7XHR1NjQgdHhfdWNhc3Q7XG4mIzQzO1x0dTY0IHR4X2RlZmVycmVkO1xuJiM0MztcdHU2NCB0eF90b3RhbF9jb2w7XG4mIzQzO1x0dTY0IHR4X2V4Y19jb2w7XG4mIzQzO1x0dTY0IHR4X3NpbmdsZV9jb2w7XG4mIzQzO1x0dTY0IHR4X211bHRfY29sO1xuJiM0MztcdHU2NCByeF90b3RhbDtcbiYjNDM7XHR1NjQgdHhfdG90YWw7XG4mIzQzO1x0dTY0IHJ4X2Rpc2NhcmRzO1xuJiM0MztcdHU2NCB0eF9kaXNjYXJkcztcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGtzel9wb3J0X21pYiB7XG4gXHRzdHJ1Y3QgbXV0ZXggY250X211dGV4O1x0XHQvKiBzdHJ1Y3R1cmUgYWNjZXNzICovXG4gXHR1OCBjbnRfcHRyO1xuQEAgLTM5MywxMiAmIzQzOzQzMyw4IEBAIGludCBrc3pfc3dpdGNoX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4gXG4gdm9pZCBrc3pfaW5pdF9taWJfdGltZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG4tYm9vbCBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KTtcbiB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcbi12b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4gdm9pZCBrc3pfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKTtcbi1ib29sIGtzel9nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4tcGh5X2ludGVyZmFjZV90IGtzel9nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBnYml0KTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdO1xuIGludCBrc3pfc3dpdGNoX21hY2FkZHJfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbkBAIC00NDMsMTEgJiM0Mzs0NzksMTUgQEAgdm9pZCBrc3pfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSxcbiBcdFx0XHQgICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7XG4gXG4taW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpO1xuLVxuIGludCBrc3pfc2V0X21hY19lZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpO1xuIFxuJiM0MztpbnQga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwLFxuJiM0MztcdFx0XHQgIGludCBiYW5kKTtcbiYjNDM7aW50IGtzel9zZXR1cF90Y19jYnMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdCAgICAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpO1xuJiM0MztpbnQga3N6X3RjX2V0c192YWxpZGF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApO1xuIGludCBrc3pfc2V0dXBfdGMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0IGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLCB2b2lkICp0eXBlX2RhdGEpO1xuIFxuQEAgLTQ3MSw4ICYjNDM7NTExLDM3IEBAIGludCBrc3pfbWRpb19yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcCk7XG4gaW50IGtzel9naXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6X2lycV9mcmVlKHN0cnVjdCBrc3pfaXJxICpraXJxKTtcbi1pbnQga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuLWludCBrc3o5NDc3X3NldF9kZWZhdWx0X3ByaW9fcXVldWVfbWFwcGluZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIHtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0MztcdGludCBvZmZzZXQ7XG4mIzQzO1x0aW50IHZhbHVlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSBrc3pfZHJpdmVyX3N0cmVuZ3RoX3R5cGUge1xuJiM0MztcdEtTWl9EUklWRVJfU1RSRU5HVEhfSEksXG4mIzQzO1x0S1NaX0RSSVZFUl9TVFJFTkdUSF9MTyxcbiYjNDM7XHRLU1pfRFJJVkVSX1NUUkVOR1RIX0lPLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggLSBkcml2ZSBzdHJlbmd0aCBtYXBwaW5nXG4mIzQzOyAqIEByZWdfdmFsOlx0cmVnaXN0ZXIgdmFsdWVcbiYjNDM7ICogQG1pY3JvYW1wOlx0bWljcm9hbXAgdmFsdWVcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgge1xuJiM0MztcdHUzMiByZWdfdmFsO1xuJiM0MztcdHUzMiBtaWNyb2FtcDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3ZvaWQga3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuJiM0MztcdFx0XHQgICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKTtcbiYjNDM7aW50IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXG4mIzQzO1x0XHRcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApO1xuJiM0MztpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4mIzQzO1x0XHRcdCAgICAgaW50IG51bV9wcm9wcyk7XG4gXG4gLyogQ29tbW9uIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMgKi9cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWdtYXAgKmtzel9yZWdtYXBfOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5pbmRleCA4ZWI1MzM3YjBjMTAyZS4uODZjZTNhODY3MDVmOTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5AQCAtNzg3LDEwICYjNDM7Nzg3LDYgQEAgc3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdC8qIHNldCBicm9hZGNhc3Qgc3Rvcm0gcHJvdGVjdGlvbiAxMCUgcmF0ZSAqL1xuIFx0c3Rvcm1fbWFzayA9IEJST0FEQ0FTVF9TVE9STV9SQVRFO1xuIFx0c3Rvcm1fcmF0ZSA9IChCUk9BRENBU1RfU1RPUk1fVkFMVUUgKiBCUk9BRENBU1RfU1RPUk1fUFJPVF9SQVRFKSAvIDEwMDtcbkBAIC05ODMsNyAmIzQzOzk3OSw3IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBsYW45Mzd4X3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3N0YXRzNjRcdFx0PSBrc3pfZ2V0X3N0YXRzNjQsXG4gXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IGtzel9nZXRfcGF1c2Vfc3RhdHMsXG4gXHQucG9ydF9jaGFuZ2VfbXR1XHQ9IGxhbjkzN3hfY2hhbmdlX210dSxcbi1cdC5wb3J0X21heF9tdHVcdFx0PSBrc3pfbWF4X210dSxcbiYjNDM7XHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6OTQ3N19tYXhfbXR1LFxuIFx0LnN1c3BlbmRcdFx0PSBrc3pfc3VzcGVuZCxcbiBcdC5yZXN1bWVcdFx0XHQ9IGtzel9yZXN1bWUsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBrc3pfZ2V0X3RzX2luZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBNaWNyb2NoaXAgS1NaIERTQSBkcml2ZXIuIEl0IG1vdmVzIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb25zIChsaWtlIE1UVSBjb25maWd1cmF0aW9uLCBUQyBzZXR1cCwgTUlCIHN0YXRzIHJlYWRpbmcsIGFuZCBkcml2ZSBzdHJlbmd0aCBwYXJzaW5nKSBmcm9tIHRoZSBjb21tb24gYGtzel9jb21tb24uY2AgZmlsZSB0byB0aGVpciByZXNwZWN0aXZlIGNoaXAtc3BlY2lmaWMgZmlsZXMgKGBrc3o4LmNgIGFuZCBga3N6OTQ3Ny5jYCkuIEl0IGFsc28gcmVtb3ZlcyBhIG5vLW9wIGNhbGwgdG8gYGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aGAgaW4gYGxhbjkzN3hfbWFpbi5jYCB3aGljaCBvbmx5IHByaW50ZWQgd2FybmluZ3MgZm9yIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMuIE5vIG5ldyBmdW5jdGlvbmFsIGxvZ2ljIG9yIHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDZlZGJiZDhmYWI5MTA1YjFhYmEwZjZmOTQxN2Y1NDc5NDc2YTc5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMTM6NTY6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jCmluZGV4IDU4NjkxNjU3MGE4NDFiLi5jNGM3NjkwMjhhMjBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKQEAgLTM2LDYgJiM0MzszNiw1MiBAQAogI2luY2x1ZGUgJiMzNDtrc3o4X3JlZy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3N6OC5oJiMzNDsKIAomIzQzOy8qIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaODg2MywgS1NaODg3MywgLi4KJiM0MzsgKgkJCSAgICAgdmFyaWFudHMuCiYjNDM7ICogVGhpcyB2YWx1ZXMgYXJlIGRvY3VtZW50ZWQgaW4gS1NaODg3MyBhbmQgS1NaODg2MyBkYXRhc2hlZXRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7CiYjNDM7CXsgMCwgIDgwMDAgfSwKJiM0MzsJeyBLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIDE2MDAwIH0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgewomIzQzOwl1NjQgcng7CiYjNDM7CXU2NCByeF9oaTsKJiM0MzsJdTY0IHJ4X3VuZGVyc2l6ZTsKJiM0MzsJdTY0IHJ4X2ZyYWdtZW50czsKJiM0MzsJdTY0IHJ4X292ZXJzaXplOwomIzQzOwl1NjQgcnhfamFiYmVyczsKJiM0MzsJdTY0IHJ4X3N5bWJvbF9lcnI7CiYjNDM7CXU2NCByeF9jcmNfZXJyOwomIzQzOwl1NjQgcnhfYWxpZ25fZXJyOwomIzQzOwl1NjQgcnhfbWFjX2N0cmw7CiYjNDM7CXU2NCByeF9wYXVzZTsKJiM0MzsJdTY0IHJ4X2JjYXN0OwomIzQzOwl1NjQgcnhfbWNhc3Q7CiYjNDM7CXU2NCByeF91Y2FzdDsKJiM0MzsJdTY0IHJ4XzY0X29yX2xlc3M7CiYjNDM7CXU2NCByeF82NV8xMjc7CiYjNDM7CXU2NCByeF8xMjhfMjU1OwomIzQzOwl1NjQgcnhfMjU2XzUxMTsKJiM0MzsJdTY0IHJ4XzUxMl8xMDIzOwomIzQzOwl1NjQgcnhfMTAyNF8xNTIyOwomIzQzOwl1NjQgdHg7CiYjNDM7CXU2NCB0eF9oaTsKJiM0MzsJdTY0IHR4X2xhdGVfY29sOwomIzQzOwl1NjQgdHhfcGF1c2U7CiYjNDM7CXU2NCB0eF9iY2FzdDsKJiM0MzsJdTY0IHR4X21jYXN0OwomIzQzOwl1NjQgdHhfdWNhc3Q7CiYjNDM7CXU2NCB0eF9kZWZlcnJlZDsKJiM0MzsJdTY0IHR4X3RvdGFsX2NvbDsKJiM0MzsJdTY0IHR4X2V4Y19jb2w7CiYjNDM7CXU2NCB0eF9zaW5nbGVfY29sOwomIzQzOwl1NjQgdHhfbXVsdF9jb2w7CiYjNDM7CXU2NCByeF9kaXNjYXJkczsKJiM0MzsJdTY0IHR4X2Rpc2NhcmRzOwomIzQzO307CiYjNDM7CiBzdGF0aWMgdm9pZCBrc3pfY2ZnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1OCBiaXRzLCBib29sIHNldCkKIHsKIAlrc3pfcm13OChkZXYsIGFkZHIsIGJpdHMsIHNldCA/IGJpdHMgOiAwKTsKQEAgLTE1OCwxMCAmIzQzOzIwNCwxNyBAQCBzdGF0aWMgaW50IGtzejhfcmVzZXRfc3dpdGNoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQga3N6ODg2M19jaGFuZ2VfbXR1KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBmcmFtZV9zaXplKQomIzQzO3N0YXRpYyBpbnQga3N6ODh4eF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBtdHUpCiB7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJaW50IGZyYW1lX3NpemU7CiAJdTggY3RybDIgPSAwOwogCiYjNDM7CWlmICghZHNhX2lzX2NwdV9wb3J0KGRldi0mZ3Q7ZHMsIHBvcnQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZyYW1lX3NpemUgPSBtdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTjsKJiM0MzsKIAlpZiAoZnJhbWVfc2l6ZSAmbHQ7PSBLU1o4X0xFR0FMX1BBQ0tFVF9TSVpFKQogCQljdHJsMiB8PSBLU1o4ODYzX0xFR0FMX1BBQ0tFVF9FTkFCTEU7CiAJZWxzZSBpZiAoZnJhbWVfc2l6ZSAmZ3Q7IEtTWjg4NjNfTk9STUFMX1BBQ0tFVF9TSVpFKQpAQCAtMTcxLDExICYjNDM7MjI0LDE4IEBAIHN0YXRpYyBpbnQga3N6ODg2M19jaGFuZ2VfbXR1KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBmcmFtZV9zaXplKQogCQkJS1NaODg2M19IVUdFX1BBQ0tFVF9FTkFCTEUsIGN0cmwyKTsKIH0KIAotc3RhdGljIGludCBrc3o4Nzk1X2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpCiYjNDM7c3RhdGljIGludCBrc3o4N3h4X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG10dSkKIHsKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwogCXU4IGN0cmwxID0gMCwgY3RybDIgPSAwOwomIzQzOwl1MTYgZnJhbWVfc2l6ZTsKIAlpbnQgcmV0OwogCiYjNDM7CWlmICghZHNhX2lzX2NwdV9wb3J0KGRldi0mZ3Q7ZHMsIHBvcnQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZyYW1lX3NpemUgPSBtdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTjsKJiM0MzsKIAlpZiAoZnJhbWVfc2l6ZSAmZ3Q7IEtTWjhfTEVHQUxfUEFDS0VUX1NJWkUpCiAJCWN0cmwyIHw9IFNXX0xFR0FMX1BBQ0tFVF9ESVNBQkxFOwogCWlmIChmcmFtZV9zaXplICZndDsgS1NaODg2M19OT1JNQUxfUEFDS0VUX1NJWkUpCkBAIC0xODgsMjkgJiM0MzsyNDgsMTQgQEAgc3RhdGljIGludCBrc3o4Nzk1X2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpCiAJcmV0dXJuIGtzel9ybXc4KGRldiwgUkVHX1NXX0NUUkxfMiwgU1dfTEVHQUxfUEFDS0VUX0RJU0FCTEUsIGN0cmwyKTsKIH0KIAotc3RhdGljIGludCBrc3o4X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG10dSkKJiM0MztzdGF0aWMgaW50IGtzejg3eHhfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQogewotCXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKLQl1MTYgZnJhbWVfc2l6ZTsKLQotCWlmICghZHNhX2lzX2NwdV9wb3J0KGRldi0mZ3Q7ZHMsIHBvcnQpKQotCQlyZXR1cm4gMDsKLQotCWZyYW1lX3NpemUgPSBtdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBFVEhfRkNTX0xFTjsKLQotCXN3aXRjaCAoZGV2LSZndDtjaGlwX2lkKSB7Ci0JY2FzZSBLU1o4Nzk1X0NISVBfSUQ6Ci0JY2FzZSBLU1o4Nzk0X0NISVBfSUQ6Ci0JY2FzZSBLU1o4NzY1X0NISVBfSUQ6Ci0JCXJldHVybiBrc3o4Nzk1X2NoYW5nZV9tdHUoZGV2LCBmcmFtZV9zaXplKTsKLQljYXNlIEtTWjg0NjNfQ0hJUF9JRDoKLQljYXNlIEtTWjg4WDNfQ0hJUF9JRDoKLQljYXNlIEtTWjg4NjRfQ0hJUF9JRDoKLQljYXNlIEtTWjg4OTVfQ0hJUF9JRDoKLQkJcmV0dXJuIGtzejg4NjNfY2hhbmdlX210dShkZXYsIGZyYW1lX3NpemUpOwotCX0KJiM0MzsJcmV0dXJuIEtTWjg3OTVfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjsKJiM0Mzt9CiAKLQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7c3RhdGljIGludCBrc3o4OHh4X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CXJldHVybiBLU1o4ODYzX0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47CiB9CiAKIHN0YXRpYyBpbnQga3N6OF9wb3J0X3F1ZXVlX3NwbGl0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBpbnQgcXVldWVzKQpAQCAtMTc0Niw2ICYjNDM7MTc5MSwxNTkgQEAgc3RhdGljIHZvaWQga3N6OF9wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCSAgICAgUE9SVF9NSVJST1JfU05JRkZFUiwgZmFsc2UpOwogfQogCiYjNDM7c3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKQomIzQzO3sKJiM0MzsJdTggcmVnOwomIzQzOwomIzQzOwlyZWcgPSAweEM4ICYjNDM7IHBvcnQgKiA0OwomIzQzOwlyZWcgJiM0Mzs9ICgoMyAtIHF1ZXVlKSAvIDIpICogMjsKJiM0MzsJcmVnJiM0MzsmIzQzOzsKJiM0MzsJcmVnIC09IChxdWV1ZSAmYW1wOyAxKTsKJiM0MzsJcmV0dXJuIHJlZzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICoga3N6ODh4M190Y19ldHNfYWRkIC0gQ29uZmlndXJlIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBwb3J0IG9uIEtTWjg4eDMgc3dpdGNoCiYjNDM7ICogQGRldjogUG9pbnRlciB0byB0aGUgS1NaIHN3aXRjaCBkZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGNvbmZpZ3VyZQomIzQzOyAqIEBwOiBQb2ludGVyIHRvIG9mZmxvYWQgcmVwbGFjZSBwYXJhbWV0ZXJzIGRlc2NyaWJpbmcgRVRTIGJhbmRzIGFuZCBtYXBwaW5nCiYjNDM7ICoKJiM0MzsgKiBUaGUgS1NaODh4MyBzdXBwb3J0cyB0d28gc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IGFuZAomIzQzOyAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKS4gQm90aCBtb2RlcyBoYXZlIGZpeGVkIGJlaGF2aW9yOgomIzQzOyAqICAgLSBObyBjb25maWd1cmFibGUgcXVldWUtdG8tcHJpb3JpdHkgbWFwcGluZwomIzQzOyAqICAgLSBObyB3ZWlnaHQgYWRqdXN0bWVudCBpbiBXRlEgbW9kZQomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBzd2l0Y2ggdG8gdXNlIHN0cmljdCBwcmlvcml0eSBtb2RlIGJ5CiYjNDM7ICogY2xlYXJpbmcgdGhlIFdGUSBlbmFibGUgYml0IGZvciBhbGwgcXVldWVzIGFzc29jaWF0ZWQgd2l0aCBFVFMgYmFuZHMuCiYjNDM7ICogSWYgc3RyaWN0IHByaW9yaXR5IGlzIG5vdCBleHBsaWNpdGx5IHJlcXVlc3RlZCwgdGhlIHN3aXRjaCB3aWxsIGRlZmF1bHQKJiM0MzsgKiB0byBXRlEgbW9kZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfYWRkKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAomIzQzOwkJCSAgICAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKQomIzQzO3sKJiM0MzsJaW50IHJldCwgYmFuZDsKJiM0MzsKJiM0MzsJLyogT25seSBzdHJpY3QgcHJpb3JpdHkgbW9kZSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KJiM0MzsJICogV0ZRIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkLgomIzQzOwkgKi8KJiM0MzsJZm9yIChiYW5kID0gMDsgYmFuZCAmbHQ7IHAtJmd0O2JhbmRzOyBiYW5kJiM0MzsmIzQzOykgewomIzQzOwkJaW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpOwomIzQzOwkJdTggcmVnOwomIzQzOwomIzQzOwkJLyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXMKJiM0MzsJCSAqIHBvcnQvcXVldWUKJiM0MzsJCSAqLwomIzQzOwkJcmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpOwomIzQzOwkJaWYgKGtzel9pc19rc3o4NDYzKGRldikpCiYjNDM7CQkJcmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTsKJiM0MzsKJiM0MzsJCS8qIENsZWFyIFdGUSBlbmFibGUgYml0IHRvIHNlbGVjdCBzdHJpY3QgcHJpb3JpdHkgc2NoZWR1bGluZyAqLwomIzQzOwkJcmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsIDApOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBrc3o4OHgzX3RjX2V0c19kZWwgLSBSZXNldCBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pIGNvbmZpZwomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2gKJiM0MzsgKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBLU1ogc3dpdGNoIGRldmljZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gcmVzZXQKJiM0MzsgKgomIzQzOyAqIFRoZSBLU1o4OHgzIHN1cHBvcnRzIG9ubHkgZml4ZWQgc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IG9yCiYjNDM7ICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLCB3aXRoIG5vIHJlY29uZmlndXJhdGlvbiBvZiB3ZWlnaHRzIG9yCiYjNDM7ICogcXVldWUgbWFwcGluZy4gVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIHBvcnTigJlzIHNjaGVkdWxpbmcgbW9kZSB0bwomIzQzOyAqIHRoZSBkZWZhdWx0LCB3aGljaCBpcyBXRlEsIGJ5IGVuYWJsaW5nIHRoZSBXRlEgYml0IGZvciBhbGwgcXVldWVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19kZWwoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlpbnQgcmV0LCBxdWV1ZTsKJiM0MzsKJiM0MzsJLyogSXRlcmF0ZSBvdmVyIGFsbCB0cmFuc21pdCBxdWV1ZXMgZm9yIHRoaXMgcG9ydCAqLwomIzQzOwlmb3IgKHF1ZXVlID0gMDsgcXVldWUgJmx0OyBkZXYtJmd0O2luZm8tJmd0O251bV90eF9xdWV1ZXM7IHF1ZXVlJiM0MzsmIzQzOykgewomIzQzOwkJdTggcmVnOwomIzQzOwomIzQzOwkJLyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXMKJiM0MzsJCSAqIHBvcnQvcXVldWUKJiM0MzsJCSAqLwomIzQzOwkJcmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpOwomIzQzOwkJaWYgKGtzel9pc19rc3o4NDYzKGRldikpCiYjNDM7CQkJcmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTsKJiM0MzsKJiM0MzsJCS8qIFNldCBXRlEgZW5hYmxlIGJpdCB0byByZXZlcnQgYmFjayB0byBkZWZhdWx0IHNjaGVkdWxpbmcKJiM0MzsJCSAqIG1vZGUKJiM0MzsJCSAqLwomIzQzOwkJcmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsCiYjNDM7CQkJICAgICAgIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejhfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJCSAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIShrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlpZiAocW9wdC0mZ3Q7cGFyZW50ICE9IFRDX0hfUk9PVCkgewomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtQYXJlbnQgc2hvdWxkIGJlIFwmIzM0O3Jvb3RcJiMzNDtcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKHFvcHQtJmd0O2NvbW1hbmQpIHsKJiM0MzsJY2FzZSBUQ19FVFNfUkVQTEFDRToKJiM0MzsJCXJldCA9IGtzel90Y19ldHNfdmFsaWRhdGUoZGV2LCBwb3J0LCAmYW1wO3FvcHQtJmd0O3JlcGxhY2VfcGFyYW1zKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldHVybiBrc3o4OHgzX3RjX2V0c19hZGQoZGV2LCBwb3J0LCAmYW1wO3FvcHQtJmd0O3JlcGxhY2VfcGFyYW1zKTsKJiM0MzsJY2FzZSBUQ19FVFNfREVTVFJPWToKJiM0MzsJCXJldHVybiBrc3o4OHgzX3RjX2V0c19kZWwoZGV2LCBwb3J0KTsKJiM0MzsJY2FzZSBUQ19FVFNfU1RBVFM6CiYjNDM7CWNhc2UgVENfRVRTX0dSQUZUOgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrc3o4N3h4X3NldHVwX3RjKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiYjNDM7CQkJICAgIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLCB2b2lkICp0eXBlX2RhdGEpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6CiYjNDM7CQlyZXR1cm4ga3N6X3NldHVwX3RjX2NicyhkcywgcG9ydCwgdHlwZV9kYXRhKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejhfc2V0dXBfdGMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX0NCUzoKJiM0MzsJCXJldHVybiBrc3pfc2V0dXBfdGNfY2JzKGRzLCBwb3J0LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX0VUUzoKJiM0MzsJCXJldHVybiBrc3o4X3RjX3NldHVwX3FkaXNjX2V0cyhkcywgcG9ydCwgdHlwZV9kYXRhKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGtzejg3OTVfY3B1X2ludGVyZmFjZV9zZWxlY3Qoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiB7CiAJc3RydWN0IGtzel9wb3J0ICpwID0gJmFtcDtkZXYtJmd0O3BvcnRzW3BvcnRdOwpAQCAtMjA1Myw2ICYjNDM7MjI1MSwxNzEgQEAgc3RhdGljIGludCBrc3o4X2VuYWJsZV9zdHBfYWRkcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQogCXJldHVybiBrc3o4X3dfc3RhX21hY190YWJsZShkZXYsIDAsICZhbXA7YWx1KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwc3RhdHM7CiYjNDM7CXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHM7CiYjNDM7CXN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyAqcmF3OwomIzQzOwlzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7CiYjNDM7CiYjNDM7CW1pYiA9ICZhbXA7ZGV2LSZndDtwb3J0c1twb3J0XS5taWI7CiYjNDM7CXN0YXRzID0gJmFtcDttaWItJmd0O3N0YXRzNjQ7CiYjNDM7CXBzdGF0cyA9ICZhbXA7bWliLSZndDtwYXVzZV9zdGF0czsKJiM0MzsJcmF3ID0gKHN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyAqKW1pYi0mZ3Q7Y291bnRlcnM7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO21pYi0mZ3Q7c3RhdHM2NF9sb2NrKTsKJiM0MzsKJiM0MzsJc3RhdHMtJmd0O3J4X3BhY2tldHMgPSByYXctJmd0O3J4X2JjYXN0ICYjNDM7IHJhdy0mZ3Q7cnhfbWNhc3QgJiM0MzsgcmF3LSZndDtyeF91Y2FzdCAmIzQzOwomIzQzOwkJcmF3LSZndDtyeF9wYXVzZTsKJiM0MzsJc3RhdHMtJmd0O3R4X3BhY2tldHMgPSByYXctJmd0O3R4X2JjYXN0ICYjNDM7IHJhdy0mZ3Q7dHhfbWNhc3QgJiM0MzsgcmF3LSZndDt0eF91Y2FzdCAmIzQzOwomIzQzOwkJcmF3LSZndDt0eF9wYXVzZTsKJiM0MzsKJiM0MzsJLyogSFcgY291bnRlcnMgYXJlIGNvdW50aW5nIGJ5dGVzICYjNDM7IEZDUyB3aGljaCBpcyBub3QgYWNjZXB0YWJsZQomIzQzOwkgKiBmb3IgcnRubF9saW5rX3N0YXRzNjQgaW50ZXJmYWNlCiYjNDM7CSAqLwomIzQzOwlzdGF0cy0mZ3Q7cnhfYnl0ZXMgPSByYXctJmd0O3J4ICYjNDM7IHJhdy0mZ3Q7cnhfaGkgLSBzdGF0cy0mZ3Q7cnhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOOwomIzQzOwlzdGF0cy0mZ3Q7dHhfYnl0ZXMgPSByYXctJmd0O3R4ICYjNDM7IHJhdy0mZ3Q7dHhfaGkgLSBzdGF0cy0mZ3Q7dHhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOOwomIzQzOwomIzQzOwlzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9ycyA9IHJhdy0mZ3Q7cnhfdW5kZXJzaXplICYjNDM7IHJhdy0mZ3Q7cnhfZnJhZ21lbnRzICYjNDM7CiYjNDM7CQlyYXctJmd0O3J4X292ZXJzaXplOwomIzQzOwomIzQzOwlzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyA9IHJhdy0mZ3Q7cnhfY3JjX2VycjsKJiM0MzsJc3RhdHMtJmd0O3J4X2ZyYW1lX2Vycm9ycyA9IHJhdy0mZ3Q7cnhfYWxpZ25fZXJyOwomIzQzOwlzdGF0cy0mZ3Q7cnhfZHJvcHBlZCA9IHJhdy0mZ3Q7cnhfZGlzY2FyZHM7CiYjNDM7CXN0YXRzLSZndDtyeF9lcnJvcnMgPSBzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9ycyAmIzQzOyBzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyAmIzQzOwomIzQzOwkJc3RhdHMtJmd0O3J4X2ZyYW1lX2Vycm9ycyAgJiM0Mzsgc3RhdHMtJmd0O3J4X2Ryb3BwZWQ7CiYjNDM7CiYjNDM7CXN0YXRzLSZndDt0eF93aW5kb3dfZXJyb3JzID0gcmF3LSZndDt0eF9sYXRlX2NvbDsKJiM0MzsJc3RhdHMtJmd0O3R4X2ZpZm9fZXJyb3JzID0gcmF3LSZndDt0eF9kaXNjYXJkczsKJiM0MzsJc3RhdHMtJmd0O3R4X2Fib3J0ZWRfZXJyb3JzID0gcmF3LSZndDt0eF9leGNfY29sOwomIzQzOwlzdGF0cy0mZ3Q7dHhfZXJyb3JzID0gc3RhdHMtJmd0O3R4X3dpbmRvd19lcnJvcnMgJiM0Mzsgc3RhdHMtJmd0O3R4X2ZpZm9fZXJyb3JzICYjNDM7CiYjNDM7CQlzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnM7CiYjNDM7CiYjNDM7CXN0YXRzLSZndDttdWx0aWNhc3QgPSByYXctJmd0O3J4X21jYXN0OwomIzQzOwlzdGF0cy0mZ3Q7Y29sbGlzaW9ucyA9IHJhdy0mZ3Q7dHhfdG90YWxfY29sOwomIzQzOwomIzQzOwlwc3RhdHMtJmd0O3R4X3BhdXNlX2ZyYW1lcyA9IHJhdy0mZ3Q7dHhfcGF1c2U7CiYjNDM7CXBzdGF0cy0mZ3Q7cnhfcGF1c2VfZnJhbWVzID0gcmF3LSZndDtyeF9wYXVzZTsKJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDttaWItJmd0O3N0YXRzNjRfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbiBmb3IKJiM0MzsgKgkJCQkgICAgS1NaODg2MyBjb21wYXRpYmxlIGNoaXAgdmFyaWFudHMuCiYjNDM7ICogQGRldjogICAgICAga3N6IGRldmljZQomIzQzOyAqIEBwcm9wczogICAgIEFycmF5IG9mIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgdG8gYmUgc2V0CiYjNDM7ICogQG51bV9wcm9wczogTnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5CiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBzZXR0aW5ncyB0byBLU1o4OFgzIGNoaXAKJiM0MzsgKiB2YXJpYW50cyAoS1NaODg3MywgS1NaODg2MykuCiYjNDM7ICogSXQgZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbnMgYWxpZ24gd2l0aCB3aGF0IHRoZSBjaGlwIHZhcmlhbnQgc3VwcG9ydHMgYW5kCiYjNDM7ICogd2FybnMgb3IgZXJyb3JzIG91dCBvbiB1bnN1cHBvcnRlZCBzZXR0aW5ncy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkJc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsCiYjNDM7CQkJCQlpbnQgbnVtX3Byb3BzKQomIzQzO3sKJiM0MzsJc2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzKTsKJiM0MzsJaW50IG1pY3JvYW1wOwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3Byb3BzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHByb3BzW2ldLnZhbHVlID09IC0xIHx8IGkgPT0gS1NaX0RSSVZFUl9TVFJFTkdUSF9JTykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWRldl93YXJuKGRldi0mZ3Q7ZGV2LCAmIzM0OyVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcbiYjMzQ7LAomIzQzOwkJCSBwcm9wc1tpXS5uYW1lKTsKJiM0MzsJfQomIzQzOwomIzQzOwltaWNyb2FtcCA9IHByb3BzW0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dLnZhbHVlOwomIzQzOwlyZXQgPSBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzLCBhcnJheV9zaXplLAomIzQzOwkJCQkJbWljcm9hbXApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJa3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKGRldiwga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsCiYjNDM7CQkJCQkgYXJyYXlfc2l6ZSwgbWljcm9hbXApOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4ga3N6X3JtdzgoZGV2LCBLU1o4ODczX1JFR19HTE9CQUxfQ1RSTF8xMiwKJiM0MzsJCQlLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoKSAtIEV4dHJhY3QgYW5kIGFwcGx5IGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb25zCiYjNDM7ICoJCQkJIGZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy4KJiM0MzsgKiBAZGV2Oglrc3ogZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZQomIzQzOyAqIGRldmljZSB0cmVlLCB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGNoaXAgdmFyaWFudHMsIGFuZCBzZXRzCiYjNDM7ICogdGhlbSBhY2NvcmRpbmdseS4gQW4gZXJyb3Igc2hvdWxkIGJlIGNyaXRpY2FsIGhlcmUsIGFzIHRoZSBkcml2ZSBzdHJlbmd0aAomIzQzOyAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQga3N6OF9wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCBvZl9wcm9wc1tdID0gewomIzQzOwkJW0tTWl9EUklWRVJfU1RSRU5HVEhfSEldID0gewomIzQzOwkJCS5uYW1lID0gJiMzNDttaWNyb2NoaXAsaGktZHJpdmUtc3RyZW5ndGgtbWljcm9hbXAmIzM0OywKJiM0MzsJCQkub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUywKJiM0MzsJCQkudmFsdWUgPSAtMSwKJiM0MzsJCX0sCiYjNDM7CQlbS1NaX0RSSVZFUl9TVFJFTkdUSF9MT10gPSB7CiYjNDM7CQkJLm5hbWUgPSAmIzM0O21pY3JvY2hpcCxsby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcCYjMzQ7LAomIzQzOwkJCS5vZmZzZXQgPSBTV19MT19TUEVFRF9EUklWRV9TVFJFTkdUSF9TLAomIzQzOwkJCS52YWx1ZSA9IC0xLAomIzQzOwkJfSwKJiM0MzsJCVtLU1pfRFJJVkVSX1NUUkVOR1RIX0lPXSA9IHsKJiM0MzsJCQkubmFtZSA9ICYjMzQ7bWljcm9jaGlwLGlvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wJiMzNDssCiYjNDM7CQkJLm9mZnNldCA9IDAsIC8qIGRvbiYjMzk7dCBjYXJlICovCiYjNDM7CQkJLnZhbHVlID0gLTEsCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LSZndDtkZXYtJmd0O29mX25vZGU7CiYjNDM7CWJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlOwomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgb2ZfcHJvcHNbaV0ubmFtZSwKJiM0MzsJCQkJCSAgICZhbXA7b2ZfcHJvcHNbaV0udmFsdWUpOwomIzQzOwkJaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRUlOVkFMKQomIzQzOwkJCWRldl93YXJuKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkICVzXG4mIzM0OywKJiM0MzsJCQkJIG9mX3Byb3BzW2ldLm5hbWUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWhhdmVfYW55X3Byb3AgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaGF2ZV9hbnlfcHJvcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKGRldi0mZ3Q7Y2hpcF9pZCkgewomIzQzOwljYXNlIEtTWjg4WDNfQ0hJUF9JRDoKJiM0MzsJCXJldHVybiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKGRldiwgb2ZfcHJvcHMsCiYjNDM7CQkJCQkJICAgIEFSUkFZX1NJWkUob2ZfcHJvcHMpKTsKJiM0MzsJY2FzZSBLU1o4Nzk1X0NISVBfSUQ6CiYjNDM7CWNhc2UgS1NaODc5NF9DSElQX0lEOgomIzQzOwljYXNlIEtTWjg3NjVfQ0hJUF9JRDoKJiM0MzsJCXJldHVybiBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcywKJiM0MzsJCQkJCQlBUlJBWV9TSVpFKG9mX3Byb3BzKSk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkvKiBLU1o4ODY0LCBLU1o4ODk1ICovCiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKG9mX3Byb3BzW2ldLnZhbHVlID09IC0xKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlkZXZfd2FybihkZXYtJmd0O2RldiwgJiMzNDslcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XG4mIzM0OywKJiM0MzsJCQkJIG9mX3Byb3BzW2ldLm5hbWUpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwpAQCAtMjA3NSw3ICYjNDM7MjQzOCw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7CiYjNDM7CXJldCA9IGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yNTUxLDggJiM0MzsyOTE0LDggQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHsKIAkucG9ydF9taXJyb3JfZGVsCT0ga3N6OF9wb3J0X21pcnJvcl9kZWwsCiAJLmdldF9zdGF0czY0CQk9IGtzel9nZXRfc3RhdHM2NCwKIAkuZ2V0X3BhdXNlX3N0YXRzCT0ga3N6X2dldF9wYXVzZV9zdGF0cywKLQkucG9ydF9jaGFuZ2VfbXR1CT0ga3N6OF9jaGFuZ2VfbXR1LAotCS5wb3J0X21heF9tdHUJCT0ga3N6X21heF9tdHUsCiYjNDM7CS5wb3J0X2NoYW5nZV9tdHUJPSBrc3o4OHh4X2NoYW5nZV9tdHUsCiYjNDM7CS5wb3J0X21heF9tdHUJCT0ga3N6ODh4eF9tYXhfbXR1LAogCS5zdXNwZW5kCQk9IGtzel9zdXNwZW5kLAogCS5yZXN1bWUJCQk9IGtzel9yZXN1bWUsCiAJLmdldF90c19pbmZvCQk9IGtzel9nZXRfdHNfaW5mbywKQEAgLTI1NjAsNyAmIzQzOzI5MjMsNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0gewogCS5wb3J0X2h3dHN0YW1wX3NldAk9IGtzel9od3RzdGFtcF9zZXQsCiAJLnBvcnRfdHh0c3RhbXAJCT0ga3N6X3BvcnRfdHh0c3RhbXAsCiAJLnBvcnRfcnh0c3RhbXAJCT0ga3N6X3BvcnRfcnh0c3RhbXAsCi0JLnBvcnRfc2V0dXBfdGMJCT0ga3N6X3NldHVwX3RjLAomIzQzOwkucG9ydF9zZXR1cF90YwkJPSBrc3o4X3NldHVwX3RjLAogCS5wb3J0X2dldF9kZWZhdWx0X3ByaW8JPSBrc3pfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLAogCS5wb3J0X3NldF9kZWZhdWx0X3ByaW8JPSBrc3pfcG9ydF9zZXRfZGVmYXVsdF9wcmlvLAogCS5wb3J0X2dldF9kc2NwX3ByaW8JPSBrc3pfcG9ydF9nZXRfZHNjcF9wcmlvLApAQCAtMjYwMSw4ICYjNDM7Mjk2NCw4IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4N3h4X3N3aXRjaF9vcHMgPSB7CiAJLnBvcnRfbWlycm9yX2RlbAk9IGtzejhfcG9ydF9taXJyb3JfZGVsLAogCS5nZXRfc3RhdHM2NAkJPSBrc3pfZ2V0X3N0YXRzNjQsCiAJLmdldF9wYXVzZV9zdGF0cwk9IGtzel9nZXRfcGF1c2Vfc3RhdHMsCi0JLnBvcnRfY2hhbmdlX210dQk9IGtzejhfY2hhbmdlX210dSwKLQkucG9ydF9tYXhfbXR1CQk9IGtzel9tYXhfbXR1LAomIzQzOwkucG9ydF9jaGFuZ2VfbXR1CT0ga3N6ODd4eF9jaGFuZ2VfbXR1LAomIzQzOwkucG9ydF9tYXhfbXR1CQk9IGtzejg3eHhfbWF4X210dSwKIAkuc3VzcGVuZAkJPSBrc3pfc3VzcGVuZCwKIAkucmVzdW1lCQkJPSBrc3pfcmVzdW1lLAogCS5nZXRfdHNfaW5mbwkJPSBrc3pfZ2V0X3RzX2luZm8sCkBAIC0yNjEwLDcgJiM0MzsyOTczLDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg3eHhfc3dpdGNoX29wcyA9IHsKIAkucG9ydF9od3RzdGFtcF9zZXQJPSBrc3pfaHd0c3RhbXBfc2V0LAogCS5wb3J0X3R4dHN0YW1wCQk9IGtzel9wb3J0X3R4dHN0YW1wLAogCS5wb3J0X3J4dHN0YW1wCQk9IGtzel9wb3J0X3J4dHN0YW1wLAotCS5wb3J0X3NldHVwX3RjCQk9IGtzel9zZXR1cF90YywKJiM0MzsJLnBvcnRfc2V0dXBfdGMJCT0ga3N6ODd4eF9zZXR1cF90YywKIAkucG9ydF9nZXRfZGVmYXVsdF9wcmlvCT0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbywKIAkucG9ydF9zZXRfZGVmYXVsdF9wcmlvCT0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbywKIAkucG9ydF9nZXRfZHNjcF9wcmlvCT0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbywKQEAgLTI2NTIsOCAmIzQzOzMwMTUsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODh4eF9zd2l0Y2hfb3BzID0gewogCS5wb3J0X21pcnJvcl9kZWwJPSBrc3o4X3BvcnRfbWlycm9yX2RlbCwKIAkuZ2V0X3N0YXRzNjQJCT0ga3N6X2dldF9zdGF0czY0LAogCS5nZXRfcGF1c2Vfc3RhdHMJPSBrc3pfZ2V0X3BhdXNlX3N0YXRzLAotCS5wb3J0X2NoYW5nZV9tdHUJPSBrc3o4X2NoYW5nZV9tdHUsCi0JLnBvcnRfbWF4X210dQkJPSBrc3pfbWF4X210dSwKJiM0MzsJLnBvcnRfY2hhbmdlX210dQk9IGtzejg4eHhfY2hhbmdlX210dSwKJiM0MzsJLnBvcnRfbWF4X210dQkJPSBrc3o4OHh4X21heF9tdHUsCiAJLmdldF93b2wJCT0ga3N6X2dldF93b2wsCiAJLnNldF93b2wJCT0ga3N6X3NldF93b2wsCiAJLnN1c3BlbmQJCT0ga3N6X3N1c3BlbmQsCkBAIC0yNjYzLDcgJiM0MzszMDI2LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg4eHhfc3dpdGNoX29wcyA9IHsKIAkucG9ydF9od3RzdGFtcF9zZXQJPSBrc3pfaHd0c3RhbXBfc2V0LAogCS5wb3J0X3R4dHN0YW1wCQk9IGtzel9wb3J0X3R4dHN0YW1wLAogCS5wb3J0X3J4dHN0YW1wCQk9IGtzel9wb3J0X3J4dHN0YW1wLAotCS5wb3J0X3NldHVwX3RjCQk9IGtzel9zZXR1cF90YywKJiM0MzsJLnBvcnRfc2V0dXBfdGMJCT0ga3N6OF9zZXR1cF90YywKIAkucG9ydF9nZXRfZGVmYXVsdF9wcmlvCT0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbywKIAkucG9ydF9zZXRfZGVmYXVsdF9wcmlvCT0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbywKIAkucG9ydF9nZXRfZHNjcF9wcmlvCT0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMKaW5kZXggZjNmMGM5OGRmYjVhN2YuLjNlZTk5NTU0NWM1Nzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pZl9oc3IuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2RzYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvaWVlZTgwMjFxLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3N3aXRjaGRldi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2tzejk0NzdfcmVnLmgmIzM0OwpAQCAtNjAsNiAmIzQzOzYxLDExIEBAIHN0YXRpYyBpbnQga3N6OTQ3N19jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBtdHUpCiAJCQkJICBSRUdfU1dfTVRVX01BU0ssIGZyYW1lX3NpemUpOwogfQogCiYjNDM7aW50IGtzejk0NzdfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJcmV0dXJuIEtTWjk0NzdfTUFYX0ZSQU1FX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBrc3o5NDc3X3dhaXRfdmxhbl9jdHJsX3JlYWR5KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IHZhbDsKQEAgLTQ3OCw4ICYjNDM7NDg0LDggQEAgc3RhdGljIGludCBrc3o5NDc3X2hhbGZfZHVwbGV4X21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsCiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsCi0JCQkgICB1NjQgdHhfbGF0ZV9jb2wpCiYjNDM7c3RhdGljIGludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAomIzQzOwkJCQkgIHU2NCB0eF9sYXRlX2NvbCkKIHsKIAl1OCBzdGF0dXM7CiAJaW50IHJldDsKQEAgLTQ5Nyw2ICYjNDM7NTAzLDI0IEBAIGludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBrc3o5NDc3X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X3N0YXRzX3JhdyAqcmF3OwomIzQzOwlzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWtzel9yX21pYl9zdGF0czY0KGRldiwgcG9ydCk7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O2luZm8tJmd0O3BoeV9lcnJhdGFfOTQ3NyAmYW1wOyZhbXA7ICFrc3pfaXNfc2dtaWlfcG9ydChkZXYsIHBvcnQpKSB7CiYjNDM7CQltaWIgPSAmYW1wO2Rldi0mZ3Q7cG9ydHNbcG9ydF0ubWliOwomIzQzOwkJcmF3ID0gKHN0cnVjdCBrc3pfc3RhdHNfcmF3ICopbWliLSZndDtjb3VudGVyczsKJiM0MzsKJiM0MzsJCXJldCA9IGtzejk0NzdfZXJyYXRhX21vbml0b3IoZGV2LCBwb3J0LCByYXctJmd0O3R4X2xhdGVfY29sKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gbW9uaXRvciB0cmFuc21pc3Npb24gaGFsdFxuJiMzNDspOwomIzQzOwl9CiYjNDM7fTsKJiM0MzsKIHZvaWQga3N6OTQ3N19wb3J0X2luaXRfY250KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQogewogCXN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYiA9ICZhbXA7ZGV2LSZndDtwb3J0c1twb3J0XS5taWI7CkBAIC0xMTc2LDYgJiM0MzsxMjAwLDU4IEBAIHZvaWQga3N6OTQ3N19wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCSAgICAgUE9SVF9NSVJST1JfU05JRkZFUiwgZmFsc2UpOwogfQogCiYjNDM7c3RhdGljIGJvb2wga3N6OTQ3N19nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtJmd0O2luZm8tJmd0O3htaWlfY3RybDE7CiYjNDM7CWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKJiM0MzsJYm9vbCBnYml0ID0gZmFsc2U7CiYjNDM7CXU4IGRhdGE4OwomIzQzOwlib29sIHZhbDsKJiM0MzsKJiM0MzsJa3N6X3ByZWFkOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sICZhbXA7ZGF0YTgpOwomIzQzOwomIzQzOwl2YWwgPSBGSUVMRF9HRVQoUF9HTUlJXzFHQklUX00sIGRhdGE4KTsKJiM0MzsKJiM0MzsJaWYgKHZhbCA9PSBiaXR2YWxbUF9HTUlJXzFHQklUXSkKJiM0MzsJCWdiaXQgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZ2JpdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF94bWlpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAomIzQzOwkJCQkJYm9vbCBnYml0KQomIzQzO3sKJiM0MzsJY29uc3QgdTggKmJpdHZhbCA9IGRldi0mZ3Q7aW5mby0mZ3Q7eG1paV9jdHJsMTsKJiM0MzsJY29uc3QgdTE2ICpyZWdzID0gZGV2LSZndDtpbmZvLSZndDtyZWdzOwomIzQzOwlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlOwomIzQzOwl1OCBkYXRhODsKJiM0MzsJdTggdmFsOwomIzQzOwomIzQzOwlrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgJmFtcDtkYXRhOCk7CiYjNDM7CiYjNDM7CXZhbCA9IEZJRUxEX0dFVChQX01JSV9TRUxfTSwgZGF0YTgpOwomIzQzOwomIzQzOwlpZiAodmFsID09IGJpdHZhbFtQX01JSV9TRUxdKSB7CiYjNDM7CQlpZiAoZ2JpdCkKJiM0MzsJCQlpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfR01JSTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJOwomIzQzOwl9IGVsc2UgaWYgKHZhbCA9PSBiaXR2YWxbUF9STUlJX1NFTF0pIHsKJiM0MzsJCWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOwomIzQzOwkJaWYgKGRhdGE4ICZhbXA7IFBfUkdNSUlfSURfRUdfRU5BQkxFKQomIzQzOwkJCWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEOwomIzQzOwkJaWYgKGRhdGE4ICZhbXA7IFBfUkdNSUlfSURfSUdfRU5BQkxFKSB7CiYjNDM7CQkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ7CiYjNDM7CQkJaWYgKGRhdGE4ICZhbXA7IFBfUkdNSUlfSURfRUdfRU5BQkxFKQomIzQzOwkJCQlpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGludGVyZmFjZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgcGh5X2ludGVyZmFjZV90IGtzejk0NzdfZ2V0X2ludGVyZmFjZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCkKIHsKIAlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlOwpAQCAtMTE4NCw5ICYjNDM7MTI2MCw5IEBAIHN0YXRpYyBwaHlfaW50ZXJmYWNlX3Qga3N6OTQ3N19nZXRfaW50ZXJmYWNlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQogCWlmIChkZXYtJmd0O2luZm8tJmd0O2ludGVybmFsX3BoeVtwb3J0XSkKIAkJcmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTsKIAotCWdiaXQgPSBrc3pfZ2V0X2diaXQoZGV2LCBwb3J0KTsKJiM0MzsJZ2JpdCA9IGtzejk0NzdfZ2V0X2diaXQoZGV2LCBwb3J0KTsKIAotCWludGVyZmFjZSA9IGtzel9nZXRfeG1paShkZXYsIHBvcnQsIGdiaXQpOwomIzQzOwlpbnRlcmZhY2UgPSBrc3o5NDc3X2dldF94bWlpKGRldiwgcG9ydCwgZ2JpdCk7CiAKIAlyZXR1cm4gaW50ZXJmYWNlOwogfQpAQCAtMTMzNSw2ICYjNDM7MTQxMSwyOCBAQCBzdGF0aWMgdm9pZCBrc3o5NDc3X3BvcnRfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgY3B1X3BvcnQpCiAJa3N6X3B3cml0ZTgoZGV2LCBwb3J0LCByZWdzW1JFR19QT1JUX1BNRV9DVFJMXSwgMCk7CiB9CiAKJiM0MztpbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwl1MzIgcXVldWVfbWFwID0gMDsKJiM0MzsJaW50IGlwbTsKJiM0MzsKJiM0MzsJZm9yIChpcG0gPSAwOyBpcG0gJmx0OyBkZXYtJmd0O2luZm8tJmd0O251bV9pcG1zOyBpcG0mIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgcXVldWU7CiYjNDM7CiYjNDM7CQkvKiBUcmFmZmljIFR5cGUgKFRUKSBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBJbnRlcm5hbCBQcmlvcml0eQomIzQzOwkJICogTWFwIChJUE0pIGluIHRoZSBzd2l0Y2guIFRyYWZmaWMgQ2xhc3MgKFRDKSBpcwomIzQzOwkJICogY29ycmVzcG9uZGluZyB0byB0aGUgcXVldWUgaW4gdGhlIHN3aXRjaC4KJiM0MzsJCSAqLwomIzQzOwkJcXVldWUgPSBpZWVlODAyMXFfdHRfdG9fdGMoaXBtLCBkZXYtJmd0O2luZm8tJmd0O251bV90eF9xdWV1ZXMpOwomIzQzOwkJaWYgKHF1ZXVlICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcXVldWU7CiYjNDM7CiYjNDM7CQlxdWV1ZV9tYXAgfD0gcXVldWUgJmx0OyZsdDsgKGlwbSAqIEtTWjk0NzdfUE9SVF9UQ19NQVBfUyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9wd3JpdGUzMihkZXYsIHBvcnQsIEtTWjk0NzdfUE9SVF9NUklfVENfTUFQX180LCBxdWV1ZV9tYXApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6OTQ3N19kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQogewogCXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKQEAgLTE1MTcsNiAmIzQzOzE2MTUsNTggQEAgaW50IGtzejk0NzdfZW5hYmxlX3N0cF9hZGRyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBrc3o5NDc3X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKCkgLSBFeHRyYWN0IGFuZCBhcHBseSBkcml2ZSBzdHJlbmd0aAomIzQzOyAqCQkJCSAgICBjb25maWd1cmF0aW9ucyBmcm9tIGRldmljZSB0cmVlIHByb3BlcnRpZXMuCiYjNDM7ICogQGRldjoJa3N6IGRldmljZQomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgZnJvbSB0aGUKJiM0MzsgKiBkZXZpY2UgdHJlZSwgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHN1cHBvcnRlZCBjaGlwIHZhcmlhbnRzLCBhbmQgc2V0cwomIzQzOyAqIHRoZW0gYWNjb3JkaW5nbHkuIEFuIGVycm9yIHNob3VsZCBiZSBjcml0aWNhbCBoZXJlLCBhcyB0aGUgZHJpdmUgc3RyZW5ndGgKJiM0MzsgKiBzZXR0aW5ncyBhcmUgY3J1Y2lhbCBmb3IgRU1JIGNvbXBsaWFuY2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGtzejk0NzdfcGFyc2VfZHJpdmVfc3RyZW5ndGgoc3RydWN0IGtzel9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHsKJiM0MzsJCVtLU1pfRFJJVkVSX1NUUkVOR1RIX0hJXSA9IHsKJiM0MzsJCQkubmFtZSA9ICYjMzQ7bWljcm9jaGlwLGhpLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wJiMzNDssCiYjNDM7CQkJLm9mZnNldCA9IFNXX0hJX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsCiYjNDM7CQkJLnZhbHVlID0gLTEsCiYjNDM7CQl9LAomIzQzOwkJW0tTWl9EUklWRVJfU1RSRU5HVEhfTE9dID0gewomIzQzOwkJCS5uYW1lID0gJiMzNDttaWNyb2NoaXAsbG8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXAmIzM0OywKJiM0MzsJCQkub2Zmc2V0ID0gU1dfTE9fU1BFRURfRFJJVkVfU1RSRU5HVEhfUywKJiM0MzsJCQkudmFsdWUgPSAtMSwKJiM0MzsJCX0sCiYjNDM7CQlbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10gPSB7CiYjNDM7CQkJLm5hbWUgPSAmIzM0O21pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcCYjMzQ7LAomIzQzOwkJCS5vZmZzZXQgPSAwLCAvKiBkb24mIzM5O3QgY2FyZSAqLwomIzQzOwkJCS52YWx1ZSA9IC0xLAomIzQzOwkJfSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0mZ3Q7ZGV2LSZndDtvZl9ub2RlOwomIzQzOwlib29sIGhhdmVfYW55X3Byb3AgPSBmYWxzZTsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIG9mX3Byb3BzW2ldLm5hbWUsCiYjNDM7CQkJCQkgICAmYW1wO29mX3Byb3BzW2ldLnZhbHVlKTsKJiM0MzsJCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVJTlZBTCkKJiM0MzsJCQlkZXZfd2FybihkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVhZCAlc1xuJiMzNDssCiYjNDM7CQkJCSBvZl9wcm9wc1tpXS5uYW1lKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQloYXZlX2FueV9wcm9wID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWhhdmVfYW55X3Byb3ApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLCBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7CiYjNDM7fQogc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CkBAIC0xNTM5LDcgJiM0MzsxNjg5LDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoZGV2KTsKJiM0MzsJcmV0ID0ga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIwNTIsNyAmIzQzOzIyMDIsNyBAQCBjb25zdCBzdHJ1Y3Qga3N6X2Rldl9vcHMga3N6OTQ3N19kZXZfb3BzID0gewogCS5jZmdfcG9ydF9tZW1iZXIgPSBrc3o5NDc3X2NmZ19wb3J0X21lbWJlciwKIAkucl9taWJfY250ID0ga3N6OTQ3N19yX21pYl9jbnQsCiAJLnJfbWliX3BrdCA9IGtzejk0Nzdfcl9taWJfcGt0LAotCS5yX21pYl9zdGF0NjQgPSBrc3pfcl9taWJfc3RhdHM2NCwKJiM0MzsJLnJfbWliX3N0YXQ2NCA9IGtzejk0Nzdfcl9taWJfc3RhdHM2NCwKIAkuZnJlZXplX21pYiA9IGtzejk0NzdfZnJlZXplX21pYiwKIAkucG9ydF9pbml0X2NudCA9IGtzejk0NzdfcG9ydF9pbml0X2NudCwKIAkucG1lX3dyaXRlOCA9IGtzel93cml0ZTgsCkBAIC0yMDk4LDcgJiM0MzsyMjQ4LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejk0Nzdfc3dpdGNoX29wcyA9IHsKIAkuZ2V0X3N0YXRzNjQJCT0ga3N6X2dldF9zdGF0czY0LAogCS5nZXRfcGF1c2Vfc3RhdHMJPSBrc3pfZ2V0X3BhdXNlX3N0YXRzLAogCS5wb3J0X2NoYW5nZV9tdHUJPSBrc3o5NDc3X2NoYW5nZV9tdHUsCi0JLnBvcnRfbWF4X210dQkJPSBrc3pfbWF4X210dSwKJiM0MzsJLnBvcnRfbWF4X210dQkJPSBrc3o5NDc3X21heF9tdHUsCiAJLmdldF93b2wJCT0ga3N6X2dldF93b2wsCiAJLnNldF93b2wJCT0ga3N6X3NldF93b2wsCiAJLnN1c3BlbmQJCT0ga3N6X3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5oCmluZGV4IDkyYTFkODg5MjI0ZDNlLi5hODRjMDAwMDAwZTY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmgKQEAgLTIxLDYgJiM0MzsyMSw3IEBAIHZvaWQga3N6OTQ3N19mcmVlemVfbWliKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGZyZWV6ZSk7CiB2b2lkIGtzejk0NzdfcG9ydF9pbml0X2NudChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7CiBpbnQga3N6OTQ3N19wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCQkJYm9vbCBmbGFnLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzO2ludCBrc3o5NDc3X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCk7CiBpbnQga3N6OTQ3N19wb3J0X3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCQkgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbiwKIAkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKQEAgLTMxLDggJiM0MzszMiw2IEBAIGludCBrc3o5NDc3X3BvcnRfbWlycm9yX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkJICAgIGJvb2wgaW5ncmVzcywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIHZvaWQga3N6OTQ3N19wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJCSAgICAgc3RydWN0IGRzYV9tYWxsX21pcnJvcl90Y19lbnRyeSAqbWlycm9yKTsKLWludCBrc3o5NDc3X2VycmF0YV9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAotCQkJICAgdTY0IHR4X2xhdGVfY29sKTsKIGludCBrc3o5NDc3X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCSAgICAgZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKTsKIGludCBrc3o5NDc3X2ZkYl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKQEAgLTQ1LDYgJiM0Mzs0NCw3IEBAIGludCBrc3o5NDc3X21kYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfbWRiICptZGIsIHN0cnVjdCBkc2FfZGIgZGIpOwogaW50IGtzejk0NzdfZW5hYmxlX3N0cF9hZGRyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpOwogdm9pZCBrc3o5NDc3X3BvcnRfcXVldWVfc3BsaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpOwomIzQzO2ludCBrc3o5NDc3X3NldF9kZWZhdWx0X3ByaW9fcXVldWVfbWFwcGluZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7CiAKIGludCBrc3o5NDc3X3BvcnRfYWNsX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpOwogdm9pZCBrc3o5NDc3X3BvcnRfYWNsX2ZyZWUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYwppbmRleCBkMTcyNjc3OGJiNDg4ZS4uNjdhYjZkZGI5ZTUzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jCkBAIC0zNyw4MiAmIzQzOzM3LDYgQEAKIAogI2RlZmluZSBNSUJfQ09VTlRFUl9OVU0gMHgyMAogCi1zdHJ1Y3Qga3N6X3N0YXRzX3JhdyB7Ci0JdTY0IHJ4X2hpOwotCXU2NCByeF91bmRlcnNpemU7Ci0JdTY0IHJ4X2ZyYWdtZW50czsKLQl1NjQgcnhfb3ZlcnNpemU7Ci0JdTY0IHJ4X2phYmJlcnM7Ci0JdTY0IHJ4X3N5bWJvbF9lcnI7Ci0JdTY0IHJ4X2NyY19lcnI7Ci0JdTY0IHJ4X2FsaWduX2VycjsKLQl1NjQgcnhfbWFjX2N0cmw7Ci0JdTY0IHJ4X3BhdXNlOwotCXU2NCByeF9iY2FzdDsKLQl1NjQgcnhfbWNhc3Q7Ci0JdTY0IHJ4X3VjYXN0OwotCXU2NCByeF82NF9vcl9sZXNzOwotCXU2NCByeF82NV8xMjc7Ci0JdTY0IHJ4XzEyOF8yNTU7Ci0JdTY0IHJ4XzI1Nl81MTE7Ci0JdTY0IHJ4XzUxMl8xMDIzOwotCXU2NCByeF8xMDI0XzE1MjI7Ci0JdTY0IHJ4XzE1MjNfMjAwMDsKLQl1NjQgcnhfMjAwMTsKLQl1NjQgdHhfaGk7Ci0JdTY0IHR4X2xhdGVfY29sOwotCXU2NCB0eF9wYXVzZTsKLQl1NjQgdHhfYmNhc3Q7Ci0JdTY0IHR4X21jYXN0OwotCXU2NCB0eF91Y2FzdDsKLQl1NjQgdHhfZGVmZXJyZWQ7Ci0JdTY0IHR4X3RvdGFsX2NvbDsKLQl1NjQgdHhfZXhjX2NvbDsKLQl1NjQgdHhfc2luZ2xlX2NvbDsKLQl1NjQgdHhfbXVsdF9jb2w7Ci0JdTY0IHJ4X3RvdGFsOwotCXU2NCB0eF90b3RhbDsKLQl1NjQgcnhfZGlzY2FyZHM7Ci0JdTY0IHR4X2Rpc2NhcmRzOwotfTsKLQotc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3IHsKLQl1NjQgcng7Ci0JdTY0IHJ4X2hpOwotCXU2NCByeF91bmRlcnNpemU7Ci0JdTY0IHJ4X2ZyYWdtZW50czsKLQl1NjQgcnhfb3ZlcnNpemU7Ci0JdTY0IHJ4X2phYmJlcnM7Ci0JdTY0IHJ4X3N5bWJvbF9lcnI7Ci0JdTY0IHJ4X2NyY19lcnI7Ci0JdTY0IHJ4X2FsaWduX2VycjsKLQl1NjQgcnhfbWFjX2N0cmw7Ci0JdTY0IHJ4X3BhdXNlOwotCXU2NCByeF9iY2FzdDsKLQl1NjQgcnhfbWNhc3Q7Ci0JdTY0IHJ4X3VjYXN0OwotCXU2NCByeF82NF9vcl9sZXNzOwotCXU2NCByeF82NV8xMjc7Ci0JdTY0IHJ4XzEyOF8yNTU7Ci0JdTY0IHJ4XzI1Nl81MTE7Ci0JdTY0IHJ4XzUxMl8xMDIzOwotCXU2NCByeF8xMDI0XzE1MjI7Ci0JdTY0IHR4OwotCXU2NCB0eF9oaTsKLQl1NjQgdHhfbGF0ZV9jb2w7Ci0JdTY0IHR4X3BhdXNlOwotCXU2NCB0eF9iY2FzdDsKLQl1NjQgdHhfbWNhc3Q7Ci0JdTY0IHR4X3VjYXN0OwotCXU2NCB0eF9kZWZlcnJlZDsKLQl1NjQgdHhfdG90YWxfY29sOwotCXU2NCB0eF9leGNfY29sOwotCXU2NCB0eF9zaW5nbGVfY29sOwotCXU2NCB0eF9tdWx0X2NvbDsKLQl1NjQgcnhfZGlzY2FyZHM7Ci0JdTY0IHR4X2Rpc2NhcmRzOwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfbWliX25hbWVzIGtzejg4eHhfbWliX25hbWVzW10gPSB7CiAJeyAweDAwLCAmIzM0O3J4JiMzNDsgfSwKIAl7IDB4MDEsICYjMzQ7cnhfaGkmIzM0OyB9LApAQCAtMTg5LDI4ICYjNDM7MTEzLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfbWliX25hbWVzIGtzejk0NzdfbWliX25hbWVzW10gPSB7CiAJeyAweDgzLCAmIzM0O3R4X2Rpc2NhcmRzJiMzNDsgfSwKIH07CiAKLXN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50IG9mZnNldDsKLQlpbnQgdmFsdWU7Ci19OwotCi1lbnVtIGtzel9kcml2ZXJfc3RyZW5ndGhfdHlwZSB7Ci0JS1NaX0RSSVZFUl9TVFJFTkdUSF9ISSwKLQlLU1pfRFJJVkVSX1NUUkVOR1RIX0xPLAotCUtTWl9EUklWRVJfU1RSRU5HVEhfSU8sCi19OwotCi0vKioKLSAqIHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggLSBkcml2ZSBzdHJlbmd0aCBtYXBwaW5nCi0gKiBAcmVnX3ZhbDoJcmVnaXN0ZXIgdmFsdWUKLSAqIEBtaWNyb2FtcDoJbWljcm9hbXAgdmFsdWUKLSAqLwotc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCB7Ci0JdTMyIHJlZ192YWw7Ci0JdTMyIG1pY3JvYW1wOwotfTsKLQogLyoga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHMgLSBEcml2ZSBzdHJlbmd0aCBtYXBwaW5nIGZvciBLU1o5NDc3IHZhcmlhbnRzCiAgKgogICogVGhpcyB2YWx1ZXMgYXJlIG5vdCBkb2N1bWVudGVkIGluIEtTWjk0NzcgdmFyaWFudHMgYnV0IGNvbmZpcm1lZCBieQpAQCAtMjQ2LDE1ICYjNDM7MTQ4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHNbXSA9IHsKIAl7IFNXX0RSSVZFX1NUUkVOR1RIXzI4TUEsIDI4MDAwIH0sCiB9OwogCi0vKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyAtIERyaXZlIHN0cmVuZ3RoIG1hcHBpbmcgZm9yIEtTWjg4NjMsIEtTWjg4NzMsIC4uCi0gKgkJCSAgICAgdmFyaWFudHMuCi0gKiBUaGlzIHZhbHVlcyBhcmUgZG9jdW1lbnRlZCBpbiBLU1o4ODczIGFuZCBLU1o4ODYzIGRhdGFzaGVldHMuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7Ci0JeyAwLCAgODAwMCB9LAotCXsgS1NaODg3M19EUklWRV9TVFJFTkdUSF8xNk1BLCAxNjAwMCB9LAotfTsKLQogLyoqCiAgKiBrc3pfcGh5bGlua19tYWNfZGlzYWJsZV90eF9scGkoKSAtIENhbGxiYWNrIHRvIHNpZ25hbCBMUEkgc3VwcG9ydCAoRHVtbXkpCiAgKiBAY29uZmlnOiBwaHlsaW5rIGNvbmZpZyBzdHJ1Y3R1cmUKQEAgLTIwMTMsNyAmIzQzOzE5MDYsNiBAQCB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQogCXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHM7CiAJc3RydWN0IGtzel9zdGF0c19yYXcgKnJhdzsKIAlzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7Ci0JaW50IHJldDsKIAogCW1pYiA9ICZhbXA7ZGV2LSZndDtwb3J0c1twb3J0XS5taWI7CiAJc3RhdHMgPSAmYW1wO21pYi0mZ3Q7c3RhdHM2NDsKQEAgLTIwNTUsNjEgJiM0MzsxOTQ3LDYgQEAgdm9pZCBrc3pfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCkKIAlwc3RhdHMtJmd0O3J4X3BhdXNlX2ZyYW1lcyA9IHJhdy0mZ3Q7cnhfcGF1c2U7CiAKIAlzcGluX3VubG9jaygmYW1wO21pYi0mZ3Q7c3RhdHM2NF9sb2NrKTsKLQotCWlmIChkZXYtJmd0O2luZm8tJmd0O3BoeV9lcnJhdGFfOTQ3NyAmYW1wOyZhbXA7ICFrc3pfaXNfc2dtaWlfcG9ydChkZXYsIHBvcnQpKSB7Ci0JCXJldCA9IGtzejk0NzdfZXJyYXRhX21vbml0b3IoZGV2LCBwb3J0LCByYXctJmd0O3R4X2xhdGVfY29sKTsKLQkJaWYgKHJldCkKLQkJCWRldl9lcnIoZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIG1vbml0b3IgdHJhbnNtaXNzaW9uIGhhbHRcbiYjMzQ7KTsKLQl9Ci19Ci0KLXZvaWQga3N6ODh4eF9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQotewotCXN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwc3RhdHM7Ci0Jc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0czsKLQlzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKnJhdzsKLQlzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7Ci0KLQltaWIgPSAmYW1wO2Rldi0mZ3Q7cG9ydHNbcG9ydF0ubWliOwotCXN0YXRzID0gJmFtcDttaWItJmd0O3N0YXRzNjQ7Ci0JcHN0YXRzID0gJmFtcDttaWItJmd0O3BhdXNlX3N0YXRzOwotCXJhdyA9IChzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKiltaWItJmd0O2NvdW50ZXJzOwotCi0Jc3Bpbl9sb2NrKCZhbXA7bWliLSZndDtzdGF0czY0X2xvY2spOwotCi0Jc3RhdHMtJmd0O3J4X3BhY2tldHMgPSByYXctJmd0O3J4X2JjYXN0ICYjNDM7IHJhdy0mZ3Q7cnhfbWNhc3QgJiM0MzsgcmF3LSZndDtyeF91Y2FzdCAmIzQzOwotCQlyYXctJmd0O3J4X3BhdXNlOwotCXN0YXRzLSZndDt0eF9wYWNrZXRzID0gcmF3LSZndDt0eF9iY2FzdCAmIzQzOyByYXctJmd0O3R4X21jYXN0ICYjNDM7IHJhdy0mZ3Q7dHhfdWNhc3QgJiM0MzsKLQkJcmF3LSZndDt0eF9wYXVzZTsKLQotCS8qIEhXIGNvdW50ZXJzIGFyZSBjb3VudGluZyBieXRlcyAmIzQzOyBGQ1Mgd2hpY2ggaXMgbm90IGFjY2VwdGFibGUKLQkgKiBmb3IgcnRubF9saW5rX3N0YXRzNjQgaW50ZXJmYWNlCi0JICovCi0Jc3RhdHMtJmd0O3J4X2J5dGVzID0gcmF3LSZndDtyeCAmIzQzOyByYXctJmd0O3J4X2hpIC0gc3RhdHMtJmd0O3J4X3BhY2tldHMgKiBFVEhfRkNTX0xFTjsKLQlzdGF0cy0mZ3Q7dHhfYnl0ZXMgPSByYXctJmd0O3R4ICYjNDM7IHJhdy0mZ3Q7dHhfaGkgLSBzdGF0cy0mZ3Q7dHhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOOwotCi0Jc3RhdHMtJmd0O3J4X2xlbmd0aF9lcnJvcnMgPSByYXctJmd0O3J4X3VuZGVyc2l6ZSAmIzQzOyByYXctJmd0O3J4X2ZyYWdtZW50cyAmIzQzOwotCQlyYXctJmd0O3J4X292ZXJzaXplOwotCi0Jc3RhdHMtJmd0O3J4X2NyY19lcnJvcnMgPSByYXctJmd0O3J4X2NyY19lcnI7Ci0Jc3RhdHMtJmd0O3J4X2ZyYW1lX2Vycm9ycyA9IHJhdy0mZ3Q7cnhfYWxpZ25fZXJyOwotCXN0YXRzLSZndDtyeF9kcm9wcGVkID0gcmF3LSZndDtyeF9kaXNjYXJkczsKLQlzdGF0cy0mZ3Q7cnhfZXJyb3JzID0gc3RhdHMtJmd0O3J4X2xlbmd0aF9lcnJvcnMgJiM0Mzsgc3RhdHMtJmd0O3J4X2NyY19lcnJvcnMgJiM0MzsKLQkJc3RhdHMtJmd0O3J4X2ZyYW1lX2Vycm9ycyAgJiM0Mzsgc3RhdHMtJmd0O3J4X2Ryb3BwZWQ7Ci0KLQlzdGF0cy0mZ3Q7dHhfd2luZG93X2Vycm9ycyA9IHJhdy0mZ3Q7dHhfbGF0ZV9jb2w7Ci0Jc3RhdHMtJmd0O3R4X2ZpZm9fZXJyb3JzID0gcmF3LSZndDt0eF9kaXNjYXJkczsKLQlzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnMgPSByYXctJmd0O3R4X2V4Y19jb2w7Ci0Jc3RhdHMtJmd0O3R4X2Vycm9ycyA9IHN0YXRzLSZndDt0eF93aW5kb3dfZXJyb3JzICYjNDM7IHN0YXRzLSZndDt0eF9maWZvX2Vycm9ycyAmIzQzOwotCQlzdGF0cy0mZ3Q7dHhfYWJvcnRlZF9lcnJvcnM7Ci0KLQlzdGF0cy0mZ3Q7bXVsdGljYXN0ID0gcmF3LSZndDtyeF9tY2FzdDsKLQlzdGF0cy0mZ3Q7Y29sbGlzaW9ucyA9IHJhdy0mZ3Q7dHhfdG90YWxfY29sOwotCi0JcHN0YXRzLSZndDt0eF9wYXVzZV9mcmFtZXMgPSByYXctJmd0O3R4X3BhdXNlOwotCXBzdGF0cy0mZ3Q7cnhfcGF1c2VfZnJhbWVzID0gcmF3LSZndDtyeF9wYXVzZTsKLQotCXNwaW5fdW5sb2NrKCZhbXA7bWliLSZndDtzdGF0czY0X2xvY2spOwogfQogCiB2b2lkIGtzel9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LApAQCAtMjg4NSwyOCAmIzQzOzI3MjIsNiBAQCB2b2lkIGtzel9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCSAqLwogfQogCi1pbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCi17Ci0JdTMyIHF1ZXVlX21hcCA9IDA7Ci0JaW50IGlwbTsKLQotCWZvciAoaXBtID0gMDsgaXBtICZsdDsgZGV2LSZndDtpbmZvLSZndDtudW1faXBtczsgaXBtJiM0MzsmIzQzOykgewotCQlpbnQgcXVldWU7Ci0KLQkJLyogVHJhZmZpYyBUeXBlIChUVCkgaXMgY29ycmVzcG9uZGluZyB0byB0aGUgSW50ZXJuYWwgUHJpb3JpdHkKLQkJICogTWFwIChJUE0pIGluIHRoZSBzd2l0Y2guIFRyYWZmaWMgQ2xhc3MgKFRDKSBpcwotCQkgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZSBpbiB0aGUgc3dpdGNoLgotCQkgKi8KLQkJcXVldWUgPSBpZWVlODAyMXFfdHRfdG9fdGMoaXBtLCBkZXYtJmd0O2luZm8tJmd0O251bV90eF9xdWV1ZXMpOwotCQlpZiAocXVldWUgJmx0OyAwKQotCQkJcmV0dXJuIHF1ZXVlOwotCi0JCXF1ZXVlX21hcCB8PSBxdWV1ZSAmbHQ7Jmx0OyAoaXBtICogS1NaOTQ3N19QT1JUX1RDX01BUF9TKTsKLQl9Ci0KLQlyZXR1cm4ga3N6X3B3cml0ZTMyKGRldiwgcG9ydCwgS1NaOTQ3N19QT1JUX01SSV9UQ19NQVBfXzQsIHF1ZXVlX21hcCk7Ci19Ci0KIHZvaWQga3N6X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1OCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CkBAIC0yOTg0LDQwICYjNDM7Mjc5OSw2IEBAIGludCBrc3pfcG9ydF9icmlkZ2VfZmxhZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAlyZXR1cm4gMDsKIH0KIAotaW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpCi17Ci0Jc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwotCi0Jc3dpdGNoIChkZXYtJmd0O2NoaXBfaWQpIHsKLQljYXNlIEtTWjg3OTVfQ0hJUF9JRDoKLQljYXNlIEtTWjg3OTRfQ0hJUF9JRDoKLQljYXNlIEtTWjg3NjVfQ0hJUF9JRDoKLQkJcmV0dXJuIEtTWjg3OTVfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjsKLQljYXNlIEtTWjg0NjNfQ0hJUF9JRDoKLQljYXNlIEtTWjg4WDNfQ0hJUF9JRDoKLQljYXNlIEtTWjg4NjRfQ0hJUF9JRDoKLQljYXNlIEtTWjg4OTVfQ0hJUF9JRDoKLQkJcmV0dXJuIEtTWjg4NjNfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjsKLQljYXNlIEtTWjg1NjNfQ0hJUF9JRDoKLQljYXNlIEtTWjg1NjdfQ0hJUF9JRDoKLQljYXNlIEtTWjk0NzdfQ0hJUF9JRDoKLQljYXNlIEtTWjk1NjNfQ0hJUF9JRDoKLQljYXNlIEtTWjk1NjdfQ0hJUF9JRDoKLQljYXNlIEtTWjk4OTNfQ0hJUF9JRDoKLQljYXNlIEtTWjk4OTZfQ0hJUF9JRDoKLQljYXNlIEtTWjk4OTdfQ0hJUF9JRDoKLQljYXNlIExBTjkzNzBfQ0hJUF9JRDoKLQljYXNlIExBTjkzNzFfQ0hJUF9JRDoKLQljYXNlIExBTjkzNzJfQ0hJUF9JRDoKLQljYXNlIExBTjkzNzNfQ0hJUF9JRDoKLQljYXNlIExBTjkzNzRfQ0hJUF9JRDoKLQljYXNlIExBTjk2NDZfQ0hJUF9JRDoKLQkJcmV0dXJuIEtTWjk0NzdfTUFYX0ZSQU1FX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47Ci0JfQotCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCiBpbnQga3N6X3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCSAgICBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKQogewpAQCAtMzA4NiwzOSAmIzQzOzI4NjcsNiBAQCB2b2lkIGtzel9zZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKIAlrc3pfcHdyaXRlOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sIGRhdGE4KTsKIH0KIAotcGh5X2ludGVyZmFjZV90IGtzel9nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBnYml0KQotewotCWNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtJmd0O2luZm8tJmd0O3htaWlfY3RybDE7Ci0JY29uc3QgdTE2ICpyZWdzID0gZGV2LSZndDtpbmZvLSZndDtyZWdzOwotCXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7Ci0JdTggZGF0YTg7Ci0JdTggdmFsOwotCi0Ja3N6X3ByZWFkOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sICZhbXA7ZGF0YTgpOwotCi0JdmFsID0gRklFTERfR0VUKFBfTUlJX1NFTF9NLCBkYXRhOCk7Ci0KLQlpZiAodmFsID09IGJpdHZhbFtQX01JSV9TRUxdKSB7Ci0JCWlmIChnYml0KQotCQkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk7Ci0JCWVsc2UKLQkJCWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7Ci0JfSBlbHNlIGlmICh2YWwgPT0gYml0dmFsW1BfUk1JSV9TRUxdKSB7Ci0JCWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJOwotCX0gZWxzZSB7Ci0JCWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTsKLQkJaWYgKGRhdGE4ICZhbXA7IFBfUkdNSUlfSURfRUdfRU5BQkxFKQotCQkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ7Ci0JCWlmIChkYXRhOCAmYW1wOyBQX1JHTUlJX0lEX0lHX0VOQUJMRSkgewotCQkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ7Ci0JCQlpZiAoZGF0YTggJmFtcDsgUF9SR01JSV9JRF9FR19FTkFCTEUpCi0JCQkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEOwotCQl9Ci0JfQotCi0JcmV0dXJuIGludGVyZmFjZTsKLX0KLQogYm9vbCBrc3pfcGh5bGlua19uZWVkX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAkJCSAgICAgdW5zaWduZWQgaW50IG1vZGUpCiB7CkBAIC0zMTU0LDI0ICYjNDM7MjkwMiw2IEBAIHZvaWQga3N6X3BoeWxpbmtfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAkJa3N6X3NldF94bWlpKGRldiwgcG9ydCwgc3RhdGUtJmd0O2ludGVyZmFjZSk7CiB9CiAKLWJvb2wga3N6X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQotewotCWNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtJmd0O2luZm8tJmd0O3htaWlfY3RybDE7Ci0JY29uc3QgdTE2ICpyZWdzID0gZGV2LSZndDtpbmZvLSZndDtyZWdzOwotCWJvb2wgZ2JpdCA9IGZhbHNlOwotCXU4IGRhdGE4OwotCWJvb2wgdmFsOwotCi0Ja3N6X3ByZWFkOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sICZhbXA7ZGF0YTgpOwotCi0JdmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7Ci0KLQlpZiAodmFsID09IGJpdHZhbFtQX0dNSUlfMUdCSVRdKQotCQlnYml0ID0gdHJ1ZTsKLQotCXJldHVybiBnYml0OwotfQotCiBzdGF0aWMgaW50IGtzel9zd2l0Y2hfZGV0ZWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiB7CiAJdTggaWQxLCBpZDIsIGlkNDsKQEAgLTMzMTQsOCAmIzQzOzMwNDQsOCBAQCBzdGF0aWMgaW50IGtzel9zZXR1cF90Y19tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCB1OCBzY2hlZHVsZXIsCiAJCQkgICBGSUVMRF9QUkVQKE1USV9TSEFQSU5HX00sIHNoYXBlcikpOwogfQogCi1zdGF0aWMgaW50IGtzel9zZXR1cF90Y19jYnMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKLQkJCSAgICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdCkKJiM0MztpbnQga3N6X3NldHVwX3RjX2NicyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJICAgICBzdHJ1Y3QgdGNfY2JzX3FvcHRfb2ZmbG9hZCAqcW9wdCkKIHsKIAlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiAJaW50IHJldDsKQEAgLTMzODAsOCAmIzQzOzMxMTAsOCBAQCBzdGF0aWMgaW50IGtzel9kaXNhYmxlX2VncmVzc19yYXRlX2xpbWl0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCwKLQkJCQkgaW50IGJhbmQpCiYjNDM7aW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCwKJiM0MzsJCQkgIGludCBiYW5kKQogewogCS8qIENvbXBhcmVkIHRvIHF1ZXVlcywgYmFuZHMgcHJpb3JpdGl6ZSBwYWNrZXRzIGRpZmZlcmVudGx5LiBJbiBzdHJpY3QKIAkgKiBwcmlvcml0eSBtb2RlLCB0aGUgbG93ZXN0IHByaW9yaXR5IGlzIGFzc2lnbmVkIHRvIFF1ZXVlIDAgd2hpbGUgdGhlCkBAIC0zMzkwLDEwNCAmIzQzOzMxMjAsNiBAQCBzdGF0aWMgaW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCwKIAlyZXR1cm4gcC0mZ3Q7YmFuZHMgLSAxIC0gYmFuZDsKIH0KIAotc3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKQotewotCXU4IHJlZzsKLQotCXJlZyA9IDB4QzggJiM0MzsgcG9ydCAqIDQ7Ci0JcmVnICYjNDM7PSAoKDMgLSBxdWV1ZSkgLyAyKSAqIDI7Ci0JcmVnJiM0MzsmIzQzOzsKLQlyZWcgLT0gKHF1ZXVlICZhbXA7IDEpOwotCXJldHVybiByZWc7Ci19Ci0KLS8qKgotICoga3N6ODh4M190Y19ldHNfYWRkIC0gQ29uZmlndXJlIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikKLSAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2gKLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZQotICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGNvbmZpZ3VyZQotICogQHA6IFBvaW50ZXIgdG8gb2ZmbG9hZCByZXBsYWNlIHBhcmFtZXRlcnMgZGVzY3JpYmluZyBFVFMgYmFuZHMgYW5kIG1hcHBpbmcKLSAqCi0gKiBUaGUgS1NaODh4MyBzdXBwb3J0cyB0d28gc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IGFuZAotICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLiBCb3RoIG1vZGVzIGhhdmUgZml4ZWQgYmVoYXZpb3I6Ci0gKiAgIC0gTm8gY29uZmlndXJhYmxlIHF1ZXVlLXRvLXByaW9yaXR5IG1hcHBpbmcKLSAqICAgLSBObyB3ZWlnaHQgYWRqdXN0bWVudCBpbiBXRlEgbW9kZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgc3dpdGNoIHRvIHVzZSBzdHJpY3QgcHJpb3JpdHkgbW9kZSBieQotICogY2xlYXJpbmcgdGhlIFdGUSBlbmFibGUgYml0IGZvciBhbGwgcXVldWVzIGFzc29jaWF0ZWQgd2l0aCBFVFMgYmFuZHMuCi0gKiBJZiBzdHJpY3QgcHJpb3JpdHkgaXMgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCB0aGUgc3dpdGNoIHdpbGwgZGVmYXVsdAotICogdG8gV0ZRIG1vZGUuCi0gKgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCi0gKi8KLXN0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfYWRkKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAotCQkJICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApCi17Ci0JaW50IHJldCwgYmFuZDsKLQotCS8qIE9ubHkgc3RyaWN0IHByaW9yaXR5IG1vZGUgaXMgc3VwcG9ydGVkIGZvciBub3cuCi0JICogV0ZRIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkLgotCSAqLwotCWZvciAoYmFuZCA9IDA7IGJhbmQgJmx0OyBwLSZndDtiYW5kczsgYmFuZCYjNDM7JiM0MzspIHsKLQkJaW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpOwotCQl1OCByZWc7Ci0KLQkJLyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXMKLQkJICogcG9ydC9xdWV1ZQotCQkgKi8KLQkJcmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpOwotCQlpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSkKLQkJCXJlZyA9IGtzejg0NjNfdGNfY3RybChwb3J0LCBxdWV1ZSk7Ci0KLQkJLyogQ2xlYXIgV0ZRIGVuYWJsZSBiaXQgdG8gc2VsZWN0IHN0cmljdCBwcmlvcml0eSBzY2hlZHVsaW5nICovCi0JCXJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLCAwKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoga3N6ODh4M190Y19ldHNfZGVsIC0gUmVzZXQgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKSBjb25maWcKLSAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2gKLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZQotICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIHJlc2V0Ci0gKgotICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgb25seSBmaXhlZCBzY2hlZHVsaW5nIG1vZGVzOiBTdHJpY3QgUHJpb3JpdHkgb3IKLSAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKSwgd2l0aCBubyByZWNvbmZpZ3VyYXRpb24gb2Ygd2VpZ2h0cyBvcgotICogcXVldWUgbWFwcGluZy4gVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIHBvcnTigJlzIHNjaGVkdWxpbmcgbW9kZSB0bwotICogdGhlIGRlZmF1bHQsIHdoaWNoIGlzIFdGUSwgYnkgZW5hYmxpbmcgdGhlIFdGUSBiaXQgZm9yIGFsbCBxdWV1ZXMuCi0gKgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCi0gKi8KLXN0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KQotewotCWludCByZXQsIHF1ZXVlOwotCi0JLyogSXRlcmF0ZSBvdmVyIGFsbCB0cmFuc21pdCBxdWV1ZXMgZm9yIHRoaXMgcG9ydCAqLwotCWZvciAocXVldWUgPSAwOyBxdWV1ZSAmbHQ7IGRldi0mZ3Q7aW5mby0mZ3Q7bnVtX3R4X3F1ZXVlczsgcXVldWUmIzQzOyYjNDM7KSB7Ci0JCXU4IHJlZzsKLQotCQkvKiBDYWxjdWxhdGUgVFhRIFNwbGl0IENvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhpcwotCQkgKiBwb3J0L3F1ZXVlCi0JCSAqLwotCQlyZWcgPSBLU1o4ODczX1RYUV9TUExJVF9DVFJMX1JFRyhwb3J0LCBxdWV1ZSk7Ci0JCWlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKQotCQkJcmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTsKLQotCQkvKiBTZXQgV0ZRIGVuYWJsZSBiaXQgdG8gcmV2ZXJ0IGJhY2sgdG8gZGVmYXVsdCBzY2hlZHVsaW5nCi0JCSAqIG1vZGUKLQkJICovCi0JCXJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLAotCQkJICAgICAgIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBrc3pfcXVldWVfc2V0X3N0cmljdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IHF1ZXVlKQogewogCWludCByZXQ7CkBAIC0zNTgwLDggJiM0MzszMjEyLDggQEAgc3RhdGljIGludCBrc3pfdGNfZXRzX2RlbChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCkKIAlyZXR1cm4ga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoZGV2LCBwb3J0KTsKIH0KIAotc3RhdGljIGludCBrc3pfdGNfZXRzX3ZhbGlkYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAotCQkJICAgICAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKQomIzQzO2ludCBrc3pfdGNfZXRzX3ZhbGlkYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAomIzQzOwkJCXN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKQogewogCWludCBiYW5kOwogCkBAIC0zNjIyLDkgJiM0MzszMjU0LDYgQEAgc3RhdGljIGludCBrc3pfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwogCWludCByZXQ7CiAKLQlpZiAoaXNfa3N6OChkZXYpICZhbXA7JmFtcDsgIShrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlpZiAocW9wdC0mZ3Q7cGFyZW50ICE9IFRDX0hfUk9PVCkgewogCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0O1BhcmVudCBzaG91bGQgYmUgXCYjMzQ7cm9vdFwmIzM0O1xuJiMzNDspOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0zNjM2LDE2ICYjNDM7MzI2NSw5IEBAIHN0YXRpYyBpbnQga3N6X3RjX3NldHVwX3FkaXNjX2V0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQlpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKQotCQkJcmV0dXJuIGtzejg4eDNfdGNfZXRzX2FkZChkZXYsIHBvcnQsCi0JCQkJCQkgICZhbXA7cW9wdC0mZ3Q7cmVwbGFjZV9wYXJhbXMpOwotCQllbHNlCi0JCQlyZXR1cm4ga3N6X3RjX2V0c19hZGQoZGV2LCBwb3J0LCAmYW1wO3FvcHQtJmd0O3JlcGxhY2VfcGFyYW1zKTsKJiM0MzsJCXJldHVybiBrc3pfdGNfZXRzX2FkZChkZXYsIHBvcnQsICZhbXA7cW9wdC0mZ3Q7cmVwbGFjZV9wYXJhbXMpOwogCWNhc2UgVENfRVRTX0RFU1RST1k6Ci0JCWlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpCi0JCQlyZXR1cm4ga3N6ODh4M190Y19ldHNfZGVsKGRldiwgcG9ydCk7Ci0JCWVsc2UKLQkJCXJldHVybiBrc3pfdGNfZXRzX2RlbChkZXYsIHBvcnQpOwomIzQzOwkJcmV0dXJuIGtzel90Y19ldHNfZGVsKGRldiwgcG9ydCk7CiAJY2FzZSBUQ19FVFNfU1RBVFM6CiAJY2FzZSBUQ19FVFNfR1JBRlQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTM3MDQsNiAmIzQzOzMzMjYsMzQgQEAgaW50IGtzel9oYW5kbGVfd2FrZV9yZWFzb24oc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpCiAJCQkJcG1lX3N0YXR1cyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZSAtIENoZWNrIGlmIHRoZSBNQUMgYWRkcmVzcyBvbiBhIGdpdmVuIHBvcnQKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MuCiYjNDM7ICogQGRzOiBQb2ludGVyIHRvIHRoZSBEU0Egc3dpdGNoIHN0cnVjdHVyZS4KJiM0MzsgKiBAcG9ydDogVGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZSBNQUMgYWRkcmVzcyBpcyB0byBiZSBjaGVja2VkLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBleGFtaW5lcyB0aGUgTUFDIGFkZHJlc3Mgc2V0IG9uIHRoZSBzcGVjaWZpZWQgcG9ydCBhbmQKJiM0MzsgKiBkZXRlcm1pbmVzIGlmIGl0IGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MgZm9yIHRoZSBzd2l0Y2guCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBvcnQmIzM5O3MgTUFDIGFkZHJlc3MgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcywgZmFsc2UKJiM0MzsgKiBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICp1c2VyID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpLSZndDt1c2VyOwomIzQzOwljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyID0gdXNlci0mZ3Q7ZGV2X2FkZHI7CiYjNDM7CXN0cnVjdCBrc3pfc3dpdGNoX21hY2FkZHIgKnN3aXRjaF9tYWNhZGRyOwomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CXN3aXRjaF9tYWNhZGRyID0gZGV2LSZndDtzd2l0Y2hfbWFjYWRkcjsKJiM0MzsJaWYgKHN3aXRjaF9tYWNhZGRyICZhbXA7JmFtcDsgIWV0aGVyX2FkZHJfZXF1YWwoc3dpdGNoX21hY2FkZHItJmd0O2FkZHIsIGFkZHIpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGtzel9nZXRfd29sIC0gR2V0IFdha2Utb24tTEFOIHNldHRpbmdzIGZvciBhIHNwZWNpZmllZCBwb3J0LgogICogQGRzOiBUaGUgZHNhX3N3aXRjaCBzdHJ1Y3R1cmUuCkBAIC0zODk3LDM0ICYjNDM7MzU0Nyw2IEBAIGludCBrc3pfcG9ydF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZSAtIENoZWNrIGlmIHRoZSBNQUMgYWRkcmVzcyBvbiBhIGdpdmVuIHBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcy4KLSAqIEBkczogUG9pbnRlciB0byB0aGUgRFNBIHN3aXRjaCBzdHJ1Y3R1cmUuCi0gKiBAcG9ydDogVGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZSBNQUMgYWRkcmVzcyBpcyB0byBiZSBjaGVja2VkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZXhhbWluZXMgdGhlIE1BQyBhZGRyZXNzIHNldCBvbiB0aGUgc3BlY2lmaWVkIHBvcnQgYW5kCi0gKiBkZXRlcm1pbmVzIGlmIGl0IGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MgZm9yIHRoZSBzd2l0Y2guCi0gKgotICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwb3J0JiMzOTtzIE1BQyBhZGRyZXNzIGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MsIGZhbHNlCi0gKiBvdGhlcndpc2UuCi0gKi8KLWJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqdXNlciA9IGRzYV90b19wb3J0KGRzLCBwb3J0KS0mZ3Q7dXNlcjsKLQljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyID0gdXNlci0mZ3Q7ZGV2X2FkZHI7Ci0Jc3RydWN0IGtzel9zd2l0Y2hfbWFjYWRkciAqc3dpdGNoX21hY2FkZHI7Ci0Jc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwotCi0JQVNTRVJUX1JUTkwoKTsKLQotCXN3aXRjaF9tYWNhZGRyID0gZGV2LSZndDtzd2l0Y2hfbWFjYWRkcjsKLQlpZiAoc3dpdGNoX21hY2FkZHIgJmFtcDsmYW1wOyAhZXRoZXJfYWRkcl9lcXVhbChzd2l0Y2hfbWFjYWRkci0mZ3Q7YWRkciwgYWRkcikpCi0JCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCiAvKioKICAqIGtzel9zd2l0Y2hfbWFjYWRkcl9nZXQgLSBQcm9ncmFtIHRoZSBzd2l0Y2gmIzM5O3MgTUFDIGFkZHJlc3MgcmVnaXN0ZXIuCiAgKiBAZHM6IERTQSBzd2l0Y2ggaW5zdGFuY2UuCkBAIC00MTMyLDggJiM0MzszNzU0LDggQEAgc3RhdGljIHZvaWQga3N6X3BhcnNlX3JnbWlpX2RlbGF5KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0X251bSwKICAqIFJldHVybnM6IElmIGZvdW5kLCB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlciB2YWx1ZSBmb3IgdGhhdCBkcml2ZSBzdHJlbmd0aAogICogaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgLUVJTlZBTCBpcyByZXR1cm5lZCBpbmRpY2F0aW5nIGFuIGludmFsaWQgdmFsdWUuCiAgKi8KLXN0YXRpYyBpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSwKLQkJCQkgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApCiYjNDM7aW50IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksCiYjNDM7CQkJICAgICAgc2l6ZV90IGFycmF5X3NpemUsIGludCBtaWNyb2FtcCkKIHsKIAlpbnQgaTsKIApAQCAtNDE1Niw5ICYjNDM7Mzc3OCw5IEBAIHN0YXRpYyBpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSwKICAqIGlzIGRldGVjdGVkLiBJdCBsaXN0cyBvdXQgYWxsIHRoZSBzdXBwb3J0ZWQgZHJpdmUgc3RyZW5ndGggdmFsdWVzIGZvcgogICogcmVmZXJlbmNlIGluIHRoZSBlcnJvciBtZXNzYWdlLgogICovCi1zdGF0aWMgdm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LAotCQkJCSAgICAgc2l6ZV90IGFycmF5X3NpemUsIGludCBtaWNyb2FtcCkKJiM0Mzt2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LAomIzQzOwkJCSAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApCiB7CiAJY2hhciBzdXBwb3J0ZWRfdmFsdWVzWzEwMF07CiAJc2l6ZV90IHJlbWFpbmluZ19zaXplOwpAQCAtNDE4NSw4ICYjNDM7MzgwNyw4IEBAIHN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogfQogCiAvKioKLSAqIGtzejk0NzdfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggZm9yIHNwZWNpZmljIEtTWjk0NzcKLSAqCQkJCSAgICBjaGlwIHZhcmlhbnRzLgomIzQzOyAqIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBmb3Igc3BlY2lmaWMgS1NaOTQ3NwomIzQzOyAqCQkJCWFuZCB0aGUgS1NaODd4eCBjaGlwIHZhcmlhbnRzLgogICogQGRldjogICAgICAga3N6IGRldmljZQogICogQHByb3BzOiAgICAgQXJyYXkgb2YgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyB0byBiZSBhcHBsaWVkCiAgKiBAbnVtX3Byb3BzOiBOdW1iZXIgb2YgcHJvcGVydGllcyBpbiB0aGUgYXJyYXkKQEAgLTQxOTcsOSAmIzQzOzM4MTksOSBAQCBzdGF0aWMgdm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwKICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzc2Z1bCBjb25maWd1cmF0aW9uLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBrc3o5NDc3X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCi0JCQkJCXN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLAotCQkJCQlpbnQgbnVtX3Byb3BzKQomIzQzO2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLAomIzQzOwkJCSAgICAgaW50IG51bV9wcm9wcykKIHsKIAlzaXplX3QgYXJyYXlfc2l6ZSA9IEFSUkFZX1NJWkUoa3N6OTQ3N19kcml2ZV9zdHJlbmd0aHMpOwogCWludCBpLCByZXQsIHJlZzsKQEAgLTQyMzYsMTMwICYjNDM7Mzg1OCw2IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCXJldHVybiBrc3pfcm13OChkZXYsIHJlZywgbWFzaywgdmFsKTsKIH0KIAotLyoqCi0gKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb24gZm9yCi0gKgkJCQkgICAgS1NaODg2MyBjb21wYXRpYmxlIGNoaXAgdmFyaWFudHMuCi0gKiBAZGV2OiAgICAgICBrc3ogZGV2aWNlCi0gKiBAcHJvcHM6ICAgICBBcnJheSBvZiBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIHRvIGJlIHNldAotICogQG51bV9wcm9wczogTnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5Ci0gKgotICogVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggc2V0dGluZ3MgdG8gS1NaODhYMyBjaGlwCi0gKiB2YXJpYW50cyAoS1NaODg3MywgS1NaODg2MykuCi0gKiBJdCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9ucyBhbGlnbiB3aXRoIHdoYXQgdGhlIGNoaXAgdmFyaWFudCBzdXBwb3J0cyBhbmQKLSAqIHdhcm5zIG9yIGVycm9ycyBvdXQgb24gdW5zdXBwb3J0ZWQgc2V0dGluZ3MuCi0gKgotICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wICpwcm9wcywKLQkJCQkJaW50IG51bV9wcm9wcykKLXsKLQlzaXplX3QgYXJyYXlfc2l6ZSA9IEFSUkFZX1NJWkUoa3N6ODh4M19kcml2ZV9zdHJlbmd0aHMpOwotCWludCBtaWNyb2FtcDsKLQlpbnQgaSwgcmV0OwotCi0JZm9yIChpID0gMDsgaSAmbHQ7IG51bV9wcm9wczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHByb3BzW2ldLnZhbHVlID09IC0xIHx8IGkgPT0gS1NaX0RSSVZFUl9TVFJFTkdUSF9JTykKLQkJCWNvbnRpbnVlOwotCi0JCWRldl93YXJuKGRldi0mZ3Q7ZGV2LCAmIzM0OyVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcbiYjMzQ7LAotCQkJIHByb3BzW2ldLm5hbWUpOwotCX0KLQotCW1pY3JvYW1wID0gcHJvcHNbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10udmFsdWU7Ci0JcmV0ID0ga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocywgYXJyYXlfc2l6ZSwKLQkJCQkJbWljcm9hbXApOwotCWlmIChyZXQgJmx0OyAwKSB7Ci0JCWtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihkZXYsIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzLAotCQkJCQkgYXJyYXlfc2l6ZSwgbWljcm9hbXApOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiBrc3pfcm13OChkZXYsIEtTWjg4NzNfUkVHX0dMT0JBTF9DVFJMXzEyLAotCQkJS1NaODg3M19EUklWRV9TVFJFTkdUSF8xNk1BLCByZXQpOwotfQotCi0vKioKLSAqIGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aCgpIC0gRXh0cmFjdCBhbmQgYXBwbHkgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbnMKLSAqCQkJCWZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy4KLSAqIEBkZXY6CWtzeiBkZXZpY2UKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZQotICogZGV2aWNlIHRyZWUsIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBzdXBwb3J0ZWQgY2hpcCB2YXJpYW50cywgYW5kIHNldHMKLSAqIHRoZW0gYWNjb3JkaW5nbHkuIEFuIGVycm9yIHNob3VsZCBiZSBjcml0aWNhbCBoZXJlLCBhcyB0aGUgZHJpdmUgc3RyZW5ndGgKLSAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS4KLSAqCi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKLSAqLwotaW50IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHsKLQkJW0tTWl9EUklWRVJfU1RSRU5HVEhfSEldID0gewotCQkJLm5hbWUgPSAmIzM0O21pY3JvY2hpcCxoaS1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcCYjMzQ7LAotCQkJLm9mZnNldCA9IFNXX0hJX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsCi0JCQkudmFsdWUgPSAtMSwKLQkJfSwKLQkJW0tTWl9EUklWRVJfU1RSRU5HVEhfTE9dID0gewotCQkJLm5hbWUgPSAmIzM0O21pY3JvY2hpcCxsby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcCYjMzQ7LAotCQkJLm9mZnNldCA9IFNXX0xPX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsCi0JCQkudmFsdWUgPSAtMSwKLQkJfSwKLQkJW0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dID0gewotCQkJLm5hbWUgPSAmIzM0O21pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcCYjMzQ7LAotCQkJLm9mZnNldCA9IDAsIC8qIGRvbiYjMzk7dCBjYXJlICovCi0JCQkudmFsdWUgPSAtMSwKLQkJfSwKLQl9OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtJmd0O2Rldi0mZ3Q7b2Zfbm9kZTsKLQlib29sIGhhdmVfYW55X3Byb3AgPSBmYWxzZTsKLQlpbnQgaSwgcmV0OwotCi0JZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgb2ZfcHJvcHNbaV0ubmFtZSwKLQkJCQkJICAgJmFtcDtvZl9wcm9wc1tpXS52YWx1ZSk7Ci0JCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVJTlZBTCkKLQkJCWRldl93YXJuKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkICVzXG4mIzM0OywKLQkJCQkgb2ZfcHJvcHNbaV0ubmFtZSk7Ci0JCWlmIChyZXQpCi0JCQljb250aW51ZTsKLQotCQloYXZlX2FueV9wcm9wID0gdHJ1ZTsKLQl9Ci0KLQlpZiAoIWhhdmVfYW55X3Byb3ApCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoIChkZXYtJmd0O2NoaXBfaWQpIHsKLQljYXNlIEtTWjg4WDNfQ0hJUF9JRDoKLQkJcmV0dXJuIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcywKLQkJCQkJCSAgICBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7Ci0JY2FzZSBLU1o4Nzk1X0NISVBfSUQ6Ci0JY2FzZSBLU1o4Nzk0X0NISVBfSUQ6Ci0JY2FzZSBLU1o4NzY1X0NISVBfSUQ6Ci0JY2FzZSBLU1o4NTYzX0NISVBfSUQ6Ci0JY2FzZSBLU1o4NTY3X0NISVBfSUQ6Ci0JY2FzZSBLU1o5NDc3X0NISVBfSUQ6Ci0JY2FzZSBLU1o5NTYzX0NISVBfSUQ6Ci0JY2FzZSBLU1o5NTY3X0NISVBfSUQ6Ci0JY2FzZSBLU1o5ODkzX0NISVBfSUQ6Ci0JY2FzZSBLU1o5ODk2X0NISVBfSUQ6Ci0JY2FzZSBLU1o5ODk3X0NISVBfSUQ6Ci0JY2FzZSBMQU45NjQ2X0NISVBfSUQ6Ci0JCXJldHVybiBrc3o5NDc3X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKGRldiwgb2ZfcHJvcHMsCi0JCQkJCQkgICAgQVJSQVlfU0laRShvZl9wcm9wcykpOwotCWRlZmF1bHQ6Ci0JCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG9mX3Byb3BzKTsgaSYjNDM7JiM0MzspIHsKLQkJCWlmIChvZl9wcm9wc1tpXS52YWx1ZSA9PSAtMSkKLQkJCQljb250aW51ZTsKLQotCQkJZGV2X3dhcm4oZGV2LSZndDtkZXYsICYjMzQ7JXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgdmFyaWFudFxuJiMzNDssCi0JCQkJIG9mX3Byb3BzW2ldLm5hbWUpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQga3N6ODQ2M19jb25maWd1cmVfc3RyYXBzX3NwaShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwaW5jdHJsICpwaW5jdHJsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaAppbmRleCBiNGE1NjczYmEzNjVjYi4uYWNhZjcwZTZmMzkzYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc2EuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kYXRhL21pY3JvY2hpcC1rc3ouaCZndDsKIApAQCAtNDAsNiAmIzQzOzQxLDQ1IEBAIHN0cnVjdCB2bGFuX3RhYmxlIHsKIAl1MzIgdGFibGVbM107CiB9OwogCiYjNDM7c3RydWN0IGtzel9zdGF0c19yYXcgewomIzQzOwl1NjQgcnhfaGk7CiYjNDM7CXU2NCByeF91bmRlcnNpemU7CiYjNDM7CXU2NCByeF9mcmFnbWVudHM7CiYjNDM7CXU2NCByeF9vdmVyc2l6ZTsKJiM0MzsJdTY0IHJ4X2phYmJlcnM7CiYjNDM7CXU2NCByeF9zeW1ib2xfZXJyOwomIzQzOwl1NjQgcnhfY3JjX2VycjsKJiM0MzsJdTY0IHJ4X2FsaWduX2VycjsKJiM0MzsJdTY0IHJ4X21hY19jdHJsOwomIzQzOwl1NjQgcnhfcGF1c2U7CiYjNDM7CXU2NCByeF9iY2FzdDsKJiM0MzsJdTY0IHJ4X21jYXN0OwomIzQzOwl1NjQgcnhfdWNhc3Q7CiYjNDM7CXU2NCByeF82NF9vcl9sZXNzOwomIzQzOwl1NjQgcnhfNjVfMTI3OwomIzQzOwl1NjQgcnhfMTI4XzI1NTsKJiM0MzsJdTY0IHJ4XzI1Nl81MTE7CiYjNDM7CXU2NCByeF81MTJfMTAyMzsKJiM0MzsJdTY0IHJ4XzEwMjRfMTUyMjsKJiM0MzsJdTY0IHJ4XzE1MjNfMjAwMDsKJiM0MzsJdTY0IHJ4XzIwMDE7CiYjNDM7CXU2NCB0eF9oaTsKJiM0MzsJdTY0IHR4X2xhdGVfY29sOwomIzQzOwl1NjQgdHhfcGF1c2U7CiYjNDM7CXU2NCB0eF9iY2FzdDsKJiM0MzsJdTY0IHR4X21jYXN0OwomIzQzOwl1NjQgdHhfdWNhc3Q7CiYjNDM7CXU2NCB0eF9kZWZlcnJlZDsKJiM0MzsJdTY0IHR4X3RvdGFsX2NvbDsKJiM0MzsJdTY0IHR4X2V4Y19jb2w7CiYjNDM7CXU2NCB0eF9zaW5nbGVfY29sOwomIzQzOwl1NjQgdHhfbXVsdF9jb2w7CiYjNDM7CXU2NCByeF90b3RhbDsKJiM0MzsJdTY0IHR4X3RvdGFsOwomIzQzOwl1NjQgcnhfZGlzY2FyZHM7CiYjNDM7CXU2NCB0eF9kaXNjYXJkczsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGtzel9wb3J0X21pYiB7CiAJc3RydWN0IG11dGV4IGNudF9tdXRleDsJCS8qIHN0cnVjdHVyZSBhY2Nlc3MgKi8KIAl1OCBjbnRfcHRyOwpAQCAtMzkzLDEyICYjNDM7NDMzLDggQEAgaW50IGtzel9zd2l0Y2hfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CiB2b2lkIGtzel90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpOwogCiB2b2lkIGtzel9pbml0X21pYl90aW1lcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTsKLWJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCk7CiB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTsKLXZvaWQga3N6ODh4eF9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTsKIHZvaWQga3N6X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1OCBzdGF0ZSk7Ci1ib29sIGtzel9nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7Ci1waHlfaW50ZXJmYWNlX3Qga3N6X2dldF94bWlpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGdiaXQpOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXTsKIGludCBrc3pfc3dpdGNoX21hY2FkZHJfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwpAQCAtNDQzLDExICYjNDM7NDc5LDE1IEBAIHZvaWQga3N6X3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSwKIAkJCSAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKIAotaW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpOwotCiBpbnQga3N6X3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCSAgICBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKTsKIAomIzQzO2ludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsCiYjNDM7CQkJICBpbnQgYmFuZCk7CiYjNDM7aW50IGtzel9zZXR1cF90Y19jYnMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCSAgICAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpOwomIzQzO2ludCBrc3pfdGNfZXRzX3ZhbGlkYXRlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LAomIzQzOwkJCXN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKTsKIGludCBrc3pfc2V0dXBfdGMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLCB2b2lkICp0eXBlX2RhdGEpOwogCkBAIC00NzEsOCAmIzQzOzUxMSwzNyBAQCBpbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7CiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcCk7CiBpbnQga3N6X2dpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldik7CiB2b2lkIGtzel9pcnFfZnJlZShzdHJ1Y3Qga3N6X2lycSAqa2lycSk7Ci1pbnQga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpOwotaW50IGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTsKJiM0MzsKJiM0MztzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIHsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJaW50IG9mZnNldDsKJiM0MzsJaW50IHZhbHVlOwomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBrc3pfZHJpdmVyX3N0cmVuZ3RoX3R5cGUgewomIzQzOwlLU1pfRFJJVkVSX1NUUkVOR1RIX0hJLAomIzQzOwlLU1pfRFJJVkVSX1NUUkVOR1RIX0xPLAomIzQzOwlLU1pfRFJJVkVSX1NUUkVOR1RIX0lPLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAtIGRyaXZlIHN0cmVuZ3RoIG1hcHBpbmcKJiM0MzsgKiBAcmVnX3ZhbDoJcmVnaXN0ZXIgdmFsdWUKJiM0MzsgKiBAbWljcm9hbXA6CW1pY3JvYW1wIHZhbHVlCiYjNDM7ICovCiYjNDM7c3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCB7CiYjNDM7CXUzMiByZWdfdmFsOwomIzQzOwl1MzIgbWljcm9hbXA7CiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LAomIzQzOwkJCSAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApOwomIzQzO2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LAomIzQzOwkJCSAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApOwomIzQzO2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLAomIzQzOwkJCSAgICAgaW50IG51bV9wcm9wcyk7CiAKIC8qIENvbW1vbiByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWdtYXAgKmtzel9yZWdtYXBfOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMKaW5kZXggOGViNTMzN2IwYzEwMmUuLjg2Y2UzYTg2NzA1ZjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMKQEAgLTc4NywxMCAmIzQzOzc4Nyw2IEBAIHN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIHNldCBicm9hZGNhc3Qgc3Rvcm0gcHJvdGVjdGlvbiAxMCUgcmF0ZSAqLwogCXN0b3JtX21hc2sgPSBCUk9BRENBU1RfU1RPUk1fUkFURTsKIAlzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwOwpAQCAtOTgzLDcgJiM0Mzs5NzksNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbGFuOTM3eF9zd2l0Y2hfb3BzID0gewogCS5nZXRfc3RhdHM2NAkJPSBrc3pfZ2V0X3N0YXRzNjQsCiAJLmdldF9wYXVzZV9zdGF0cwk9IGtzel9nZXRfcGF1c2Vfc3RhdHMsCiAJLnBvcnRfY2hhbmdlX210dQk9IGxhbjkzN3hfY2hhbmdlX210dSwKLQkucG9ydF9tYXhfbXR1CQk9IGtzel9tYXhfbXR1LAomIzQzOwkucG9ydF9tYXhfbXR1CQk9IGtzejk0NzdfbWF4X210dSwKIAkuc3VzcGVuZAkJPSBrc3pfc3VzcGVuZCwKIAkucmVzdW1lCQkJPSBrc3pfcmVzdW1lLAogCS5nZXRfdHNfaW5mbwkJPSBrc3pfZ2V0X3RzX2luZm8sCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTMzCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDMyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgdGhlIE1pY3JvY2hpcCBEU0EgRHJpdmVyKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGRlYWwuIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHNlcmllcyB0aGF0JiMzOTtzIGNsZWFybHkgZm9jdXNlZCBvbiByZWZhY3RvcmluZyB0aGUgYGtzemAgRFNBIGRyaXZlciBmb3IgTWljcm9jaGlwIHN3aXRjaGVzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIHB1cmVseSBhYm91dCB0aWR5aW5nIHRoaW5ncyB1cCwgbWFraW5nIHRoZSBjb2RlIG1vcmUgb3JnYW5pemVkIGFuZCBlYXNpZXIgdG8gbWFpbnRhaW4uIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vdmluZyBmdW5jdGlvbnMgZnJvbSBga3N6X2NvbW1vbi5jYCB0byBtb3JlIHNwZWNpZmljIGZpbGVzIGxpa2UgYGtzejguY2AgYW5kIGBrc3o5NDc3LmNgLCBiYXNlZCBvbiB0aGUgY2hpcCBmYW1pbGllcyB0aGV5JiMzOTtyZSBpbnRlbmRlZCBmb3IuIFRoZSBmdW5jdGlvbiBuYW1lcyBoYXZlIGJlZW4gdXBkYXRlZCB0byByZWZsZWN0IHRoaXMgc3BlY2lmaWNpdHksIHdpdGggdGhlIG9sZCBga3N6X2AgcHJlZml4IGJlaW5nIHJlcGxhY2VkIHdpdGggY2hpcC1zcGVjaWZpYyBwcmVmaXhlcywgbGlrZSBga3N6ODd4eF9gLCBga3N6ODh4eF9gLCBhbmQgYGtzejk0NzdfYC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBjb21wYXJlZCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb25zIHdpdGggdGhlaXIgcmVmYWN0b3JlZCBjb3VudGVycGFydHMuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmdW5jdGlvbnMgbGlrZSBga3N6X2NoYW5nZV9tdHVgLCBga3N6X21heF9tdHVgLCBhbmQgYGtzel9zZXR1cF90Y2AgKGFuZCB0aGVpciBjaGlwLXNwZWNpZmljIHZhcmlhdGlvbnMpIHNlZW1zIGlkZW50aWNhbC4gTm8gbmV3IGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gaW50cm9kdWNlZCBpbiB0aGUgZHJpdmVyLCBpdCBsb29rcyBsaWtlLCBqdXN0IGEgcmVvcmdhbml6YXRpb24gb2YgZXhpc3RpbmcgY29kZS4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIGBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGhgIHdoaWNoIGhhcyBiZWVuIHJlZmFjdG9yZWQgaW4gYGxhbjkzN3hfc2V0dXBgIGFuZCBub3RpY2VkIHRoYXQgdGhlIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcy4gSXQgaGFzIGJlZW4gY29uZmlybWVkIHRoZSByZW1vdmFsIGp1c3QgZ2V0cyByaWQgb2Ygd2FybmluZ3MgYW5kIGRvZXNuJiMzOTt0IGFmZmVjdCBvcGVyYXRpb24uCgpUaGUgZnVuY3Rpb25zIGxpa2UgYGtzejg4eHhfcl9taWJfc3RhdHM2NGAsIHRoZSBga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoYCBjYWxscywgYW5kIHRoZSBga3N6OTQ3N18qYCBmdW5jdGlvbnMgd2VyZSBhbHNvIG1vdmVkIHRvIGJlIG1vcmUgY2hpcC1zcGVjaWZpYy4KClNvLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgZXhlcmNpc2UuIEl0JiMzOTtzIGFib3V0IGltcHJvdmVkIGNvZGUgc3RydWN0dXJlLCBub3QgYWRkaW5nIG5ldyBmZWF0dXJlcyBvciBmaXhpbmcgYnVncy4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyByZWFzb24gdG8gZmxhZyB0aGlzIGFzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcyBvciBjb21wbGV4IGxvZ2ljIHRoYXQgd291bGQgYmUgZXhwb3NlZCB0byBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBNaWNyb2NoaXAgS1NaIERTQSBkcml2ZXIuIEl0IG1vdmVzIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb25zIChsaWtlIE1UVSBjb25maWd1cmF0aW9uLCBUQyBzZXR1cCwgTUlCIHN0YXRzIHJlYWRpbmcsIGFuZCBkcml2ZSBzdHJlbmd0aCBwYXJzaW5nKSBmcm9tIHRoZSBjb21tb24gYGtzel9jb21tb24uY2AgZmlsZSB0byB0aGVpciByZXNwZWN0aXZlIGNoaXAtc3BlY2lmaWMgZmlsZXMgKGBrc3o4LmNgIGFuZCBga3N6OTQ3Ny5jYCkuIEl0IGFsc28gcmVtb3ZlcyBhIG5vLW9wIGNhbGwgdG8gYGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aGAgaW4gYGxhbjkzN3hfbWFpbi5jYCB3aGljaCBvbmx5IHByaW50ZWQgd2FybmluZ3MgZm9yIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMuIE5vIG5ldyBmdW5jdGlvbmFsIGxvZ2ljIG9yIHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBNaWNyb2NoaXAgS1NaIERTQSBkcml2ZXIuIEl0IG1vdmVzIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb25zIChsaWtlIE1UVSBjb25maWd1cmF0aW9uLCBUQyBzZXR1cCwgTUlCIHN0YXRzIHJlYWRpbmcsIGFuZCBkcml2ZSBzdHJlbmd0aCBwYXJzaW5nKSBmcm9tIHRoZSBjb21tb24gYGtzel9jb21tb24uY2AgZmlsZSB0byB0aGVpciByZXNwZWN0aXZlIGNoaXAtc3BlY2lmaWMgZmlsZXMgKGBrc3o4LmNgIGFuZCBga3N6OTQ3Ny5jYCkuIEl0IGFsc28gcmVtb3ZlcyBhIG5vLW9wIGNhbGwgdG8gYGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aGAgaW4gYGxhbjkzN3hfbWFpbi5jYCB3aGljaCBvbmx5IHByaW50ZWQgd2FybmluZ3MgZm9yIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMuIE5vIG5ldyBmdW5jdGlvbmFsIGxvZ2ljIG9yIHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEzOjU2OjI2LjUwMDUwNTE0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwNzAxMjI5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBvZiB0aGUgTWljcm9jaGlwIEtTWiBEU0EgZHJpdmVyLiBJdCBtb3ZlcyBjaGlwLXNwZWNpZmljIGZ1bmN0aW9ucyAobGlrZSBNVFUgY29uZmlndXJhdGlvbiwgVEMgc2V0dXAsIE1JQiBzdGF0cyByZWFkaW5nLCBhbmQgZHJpdmUgc3RyZW5ndGggcGFyc2luZykgZnJvbSB0aGUgY29tbW9uIGBrc3pfY29tbW9uLmNgIGZpbGUgdG8gdGhlaXIgcmVzcGVjdGl2ZSBjaGlwLXNwZWNpZmljIGZpbGVzIChga3N6OC5jYCBhbmQgYGtzejk0NzcuY2ApLiBJdCBhbHNvIHJlbW92ZXMgYSBuby1vcCBjYWxsIHRvIGBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGhgIGluIGBsYW45Mzd4X21haW4uY2Agd2hpY2ggb25seSBwcmludGVkIHdhcm5pbmdzIGZvciB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLiBObyBuZXcgZnVuY3Rpb25hbCBsb2dpYyBvciByZWFjaGFibGUgY29kZSBwYXRocyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEzOjU2OjI2LjUwMDUxMzc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDYzNDcxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNmVkYmJkOGZhYjkxMDViMWFiYTBmNmY5NDE3ZjU0Nzk0NzZhNzlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTM6NTY6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xcbmluZGV4IDU4NjkxNjU3MGE4NDFiLi5jNGM3NjkwMjhhMjBjOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXFxuQEAgLTM2LDYgKzM2LDUyIEBAXFxuICNpbmNsdWRlIFxcXCJrc3o4X3JlZy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3N6OC5oXFxcIlxcbiBcXG4rLyoga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMgLSBEcml2ZSBzdHJlbmd0aCBtYXBwaW5nIGZvciBLU1o4ODYzLCBLU1o4ODczLCAuLlxcbisgKlxcdFxcdFxcdCAgICAgdmFyaWFudHMuXFxuKyAqIFRoaXMgdmFsdWVzIGFyZSBkb2N1bWVudGVkIGluIEtTWjg4NzMgYW5kIEtTWjg4NjMgZGF0YXNoZWV0cy5cXG4rICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7XFxuK1xcdHsgMCwgIDgwMDAgfSxcXG4rXFx0eyBLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIDE2MDAwIH0sXFxuK307XFxuK1xcbitzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcge1xcbitcXHR1NjQgcng7XFxuK1xcdHU2NCByeF9oaTtcXG4rXFx0dTY0IHJ4X3VuZGVyc2l6ZTtcXG4rXFx0dTY0IHJ4X2ZyYWdtZW50cztcXG4rXFx0dTY0IHJ4X292ZXJzaXplO1xcbitcXHR1NjQgcnhfamFiYmVycztcXG4rXFx0dTY0IHJ4X3N5bWJvbF9lcnI7XFxuK1xcdHU2NCByeF9jcmNfZXJyO1xcbitcXHR1NjQgcnhfYWxpZ25fZXJyO1xcbitcXHR1NjQgcnhfbWFjX2N0cmw7XFxuK1xcdHU2NCByeF9wYXVzZTtcXG4rXFx0dTY0IHJ4X2JjYXN0O1xcbitcXHR1NjQgcnhfbWNhc3Q7XFxuK1xcdHU2NCByeF91Y2FzdDtcXG4rXFx0dTY0IHJ4XzY0X29yX2xlc3M7XFxuK1xcdHU2NCByeF82NV8xMjc7XFxuK1xcdHU2NCByeF8xMjhfMjU1O1xcbitcXHR1NjQgcnhfMjU2XzUxMTtcXG4rXFx0dTY0IHJ4XzUxMl8xMDIzO1xcbitcXHR1NjQgcnhfMTAyNF8xNTIyO1xcbitcXHR1NjQgdHg7XFxuK1xcdHU2NCB0eF9oaTtcXG4rXFx0dTY0IHR4X2xhdGVfY29sO1xcbitcXHR1NjQgdHhfcGF1c2U7XFxuK1xcdHU2NCB0eF9iY2FzdDtcXG4rXFx0dTY0IHR4X21jYXN0O1xcbitcXHR1NjQgdHhfdWNhc3Q7XFxuK1xcdHU2NCB0eF9kZWZlcnJlZDtcXG4rXFx0dTY0IHR4X3RvdGFsX2NvbDtcXG4rXFx0dTY0IHR4X2V4Y19jb2w7XFxuK1xcdHU2NCB0eF9zaW5nbGVfY29sO1xcbitcXHR1NjQgdHhfbXVsdF9jb2w7XFxuK1xcdHU2NCByeF9kaXNjYXJkcztcXG4rXFx0dTY0IHR4X2Rpc2NhcmRzO1xcbit9O1xcbitcXG4gc3RhdGljIHZvaWQga3N6X2NmZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1MzIgYWRkciwgdTggYml0cywgYm9vbCBzZXQpXFxuIHtcXG4gXFx0a3N6X3JtdzgoZGV2LCBhZGRyLCBiaXRzLCBzZXQgPyBiaXRzIDogMCk7XFxuQEAgLTE1OCwxMCArMjA0LDE3IEBAIHN0YXRpYyBpbnQga3N6OF9yZXNldF9zd2l0Y2goc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQga3N6ODg2M19jaGFuZ2VfbXR1KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBmcmFtZV9zaXplKVxcbitzdGF0aWMgaW50IGtzejg4eHhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxcbiB7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGZyYW1lX3NpemU7XFxuIFxcdHU4IGN0cmwyID0gMDtcXG4gXFxuK1xcdGlmICghZHNhX2lzX2NwdV9wb3J0KGRldi1cXHUwMDNlZHMsIHBvcnQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZyYW1lX3NpemUgPSBtdHUgKyBWTEFOX0VUSF9ITEVOICsgRVRIX0ZDU19MRU47XFxuK1xcbiBcXHRpZiAoZnJhbWVfc2l6ZSBcXHUwMDNjPSBLU1o4X0xFR0FMX1BBQ0tFVF9TSVpFKVxcbiBcXHRcXHRjdHJsMiB8PSBLU1o4ODYzX0xFR0FMX1BBQ0tFVF9FTkFCTEU7XFxuIFxcdGVsc2UgaWYgKGZyYW1lX3NpemUgXFx1MDAzZSBLU1o4ODYzX05PUk1BTF9QQUNLRVRfU0laRSlcXG5AQCAtMTcxLDExICsyMjQsMTggQEAgc3RhdGljIGludCBrc3o4ODYzX2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXFxuIFxcdFxcdFxcdEtTWjg4NjNfSFVHRV9QQUNLRVRfRU5BQkxFLCBjdHJsMik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQga3N6ODc5NV9jaGFuZ2VfbXR1KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBmcmFtZV9zaXplKVxcbitzdGF0aWMgaW50IGtzejg3eHhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxcbiB7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4gXFx0dTggY3RybDEgPSAwLCBjdHJsMiA9IDA7XFxuK1xcdHUxNiBmcmFtZV9zaXplO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZGV2LVxcdTAwM2VkcywgcG9ydCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZnJhbWVfc2l6ZSA9IG10dSArIFZMQU5fRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjtcXG4rXFxuIFxcdGlmIChmcmFtZV9zaXplIFxcdTAwM2UgS1NaOF9MRUdBTF9QQUNLRVRfU0laRSlcXG4gXFx0XFx0Y3RybDIgfD0gU1dfTEVHQUxfUEFDS0VUX0RJU0FCTEU7XFxuIFxcdGlmIChmcmFtZV9zaXplIFxcdTAwM2UgS1NaODg2M19OT1JNQUxfUEFDS0VUX1NJWkUpXFxuQEAgLTE4OCwyOSArMjQ4LDE0IEBAIHN0YXRpYyBpbnQga3N6ODc5NV9jaGFuZ2VfbXR1KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBmcmFtZV9zaXplKVxcbiBcXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8yLCBTV19MRUdBTF9QQUNLRVRfRElTQUJMRSwgY3RybDIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzejhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxcbitzdGF0aWMgaW50IGtzejg3eHhfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbiB7XFxuLVxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4tXFx0dTE2IGZyYW1lX3NpemU7XFxuLVxcbi1cXHRpZiAoIWRzYV9pc19jcHVfcG9ydChkZXYtXFx1MDAzZWRzLCBwb3J0KSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRmcmFtZV9zaXplID0gbXR1ICsgVkxBTl9FVEhfSExFTiArIEVUSF9GQ1NfTEVOO1xcbi1cXG4tXFx0c3dpdGNoIChkZXYtXFx1MDAzZWNoaXBfaWQpIHtcXG4tXFx0Y2FzZSBLU1o4Nzk1X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaODc5NF9DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcXG4tXFx0XFx0cmV0dXJuIGtzejg3OTVfY2hhbmdlX210dShkZXYsIGZyYW1lX3NpemUpO1xcbi1cXHRjYXNlIEtTWjg0NjNfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o4OFgzX0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaODg2NF9DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg4OTVfQ0hJUF9JRDpcXG4tXFx0XFx0cmV0dXJuIGtzejg4NjNfY2hhbmdlX210dShkZXYsIGZyYW1lX3NpemUpO1xcbi1cXHR9XFxuK1xcdHJldHVybiBLU1o4Nzk1X0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XFxuK31cXG4gXFxuLVxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rc3RhdGljIGludCBrc3o4OHh4X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4re1xcbitcXHRyZXR1cm4gS1NaODg2M19IVUdFX1BBQ0tFVF9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGtzejhfcG9ydF9xdWV1ZV9zcGxpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IHF1ZXVlcylcXG5AQCAtMTc0Niw2ICsxNzkxLDE1OSBAQCBzdGF0aWMgdm9pZCBrc3o4X3BvcnRfbWlycm9yX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRcXHQgICAgIFBPUlRfTUlSUk9SX1NOSUZGRVIsIGZhbHNlKTtcXG4gfVxcbiBcXG4rc3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKVxcbit7XFxuK1xcdHU4IHJlZztcXG4rXFxuK1xcdHJlZyA9IDB4QzggKyBwb3J0ICogNDtcXG4rXFx0cmVnICs9ICgoMyAtIHF1ZXVlKSAvIDIpICogMjtcXG4rXFx0cmVnKys7XFxuK1xcdHJlZyAtPSAocXVldWUgXFx1MDAyNiAxKTtcXG4rXFx0cmV0dXJuIHJlZztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGtzejg4eDNfdGNfZXRzX2FkZCAtIENvbmZpZ3VyZSBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2hcXG4rICogQGRldjogUG9pbnRlciB0byB0aGUgS1NaIHN3aXRjaCBkZXZpY2Ugc3RydWN0dXJlXFxuKyAqIEBwb3J0OiBQb3J0IG51bWJlciB0byBjb25maWd1cmVcXG4rICogQHA6IFBvaW50ZXIgdG8gb2ZmbG9hZCByZXBsYWNlIHBhcmFtZXRlcnMgZGVzY3JpYmluZyBFVFMgYmFuZHMgYW5kIG1hcHBpbmdcXG4rICpcXG4rICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgdHdvIHNjaGVkdWxpbmcgbW9kZXM6IFN0cmljdCBQcmlvcml0eSBhbmRcXG4rICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLiBCb3RoIG1vZGVzIGhhdmUgZml4ZWQgYmVoYXZpb3I6XFxuKyAqICAgLSBObyBjb25maWd1cmFibGUgcXVldWUtdG8tcHJpb3JpdHkgbWFwcGluZ1xcbisgKiAgIC0gTm8gd2VpZ2h0IGFkanVzdG1lbnQgaW4gV0ZRIG1vZGVcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBzd2l0Y2ggdG8gdXNlIHN0cmljdCBwcmlvcml0eSBtb2RlIGJ5XFxuKyAqIGNsZWFyaW5nIHRoZSBXRlEgZW5hYmxlIGJpdCBmb3IgYWxsIHF1ZXVlcyBhc3NvY2lhdGVkIHdpdGggRVRTIGJhbmRzLlxcbisgKiBJZiBzdHJpY3QgcHJpb3JpdHkgaXMgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCB0aGUgc3dpdGNoIHdpbGwgZGVmYXVsdFxcbisgKiB0byBXRlEgbW9kZS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXFxuKyAqL1xcbitzdGF0aWMgaW50IGtzejg4eDNfdGNfZXRzX2FkZChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXFxuK3tcXG4rXFx0aW50IHJldCwgYmFuZDtcXG4rXFxuK1xcdC8qIE9ubHkgc3RyaWN0IHByaW9yaXR5IG1vZGUgaXMgc3VwcG9ydGVkIGZvciBub3cuXFxuK1xcdCAqIFdGUSBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbiBzdHJpY3QgbW9kZSBpcyBkaXNhYmxlZC5cXG4rXFx0ICovXFxuK1xcdGZvciAoYmFuZCA9IDA7IGJhbmQgXFx1MDAzYyBwLVxcdTAwM2ViYW5kczsgYmFuZCsrKSB7XFxuK1xcdFxcdGludCBxdWV1ZSA9IGtzel9ldHNfYmFuZF90b19xdWV1ZShwLCBiYW5kKTtcXG4rXFx0XFx0dTggcmVnO1xcbitcXG4rXFx0XFx0LyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXNcXG4rXFx0XFx0ICogcG9ydC9xdWV1ZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xcbitcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG4rXFx0XFx0XFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcXG4rXFxuK1xcdFxcdC8qIENsZWFyIFdGUSBlbmFibGUgYml0IHRvIHNlbGVjdCBzdHJpY3QgcHJpb3JpdHkgc2NoZWR1bGluZyAqL1xcbitcXHRcXHRyZXQgPSBrc3pfcm13OChkZXYsIHJlZywgS1NaODg3M19UWFFfV0ZRX0VOQUJMRSwgMCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICoga3N6ODh4M190Y19ldHNfZGVsIC0gUmVzZXQgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKSBjb25maWdcXG4rICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxcbisgKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBLU1ogc3dpdGNoIGRldmljZSBzdHJ1Y3R1cmVcXG4rICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIHJlc2V0XFxuKyAqXFxuKyAqIFRoZSBLU1o4OHgzIHN1cHBvcnRzIG9ubHkgZml4ZWQgc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IG9yXFxuKyAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKSwgd2l0aCBubyByZWNvbmZpZ3VyYXRpb24gb2Ygd2VpZ2h0cyBvclxcbisgKiBxdWV1ZSBtYXBwaW5nLiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgcG9ydOKAmXMgc2NoZWR1bGluZyBtb2RlIHRvXFxuKyAqIHRoZSBkZWZhdWx0LCB3aGljaCBpcyBXRlEsIGJ5IGVuYWJsaW5nIHRoZSBXRlEgYml0IGZvciBhbGwgcXVldWVzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcXG4rICovXFxuK3N0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbit7XFxuK1xcdGludCByZXQsIHF1ZXVlO1xcbitcXG4rXFx0LyogSXRlcmF0ZSBvdmVyIGFsbCB0cmFuc21pdCBxdWV1ZXMgZm9yIHRoaXMgcG9ydCAqL1xcbitcXHRmb3IgKHF1ZXVlID0gMDsgcXVldWUgXFx1MDAzYyBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZW51bV90eF9xdWV1ZXM7IHF1ZXVlKyspIHtcXG4rXFx0XFx0dTggcmVnO1xcbitcXG4rXFx0XFx0LyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXNcXG4rXFx0XFx0ICogcG9ydC9xdWV1ZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xcbitcXHRcXHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcXG4rXFx0XFx0XFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcXG4rXFxuK1xcdFxcdC8qIFNldCBXRlEgZW5hYmxlIGJpdCB0byByZXZlcnQgYmFjayB0byBkZWZhdWx0IHNjaGVkdWxpbmdcXG4rXFx0XFx0ICogbW9kZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsXFxuK1xcdFxcdFxcdCAgICAgICBLU1o4ODczX1RYUV9XRlFfRU5BQkxFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6OF90Y19zZXR1cF9xZGlzY19ldHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKnFvcHQpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCEoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIlBhcmVudCBzaG91bGQgYmUgXFxcXFxcXCJyb290XFxcXFxcXCJcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAocW9wdC1cXHUwMDNlY29tbWFuZCkge1xcbitcXHRjYXNlIFRDX0VUU19SRVBMQUNFOlxcbitcXHRcXHRyZXQgPSBrc3pfdGNfZXRzX3ZhbGlkYXRlKGRldiwgcG9ydCwgXFx1MDAyNnFvcHQtXFx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHJldHVybiBrc3o4OHgzX3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcXHUwMDI2cW9wdC1cXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xcbitcXHRjYXNlIFRDX0VUU19ERVNUUk9ZOlxcbitcXHRcXHRyZXR1cm4ga3N6ODh4M190Y19ldHNfZGVsKGRldiwgcG9ydCk7XFxuK1xcdGNhc2UgVENfRVRTX1NUQVRTOlxcbitcXHRjYXNlIFRDX0VUU19HUkFGVDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6ODd4eF9zZXR1cF90YyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHQgICAgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6XFxuK1xcdFxcdHJldHVybiBrc3pfc2V0dXBfdGNfY2JzKGRzLCBwb3J0LCB0eXBlX2RhdGEpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3o4X3NldHVwX3RjKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxcbit7XFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX0NCUzpcXG4rXFx0XFx0cmV0dXJuIGtzel9zZXR1cF90Y19jYnMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfRVRTOlxcbitcXHRcXHRyZXR1cm4ga3N6OF90Y19zZXR1cF9xZGlzY19ldHMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBrc3o4Nzk1X2NwdV9pbnRlcmZhY2Vfc2VsZWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfcG9ydCAqcCA9IFxcdTAwMjZkZXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbkBAIC0yMDUzLDYgKzIyNTEsMTcxIEBAIHN0YXRpYyBpbnQga3N6OF9lbmFibGVfc3RwX2FkZHIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIGtzejhfd19zdGFfbWFjX3RhYmxlKGRldiwgMCwgXFx1MDAyNmFsdSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcHN0YXRzO1xcbitcXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzO1xcbitcXHRzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKnJhdztcXG4rXFx0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xcbitcXG4rXFx0bWliID0gXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xcbitcXHRzdGF0cyA9IFxcdTAwMjZtaWItXFx1MDAzZXN0YXRzNjQ7XFxuK1xcdHBzdGF0cyA9IFxcdTAwMjZtaWItXFx1MDAzZXBhdXNlX3N0YXRzO1xcbitcXHRyYXcgPSAoc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3ICopbWliLVxcdTAwM2Vjb3VudGVycztcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2bWliLVxcdTAwM2VzdGF0czY0X2xvY2spO1xcbitcXG4rXFx0c3RhdHMtXFx1MDAzZXJ4X3BhY2tldHMgPSByYXctXFx1MDAzZXJ4X2JjYXN0ICsgcmF3LVxcdTAwM2VyeF9tY2FzdCArIHJhdy1cXHUwMDNlcnhfdWNhc3QgK1xcbitcXHRcXHRyYXctXFx1MDAzZXJ4X3BhdXNlO1xcbitcXHRzdGF0cy1cXHUwMDNldHhfcGFja2V0cyA9IHJhdy1cXHUwMDNldHhfYmNhc3QgKyByYXctXFx1MDAzZXR4X21jYXN0ICsgcmF3LVxcdTAwM2V0eF91Y2FzdCArXFxuK1xcdFxcdHJhdy1cXHUwMDNldHhfcGF1c2U7XFxuK1xcbitcXHQvKiBIVyBjb3VudGVycyBhcmUgY291bnRpbmcgYnl0ZXMgKyBGQ1Mgd2hpY2ggaXMgbm90IGFjY2VwdGFibGVcXG4rXFx0ICogZm9yIHJ0bmxfbGlua19zdGF0czY0IGludGVyZmFjZVxcbitcXHQgKi9cXG4rXFx0c3RhdHMtXFx1MDAzZXJ4X2J5dGVzID0gcmF3LVxcdTAwM2VyeCArIHJhdy1cXHUwMDNlcnhfaGkgLSBzdGF0cy1cXHUwMDNlcnhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOO1xcbitcXHRzdGF0cy1cXHUwMDNldHhfYnl0ZXMgPSByYXctXFx1MDAzZXR4ICsgcmF3LVxcdTAwM2V0eF9oaSAtIHN0YXRzLVxcdTAwM2V0eF9wYWNrZXRzICogRVRIX0ZDU19MRU47XFxuK1xcbitcXHRzdGF0cy1cXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9IHJhdy1cXHUwMDNlcnhfdW5kZXJzaXplICsgcmF3LVxcdTAwM2VyeF9mcmFnbWVudHMgK1xcbitcXHRcXHRyYXctXFx1MDAzZXJ4X292ZXJzaXplO1xcbitcXG4rXFx0c3RhdHMtXFx1MDAzZXJ4X2NyY19lcnJvcnMgPSByYXctXFx1MDAzZXJ4X2NyY19lcnI7XFxuK1xcdHN0YXRzLVxcdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSByYXctXFx1MDAzZXJ4X2FsaWduX2VycjtcXG4rXFx0c3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQgPSByYXctXFx1MDAzZXJ4X2Rpc2NhcmRzO1xcbitcXHRzdGF0cy1cXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXFx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgKyBzdGF0cy1cXHUwMDNlcnhfY3JjX2Vycm9ycyArXFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9mcmFtZV9lcnJvcnMgICsgc3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQ7XFxuK1xcbitcXHRzdGF0cy1cXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfbGF0ZV9jb2w7XFxuK1xcdHN0YXRzLVxcdTAwM2V0eF9maWZvX2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfZGlzY2FyZHM7XFxuK1xcdHN0YXRzLVxcdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfZXhjX2NvbDtcXG4rXFx0c3RhdHMtXFx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVxcdTAwM2V0eF93aW5kb3dfZXJyb3JzICsgc3RhdHMtXFx1MDAzZXR4X2ZpZm9fZXJyb3JzICtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzO1xcbitcXG4rXFx0c3RhdHMtXFx1MDAzZW11bHRpY2FzdCA9IHJhdy1cXHUwMDNlcnhfbWNhc3Q7XFxuK1xcdHN0YXRzLVxcdTAwM2Vjb2xsaXNpb25zID0gcmF3LVxcdTAwM2V0eF90b3RhbF9jb2w7XFxuK1xcbitcXHRwc3RhdHMtXFx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9IHJhdy1cXHUwMDNldHhfcGF1c2U7XFxuK1xcdHBzdGF0cy1cXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcmF3LVxcdTAwM2VyeF9wYXVzZTtcXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZtaWItXFx1MDAzZXN0YXRzNjRfbG9jayk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb24gZm9yXFxuKyAqXFx0XFx0XFx0XFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxcbisgKiBAZGV2OiAgICAgICBrc3ogZGV2aWNlXFxuKyAqIEBwcm9wczogICAgIEFycmF5IG9mIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgdG8gYmUgc2V0XFxuKyAqIEBudW1fcHJvcHM6IE51bWJlciBvZiBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheVxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBzZXR0aW5ncyB0byBLU1o4OFgzIGNoaXBcXG4rICogdmFyaWFudHMgKEtTWjg4NzMsIEtTWjg4NjMpLlxcbisgKiBJdCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9ucyBhbGlnbiB3aXRoIHdoYXQgdGhlIGNoaXAgdmFyaWFudCBzdXBwb3J0cyBhbmRcXG4rICogd2FybnMgb3IgZXJyb3JzIG91dCBvbiB1bnN1cHBvcnRlZCBzZXR0aW5ncy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuKyAqL1xcbitzdGF0aWMgaW50IGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXFxuK1xcdFxcdFxcdFxcdFxcdGludCBudW1fcHJvcHMpXFxuK3tcXG4rXFx0c2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzKTtcXG4rXFx0aW50IG1pY3JvYW1wO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wcm9wczsgaSsrKSB7XFxuK1xcdFxcdGlmIChwcm9wc1tpXS52YWx1ZSA9PSAtMSB8fCBpID09IEtTWl9EUklWRVJfU1RSRU5HVEhfSU8pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZGV2X3dhcm4oZGV2LVxcdTAwM2VkZXYsIFxcXCIlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgcHJvcHNbaV0ubmFtZSk7XFxuK1xcdH1cXG4rXFxuK1xcdG1pY3JvYW1wID0gcHJvcHNbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10udmFsdWU7XFxuK1xcdHJldCA9IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoa3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsIGFycmF5X3NpemUsXFxuK1xcdFxcdFxcdFxcdFxcdG1pY3JvYW1wKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKGRldiwga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsXFxuK1xcdFxcdFxcdFxcdFxcdCBhcnJheV9zaXplLCBtaWNyb2FtcCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBrc3pfcm13OChkZXYsIEtTWjg4NzNfUkVHX0dMT0JBTF9DVFJMXzEyLFxcbitcXHRcXHRcXHRLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBrc3o4X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKCkgLSBFeHRyYWN0IGFuZCBhcHBseSBkcml2ZSBzdHJlbmd0aCBjb25maWd1cmF0aW9uc1xcbisgKlxcdFxcdFxcdFxcdCBmcm9tIGRldmljZSB0cmVlIHByb3BlcnRpZXMuXFxuKyAqIEBkZXY6XFx0a3N6IGRldmljZVxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZVxcbisgKiBkZXZpY2UgdHJlZSwgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHN1cHBvcnRlZCBjaGlwIHZhcmlhbnRzLCBhbmQgc2V0c1xcbisgKiB0aGVtIGFjY29yZGluZ2x5LiBBbiBlcnJvciBzaG91bGQgYmUgY3JpdGljYWwgaGVyZSwgYXMgdGhlIGRyaXZlIHN0cmVuZ3RoXFxuKyAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuKyAqL1xcbitzdGF0aWMgaW50IGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIG9mX3Byb3BzW10gPSB7XFxuK1xcdFxcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0hJXSA9IHtcXG4rXFx0XFx0XFx0Lm5hbWUgPSBcXFwibWljcm9jaGlwLGhpLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXFxcIixcXG4rXFx0XFx0XFx0Lm9mZnNldCA9IFNXX0hJX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXFxuK1xcdFxcdFxcdC52YWx1ZSA9IC0xLFxcbitcXHRcXHR9LFxcbitcXHRcXHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9MT10gPSB7XFxuK1xcdFxcdFxcdC5uYW1lID0gXFxcIm1pY3JvY2hpcCxsby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFxcXCIsXFxuK1xcdFxcdFxcdC5vZmZzZXQgPSBTV19MT19TUEVFRF9EUklWRV9TVFJFTkdUSF9TLFxcbitcXHRcXHRcXHQudmFsdWUgPSAtMSxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dID0ge1xcbitcXHRcXHRcXHQubmFtZSA9IFxcXCJtaWNyb2NoaXAsaW8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcXFwiLFxcbitcXHRcXHRcXHQub2Zmc2V0ID0gMCwgLyogZG9uJ3QgY2FyZSAqL1xcbitcXHRcXHRcXHQudmFsdWUgPSAtMSxcXG4rXFx0XFx0fSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlO1xcbitcXHRib29sIGhhdmVfYW55X3Byb3AgPSBmYWxzZTtcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG9mX3Byb3BzKTsgaSsrKSB7XFxuK1xcdFxcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBvZl9wcm9wc1tpXS5uYW1lLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2b2ZfcHJvcHNbaV0udmFsdWUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVkFMKVxcbitcXHRcXHRcXHRkZXZfd2FybihkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWFkICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgb2ZfcHJvcHNbaV0ubmFtZSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aGF2ZV9hbnlfcHJvcCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaGF2ZV9hbnlfcHJvcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRzd2l0Y2ggKGRldi1cXHUwMDNlY2hpcF9pZCkge1xcbitcXHRjYXNlIEtTWjg4WDNfQ0hJUF9JRDpcXG4rXFx0XFx0cmV0dXJuIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIEFSUkFZX1NJWkUob2ZfcHJvcHMpKTtcXG4rXFx0Y2FzZSBLU1o4Nzk1X0NISVBfSUQ6XFxuK1xcdGNhc2UgS1NaODc5NF9DSElQX0lEOlxcbitcXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcXG4rXFx0XFx0cmV0dXJuIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdC8qIEtTWjg4NjQsIEtTWjg4OTUgKi9cXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKG9mX3Byb3BzW2ldLnZhbHVlID09IC0xKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGRldl93YXJuKGRldi1cXHUwMDNlZGV2LCBcXFwiJXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgdmFyaWFudFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IG9mX3Byb3BzW2ldLm5hbWUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5AQCAtMjA3NSw3ICsyNDM4LDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7XFxuK1xcdHJldCA9IGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoZGV2KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTI1NTEsOCArMjkxNCw4IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XFxuIFxcdC5wb3J0X21pcnJvcl9kZWxcXHQ9IGtzejhfcG9ydF9taXJyb3JfZGVsLFxcbiBcXHQuZ2V0X3N0YXRzNjRcXHRcXHQ9IGtzel9nZXRfc3RhdHM2NCxcXG4gXFx0LmdldF9wYXVzZV9zdGF0c1xcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcXG4tXFx0LnBvcnRfY2hhbmdlX210dVxcdD0ga3N6OF9jaGFuZ2VfbXR1LFxcbi1cXHQucG9ydF9tYXhfbXR1XFx0XFx0PSBrc3pfbWF4X210dSxcXG4rXFx0LnBvcnRfY2hhbmdlX210dVxcdD0ga3N6ODh4eF9jaGFuZ2VfbXR1LFxcbitcXHQucG9ydF9tYXhfbXR1XFx0XFx0PSBrc3o4OHh4X21heF9tdHUsXFxuIFxcdC5zdXNwZW5kXFx0XFx0PSBrc3pfc3VzcGVuZCxcXG4gXFx0LnJlc3VtZVxcdFxcdFxcdD0ga3N6X3Jlc3VtZSxcXG4gXFx0LmdldF90c19pbmZvXFx0XFx0PSBrc3pfZ2V0X3RzX2luZm8sXFxuQEAgLTI1NjAsNyArMjkyMyw3IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4NDYzX3N3aXRjaF9vcHMgPSB7XFxuIFxcdC5wb3J0X2h3dHN0YW1wX3NldFxcdD0ga3N6X2h3dHN0YW1wX3NldCxcXG4gXFx0LnBvcnRfdHh0c3RhbXBcXHRcXHQ9IGtzel9wb3J0X3R4dHN0YW1wLFxcbiBcXHQucG9ydF9yeHRzdGFtcFxcdFxcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXFxuLVxcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3pfc2V0dXBfdGMsXFxuK1xcdC5wb3J0X3NldHVwX3RjXFx0XFx0PSBrc3o4X3NldHVwX3RjLFxcbiBcXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXFx0PSBrc3pfcG9ydF9nZXRfZGVmYXVsdF9wcmlvLFxcbiBcXHQucG9ydF9zZXRfZGVmYXVsdF9wcmlvXFx0PSBrc3pfcG9ydF9zZXRfZGVmYXVsdF9wcmlvLFxcbiBcXHQucG9ydF9nZXRfZHNjcF9wcmlvXFx0PSBrc3pfcG9ydF9nZXRfZHNjcF9wcmlvLFxcbkBAIC0yNjAxLDggKzI5NjQsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzID0ge1xcbiBcXHQucG9ydF9taXJyb3JfZGVsXFx0PSBrc3o4X3BvcnRfbWlycm9yX2RlbCxcXG4gXFx0LmdldF9zdGF0czY0XFx0XFx0PSBrc3pfZ2V0X3N0YXRzNjQsXFxuIFxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IGtzel9nZXRfcGF1c2Vfc3RhdHMsXFxuLVxcdC5wb3J0X2NoYW5nZV9tdHVcXHQ9IGtzejhfY2hhbmdlX210dSxcXG4tXFx0LnBvcnRfbWF4X210dVxcdFxcdD0ga3N6X21heF9tdHUsXFxuK1xcdC5wb3J0X2NoYW5nZV9tdHVcXHQ9IGtzejg3eHhfY2hhbmdlX210dSxcXG4rXFx0LnBvcnRfbWF4X210dVxcdFxcdD0ga3N6ODd4eF9tYXhfbXR1LFxcbiBcXHQuc3VzcGVuZFxcdFxcdD0ga3N6X3N1c3BlbmQsXFxuIFxcdC5yZXN1bWVcXHRcXHRcXHQ9IGtzel9yZXN1bWUsXFxuIFxcdC5nZXRfdHNfaW5mb1xcdFxcdD0ga3N6X2dldF90c19pbmZvLFxcbkBAIC0yNjEwLDcgKzI5NzMsNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzID0ge1xcbiBcXHQucG9ydF9od3RzdGFtcF9zZXRcXHQ9IGtzel9od3RzdGFtcF9zZXQsXFxuIFxcdC5wb3J0X3R4dHN0YW1wXFx0XFx0PSBrc3pfcG9ydF90eHRzdGFtcCxcXG4gXFx0LnBvcnRfcnh0c3RhbXBcXHRcXHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxcbi1cXHQucG9ydF9zZXR1cF90Y1xcdFxcdD0ga3N6X3NldHVwX3RjLFxcbitcXHQucG9ydF9zZXR1cF90Y1xcdFxcdD0ga3N6ODd4eF9zZXR1cF90YyxcXG4gXFx0LnBvcnRfZ2V0X2RlZmF1bHRfcHJpb1xcdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcXG4gXFx0LnBvcnRfc2V0X2RlZmF1bHRfcHJpb1xcdD0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcXG4gXFx0LnBvcnRfZ2V0X2RzY3BfcHJpb1xcdD0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbyxcXG5AQCAtMjY1Miw4ICszMDE1LDggQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg4eHhfc3dpdGNoX29wcyA9IHtcXG4gXFx0LnBvcnRfbWlycm9yX2RlbFxcdD0ga3N6OF9wb3J0X21pcnJvcl9kZWwsXFxuIFxcdC5nZXRfc3RhdHM2NFxcdFxcdD0ga3N6X2dldF9zdGF0czY0LFxcbiBcXHQuZ2V0X3BhdXNlX3N0YXRzXFx0PSBrc3pfZ2V0X3BhdXNlX3N0YXRzLFxcbi1cXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBrc3o4X2NoYW5nZV9tdHUsXFxuLVxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGtzel9tYXhfbXR1LFxcbitcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBrc3o4OHh4X2NoYW5nZV9tdHUsXFxuK1xcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGtzejg4eHhfbWF4X210dSxcXG4gXFx0LmdldF93b2xcXHRcXHQ9IGtzel9nZXRfd29sLFxcbiBcXHQuc2V0X3dvbFxcdFxcdD0ga3N6X3NldF93b2wsXFxuIFxcdC5zdXNwZW5kXFx0XFx0PSBrc3pfc3VzcGVuZCxcXG5AQCAtMjY2Myw3ICszMDI2LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg4eHhfc3dpdGNoX29wcyA9IHtcXG4gXFx0LnBvcnRfaHd0c3RhbXBfc2V0XFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxcbiBcXHQucG9ydF90eHRzdGFtcFxcdFxcdD0ga3N6X3BvcnRfdHh0c3RhbXAsXFxuIFxcdC5wb3J0X3J4dHN0YW1wXFx0XFx0PSBrc3pfcG9ydF9yeHRzdGFtcCxcXG4tXFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IGtzel9zZXR1cF90YyxcXG4rXFx0LnBvcnRfc2V0dXBfdGNcXHRcXHQ9IGtzejhfc2V0dXBfdGMsXFxuIFxcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXFxuIFxcdC5wb3J0X3NldF9kZWZhdWx0X3ByaW9cXHQ9IGtzel9wb3J0X3NldF9kZWZhdWx0X3ByaW8sXFxuIFxcdC5wb3J0X2dldF9kc2NwX3ByaW9cXHQ9IGtzel9wb3J0X2dldF9kc2NwX3ByaW8sXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcXG5pbmRleCBmM2YwYzk4ZGZiNWE3Zi4uM2VlOTk1NTQ1YzU3OTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9oc3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc2EuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pZWVlODAyMXEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zd2l0Y2hkZXYuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrc3o5NDc3X3JlZy5oXFxcIlxcbkBAIC02MCw2ICs2MSwxMSBAQCBzdGF0aWMgaW50IGtzejk0NzdfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxcbiBcXHRcXHRcXHRcXHQgIFJFR19TV19NVFVfTUFTSywgZnJhbWVfc2l6ZSk7XFxuIH1cXG4gXFxuK2ludCBrc3o5NDc3X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4re1xcbitcXHRyZXR1cm4gS1NaOTQ3N19NQVhfRlJBTUVfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBrc3o5NDc3X3dhaXRfdmxhbl9jdHJsX3JlYWR5KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHZhbDtcXG5AQCAtNDc4LDggKzQ4NCw4IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19oYWxmX2R1cGxleF9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1pbnQga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcXG4tXFx0XFx0XFx0ICAgdTY0IHR4X2xhdGVfY29sKVxcbitzdGF0aWMgaW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgdTY0IHR4X2xhdGVfY29sKVxcbiB7XFxuIFxcdHU4IHN0YXR1cztcXG4gXFx0aW50IHJldDtcXG5AQCAtNDk3LDYgKzUwMywyNCBAQCBpbnQga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQga3N6OTQ3N19yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfc3RhdHNfcmF3ICpyYXc7XFxuK1xcdHN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGtzel9yX21pYl9zdGF0czY0KGRldiwgcG9ydCk7XFxuK1xcbitcXHRpZiAoZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VwaHlfZXJyYXRhXzk0NzcgXFx1MDAyNlxcdTAwMjYgIWtzel9pc19zZ21paV9wb3J0KGRldiwgcG9ydCkpIHtcXG4rXFx0XFx0bWliID0gXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xcbitcXHRcXHRyYXcgPSAoc3RydWN0IGtzel9zdGF0c19yYXcgKiltaWItXFx1MDAzZWNvdW50ZXJzO1xcbitcXG4rXFx0XFx0cmV0ID0ga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihkZXYsIHBvcnQsIHJhdy1cXHUwMDNldHhfbGF0ZV9jb2wpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIG1vbml0b3IgdHJhbnNtaXNzaW9uIGhhbHRcXFxcblxcXCIpO1xcbitcXHR9XFxuK307XFxuK1xcbiB2b2lkIGtzejk0NzdfcG9ydF9pbml0X2NudChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWIgPSBcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1twb3J0XS5taWI7XFxuQEAgLTExNzYsNiArMTIwMCw1OCBAQCB2b2lkIGtzejk0NzdfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdCAgICAgUE9SVF9NSVJST1JfU05JRkZFUiwgZmFsc2UpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBrc3o5NDc3X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbit7XFxuK1xcdGNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXhtaWlfY3RybDE7XFxuK1xcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4rXFx0Ym9vbCBnYml0ID0gZmFsc2U7XFxuK1xcdHU4IGRhdGE4O1xcbitcXHRib29sIHZhbDtcXG4rXFxuK1xcdGtzel9wcmVhZDgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBcXHUwMDI2ZGF0YTgpO1xcbitcXG4rXFx0dmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7XFxuK1xcbitcXHRpZiAodmFsID09IGJpdHZhbFtQX0dNSUlfMUdCSVRdKVxcbitcXHRcXHRnYml0ID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBnYml0O1xcbit9XFxuK1xcbitzdGF0aWMgcGh5X2ludGVyZmFjZV90IGtzejk0NzdfZ2V0X3htaWkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgZ2JpdClcXG4re1xcbitcXHRjb25zdCB1OCAqYml0dmFsID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2V4bWlpX2N0cmwxO1xcbitcXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcdHU4IGRhdGE4O1xcbitcXHR1OCB2YWw7XFxuK1xcbitcXHRrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgXFx1MDAyNmRhdGE4KTtcXG4rXFxuK1xcdHZhbCA9IEZJRUxEX0dFVChQX01JSV9TRUxfTSwgZGF0YTgpO1xcbitcXG4rXFx0aWYgKHZhbCA9PSBiaXR2YWxbUF9NSUlfU0VMXSkge1xcbitcXHRcXHRpZiAoZ2JpdClcXG4rXFx0XFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcXG4rXFx0fSBlbHNlIGlmICh2YWwgPT0gYml0dmFsW1BfUk1JSV9TRUxdKSB7XFxuK1xcdFxcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk7XFxuK1xcdFxcdGlmIChkYXRhOCBcXHUwMDI2IFBfUkdNSUlfSURfRUdfRU5BQkxFKVxcbitcXHRcXHRcXHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDtcXG4rXFx0XFx0aWYgKGRhdGE4IFxcdTAwMjYgUF9SR01JSV9JRF9JR19FTkFCTEUpIHtcXG4rXFx0XFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ7XFxuK1xcdFxcdFxcdGlmIChkYXRhOCBcXHUwMDI2IFBfUkdNSUlfSURfRUdfRU5BQkxFKVxcbitcXHRcXHRcXHRcXHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGludGVyZmFjZTtcXG4rfVxcbitcXG4gc3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF9pbnRlcmZhY2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuIHtcXG4gXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG5AQCAtMTE4NCw5ICsxMjYwLDkgQEAgc3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF9pbnRlcmZhY2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuIFxcdGlmIChkZXYtXFx1MDAzZWluZm8tXFx1MDAzZWludGVybmFsX3BoeVtwb3J0XSlcXG4gXFx0XFx0cmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTtcXG4gXFxuLVxcdGdiaXQgPSBrc3pfZ2V0X2diaXQoZGV2LCBwb3J0KTtcXG4rXFx0Z2JpdCA9IGtzejk0NzdfZ2V0X2diaXQoZGV2LCBwb3J0KTtcXG4gXFxuLVxcdGludGVyZmFjZSA9IGtzel9nZXRfeG1paShkZXYsIHBvcnQsIGdiaXQpO1xcbitcXHRpbnRlcmZhY2UgPSBrc3o5NDc3X2dldF94bWlpKGRldiwgcG9ydCwgZ2JpdCk7XFxuIFxcbiBcXHRyZXR1cm4gaW50ZXJmYWNlO1xcbiB9XFxuQEAgLTEzMzUsNiArMTQxMSwyOCBAQCBzdGF0aWMgdm9pZCBrc3o5NDc3X3BvcnRfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgY3B1X3BvcnQpXFxuIFxcdGtzel9wd3JpdGU4KGRldiwgcG9ydCwgcmVnc1tSRUdfUE9SVF9QTUVfQ1RSTF0sIDApO1xcbiB9XFxuIFxcbitpbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuK3tcXG4rXFx0dTMyIHF1ZXVlX21hcCA9IDA7XFxuK1xcdGludCBpcG07XFxuK1xcbitcXHRmb3IgKGlwbSA9IDA7IGlwbSBcXHUwMDNjIGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbnVtX2lwbXM7IGlwbSsrKSB7XFxuK1xcdFxcdGludCBxdWV1ZTtcXG4rXFxuK1xcdFxcdC8qIFRyYWZmaWMgVHlwZSAoVFQpIGlzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEludGVybmFsIFByaW9yaXR5XFxuK1xcdFxcdCAqIE1hcCAoSVBNKSBpbiB0aGUgc3dpdGNoLiBUcmFmZmljIENsYXNzIChUQykgaXNcXG4rXFx0XFx0ICogY29ycmVzcG9uZGluZyB0byB0aGUgcXVldWUgaW4gdGhlIHN3aXRjaC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHF1ZXVlID0gaWVlZTgwMjFxX3R0X3RvX3RjKGlwbSwgZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fdHhfcXVldWVzKTtcXG4rXFx0XFx0aWYgKHF1ZXVlIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHF1ZXVlO1xcbitcXG4rXFx0XFx0cXVldWVfbWFwIHw9IHF1ZXVlIFxcdTAwM2NcXHUwMDNjIChpcG0gKiBLU1o5NDc3X1BPUlRfVENfTUFQX1MpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4ga3N6X3B3cml0ZTMyKGRldiwgcG9ydCwgS1NaOTQ3N19QT1JUX01SSV9UQ19NQVBfXzQsIHF1ZXVlX21hcCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6OTQ3N19kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5AQCAtMTUxNyw2ICsxNjE1LDU4IEBAIGludCBrc3o5NDc3X2VuYWJsZV9zdHBfYWRkcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGtzejk0NzdfcGFyc2VfZHJpdmVfc3RyZW5ndGgoKSAtIEV4dHJhY3QgYW5kIGFwcGx5IGRyaXZlIHN0cmVuZ3RoXFxuKyAqXFx0XFx0XFx0XFx0ICAgIGNvbmZpZ3VyYXRpb25zIGZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy5cXG4rICogQGRldjpcXHRrc3ogZGV2aWNlXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIGZyb20gdGhlXFxuKyAqIGRldmljZSB0cmVlLCB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGNoaXAgdmFyaWFudHMsIGFuZCBzZXRzXFxuKyAqIHRoZW0gYWNjb3JkaW5nbHkuIEFuIGVycm9yIHNob3VsZCBiZSBjcml0aWNhbCBoZXJlLCBhcyB0aGUgZHJpdmUgc3RyZW5ndGhcXG4rICogc2V0dGluZ3MgYXJlIGNydWNpYWwgZm9yIEVNSSBjb21wbGlhbmNlLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbnQga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHtcXG4rXFx0XFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSEldID0ge1xcbitcXHRcXHRcXHQubmFtZSA9IFxcXCJtaWNyb2NoaXAsaGktZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcXFwiLFxcbitcXHRcXHRcXHQub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcXG4rXFx0XFx0XFx0LnZhbHVlID0gLTEsXFxuK1xcdFxcdH0sXFxuK1xcdFxcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0xPXSA9IHtcXG4rXFx0XFx0XFx0Lm5hbWUgPSBcXFwibWljcm9jaGlwLGxvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXFxcIixcXG4rXFx0XFx0XFx0Lm9mZnNldCA9IFNXX0xPX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXFxuK1xcdFxcdFxcdC52YWx1ZSA9IC0xLFxcbitcXHRcXHR9LFxcbitcXHRcXHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10gPSB7XFxuK1xcdFxcdFxcdC5uYW1lID0gXFxcIm1pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFxcXCIsXFxuK1xcdFxcdFxcdC5vZmZzZXQgPSAwLCAvKiBkb24ndCBjYXJlICovXFxuK1xcdFxcdFxcdC52YWx1ZSA9IC0xLFxcbitcXHRcXHR9LFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGU7XFxuK1xcdGJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpKyspIHtcXG4rXFx0XFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIG9mX3Byb3BzW2ldLm5hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZvZl9wcm9wc1tpXS52YWx1ZSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FSU5WQUwpXFxuK1xcdFxcdFxcdGRldl93YXJuKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWQgJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBvZl9wcm9wc1tpXS5uYW1lKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRoYXZlX2FueV9wcm9wID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFoYXZlX2FueV9wcm9wKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcywgQVJSQVlfU0laRShvZl9wcm9wcykpO1xcbit9XFxuIHN0YXRpYyBpbnQga3N6OTQ3N19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbkBAIC0xNTM5LDcgKzE2ODksNyBAQCBzdGF0aWMgaW50IGtzejk0Nzdfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoZGV2KTtcXG4rXFx0cmV0ID0ga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjA1Miw3ICsyMjAyLDcgQEAgY29uc3Qgc3RydWN0IGtzel9kZXZfb3BzIGtzejk0NzdfZGV2X29wcyA9IHtcXG4gXFx0LmNmZ19wb3J0X21lbWJlciA9IGtzejk0NzdfY2ZnX3BvcnRfbWVtYmVyLFxcbiBcXHQucl9taWJfY250ID0ga3N6OTQ3N19yX21pYl9jbnQsXFxuIFxcdC5yX21pYl9wa3QgPSBrc3o5NDc3X3JfbWliX3BrdCxcXG4tXFx0LnJfbWliX3N0YXQ2NCA9IGtzel9yX21pYl9zdGF0czY0LFxcbitcXHQucl9taWJfc3RhdDY0ID0ga3N6OTQ3N19yX21pYl9zdGF0czY0LFxcbiBcXHQuZnJlZXplX21pYiA9IGtzejk0NzdfZnJlZXplX21pYixcXG4gXFx0LnBvcnRfaW5pdF9jbnQgPSBrc3o5NDc3X3BvcnRfaW5pdF9jbnQsXFxuIFxcdC5wbWVfd3JpdGU4ID0ga3N6X3dyaXRlOCxcXG5AQCAtMjA5OCw3ICsyMjQ4LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejk0Nzdfc3dpdGNoX29wcyA9IHtcXG4gXFx0LmdldF9zdGF0czY0XFx0XFx0PSBrc3pfZ2V0X3N0YXRzNjQsXFxuIFxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IGtzel9nZXRfcGF1c2Vfc3RhdHMsXFxuIFxcdC5wb3J0X2NoYW5nZV9tdHVcXHQ9IGtzejk0NzdfY2hhbmdlX210dSxcXG4tXFx0LnBvcnRfbWF4X210dVxcdFxcdD0ga3N6X21heF9tdHUsXFxuK1xcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGtzejk0NzdfbWF4X210dSxcXG4gXFx0LmdldF93b2xcXHRcXHQ9IGtzel9nZXRfd29sLFxcbiBcXHQuc2V0X3dvbFxcdFxcdD0ga3N6X3NldF93b2wsXFxuIFxcdC5zdXNwZW5kXFx0XFx0PSBrc3pfc3VzcGVuZCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaFxcbmluZGV4IDkyYTFkODg5MjI0ZDNlLi5hODRjMDAwMDAwZTY2ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5oXFxuQEAgLTIxLDYgKzIxLDcgQEAgdm9pZCBrc3o5NDc3X2ZyZWV6ZV9taWIoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGJvb2wgZnJlZXplKTtcXG4gdm9pZCBrc3o5NDc3X3BvcnRfaW5pdF9jbnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xcbiBpbnQga3N6OTQ3N19wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdFxcdGJvb2wgZmxhZywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4raW50IGtzejk0NzdfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KTtcXG4gaW50IGtzejk0NzdfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbkBAIC0zMSw4ICszMiw2IEBAIGludCBrc3o5NDc3X3BvcnRfbWlycm9yX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRcXHQgICAgYm9vbCBpbmdyZXNzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiB2b2lkIGtzejk0NzdfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGRzYV9tYWxsX21pcnJvcl90Y19lbnRyeSAqbWlycm9yKTtcXG4taW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXFxuLVxcdFxcdFxcdCAgIHU2NCB0eF9sYXRlX2NvbCk7XFxuIGludCBrc3o5NDc3X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdCAgICAgZHNhX2ZkYl9kdW1wX2NiX3QgKmNiLCB2b2lkICpkYXRhKTtcXG4gaW50IGtzejk0NzdfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbkBAIC00NSw2ICs0NCw3IEBAIGludCBrc3o5NDc3X21kYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfbWRiICptZGIsIHN0cnVjdCBkc2FfZGIgZGIpO1xcbiBpbnQga3N6OTQ3N19lbmFibGVfc3RwX2FkZHIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuIHZvaWQga3N6OTQ3N19wb3J0X3F1ZXVlX3NwbGl0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcXG4raW50IGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcXG4gXFxuIGludCBrc3o5NDc3X3BvcnRfYWNsX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xcbiB2b2lkIGtzejk0NzdfcG9ydF9hY2xfZnJlZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG5pbmRleCBkMTcyNjc3OGJiNDg4ZS4uNjdhYjZkZGI5ZTUzZjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xcbkBAIC0zNyw4MiArMzcsNiBAQFxcbiBcXG4gI2RlZmluZSBNSUJfQ09VTlRFUl9OVU0gMHgyMFxcbiBcXG4tc3RydWN0IGtzel9zdGF0c19yYXcge1xcbi1cXHR1NjQgcnhfaGk7XFxuLVxcdHU2NCByeF91bmRlcnNpemU7XFxuLVxcdHU2NCByeF9mcmFnbWVudHM7XFxuLVxcdHU2NCByeF9vdmVyc2l6ZTtcXG4tXFx0dTY0IHJ4X2phYmJlcnM7XFxuLVxcdHU2NCByeF9zeW1ib2xfZXJyO1xcbi1cXHR1NjQgcnhfY3JjX2VycjtcXG4tXFx0dTY0IHJ4X2FsaWduX2VycjtcXG4tXFx0dTY0IHJ4X21hY19jdHJsO1xcbi1cXHR1NjQgcnhfcGF1c2U7XFxuLVxcdHU2NCByeF9iY2FzdDtcXG4tXFx0dTY0IHJ4X21jYXN0O1xcbi1cXHR1NjQgcnhfdWNhc3Q7XFxuLVxcdHU2NCByeF82NF9vcl9sZXNzO1xcbi1cXHR1NjQgcnhfNjVfMTI3O1xcbi1cXHR1NjQgcnhfMTI4XzI1NTtcXG4tXFx0dTY0IHJ4XzI1Nl81MTE7XFxuLVxcdHU2NCByeF81MTJfMTAyMztcXG4tXFx0dTY0IHJ4XzEwMjRfMTUyMjtcXG4tXFx0dTY0IHJ4XzE1MjNfMjAwMDtcXG4tXFx0dTY0IHJ4XzIwMDE7XFxuLVxcdHU2NCB0eF9oaTtcXG4tXFx0dTY0IHR4X2xhdGVfY29sO1xcbi1cXHR1NjQgdHhfcGF1c2U7XFxuLVxcdHU2NCB0eF9iY2FzdDtcXG4tXFx0dTY0IHR4X21jYXN0O1xcbi1cXHR1NjQgdHhfdWNhc3Q7XFxuLVxcdHU2NCB0eF9kZWZlcnJlZDtcXG4tXFx0dTY0IHR4X3RvdGFsX2NvbDtcXG4tXFx0dTY0IHR4X2V4Y19jb2w7XFxuLVxcdHU2NCB0eF9zaW5nbGVfY29sO1xcbi1cXHR1NjQgdHhfbXVsdF9jb2w7XFxuLVxcdHU2NCByeF90b3RhbDtcXG4tXFx0dTY0IHR4X3RvdGFsO1xcbi1cXHR1NjQgcnhfZGlzY2FyZHM7XFxuLVxcdHU2NCB0eF9kaXNjYXJkcztcXG4tfTtcXG4tXFxuLXN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyB7XFxuLVxcdHU2NCByeDtcXG4tXFx0dTY0IHJ4X2hpO1xcbi1cXHR1NjQgcnhfdW5kZXJzaXplO1xcbi1cXHR1NjQgcnhfZnJhZ21lbnRzO1xcbi1cXHR1NjQgcnhfb3ZlcnNpemU7XFxuLVxcdHU2NCByeF9qYWJiZXJzO1xcbi1cXHR1NjQgcnhfc3ltYm9sX2VycjtcXG4tXFx0dTY0IHJ4X2NyY19lcnI7XFxuLVxcdHU2NCByeF9hbGlnbl9lcnI7XFxuLVxcdHU2NCByeF9tYWNfY3RybDtcXG4tXFx0dTY0IHJ4X3BhdXNlO1xcbi1cXHR1NjQgcnhfYmNhc3Q7XFxuLVxcdHU2NCByeF9tY2FzdDtcXG4tXFx0dTY0IHJ4X3VjYXN0O1xcbi1cXHR1NjQgcnhfNjRfb3JfbGVzcztcXG4tXFx0dTY0IHJ4XzY1XzEyNztcXG4tXFx0dTY0IHJ4XzEyOF8yNTU7XFxuLVxcdHU2NCByeF8yNTZfNTExO1xcbi1cXHR1NjQgcnhfNTEyXzEwMjM7XFxuLVxcdHU2NCByeF8xMDI0XzE1MjI7XFxuLVxcdHU2NCB0eDtcXG4tXFx0dTY0IHR4X2hpO1xcbi1cXHR1NjQgdHhfbGF0ZV9jb2w7XFxuLVxcdHU2NCB0eF9wYXVzZTtcXG4tXFx0dTY0IHR4X2JjYXN0O1xcbi1cXHR1NjQgdHhfbWNhc3Q7XFxuLVxcdHU2NCB0eF91Y2FzdDtcXG4tXFx0dTY0IHR4X2RlZmVycmVkO1xcbi1cXHR1NjQgdHhfdG90YWxfY29sO1xcbi1cXHR1NjQgdHhfZXhjX2NvbDtcXG4tXFx0dTY0IHR4X3NpbmdsZV9jb2w7XFxuLVxcdHU2NCB0eF9tdWx0X2NvbDtcXG4tXFx0dTY0IHJ4X2Rpc2NhcmRzO1xcbi1cXHR1NjQgdHhfZGlzY2FyZHM7XFxuLX07XFxuLVxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGtzel9taWJfbmFtZXMga3N6ODh4eF9taWJfbmFtZXNbXSA9IHtcXG4gXFx0eyAweDAwLCBcXFwicnhcXFwiIH0sXFxuIFxcdHsgMHgwMSwgXFxcInJ4X2hpXFxcIiB9LFxcbkBAIC0xODksMjggKzExMyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X21pYl9uYW1lcyBrc3o5NDc3X21pYl9uYW1lc1tdID0ge1xcbiBcXHR7IDB4ODMsIFxcXCJ0eF9kaXNjYXJkc1xcXCIgfSxcXG4gfTtcXG4gXFxuLXN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Age1xcbi1cXHRjb25zdCBjaGFyICpuYW1lO1xcbi1cXHRpbnQgb2Zmc2V0O1xcbi1cXHRpbnQgdmFsdWU7XFxuLX07XFxuLVxcbi1lbnVtIGtzel9kcml2ZXJfc3RyZW5ndGhfdHlwZSB7XFxuLVxcdEtTWl9EUklWRVJfU1RSRU5HVEhfSEksXFxuLVxcdEtTWl9EUklWRVJfU1RSRU5HVEhfTE8sXFxuLVxcdEtTWl9EUklWRVJfU1RSRU5HVEhfSU8sXFxuLX07XFxuLVxcbi0vKipcXG4tICogc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAtIGRyaXZlIHN0cmVuZ3RoIG1hcHBpbmdcXG4tICogQHJlZ192YWw6XFx0cmVnaXN0ZXIgdmFsdWVcXG4tICogQG1pY3JvYW1wOlxcdG1pY3JvYW1wIHZhbHVlXFxuLSAqL1xcbi1zdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIHtcXG4tXFx0dTMyIHJlZ192YWw7XFxuLVxcdHUzMiBtaWNyb2FtcDtcXG4tfTtcXG4tXFxuIC8qIGtzejk0NzdfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaOTQ3NyB2YXJpYW50c1xcbiAgKlxcbiAgKiBUaGlzIHZhbHVlcyBhcmUgbm90IGRvY3VtZW50ZWQgaW4gS1NaOTQ3NyB2YXJpYW50cyBidXQgY29uZmlybWVkIGJ5XFxuQEAgLTI0NiwxNSArMTQ4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHNbXSA9IHtcXG4gXFx0eyBTV19EUklWRV9TVFJFTkdUSF8yOE1BLCAyODAwMCB9LFxcbiB9O1xcbiBcXG4tLyoga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMgLSBEcml2ZSBzdHJlbmd0aCBtYXBwaW5nIGZvciBLU1o4ODYzLCBLU1o4ODczLCAuLlxcbi0gKlxcdFxcdFxcdCAgICAgdmFyaWFudHMuXFxuLSAqIFRoaXMgdmFsdWVzIGFyZSBkb2N1bWVudGVkIGluIEtTWjg4NzMgYW5kIEtTWjg4NjMgZGF0YXNoZWV0cy5cXG4tICovXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7XFxuLVxcdHsgMCwgIDgwMDAgfSxcXG4tXFx0eyBLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIDE2MDAwIH0sXFxuLX07XFxuLVxcbiAvKipcXG4gICoga3N6X3BoeWxpbmtfbWFjX2Rpc2FibGVfdHhfbHBpKCkgLSBDYWxsYmFjayB0byBzaWduYWwgTFBJIHN1cHBvcnQgKER1bW15KVxcbiAgKiBAY29uZmlnOiBwaHlsaW5rIGNvbmZpZyBzdHJ1Y3R1cmVcXG5AQCAtMjAxMyw3ICsxOTA2LDYgQEAgdm9pZCBrc3pfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4gXFx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cztcXG4gXFx0c3RydWN0IGtzel9zdGF0c19yYXcgKnJhdztcXG4gXFx0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xcbi1cXHRpbnQgcmV0O1xcbiBcXG4gXFx0bWliID0gXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xcbiBcXHRzdGF0cyA9IFxcdTAwMjZtaWItXFx1MDAzZXN0YXRzNjQ7XFxuQEAgLTIwNTUsNjEgKzE5NDcsNiBAQCB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbiBcXHRwc3RhdHMtXFx1MDAzZXJ4X3BhdXNlX2ZyYW1lcyA9IHJhdy1cXHUwMDNlcnhfcGF1c2U7XFxuIFxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2bWliLVxcdTAwM2VzdGF0czY0X2xvY2spO1xcbi1cXG4tXFx0aWYgKGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcGh5X2VycmF0YV85NDc3IFxcdTAwMjZcXHUwMDI2ICFrc3pfaXNfc2dtaWlfcG9ydChkZXYsIHBvcnQpKSB7XFxuLVxcdFxcdHJldCA9IGtzejk0NzdfZXJyYXRhX21vbml0b3IoZGV2LCBwb3J0LCByYXctXFx1MDAzZXR4X2xhdGVfY29sKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBtb25pdG9yIHRyYW5zbWlzc2lvbiBoYWx0XFxcXG5cXFwiKTtcXG4tXFx0fVxcbi19XFxuLVxcbi12b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4te1xcbi1cXHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcHN0YXRzO1xcbi1cXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzO1xcbi1cXHRzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKnJhdztcXG4tXFx0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xcbi1cXG4tXFx0bWliID0gXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xcbi1cXHRzdGF0cyA9IFxcdTAwMjZtaWItXFx1MDAzZXN0YXRzNjQ7XFxuLVxcdHBzdGF0cyA9IFxcdTAwMjZtaWItXFx1MDAzZXBhdXNlX3N0YXRzO1xcbi1cXHRyYXcgPSAoc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3ICopbWliLVxcdTAwM2Vjb3VudGVycztcXG4tXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2bWliLVxcdTAwM2VzdGF0czY0X2xvY2spO1xcbi1cXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X3BhY2tldHMgPSByYXctXFx1MDAzZXJ4X2JjYXN0ICsgcmF3LVxcdTAwM2VyeF9tY2FzdCArIHJhdy1cXHUwMDNlcnhfdWNhc3QgK1xcbi1cXHRcXHRyYXctXFx1MDAzZXJ4X3BhdXNlO1xcbi1cXHRzdGF0cy1cXHUwMDNldHhfcGFja2V0cyA9IHJhdy1cXHUwMDNldHhfYmNhc3QgKyByYXctXFx1MDAzZXR4X21jYXN0ICsgcmF3LVxcdTAwM2V0eF91Y2FzdCArXFxuLVxcdFxcdHJhdy1cXHUwMDNldHhfcGF1c2U7XFxuLVxcbi1cXHQvKiBIVyBjb3VudGVycyBhcmUgY291bnRpbmcgYnl0ZXMgKyBGQ1Mgd2hpY2ggaXMgbm90IGFjY2VwdGFibGVcXG4tXFx0ICogZm9yIHJ0bmxfbGlua19zdGF0czY0IGludGVyZmFjZVxcbi1cXHQgKi9cXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X2J5dGVzID0gcmF3LVxcdTAwM2VyeCArIHJhdy1cXHUwMDNlcnhfaGkgLSBzdGF0cy1cXHUwMDNlcnhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOO1xcbi1cXHRzdGF0cy1cXHUwMDNldHhfYnl0ZXMgPSByYXctXFx1MDAzZXR4ICsgcmF3LVxcdTAwM2V0eF9oaSAtIHN0YXRzLVxcdTAwM2V0eF9wYWNrZXRzICogRVRIX0ZDU19MRU47XFxuLVxcbi1cXHRzdGF0cy1cXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9IHJhdy1cXHUwMDNlcnhfdW5kZXJzaXplICsgcmF3LVxcdTAwM2VyeF9mcmFnbWVudHMgK1xcbi1cXHRcXHRyYXctXFx1MDAzZXJ4X292ZXJzaXplO1xcbi1cXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X2NyY19lcnJvcnMgPSByYXctXFx1MDAzZXJ4X2NyY19lcnI7XFxuLVxcdHN0YXRzLVxcdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSByYXctXFx1MDAzZXJ4X2FsaWduX2VycjtcXG4tXFx0c3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQgPSByYXctXFx1MDAzZXJ4X2Rpc2NhcmRzO1xcbi1cXHRzdGF0cy1cXHUwMDNlcnhfZXJyb3JzID0gc3RhdHMtXFx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgKyBzdGF0cy1cXHUwMDNlcnhfY3JjX2Vycm9ycyArXFxuLVxcdFxcdHN0YXRzLVxcdTAwM2VyeF9mcmFtZV9lcnJvcnMgICsgc3RhdHMtXFx1MDAzZXJ4X2Ryb3BwZWQ7XFxuLVxcbi1cXHRzdGF0cy1cXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfbGF0ZV9jb2w7XFxuLVxcdHN0YXRzLVxcdTAwM2V0eF9maWZvX2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfZGlzY2FyZHM7XFxuLVxcdHN0YXRzLVxcdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyA9IHJhdy1cXHUwMDNldHhfZXhjX2NvbDtcXG4tXFx0c3RhdHMtXFx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVxcdTAwM2V0eF93aW5kb3dfZXJyb3JzICsgc3RhdHMtXFx1MDAzZXR4X2ZpZm9fZXJyb3JzICtcXG4tXFx0XFx0c3RhdHMtXFx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzO1xcbi1cXG4tXFx0c3RhdHMtXFx1MDAzZW11bHRpY2FzdCA9IHJhdy1cXHUwMDNlcnhfbWNhc3Q7XFxuLVxcdHN0YXRzLVxcdTAwM2Vjb2xsaXNpb25zID0gcmF3LVxcdTAwM2V0eF90b3RhbF9jb2w7XFxuLVxcbi1cXHRwc3RhdHMtXFx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9IHJhdy1cXHUwMDNldHhfcGF1c2U7XFxuLVxcdHBzdGF0cy1cXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcmF3LVxcdTAwM2VyeF9wYXVzZTtcXG4tXFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtaWItXFx1MDAzZXN0YXRzNjRfbG9jayk7XFxuIH1cXG4gXFxuIHZvaWQga3N6X2dldF9zdGF0czY0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuQEAgLTI4ODUsMjggKzI3MjIsNiBAQCB2b2lkIGtzel9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHQgKi9cXG4gfVxcbiBcXG4taW50IGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbi17XFxuLVxcdHUzMiBxdWV1ZV9tYXAgPSAwO1xcbi1cXHRpbnQgaXBtO1xcbi1cXG4tXFx0Zm9yIChpcG0gPSAwOyBpcG0gXFx1MDAzYyBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZW51bV9pcG1zOyBpcG0rKykge1xcbi1cXHRcXHRpbnQgcXVldWU7XFxuLVxcbi1cXHRcXHQvKiBUcmFmZmljIFR5cGUgKFRUKSBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBJbnRlcm5hbCBQcmlvcml0eVxcbi1cXHRcXHQgKiBNYXAgKElQTSkgaW4gdGhlIHN3aXRjaC4gVHJhZmZpYyBDbGFzcyAoVEMpIGlzXFxuLVxcdFxcdCAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHF1ZXVlIGluIHRoZSBzd2l0Y2guXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRxdWV1ZSA9IGllZWU4MDIxcV90dF90b190YyhpcG0sIGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XFxuLVxcdFxcdGlmIChxdWV1ZSBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBxdWV1ZTtcXG4tXFxuLVxcdFxcdHF1ZXVlX21hcCB8PSBxdWV1ZSBcXHUwMDNjXFx1MDAzYyAoaXBtICogS1NaOTQ3N19QT1JUX1RDX01BUF9TKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIGtzel9wd3JpdGUzMihkZXYsIHBvcnQsIEtTWjk0NzdfUE9SVF9NUklfVENfTUFQX180LCBxdWV1ZV9tYXApO1xcbi19XFxuLVxcbiB2b2lkIGtzel9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTggc3RhdGUpXFxuIHtcXG4gXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbkBAIC0yOTg0LDQwICsyNzk5LDYgQEAgaW50IGtzel9wb3J0X2JyaWRnZV9mbGFncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4taW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuLXtcXG4tXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbi1cXG4tXFx0c3dpdGNoIChkZXYtXFx1MDAzZWNoaXBfaWQpIHtcXG4tXFx0Y2FzZSBLU1o4Nzk1X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaODc5NF9DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcXG4tXFx0XFx0cmV0dXJuIEtTWjg3OTVfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjtcXG4tXFx0Y2FzZSBLU1o4NDYzX0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaODhYM19DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg4NjRfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o4ODk1X0NISVBfSUQ6XFxuLVxcdFxcdHJldHVybiBLU1o4ODYzX0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XFxuLVxcdGNhc2UgS1NaODU2M19DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg1NjdfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o5NDc3X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaOTU2M19DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjk1NjdfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o5ODkzX0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaOTg5Nl9DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjk4OTdfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBMQU45MzcwX0NISVBfSUQ6XFxuLVxcdGNhc2UgTEFOOTM3MV9DSElQX0lEOlxcbi1cXHRjYXNlIExBTjkzNzJfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBMQU45MzczX0NISVBfSUQ6XFxuLVxcdGNhc2UgTEFOOTM3NF9DSElQX0lEOlxcbi1cXHRjYXNlIExBTjk2NDZfQ0hJUF9JRDpcXG4tXFx0XFx0cmV0dXJuIEtTWjk0NzdfTUFYX0ZSQU1FX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tfVxcbi1cXG4gaW50IGtzel9zZXRfbWFjX2VlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHQgICAgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSlcXG4ge1xcbkBAIC0zMDg2LDM5ICsyODY3LDYgQEAgdm9pZCBrc3pfc2V0X3htaWkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuIFxcdGtzel9wd3JpdGU4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgZGF0YTgpO1xcbiB9XFxuIFxcbi1waHlfaW50ZXJmYWNlX3Qga3N6X2dldF94bWlpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGdiaXQpXFxuLXtcXG4tXFx0Y29uc3QgdTggKmJpdHZhbCA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNleG1paV9jdHJsMTtcXG4tXFx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VyZWdzO1xcbi1cXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xcbi1cXHR1OCBkYXRhODtcXG4tXFx0dTggdmFsO1xcbi1cXG4tXFx0a3N6X3ByZWFkOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sIFxcdTAwMjZkYXRhOCk7XFxuLVxcbi1cXHR2YWwgPSBGSUVMRF9HRVQoUF9NSUlfU0VMX00sIGRhdGE4KTtcXG4tXFxuLVxcdGlmICh2YWwgPT0gYml0dmFsW1BfTUlJX1NFTF0pIHtcXG4tXFx0XFx0aWYgKGdiaXQpXFxuLVxcdFxcdFxcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuLVxcdH0gZWxzZSBpZiAodmFsID09IGJpdHZhbFtQX1JNSUlfU0VMXSkge1xcbi1cXHRcXHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJO1xcbi1cXHRcXHRpZiAoZGF0YTggXFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcXG4tXFx0XFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ7XFxuLVxcdFxcdGlmIChkYXRhOCBcXHUwMDI2IFBfUkdNSUlfSURfSUdfRU5BQkxFKSB7XFxuLVxcdFxcdFxcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEO1xcbi1cXHRcXHRcXHRpZiAoZGF0YTggXFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcXG4tXFx0XFx0XFx0XFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBpbnRlcmZhY2U7XFxuLX1cXG4tXFxuIGJvb2wga3N6X3BoeWxpbmtfbmVlZF9jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuIFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG1vZGUpXFxuIHtcXG5AQCAtMzE1NCwyNCArMjkwMiw2IEBAIHZvaWQga3N6X3BoeWxpbmtfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFx0XFx0a3N6X3NldF94bWlpKGRldiwgcG9ydCwgc3RhdGUtXFx1MDAzZWludGVyZmFjZSk7XFxuIH1cXG4gXFxuLWJvb2wga3N6X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbi17XFxuLVxcdGNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXhtaWlfY3RybDE7XFxuLVxcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4tXFx0Ym9vbCBnYml0ID0gZmFsc2U7XFxuLVxcdHU4IGRhdGE4O1xcbi1cXHRib29sIHZhbDtcXG4tXFxuLVxcdGtzel9wcmVhZDgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBcXHUwMDI2ZGF0YTgpO1xcbi1cXG4tXFx0dmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7XFxuLVxcbi1cXHRpZiAodmFsID09IGJpdHZhbFtQX0dNSUlfMUdCSVRdKVxcbi1cXHRcXHRnYml0ID0gdHJ1ZTtcXG4tXFxuLVxcdHJldHVybiBnYml0O1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGtzel9zd2l0Y2hfZGV0ZWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0dTggaWQxLCBpZDIsIGlkNDtcXG5AQCAtMzMxNCw4ICszMDQ0LDggQEAgc3RhdGljIGludCBrc3pfc2V0dXBfdGNfbW9kZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgdTggc2NoZWR1bGVyLFxcbiBcXHRcXHRcXHQgICBGSUVMRF9QUkVQKE1USV9TSEFQSU5HX00sIHNoYXBlcikpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9zZXR1cF90Y19jYnMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxcbitpbnQga3N6X3NldHVwX3RjX2NicyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHQgICAgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4gXFx0aW50IHJldDtcXG5AQCAtMzM4MCw4ICszMTEwLDggQEAgc3RhdGljIGludCBrc3pfZGlzYWJsZV9lZ3Jlc3NfcmF0ZV9saW1pdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwLFxcbi1cXHRcXHRcXHRcXHQgaW50IGJhbmQpXFxuK2ludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsXFxuK1xcdFxcdFxcdCAgaW50IGJhbmQpXFxuIHtcXG4gXFx0LyogQ29tcGFyZWQgdG8gcXVldWVzLCBiYW5kcyBwcmlvcml0aXplIHBhY2tldHMgZGlmZmVyZW50bHkuIEluIHN0cmljdFxcbiBcXHQgKiBwcmlvcml0eSBtb2RlLCB0aGUgbG93ZXN0IHByaW9yaXR5IGlzIGFzc2lnbmVkIHRvIFF1ZXVlIDAgd2hpbGUgdGhlXFxuQEAgLTMzOTAsMTA0ICszMTIwLDYgQEAgc3RhdGljIGludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsXFxuIFxcdHJldHVybiBwLVxcdTAwM2ViYW5kcyAtIDEgLSBiYW5kO1xcbiB9XFxuIFxcbi1zdGF0aWMgdTgga3N6ODQ2M190Y19jdHJsKGludCBwb3J0LCBpbnQgcXVldWUpXFxuLXtcXG4tXFx0dTggcmVnO1xcbi1cXG4tXFx0cmVnID0gMHhDOCArIHBvcnQgKiA0O1xcbi1cXHRyZWcgKz0gKCgzIC0gcXVldWUpIC8gMikgKiAyO1xcbi1cXHRyZWcrKztcXG4tXFx0cmVnIC09IChxdWV1ZSBcXHUwMDI2IDEpO1xcbi1cXHRyZXR1cm4gcmVnO1xcbi19XFxuLVxcbi0vKipcXG4tICoga3N6ODh4M190Y19ldHNfYWRkIC0gQ29uZmlndXJlIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbilcXG4tICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxcbi0gKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBLU1ogc3dpdGNoIGRldmljZSBzdHJ1Y3R1cmVcXG4tICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGNvbmZpZ3VyZVxcbi0gKiBAcDogUG9pbnRlciB0byBvZmZsb2FkIHJlcGxhY2UgcGFyYW1ldGVycyBkZXNjcmliaW5nIEVUUyBiYW5kcyBhbmQgbWFwcGluZ1xcbi0gKlxcbi0gKiBUaGUgS1NaODh4MyBzdXBwb3J0cyB0d28gc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IGFuZFxcbi0gKiBXZWlnaHRlZCBGYWlyIFF1ZXVpbmcgKFdGUSkuIEJvdGggbW9kZXMgaGF2ZSBmaXhlZCBiZWhhdmlvcjpcXG4tICogICAtIE5vIGNvbmZpZ3VyYWJsZSBxdWV1ZS10by1wcmlvcml0eSBtYXBwaW5nXFxuLSAqICAgLSBObyB3ZWlnaHQgYWRqdXN0bWVudCBpbiBXRlEgbW9kZVxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHN3aXRjaCB0byB1c2Ugc3RyaWN0IHByaW9yaXR5IG1vZGUgYnlcXG4tICogY2xlYXJpbmcgdGhlIFdGUSBlbmFibGUgYml0IGZvciBhbGwgcXVldWVzIGFzc29jaWF0ZWQgd2l0aCBFVFMgYmFuZHMuXFxuLSAqIElmIHN0cmljdCBwcmlvcml0eSBpcyBub3QgZXhwbGljaXRseSByZXF1ZXN0ZWQsIHRoZSBzd2l0Y2ggd2lsbCBkZWZhdWx0XFxuLSAqIHRvIFdGUSBtb2RlLlxcbi0gKlxcbi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcXG4tICovXFxuLXN0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfYWRkKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcClcXG4te1xcbi1cXHRpbnQgcmV0LCBiYW5kO1xcbi1cXG4tXFx0LyogT25seSBzdHJpY3QgcHJpb3JpdHkgbW9kZSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy5cXG4tXFx0ICogV0ZRIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkLlxcbi1cXHQgKi9cXG4tXFx0Zm9yIChiYW5kID0gMDsgYmFuZCBcXHUwMDNjIHAtXFx1MDAzZWJhbmRzOyBiYW5kKyspIHtcXG4tXFx0XFx0aW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpO1xcbi1cXHRcXHR1OCByZWc7XFxuLVxcbi1cXHRcXHQvKiBDYWxjdWxhdGUgVFhRIFNwbGl0IENvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhpc1xcbi1cXHRcXHQgKiBwb3J0L3F1ZXVlXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZWcgPSBLU1o4ODczX1RYUV9TUExJVF9DVFJMX1JFRyhwb3J0LCBxdWV1ZSk7XFxuLVxcdFxcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxcbi1cXHRcXHRcXHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xcbi1cXG4tXFx0XFx0LyogQ2xlYXIgV0ZRIGVuYWJsZSBiaXQgdG8gc2VsZWN0IHN0cmljdCBwcmlvcml0eSBzY2hlZHVsaW5nICovXFxuLVxcdFxcdHJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLCAwKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLS8qKlxcbi0gKiBrc3o4OHgzX3RjX2V0c19kZWwgLSBSZXNldCBFVFMgKEVuaGFuY2VkIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24pIGNvbmZpZ1xcbi0gKiAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBwb3J0IG9uIEtTWjg4eDMgc3dpdGNoXFxuLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZVxcbi0gKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gcmVzZXRcXG4tICpcXG4tICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgb25seSBmaXhlZCBzY2hlZHVsaW5nIG1vZGVzOiBTdHJpY3QgUHJpb3JpdHkgb3JcXG4tICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLCB3aXRoIG5vIHJlY29uZmlndXJhdGlvbiBvZiB3ZWlnaHRzIG9yXFxuLSAqIHF1ZXVlIG1hcHBpbmcuIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBwb3J04oCZcyBzY2hlZHVsaW5nIG1vZGUgdG9cXG4tICogdGhlIGRlZmF1bHQsIHdoaWNoIGlzIFdGUSwgYnkgZW5hYmxpbmcgdGhlIFdGUSBiaXQgZm9yIGFsbCBxdWV1ZXMuXFxuLSAqXFxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxcbi0gKi9cXG4tc3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19kZWwoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuLXtcXG4tXFx0aW50IHJldCwgcXVldWU7XFxuLVxcbi1cXHQvKiBJdGVyYXRlIG92ZXIgYWxsIHRyYW5zbWl0IHF1ZXVlcyBmb3IgdGhpcyBwb3J0ICovXFxuLVxcdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcXHUwMDNjIGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgcXVldWUrKykge1xcbi1cXHRcXHR1OCByZWc7XFxuLVxcbi1cXHRcXHQvKiBDYWxjdWxhdGUgVFhRIFNwbGl0IENvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhpc1xcbi1cXHRcXHQgKiBwb3J0L3F1ZXVlXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZWcgPSBLU1o4ODczX1RYUV9TUExJVF9DVFJMX1JFRyhwb3J0LCBxdWV1ZSk7XFxuLVxcdFxcdGlmIChrc3pfaXNfa3N6ODQ2MyhkZXYpKVxcbi1cXHRcXHRcXHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xcbi1cXG4tXFx0XFx0LyogU2V0IFdGUSBlbmFibGUgYml0IHRvIHJldmVydCBiYWNrIHRvIGRlZmF1bHQgc2NoZWR1bGluZ1xcbi1cXHRcXHQgKiBtb2RlXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXQgPSBrc3pfcm13OChkZXYsIHJlZywgS1NaODg3M19UWFFfV0ZRX0VOQUJMRSxcXG4tXFx0XFx0XFx0ICAgICAgIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBrc3pfcXVldWVfc2V0X3N0cmljdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgaW50IHF1ZXVlKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTM1ODAsOCArMzIxMiw4IEBAIHN0YXRpYyBpbnQga3N6X3RjX2V0c19kZWwoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXFxuIFxcdHJldHVybiBrc3o5NDc3X3NldF9kZWZhdWx0X3ByaW9fcXVldWVfbWFwcGluZyhkZXYsIHBvcnQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel90Y19ldHNfdmFsaWRhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcClcXG4raW50IGtzel90Y19ldHNfdmFsaWRhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXFxuK1xcdFxcdFxcdHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKVxcbiB7XFxuIFxcdGludCBiYW5kO1xcbiBcXG5AQCAtMzYyMiw5ICszMjU0LDYgQEAgc3RhdGljIGludCBrc3pfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmIChpc19rc3o4KGRldikgXFx1MDAyNlxcdTAwMjYgIShrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpKVxcbi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLVxcbiBcXHRpZiAocW9wdC1cXHUwMDNlcGFyZW50ICE9IFRDX0hfUk9PVCkge1xcbiBcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiUGFyZW50IHNob3VsZCBiZSBcXFxcXFxcInJvb3RcXFxcXFxcIlxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtMzYzNiwxNiArMzI2NSw5IEBAIHN0YXRpYyBpbnQga3N6X3RjX3NldHVwX3FkaXNjX2V0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0XFx0aWYgKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSlcXG4tXFx0XFx0XFx0cmV0dXJuIGtzejg4eDNfdGNfZXRzX2FkZChkZXYsIHBvcnQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnFvcHQtXFx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXR1cm4ga3N6X3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcXHUwMDI2cW9wdC1cXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xcbitcXHRcXHRyZXR1cm4ga3N6X3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcXHUwMDI2cW9wdC1cXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xcbiBcXHRjYXNlIFRDX0VUU19ERVNUUk9ZOlxcbi1cXHRcXHRpZiAoa3N6X2lzX2tzejg4eDMoZGV2KSB8fCBrc3pfaXNfa3N6ODQ2MyhkZXYpKVxcbi1cXHRcXHRcXHRyZXR1cm4ga3N6ODh4M190Y19ldHNfZGVsKGRldiwgcG9ydCk7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0cmV0dXJuIGtzel90Y19ldHNfZGVsKGRldiwgcG9ydCk7XFxuK1xcdFxcdHJldHVybiBrc3pfdGNfZXRzX2RlbChkZXYsIHBvcnQpO1xcbiBcXHRjYXNlIFRDX0VUU19TVEFUUzpcXG4gXFx0Y2FzZSBUQ19FVFNfR1JBRlQ6XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtMzcwNCw2ICszMzI2LDM0IEBAIGludCBrc3pfaGFuZGxlX3dha2VfcmVhc29uKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxcbiBcXHRcXHRcXHRcXHRwbWVfc3RhdHVzKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGtzel9pc19wb3J0X21hY19nbG9iYWxfdXNhYmxlIC0gQ2hlY2sgaWYgdGhlIE1BQyBhZGRyZXNzIG9uIGEgZ2l2ZW4gcG9ydFxcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MuXFxuKyAqIEBkczogUG9pbnRlciB0byB0aGUgRFNBIHN3aXRjaCBzdHJ1Y3R1cmUuXFxuKyAqIEBwb3J0OiBUaGUgcG9ydCBudW1iZXIgb24gd2hpY2ggdGhlIE1BQyBhZGRyZXNzIGlzIHRvIGJlIGNoZWNrZWQuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gZXhhbWluZXMgdGhlIE1BQyBhZGRyZXNzIHNldCBvbiB0aGUgc3BlY2lmaWVkIHBvcnQgYW5kXFxuKyAqIGRldGVybWluZXMgaWYgaXQgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcyBmb3IgdGhlIHN3aXRjaC5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwb3J0J3MgTUFDIGFkZHJlc3MgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcywgZmFsc2VcXG4rICogb3RoZXJ3aXNlLlxcbisgKi9cXG4rc3RhdGljIGJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdXNlciA9IGRzYV90b19wb3J0KGRzLCBwb3J0KS1cXHUwMDNldXNlcjtcXG4rXFx0Y29uc3QgdW5zaWduZWQgY2hhciAqYWRkciA9IHVzZXItXFx1MDAzZWRldl9hZGRyO1xcbitcXHRzdHJ1Y3Qga3N6X3N3aXRjaF9tYWNhZGRyICpzd2l0Y2hfbWFjYWRkcjtcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuK1xcdHN3aXRjaF9tYWNhZGRyID0gZGV2LVxcdTAwM2Vzd2l0Y2hfbWFjYWRkcjtcXG4rXFx0aWYgKHN3aXRjaF9tYWNhZGRyIFxcdTAwMjZcXHUwMDI2ICFldGhlcl9hZGRyX2VxdWFsKHN3aXRjaF9tYWNhZGRyLVxcdTAwM2VhZGRyLCBhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBrc3pfZ2V0X3dvbCAtIEdldCBXYWtlLW9uLUxBTiBzZXR0aW5ncyBmb3IgYSBzcGVjaWZpZWQgcG9ydC5cXG4gICogQGRzOiBUaGUgZHNhX3N3aXRjaCBzdHJ1Y3R1cmUuXFxuQEAgLTM4OTcsMzQgKzM1NDcsNiBAQCBpbnQga3N6X3BvcnRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKipcXG4tICoga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUgLSBDaGVjayBpZiB0aGUgTUFDIGFkZHJlc3Mgb24gYSBnaXZlbiBwb3J0XFxuLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgYXMgYSBnbG9iYWwgYWRkcmVzcy5cXG4tICogQGRzOiBQb2ludGVyIHRvIHRoZSBEU0Egc3dpdGNoIHN0cnVjdHVyZS5cXG4tICogQHBvcnQ6IFRoZSBwb3J0IG51bWJlciBvbiB3aGljaCB0aGUgTUFDIGFkZHJlc3MgaXMgdG8gYmUgY2hlY2tlZC5cXG4tICpcXG4tICogVGhpcyBmdW5jdGlvbiBleGFtaW5lcyB0aGUgTUFDIGFkZHJlc3Mgc2V0IG9uIHRoZSBzcGVjaWZpZWQgcG9ydCBhbmRcXG4tICogZGV0ZXJtaW5lcyBpZiBpdCBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzIGZvciB0aGUgc3dpdGNoLlxcbi0gKlxcbi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIHBvcnQncyBNQUMgYWRkcmVzcyBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzLCBmYWxzZVxcbi0gKiBvdGhlcndpc2UuXFxuLSAqL1xcbi1ib29sIGtzel9pc19wb3J0X21hY19nbG9iYWxfdXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuLXtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKnVzZXIgPSBkc2FfdG9fcG9ydChkcywgcG9ydCktXFx1MDAzZXVzZXI7XFxuLVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIgPSB1c2VyLVxcdTAwM2VkZXZfYWRkcjtcXG4tXFx0c3RydWN0IGtzel9zd2l0Y2hfbWFjYWRkciAqc3dpdGNoX21hY2FkZHI7XFxuLVxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4tXFxuLVxcdEFTU0VSVF9SVE5MKCk7XFxuLVxcbi1cXHRzd2l0Y2hfbWFjYWRkciA9IGRldi1cXHUwMDNlc3dpdGNoX21hY2FkZHI7XFxuLVxcdGlmIChzd2l0Y2hfbWFjYWRkciBcXHUwMDI2XFx1MDAyNiAhZXRoZXJfYWRkcl9lcXVhbChzd2l0Y2hfbWFjYWRkci1cXHUwMDNlYWRkciwgYWRkcikpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdHJldHVybiB0cnVlO1xcbi19XFxuLVxcbiAvKipcXG4gICoga3N6X3N3aXRjaF9tYWNhZGRyX2dldCAtIFByb2dyYW0gdGhlIHN3aXRjaCdzIE1BQyBhZGRyZXNzIHJlZ2lzdGVyLlxcbiAgKiBAZHM6IERTQSBzd2l0Y2ggaW5zdGFuY2UuXFxuQEAgLTQxMzIsOCArMzc1NCw4IEBAIHN0YXRpYyB2b2lkIGtzel9wYXJzZV9yZ21paV9kZWxheShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydF9udW0sXFxuICAqIFJldHVybnM6IElmIGZvdW5kLCB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlciB2YWx1ZSBmb3IgdGhhdCBkcml2ZSBzdHJlbmd0aFxcbiAgKiBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCAtRUlOVkFMIGlzIHJldHVybmVkIGluZGljYXRpbmcgYW4gaW52YWxpZCB2YWx1ZS5cXG4gICovXFxuLXN0YXRpYyBpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKVxcbitpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcXG4rXFx0XFx0XFx0ICAgICAgc2l6ZV90IGFycmF5X3NpemUsIGludCBtaWNyb2FtcClcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTQxNTYsOSArMzc3OCw5IEBAIHN0YXRpYyBpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcXG4gICogaXMgZGV0ZWN0ZWQuIEl0IGxpc3RzIG91dCBhbGwgdGhlIHN1cHBvcnRlZCBkcml2ZSBzdHJlbmd0aCB2YWx1ZXMgZm9yXFxuICAqIHJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cXG4gICovXFxuLXN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxcbi1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApXFxuK3ZvaWQga3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxcbitcXHRcXHRcXHQgICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKVxcbiB7XFxuIFxcdGNoYXIgc3VwcG9ydGVkX3ZhbHVlc1sxMDBdO1xcbiBcXHRzaXplX3QgcmVtYWluaW5nX3NpemU7XFxuQEAgLTQxODUsOCArMzgwNyw4IEBAIHN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiB9XFxuIFxcbiAvKipcXG4tICoga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBmb3Igc3BlY2lmaWMgS1NaOTQ3N1xcbi0gKlxcdFxcdFxcdFxcdCAgICBjaGlwIHZhcmlhbnRzLlxcbisgKiBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggZm9yIHNwZWNpZmljIEtTWjk0NzdcXG4rICpcXHRcXHRcXHRcXHRhbmQgdGhlIEtTWjg3eHggY2hpcCB2YXJpYW50cy5cXG4gICogQGRldjogICAgICAga3N6IGRldmljZVxcbiAgKiBAcHJvcHM6ICAgICBBcnJheSBvZiBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIHRvIGJlIGFwcGxpZWRcXG4gICogQG51bV9wcm9wczogTnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5XFxuQEAgLTQxOTcsOSArMzgxOSw5IEBAIHN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzc2Z1bCBjb25maWd1cmF0aW9uLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4gICovXFxuLXN0YXRpYyBpbnQga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wICpwcm9wcyxcXG4tXFx0XFx0XFx0XFx0XFx0aW50IG51bV9wcm9wcylcXG4raW50IGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLFxcbitcXHRcXHRcXHQgICAgIGludCBudW1fcHJvcHMpXFxuIHtcXG4gXFx0c2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejk0NzdfZHJpdmVfc3RyZW5ndGhzKTtcXG4gXFx0aW50IGksIHJldCwgcmVnO1xcbkBAIC00MjM2LDEzMCArMzg1OCw2IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCByZWcsIG1hc2ssIHZhbCk7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb24gZm9yXFxuLSAqXFx0XFx0XFx0XFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxcbi0gKiBAZGV2OiAgICAgICBrc3ogZGV2aWNlXFxuLSAqIEBwcm9wczogICAgIEFycmF5IG9mIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgdG8gYmUgc2V0XFxuLSAqIEBudW1fcHJvcHM6IE51bWJlciBvZiBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheVxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBzZXR0aW5ncyB0byBLU1o4OFgzIGNoaXBcXG4tICogdmFyaWFudHMgKEtTWjg4NzMsIEtTWjg4NjMpLlxcbi0gKiBJdCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9ucyBhbGlnbiB3aXRoIHdoYXQgdGhlIGNoaXAgdmFyaWFudCBzdXBwb3J0cyBhbmRcXG4tICogd2FybnMgb3IgZXJyb3JzIG91dCBvbiB1bnN1cHBvcnRlZCBzZXR0aW5ncy5cXG4tICpcXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuLSAqL1xcbi1zdGF0aWMgaW50IGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXFxuLVxcdFxcdFxcdFxcdFxcdGludCBudW1fcHJvcHMpXFxuLXtcXG4tXFx0c2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzKTtcXG4tXFx0aW50IG1pY3JvYW1wO1xcbi1cXHRpbnQgaSwgcmV0O1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wcm9wczsgaSsrKSB7XFxuLVxcdFxcdGlmIChwcm9wc1tpXS52YWx1ZSA9PSAtMSB8fCBpID09IEtTWl9EUklWRVJfU1RSRU5HVEhfSU8pXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0ZGV2X3dhcm4oZGV2LVxcdTAwM2VkZXYsIFxcXCIlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgcHJvcHNbaV0ubmFtZSk7XFxuLVxcdH1cXG4tXFxuLVxcdG1pY3JvYW1wID0gcHJvcHNbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10udmFsdWU7XFxuLVxcdHJldCA9IGtzel9kcml2ZV9zdHJlbmd0aF90b19yZWcoa3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsIGFycmF5X3NpemUsXFxuLVxcdFxcdFxcdFxcdFxcdG1pY3JvYW1wKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0a3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKGRldiwga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMsXFxuLVxcdFxcdFxcdFxcdFxcdCBhcnJheV9zaXplLCBtaWNyb2FtcCk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBrc3pfcm13OChkZXYsIEtTWjg4NzNfUkVHX0dMT0JBTF9DVFJMXzEyLFxcbi1cXHRcXHRcXHRLU1o4ODczX0RSSVZFX1NUUkVOR1RIXzE2TUEsIHJldCk7XFxuLX1cXG4tXFxuLS8qKlxcbi0gKiBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoKSAtIEV4dHJhY3QgYW5kIGFwcGx5IGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb25zXFxuLSAqXFx0XFx0XFx0XFx0ZnJvbSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLlxcbi0gKiBAZGV2OlxcdGtzeiBkZXZpY2VcXG4tICpcXG4tICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgZnJvbSB0aGVcXG4tICogZGV2aWNlIHRyZWUsIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBzdXBwb3J0ZWQgY2hpcCB2YXJpYW50cywgYW5kIHNldHNcXG4tICogdGhlbSBhY2NvcmRpbmdseS4gQW4gZXJyb3Igc2hvdWxkIGJlIGNyaXRpY2FsIGhlcmUsIGFzIHRoZSBkcml2ZSBzdHJlbmd0aFxcbi0gKiBzZXR0aW5ncyBhcmUgY3J1Y2lhbCBmb3IgRU1JIGNvbXBsaWFuY2UuXFxuLSAqXFxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZVxcbi0gKi9cXG4taW50IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi17XFxuLVxcdHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHtcXG4tXFx0XFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSEldID0ge1xcbi1cXHRcXHRcXHQubmFtZSA9IFxcXCJtaWNyb2NoaXAsaGktZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcXFwiLFxcbi1cXHRcXHRcXHQub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcXG4tXFx0XFx0XFx0LnZhbHVlID0gLTEsXFxuLVxcdFxcdH0sXFxuLVxcdFxcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0xPXSA9IHtcXG4tXFx0XFx0XFx0Lm5hbWUgPSBcXFwibWljcm9jaGlwLGxvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXFxcIixcXG4tXFx0XFx0XFx0Lm9mZnNldCA9IFNXX0xPX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXFxuLVxcdFxcdFxcdC52YWx1ZSA9IC0xLFxcbi1cXHRcXHR9LFxcbi1cXHRcXHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10gPSB7XFxuLVxcdFxcdFxcdC5uYW1lID0gXFxcIm1pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFxcXCIsXFxuLVxcdFxcdFxcdC5vZmZzZXQgPSAwLCAvKiBkb24ndCBjYXJlICovXFxuLVxcdFxcdFxcdC52YWx1ZSA9IC0xLFxcbi1cXHRcXHR9LFxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGU7XFxuLVxcdGJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlO1xcbi1cXHRpbnQgaSwgcmV0O1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpKyspIHtcXG4tXFx0XFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIG9mX3Byb3BzW2ldLm5hbWUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZvZl9wcm9wc1tpXS52YWx1ZSk7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FSU5WQUwpXFxuLVxcdFxcdFxcdGRldl93YXJuKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWQgJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCBvZl9wcm9wc1tpXS5uYW1lKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRoYXZlX2FueV9wcm9wID0gdHJ1ZTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFoYXZlX2FueV9wcm9wKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHN3aXRjaCAoZGV2LVxcdTAwM2VjaGlwX2lkKSB7XFxuLVxcdGNhc2UgS1NaODhYM19DSElQX0lEOlxcbi1cXHRcXHRyZXR1cm4ga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgQVJSQVlfU0laRShvZl9wcm9wcykpO1xcbi1cXHRjYXNlIEtTWjg3OTVfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o4Nzk0X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaODc2NV9DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjg1NjNfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o4NTY3X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaOTQ3N19DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjk1NjNfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o5NTY3X0NISVBfSUQ6XFxuLVxcdGNhc2UgS1NaOTg5M19DSElQX0lEOlxcbi1cXHRjYXNlIEtTWjk4OTZfQ0hJUF9JRDpcXG4tXFx0Y2FzZSBLU1o5ODk3X0NISVBfSUQ6XFxuLVxcdGNhc2UgTEFOOTY0Nl9DSElQX0lEOlxcbi1cXHRcXHRyZXR1cm4ga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgQVJSQVlfU0laRShvZl9wcm9wcykpO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkrKykge1xcbi1cXHRcXHRcXHRpZiAob2ZfcHJvcHNbaV0udmFsdWUgPT0gLTEpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0ZGV2X3dhcm4oZGV2LVxcdTAwM2VkZXYsIFxcXCIlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgb2ZfcHJvcHNbaV0ubmFtZSk7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQga3N6ODQ2M19jb25maWd1cmVfc3RyYXBzX3NwaShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBwaW5jdHJsICpwaW5jdHJsO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXFxuaW5kZXggYjRhNTY3M2JhMzY1Y2IuLmFjYWY3MGU2ZjM5M2M5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc2EuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RhdGEvbWljcm9jaGlwLWtzei5oXFx1MDAzZVxcbiBcXG5AQCAtNDAsNiArNDEsNDUgQEAgc3RydWN0IHZsYW5fdGFibGUge1xcbiBcXHR1MzIgdGFibGVbM107XFxuIH07XFxuIFxcbitzdHJ1Y3Qga3N6X3N0YXRzX3JhdyB7XFxuK1xcdHU2NCByeF9oaTtcXG4rXFx0dTY0IHJ4X3VuZGVyc2l6ZTtcXG4rXFx0dTY0IHJ4X2ZyYWdtZW50cztcXG4rXFx0dTY0IHJ4X292ZXJzaXplO1xcbitcXHR1NjQgcnhfamFiYmVycztcXG4rXFx0dTY0IHJ4X3N5bWJvbF9lcnI7XFxuK1xcdHU2NCByeF9jcmNfZXJyO1xcbitcXHR1NjQgcnhfYWxpZ25fZXJyO1xcbitcXHR1NjQgcnhfbWFjX2N0cmw7XFxuK1xcdHU2NCByeF9wYXVzZTtcXG4rXFx0dTY0IHJ4X2JjYXN0O1xcbitcXHR1NjQgcnhfbWNhc3Q7XFxuK1xcdHU2NCByeF91Y2FzdDtcXG4rXFx0dTY0IHJ4XzY0X29yX2xlc3M7XFxuK1xcdHU2NCByeF82NV8xMjc7XFxuK1xcdHU2NCByeF8xMjhfMjU1O1xcbitcXHR1NjQgcnhfMjU2XzUxMTtcXG4rXFx0dTY0IHJ4XzUxMl8xMDIzO1xcbitcXHR1NjQgcnhfMTAyNF8xNTIyO1xcbitcXHR1NjQgcnhfMTUyM18yMDAwO1xcbitcXHR1NjQgcnhfMjAwMTtcXG4rXFx0dTY0IHR4X2hpO1xcbitcXHR1NjQgdHhfbGF0ZV9jb2w7XFxuK1xcdHU2NCB0eF9wYXVzZTtcXG4rXFx0dTY0IHR4X2JjYXN0O1xcbitcXHR1NjQgdHhfbWNhc3Q7XFxuK1xcdHU2NCB0eF91Y2FzdDtcXG4rXFx0dTY0IHR4X2RlZmVycmVkO1xcbitcXHR1NjQgdHhfdG90YWxfY29sO1xcbitcXHR1NjQgdHhfZXhjX2NvbDtcXG4rXFx0dTY0IHR4X3NpbmdsZV9jb2w7XFxuK1xcdHU2NCB0eF9tdWx0X2NvbDtcXG4rXFx0dTY0IHJ4X3RvdGFsO1xcbitcXHR1NjQgdHhfdG90YWw7XFxuK1xcdHU2NCByeF9kaXNjYXJkcztcXG4rXFx0dTY0IHR4X2Rpc2NhcmRzO1xcbit9O1xcbitcXG4gc3RydWN0IGtzel9wb3J0X21pYiB7XFxuIFxcdHN0cnVjdCBtdXRleCBjbnRfbXV0ZXg7XFx0XFx0Lyogc3RydWN0dXJlIGFjY2VzcyAqL1xcbiBcXHR1OCBjbnRfcHRyO1xcbkBAIC0zOTMsMTIgKzQzMyw4IEBAIGludCBrc3pfc3dpdGNoX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbiB2b2lkIGtzel90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbiBcXG4gdm9pZCBrc3pfaW5pdF9taWJfdGltZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuLWJvb2wga3N6X2lzX3BvcnRfbWFjX2dsb2JhbF91c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCk7XFxuIHZvaWQga3N6X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xcbi12b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XFxuIHZvaWQga3N6X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1OCBzdGF0ZSk7XFxuLWJvb2wga3N6X2dldF9nYml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcXG4tcGh5X2ludGVyZmFjZV90IGtzel9nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBnYml0KTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXTtcXG4gaW50IGtzel9zd2l0Y2hfbWFjYWRkcl9nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5AQCAtNDQzLDExICs0NzksMTUgQEAgdm9pZCBrc3pfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG1vZGUsXFxuIFxcdFxcdFxcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcXG4gXFxuLWludCBrc3pfbWF4X210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KTtcXG4tXFxuIGludCBrc3pfc2V0X21hY19lZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0XFx0ICAgIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpO1xcbiBcXG4raW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCxcXG4rXFx0XFx0XFx0ICBpbnQgYmFuZCk7XFxuK2ludCBrc3pfc2V0dXBfdGNfY2JzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdCAgICAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpO1xcbitpbnQga3N6X3RjX2V0c192YWxpZGF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApO1xcbiBpbnQga3N6X3NldHVwX3RjKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKTtcXG4gXFxuQEAgLTQ3MSw4ICs1MTEsMzcgQEAgaW50IGtzel9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xcbiBpbnQga3N6X3BpcnFfc2V0dXAoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggcCk7XFxuIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcXG4gdm9pZCBrc3pfaXJxX2ZyZWUoc3RydWN0IGtzel9pcnEgKmtpcnEpO1xcbi1pbnQga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xcbi1pbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xcbitcXG4rc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdGludCBvZmZzZXQ7XFxuK1xcdGludCB2YWx1ZTtcXG4rfTtcXG4rXFxuK2VudW0ga3N6X2RyaXZlcl9zdHJlbmd0aF90eXBlIHtcXG4rXFx0S1NaX0RSSVZFUl9TVFJFTkdUSF9ISSxcXG4rXFx0S1NaX0RSSVZFUl9TVFJFTkdUSF9MTyxcXG4rXFx0S1NaX0RSSVZFUl9TVFJFTkdUSF9JTyxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIC0gZHJpdmUgc3RyZW5ndGggbWFwcGluZ1xcbisgKiBAcmVnX3ZhbDpcXHRyZWdpc3RlciB2YWx1ZVxcbisgKiBAbWljcm9hbXA6XFx0bWljcm9hbXAgdmFsdWVcXG4rICovXFxuK3N0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgge1xcbitcXHR1MzIgcmVnX3ZhbDtcXG4rXFx0dTMyIG1pY3JvYW1wO1xcbit9O1xcbitcXG4rdm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXFxuK1xcdFxcdFxcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApO1xcbitpbnQga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcXG4rXFx0XFx0XFx0ICAgICAgc2l6ZV90IGFycmF5X3NpemUsIGludCBtaWNyb2FtcCk7XFxuK2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wICpwcm9wcyxcXG4rXFx0XFx0XFx0ICAgICBpbnQgbnVtX3Byb3BzKTtcXG4gXFxuIC8qIENvbW1vbiByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zICovXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqa3N6X3JlZ21hcF84KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXFxuaW5kZXggOGViNTMzN2IwYzEwMmUuLjg2Y2UzYTg2NzA1ZjkzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXFxuQEAgLTc4NywxMCArNzg3LDYgQEAgc3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbiBcXHQvKiBzZXQgYnJvYWRjYXN0IHN0b3JtIHByb3RlY3Rpb24gMTAlIHJhdGUgKi9cXG4gXFx0c3Rvcm1fbWFzayA9IEJST0FEQ0FTVF9TVE9STV9SQVRFO1xcbiBcXHRzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwO1xcbkBAIC05ODMsNyArOTc5LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGxhbjkzN3hfc3dpdGNoX29wcyA9IHtcXG4gXFx0LmdldF9zdGF0czY0XFx0XFx0PSBrc3pfZ2V0X3N0YXRzNjQsXFxuIFxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IGtzel9nZXRfcGF1c2Vfc3RhdHMsXFxuIFxcdC5wb3J0X2NoYW5nZV9tdHVcXHQ9IGxhbjkzN3hfY2hhbmdlX210dSxcXG4tXFx0LnBvcnRfbWF4X210dVxcdFxcdD0ga3N6X21heF9tdHUsXFxuK1xcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGtzejk0NzdfbWF4X210dSxcXG4gXFx0LnN1c3BlbmRcXHRcXHQ9IGtzel9zdXNwZW5kLFxcbiBcXHQucmVzdW1lXFx0XFx0XFx0PSBrc3pfcmVzdW1lLFxcbiBcXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGtzel9nZXRfdHNfaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTM6NTY6MjYuOTA3NjMwMDQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjY2Mjk5MTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIG9mIHRoZSBNaWNyb2NoaXAgS1NaIERTQSBkcml2ZXIuIEl0IG1vdmVzIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb25zIChsaWtlIE1UVSBjb25maWd1cmF0aW9uLCBUQyBzZXR1cCwgTUlCIHN0YXRzIHJlYWRpbmcsIGFuZCBkcml2ZSBzdHJlbmd0aCBwYXJzaW5nKSBmcm9tIHRoZSBjb21tb24gYGtzel9jb21tb24uY2AgZmlsZSB0byB0aGVpciByZXNwZWN0aXZlIGNoaXAtc3BlY2lmaWMgZmlsZXMgKGBrc3o4LmNgIGFuZCBga3N6OTQ3Ny5jYCkuIEl0IGFsc28gcmVtb3ZlcyBhIG5vLW9wIGNhbGwgdG8gYGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aGAgaW4gYGxhbjkzN3hfbWFpbi5jYCB3aGljaCBvbmx5IHByaW50ZWQgd2FybmluZ3MgZm9yIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMuIE5vIG5ldyBmdW5jdGlvbmFsIGxvZ2ljIG9yIHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNmVkYmJkOGZhYjkxMDViMWFiYTBmNmY5NDE3ZjU0Nzk0NzZhNzlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxMzo1NjoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbmluZGV4IDU4NjkxNjU3MGE4NDFiLi5jNGM3NjkwMjhhMjBjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuQEAgLTM2LDYgKzM2LDUyIEBAXG4gI2luY2x1ZGUgXCJrc3o4X3JlZy5oXCJcbiAjaW5jbHVkZSBcImtzejguaFwiXG4gXG4rLyoga3N6ODh4M19kcml2ZV9zdHJlbmd0aHMgLSBEcml2ZSBzdHJlbmd0aCBtYXBwaW5nIGZvciBLU1o4ODYzLCBLU1o4ODczLCAuLlxuKyAqXHRcdFx0ICAgICB2YXJpYW50cy5cbisgKiBUaGlzIHZhbHVlcyBhcmUgZG9jdW1lbnRlZCBpbiBLU1o4ODczIGFuZCBLU1o4ODYzIGRhdGFzaGVldHMuXG4rICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6ODh4M19kcml2ZV9zdHJlbmd0aHNbXSA9IHtcbitcdHsgMCwgIDgwMDAgfSxcbitcdHsgS1NaODg3M19EUklWRV9TVFJFTkdUSF8xNk1BLCAxNjAwMCB9LFxuK307XG4rXG4rc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3IHtcbitcdHU2NCByeDtcbitcdHU2NCByeF9oaTtcbitcdHU2NCByeF91bmRlcnNpemU7XG4rXHR1NjQgcnhfZnJhZ21lbnRzO1xuK1x0dTY0IHJ4X292ZXJzaXplO1xuK1x0dTY0IHJ4X2phYmJlcnM7XG4rXHR1NjQgcnhfc3ltYm9sX2VycjtcbitcdHU2NCByeF9jcmNfZXJyO1xuK1x0dTY0IHJ4X2FsaWduX2VycjtcbitcdHU2NCByeF9tYWNfY3RybDtcbitcdHU2NCByeF9wYXVzZTtcbitcdHU2NCByeF9iY2FzdDtcbitcdHU2NCByeF9tY2FzdDtcbitcdHU2NCByeF91Y2FzdDtcbitcdHU2NCByeF82NF9vcl9sZXNzO1xuK1x0dTY0IHJ4XzY1XzEyNztcbitcdHU2NCByeF8xMjhfMjU1O1xuK1x0dTY0IHJ4XzI1Nl81MTE7XG4rXHR1NjQgcnhfNTEyXzEwMjM7XG4rXHR1NjQgcnhfMTAyNF8xNTIyO1xuK1x0dTY0IHR4O1xuK1x0dTY0IHR4X2hpO1xuK1x0dTY0IHR4X2xhdGVfY29sO1xuK1x0dTY0IHR4X3BhdXNlO1xuK1x0dTY0IHR4X2JjYXN0O1xuK1x0dTY0IHR4X21jYXN0O1xuK1x0dTY0IHR4X3VjYXN0O1xuK1x0dTY0IHR4X2RlZmVycmVkO1xuK1x0dTY0IHR4X3RvdGFsX2NvbDtcbitcdHU2NCB0eF9leGNfY29sO1xuK1x0dTY0IHR4X3NpbmdsZV9jb2w7XG4rXHR1NjQgdHhfbXVsdF9jb2w7XG4rXHR1NjQgcnhfZGlzY2FyZHM7XG4rXHR1NjQgdHhfZGlzY2FyZHM7XG4rfTtcbitcbiBzdGF0aWMgdm9pZCBrc3pfY2ZnKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHUzMiBhZGRyLCB1OCBiaXRzLCBib29sIHNldClcbiB7XG4gXHRrc3pfcm13OChkZXYsIGFkZHIsIGJpdHMsIHNldCA/IGJpdHMgOiAwKTtcbkBAIC0xNTgsMTAgKzIwNCwxNyBAQCBzdGF0aWMgaW50IGtzejhfcmVzZXRfc3dpdGNoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3o4ODYzX2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXG4rc3RhdGljIGludCBrc3o4OHh4X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG10dSlcbiB7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdGludCBmcmFtZV9zaXplO1xuIFx0dTggY3RybDIgPSAwO1xuIFxuK1x0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZGV2LVx1MDAzZWRzLCBwb3J0KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmcmFtZV9zaXplID0gbXR1ICsgVkxBTl9FVEhfSExFTiArIEVUSF9GQ1NfTEVOO1xuK1xuIFx0aWYgKGZyYW1lX3NpemUgXHUwMDNjPSBLU1o4X0xFR0FMX1BBQ0tFVF9TSVpFKVxuIFx0XHRjdHJsMiB8PSBLU1o4ODYzX0xFR0FMX1BBQ0tFVF9FTkFCTEU7XG4gXHRlbHNlIGlmIChmcmFtZV9zaXplIFx1MDAzZSBLU1o4ODYzX05PUk1BTF9QQUNLRVRfU0laRSlcbkBAIC0xNzEsMTEgKzIyNCwxOCBAQCBzdGF0aWMgaW50IGtzejg4NjNfY2hhbmdlX210dShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgZnJhbWVfc2l6ZSlcbiBcdFx0XHRLU1o4ODYzX0hVR0VfUEFDS0VUX0VOQUJMRSwgY3RybDIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzejg3OTVfY2hhbmdlX210dShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgZnJhbWVfc2l6ZSlcbitzdGF0aWMgaW50IGtzejg3eHhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxuIHtcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0dTggY3RybDEgPSAwLCBjdHJsMiA9IDA7XG4rXHR1MTYgZnJhbWVfc2l6ZTtcbiBcdGludCByZXQ7XG4gXG4rXHRpZiAoIWRzYV9pc19jcHVfcG9ydChkZXYtXHUwMDNlZHMsIHBvcnQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZyYW1lX3NpemUgPSBtdHUgKyBWTEFOX0VUSF9ITEVOICsgRVRIX0ZDU19MRU47XG4rXG4gXHRpZiAoZnJhbWVfc2l6ZSBcdTAwM2UgS1NaOF9MRUdBTF9QQUNLRVRfU0laRSlcbiBcdFx0Y3RybDIgfD0gU1dfTEVHQUxfUEFDS0VUX0RJU0FCTEU7XG4gXHRpZiAoZnJhbWVfc2l6ZSBcdTAwM2UgS1NaODg2M19OT1JNQUxfUEFDS0VUX1NJWkUpXG5AQCAtMTg4LDI5ICsyNDgsMTQgQEAgc3RhdGljIGludCBrc3o4Nzk1X2NoYW5nZV9tdHUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IGZyYW1lX3NpemUpXG4gXHRyZXR1cm4ga3N6X3JtdzgoZGV2LCBSRUdfU1dfQ1RSTF8yLCBTV19MRUdBTF9QQUNLRVRfRElTQUJMRSwgY3RybDIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzejhfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxuK3N0YXRpYyBpbnQga3N6ODd4eF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4ge1xuLVx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4tXHR1MTYgZnJhbWVfc2l6ZTtcbi1cbi1cdGlmICghZHNhX2lzX2NwdV9wb3J0KGRldi1cdTAwM2VkcywgcG9ydCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0ZnJhbWVfc2l6ZSA9IG10dSArIFZMQU5fRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjtcbi1cbi1cdHN3aXRjaCAoZGV2LVx1MDAzZWNoaXBfaWQpIHtcbi1cdGNhc2UgS1NaODc5NV9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4Nzk0X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg3NjVfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIGtzejg3OTVfY2hhbmdlX210dShkZXYsIGZyYW1lX3NpemUpO1xuLVx0Y2FzZSBLU1o4NDYzX0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg4WDNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODg2NF9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4ODk1X0NISVBfSUQ6XG4tXHRcdHJldHVybiBrc3o4ODYzX2NoYW5nZV9tdHUoZGV2LCBmcmFtZV9zaXplKTtcbi1cdH1cbitcdHJldHVybiBLU1o4Nzk1X0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XG4rfVxuIFxuLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK3N0YXRpYyBpbnQga3N6ODh4eF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4re1xuK1x0cmV0dXJuIEtTWjg4NjNfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjtcbiB9XG4gXG4gc3RhdGljIGludCBrc3o4X3BvcnRfcXVldWVfc3BsaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIGludCBxdWV1ZXMpXG5AQCAtMTc0Niw2ICsxNzkxLDE1OSBAQCBzdGF0aWMgdm9pZCBrc3o4X3BvcnRfbWlycm9yX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdCAgICAgUE9SVF9NSVJST1JfU05JRkZFUiwgZmFsc2UpO1xuIH1cbiBcbitzdGF0aWMgdTgga3N6ODQ2M190Y19jdHJsKGludCBwb3J0LCBpbnQgcXVldWUpXG4re1xuK1x0dTggcmVnO1xuK1xuK1x0cmVnID0gMHhDOCArIHBvcnQgKiA0O1xuK1x0cmVnICs9ICgoMyAtIHF1ZXVlKSAvIDIpICogMjtcbitcdHJlZysrO1xuK1x0cmVnIC09IChxdWV1ZSBcdTAwMjYgMSk7XG4rXHRyZXR1cm4gcmVnO1xuK31cbitcbisvKipcbisgKiBrc3o4OHgzX3RjX2V0c19hZGQgLSBDb25maWd1cmUgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKVxuKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHBvcnQgb24gS1NaODh4MyBzd2l0Y2hcbisgKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBLU1ogc3dpdGNoIGRldmljZSBzdHJ1Y3R1cmVcbisgKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gY29uZmlndXJlXG4rICogQHA6IFBvaW50ZXIgdG8gb2ZmbG9hZCByZXBsYWNlIHBhcmFtZXRlcnMgZGVzY3JpYmluZyBFVFMgYmFuZHMgYW5kIG1hcHBpbmdcbisgKlxuKyAqIFRoZSBLU1o4OHgzIHN1cHBvcnRzIHR3byBzY2hlZHVsaW5nIG1vZGVzOiBTdHJpY3QgUHJpb3JpdHkgYW5kXG4rICogV2VpZ2h0ZWQgRmFpciBRdWV1aW5nIChXRlEpLiBCb3RoIG1vZGVzIGhhdmUgZml4ZWQgYmVoYXZpb3I6XG4rICogICAtIE5vIGNvbmZpZ3VyYWJsZSBxdWV1ZS10by1wcmlvcml0eSBtYXBwaW5nXG4rICogICAtIE5vIHdlaWdodCBhZGp1c3RtZW50IGluIFdGUSBtb2RlXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHN3aXRjaCB0byB1c2Ugc3RyaWN0IHByaW9yaXR5IG1vZGUgYnlcbisgKiBjbGVhcmluZyB0aGUgV0ZRIGVuYWJsZSBiaXQgZm9yIGFsbCBxdWV1ZXMgYXNzb2NpYXRlZCB3aXRoIEVUUyBiYW5kcy5cbisgKiBJZiBzdHJpY3QgcHJpb3JpdHkgaXMgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCB0aGUgc3dpdGNoIHdpbGwgZGVmYXVsdFxuKyAqIHRvIFdGUSBtb2RlLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXG4rICovXG4rc3RhdGljIGludCBrc3o4OHgzX3RjX2V0c19hZGQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4rXHRcdFx0ICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXG4re1xuK1x0aW50IHJldCwgYmFuZDtcbitcbitcdC8qIE9ubHkgc3RyaWN0IHByaW9yaXR5IG1vZGUgaXMgc3VwcG9ydGVkIGZvciBub3cuXG4rXHQgKiBXRlEgaXMgaW1wbGljaXRseSBlbmFibGVkIHdoZW4gc3RyaWN0IG1vZGUgaXMgZGlzYWJsZWQuXG4rXHQgKi9cbitcdGZvciAoYmFuZCA9IDA7IGJhbmQgXHUwMDNjIHAtXHUwMDNlYmFuZHM7IGJhbmQrKykge1xuK1x0XHRpbnQgcXVldWUgPSBrc3pfZXRzX2JhbmRfdG9fcXVldWUocCwgYmFuZCk7XG4rXHRcdHU4IHJlZztcbitcbitcdFx0LyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXNcbitcdFx0ICogcG9ydC9xdWV1ZVxuK1x0XHQgKi9cbitcdFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xuK1x0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbitcdFx0XHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xuK1xuK1x0XHQvKiBDbGVhciBXRlEgZW5hYmxlIGJpdCB0byBzZWxlY3Qgc3RyaWN0IHByaW9yaXR5IHNjaGVkdWxpbmcgKi9cbitcdFx0cmV0ID0ga3N6X3JtdzgoZGV2LCByZWcsIEtTWjg4NzNfVFhRX1dGUV9FTkFCTEUsIDApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICoga3N6ODh4M190Y19ldHNfZGVsIC0gUmVzZXQgRVRTIChFbmhhbmNlZCBUcmFuc21pc3Npb24gU2VsZWN0aW9uKSBjb25maWdcbisgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBwb3J0IG9uIEtTWjg4eDMgc3dpdGNoXG4rICogQGRldjogUG9pbnRlciB0byB0aGUgS1NaIHN3aXRjaCBkZXZpY2Ugc3RydWN0dXJlXG4rICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIHJlc2V0XG4rICpcbisgKiBUaGUgS1NaODh4MyBzdXBwb3J0cyBvbmx5IGZpeGVkIHNjaGVkdWxpbmcgbW9kZXM6IFN0cmljdCBQcmlvcml0eSBvclxuKyAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKSwgd2l0aCBubyByZWNvbmZpZ3VyYXRpb24gb2Ygd2VpZ2h0cyBvclxuKyAqIHF1ZXVlIG1hcHBpbmcuIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBwb3J04oCZcyBzY2hlZHVsaW5nIG1vZGUgdG9cbisgKiB0aGUgZGVmYXVsdCwgd2hpY2ggaXMgV0ZRLCBieSBlbmFibGluZyB0aGUgV0ZRIGJpdCBmb3IgYWxsIHF1ZXVlcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuKyAqL1xuK3N0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuK3tcbitcdGludCByZXQsIHF1ZXVlO1xuK1xuK1x0LyogSXRlcmF0ZSBvdmVyIGFsbCB0cmFuc21pdCBxdWV1ZXMgZm9yIHRoaXMgcG9ydCAqL1xuK1x0Zm9yIChxdWV1ZSA9IDA7IHF1ZXVlIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2VudW1fdHhfcXVldWVzOyBxdWV1ZSsrKSB7XG4rXHRcdHU4IHJlZztcbitcbitcdFx0LyogQ2FsY3VsYXRlIFRYUSBTcGxpdCBDb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoaXNcbitcdFx0ICogcG9ydC9xdWV1ZVxuK1x0XHQgKi9cbitcdFx0cmVnID0gS1NaODg3M19UWFFfU1BMSVRfQ1RSTF9SRUcocG9ydCwgcXVldWUpO1xuK1x0XHRpZiAoa3N6X2lzX2tzejg0NjMoZGV2KSlcbitcdFx0XHRyZWcgPSBrc3o4NDYzX3RjX2N0cmwocG9ydCwgcXVldWUpO1xuK1xuK1x0XHQvKiBTZXQgV0ZRIGVuYWJsZSBiaXQgdG8gcmV2ZXJ0IGJhY2sgdG8gZGVmYXVsdCBzY2hlZHVsaW5nXG4rXHRcdCAqIG1vZGVcbitcdFx0ICovXG4rXHRcdHJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLFxuK1x0XHRcdCAgICAgICBLU1o4ODczX1RYUV9XRlFfRU5BQkxFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6OF90Y19zZXR1cF9xZGlzY19ldHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpxb3B0KVxuK3tcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmICghKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChxb3B0LVx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIlBhcmVudCBzaG91bGQgYmUgXFxcInJvb3RcXFwiXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKHFvcHQtXHUwMDNlY29tbWFuZCkge1xuK1x0Y2FzZSBUQ19FVFNfUkVQTEFDRTpcbitcdFx0cmV0ID0ga3N6X3RjX2V0c192YWxpZGF0ZShkZXYsIHBvcnQsIFx1MDAyNnFvcHQtXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHJldHVybiBrc3o4OHgzX3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcdTAwMjZxb3B0LVx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcbitcdGNhc2UgVENfRVRTX0RFU1RST1k6XG4rXHRcdHJldHVybiBrc3o4OHgzX3RjX2V0c19kZWwoZGV2LCBwb3J0KTtcbitcdGNhc2UgVENfRVRTX1NUQVRTOlxuK1x0Y2FzZSBUQ19FVFNfR1JBRlQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4rc3RhdGljIGludCBrc3o4N3h4X3NldHVwX3RjKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdFx0ICAgIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLCB2b2lkICp0eXBlX2RhdGEpXG4re1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1NFVFVQX1FESVNDX0NCUzpcbitcdFx0cmV0dXJuIGtzel9zZXR1cF90Y19jYnMoZHMsIHBvcnQsIHR5cGVfZGF0YSk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQga3N6OF9zZXR1cF90YyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwgdm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19DQlM6XG4rXHRcdHJldHVybiBrc3pfc2V0dXBfdGNfY2JzKGRzLCBwb3J0LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19FVFM6XG4rXHRcdHJldHVybiBrc3o4X3RjX3NldHVwX3FkaXNjX2V0cyhkcywgcG9ydCwgdHlwZV9kYXRhKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQga3N6ODc5NV9jcHVfaW50ZXJmYWNlX3NlbGVjdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiB7XG4gXHRzdHJ1Y3Qga3N6X3BvcnQgKnAgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbcG9ydF07XG5AQCAtMjA1Myw2ICsyMjUxLDE3MSBAQCBzdGF0aWMgaW50IGtzejhfZW5hYmxlX3N0cF9hZGRyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4ga3N6OF93X3N0YV9tYWNfdGFibGUoZGV2LCAwLCBcdTAwMjZhbHUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBrc3o4OHh4X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4re1xuK1x0c3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBzdGF0cztcbitcdHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHM7XG4rXHRzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKnJhdztcbitcdHN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYjtcbitcbitcdG1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG4rXHRzdGF0cyA9IFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0O1xuK1x0cHN0YXRzID0gXHUwMDI2bWliLVx1MDAzZXBhdXNlX3N0YXRzO1xuK1x0cmF3ID0gKHN0cnVjdCBrc3o4OHh4X3N0YXRzX3JhdyAqKW1pYi1cdTAwM2Vjb3VudGVycztcbitcbitcdHNwaW5fbG9jayhcdTAwMjZtaWItXHUwMDNlc3RhdHM2NF9sb2NrKTtcbitcbitcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSByYXctXHUwMDNlcnhfYmNhc3QgKyByYXctXHUwMDNlcnhfbWNhc3QgKyByYXctXHUwMDNlcnhfdWNhc3QgK1xuK1x0XHRyYXctXHUwMDNlcnhfcGF1c2U7XG4rXHRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzID0gcmF3LVx1MDAzZXR4X2JjYXN0ICsgcmF3LVx1MDAzZXR4X21jYXN0ICsgcmF3LVx1MDAzZXR4X3VjYXN0ICtcbitcdFx0cmF3LVx1MDAzZXR4X3BhdXNlO1xuK1xuK1x0LyogSFcgY291bnRlcnMgYXJlIGNvdW50aW5nIGJ5dGVzICsgRkNTIHdoaWNoIGlzIG5vdCBhY2NlcHRhYmxlXG4rXHQgKiBmb3IgcnRubF9saW5rX3N0YXRzNjQgaW50ZXJmYWNlXG4rXHQgKi9cbitcdHN0YXRzLVx1MDAzZXJ4X2J5dGVzID0gcmF3LVx1MDAzZXJ4ICsgcmF3LVx1MDAzZXJ4X2hpIC0gc3RhdHMtXHUwMDNlcnhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOO1xuK1x0c3RhdHMtXHUwMDNldHhfYnl0ZXMgPSByYXctXHUwMDNldHggKyByYXctXHUwMDNldHhfaGkgLSBzdGF0cy1cdTAwM2V0eF9wYWNrZXRzICogRVRIX0ZDU19MRU47XG4rXG4rXHRzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzID0gcmF3LVx1MDAzZXJ4X3VuZGVyc2l6ZSArIHJhdy1cdTAwM2VyeF9mcmFnbWVudHMgK1xuK1x0XHRyYXctXHUwMDNlcnhfb3ZlcnNpemU7XG4rXG4rXHRzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzID0gcmF3LVx1MDAzZXJ4X2NyY19lcnI7XG4rXHRzdGF0cy1cdTAwM2VyeF9mcmFtZV9lcnJvcnMgPSByYXctXHUwMDNlcnhfYWxpZ25fZXJyO1xuK1x0c3RhdHMtXHUwMDNlcnhfZHJvcHBlZCA9IHJhdy1cdTAwM2VyeF9kaXNjYXJkcztcbitcdHN0YXRzLVx1MDAzZXJ4X2Vycm9ycyA9IHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgKyBzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzICtcbitcdFx0c3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzICArIHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQ7XG4rXG4rXHRzdGF0cy1cdTAwM2V0eF93aW5kb3dfZXJyb3JzID0gcmF3LVx1MDAzZXR4X2xhdGVfY29sO1xuK1x0c3RhdHMtXHUwMDNldHhfZmlmb19lcnJvcnMgPSByYXctXHUwMDNldHhfZGlzY2FyZHM7XG4rXHRzdGF0cy1cdTAwM2V0eF9hYm9ydGVkX2Vycm9ycyA9IHJhdy1cdTAwM2V0eF9leGNfY29sO1xuK1x0c3RhdHMtXHUwMDNldHhfZXJyb3JzID0gc3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycyArIHN0YXRzLVx1MDAzZXR4X2ZpZm9fZXJyb3JzICtcbitcdFx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnM7XG4rXG4rXHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgPSByYXctXHUwMDNlcnhfbWNhc3Q7XG4rXHRzdGF0cy1cdTAwM2Vjb2xsaXNpb25zID0gcmF3LVx1MDAzZXR4X3RvdGFsX2NvbDtcbitcbitcdHBzdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSByYXctXHUwMDNldHhfcGF1c2U7XG4rXHRwc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcmF3LVx1MDAzZXJ4X3BhdXNlO1xuK1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2bWliLVx1MDAzZXN0YXRzNjRfbG9jayk7XG4rfVxuK1xuKy8qKlxuKyAqIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoKSAtIFNldCB0aGUgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbiBmb3JcbisgKlx0XHRcdFx0ICAgIEtTWjg4NjMgY29tcGF0aWJsZSBjaGlwIHZhcmlhbnRzLlxuKyAqIEBkZXY6ICAgICAgIGtzeiBkZXZpY2VcbisgKiBAcHJvcHM6ICAgICBBcnJheSBvZiBkcml2ZSBzdHJlbmd0aCBwcm9wZXJ0aWVzIHRvIGJlIHNldFxuKyAqIEBudW1fcHJvcHM6IE51bWJlciBvZiBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheVxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggc2V0dGluZ3MgdG8gS1NaODhYMyBjaGlwXG4rICogdmFyaWFudHMgKEtTWjg4NzMsIEtTWjg4NjMpLlxuKyAqIEl0IGVuc3VyZXMgdGhlIGNvbmZpZ3VyYXRpb25zIGFsaWduIHdpdGggd2hhdCB0aGUgY2hpcCB2YXJpYW50IHN1cHBvcnRzIGFuZFxuKyAqIHdhcm5zIG9yIGVycm9ycyBvdXQgb24gdW5zdXBwb3J0ZWQgc2V0dGluZ3MuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW50IGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4rXHRcdFx0XHRcdGludCBudW1fcHJvcHMpXG4re1xuK1x0c2l6ZV90IGFycmF5X3NpemUgPSBBUlJBWV9TSVpFKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzKTtcbitcdGludCBtaWNyb2FtcDtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcHJvcHM7IGkrKykge1xuK1x0XHRpZiAocHJvcHNbaV0udmFsdWUgPT0gLTEgfHwgaSA9PSBLU1pfRFJJVkVSX1NUUkVOR1RIX0lPKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcIiVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcXG5cIixcbitcdFx0XHQgcHJvcHNbaV0ubmFtZSk7XG4rXHR9XG4rXG4rXHRtaWNyb2FtcCA9IHByb3BzW0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dLnZhbHVlO1xuK1x0cmV0ID0ga3N6X2RyaXZlX3N0cmVuZ3RoX3RvX3JlZyhrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocywgYXJyYXlfc2l6ZSxcbitcdFx0XHRcdFx0bWljcm9hbXApO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3IoZGV2LCBrc3o4OHgzX2RyaXZlX3N0cmVuZ3RocyxcbitcdFx0XHRcdFx0IGFycmF5X3NpemUsIG1pY3JvYW1wKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiBrc3pfcm13OChkZXYsIEtTWjg4NzNfUkVHX0dMT0JBTF9DVFJMXzEyLFxuK1x0XHRcdEtTWjg4NzNfRFJJVkVfU1RSRU5HVEhfMTZNQSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICoga3N6OF9wYXJzZV9kcml2ZV9zdHJlbmd0aCgpIC0gRXh0cmFjdCBhbmQgYXBwbHkgZHJpdmUgc3RyZW5ndGggY29uZmlndXJhdGlvbnNcbisgKlx0XHRcdFx0IGZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy5cbisgKiBAZGV2Olx0a3N6IGRldmljZVxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgZnJvbSB0aGVcbisgKiBkZXZpY2UgdHJlZSwgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHN1cHBvcnRlZCBjaGlwIHZhcmlhbnRzLCBhbmQgc2V0c1xuKyAqIHRoZW0gYWNjb3JkaW5nbHkuIEFuIGVycm9yIHNob3VsZCBiZSBjcml0aWNhbCBoZXJlLCBhcyB0aGUgZHJpdmUgc3RyZW5ndGhcbisgKiBzZXR0aW5ncyBhcmUgY3J1Y2lhbCBmb3IgRU1JIGNvbXBsaWFuY2UuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW50IGtzejhfcGFyc2VfZHJpdmVfc3RyZW5ndGgoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wIG9mX3Byb3BzW10gPSB7XG4rXHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0hJXSA9IHtcbitcdFx0XHQubmFtZSA9IFwibWljcm9jaGlwLGhpLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCIsXG4rXHRcdFx0Lm9mZnNldCA9IFNXX0hJX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXG4rXHRcdFx0LnZhbHVlID0gLTEsXG4rXHRcdH0sXG4rXHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0xPXSA9IHtcbitcdFx0XHQubmFtZSA9IFwibWljcm9jaGlwLGxvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCIsXG4rXHRcdFx0Lm9mZnNldCA9IFNXX0xPX1NQRUVEX0RSSVZFX1NUUkVOR1RIX1MsXG4rXHRcdFx0LnZhbHVlID0gLTEsXG4rXHRcdH0sXG4rXHRcdFtLU1pfRFJJVkVSX1NUUkVOR1RIX0lPXSA9IHtcbitcdFx0XHQubmFtZSA9IFwibWljcm9jaGlwLGlvLWRyaXZlLXN0cmVuZ3RoLW1pY3JvYW1wXCIsXG4rXHRcdFx0Lm9mZnNldCA9IDAsIC8qIGRvbid0IGNhcmUgKi9cbitcdFx0XHQudmFsdWUgPSAtMSxcbitcdFx0fSxcbitcdH07XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZWRldi1cdTAwM2VvZl9ub2RlO1xuK1x0Ym9vbCBoYXZlX2FueV9wcm9wID0gZmFsc2U7XG4rXHRpbnQgaSwgcmV0O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShvZl9wcm9wcyk7IGkrKykge1xuK1x0XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgb2ZfcHJvcHNbaV0ubmFtZSxcbitcdFx0XHRcdFx0ICAgXHUwMDI2b2ZfcHJvcHNbaV0udmFsdWUpO1xuK1x0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVJTlZBTClcbitcdFx0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWFkICVzXFxuXCIsXG4rXHRcdFx0XHQgb2ZfcHJvcHNbaV0ubmFtZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGhhdmVfYW55X3Byb3AgPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKCFoYXZlX2FueV9wcm9wKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHN3aXRjaCAoZGV2LVx1MDAzZWNoaXBfaWQpIHtcbitcdGNhc2UgS1NaODhYM19DSElQX0lEOlxuK1x0XHRyZXR1cm4ga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxuK1x0XHRcdFx0XHRcdCAgICBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4rXHRjYXNlIEtTWjg3OTVfQ0hJUF9JRDpcbitcdGNhc2UgS1NaODc5NF9DSElQX0lEOlxuK1x0Y2FzZSBLU1o4NzY1X0NISVBfSUQ6XG4rXHRcdHJldHVybiBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcyxcbitcdFx0XHRcdFx0XHRBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4rXHRkZWZhdWx0OlxuK1x0XHQvKiBLU1o4ODY0LCBLU1o4ODk1ICovXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpKyspIHtcbitcdFx0XHRpZiAob2ZfcHJvcHNbaV0udmFsdWUgPT0gLTEpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRkZXZfd2FybihkZXYtXHUwMDNlZGV2LCBcIiVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIHZhcmlhbnRcXG5cIixcbitcdFx0XHRcdCBvZl9wcm9wc1tpXS5uYW1lKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtMjA3NSw3ICsyNDM4LDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuK1x0cmV0ID0ga3N6OF9wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yNTUxLDggKzI5MTQsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODQ2M19zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfbWlycm9yX2RlbFx0PSBrc3o4X3BvcnRfbWlycm9yX2RlbCxcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbi1cdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OF9jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuK1x0LnBvcnRfY2hhbmdlX210dVx0PSBrc3o4OHh4X2NoYW5nZV9tdHUsXG4rXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6ODh4eF9tYXhfbXR1LFxuIFx0LnN1c3BlbmRcdFx0PSBrc3pfc3VzcGVuZCxcbiBcdC5yZXN1bWVcdFx0XHQ9IGtzel9yZXN1bWUsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBrc3pfZ2V0X3RzX2luZm8sXG5AQCAtMjU2MCw3ICsyOTIzLDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg0NjNfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxuIFx0LnBvcnRfdHh0c3RhbXBcdFx0PSBrc3pfcG9ydF90eHRzdGFtcCxcbiBcdC5wb3J0X3J4dHN0YW1wXHRcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXG4tXHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzel9zZXR1cF90YyxcbitcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6OF9zZXR1cF90YyxcbiBcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X3NldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X2dldF9kc2NwX3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbyxcbkBAIC0yNjAxLDggKzI5NjQsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODd4eF9zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfbWlycm9yX2RlbFx0PSBrc3o4X3BvcnRfbWlycm9yX2RlbCxcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbi1cdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OF9jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuK1x0LnBvcnRfY2hhbmdlX210dVx0PSBrc3o4N3h4X2NoYW5nZV9tdHUsXG4rXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6ODd4eF9tYXhfbXR1LFxuIFx0LnN1c3BlbmRcdFx0PSBrc3pfc3VzcGVuZCxcbiBcdC5yZXN1bWVcdFx0XHQ9IGtzel9yZXN1bWUsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBrc3pfZ2V0X3RzX2luZm8sXG5AQCAtMjYxMCw3ICsyOTczLDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejg3eHhfc3dpdGNoX29wcyA9IHtcbiBcdC5wb3J0X2h3dHN0YW1wX3NldFx0PSBrc3pfaHd0c3RhbXBfc2V0LFxuIFx0LnBvcnRfdHh0c3RhbXBcdFx0PSBrc3pfcG9ydF90eHRzdGFtcCxcbiBcdC5wb3J0X3J4dHN0YW1wXHRcdD0ga3N6X3BvcnRfcnh0c3RhbXAsXG4tXHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzel9zZXR1cF90YyxcbitcdC5wb3J0X3NldHVwX3RjXHRcdD0ga3N6ODd4eF9zZXR1cF90YyxcbiBcdC5wb3J0X2dldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X3NldF9kZWZhdWx0X3ByaW9cdD0ga3N6X3BvcnRfc2V0X2RlZmF1bHRfcHJpbyxcbiBcdC5wb3J0X2dldF9kc2NwX3ByaW9cdD0ga3N6X3BvcnRfZ2V0X2RzY3BfcHJpbyxcbkBAIC0yNjUyLDggKzMwMTUsOCBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMga3N6ODh4eF9zd2l0Y2hfb3BzID0ge1xuIFx0LnBvcnRfbWlycm9yX2RlbFx0PSBrc3o4X3BvcnRfbWlycm9yX2RlbCxcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbi1cdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OF9jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuK1x0LnBvcnRfY2hhbmdlX210dVx0PSBrc3o4OHh4X2NoYW5nZV9tdHUsXG4rXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6ODh4eF9tYXhfbXR1LFxuIFx0LmdldF93b2xcdFx0PSBrc3pfZ2V0X3dvbCxcbiBcdC5zZXRfd29sXHRcdD0ga3N6X3NldF93b2wsXG4gXHQuc3VzcGVuZFx0XHQ9IGtzel9zdXNwZW5kLFxuQEAgLTI2NjMsNyArMzAyNiw3IEBAIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBrc3o4OHh4X3N3aXRjaF9vcHMgPSB7XG4gXHQucG9ydF9od3RzdGFtcF9zZXRcdD0ga3N6X2h3dHN0YW1wX3NldCxcbiBcdC5wb3J0X3R4dHN0YW1wXHRcdD0ga3N6X3BvcnRfdHh0c3RhbXAsXG4gXHQucG9ydF9yeHRzdGFtcFx0XHQ9IGtzel9wb3J0X3J4dHN0YW1wLFxuLVx0LnBvcnRfc2V0dXBfdGNcdFx0PSBrc3pfc2V0dXBfdGMsXG4rXHQucG9ydF9zZXR1cF90Y1x0XHQ9IGtzejhfc2V0dXBfdGMsXG4gXHQucG9ydF9nZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kZWZhdWx0X3ByaW8sXG4gXHQucG9ydF9zZXRfZGVmYXVsdF9wcmlvXHQ9IGtzel9wb3J0X3NldF9kZWZhdWx0X3ByaW8sXG4gXHQucG9ydF9nZXRfZHNjcF9wcmlvXHQ9IGtzel9wb3J0X2dldF9kc2NwX3ByaW8sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xuaW5kZXggZjNmMGM5OGRmYjVhN2YuLjNlZTk5NTU0NWM1Nzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5AQCAtMTUsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2llZWU4MDIxcS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3N3aXRjaGRldi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJrc3o5NDc3X3JlZy5oXCJcbkBAIC02MCw2ICs2MSwxMSBAQCBzdGF0aWMgaW50IGtzejk0NzdfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbXR1KVxuIFx0XHRcdFx0ICBSRUdfU1dfTVRVX01BU0ssIGZyYW1lX3NpemUpO1xuIH1cbiBcbitpbnQga3N6OTQ3N19tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4re1xuK1x0cmV0dXJuIEtTWjk0NzdfTUFYX0ZSQU1FX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6OTQ3N193YWl0X3ZsYW5fY3RybF9yZWFkeShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGludCB2YWw7XG5AQCAtNDc4LDggKzQ4NCw4IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19oYWxmX2R1cGxleF9tb25pdG9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4tXHRcdFx0ICAgdTY0IHR4X2xhdGVfY29sKVxuK3N0YXRpYyBpbnQga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbitcdFx0XHRcdCAgdTY0IHR4X2xhdGVfY29sKVxuIHtcbiBcdHU4IHN0YXR1cztcbiBcdGludCByZXQ7XG5AQCAtNDk3LDYgKzUwMywyNCBAQCBpbnQga3N6OTQ3N19lcnJhdGFfbW9uaXRvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGtzejk0Nzdfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbit7XG4rXHRzdHJ1Y3Qga3N6X3N0YXRzX3JhdyAqcmF3O1xuK1x0c3RydWN0IGtzel9wb3J0X21pYiAqbWliO1xuK1x0aW50IHJldDtcbitcbitcdGtzel9yX21pYl9zdGF0czY0KGRldiwgcG9ydCk7XG4rXG4rXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlcGh5X2VycmF0YV85NDc3IFx1MDAyNlx1MDAyNiAha3N6X2lzX3NnbWlpX3BvcnQoZGV2LCBwb3J0KSkge1xuK1x0XHRtaWIgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xuK1x0XHRyYXcgPSAoc3RydWN0IGtzel9zdGF0c19yYXcgKiltaWItXHUwMDNlY291bnRlcnM7XG4rXG4rXHRcdHJldCA9IGtzejk0NzdfZXJyYXRhX21vbml0b3IoZGV2LCBwb3J0LCByYXctXHUwMDNldHhfbGF0ZV9jb2wpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gbW9uaXRvciB0cmFuc21pc3Npb24gaGFsdFxcblwiKTtcbitcdH1cbit9O1xuK1xuIHZvaWQga3N6OTQ3N19wb3J0X2luaXRfY250KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIHtcbiBcdHN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYiA9IFx1MDAyNmRldi1cdTAwM2Vwb3J0c1twb3J0XS5taWI7XG5AQCAtMTE3Niw2ICsxMjAwLDU4IEBAIHZvaWQga3N6OTQ3N19wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgICAgIFBPUlRfTUlSUk9SX1NOSUZGRVIsIGZhbHNlKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wga3N6OTQ3N19nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbit7XG4rXHRjb25zdCB1OCAqYml0dmFsID0gZGV2LVx1MDAzZWluZm8tXHUwMDNleG1paV9jdHJsMTtcbitcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4rXHRib29sIGdiaXQgPSBmYWxzZTtcbitcdHU4IGRhdGE4O1xuK1x0Ym9vbCB2YWw7XG4rXG4rXHRrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgXHUwMDI2ZGF0YTgpO1xuK1xuK1x0dmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7XG4rXG4rXHRpZiAodmFsID09IGJpdHZhbFtQX0dNSUlfMUdCSVRdKVxuK1x0XHRnYml0ID0gdHJ1ZTtcbitcbitcdHJldHVybiBnYml0O1xuK31cbitcbitzdGF0aWMgcGh5X2ludGVyZmFjZV90IGtzejk0NzdfZ2V0X3htaWkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4rXHRcdFx0XHRcdGJvb2wgZ2JpdClcbit7XG4rXHRjb25zdCB1OCAqYml0dmFsID0gZGV2LVx1MDAzZWluZm8tXHUwMDNleG1paV9jdHJsMTtcbitcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4rXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuK1x0dTggZGF0YTg7XG4rXHR1OCB2YWw7XG4rXG4rXHRrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgXHUwMDI2ZGF0YTgpO1xuK1xuK1x0dmFsID0gRklFTERfR0VUKFBfTUlJX1NFTF9NLCBkYXRhOCk7XG4rXG4rXHRpZiAodmFsID09IGJpdHZhbFtQX01JSV9TRUxdKSB7XG4rXHRcdGlmIChnYml0KVxuK1x0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJO1xuK1x0XHRlbHNlXG4rXHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbitcdH0gZWxzZSBpZiAodmFsID09IGJpdHZhbFtQX1JNSUlfU0VMXSkge1xuK1x0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTtcbitcdH0gZWxzZSB7XG4rXHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTtcbitcdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcbitcdFx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDtcbitcdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0lHX0VOQUJMRSkge1xuK1x0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEO1xuK1x0XHRcdGlmIChkYXRhOCBcdTAwMjYgUF9SR01JSV9JRF9FR19FTkFCTEUpXG4rXHRcdFx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBpbnRlcmZhY2U7XG4rfVxuK1xuIHN0YXRpYyBwaHlfaW50ZXJmYWNlX3Qga3N6OTQ3N19nZXRfaW50ZXJmYWNlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIHtcbiBcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG5AQCAtMTE4NCw5ICsxMjYwLDkgQEAgc3RhdGljIHBoeV9pbnRlcmZhY2VfdCBrc3o5NDc3X2dldF9pbnRlcmZhY2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlaW50ZXJuYWxfcGh5W3BvcnRdKVxuIFx0XHRyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX05BO1xuIFxuLVx0Z2JpdCA9IGtzel9nZXRfZ2JpdChkZXYsIHBvcnQpO1xuK1x0Z2JpdCA9IGtzejk0NzdfZ2V0X2diaXQoZGV2LCBwb3J0KTtcbiBcbi1cdGludGVyZmFjZSA9IGtzel9nZXRfeG1paShkZXYsIHBvcnQsIGdiaXQpO1xuK1x0aW50ZXJmYWNlID0ga3N6OTQ3N19nZXRfeG1paShkZXYsIHBvcnQsIGdiaXQpO1xuIFxuIFx0cmV0dXJuIGludGVyZmFjZTtcbiB9XG5AQCAtMTMzNSw2ICsxNDExLDI4IEBAIHN0YXRpYyB2b2lkIGtzejk0NzdfcG9ydF9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBjcHVfcG9ydClcbiBcdGtzel9wd3JpdGU4KGRldiwgcG9ydCwgcmVnc1tSRUdfUE9SVF9QTUVfQ1RSTF0sIDApO1xuIH1cbiBcbitpbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4re1xuK1x0dTMyIHF1ZXVlX21hcCA9IDA7XG4rXHRpbnQgaXBtO1xuK1xuK1x0Zm9yIChpcG0gPSAwOyBpcG0gXHUwMDNjIGRldi1cdTAwM2VpbmZvLVx1MDAzZW51bV9pcG1zOyBpcG0rKykge1xuK1x0XHRpbnQgcXVldWU7XG4rXG4rXHRcdC8qIFRyYWZmaWMgVHlwZSAoVFQpIGlzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEludGVybmFsIFByaW9yaXR5XG4rXHRcdCAqIE1hcCAoSVBNKSBpbiB0aGUgc3dpdGNoLiBUcmFmZmljIENsYXNzIChUQykgaXNcbitcdFx0ICogY29ycmVzcG9uZGluZyB0byB0aGUgcXVldWUgaW4gdGhlIHN3aXRjaC5cbitcdFx0ICovXG4rXHRcdHF1ZXVlID0gaWVlZTgwMjFxX3R0X3RvX3RjKGlwbSwgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4rXHRcdGlmIChxdWV1ZSBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcXVldWU7XG4rXG4rXHRcdHF1ZXVlX21hcCB8PSBxdWV1ZSBcdTAwM2NcdTAwM2MgKGlwbSAqIEtTWjk0NzdfUE9SVF9UQ19NQVBfUyk7XG4rXHR9XG4rXG4rXHRyZXR1cm4ga3N6X3B3cml0ZTMyKGRldiwgcG9ydCwgS1NaOTQ3N19QT1JUX01SSV9UQ19NQVBfXzQsIHF1ZXVlX21hcCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6OTQ3N19kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTE1MTcsNiArMTYxNSw1OCBAQCBpbnQga3N6OTQ3N19lbmFibGVfc3RwX2FkZHIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiBrc3o5NDc3X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKCkgLSBFeHRyYWN0IGFuZCBhcHBseSBkcml2ZSBzdHJlbmd0aFxuKyAqXHRcdFx0XHQgICAgY29uZmlndXJhdGlvbnMgZnJvbSBkZXZpY2UgdHJlZSBwcm9wZXJ0aWVzLlxuKyAqIEBkZXY6XHRrc3ogZGV2aWNlXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyBmcm9tIHRoZVxuKyAqIGRldmljZSB0cmVlLCB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGNoaXAgdmFyaWFudHMsIGFuZCBzZXRzXG4rICogdGhlbSBhY2NvcmRpbmdseS4gQW4gZXJyb3Igc2hvdWxkIGJlIGNyaXRpY2FsIGhlcmUsIGFzIHRoZSBkcml2ZSBzdHJlbmd0aFxuKyAqIHNldHRpbmdzIGFyZSBjcnVjaWFsIGZvciBFTUkgY29tcGxpYW5jZS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBpbnQga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Agb2ZfcHJvcHNbXSA9IHtcbitcdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSEldID0ge1xuK1x0XHRcdC5uYW1lID0gXCJtaWNyb2NoaXAsaGktZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcIixcbitcdFx0XHQub2Zmc2V0ID0gU1dfSElfU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcbitcdFx0XHQudmFsdWUgPSAtMSxcbitcdFx0fSxcbitcdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfTE9dID0ge1xuK1x0XHRcdC5uYW1lID0gXCJtaWNyb2NoaXAsbG8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcIixcbitcdFx0XHQub2Zmc2V0ID0gU1dfTE9fU1BFRURfRFJJVkVfU1RSRU5HVEhfUyxcbitcdFx0XHQudmFsdWUgPSAtMSxcbitcdFx0fSxcbitcdFx0W0tTWl9EUklWRVJfU1RSRU5HVEhfSU9dID0ge1xuK1x0XHRcdC5uYW1lID0gXCJtaWNyb2NoaXAsaW8tZHJpdmUtc3RyZW5ndGgtbWljcm9hbXBcIixcbitcdFx0XHQub2Zmc2V0ID0gMCwgLyogZG9uJ3QgY2FyZSAqL1xuK1x0XHRcdC52YWx1ZSA9IC0xLFxuK1x0XHR9LFxuK1x0fTtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGU7XG4rXHRib29sIGhhdmVfYW55X3Byb3AgPSBmYWxzZTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG9mX3Byb3BzKTsgaSsrKSB7XG4rXHRcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBvZl9wcm9wc1tpXS5uYW1lLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZvZl9wcm9wc1tpXS52YWx1ZSk7XG4rXHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVkFMKVxuK1x0XHRcdGRldl93YXJuKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgJXNcXG5cIixcbitcdFx0XHRcdCBvZl9wcm9wc1tpXS5uYW1lKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aGF2ZV9hbnlfcHJvcCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoIWhhdmVfYW55X3Byb3ApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLCBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4rfVxuIHN0YXRpYyBpbnQga3N6OTQ3N19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG5AQCAtMTUzOSw3ICsxNjg5LDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuK1x0cmV0ID0ga3N6OTQ3N19wYXJzZV9kcml2ZV9zdHJlbmd0aChkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMDUyLDcgKzIyMDIsNyBAQCBjb25zdCBzdHJ1Y3Qga3N6X2Rldl9vcHMga3N6OTQ3N19kZXZfb3BzID0ge1xuIFx0LmNmZ19wb3J0X21lbWJlciA9IGtzejk0NzdfY2ZnX3BvcnRfbWVtYmVyLFxuIFx0LnJfbWliX2NudCA9IGtzejk0Nzdfcl9taWJfY250LFxuIFx0LnJfbWliX3BrdCA9IGtzejk0Nzdfcl9taWJfcGt0LFxuLVx0LnJfbWliX3N0YXQ2NCA9IGtzel9yX21pYl9zdGF0czY0LFxuK1x0LnJfbWliX3N0YXQ2NCA9IGtzejk0Nzdfcl9taWJfc3RhdHM2NCxcbiBcdC5mcmVlemVfbWliID0ga3N6OTQ3N19mcmVlemVfbWliLFxuIFx0LnBvcnRfaW5pdF9jbnQgPSBrc3o5NDc3X3BvcnRfaW5pdF9jbnQsXG4gXHQucG1lX3dyaXRlOCA9IGtzel93cml0ZTgsXG5AQCAtMjA5OCw3ICsyMjQ4LDcgQEAgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGtzejk0Nzdfc3dpdGNoX29wcyA9IHtcbiBcdC5nZXRfc3RhdHM2NFx0XHQ9IGtzel9nZXRfc3RhdHM2NCxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0ga3N6X2dldF9wYXVzZV9zdGF0cyxcbiBcdC5wb3J0X2NoYW5nZV9tdHVcdD0ga3N6OTQ3N19jaGFuZ2VfbXR1LFxuLVx0LnBvcnRfbWF4X210dVx0XHQ9IGtzel9tYXhfbXR1LFxuK1x0LnBvcnRfbWF4X210dVx0XHQ9IGtzejk0NzdfbWF4X210dSxcbiBcdC5nZXRfd29sXHRcdD0ga3N6X2dldF93b2wsXG4gXHQuc2V0X3dvbFx0XHQ9IGtzel9zZXRfd29sLFxuIFx0LnN1c3BlbmRcdFx0PSBrc3pfc3VzcGVuZCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5oXG5pbmRleCA5MmExZDg4OTIyNGQzZS4uYTg0YzAwMDAwMGU2NmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmhcbkBAIC0yMSw2ICsyMSw3IEBAIHZvaWQga3N6OTQ3N19mcmVlemVfbWliKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBib29sIGZyZWV6ZSk7XG4gdm9pZCBrc3o5NDc3X3BvcnRfaW5pdF9jbnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuIGludCBrc3o5NDc3X3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdGJvb2wgZmxhZywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitpbnQga3N6OTQ3N19tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpO1xuIGludCBrc3o5NDc3X3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcbiBcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5AQCAtMzEsOCArMzIsNiBAQCBpbnQga3N6OTQ3N19wb3J0X21pcnJvcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgICAgYm9vbCBpbmdyZXNzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHZvaWQga3N6OTQ3N19wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHQgICAgIHN0cnVjdCBkc2FfbWFsbF9taXJyb3JfdGNfZW50cnkgKm1pcnJvcik7XG4taW50IGtzejk0NzdfZXJyYXRhX21vbml0b3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4tXHRcdFx0ICAgdTY0IHR4X2xhdGVfY29sKTtcbiBpbnQga3N6OTQ3N19mZGJfZHVtcChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHQgICAgIGRzYV9mZGJfZHVtcF9jYl90ICpjYiwgdm9pZCAqZGF0YSk7XG4gaW50IGtzejk0NzdfZmRiX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuQEAgLTQ1LDYgKzQ0LDcgQEAgaW50IGtzejk0NzdfbWRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHQgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF9tZGIgKm1kYiwgc3RydWN0IGRzYV9kYiBkYik7XG4gaW50IGtzejk0NzdfZW5hYmxlX3N0cF9hZGRyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6OTQ3N19wb3J0X3F1ZXVlX3NwbGl0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcbitpbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuIFxuIGludCBrc3o5NDc3X3BvcnRfYWNsX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuIHZvaWQga3N6OTQ3N19wb3J0X2FjbF9mcmVlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG5pbmRleCBkMTcyNjc3OGJiNDg4ZS4uNjdhYjZkZGI5ZTUzZjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbkBAIC0zNyw4MiArMzcsNiBAQFxuIFxuICNkZWZpbmUgTUlCX0NPVU5URVJfTlVNIDB4MjBcbiBcbi1zdHJ1Y3Qga3N6X3N0YXRzX3JhdyB7XG4tXHR1NjQgcnhfaGk7XG4tXHR1NjQgcnhfdW5kZXJzaXplO1xuLVx0dTY0IHJ4X2ZyYWdtZW50cztcbi1cdHU2NCByeF9vdmVyc2l6ZTtcbi1cdHU2NCByeF9qYWJiZXJzO1xuLVx0dTY0IHJ4X3N5bWJvbF9lcnI7XG4tXHR1NjQgcnhfY3JjX2Vycjtcbi1cdHU2NCByeF9hbGlnbl9lcnI7XG4tXHR1NjQgcnhfbWFjX2N0cmw7XG4tXHR1NjQgcnhfcGF1c2U7XG4tXHR1NjQgcnhfYmNhc3Q7XG4tXHR1NjQgcnhfbWNhc3Q7XG4tXHR1NjQgcnhfdWNhc3Q7XG4tXHR1NjQgcnhfNjRfb3JfbGVzcztcbi1cdHU2NCByeF82NV8xMjc7XG4tXHR1NjQgcnhfMTI4XzI1NTtcbi1cdHU2NCByeF8yNTZfNTExO1xuLVx0dTY0IHJ4XzUxMl8xMDIzO1xuLVx0dTY0IHJ4XzEwMjRfMTUyMjtcbi1cdHU2NCByeF8xNTIzXzIwMDA7XG4tXHR1NjQgcnhfMjAwMTtcbi1cdHU2NCB0eF9oaTtcbi1cdHU2NCB0eF9sYXRlX2NvbDtcbi1cdHU2NCB0eF9wYXVzZTtcbi1cdHU2NCB0eF9iY2FzdDtcbi1cdHU2NCB0eF9tY2FzdDtcbi1cdHU2NCB0eF91Y2FzdDtcbi1cdHU2NCB0eF9kZWZlcnJlZDtcbi1cdHU2NCB0eF90b3RhbF9jb2w7XG4tXHR1NjQgdHhfZXhjX2NvbDtcbi1cdHU2NCB0eF9zaW5nbGVfY29sO1xuLVx0dTY0IHR4X211bHRfY29sO1xuLVx0dTY0IHJ4X3RvdGFsO1xuLVx0dTY0IHR4X3RvdGFsO1xuLVx0dTY0IHJ4X2Rpc2NhcmRzO1xuLVx0dTY0IHR4X2Rpc2NhcmRzO1xuLX07XG4tXG4tc3RydWN0IGtzejg4eHhfc3RhdHNfcmF3IHtcbi1cdHU2NCByeDtcbi1cdHU2NCByeF9oaTtcbi1cdHU2NCByeF91bmRlcnNpemU7XG4tXHR1NjQgcnhfZnJhZ21lbnRzO1xuLVx0dTY0IHJ4X292ZXJzaXplO1xuLVx0dTY0IHJ4X2phYmJlcnM7XG4tXHR1NjQgcnhfc3ltYm9sX2Vycjtcbi1cdHU2NCByeF9jcmNfZXJyO1xuLVx0dTY0IHJ4X2FsaWduX2Vycjtcbi1cdHU2NCByeF9tYWNfY3RybDtcbi1cdHU2NCByeF9wYXVzZTtcbi1cdHU2NCByeF9iY2FzdDtcbi1cdHU2NCByeF9tY2FzdDtcbi1cdHU2NCByeF91Y2FzdDtcbi1cdHU2NCByeF82NF9vcl9sZXNzO1xuLVx0dTY0IHJ4XzY1XzEyNztcbi1cdHU2NCByeF8xMjhfMjU1O1xuLVx0dTY0IHJ4XzI1Nl81MTE7XG4tXHR1NjQgcnhfNTEyXzEwMjM7XG4tXHR1NjQgcnhfMTAyNF8xNTIyO1xuLVx0dTY0IHR4O1xuLVx0dTY0IHR4X2hpO1xuLVx0dTY0IHR4X2xhdGVfY29sO1xuLVx0dTY0IHR4X3BhdXNlO1xuLVx0dTY0IHR4X2JjYXN0O1xuLVx0dTY0IHR4X21jYXN0O1xuLVx0dTY0IHR4X3VjYXN0O1xuLVx0dTY0IHR4X2RlZmVycmVkO1xuLVx0dTY0IHR4X3RvdGFsX2NvbDtcbi1cdHU2NCB0eF9leGNfY29sO1xuLVx0dTY0IHR4X3NpbmdsZV9jb2w7XG4tXHR1NjQgdHhfbXVsdF9jb2w7XG4tXHR1NjQgcnhfZGlzY2FyZHM7XG4tXHR1NjQgdHhfZGlzY2FyZHM7XG4tfTtcbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGtzel9taWJfbmFtZXMga3N6ODh4eF9taWJfbmFtZXNbXSA9IHtcbiBcdHsgMHgwMCwgXCJyeFwiIH0sXG4gXHR7IDB4MDEsIFwicnhfaGlcIiB9LFxuQEAgLTE4OSwyOCArMTEzLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfbWliX25hbWVzIGtzejk0NzdfbWliX25hbWVzW10gPSB7XG4gXHR7IDB4ODMsIFwidHhfZGlzY2FyZHNcIiB9LFxuIH07XG4gXG4tc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCB7XG4tXHRjb25zdCBjaGFyICpuYW1lO1xuLVx0aW50IG9mZnNldDtcbi1cdGludCB2YWx1ZTtcbi19O1xuLVxuLWVudW0ga3N6X2RyaXZlcl9zdHJlbmd0aF90eXBlIHtcbi1cdEtTWl9EUklWRVJfU1RSRU5HVEhfSEksXG4tXHRLU1pfRFJJVkVSX1NUUkVOR1RIX0xPLFxuLVx0S1NaX0RSSVZFUl9TVFJFTkdUSF9JTyxcbi19O1xuLVxuLS8qKlxuLSAqIHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggLSBkcml2ZSBzdHJlbmd0aCBtYXBwaW5nXG4tICogQHJlZ192YWw6XHRyZWdpc3RlciB2YWx1ZVxuLSAqIEBtaWNyb2FtcDpcdG1pY3JvYW1wIHZhbHVlXG4tICovXG4tc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCB7XG4tXHR1MzIgcmVnX3ZhbDtcbi1cdHUzMiBtaWNyb2FtcDtcbi19O1xuLVxuIC8qIGtzejk0NzdfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaOTQ3NyB2YXJpYW50c1xuICAqXG4gICogVGhpcyB2YWx1ZXMgYXJlIG5vdCBkb2N1bWVudGVkIGluIEtTWjk0NzcgdmFyaWFudHMgYnV0IGNvbmZpcm1lZCBieVxuQEAgLTI0NiwxNSArMTQ4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgga3N6OTQ3N19kcml2ZV9zdHJlbmd0aHNbXSA9IHtcbiBcdHsgU1dfRFJJVkVfU1RSRU5HVEhfMjhNQSwgMjgwMDAgfSxcbiB9O1xuIFxuLS8qIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzIC0gRHJpdmUgc3RyZW5ndGggbWFwcGluZyBmb3IgS1NaODg2MywgS1NaODg3MywgLi5cbi0gKlx0XHRcdCAgICAgdmFyaWFudHMuXG4tICogVGhpcyB2YWx1ZXMgYXJlIGRvY3VtZW50ZWQgaW4gS1NaODg3MyBhbmQgS1NaODg2MyBkYXRhc2hlZXRzLlxuLSAqL1xuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzW10gPSB7XG4tXHR7IDAsICA4MDAwIH0sXG4tXHR7IEtTWjg4NzNfRFJJVkVfU1RSRU5HVEhfMTZNQSwgMTYwMDAgfSxcbi19O1xuLVxuIC8qKlxuICAqIGtzel9waHlsaW5rX21hY19kaXNhYmxlX3R4X2xwaSgpIC0gQ2FsbGJhY2sgdG8gc2lnbmFsIExQSSBzdXBwb3J0IChEdW1teSlcbiAgKiBAY29uZmlnOiBwaHlsaW5rIGNvbmZpZyBzdHJ1Y3R1cmVcbkBAIC0yMDEzLDcgKzE5MDYsNiBAQCB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIFx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cztcbiBcdHN0cnVjdCBrc3pfc3RhdHNfcmF3ICpyYXc7XG4gXHRzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7XG4tXHRpbnQgcmV0O1xuIFxuIFx0bWliID0gXHUwMDI2ZGV2LVx1MDAzZXBvcnRzW3BvcnRdLm1pYjtcbiBcdHN0YXRzID0gXHUwMDI2bWliLVx1MDAzZXN0YXRzNjQ7XG5AQCAtMjA1NSw2MSArMTk0Nyw2IEBAIHZvaWQga3N6X3JfbWliX3N0YXRzNjQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRwc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcmF3LVx1MDAzZXJ4X3BhdXNlO1xuIFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2bWliLVx1MDAzZXN0YXRzNjRfbG9jayk7XG4tXG4tXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlcGh5X2VycmF0YV85NDc3IFx1MDAyNlx1MDAyNiAha3N6X2lzX3NnbWlpX3BvcnQoZGV2LCBwb3J0KSkge1xuLVx0XHRyZXQgPSBrc3o5NDc3X2VycmF0YV9tb25pdG9yKGRldiwgcG9ydCwgcmF3LVx1MDAzZXR4X2xhdGVfY29sKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIG1vbml0b3IgdHJhbnNtaXNzaW9uIGhhbHRcXG5cIik7XG4tXHR9XG4tfVxuLVxuLXZvaWQga3N6ODh4eF9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuLXtcbi1cdHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwc3RhdHM7XG4tXHRzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzO1xuLVx0c3RydWN0IGtzejg4eHhfc3RhdHNfcmF3ICpyYXc7XG4tXHRzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWI7XG4tXG4tXHRtaWIgPSBcdTAwMjZkZXYtXHUwMDNlcG9ydHNbcG9ydF0ubWliO1xuLVx0c3RhdHMgPSBcdTAwMjZtaWItXHUwMDNlc3RhdHM2NDtcbi1cdHBzdGF0cyA9IFx1MDAyNm1pYi1cdTAwM2VwYXVzZV9zdGF0cztcbi1cdHJhdyA9IChzdHJ1Y3Qga3N6ODh4eF9zdGF0c19yYXcgKiltaWItXHUwMDNlY291bnRlcnM7XG4tXG4tXHRzcGluX2xvY2soXHUwMDI2bWliLVx1MDAzZXN0YXRzNjRfbG9jayk7XG4tXG4tXHRzdGF0cy1cdTAwM2VyeF9wYWNrZXRzID0gcmF3LVx1MDAzZXJ4X2JjYXN0ICsgcmF3LVx1MDAzZXJ4X21jYXN0ICsgcmF3LVx1MDAzZXJ4X3VjYXN0ICtcbi1cdFx0cmF3LVx1MDAzZXJ4X3BhdXNlO1xuLVx0c3RhdHMtXHUwMDNldHhfcGFja2V0cyA9IHJhdy1cdTAwM2V0eF9iY2FzdCArIHJhdy1cdTAwM2V0eF9tY2FzdCArIHJhdy1cdTAwM2V0eF91Y2FzdCArXG4tXHRcdHJhdy1cdTAwM2V0eF9wYXVzZTtcbi1cbi1cdC8qIEhXIGNvdW50ZXJzIGFyZSBjb3VudGluZyBieXRlcyArIEZDUyB3aGljaCBpcyBub3QgYWNjZXB0YWJsZVxuLVx0ICogZm9yIHJ0bmxfbGlua19zdGF0czY0IGludGVyZmFjZVxuLVx0ICovXG4tXHRzdGF0cy1cdTAwM2VyeF9ieXRlcyA9IHJhdy1cdTAwM2VyeCArIHJhdy1cdTAwM2VyeF9oaSAtIHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgKiBFVEhfRkNTX0xFTjtcbi1cdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gcmF3LVx1MDAzZXR4ICsgcmF3LVx1MDAzZXR4X2hpIC0gc3RhdHMtXHUwMDNldHhfcGFja2V0cyAqIEVUSF9GQ1NfTEVOO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9IHJhdy1cdTAwM2VyeF91bmRlcnNpemUgKyByYXctXHUwMDNlcnhfZnJhZ21lbnRzICtcbi1cdFx0cmF3LVx1MDAzZXJ4X292ZXJzaXplO1xuLVxuLVx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyA9IHJhdy1cdTAwM2VyeF9jcmNfZXJyO1xuLVx0c3RhdHMtXHUwMDNlcnhfZnJhbWVfZXJyb3JzID0gcmF3LVx1MDAzZXJ4X2FsaWduX2Vycjtcbi1cdHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQgPSByYXctXHUwMDNlcnhfZGlzY2FyZHM7XG4tXHRzdGF0cy1cdTAwM2VyeF9lcnJvcnMgPSBzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzICsgc3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyArXG4tXHRcdHN0YXRzLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyAgKyBzdGF0cy1cdTAwM2VyeF9kcm9wcGVkO1xuLVxuLVx0c3RhdHMtXHUwMDNldHhfd2luZG93X2Vycm9ycyA9IHJhdy1cdTAwM2V0eF9sYXRlX2NvbDtcbi1cdHN0YXRzLVx1MDAzZXR4X2ZpZm9fZXJyb3JzID0gcmF3LVx1MDAzZXR4X2Rpc2NhcmRzO1xuLVx0c3RhdHMtXHUwMDNldHhfYWJvcnRlZF9lcnJvcnMgPSByYXctXHUwMDNldHhfZXhjX2NvbDtcbi1cdHN0YXRzLVx1MDAzZXR4X2Vycm9ycyA9IHN0YXRzLVx1MDAzZXR4X3dpbmRvd19lcnJvcnMgKyBzdGF0cy1cdTAwM2V0eF9maWZvX2Vycm9ycyArXG4tXHRcdHN0YXRzLVx1MDAzZXR4X2Fib3J0ZWRfZXJyb3JzO1xuLVxuLVx0c3RhdHMtXHUwMDNlbXVsdGljYXN0ID0gcmF3LVx1MDAzZXJ4X21jYXN0O1xuLVx0c3RhdHMtXHUwMDNlY29sbGlzaW9ucyA9IHJhdy1cdTAwM2V0eF90b3RhbF9jb2w7XG4tXG4tXHRwc3RhdHMtXHUwMDNldHhfcGF1c2VfZnJhbWVzID0gcmF3LVx1MDAzZXR4X3BhdXNlO1xuLVx0cHN0YXRzLVx1MDAzZXJ4X3BhdXNlX2ZyYW1lcyA9IHJhdy1cdTAwM2VyeF9wYXVzZTtcbi1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNm1pYi1cdTAwM2VzdGF0czY0X2xvY2spO1xuIH1cbiBcbiB2b2lkIGtzel9nZXRfc3RhdHM2NChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuQEAgLTI4ODUsMjggKzI3MjIsNiBAQCB2b2lkIGtzel9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0ICovXG4gfVxuIFxuLWludCBrc3o5NDc3X3NldF9kZWZhdWx0X3ByaW9fcXVldWVfbWFwcGluZyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHR1MzIgcXVldWVfbWFwID0gMDtcbi1cdGludCBpcG07XG4tXG4tXHRmb3IgKGlwbSA9IDA7IGlwbSBcdTAwM2MgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX2lwbXM7IGlwbSsrKSB7XG4tXHRcdGludCBxdWV1ZTtcbi1cbi1cdFx0LyogVHJhZmZpYyBUeXBlIChUVCkgaXMgY29ycmVzcG9uZGluZyB0byB0aGUgSW50ZXJuYWwgUHJpb3JpdHlcbi1cdFx0ICogTWFwIChJUE0pIGluIHRoZSBzd2l0Y2guIFRyYWZmaWMgQ2xhc3MgKFRDKSBpc1xuLVx0XHQgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZSBpbiB0aGUgc3dpdGNoLlxuLVx0XHQgKi9cbi1cdFx0cXVldWUgPSBpZWVlODAyMXFfdHRfdG9fdGMoaXBtLCBkZXYtXHUwMDNlaW5mby1cdTAwM2VudW1fdHhfcXVldWVzKTtcbi1cdFx0aWYgKHF1ZXVlIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBxdWV1ZTtcbi1cbi1cdFx0cXVldWVfbWFwIHw9IHF1ZXVlIFx1MDAzY1x1MDAzYyAoaXBtICogS1NaOTQ3N19QT1JUX1RDX01BUF9TKTtcbi1cdH1cbi1cbi1cdHJldHVybiBrc3pfcHdyaXRlMzIoZGV2LCBwb3J0LCBLU1o5NDc3X1BPUlRfTVJJX1RDX01BUF9fNCwgcXVldWVfbWFwKTtcbi19XG4tXG4gdm9pZCBrc3pfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuQEAgLTI5ODQsNDAgKzI3OTksNiBAQCBpbnQga3N6X3BvcnRfYnJpZGdlX2ZsYWdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGtzel9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4te1xuLVx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4tXG4tXHRzd2l0Y2ggKGRldi1cdTAwM2VjaGlwX2lkKSB7XG4tXHRjYXNlIEtTWjg3OTVfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODc5NF9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NzY1X0NISVBfSUQ6XG4tXHRcdHJldHVybiBLU1o4Nzk1X0hVR0VfUEFDS0VUX1NJWkUgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU47XG4tXHRjYXNlIEtTWjg0NjNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODhYM19DSElQX0lEOlxuLVx0Y2FzZSBLU1o4ODY0X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg4OTVfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIEtTWjg4NjNfSFVHRV9QQUNLRVRfU0laRSAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTjtcbi1cdGNhc2UgS1NaODU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk0NzdfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTU2M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o5NTY3X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk4OTNfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTg5Nl9DSElQX0lEOlxuLVx0Y2FzZSBLU1o5ODk3X0NISVBfSUQ6XG4tXHRjYXNlIExBTjkzNzBfQ0hJUF9JRDpcbi1cdGNhc2UgTEFOOTM3MV9DSElQX0lEOlxuLVx0Y2FzZSBMQU45MzcyX0NISVBfSUQ6XG4tXHRjYXNlIExBTjkzNzNfQ0hJUF9JRDpcbi1cdGNhc2UgTEFOOTM3NF9DSElQX0lEOlxuLVx0Y2FzZSBMQU45NjQ2X0NISVBfSUQ6XG4tXHRcdHJldHVybiBLU1o5NDc3X01BWF9GUkFNRV9TSVpFIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOO1xuLVx0fVxuLVxuLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLX1cbi1cbiBpbnQga3N6X3NldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuIHtcbkBAIC0zMDg2LDM5ICsyODY3LDYgQEAgdm9pZCBrc3pfc2V0X3htaWkoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4gXHRrc3pfcHdyaXRlOChkZXYsIHBvcnQsIHJlZ3NbUF9YTUlJX0NUUkxfMV0sIGRhdGE4KTtcbiB9XG4gXG4tcGh5X2ludGVyZmFjZV90IGtzel9nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBnYml0KVxuLXtcbi1cdGNvbnN0IHU4ICpiaXR2YWwgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2V4bWlpX2N0cmwxO1xuLVx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbi1cdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4tXHR1OCBkYXRhODtcbi1cdHU4IHZhbDtcbi1cbi1cdGtzel9wcmVhZDgoZGV2LCBwb3J0LCByZWdzW1BfWE1JSV9DVFJMXzFdLCBcdTAwMjZkYXRhOCk7XG4tXG4tXHR2YWwgPSBGSUVMRF9HRVQoUF9NSUlfU0VMX00sIGRhdGE4KTtcbi1cbi1cdGlmICh2YWwgPT0gYml0dmFsW1BfTUlJX1NFTF0pIHtcbi1cdFx0aWYgKGdiaXQpXG4tXHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuLVx0fSBlbHNlIGlmICh2YWwgPT0gYml0dmFsW1BfUk1JSV9TRUxdKSB7XG4tXHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJO1xuLVx0fSBlbHNlIHtcbi1cdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJO1xuLVx0XHRpZiAoZGF0YTggXHUwMDI2IFBfUkdNSUlfSURfRUdfRU5BQkxFKVxuLVx0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEO1xuLVx0XHRpZiAoZGF0YTggXHUwMDI2IFBfUkdNSUlfSURfSUdfRU5BQkxFKSB7XG4tXHRcdFx0aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ7XG4tXHRcdFx0aWYgKGRhdGE4IFx1MDAyNiBQX1JHTUlJX0lEX0VHX0VOQUJMRSlcbi1cdFx0XHRcdGludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0cmV0dXJuIGludGVyZmFjZTtcbi19XG4tXG4gYm9vbCBrc3pfcGh5bGlua19uZWVkX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGludCBtb2RlKVxuIHtcbkBAIC0zMTU0LDI0ICsyOTAyLDYgQEAgdm9pZCBrc3pfcGh5bGlua19tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFx0XHRrc3pfc2V0X3htaWkoZGV2LCBwb3J0LCBzdGF0ZS1cdTAwM2VpbnRlcmZhY2UpO1xuIH1cbiBcbi1ib29sIGtzel9nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHRjb25zdCB1OCAqYml0dmFsID0gZGV2LVx1MDAzZWluZm8tXHUwMDNleG1paV9jdHJsMTtcbi1cdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4tXHRib29sIGdiaXQgPSBmYWxzZTtcbi1cdHU4IGRhdGE4O1xuLVx0Ym9vbCB2YWw7XG4tXG4tXHRrc3pfcHJlYWQ4KGRldiwgcG9ydCwgcmVnc1tQX1hNSUlfQ1RSTF8xXSwgXHUwMDI2ZGF0YTgpO1xuLVxuLVx0dmFsID0gRklFTERfR0VUKFBfR01JSV8xR0JJVF9NLCBkYXRhOCk7XG4tXG4tXHRpZiAodmFsID09IGJpdHZhbFtQX0dNSUlfMUdCSVRdKVxuLVx0XHRnYml0ID0gdHJ1ZTtcbi1cbi1cdHJldHVybiBnYml0O1xuLX1cbi1cbiBzdGF0aWMgaW50IGtzel9zd2l0Y2hfZGV0ZWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4ge1xuIFx0dTggaWQxLCBpZDIsIGlkNDtcbkBAIC0zMzE0LDggKzMwNDQsOCBAQCBzdGF0aWMgaW50IGtzel9zZXR1cF90Y19tb2RlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCB1OCBzY2hlZHVsZXIsXG4gXHRcdFx0ICAgRklFTERfUFJFUChNVElfU0hBUElOR19NLCBzaGFwZXIpKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfc2V0dXBfdGNfY2JzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tXHRcdFx0ICAgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KVxuK2ludCBrc3pfc2V0dXBfdGNfY2JzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4rXHRcdCAgICAgc3RydWN0IHRjX2Nic19xb3B0X29mZmxvYWQgKnFvcHQpXG4ge1xuIFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuQEAgLTMzODAsOCArMzExMCw4IEBAIHN0YXRpYyBpbnQga3N6X2Rpc2FibGVfZWdyZXNzX3JhdGVfbGltaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfZXRzX2JhbmRfdG9fcXVldWUoc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnAsXG4tXHRcdFx0XHQgaW50IGJhbmQpXG4raW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCxcbitcdFx0XHQgIGludCBiYW5kKVxuIHtcbiBcdC8qIENvbXBhcmVkIHRvIHF1ZXVlcywgYmFuZHMgcHJpb3JpdGl6ZSBwYWNrZXRzIGRpZmZlcmVudGx5LiBJbiBzdHJpY3RcbiBcdCAqIHByaW9yaXR5IG1vZGUsIHRoZSBsb3dlc3QgcHJpb3JpdHkgaXMgYXNzaWduZWQgdG8gUXVldWUgMCB3aGlsZSB0aGVcbkBAIC0zMzkwLDEwNCArMzEyMCw2IEBAIHN0YXRpYyBpbnQga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwLFxuIFx0cmV0dXJuIHAtXHUwMDNlYmFuZHMgLSAxIC0gYmFuZDtcbiB9XG4gXG4tc3RhdGljIHU4IGtzejg0NjNfdGNfY3RybChpbnQgcG9ydCwgaW50IHF1ZXVlKVxuLXtcbi1cdHU4IHJlZztcbi1cbi1cdHJlZyA9IDB4QzggKyBwb3J0ICogNDtcbi1cdHJlZyArPSAoKDMgLSBxdWV1ZSkgLyAyKSAqIDI7XG4tXHRyZWcrKztcbi1cdHJlZyAtPSAocXVldWUgXHUwMDI2IDEpO1xuLVx0cmV0dXJuIHJlZztcbi19XG4tXG4tLyoqXG4tICoga3N6ODh4M190Y19ldHNfYWRkIC0gQ29uZmlndXJlIEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbilcbi0gKiAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBwb3J0IG9uIEtTWjg4eDMgc3dpdGNoXG4tICogQGRldjogUG9pbnRlciB0byB0aGUgS1NaIHN3aXRjaCBkZXZpY2Ugc3RydWN0dXJlXG4tICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGNvbmZpZ3VyZVxuLSAqIEBwOiBQb2ludGVyIHRvIG9mZmxvYWQgcmVwbGFjZSBwYXJhbWV0ZXJzIGRlc2NyaWJpbmcgRVRTIGJhbmRzIGFuZCBtYXBwaW5nXG4tICpcbi0gKiBUaGUgS1NaODh4MyBzdXBwb3J0cyB0d28gc2NoZWR1bGluZyBtb2RlczogU3RyaWN0IFByaW9yaXR5IGFuZFxuLSAqIFdlaWdodGVkIEZhaXIgUXVldWluZyAoV0ZRKS4gQm90aCBtb2RlcyBoYXZlIGZpeGVkIGJlaGF2aW9yOlxuLSAqICAgLSBObyBjb25maWd1cmFibGUgcXVldWUtdG8tcHJpb3JpdHkgbWFwcGluZ1xuLSAqICAgLSBObyB3ZWlnaHQgYWRqdXN0bWVudCBpbiBXRlEgbW9kZVxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBzd2l0Y2ggdG8gdXNlIHN0cmljdCBwcmlvcml0eSBtb2RlIGJ5XG4tICogY2xlYXJpbmcgdGhlIFdGUSBlbmFibGUgYml0IGZvciBhbGwgcXVldWVzIGFzc29jaWF0ZWQgd2l0aCBFVFMgYmFuZHMuXG4tICogSWYgc3RyaWN0IHByaW9yaXR5IGlzIG5vdCBleHBsaWNpdGx5IHJlcXVlc3RlZCwgdGhlIHN3aXRjaCB3aWxsIGRlZmF1bHRcbi0gKiB0byBXRlEgbW9kZS5cbi0gKlxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuLSAqL1xuLXN0YXRpYyBpbnQga3N6ODh4M190Y19ldHNfYWRkKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LFxuLVx0XHRcdCAgICAgIHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkX3JlcGxhY2VfcGFyYW1zICpwKVxuLXtcbi1cdGludCByZXQsIGJhbmQ7XG4tXG4tXHQvKiBPbmx5IHN0cmljdCBwcmlvcml0eSBtb2RlIGlzIHN1cHBvcnRlZCBmb3Igbm93LlxuLVx0ICogV0ZRIGlzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkLlxuLVx0ICovXG4tXHRmb3IgKGJhbmQgPSAwOyBiYW5kIFx1MDAzYyBwLVx1MDAzZWJhbmRzOyBiYW5kKyspIHtcbi1cdFx0aW50IHF1ZXVlID0ga3N6X2V0c19iYW5kX3RvX3F1ZXVlKHAsIGJhbmQpO1xuLVx0XHR1OCByZWc7XG4tXG4tXHRcdC8qIENhbGN1bGF0ZSBUWFEgU3BsaXQgQ29udHJvbCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzXG4tXHRcdCAqIHBvcnQvcXVldWVcbi1cdFx0ICovXG4tXHRcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcbi1cdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcbi1cbi1cdFx0LyogQ2xlYXIgV0ZRIGVuYWJsZSBiaXQgdG8gc2VsZWN0IHN0cmljdCBwcmlvcml0eSBzY2hlZHVsaW5nICovXG4tXHRcdHJldCA9IGtzel9ybXc4KGRldiwgcmVnLCBLU1o4ODczX1RYUV9XRlFfRU5BQkxFLCAwKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLS8qKlxuLSAqIGtzejg4eDNfdGNfZXRzX2RlbCAtIFJlc2V0IEVUUyAoRW5oYW5jZWQgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbikgY29uZmlnXG4tICogICAgICAgICAgICAgICAgICAgICAgZm9yIGEgcG9ydCBvbiBLU1o4OHgzIHN3aXRjaFxuLSAqIEBkZXY6IFBvaW50ZXIgdG8gdGhlIEtTWiBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZVxuLSAqIEBwb3J0OiBQb3J0IG51bWJlciB0byByZXNldFxuLSAqXG4tICogVGhlIEtTWjg4eDMgc3VwcG9ydHMgb25seSBmaXhlZCBzY2hlZHVsaW5nIG1vZGVzOiBTdHJpY3QgUHJpb3JpdHkgb3Jcbi0gKiBXZWlnaHRlZCBGYWlyIFF1ZXVpbmcgKFdGUSksIHdpdGggbm8gcmVjb25maWd1cmF0aW9uIG9mIHdlaWdodHMgb3Jcbi0gKiBxdWV1ZSBtYXBwaW5nLiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgcG9ydOKAmXMgc2NoZWR1bGluZyBtb2RlIHRvXG4tICogdGhlIGRlZmF1bHQsIHdoaWNoIGlzIFdGUSwgYnkgZW5hYmxpbmcgdGhlIFdGUSBiaXQgZm9yIGFsbCBxdWV1ZXMuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbi0gKi9cbi1zdGF0aWMgaW50IGtzejg4eDNfdGNfZXRzX2RlbChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbi17XG4tXHRpbnQgcmV0LCBxdWV1ZTtcbi1cbi1cdC8qIEl0ZXJhdGUgb3ZlciBhbGwgdHJhbnNtaXQgcXVldWVzIGZvciB0aGlzIHBvcnQgKi9cbi1cdGZvciAocXVldWUgPSAwOyBxdWV1ZSBcdTAwM2MgZGV2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3R4X3F1ZXVlczsgcXVldWUrKykge1xuLVx0XHR1OCByZWc7XG4tXG4tXHRcdC8qIENhbGN1bGF0ZSBUWFEgU3BsaXQgQ29udHJvbCByZWdpc3RlciBhZGRyZXNzIGZvciB0aGlzXG4tXHRcdCAqIHBvcnQvcXVldWVcbi1cdFx0ICovXG4tXHRcdHJlZyA9IEtTWjg4NzNfVFhRX1NQTElUX0NUUkxfUkVHKHBvcnQsIHF1ZXVlKTtcbi1cdFx0aWYgKGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmVnID0ga3N6ODQ2M190Y19jdHJsKHBvcnQsIHF1ZXVlKTtcbi1cbi1cdFx0LyogU2V0IFdGUSBlbmFibGUgYml0IHRvIHJldmVydCBiYWNrIHRvIGRlZmF1bHQgc2NoZWR1bGluZ1xuLVx0XHQgKiBtb2RlXG4tXHRcdCAqL1xuLVx0XHRyZXQgPSBrc3pfcm13OChkZXYsIHJlZywgS1NaODg3M19UWFFfV0ZRX0VOQUJMRSxcbi1cdFx0XHQgICAgICAgS1NaODg3M19UWFFfV0ZRX0VOQUJMRSk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGtzel9xdWV1ZV9zZXRfc3RyaWN0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0LCBpbnQgcXVldWUpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0zNTgwLDggKzMyMTIsOCBAQCBzdGF0aWMgaW50IGtzel90Y19ldHNfZGVsKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KVxuIFx0cmV0dXJuIGtzejk0Nzdfc2V0X2RlZmF1bHRfcHJpb19xdWV1ZV9tYXBwaW5nKGRldiwgcG9ydCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3RjX2V0c192YWxpZGF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbi1cdFx0XHQgICAgICAgc3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXG4raW50IGtzel90Y19ldHNfdmFsaWRhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQsXG4rXHRcdFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWRfcmVwbGFjZV9wYXJhbXMgKnApXG4ge1xuIFx0aW50IGJhbmQ7XG4gXG5AQCAtMzYyMiw5ICszMjU0LDYgQEAgc3RhdGljIGludCBrc3pfdGNfc2V0dXBfcWRpc2NfZXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoaXNfa3N6OChkZXYpIFx1MDAyNlx1MDAyNiAhKGtzel9pc19rc3o4OHgzKGRldikgfHwga3N6X2lzX2tzejg0NjMoZGV2KSkpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbiBcdGlmIChxb3B0LVx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcbiBcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIlBhcmVudCBzaG91bGQgYmUgXFxcInJvb3RcXFwiXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5AQCAtMzYzNiwxNiArMzI2NSw5IEBAIHN0YXRpYyBpbnQga3N6X3RjX3NldHVwX3FkaXNjX2V0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXG4tXHRcdGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmV0dXJuIGtzejg4eDNfdGNfZXRzX2FkZChkZXYsIHBvcnQsXG4tXHRcdFx0XHRcdFx0ICBcdTAwMjZxb3B0LVx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJldHVybiBrc3pfdGNfZXRzX2FkZChkZXYsIHBvcnQsIFx1MDAyNnFvcHQtXHUwMDNlcmVwbGFjZV9wYXJhbXMpO1xuK1x0XHRyZXR1cm4ga3N6X3RjX2V0c19hZGQoZGV2LCBwb3J0LCBcdTAwMjZxb3B0LVx1MDAzZXJlcGxhY2VfcGFyYW1zKTtcbiBcdGNhc2UgVENfRVRTX0RFU1RST1k6XG4tXHRcdGlmIChrc3pfaXNfa3N6ODh4MyhkZXYpIHx8IGtzel9pc19rc3o4NDYzKGRldikpXG4tXHRcdFx0cmV0dXJuIGtzejg4eDNfdGNfZXRzX2RlbChkZXYsIHBvcnQpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0dXJuIGtzel90Y19ldHNfZGVsKGRldiwgcG9ydCk7XG4rXHRcdHJldHVybiBrc3pfdGNfZXRzX2RlbChkZXYsIHBvcnQpO1xuIFx0Y2FzZSBUQ19FVFNfU1RBVFM6XG4gXHRjYXNlIFRDX0VUU19HUkFGVDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTM3MDQsNiArMzMyNiwzNCBAQCBpbnQga3N6X2hhbmRsZV93YWtlX3JlYXNvbihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydClcbiBcdFx0XHRcdHBtZV9zdGF0dXMpO1xuIH1cbiBcbisvKipcbisgKiBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZSAtIENoZWNrIGlmIHRoZSBNQUMgYWRkcmVzcyBvbiBhIGdpdmVuIHBvcnRcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MuXG4rICogQGRzOiBQb2ludGVyIHRvIHRoZSBEU0Egc3dpdGNoIHN0cnVjdHVyZS5cbisgKiBAcG9ydDogVGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZSBNQUMgYWRkcmVzcyBpcyB0byBiZSBjaGVja2VkLlxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBleGFtaW5lcyB0aGUgTUFDIGFkZHJlc3Mgc2V0IG9uIHRoZSBzcGVjaWZpZWQgcG9ydCBhbmRcbisgKiBkZXRlcm1pbmVzIGlmIGl0IGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MgZm9yIHRoZSBzd2l0Y2guXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBvcnQncyBNQUMgYWRkcmVzcyBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzLCBmYWxzZVxuKyAqIG90aGVyd2lzZS5cbisgKi9cbitzdGF0aWMgYm9vbCBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpLVx1MDAzZXVzZXI7XG4rXHRjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyID0gdXNlci1cdTAwM2VkZXZfYWRkcjtcbitcdHN0cnVjdCBrc3pfc3dpdGNoX21hY2FkZHIgKnN3aXRjaF9tYWNhZGRyO1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0c3dpdGNoX21hY2FkZHIgPSBkZXYtXHUwMDNlc3dpdGNoX21hY2FkZHI7XG4rXHRpZiAoc3dpdGNoX21hY2FkZHIgXHUwMDI2XHUwMDI2ICFldGhlcl9hZGRyX2VxdWFsKHN3aXRjaF9tYWNhZGRyLVx1MDAzZWFkZHIsIGFkZHIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLyoqXG4gICoga3N6X2dldF93b2wgLSBHZXQgV2FrZS1vbi1MQU4gc2V0dGluZ3MgZm9yIGEgc3BlY2lmaWVkIHBvcnQuXG4gICogQGRzOiBUaGUgZHNhX3N3aXRjaCBzdHJ1Y3R1cmUuXG5AQCAtMzg5NywzNCArMzU0Nyw2IEBAIGludCBrc3pfcG9ydF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKipcbi0gKiBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZSAtIENoZWNrIGlmIHRoZSBNQUMgYWRkcmVzcyBvbiBhIGdpdmVuIHBvcnRcbi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MuXG4tICogQGRzOiBQb2ludGVyIHRvIHRoZSBEU0Egc3dpdGNoIHN0cnVjdHVyZS5cbi0gKiBAcG9ydDogVGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZSBNQUMgYWRkcmVzcyBpcyB0byBiZSBjaGVja2VkLlxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBleGFtaW5lcyB0aGUgTUFDIGFkZHJlc3Mgc2V0IG9uIHRoZSBzcGVjaWZpZWQgcG9ydCBhbmRcbi0gKiBkZXRlcm1pbmVzIGlmIGl0IGNhbiBiZSB1c2VkIGFzIGEgZ2xvYmFsIGFkZHJlc3MgZm9yIHRoZSBzd2l0Y2guXG4tICpcbi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIHBvcnQncyBNQUMgYWRkcmVzcyBjYW4gYmUgdXNlZCBhcyBhIGdsb2JhbCBhZGRyZXNzLCBmYWxzZVxuLSAqIG90aGVyd2lzZS5cbi0gKi9cbi1ib29sIGtzel9pc19wb3J0X21hY19nbG9iYWxfdXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4te1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKnVzZXIgPSBkc2FfdG9fcG9ydChkcywgcG9ydCktXHUwMDNldXNlcjtcbi1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIgPSB1c2VyLVx1MDAzZWRldl9hZGRyO1xuLVx0c3RydWN0IGtzel9zd2l0Y2hfbWFjYWRkciAqc3dpdGNoX21hY2FkZHI7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbi1cbi1cdEFTU0VSVF9SVE5MKCk7XG4tXG4tXHRzd2l0Y2hfbWFjYWRkciA9IGRldi1cdTAwM2Vzd2l0Y2hfbWFjYWRkcjtcbi1cdGlmIChzd2l0Y2hfbWFjYWRkciBcdTAwMjZcdTAwMjYgIWV0aGVyX2FkZHJfZXF1YWwoc3dpdGNoX21hY2FkZHItXHUwMDNlYWRkciwgYWRkcikpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbiAvKipcbiAgKiBrc3pfc3dpdGNoX21hY2FkZHJfZ2V0IC0gUHJvZ3JhbSB0aGUgc3dpdGNoJ3MgTUFDIGFkZHJlc3MgcmVnaXN0ZXIuXG4gICogQGRzOiBEU0Egc3dpdGNoIGluc3RhbmNlLlxuQEAgLTQxMzIsOCArMzc1NCw4IEBAIHN0YXRpYyB2b2lkIGtzel9wYXJzZV9yZ21paV9kZWxheShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydF9udW0sXG4gICogUmV0dXJuczogSWYgZm91bmQsIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIHZhbHVlIGZvciB0aGF0IGRyaXZlIHN0cmVuZ3RoXG4gICogaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgLUVJTlZBTCBpcyByZXR1cm5lZCBpbmRpY2F0aW5nIGFuIGludmFsaWQgdmFsdWUuXG4gICovXG4tc3RhdGljIGludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuLVx0XHRcdFx0ICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKVxuK2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuK1x0XHRcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApXG4ge1xuIFx0aW50IGk7XG4gXG5AQCAtNDE1Niw5ICszNzc4LDkgQEAgc3RhdGljIGludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuICAqIGlzIGRldGVjdGVkLiBJdCBsaXN0cyBvdXQgYWxsIHRoZSBzdXBwb3J0ZWQgZHJpdmUgc3RyZW5ndGggdmFsdWVzIGZvclxuICAqIHJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtzel9kcml2ZV9zdHJlbmd0aCAqYXJyYXksXG4tXHRcdFx0XHQgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApXG4rdm9pZCBrc3pfZHJpdmVfc3RyZW5ndGhfZXJyb3Ioc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoICphcnJheSxcbitcdFx0XHQgICAgICBzaXplX3QgYXJyYXlfc2l6ZSwgaW50IG1pY3JvYW1wKVxuIHtcbiBcdGNoYXIgc3VwcG9ydGVkX3ZhbHVlc1sxMDBdO1xuIFx0c2l6ZV90IHJlbWFpbmluZ19zaXplO1xuQEAgLTQxODUsOCArMzgwNyw4IEBAIHN0YXRpYyB2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIH1cbiBcbiAvKipcbi0gKiBrc3o5NDc3X2RyaXZlX3N0cmVuZ3RoX3dyaXRlKCkgLSBTZXQgdGhlIGRyaXZlIHN0cmVuZ3RoIGZvciBzcGVjaWZpYyBLU1o5NDc3XG4tICpcdFx0XHRcdCAgICBjaGlwIHZhcmlhbnRzLlxuKyAqIGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBmb3Igc3BlY2lmaWMgS1NaOTQ3N1xuKyAqXHRcdFx0XHRhbmQgdGhlIEtTWjg3eHggY2hpcCB2YXJpYW50cy5cbiAgKiBAZGV2OiAgICAgICBrc3ogZGV2aWNlXG4gICogQHByb3BzOiAgICAgQXJyYXkgb2YgZHJpdmUgc3RyZW5ndGggcHJvcGVydGllcyB0byBiZSBhcHBsaWVkXG4gICogQG51bV9wcm9wczogTnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5XG5AQCAtNDE5Nyw5ICszODE5LDkgQEAgc3RhdGljIHZvaWQga3N6X2RyaXZlX3N0cmVuZ3RoX2Vycm9yKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzc2Z1bCBjb25maWd1cmF0aW9uLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IGtzejk0NzdfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbi1cdFx0XHRcdFx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4tXHRcdFx0XHRcdGludCBudW1fcHJvcHMpXG4raW50IGtzel9kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICAgc3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCAqcHJvcHMsXG4rXHRcdFx0ICAgICBpbnQgbnVtX3Byb3BzKVxuIHtcbiBcdHNpemVfdCBhcnJheV9zaXplID0gQVJSQVlfU0laRShrc3o5NDc3X2RyaXZlX3N0cmVuZ3Rocyk7XG4gXHRpbnQgaSwgcmV0LCByZWc7XG5AQCAtNDIzNiwxMzAgKzM4NTgsNiBAQCBzdGF0aWMgaW50IGtzejk0NzdfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdHJldHVybiBrc3pfcm13OChkZXYsIHJlZywgbWFzaywgdmFsKTtcbiB9XG4gXG4tLyoqXG4tICoga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZSgpIC0gU2V0IHRoZSBkcml2ZSBzdHJlbmd0aCBjb25maWd1cmF0aW9uIGZvclxuLSAqXHRcdFx0XHQgICAgS1NaODg2MyBjb21wYXRpYmxlIGNoaXAgdmFyaWFudHMuXG4tICogQGRldjogICAgICAga3N6IGRldmljZVxuLSAqIEBwcm9wczogICAgIEFycmF5IG9mIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgdG8gYmUgc2V0XG4tICogQG51bV9wcm9wczogTnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5XG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIHNwZWNpZmllZCBkcml2ZSBzdHJlbmd0aCBzZXR0aW5ncyB0byBLU1o4OFgzIGNoaXBcbi0gKiB2YXJpYW50cyAoS1NaODg3MywgS1NaODg2MykuXG4tICogSXQgZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbnMgYWxpZ24gd2l0aCB3aGF0IHRoZSBjaGlwIHZhcmlhbnQgc3VwcG9ydHMgYW5kXG4tICogd2FybnMgb3IgZXJyb3JzIG91dCBvbiB1bnN1cHBvcnRlZCBzZXR0aW5ncy5cbi0gKlxuLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZVxuLSAqL1xuLXN0YXRpYyBpbnQga3N6ODh4M19kcml2ZV9zdHJlbmd0aF93cml0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHRzdHJ1Y3Qga3N6X2RyaXZlcl9zdHJlbmd0aF9wcm9wICpwcm9wcyxcbi1cdFx0XHRcdFx0aW50IG51bV9wcm9wcylcbi17XG4tXHRzaXplX3QgYXJyYXlfc2l6ZSA9IEFSUkFZX1NJWkUoa3N6ODh4M19kcml2ZV9zdHJlbmd0aHMpO1xuLVx0aW50IG1pY3JvYW1wO1xuLVx0aW50IGksIHJldDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wcm9wczsgaSsrKSB7XG4tXHRcdGlmIChwcm9wc1tpXS52YWx1ZSA9PSAtMSB8fCBpID09IEtTWl9EUklWRVJfU1RSRU5HVEhfSU8pXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGRldl93YXJuKGRldi1cdTAwM2VkZXYsIFwiJXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgdmFyaWFudFxcblwiLFxuLVx0XHRcdCBwcm9wc1tpXS5uYW1lKTtcbi1cdH1cbi1cbi1cdG1pY3JvYW1wID0gcHJvcHNbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10udmFsdWU7XG4tXHRyZXQgPSBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzLCBhcnJheV9zaXplLFxuLVx0XHRcdFx0XHRtaWNyb2FtcCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihkZXYsIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhzLFxuLVx0XHRcdFx0XHQgYXJyYXlfc2l6ZSwgbWljcm9hbXApO1xuLVx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIGtzel9ybXc4KGRldiwgS1NaODg3M19SRUdfR0xPQkFMX0NUUkxfMTIsXG4tXHRcdFx0S1NaODg3M19EUklWRV9TVFJFTkdUSF8xNk1BLCByZXQpO1xuLX1cbi1cbi0vKipcbi0gKiBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGgoKSAtIEV4dHJhY3QgYW5kIGFwcGx5IGRyaXZlIHN0cmVuZ3RoIGNvbmZpZ3VyYXRpb25zXG4tICpcdFx0XHRcdGZyb20gZGV2aWNlIHRyZWUgcHJvcGVydGllcy5cbi0gKiBAZGV2Olx0a3N6IGRldmljZVxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGRyaXZlIHN0cmVuZ3RoIHByb3BlcnRpZXMgZnJvbSB0aGVcbi0gKiBkZXZpY2UgdHJlZSwgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHN1cHBvcnRlZCBjaGlwIHZhcmlhbnRzLCBhbmQgc2V0c1xuLSAqIHRoZW0gYWNjb3JkaW5nbHkuIEFuIGVycm9yIHNob3VsZCBiZSBjcml0aWNhbCBoZXJlLCBhcyB0aGUgZHJpdmUgc3RyZW5ndGhcbi0gKiBzZXR0aW5ncyBhcmUgY3J1Y2lhbCBmb3IgRU1JIGNvbXBsaWFuY2UuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2Vcbi0gKi9cbi1pbnQga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4te1xuLVx0c3RydWN0IGtzel9kcml2ZXJfc3RyZW5ndGhfcHJvcCBvZl9wcm9wc1tdID0ge1xuLVx0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9ISV0gPSB7XG4tXHRcdFx0Lm5hbWUgPSBcIm1pY3JvY2hpcCxoaS1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwiLFxuLVx0XHRcdC5vZmZzZXQgPSBTV19ISV9TUEVFRF9EUklWRV9TVFJFTkdUSF9TLFxuLVx0XHRcdC52YWx1ZSA9IC0xLFxuLVx0XHR9LFxuLVx0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9MT10gPSB7XG4tXHRcdFx0Lm5hbWUgPSBcIm1pY3JvY2hpcCxsby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwiLFxuLVx0XHRcdC5vZmZzZXQgPSBTV19MT19TUEVFRF9EUklWRV9TVFJFTkdUSF9TLFxuLVx0XHRcdC52YWx1ZSA9IC0xLFxuLVx0XHR9LFxuLVx0XHRbS1NaX0RSSVZFUl9TVFJFTkdUSF9JT10gPSB7XG4tXHRcdFx0Lm5hbWUgPSBcIm1pY3JvY2hpcCxpby1kcml2ZS1zdHJlbmd0aC1taWNyb2FtcFwiLFxuLVx0XHRcdC5vZmZzZXQgPSAwLCAvKiBkb24ndCBjYXJlICovXG4tXHRcdFx0LnZhbHVlID0gLTEsXG4tXHRcdH0sXG4tXHR9O1xuLVx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZTtcbi1cdGJvb2wgaGF2ZV9hbnlfcHJvcCA9IGZhbHNlO1xuLVx0aW50IGksIHJldDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUob2ZfcHJvcHMpOyBpKyspIHtcbi1cdFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIG9mX3Byb3BzW2ldLm5hbWUsXG4tXHRcdFx0XHRcdCAgIFx1MDAyNm9mX3Byb3BzW2ldLnZhbHVlKTtcbi1cdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5WQUwpXG4tXHRcdFx0ZGV2X3dhcm4oZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVhZCAlc1xcblwiLFxuLVx0XHRcdFx0IG9mX3Byb3BzW2ldLm5hbWUpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRoYXZlX2FueV9wcm9wID0gdHJ1ZTtcbi1cdH1cbi1cbi1cdGlmICghaGF2ZV9hbnlfcHJvcClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRzd2l0Y2ggKGRldi1cdTAwM2VjaGlwX2lkKSB7XG4tXHRjYXNlIEtTWjg4WDNfQ0hJUF9JRDpcbi1cdFx0cmV0dXJuIGtzejg4eDNfZHJpdmVfc3RyZW5ndGhfd3JpdGUoZGV2LCBvZl9wcm9wcyxcbi1cdFx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShvZl9wcm9wcykpO1xuLVx0Y2FzZSBLU1o4Nzk1X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg3OTRfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaODc2NV9DSElQX0lEOlxuLVx0Y2FzZSBLU1o4NTYzX0NISVBfSUQ6XG4tXHRjYXNlIEtTWjg1NjdfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTQ3N19DSElQX0lEOlxuLVx0Y2FzZSBLU1o5NTYzX0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk1NjdfQ0hJUF9JRDpcbi1cdGNhc2UgS1NaOTg5M19DSElQX0lEOlxuLVx0Y2FzZSBLU1o5ODk2X0NISVBfSUQ6XG4tXHRjYXNlIEtTWjk4OTdfQ0hJUF9JRDpcbi1cdGNhc2UgTEFOOTY0Nl9DSElQX0lEOlxuLVx0XHRyZXR1cm4ga3N6OTQ3N19kcml2ZV9zdHJlbmd0aF93cml0ZShkZXYsIG9mX3Byb3BzLFxuLVx0XHRcdFx0XHRcdCAgICBBUlJBWV9TSVpFKG9mX3Byb3BzKSk7XG4tXHRkZWZhdWx0OlxuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG9mX3Byb3BzKTsgaSsrKSB7XG4tXHRcdFx0aWYgKG9mX3Byb3BzW2ldLnZhbHVlID09IC0xKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0ZGV2X3dhcm4oZGV2LVx1MDAzZWRldiwgXCIlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCB2YXJpYW50XFxuXCIsXG4tXHRcdFx0XHQgb2ZfcHJvcHNbaV0ubmFtZSk7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgcGluY3RybCAqcGluY3RybDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG5pbmRleCBiNGE1NjczYmEzNjVjYi4uYWNhZjcwZTZmMzkzYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RhdGEvbWljcm9jaGlwLWtzei5oXHUwMDNlXG4gXG5AQCAtNDAsNiArNDEsNDUgQEAgc3RydWN0IHZsYW5fdGFibGUge1xuIFx0dTMyIHRhYmxlWzNdO1xuIH07XG4gXG4rc3RydWN0IGtzel9zdGF0c19yYXcge1xuK1x0dTY0IHJ4X2hpO1xuK1x0dTY0IHJ4X3VuZGVyc2l6ZTtcbitcdHU2NCByeF9mcmFnbWVudHM7XG4rXHR1NjQgcnhfb3ZlcnNpemU7XG4rXHR1NjQgcnhfamFiYmVycztcbitcdHU2NCByeF9zeW1ib2xfZXJyO1xuK1x0dTY0IHJ4X2NyY19lcnI7XG4rXHR1NjQgcnhfYWxpZ25fZXJyO1xuK1x0dTY0IHJ4X21hY19jdHJsO1xuK1x0dTY0IHJ4X3BhdXNlO1xuK1x0dTY0IHJ4X2JjYXN0O1xuK1x0dTY0IHJ4X21jYXN0O1xuK1x0dTY0IHJ4X3VjYXN0O1xuK1x0dTY0IHJ4XzY0X29yX2xlc3M7XG4rXHR1NjQgcnhfNjVfMTI3O1xuK1x0dTY0IHJ4XzEyOF8yNTU7XG4rXHR1NjQgcnhfMjU2XzUxMTtcbitcdHU2NCByeF81MTJfMTAyMztcbitcdHU2NCByeF8xMDI0XzE1MjI7XG4rXHR1NjQgcnhfMTUyM18yMDAwO1xuK1x0dTY0IHJ4XzIwMDE7XG4rXHR1NjQgdHhfaGk7XG4rXHR1NjQgdHhfbGF0ZV9jb2w7XG4rXHR1NjQgdHhfcGF1c2U7XG4rXHR1NjQgdHhfYmNhc3Q7XG4rXHR1NjQgdHhfbWNhc3Q7XG4rXHR1NjQgdHhfdWNhc3Q7XG4rXHR1NjQgdHhfZGVmZXJyZWQ7XG4rXHR1NjQgdHhfdG90YWxfY29sO1xuK1x0dTY0IHR4X2V4Y19jb2w7XG4rXHR1NjQgdHhfc2luZ2xlX2NvbDtcbitcdHU2NCB0eF9tdWx0X2NvbDtcbitcdHU2NCByeF90b3RhbDtcbitcdHU2NCB0eF90b3RhbDtcbitcdHU2NCByeF9kaXNjYXJkcztcbitcdHU2NCB0eF9kaXNjYXJkcztcbit9O1xuK1xuIHN0cnVjdCBrc3pfcG9ydF9taWIge1xuIFx0c3RydWN0IG11dGV4IGNudF9tdXRleDtcdFx0Lyogc3RydWN0dXJlIGFjY2VzcyAqL1xuIFx0dTggY250X3B0cjtcbkBAIC0zOTMsMTIgKzQzMyw4IEBAIGludCBrc3pfc3dpdGNoX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIHZvaWQga3N6X3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4gXG4gdm9pZCBrc3pfaW5pdF9taWJfdGltZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG4tYm9vbCBrc3pfaXNfcG9ydF9tYWNfZ2xvYmFsX3VzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KTtcbiB2b2lkIGtzel9yX21pYl9zdGF0czY0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIGludCBwb3J0KTtcbi12b2lkIGtzejg4eHhfcl9taWJfc3RhdHM2NChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4gdm9pZCBrc3pfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHU4IHN0YXRlKTtcbi1ib29sIGtzel9nZXRfZ2JpdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCk7XG4tcGh5X2ludGVyZmFjZV90IGtzel9nZXRfeG1paShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCwgYm9vbCBnYml0KTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdO1xuIGludCBrc3pfc3dpdGNoX21hY2FkZHJfZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbkBAIC00NDMsMTEgKzQ3OSwxNSBAQCB2b2lkIGtzel9waHlsaW5rX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBtb2RlLFxuIFx0XHRcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbiBcbi1pbnQga3N6X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCk7XG4tXG4gaW50IGtzel9zZXRfbWFjX2VlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHQgICAgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSk7XG4gXG4raW50IGtzel9ldHNfYmFuZF90b19xdWV1ZShzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCxcbitcdFx0XHQgIGludCBiYW5kKTtcbitpbnQga3N6X3NldHVwX3RjX2NicyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHQgICAgIHN0cnVjdCB0Y19jYnNfcW9wdF9vZmZsb2FkICpxb3B0KTtcbitpbnQga3N6X3RjX2V0c192YWxpZGF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBpbnQgcG9ydCxcbitcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZF9yZXBsYWNlX3BhcmFtcyAqcCk7XG4gaW50IGtzel9zZXR1cF90YyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHQgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsIHZvaWQgKnR5cGVfZGF0YSk7XG4gXG5AQCAtNDcxLDggKzUxMSwzNyBAQCBpbnQga3N6X21kaW9fcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG4gaW50IGtzel9waXJxX3NldHVwKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHApO1xuIGludCBrc3pfZ2lycV9zZXR1cChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbiB2b2lkIGtzel9pcnFfZnJlZShzdHJ1Y3Qga3N6X2lycSAqa2lycSk7XG4taW50IGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbi1pbnQga3N6OTQ3N19zZXRfZGVmYXVsdF9wcmlvX3F1ZXVlX21hcHBpbmcoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgaW50IHBvcnQpO1xuK1xuK3N0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3Age1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdGludCBvZmZzZXQ7XG4rXHRpbnQgdmFsdWU7XG4rfTtcbitcbitlbnVtIGtzel9kcml2ZXJfc3RyZW5ndGhfdHlwZSB7XG4rXHRLU1pfRFJJVkVSX1NUUkVOR1RIX0hJLFxuK1x0S1NaX0RSSVZFUl9TVFJFTkdUSF9MTyxcbitcdEtTWl9EUklWRVJfU1RSRU5HVEhfSU8sXG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3Qga3N6X2RyaXZlX3N0cmVuZ3RoIC0gZHJpdmUgc3RyZW5ndGggbWFwcGluZ1xuKyAqIEByZWdfdmFsOlx0cmVnaXN0ZXIgdmFsdWVcbisgKiBAbWljcm9hbXA6XHRtaWNyb2FtcCB2YWx1ZVxuKyAqL1xuK3N0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGgge1xuK1x0dTMyIHJlZ192YWw7XG4rXHR1MzIgbWljcm9hbXA7XG4rfTtcbitcbit2b2lkIGtzel9kcml2ZV9zdHJlbmd0aF9lcnJvcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuK1x0XHRcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApO1xuK2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfdG9fcmVnKGNvbnN0IHN0cnVjdCBrc3pfZHJpdmVfc3RyZW5ndGggKmFycmF5LFxuK1x0XHRcdCAgICAgIHNpemVfdCBhcnJheV9zaXplLCBpbnQgbWljcm9hbXApO1xuK2ludCBrc3pfZHJpdmVfc3RyZW5ndGhfd3JpdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgIHN0cnVjdCBrc3pfZHJpdmVyX3N0cmVuZ3RoX3Byb3AgKnByb3BzLFxuK1x0XHRcdCAgICAgaW50IG51bV9wcm9wcyk7XG4gXG4gLyogQ29tbW9uIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMgKi9cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWdtYXAgKmtzel9yZWdtYXBfOChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5pbmRleCA4ZWI1MzM3YjBjMTAyZS4uODZjZTNhODY3MDVmOTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5AQCAtNzg3LDEwICs3ODcsNiBAQCBzdGF0aWMgaW50IGxhbjkzN3hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0cmV0ID0ga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoKGRldik7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0Lyogc2V0IGJyb2FkY2FzdCBzdG9ybSBwcm90ZWN0aW9uIDEwJSByYXRlICovXG4gXHRzdG9ybV9tYXNrID0gQlJPQURDQVNUX1NUT1JNX1JBVEU7XG4gXHRzdG9ybV9yYXRlID0gKEJST0FEQ0FTVF9TVE9STV9WQUxVRSAqIEJST0FEQ0FTVF9TVE9STV9QUk9UX1JBVEUpIC8gMTAwO1xuQEAgLTk4Myw3ICs5NzksNyBAQCBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbGFuOTM3eF9zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF9zdGF0czY0XHRcdD0ga3N6X2dldF9zdGF0czY0LFxuIFx0LmdldF9wYXVzZV9zdGF0c1x0PSBrc3pfZ2V0X3BhdXNlX3N0YXRzLFxuIFx0LnBvcnRfY2hhbmdlX210dVx0PSBsYW45Mzd4X2NoYW5nZV9tdHUsXG4tXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6X21heF9tdHUsXG4rXHQucG9ydF9tYXhfbXR1XHRcdD0ga3N6OTQ3N19tYXhfbXR1LFxuIFx0LnN1c3BlbmRcdFx0PSBrc3pfc3VzcGVuZCxcbiBcdC5yZXN1bWVcdFx0XHQ9IGtzel9yZXN1bWUsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBrc3pfZ2V0X3RzX2luZm8sXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMzo1NjoyNi45MDc2MzE0NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjY2Mjk2NTE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyB0aGUgTWljcm9jaGlwIERTQSBEcml2ZXIqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGRlYWwuIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQncyBjbGVhcmx5IGZvY3VzZWQgb24gcmVmYWN0b3JpbmcgdGhlIGBrc3pgIERTQSBkcml2ZXIgZm9yIE1pY3JvY2hpcCBzd2l0Y2hlcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBwdXJlbHkgYWJvdXQgdGlkeWluZyB0aGluZ3MgdXAsIG1ha2luZyB0aGUgY29kZSBtb3JlIG9yZ2FuaXplZCBhbmQgZWFzaWVyIHRvIG1haW50YWluLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vdmluZyBmdW5jdGlvbnMgZnJvbSBga3N6X2NvbW1vbi5jYCB0byBtb3JlIHNwZWNpZmljIGZpbGVzIGxpa2UgYGtzejguY2AgYW5kIGBrc3o5NDc3LmNgLCBiYXNlZCBvbiB0aGUgY2hpcCBmYW1pbGllcyB0aGV5J3JlIGludGVuZGVkIGZvci4gVGhlIGZ1bmN0aW9uIG5hbWVzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhpcyBzcGVjaWZpY2l0eSwgd2l0aCB0aGUgb2xkIGBrc3pfYCBwcmVmaXggYmVpbmcgcmVwbGFjZWQgd2l0aCBjaGlwLXNwZWNpZmljIHByZWZpeGVzLCBsaWtlIGBrc3o4N3h4X2AsIGBrc3o4OHh4X2AsIGFuZCBga3N6OTQ3N19gLlxuXG5JJ3ZlIGNhcmVmdWxseSBjb21wYXJlZCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb25zIHdpdGggdGhlaXIgcmVmYWN0b3JlZCBjb3VudGVycGFydHMuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmdW5jdGlvbnMgbGlrZSBga3N6X2NoYW5nZV9tdHVgLCBga3N6X21heF9tdHVgLCBhbmQgYGtzel9zZXR1cF90Y2AgKGFuZCB0aGVpciBjaGlwLXNwZWNpZmljIHZhcmlhdGlvbnMpIHNlZW1zIGlkZW50aWNhbC4gTm8gbmV3IGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gaW50cm9kdWNlZCBpbiB0aGUgZHJpdmVyLCBpdCBsb29rcyBsaWtlLCBqdXN0IGEgcmVvcmdhbml6YXRpb24gb2YgZXhpc3RpbmcgY29kZS4gSSd2ZSBhbHNvIGNoZWNrZWQgYGtzel9wYXJzZV9kcml2ZV9zdHJlbmd0aGAgd2hpY2ggaGFzIGJlZW4gcmVmYWN0b3JlZCBpbiBgbGFuOTM3eF9zZXR1cGAgYW5kIG5vdGljZWQgdGhhdCB0aGUgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMuIEl0IGhhcyBiZWVuIGNvbmZpcm1lZCB0aGUgcmVtb3ZhbCBqdXN0IGdldHMgcmlkIG9mIHdhcm5pbmdzIGFuZCBkb2Vzbid0IGFmZmVjdCBvcGVyYXRpb24uXG5cblRoZSBmdW5jdGlvbnMgbGlrZSBga3N6ODh4eF9yX21pYl9zdGF0czY0YCwgdGhlIGBrc3pfcGFyc2VfZHJpdmVfc3RyZW5ndGhgIGNhbGxzLCBhbmQgdGhlIGBrc3o5NDc3XypgIGZ1bmN0aW9ucyB3ZXJlIGFsc28gbW92ZWQgdG8gYmUgbW9yZSBjaGlwLXNwZWNpZmljLlxuXG5TbywgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgZXhlcmNpc2UuIEl0J3MgYWJvdXQgaW1wcm92ZWQgY29kZSBzdHJ1Y3R1cmUsIG5vdCBhZGRpbmcgbmV3IGZlYXR1cmVzIG9yIGZpeGluZyBidWdzLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBhcyBcIldvcnRoRnV6emluZ1wiLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcyBvciBjb21wbGV4IGxvZ2ljIHRoYXQgd291bGQgYmUgZXhwb3NlZCB0byBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDUzMywiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTM6NTc6MjMuNTcwNTk4NDc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgdGhlIE1pY3JvY2hpcCBLU1ogRFNBIGRyaXZlci4gSXQgbW92ZXMgY2hpcC1zcGVjaWZpYyBmdW5jdGlvbnMgKGxpa2UgTVRVIGNvbmZpZ3VyYXRpb24sIFRDIHNldHVwLCBNSUIgc3RhdHMgcmVhZGluZywgYW5kIGRyaXZlIHN0cmVuZ3RoIHBhcnNpbmcpIGZyb20gdGhlIGNvbW1vbiBga3N6X2NvbW1vbi5jYCBmaWxlIHRvIHRoZWlyIHJlc3BlY3RpdmUgY2hpcC1zcGVjaWZpYyBmaWxlcyAoYGtzejguY2AgYW5kIGBrc3o5NDc3LmNgKS4gSXQgYWxzbyByZW1vdmVzIGEgbm8tb3AgY2FsbCB0byBga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoYCBpbiBgbGFuOTM3eF9tYWluLmNgIHdoaWNoIG9ubHkgcHJpbnRlZCB3YXJuaW5ncyBmb3IgdW5zdXBwb3J0ZWQgcHJvcGVydGllcy4gTm8gbmV3IGZ1bmN0aW9uYWwgbG9naWMgb3IgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3Jpbmcgb2YgdGhlIE1pY3JvY2hpcCBLU1ogRFNBIGRyaXZlci4gSXQgbW92ZXMgY2hpcC1zcGVjaWZpYyBmdW5jdGlvbnMgKGxpa2UgTVRVIGNvbmZpZ3VyYXRpb24sIFRDIHNldHVwLCBNSUIgc3RhdHMgcmVhZGluZywgYW5kIGRyaXZlIHN0cmVuZ3RoIHBhcnNpbmcpIGZyb20gdGhlIGNvbW1vbiBga3N6X2NvbW1vbi5jYCBmaWxlIHRvIHRoZWlyIHJlc3BlY3RpdmUgY2hpcC1zcGVjaWZpYyBmaWxlcyAoYGtzejguY2AgYW5kIGBrc3o5NDc3LmNgKS4gSXQgYWxzbyByZW1vdmVzIGEgbm8tb3AgY2FsbCB0byBga3N6X3BhcnNlX2RyaXZlX3N0cmVuZ3RoYCBpbiBgbGFuOTM3eF9tYWluLmNgIHdoaWNoIG9ubHkgcHJpbnRlZCB3YXJuaW5ncyBmb3IgdW5zdXBwb3J0ZWQgcHJvcGVydGllcy4gTm8gbmV3IGZ1bmN0aW9uYWwgbG9naWMgb3IgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflows296k[1] Phase: Running StartedAt: 2026-07-02 13:57:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflows296k[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-02 13:57:35 +0000 UTC FinishedAt: 2026-07-02 13:57:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}