Name: series-workflow6cptm Phase: Failed StartedAt: 2026-07-09 16:37:55 +0000 UTC FinishedAt: 2026-07-09 16:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cptm[0] Phase: Succeeded StartedAt: 2026-07-09 16:37:55 +0000 UTC FinishedAt: 2026-07-09 16:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cptm[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 16:37:55 +0000 UTC FinishedAt: 2026-07-09 16:57:26 +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+CgkJCTx0ZD4yMDI2LzA3LzA5IDE2OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTY6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMzVhM2U0MWE5OGM2MDE1MTIwOTJlZjA5M2EzN2NkMDkwYmQ1YWZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxNjo1NTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5AQCAtMCwwICYjNDM7MSBAQFxuJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xOTY5MDUwNDEzMzg5ZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgJiM0MzsxLDUzMCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21paS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX3JlZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF9kZWZpbmVzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfODI1NzUuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOVxuJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XG4mIzQzOyNkZWZpbmUgTVNJWF9WRUNUT1IgMFxuJiM0MzsjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgaWdiX3R4X2Rlc2Mge1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJiMzOTtzIGRhdGEgYnVmZmVyICovXG4mIzQzO1x0XHRcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cbiYjNDM7XHRcdFx0dTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi9cbiYjNDM7XHRcdH0gcmVhZDtcbiYjNDM7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4mIzQzO1x0XHRcdHUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovXG4mIzQzO1x0XHRcdHUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi9cbiYjNDM7XHRcdH0gd2I7XG4mIzQzO1x0fTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfcnhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi9cbiYjNDM7XHRcdFx0dTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi9cbiYjNDM7XHRcdH0gcmVhZDtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHUxNiBwa3RfaW5mbzsgICAgIC8qIFJTUyB0eXBlLCBQYWNrZXQgdHlwZSAqL1xuJiM0MztcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4mIzQzO1x0XHRcdHUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovXG4mIzQzO1x0XHRcdHUzMiBzdGF0dXNfZXJyb3I7IC8qIGV4dCBzdGF0dXMvZXJyb3IgKi9cbiYjNDM7XHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuJiM0MztcdFx0XHR1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqL1xuJiM0MztcdFx0fSB3YjsgLyogd3JpdGViYWNrICovXG4mIzQzO1x0fTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2Ige1xuJiM0MztcdHZvaWQgKmJhcjA7XG4mIzQzO1x0dTMyIHR4X3RhaWw7XG4mIzQzO1x0dTMyIHJ4X3RhaWw7XG4mIzQzO1x0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCAmIzQzOyByZWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBpZ2JfcmVhZDMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCAmIzQzOyByZWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSlcbiYjNDM7e1xuJiM0MztcdHUzMiBtZGljO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRtZGljID0gKCgodTMyKWRhdGEpIHxcbiYjNDM7XHRcdChvZmZzZXQgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XG4mIzQzO1x0XHQoMSBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHxcbiYjNDM7XHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dXNsZWVwKDUwKTtcbiYjNDM7XHRcdG1kaWMgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfTURJQyk7XG4mIzQzO1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIShtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXRcbiYjNDM7ICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbiYjNDM7ICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xuJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlXG4mIzQzOyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbiYjNDM7ICpcbiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gXCYjMzQ7VXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuJiM0MzsgKiBvbiB0aGUgODI1NzZcJiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzIFwmIzM0O01BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuJiM0MzsgKiBvbiB0aGlzIGRldmljZS5cJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5XG4mIzQzOyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbiYjNDM7ICogcmF0aW9uYWxlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbiYjNDM7e1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuJiM0MztcdCAqIFFFTVUmIzM5O3MgaWdiIGVtdWxhdGlvbjogUUVNVSBvbmx5IHVwZGF0ZXMgU1RBVFVTLkxVIHZpYSBpdHNcbiYjNDM7XHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4mIzQzO1x0ICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWxcbiYjNDM7XHQgKiBoYXJkd2FyZSBhdXRvbmVnIGNhbm5vdCBjb21wbGV0ZSBiZWZvcmUgdGhlIG5leHQgUEhZIHdyaXRlXG4mIzQzO1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuJiM0MztcdCAqIG5vLW9wIHRoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XG4mIzQzO1xuJiM0MztcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayAmIzQzOyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cbiYjNDM7XHRyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXG4mIzQzO1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfU1BFRUQxMDAwIHxcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfRlVMTERQTFgpO1xuJiM0MztcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sXG4mIzQzO1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuJiM0MztcdCAqIGRhdGFzaGVldCwgYnV0IGVtcGlyaWNhbGx5IHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbiYjNDM7XHQgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcFxuJiM0MztcdCAqIG5vcm1hbGx5IHdhaXRzIGZvciBhIHJlYWwgbmVnb3RpYXRlZCBsaW5rLlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7XG4mIzQzO1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7XG4mIzQzO1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NQRF8xMDAwIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRkQgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9TTFU7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBjdHJsKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMClcbiYjNDM7XHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcbiYjNDM7XHQgKiB0aGUgZGF0YXNoZWV0OyBlbXBpcmljYWwsIGFuZCBpbmhlcml0ZWQgZnJvbSB0aGUga2VybmVsIGRyaXZlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoNTAwMDAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdFxuJiM0MzsgKiBjYW4gYmUgcmV1c2VkIGFmdGVyIGEgZGV2aWNlIHJlc2V0IHRvIHJlLXByb2dyYW0gdGhlIHJlZ2lzdGVycyB0aGF0XG4mIzQzOyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZFxuJiM0MzsgKiB2aWEgVkZJTy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xuJiM0MztcdHUzMiBjdHJsLCByY3RsO1xuJiM0MztcdHUxNiBjbWRfcmVnO1xuJiM0MztcdGludCByZXRyaWVzO1xuJiM0MztcbiYjNDM7XHRpb3ZhX3R4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cdTAwM2V0eF9yaW5nKTtcbiYjNDM7XHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cdTAwM2VyeF9yaW5nKTtcbiYjNDM7XG4mIzQzO1x0LyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi9cbiYjNDM7XHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuJiM0MztcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi9cbiYjNDM7XHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuJiM0MztcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4mIzQzO1x0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XG4mIzQzO1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuJiM0MztcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbiYjNDM7XHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuJiM0MztcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXG4mIzQzO1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4mIzQzO1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4mIzQzO1x0aWdiX3NldHVwX2xvb3BiYWNrKGlnYik7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbiYjNDM7XHQgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiBcJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuJiM0MztcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbiYjNDM7XHQgKiBkZXNjcmlwdG9ycy5cJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4mIzQzO1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbiYjNDM7XHQgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cbiYjNDM7XHRyZXRyaWVzID0gMjAwMDtcbiYjNDM7XHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHVzbGVlcCgxMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXG4mIzQzO1x0ICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUmIzM5O3MgZW11bGF0ZWQgaWdiXG4mIzQzO1x0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxuJiM0MztcdCAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWFxuJiM0MztcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcJiMzNDtXaGVuIHVzaW5nIHRoZVxuJiM0MztcdCAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYlwmIzM0Oywgc28gc2V0dGluZyBMQk1fTUFDXG4mIzQzO1x0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcbiYjNDM7XHQgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrXG4mIzQzO1x0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcbiYjNDM7XHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXG4mIzQzO1x0ICogY29kZSBwYXRocy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xuJiM0MztcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxuJiM0MztcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcbiYjNDM7XHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXG4mIzQzO1x0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxuJiM0MztcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXG4mIzQzO1x0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxuJiM0MztcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxuJiM0MztcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXG4mIzQzO1x0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuJiM0MztcbiYjNDM7XHQvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuJiM0MztcbiYjNDM7XHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXG4mIzQzO1x0aWdiLVx1MDAzZXR4X3RhaWwgPSAwO1xuJiM0MztcdGlnYi1cdTAwM2VyeF90YWlsID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcbiYjNDM7XG4mIzQzO1x0aWdiLVx1MDAzZWJhcjAgPSBkZXZpY2UtXHUwMDNlYmFyc1swXS52YWRkcjtcbiYjNDM7XG4mIzQzO1x0LyogUmVzZXQgZGV2aWNlIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxuJiM0MztcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXG4mIzQzO1x0ICogNC4yLjEuNi4xKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0d2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcdTAwMjYgRTEwMDBfQ1RSTF9SU1QpXG4mIzQzO1x0XHR1c2xlZXAoMTApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuJiM0MztcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuJiM0MztcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuJiM0MztcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbiYjNDM7XHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuJiM0MztcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4mIzQzO3tcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXG4mIzQzO1x0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcJiMzNDtJZiBhbnkgYml0cyBhcmUgc2V0XG4mIzQzO1x0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXCYjMzQ7LCB3aGljaCBydWxlcyBvdXRcbiYjNDM7XHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxuJiM0MztcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxuJiM0MztcdFx0XHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuJiM0MztcdFx0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1tpZ2ItXHUwMDNlcnhfdGFpbF07XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0XHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbiYjNDM7XG4mIzQzO1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcbiYjNDM7XG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MztcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuJiM0MztcdFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcbiYjNDM7XHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuJiM0MztcdFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcbiYjNDM7XHRcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXG4mIzQzO1x0XHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cbiYjNDM7XHRcdFx0Y3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgXHUwMDNjXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdGlnYi1cdTAwM2V0eF90YWlsID0gKGlnYi1cdTAwM2V0eF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFO1xuJiM0MztcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVx1MDAzZXJ4X3RhaWwpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItXHUwMDNldHhfdGFpbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuJiM0MzsgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcbiYjNDM7ICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxuJiM0MzsgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbiYjNDM7ICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxuJiM0MzsgKlxuJiM0MzsgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4mIzQzOyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXCYjMzQ7ZXF1aXZhbGVudCB0byBhIEQwLVx1MDAzZUQzLVx1MDAzZUQwIHRyYW5zaXRpb25cJiMzNDspLCBzb1xuJiM0MzsgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXG4mIzQzOyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcbiYjNDM7ICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuJiM0MzsgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxuJiM0MzsgKiBuZWVkZWQgaGVyZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4mIzQzO1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHR1MzIgcHJldl90YWlsO1xuJiM0MztcdGludCByZXRyaWVzO1xuJiM0MztcbiYjNDM7XHRwcmV2X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuJiM0MztcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxuJiM0MztcdCAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3RcbiYjNDM7XHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbiYjNDM7XHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xuJiM0MztcdCAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7XG4mIzQzO1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4mIzQzO1x0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcbiYjNDM7XHQgKiB0ZXN0cyBib3VuZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHJpZXMgPSAyMDA7XG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuJiM0MztcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuJiM0MztcdFx0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbiYjNDM7XHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuJiM0MztcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4mIzQzO1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4mIzQzO1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbiYjNDM7XHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4mIzQzO1x0ICogaXMgcmVxdWlyZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZ1xuJiM0MztcdCAqIHRyaWdnZXJlZCBieSB0aGUganVzdC1vYnNlcnZlZCBETUEgZmF1bHQgY2FuIHJlbGVhc2UgdGhlIGRldmljZVxuJiM0MztcdCAqIGxvY2sgVkZJT19ERVZJQ0VfUkVTRVQgY29udGVuZHMgZm9yLiAgVGhlIDEwIG1zIHZhbHVlIGlzXG4mIzQzO1x0ICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDtcbiYjNDM7XHQgKiByZWNvdmVyeSBvbmx5IGVuc3VyZXMgdGhlIG5leHQgbWVtY3B5IHN0YXJ0cyBmcm9tIGEgdXNhYmxlIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCgxMDAwMCk7XG4mIzQzO1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9zZW5kX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2lnYlwmIzM0OyxcbiYjNDM7XHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4mIzQzO1x0LmluaXQgPSBpZ2JfaW5pdCxcbiYjNDM7XHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbiYjNDM7XHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbiYjNDM7XHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXG4mIzQzO1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC02OCw2ICYjNDM7NjgsOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiAmIzQzOzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiBcdFx0XHRcdFx0dTMyIHZlY3RvciwgaW50IGNvdW50KVxuIHtcbkBAIC0xMDMsNiAmIzQzOzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuJiM0MztcdFx0XHRcdFx0ICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gdmZpb19wY2lfZHJpdmVyLmNcbiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KVxuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuY1xuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmNcbiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uN2I4Mzk0ZDBhYzUwNzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbkBAIC0xMDYsNiAmIzQzOzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4mIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4mIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGVcbiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gdmVjdG9yOyBpIFx1MDAzYyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXG5cJiMzNDssIGkpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG5pbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbkBAIC01LDEyICYjNDM7NSwxNCBAQFxuICNpZmRlZiBfX3g4Nl82NF9fXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuJiM0MztleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcztcbiAjZW5kaWZcbiBcbiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiAjaWZkZWYgX194ODZfNjRfX1xuIFx0XHUwMDI2ZHNhX29wcyxcbiBcdFx1MDAyNmlvYXRfb3BzLFxuJiM0MztcdFx1MDAyNmlnYl9vcHMsXG4gI2VuZGlmXG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgZHJpdmVyIGltcGxlbWVudGF0aW9uIHRvIHRoZSB1c2VyLXNwYWNlIFZGSU8gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLykuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsLXNwYWNlIGNvZGUsIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGtlcm5lbCBjaGFuZ2VzIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMzVhM2U0MWE5OGM2MDE1MTIwOTJlZjA5M2EzN2NkMDkwYmQ1YWZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgOSAxNjo1NTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xOTY5MDUwNDEzMzg5ZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCkBAIC0wLDAgJiM0MzsxLDUzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2lfcmVncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2lfaWRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taWkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwX3JlZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9kZWZpbmVzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfODI1NzUuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOQomIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjQKJiM0MzsjZGVmaW5lIE1TSVhfVkVDVE9SIDAKJiM0MzsjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovCiYjNDM7CiYjNDM7c3RydWN0IGlnYl90eF9kZXNjIHsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvciYjMzk7cyBkYXRhIGJ1ZmZlciAqLwomIzQzOwkJCXUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi8KJiM0MzsJCQl1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqLwomIzQzOwkJfSByZWFkOwomIzQzOwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovCiYjNDM7CQkJdTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi8KJiM0MzsJCQl1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCiYjNDM7CQl9IHdiOwomIzQzOwl9OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGlnYl9yeF9kZXNjIHsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqLwomIzQzOwkJCXU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovCiYjNDM7CQl9IHJlYWQ7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXUxNiBwa3RfaW5mbzsgICAgIC8qIFJTUyB0eXBlLCBQYWNrZXQgdHlwZSAqLwomIzQzOwkJCXUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi8KJiM0MzsJCQl1MzIgcnNzOyAgICAgICAgICAvKiBSU1MgSGFzaCAqLwomIzQzOwkJCXUzMiBzdGF0dXNfZXJyb3I7IC8qIGV4dCBzdGF0dXMvZXJyb3IgKi8KJiM0MzsJCQl1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovCiYjNDM7CQkJdTE2IHZsYW47ICAgICAgICAgLyogVkxBTiB0YWcgKi8KJiM0MzsJCX0gd2I7IC8qIHdyaXRlYmFjayAqLwomIzQzOwl9OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGlnYiB7CiYjNDM7CXZvaWQgKmJhcjA7CiYjNDM7CXUzMiB0eF90YWlsOwomIzQzOwl1MzIgcnhfdGFpbDsKJiM0MzsJc3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTsKJiM0MzsJc3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAoc3RydWN0IGlnYiAqKWRldmljZS0mZ3Q7ZHJpdmVyLnJlZ2lvbi52YWRkcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CXdyaXRlbCh2YWwsIGlnYi0mZ3Q7YmFyMCAmIzQzOyByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHUzMiBpZ2JfcmVhZDMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZykKJiM0Mzt7CiYjNDM7CXJldHVybiByZWFkbChpZ2ItJmd0O2JhcjAgJiM0MzsgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZ2Jfd3JpdGVfcGh5KHN0cnVjdCBpZ2IgKmlnYiwgdTMyIG9mZnNldCwgdTE2IGRhdGEpCiYjNDM7ewomIzQzOwl1MzIgbWRpYzsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CW1kaWMgPSAoKCh1MzIpZGF0YSkgfAomIzQzOwkJKG9mZnNldCAmbHQ7Jmx0OyBFMTAwMF9NRElDX1JFR19TSElGVCkgfAomIzQzOwkJKDEgJmx0OyZsdDsgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKJiM0MzsJCUUxMDAwX01ESUNfT1BfV1JJVEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVzbGVlcCg1MCk7CiYjNDM7CQltZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpOwomIzQzOwkJaWYgKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShtZGljICZhbXA7IEUxMDAwX01ESUNfUkVBRFkpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX0VSUk9SKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFjawomIzQzOyAqIGVuYWJsZWQsIHRoZW4gZm9yY2UgdGhlIE1BQyBsaW5rIHN0YXRlIHRvIG1hdGNoLiAgSW50ZXJuYWwgbG9vcGJhY2sKJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlCiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LgomIzQzOyAqCiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrCiYjNDM7ICogb24gdGhlIDgyNTc2JiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzICYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkCiYjNDM7ICogb24gdGhpcyBkZXZpY2UuJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5CiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZQomIzQzOyAqIHJhdGlvbmFsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXIKJiM0MzsJICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0cwomIzQzOwkgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoCiYjNDM7CSAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsCiYjNDM7CSAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGUKJiM0MzsJICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYQomIzQzOwkgKiBuby1vcCB0aGVyZS4KJiM0MzsJICovCiYjNDM7CSh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKJiM0MzsKJiM0MzsJLyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsCiYjNDM7CQkJICAgIEJNQ1JfTE9PUEJBQ0sgfAomIzQzOwkJCSAgICBCTUNSX1NQRUVEMTAwMCB8CiYjNDM7CQkJICAgIEJNQ1JfRlVMTERQTFgpOwomIzQzOwlWRklPX0FTU0VSVF9FUShyZXQsIDAsICYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sCiYjNDM7CSAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGUKJiM0MzsJICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZwomIzQzOwkgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcAomIzQzOwkgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX1NQRF9TRUw7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfAomIzQzOwkJRTEwMDBfQ1RSTF9GUkNEUFggfAomIzQzOwkJRTEwMDBfQ1RSTF9TUERfMTAwMCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZEIHwKJiM0MzsJCUUxMDAwX0NUUkxfU0xVOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMCkKJiM0MzsJICogYXQgdGhlIHRhaWwgb2YgaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5CiYjNDM7CSAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdAomIzQzOyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXQKJiM0MzsgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWQKJiM0MzsgKiB2aWEgVkZJTy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJdTY0IGlvdmFfdHgsIGlvdmFfcng7CiYjNDM7CXUzMiBjdHJsLCByY3RsOwomIzQzOwl1MTYgY21kX3JlZzsKJiM0MzsJaW50IHJldHJpZXM7CiYjNDM7CiYjNDM7CWlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLSZndDt0eF9yaW5nKTsKJiM0MzsJaW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItJmd0O3J4X3JpbmcpOwomIzQzOwomIzQzOwkvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqLwomIzQzOwljdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTsKJiM0MzsJY3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkxfRVhULCBjdHJsKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqLwomIzQzOwljbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpOwomIzQzOwlpZiAoKGNtZF9yZWcgJmFtcDsgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9CiYjNDM7CSAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgewomIzQzOwkJY21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTsKJiM0MzsJCXZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0CiYjNDM7CSAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlCiYjNDM7CSAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nCiYjNDM7CSAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzCiYjNDM7CSAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZAomIzQzOwkgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuCiYjNDM7CSAqLwomIzQzOwljdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTsKJiM0MzsKJiM0MzsJLyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi8KJiM0MzsJaWdiX3NldHVwX2xvb3BiYWNrKGlnYik7CiYjNDM7CiYjNDM7CS8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFIKDApLCAodTMyKShpb3ZhX3R4ICZndDsmZ3Q7IDMyKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCAmZ3Q7Jmd0OyAzMikpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzYKJiM0MzsJICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYQomIzQzOwkgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsCiYjNDM7CSAqIGRlc2NyaXB0b3JzLiYjMzQ7ICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlcgomIzQzOwkgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvcgomIzQzOwkgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uCiYjNDM7CSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIFRYIGFuZCBSWCBxdWV1ZXMgdG8gYmUgZW5hYmxlZCAqLwomIzQzOwlyZXRyaWVzID0gMjAwMDsKJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDApIHsKJiM0MzsJCWlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgJmFtcDsgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSAmYW1wOyBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcCgxMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb24KJiM0MzsJICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUmIzM5O3MgZW11bGF0ZWQgaWdiCiYjNDM7CSAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmQKJiM0MzsJICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYCiYjNDM7CSAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyAmIzM0O1doZW4gdXNpbmcgdGhlCiYjNDM7CSAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYiYjMzQ7LCBzbyBzZXR0aW5nIExCTV9NQUMKJiM0MzsJICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXMKJiM0MzsJICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFjawomIzQzOwkgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZQomIzQzOwkgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsCiYjNDM7CSAqIGNvZGUgcGF0aHMuCiYjNDM7CSAqLwomIzQzOwlyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6CiYjNDM7CSAqCiYjNDM7CSAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvCiYjNDM7CSAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKQomIzQzOwkgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5CiYjNDM7CSAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS4KJiM0MzsJICoKJiM0MzsJICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLgomIzQzOwkgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlCiYjNDM7CSAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC4KJiM0MzsJICoKJiM0MzsJICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb24KJiM0MzsJICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZQomIzQzOwkgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2UKJiM0MzsJICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay4KJiM0MzsJICoKJiM0MzsJICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWAomIzQzOwkgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApOwomIzQzOwomIzQzOwkvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTsKJiM0MzsKJiM0MzsJLyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi8KJiM0MzsJaWdiLSZndDt0eF90YWlsID0gMDsKJiM0MzsJaWdiLSZndDtyeF90YWlsID0gMDsKJiM0MzsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9HRShkZXZpY2UtJmd0O2RyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTsKJiM0MzsKJiM0MzsJaWdiLSZndDtiYXIwID0gZGV2aWNlLSZndDtiYXJzWzBdLnZhZGRyOwomIzQzOwomIzQzOwkvKiBSZXNldCBkZXZpY2UgYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMuICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpOwomIzQzOwkvKgomIzQzOwkgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlCiYjNDM7CSAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uCiYjNDM7CSAqIDQuMi4xLjYuMSkuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoMTAwMCk7CiYjNDM7CXdoaWxlIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgJmFtcDsgRTEwMDBfQ1RSTF9SU1QpCiYjNDM7CQl1c2xlZXAoMTApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuCiYjNDM7CSAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZQomIzQzOwkgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmcKJiM0MzsJICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLgomIzQzOwkgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldAomIzQzOwkgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS4KJiM0MzsJICovCiYjNDM7CXZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpOwomIzQzOwomIzQzOwlpZ2JfaHdfaW5pdChkZXZpY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQwomIzQzOwkgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzICYjMzQ7SWYgYW55IGJpdHMgYXJlIHNldAomIzQzOwkgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWQmIzM0Oywgd2hpY2ggcnVsZXMgb3V0CiYjNDM7CSAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsCiYjNDM7CSAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsCiYjNDM7CQkJICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7CiYjNDM7CXN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2Rpc2FibGUoaWdiKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJdHggPSAmYW1wO2lnYi0mZ3Q7dHhfcmluZ1tpZ2ItJmd0O3R4X3RhaWxdOwomIzQzOwkJcnggPSAmYW1wO2lnYi0mZ3Q7cnhfcmluZ1tpZ2ItJmd0O3J4X3RhaWxdOwomIzQzOwomIzQzOwkJbWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7CiYjNDM7CQltZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTsKJiM0MzsKJiM0MzsJCXJ4LSZndDtyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTsKJiM0MzsJCXJ4LSZndDtyZWFkLmhkcl9hZGRyID0gY3B1X3RvX2xlNjQoMCk7CiYjNDM7CiYjNDM7CQl0eC0mZ3Q7cmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHNyYyk7CiYjNDM7CQkvKgomIzQzOwkJICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsJCSAqIHNlY3Rpb24gNy4yLjIuMy4gIERFWFQgbWFya3MgdGhlIGRlc2NyaXB0b3IgYXMgYWR2YW5jZWQKJiM0MzsJCSAqIChyZXF1aXJlZCBieSBoYXJkd2FyZSk7IERUWVA9ZGF0YSBzZWxlY3RzIHRoZSBkYXRhCiYjNDM7CQkgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0CiYjNDM7CQkgKiBGQ1MgKHdpdGhvdXQgaXQgdGhlIGZyYW1lIGlzIGRyb3BwZWQgYXMgbWFsZm9ybWVkKTsKJiM0MzsJCSAqIEVPUCBtYXJrcyBlbmQgb2YgcGFja2V0LiAgRFRBTEVOIGlzIHRoZSBidWZmZXIgbGVuZ3RoCiYjNDM7CQkgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLgomIzQzOwkJICovCiYjNDM7CQl0eC0mZ3Q7cmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RUWVBfREFUQSB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfREVYVCB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfSUZDUyB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfRU9QKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZQomIzQzOwkJICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uCiYjNDM7CQkgKi8KJiM0MzsJCXR4LSZndDtyZWFkLm9saW5mb19zdGF0dXMgPQomIzQzOwkJCWNwdV90b19sZTMyKCh1aW50MzJfdClzaXplICZsdDsmbHQ7IEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpOwomIzQzOwomIzQzOwkJaWdiLSZndDt0eF90YWlsID0gKGlnYi0mZ3Q7dHhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTsKJiM0MzsJCWlnYi0mZ3Q7cnhfdGFpbCA9IChpZ2ItJmd0O3J4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIGlnYi0mZ3Q7cnhfdGFpbCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItJmd0O3R4X3RhaWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZAomIzQzOyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWAomIzQzOyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXIKJiM0MzsgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWQKJiM0MzsgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuCiYjNDM7ICoKJiM0MzsgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0CiYjNDM7ICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyAmIzM0O2VxdWl2YWxlbnQgdG8gYSBEMC0mZ3Q7RDMtJmd0O0QwIHRyYW5zaXRpb24mIzM0OyksIHNvCiYjNDM7ICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbAomIzQzOyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHQKJiM0MzsgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlCiYjNDM7ICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmUKJiM0MzsgKiBuZWVkZWQgaGVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTsKJiM0MzsJdmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTsKJiM0MzsJaWdiX2h3X2luaXQoZGV2aWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7CiYjNDM7CXUzMiBzdGF0dXMgPSAwOwomIzQzOwl1MzIgcHJldl90YWlsOwomIzQzOwlpbnQgcmV0cmllczsKJiM0MzsKJiM0MzsJcHJldl90YWlsID0gKGlnYi0mZ3Q7cnhfdGFpbCAmIzQzOyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTsKJiM0MzsJcnggPSAmYW1wO2lnYi0mZ3Q7cnhfcmluZ1twcmV2X3RhaWxdOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFsIDgyNTc2IGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgZGVzY3JpcHRvciByaW5nIGF0IGxpbmUgcmF0ZS4KJiM0MzsJICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsCiYjNDM7CSAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3QKJiM0MzsJICogdmFsaWQgbWVtY3B5IHRha2VzIH4zMiBtcyBvbiB0aGUgd2lyZSwgcGx1cyBwZXItZnJhbWUgcHJlYW1ibGUsCiYjNDM7CSAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrCiYjNDM7CSAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7CiYjNDM7CSAqIH42eCB0aGUgbGluZS1yYXRlIGZsb29yIGxlYXZlcyBjb21mb3J0YWJsZSBoZWFkcm9vbSBmb3IgaG9zdAomIzQzOwkgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQQomIzQzOwkgKiB0ZXN0cyBib3VuZGVkLgomIzQzOwkgKi8KJiM0MzsJcmV0cmllcyA9IDIwMDsKJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDApIHsKJiM0MzsJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC0mZ3Q7d2Iuc3RhdHVzX2Vycm9yKSk7CiYjNDM7CQlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWdiX2lycV9jbGVhcihpZ2IpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2VuYWJsZShpZ2IpOwomIzQzOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzCiYjNDM7CSAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsCiYjNDM7CSAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lCiYjNDM7CSAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZQomIzQzOwkgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZAomIzQzOwkgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpCiYjNDM7CSAqIGlzIHJlcXVpcmVkLgomIzQzOwkgKgomIzQzOwkgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZwomIzQzOwkgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2UKJiM0MzsJICogbG9jayBWRklPX0RFVklDRV9SRVNFVCBjb250ZW5kcyBmb3IuICBUaGUgMTAgbXMgdmFsdWUgaXMKJiM0MzsJICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDsKJiM0MzsJICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCgxMDAwMCk7CiYjNDM7CWlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgMSk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZ2ImIzM0OywKJiM0MzsJLnByb2JlID0gaWdiX3Byb2JlLAomIzQzOwkuaW5pdCA9IGlnYl9pbml0LAomIzQzOwkucmVtb3ZlID0gaWdiX3JlbW92ZSwKJiM0MzsJLm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsCiYjNDM7CS5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCwKJiM0MzsJLnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oCkBAIC02OCw2ICYjNDM7NjgsOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLAogdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAogCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7CiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTsKJiM0Mzt2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKJiM0MzsJCQkgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpOwogdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKQpAQCAtOTIsNiAmIzQzOzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiAJdmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiAJCQkJCXUzMiB2ZWN0b3IsIGludCBjb3VudCkKIHsKQEAgLTEwMyw2ICYjNDM7MTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogCXZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSkKIHsKIAlyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtJmd0O2lvbW11LCB2YWRkciwgaW92YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawppbmRleCA5ZjQ3YmNlZWQxNmY0Yy4uMWYxM2NjYTA0MzQ4YjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawpAQCAtMTIsNiAmIzQzOzEyLDcgQEAgTElCVkZJT19DICYjNDM7PSB2ZmlvX3BjaV9kcml2ZXIuYwogaWZlcSAoJChBUkNIOng4Nl82ND14ODYpLHg4NikKIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuYwogTElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2RzYS9kc2EuYwomIzQzO0xJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pZ2IvaWdiLmMKIGVuZGlmCiAKIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCmluZGV4IGZjNzVlMDRlZjAxMGNmLi43YjgzOTRkMGFjNTA3NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKQEAgLTEwNiw2ICYjNDM7MTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpCiAJdmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmUtaXNzdWUgVkZJT19ERVZJQ0VfU0VUX0lSUVMgZm9yIGFuIGFscmVhZHktZW5hYmxlZCB2ZWN0b3IgcmFuZ2UgdXNpbmcKJiM0MzsgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZQomIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUKJiM0MzsgKiBJUlEgdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QuICBSZWNyZWF0aW5nIHRoZQomIzQzOyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXMKJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLgomIzQzOyAqLwomIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAomIzQzOwkJCSAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwljaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gdmVjdG9yOyBpICZsdDsgdmVjdG9yICYjNDM7IGNvdW50OyBpJiM0MzsmIzQzOykKJiM0MzsJCVZGSU9fQVNTRVJUX0dFKGRldmljZS0mZ3Q7bXNpX2V2ZW50ZmRzW2ldLCAwLAomIzQzOwkJCSAgICAgICAmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcbiYjMzQ7LCBpKTsKJiM0MzsKJiM0MzsJdmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtJmd0O21zaV9ldmVudGZkcyAmIzQzOyB2ZWN0b3IpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiAJCQkgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbykKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMKaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwpAQCAtNSwxMiAmIzQzOzUsMTQgQEAKICNpZmRlZiBfX3g4Nl82NF9fCiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgZHNhX29wczsKIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wczsKJiM0MztleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wczsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHsKICNpZmRlZiBfX3g4Nl82NF9fCiAJJmFtcDtkc2Ffb3BzLAogCSZhbXA7aW9hdF9vcHMsCiYjNDM7CSZhbXA7aWdiX29wcywKICNlbmRpZgogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY1MwoJCQkJCQkJb3V0cHV0OiA5MQoJCQkJCQkJdGhvdWdodHM6IDczMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHNlbGZ0ZXN0IG1vZGlmaWNhdGlvbnMuJiMzNDsgU3BlY2lmaWNhbGx5LCB3ZSYjMzk7dmUgZ290IGEgbmV3IGRyaXZlciwgYGlnYi5jYCwgYWRkZWQsIGFsb25nIHdpdGggc29tZSByZWxhdGVkIGhlYWRlciBmaWxlcyBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgYnVpbGQgc3lzdGVtIChgbGlidmZpby5ta2ApIGFuZCBzdXBwb3J0aW5nIGNvZGUgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgcHJvbXB0LCBpcyB0byBpbW1lZGlhdGVseSBsZWFuIHRvd2FyZHMgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBwcm9tcHQgY2xlYXJseSBvdXRsaW5lcyBleGNlcHRpb25zLCBhbmQgdGhpcyAqc2VlbXMqIHRvIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgJiMzNDtzZWxmdGVzdCYjMzQ7IGNhdGVnb3J5LiBJdCYjMzk7cyB1c2VyLXNwYWNlLCBwYXJ0IG9mIHRoZSB0ZXN0IGluZnJhc3RydWN0dXJlLCBhbmQgbm90IGNvcmUga2VybmVsIGNvZGUuCgpIb3dldmVyLCBJJiMzOTttIG5vdCBnb2luZyB0byBiZSBsYXp5LiBJIGhhdmUgdG8gZG91YmxlLWNoZWNrLiBUaGUgcHJvbXB0ICpkb2VzKiBzdHJlc3MgdGhlIGltcG9ydGFuY2Ugb2YgdmVyaWZ5aW5nIHRoYXQgdGhpcyBtb2RpZmljYXRpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBsb2dpYy4gU28sIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmaWxlcyBjaGFuZ2VkOiBgZTEwMDBfODI1NzUuaGAsIGBlMTAwMF9kZWZpbmVzLmhgLCBgZTEwMDBfcmVncy5oYCwgYGlnYi5jYCwgYHZmaW9fcGNpX2RldmljZS5oYCwgYGxpYnZmaW8ubWtgLCBgdmZpb19wY2lfZGV2aWNlLmNgLCBhbmQgYHZmaW9fcGNpX2RyaXZlci5jYC4gQWxsIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gLCBjb25maXJtaW5nIG15IGluaXRpYWwgaW1wcmVzc2lvbi4KClNlbGZ0ZXN0cyBhcmUsIGJ5IGRlZmluaXRpb24sIHVzZXItc3BhY2UgcHJvZ3JhbXMuIFRoZXkmIzM5O3JlIG1lYW50IHRvICp0ZXN0KiB0aGUga2VybmVsJiMzOTtzIGJlaGF2aW9yLCBidXQgdGhleSBhcmVuJiMzOTt0IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGNvZGUgaXRzZWxmLiBUaGV5IGNlcnRhaW5seSBkb24mIzM5O3QgcnVuIGluIGtlcm5lbCBzcGFjZSwgdW5sZXNzIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBsaWtlIEJQRiAod2hpY2ggdGhpcyBjbGVhcmx5IGlzbiYjMzk7dCkuIFRoaXMgaXMgYSBDIHByb2dyYW0sIHVzaW5nIGxpYnZmaW8sIGRlc2lnbmVkIHRvIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCB0aHJvdWdoIHRoZSBWRklPIGludGVyZmFjZS4gU28gaXQgaXMgbm90IGNoYW5naW5nIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBsb2dpYyBvciBkcml2ZXJzLCBpdCBpcyB0ZXN0aW5nIHRoZSBleGlzdGluZyBsb2dpYy4KCkkgaGF2ZSB0byBiZSBtZXRpY3Vsb3VzIGhlcmUuIExldCYjMzk7cyByZXZpc2l0IHRoZSBwcm9tcHQ6ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBJJiMzOTttIG5vdCBzZWVpbmcgYW55IG1vZGlmaWNhdGlvbnMgdG8gY29yZSBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gRXZlcnl0aGluZyBpcyBsb2NhbGl6ZWQgd2l0aGluIHRoZSB0ZXN0aW5nIGZyYW1ld29yay4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyB0aG9yb3VnaCByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIHBhdGNoIGRvZXMgKm5vdCogd2FycmFudCBmdXp6aW5nIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSBwcm92aWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNjo1NjowMC4xMzMyODkwNDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2NjE1Nzc3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IGRyaXZlciBpbXBsZW1lbnRhdGlvbiB0byB0aGUgdXNlci1zcGFjZSBWRklPIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbC1zcGFjZSBjb2RlLCBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBrZXJuZWwgY2hhbmdlcyB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTY6NTY6MDAuMTMzMjkzODIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzg5MDA1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMzVhM2U0MWE5OGM2MDE1MTIwOTJlZjA5M2EzN2NkMDkwYmQ1YWZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDkgMTY6NTU6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xOTY5MDUwNDEzMzg5ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbkBAIC0wLDAgKzEsNTMwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2lfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZTEwMDBfcmVncy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZTEwMDBfZGVmaW5lcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZTEwMDBfODI1NzUuaFxcXCJcXG4rXFxuKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzlcXG4rI2RlZmluZSBJR0JfTUFYX0NIVU5LX1NJWkUgMTAyNFxcbisjZGVmaW5lIE1TSVhfVkVDVE9SIDBcXG4rI2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqL1xcbitcXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXFxuK1xcdFxcdFxcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cXG4rXFx0XFx0XFx0dTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi9cXG4rXFx0XFx0fSByZWFkO1xcbitcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqL1xcbitcXHRcXHRcXHR1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqL1xcbitcXHRcXHRcXHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXFxuK1xcdFxcdH0gd2I7XFxuK1xcdH07XFxuK307XFxuK1xcbitzdHJ1Y3QgaWdiX3J4X2Rlc2Mge1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdFxcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdH0gcmVhZDtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXFxuK1xcdFxcdFxcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cXG4rXFx0XFx0XFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cXG4rXFx0XFx0XFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xcbitcXHRcXHRcXHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXFxuK1xcdFxcdFxcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXFxuK1xcdFxcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IGlnYiB7XFxuK1xcdHZvaWQgKmJhcjA7XFxuK1xcdHUzMiB0eF90YWlsO1xcbitcXHR1MzIgcnhfdGFpbDtcXG4rXFx0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXFx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0d3JpdGVsKHZhbCwgaWdiLVxcdTAwM2ViYXIwICsgcmVnKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MzIgaWdiX3JlYWQzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcpXFxuK3tcXG4rXFx0cmV0dXJuIHJlYWRsKGlnYi1cXHUwMDNlYmFyMCArIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxcbit7XFxuK1xcdHUzMiBtZGljO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxcbitcXHRcXHQob2Zmc2V0IFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XFxuK1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XFxuK1xcdFxcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwOyBpKyspIHtcXG4rXFx0XFx0dXNsZWVwKDUwKTtcXG4rXFx0XFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcXG4rXFx0XFx0aWYgKG1kaWMgXFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRpZiAobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcXG4rICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xcbisgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlXFxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cXG4rICpcXG4rICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gXFxcIlVzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2tcXG4rICogb24gdGhlIDgyNTc2XFxcIiwgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXFxcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxcbisgKiBvbiB0aGlzIGRldmljZS5cXFwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxcbisgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlXFxuKyAqIHJhdGlvbmFsZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXFxuK1xcdCAqIFFFTVUncyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xcbitcXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXFxuK1xcdCAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsXFxuK1xcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcXG4rXFx0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxcbitcXHQgKiBuby1vcCB0aGVyZS5cXG4rXFx0ICovXFxuK1xcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XFxuK1xcbitcXHQvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgKyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cXG4rXFx0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxcbitcXHRcXHRcXHQgICAgQk1DUl9MT09QQkFDSyB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX1NQRUVEMTAwMCB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX0ZVTExEUExYKTtcXG4rXFx0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcXFwiRmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sXFxuK1xcdCAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGVcXG4rXFx0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcXG4rXFx0ICogdGhlIGxpbmsgc3RhdGUgdGhlIGRlc2NyaXB0b3IgZW5naW5lIGRvZXMgbm90IHJ1biwgc2luY2UgdGhlIGNoaXBcXG4rXFx0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXFxuK1xcdCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7XFxuK1xcdGN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZEIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9TTFU7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QncyBtc2xlZXAoNTAwKVxcbitcXHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcXG4rXFx0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcXG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcXG4rICogdmlhIFZGSU8uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xcbitcXHR1MzIgY3RybCwgcmN0bDtcXG4rXFx0dTE2IGNtZF9yZWc7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXFx1MDAzZXR4X3JpbmcpO1xcbitcXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cXHUwMDNlcnhfcmluZyk7XFxuK1xcbitcXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xcbitcXG4rXFx0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xcbitcXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xcbitcXHRpZiAoKGNtZF9yZWcgXFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cXG4rXFx0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XFxuK1xcdFxcdGNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7XFxuK1xcdFxcdHZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxcbitcXHQgKiBzZWN0aW9uIDguNi4xLCBHQ1IuQ29tcGxldGlvbl9UaW1lb3V0X1Jlc2VuZCwgYml0IDE2KS4gIFRoZVxcbitcXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xcbitcXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xcbitcXHQgKiByZXRyeWluZyB0aGUgZmFpbGVkIHJlYWQgaW5kZWZpbml0ZWx5LCB3aGljaCBrZWVwcyBQQ0llIEFFUiBhbmRcXG4rXFx0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxcbitcXHQgKi9cXG4rXFx0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9HQ1IpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcXG4rXFxuK1xcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXFxuK1xcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xcbitcXG4rXFx0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2XFxuK1xcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFxcXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxcbitcXHQgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsXFxuK1xcdCAqIGRlc2NyaXB0b3JzLlxcXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXFxuK1xcdCAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yXFxuK1xcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cXG4rXFx0cmV0cmllcyA9IDIwMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFxcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxcbitcXHQgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSdzIGVtdWxhdGVkIGlnYlxcbitcXHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXFxuK1xcdCAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWFxcbitcXHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXFxcIldoZW4gdXNpbmcgdGhlXFxuK1xcdCAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYlxcXCIsIHNvIHNldHRpbmcgTEJNX01BQ1xcbitcXHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xcbitcXHQgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrXFxuK1xcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXFxuK1xcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcXG4rXFx0ICogY29kZSBwYXRocy5cXG4rXFx0ICovXFxuK1xcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XFxuK1xcdCAqXFxuK1xcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXFxuK1xcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxcbitcXHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XFxuK1xcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cXG4rXFx0ICpcXG4rXFx0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxcbitcXHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXFxuK1xcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cXG4rXFx0ICpcXG4rXFx0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cXG4rXFx0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxcbitcXHQgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2VcXG4rXFx0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cXG4rXFx0ICpcXG4rXFx0ICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWFxcbitcXHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xcbitcXG4rXFx0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK1xcbitcXHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cXG4rXFx0aWdiLVxcdTAwM2V0eF90YWlsID0gMDtcXG4rXFx0aWdiLVxcdTAwM2VyeF90YWlsID0gMDtcXG4rXFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubWF4X21lbWNweV9jb3VudCA9IFJJTkdfU0laRSAtIDE7XFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXFx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcXG4rXFxuK1xcdGlnYi1cXHUwMDNlYmFyMCA9IGRldmljZS1cXHUwMDNlYmFyc1swXS52YWRkcjtcXG4rXFxuK1xcdC8qIFJlc2V0IGRldmljZSBhbmQgZGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XFxuK1xcdC8qXFxuK1xcdCAqIE11c3Qgd2FpdCBhdCBsZWFzdCAxIG1pbGxpc2Vjb25kIGFmdGVyIHNldHRpbmcgdGhlIHJlc2V0IGJpdCBiZWZvcmVcXG4rXFx0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cXG4rXFx0ICogNC4yLjEuNi4xKS5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCgxMDAwKTtcXG4rXFx0d2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcXHUwMDI2IEUxMDAwX0NUUkxfUlNUKVxcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxcbitcXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcXG4rXFx0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXFxuK1xcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cXG4rXFx0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcXG4rXFx0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXFxuK1xcdCAqL1xcbitcXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0dmZpb19wY2lfbXNpeF9kaXNhYmxlKGRldmljZSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcXG4rXFx0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcXFwiSWYgYW55IGJpdHMgYXJlIHNldFxcbitcXHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcXFwiLCB3aGljaCBydWxlcyBvdXRcXG4rXFx0ICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGxcXG4rXFx0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXFxuK1xcdCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYyxcXG4rXFx0XFx0XFx0ICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xcbitcXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgKnR4O1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0dHggPSBcXHUwMDI2aWdiLVxcdTAwM2V0eF9yaW5nW2lnYi1cXHUwMDNldHhfdGFpbF07XFxuK1xcdFxcdHJ4ID0gXFx1MDAyNmlnYi1cXHUwMDNlcnhfcmluZ1tpZ2ItXFx1MDAzZXJ4X3RhaWxdO1xcbitcXG4rXFx0XFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XFxuK1xcdFxcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xcbitcXG4rXFx0XFx0cngtXFx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xcbitcXHRcXHRyeC1cXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xcbitcXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxcbitcXHRcXHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXFxuK1xcdFxcdCAqIChyZXF1aXJlZCBieSBoYXJkd2FyZSk7IERUWVA9ZGF0YSBzZWxlY3RzIHRoZSBkYXRhXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcXG4rXFx0XFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XFxuK1xcdFxcdCAqIEVPUCBtYXJrcyBlbmQgb2YgcGFja2V0LiAgRFRBTEVOIGlzIHRoZSBidWZmZXIgbGVuZ3RoXFxuK1xcdFxcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR0eC1cXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXFxuK1xcdFxcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQub2xpbmZvX3N0YXR1cyA9XFxuK1xcdFxcdFxcdGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIFxcdTAwM2NcXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xcbitcXG4rXFx0XFx0aWdiLVxcdTAwM2V0eF90YWlsID0gKGlnYi1cXHUwMDNldHhfdGFpbCArIDEpICUgUklOR19TSVpFO1xcbitcXHRcXHRpZ2ItXFx1MDAzZXJ4X3RhaWwgPSAoaWdiLVxcdTAwM2VyeF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XFxuK1xcdH1cXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXFx1MDAzZXJ4X3RhaWwpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLVxcdTAwM2V0eF90YWlsKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXFxuKyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxcbisgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXFxuKyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxcbisgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXFxuKyAqXFxuKyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcXG4rICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcXFwiZXF1aXZhbGVudCB0byBhIEQwLVxcdTAwM2VEMy1cXHUwMDNlRDAgdHJhbnNpdGlvblxcXCIpLCBzb1xcbisgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXFxuKyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcXG4rICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxcbisgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxcbisgKiBuZWVkZWQgaGVyZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHR2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcXG4rXFx0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFx0aWdiX2h3X2luaXQoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xcbitcXHR1MzIgc3RhdHVzID0gMDtcXG4rXFx0dTMyIHByZXZfdGFpbDtcXG4rXFx0aW50IHJldHJpZXM7XFxuK1xcbitcXHRwcmV2X3RhaWwgPSAoaWdiLVxcdTAwM2VyeF90YWlsICsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XFxuK1xcdHJ4ID0gXFx1MDAyNmlnYi1cXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXFxuK1xcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxcbitcXHQgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0XFxuK1xcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxcbitcXHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xcbitcXHQgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nO1xcbitcXHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcXG4rXFx0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcXG4rXFx0ICogdGVzdHMgYm91bmRlZC5cXG4rXFx0ICovXFxuK1xcdHJldHJpZXMgPSAyMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC1cXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XFxuK1xcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0dXNsZWVwKDEwMDApO1xcbitcXHR9XFxuK1xcbitcXHRpZ2JfaXJxX2NsZWFyKGlnYik7XFxuK1xcbitcXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXFxuK1xcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXFxuK1xcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXFxuK1xcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxcbitcXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxcbitcXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXFxuK1xcdCAqIGlzIHJlcXVpcmVkLlxcbitcXHQgKlxcbitcXHQgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZ1xcbitcXHQgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2VcXG4rXFx0ICogbG9jayBWRklPX0RFVklDRV9SRVNFVCBjb250ZW5kcyBmb3IuICBUaGUgMTAgbXMgdmFsdWUgaXNcXG4rXFx0ICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDtcXG4rXFx0ICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCgxMDAwMCk7XFxuK1xcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgMSk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XFxuK1xcdC5uYW1lID0gXFxcImlnYlxcXCIsXFxuK1xcdC5wcm9iZSA9IGlnYl9wcm9iZSxcXG4rXFx0LmluaXQgPSBpZ2JfaW5pdCxcXG4rXFx0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXFxuK1xcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxcbitcXHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXFxuK1xcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbkBAIC02OCw2ICs2OCw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXFxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcXG4gXFx0XFx0XFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XFxuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xcbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcXG4rXFx0XFx0XFx0ICAgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZmNudGxfc2V0X25vbmJsb2NrKGludCBmZClcXG5AQCAtOTIsNiArOTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4gXFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdFxcdFxcdFxcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4ge1xcbkBAIC0xMDMsNiArMTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiBcXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4re1xcbitcXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXFxuIHtcXG4gXFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVxcdTAwM2Vpb21tdSwgdmFkZHIsIGlvdmEpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xcbkBAIC0xMiw2ICsxMiw3IEBAIExJQlZGSU9fQyArPSB2ZmlvX3BjaV9kcml2ZXIuY1xcbiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KVxcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9pb2F0L2lvYXQuY1xcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9kc2EvZHNhLmNcXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXFxuIGVuZGlmXFxuIFxcbiBMSUJWRklPX09VVFBVVCA6PSAkKE9VVFBVVCkvbGlidmZpb1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXFxuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG5AQCAtMTA2LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxcbiBcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xcbisgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXFxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXFxuKyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cXG4rICovXFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcXG4rXFxuK1xcdGZvciAoaSA9IHZlY3RvcjsgaSBcXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXFxuK1xcdFxcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW2ldLCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcInZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXFxcblxcXCIsIGkpO1xcbitcXG4rXFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXFx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcXG5pbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbkBAIC01LDEyICs1LDE0IEBAXFxuICNpZmRlZiBfX3g4Nl82NF9fXFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaW9hdF9vcHM7XFxuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xcbiAjZW5kaWZcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xcbiAjaWZkZWYgX194ODZfNjRfX1xcbiBcXHRcXHUwMDI2ZHNhX29wcyxcXG4gXFx0XFx1MDAyNmlvYXRfb3BzLFxcbitcXHRcXHUwMDI2aWdiX29wcyxcXG4gI2VuZGlmXFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNjo1NjowMC41NzI4Njc5ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MjY1NzI5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDM1YTNlNDFhOThjNjAxNTEyMDkyZWYwOTNhMzdjZDA5MGJkNWFmY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTY6NTU6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM3MzM2MzQxNzFiYjEzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xOTY5MDUwNDEzMzg5ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgKzEsNTMwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taWkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImUxMDAwX3JlZ3MuaFwiXG4rI2luY2x1ZGUgXCJlMTAwMF9kZWZpbmVzLmhcIlxuKyNpbmNsdWRlIFwiZTEwMDBfODI1NzUuaFwiXG4rXG4rI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOVxuKyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbisjZGVmaW5lIE1TSVhfVkVDVE9SIDBcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4rXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXG4rXHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuK1x0XHRcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXG4rXHRcdH0gcmVhZDtcbitcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4rXHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbitcdFx0XHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXG4rXHRcdH0gd2I7XG4rXHR9O1xuK307XG4rXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHRcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXG4rXHRcdH0gcmVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cbitcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4rXHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbitcdFx0XHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXG4rXHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuK1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4rXHRcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2Ige1xuK1x0dm9pZCAqYmFyMDtcbitcdHUzMiB0eF90YWlsO1xuK1x0dTMyIHJ4X3RhaWw7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuK3tcbitcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuK3tcbitcdHUzMiBtZGljO1xuK1x0aW50IGk7XG4rXG4rXHRtZGljID0gKCgodTMyKWRhdGEpIHxcbitcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbitcdFx0KDEgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XG4rXHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuK1x0XHR1c2xlZXAoNTApO1xuK1x0XHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xuK1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbisgKlxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuKyAqIG9uIHRoZSA4MjU3NlwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuKyAqIG9uIHRoaXMgZGV2aWNlLlwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbisgKiByYXRpb25hbGUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXG4rXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4rXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuK1x0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxuK1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuK1x0ICogbm8tb3AgdGhlcmUuXG4rXHQgKi9cbitcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbitcbitcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuK1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbitcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuK1x0XHRcdCAgICBCTUNSX0ZVTExEUExYKTtcbitcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcIik7XG4rXG4rXHQvKlxuK1x0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxuK1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuK1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMCk7XG4rXG4rXHQvKlxuK1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbitcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4rXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cbitcdCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xuK1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4rXHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbitcdFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XG4rXHRcdEUxMDAwX0NUUkxfRkQgfFxuK1x0XHRFMTAwMF9DVFJMX1NMVTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcbitcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuK1x0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMDApO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuKyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZFxuKyAqIHZpYSBWRklPLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xuK1x0dTMyIGN0cmwsIHJjdGw7XG4rXHR1MTYgY21kX3JlZztcbitcdGludCByZXRyaWVzO1xuK1xuK1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4rXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cdTAwM2VyeF9yaW5nKTtcbitcbitcdC8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbitcdGN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4rXG4rXHQvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovXG4rXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuK1x0aWYgKChjbWRfcmVnIFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cbitcdCAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkge1xuK1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuK1x0XHR2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxuK1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbitcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXG4rXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xuK1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4rXHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXG4rXHQgKi9cbitcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xuK1xuK1x0LyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi9cbitcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xuK1xuK1x0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4IFx1MDAzZVx1MDAzZSAzMikpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xuK1xuK1x0LypcbitcdCAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NlxuK1x0ICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuK1x0ICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbFxuK1x0ICogZGVzY3JpcHRvcnMuXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4rXHQgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvclxuK1x0ICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuK1xuK1x0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXG4rXHRyZXRyaWVzID0gMjAwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTApO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXG4rXHQgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSdzIGVtdWxhdGVkIGlnYlxuK1x0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxuK1x0ICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYXG4rXHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXCJXaGVuIHVzaW5nIHRoZVxuK1x0ICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiXCIsIHNvIHNldHRpbmcgTEJNX01BQ1xuK1x0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcbitcdCAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2tcbitcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXG4rXHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXG4rXHQgKiBjb2RlIHBhdGhzLlxuK1x0ICovXG4rXHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7XG4rXG4rXHQvKlxuK1x0ICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OlxuK1x0ICpcbitcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXG4rXHQgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMClcbitcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcbitcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cbitcdCAqXG4rXHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXG4rXHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXG4rXHQgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guXG4rXHQgKlxuK1x0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cbitcdCAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KSwgc28gYSBzaW5nbGVcbitcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxuK1x0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cbitcdCAqXG4rXHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXG4rXHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cbitcdCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbitcbitcdC8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbitcbitcdC8qIE1hcCB2ZWN0b3IgMCB0byBpbnRlcnJ1cHQgY2F1c2UgMCBhbmQgbWFyayBpdCB2YWxpZCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XG4rXG4rXHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cbitcdGlnYi1cdTAwM2V0eF90YWlsID0gMDtcbitcdGlnYi1cdTAwM2VyeF90YWlsID0gMDtcbitcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFO1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vkcml2ZXIucmVnaW9uLnNpemUsIHNpemVvZihzdHJ1Y3QgaWdiKSk7XG4rXG4rXHRpZ2ItXHUwMDNlYmFyMCA9IGRldmljZS1cdTAwM2ViYXJzWzBdLnZhZGRyO1xuK1xuK1x0LyogUmVzZXQgZGV2aWNlIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4rXHQvKlxuK1x0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxuK1x0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cbitcdCAqIDQuMi4xLjYuMSkuXG4rXHQgKi9cbitcdHVzbGVlcCgxMDAwKTtcbitcdHdoaWxlIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXHUwMDI2IEUxMDAwX0NUUkxfUlNUKVxuK1x0XHR1c2xlZXAoMTApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpO1xuK1xuK1x0LypcbitcdCAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuXG4rXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcbitcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuK1x0ICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLlxuK1x0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcbitcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuK1x0ICovXG4rXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0dmZpb19wY2lfbXNpeF9kaXNhYmxlKGRldmljZSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdC8qXG4rXHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXG4rXHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFwiSWYgYW55IGJpdHMgYXJlIHNldFxuK1x0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXCIsIHdoaWNoIHJ1bGVzIG91dFxuK1x0ICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGxcbitcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYyxcbitcdFx0XHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuK1x0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcbitcdHUzMiBpO1xuK1xuK1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuK1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbitcbitcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1xuK1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbitcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuK1xuK1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbitcdFx0LypcbitcdFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcbitcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuK1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuK1x0XHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XG4rXHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuK1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuK1x0XHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxuK1x0XHQgKi9cbitcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RUWVBfREFUQSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfRU9QKTtcbitcdFx0LypcbitcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbitcdFx0ICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uXG4rXHRcdCAqL1xuK1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuK1x0XHRcdGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIFx1MDAzY1x1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcbitcbitcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdH1cbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLVx1MDAzZXR4X3RhaWwpO1xuK31cbitcbisvKlxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuKyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuKyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXJcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbisgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4rICpcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4rICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcImVxdWl2YWxlbnQgdG8gYSBEMC1cdTAwM2VEMy1cdTAwM2VEMCB0cmFuc2l0aW9uXCIpLCBzb1xuKyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XG4rICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuKyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4rICogbmVlZGVkIGhlcmUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuK1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4rXHR1MzIgc3RhdHVzID0gMDtcbitcdHUzMiBwcmV2X3RhaWw7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xuK1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuK1xuK1x0LypcbitcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuK1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4rXHQgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0XG4rXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbitcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4rXHQgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nO1xuK1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4rXHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuK1x0ICogdGVzdHMgYm91bmRlZC5cbitcdCAqL1xuK1x0cmV0cmllcyA9IDIwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTAwMCk7XG4rXHR9XG4rXG4rXHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4rXG4rXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xuK1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXG4rXHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuK1x0ICogdW5tYXBwZWQtSU9WQSB0ZXN0czsgdGhlIGZhdWx0IGxlYXZlcyB0aGUgZGVzY3JpcHRvciBlbmdpbmVcbitcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxuK1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbitcdCAqIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLCBzbyBhIGJyb2FkZXIgVkZJT19ERVZJQ0VfUkVTRVQgKEZMUilcbitcdCAqIGlzIHJlcXVpcmVkLlxuK1x0ICpcbitcdCAqIERlbGF5IGJlZm9yZSByZXF1ZXN0aW5nIHJlc2V0IHNvIFBDSWUvSU9NTVUvQUVSIGVycm9yIGhhbmRsaW5nXG4rXHQgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2VcbitcdCAqIGxvY2sgVkZJT19ERVZJQ0VfUkVTRVQgY29udGVuZHMgZm9yLiAgVGhlIDEwIG1zIHZhbHVlIGlzXG4rXHQgKiBoZXVyaXN0aWMuICBUaGUgY3VycmVudCBtZW1jcHkgc3RpbGwgZmFpbHMgd2l0aCAtRVRJTUVET1VUO1xuK1x0ICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS5cbitcdCAqL1xuK1x0dXNsZWVwKDEwMDAwKTtcbitcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgMSk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XG4rXHQubmFtZSA9IFwiaWdiXCIsXG4rXHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4rXHQuaW5pdCA9IGlnYl9pbml0LFxuK1x0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXG4rXHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbitcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcbitcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcbit9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC02OCw2ICs2OCw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuK1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiArOTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0XHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4ge1xuQEAgLTEwMyw2ICsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbit7XG4rXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXG4ge1xuIFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xMiw2ICsxMiw3IEBAIExJQlZGSU9fQyArPSB2ZmlvX3BjaV9kcml2ZXIuY1xuIGlmZXEgKCQoQVJDSDp4ODZfNjQ9eDg2KSx4ODYpXG4gTElCVkZJT19DICs9IGRyaXZlcnMvaW9hdC9pb2F0LmNcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9kc2EvZHNhLmNcbitMSUJWRklPX0MgKz0gZHJpdmVycy9pZ2IvaWdiLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMTA2LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4rLypcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xuKyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4rICogaW50ZXJydXB0cyBhZnRlciBhIFZGSU9fREVWSUNFX1JFU0VULCB3aGljaCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZVxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXG4rICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuKyAqIGhlbHBlciBkZWxpYmVyYXRlbHkgcHJlc2VydmVzIHRoZW0uXG4rICovXG4rdm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4rXHRcdFx0ICAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Y2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7XG4rXG4rXHRmb3IgKGkgPSB2ZWN0b3I7IGkgXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXG4rXHRcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbaV0sIDAsXG4rXHRcdFx0ICAgICAgIFwidmVjdG9yICVkIGV2ZW50ZmQgbm90IGFsbG9jYXRlZFxcblwiLCBpKTtcbitcbitcdHZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgdmVjdG9yLCBjb3VudCwgZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgdmZpb19pcnFfaW5mbyAqaXJxX2luZm8pXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbmluZGV4IDY4MjdmNGE2ZmViZTk5Li5hNWQwNTQ3MTMyYzQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTUsMTIgKzUsMTQgQEBcbiAjaWZkZWYgX194ODZfNjRfX1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcbitleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcztcbiAjZW5kaWZcbiBcbiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiAjaWZkZWYgX194ODZfNjRfX1xuIFx0XHUwMDI2ZHNhX29wcyxcbiBcdFx1MDAyNmlvYXRfb3BzLFxuK1x0XHUwMDI2aWdiX29wcyxcbiAjZW5kaWZcbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTY6NTY6MDAuNTcyODY5NTE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgyNjU0MjkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBzZWxmdGVzdCBtb2RpZmljYXRpb25zLlwiIFNwZWNpZmljYWxseSwgd2UndmUgZ290IGEgbmV3IGRyaXZlciwgYGlnYi5jYCwgYWRkZWQsIGFsb25nIHdpdGggc29tZSByZWxhdGVkIGhlYWRlciBmaWxlcyBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgYnVpbGQgc3lzdGVtIChgbGlidmZpby5ta2ApIGFuZCBzdXBwb3J0aW5nIGNvZGUgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgcHJvbXB0LCBpcyB0byBpbW1lZGlhdGVseSBsZWFuIHRvd2FyZHMgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBwcm9tcHQgY2xlYXJseSBvdXRsaW5lcyBleGNlcHRpb25zLCBhbmQgdGhpcyAqc2VlbXMqIHRvIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgXCJzZWxmdGVzdFwiIGNhdGVnb3J5LiBJdCdzIHVzZXItc3BhY2UsIHBhcnQgb2YgdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBub3QgY29yZSBrZXJuZWwgY29kZS5cblxuSG93ZXZlciwgSSdtIG5vdCBnb2luZyB0byBiZSBsYXp5LiBJIGhhdmUgdG8gZG91YmxlLWNoZWNrLiBUaGUgcHJvbXB0ICpkb2VzKiBzdHJlc3MgdGhlIGltcG9ydGFuY2Ugb2YgdmVyaWZ5aW5nIHRoYXQgdGhpcyBtb2RpZmljYXRpb24gZG9lc24ndCBpbnRyb2R1Y2UgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGxvZ2ljLiBTbywgbGV0J3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgZmlsZXMgY2hhbmdlZDogYGUxMDAwXzgyNTc1LmhgLCBgZTEwMDBfZGVmaW5lcy5oYCwgYGUxMDAwX3JlZ3MuaGAsIGBpZ2IuY2AsIGB2ZmlvX3BjaV9kZXZpY2UuaGAsIGBsaWJ2ZmlvLm1rYCwgYHZmaW9fcGNpX2RldmljZS5jYCwgYW5kIGB2ZmlvX3BjaV9kcml2ZXIuY2AuIEFsbCB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCwgY29uZmlybWluZyBteSBpbml0aWFsIGltcHJlc3Npb24uXG5cblNlbGZ0ZXN0cyBhcmUsIGJ5IGRlZmluaXRpb24sIHVzZXItc3BhY2UgcHJvZ3JhbXMuIFRoZXkncmUgbWVhbnQgdG8gKnRlc3QqIHRoZSBrZXJuZWwncyBiZWhhdmlvciwgYnV0IHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGNvZGUgaXRzZWxmLiBUaGV5IGNlcnRhaW5seSBkb24ndCBydW4gaW4ga2VybmVsIHNwYWNlLCB1bmxlc3Mgd2UncmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgbGlrZSBCUEYgKHdoaWNoIHRoaXMgY2xlYXJseSBpc24ndCkuIFRoaXMgaXMgYSBDIHByb2dyYW0sIHVzaW5nIGxpYnZmaW8sIGRlc2lnbmVkIHRvIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCB0aHJvdWdoIHRoZSBWRklPIGludGVyZmFjZS4gU28gaXQgaXMgbm90IGNoYW5naW5nIHRoZSBrZXJuZWwncyBjb3JlIGxvZ2ljIG9yIGRyaXZlcnMsIGl0IGlzIHRlc3RpbmcgdGhlIGV4aXN0aW5nIGxvZ2ljLlxuXG5JIGhhdmUgdG8gYmUgbWV0aWN1bG91cyBoZXJlLiBMZXQncyByZXZpc2l0IHRoZSBwcm9tcHQ6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBJJ20gbm90IHNlZWluZyBhbnkgbW9kaWZpY2F0aW9ucyB0byBjb3JlIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBFdmVyeXRoaW5nIGlzIGxvY2FsaXplZCB3aXRoaW4gdGhlIHRlc3RpbmcgZnJhbWV3b3JrLlxuXG5UaGVyZWZvcmUsIGFmdGVyIHRoaXMgdGhvcm91Z2ggcmV2aWV3LCBJJ20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIHBhdGNoIGRvZXMgKm5vdCogd2FycmFudCBmdXp6aW5nIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSBwcm92aWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NTMsIk91dHB1dFRva2VucyI6OTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNjo1NjoxMC4zOTk0MTU0MTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow6cptm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 16:37:55 +0000 UTC FinishedAt: 2026-07-09 16:56:11 +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+CgkJCTx0ZD4yMDI2LzA3LzA5IDE2OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTY6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMzVhM2U0MWE5OGM2MDE1MTIwOTJlZjA5M2EzN2NkMDkwYmQ1YWZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxNjo1NTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5AQCAtMCwwICYjNDM7MSBAQFxuJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xOTY5MDUwNDEzMzg5ZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgJiM0MzsxLDUzMCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21paS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX3JlZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF9kZWZpbmVzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfODI1NzUuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOVxuJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XG4mIzQzOyNkZWZpbmUgTVNJWF9WRUNUT1IgMFxuJiM0MzsjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgaWdiX3R4X2Rlc2Mge1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJiMzOTtzIGRhdGEgYnVmZmVyICovXG4mIzQzO1x0XHRcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cbiYjNDM7XHRcdFx0dTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi9cbiYjNDM7XHRcdH0gcmVhZDtcbiYjNDM7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4mIzQzO1x0XHRcdHUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovXG4mIzQzO1x0XHRcdHUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi9cbiYjNDM7XHRcdH0gd2I7XG4mIzQzO1x0fTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfcnhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi9cbiYjNDM7XHRcdFx0dTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi9cbiYjNDM7XHRcdH0gcmVhZDtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHUxNiBwa3RfaW5mbzsgICAgIC8qIFJTUyB0eXBlLCBQYWNrZXQgdHlwZSAqL1xuJiM0MztcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4mIzQzO1x0XHRcdHUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovXG4mIzQzO1x0XHRcdHUzMiBzdGF0dXNfZXJyb3I7IC8qIGV4dCBzdGF0dXMvZXJyb3IgKi9cbiYjNDM7XHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuJiM0MztcdFx0XHR1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqL1xuJiM0MztcdFx0fSB3YjsgLyogd3JpdGViYWNrICovXG4mIzQzO1x0fTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2Ige1xuJiM0MztcdHZvaWQgKmJhcjA7XG4mIzQzO1x0dTMyIHR4X3RhaWw7XG4mIzQzO1x0dTMyIHJ4X3RhaWw7XG4mIzQzO1x0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCAmIzQzOyByZWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBpZ2JfcmVhZDMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCAmIzQzOyByZWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSlcbiYjNDM7e1xuJiM0MztcdHUzMiBtZGljO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRtZGljID0gKCgodTMyKWRhdGEpIHxcbiYjNDM7XHRcdChvZmZzZXQgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XG4mIzQzO1x0XHQoMSBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHxcbiYjNDM7XHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dXNsZWVwKDUwKTtcbiYjNDM7XHRcdG1kaWMgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfTURJQyk7XG4mIzQzO1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIShtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXRcbiYjNDM7ICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbiYjNDM7ICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xuJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlXG4mIzQzOyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbiYjNDM7ICpcbiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gXCYjMzQ7VXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuJiM0MzsgKiBvbiB0aGUgODI1NzZcJiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzIFwmIzM0O01BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuJiM0MzsgKiBvbiB0aGlzIGRldmljZS5cJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5XG4mIzQzOyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbiYjNDM7ICogcmF0aW9uYWxlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbiYjNDM7e1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuJiM0MztcdCAqIFFFTVUmIzM5O3MgaWdiIGVtdWxhdGlvbjogUUVNVSBvbmx5IHVwZGF0ZXMgU1RBVFVTLkxVIHZpYSBpdHNcbiYjNDM7XHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4mIzQzO1x0ICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWxcbiYjNDM7XHQgKiBoYXJkd2FyZSBhdXRvbmVnIGNhbm5vdCBjb21wbGV0ZSBiZWZvcmUgdGhlIG5leHQgUEhZIHdyaXRlXG4mIzQzO1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuJiM0MztcdCAqIG5vLW9wIHRoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XG4mIzQzO1xuJiM0MztcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayAmIzQzOyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cbiYjNDM7XHRyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXG4mIzQzO1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfU1BFRUQxMDAwIHxcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfRlVMTERQTFgpO1xuJiM0MztcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sXG4mIzQzO1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuJiM0MztcdCAqIGRhdGFzaGVldCwgYnV0IGVtcGlyaWNhbGx5IHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbiYjNDM7XHQgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcFxuJiM0MztcdCAqIG5vcm1hbGx5IHdhaXRzIGZvciBhIHJlYWwgbmVnb3RpYXRlZCBsaW5rLlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7XG4mIzQzO1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7XG4mIzQzO1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NQRF8xMDAwIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRkQgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9TTFU7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBjdHJsKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMClcbiYjNDM7XHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcbiYjNDM7XHQgKiB0aGUgZGF0YXNoZWV0OyBlbXBpcmljYWwsIGFuZCBpbmhlcml0ZWQgZnJvbSB0aGUga2VybmVsIGRyaXZlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoNTAwMDAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdFxuJiM0MzsgKiBjYW4gYmUgcmV1c2VkIGFmdGVyIGEgZGV2aWNlIHJlc2V0IHRvIHJlLXByb2dyYW0gdGhlIHJlZ2lzdGVycyB0aGF0XG4mIzQzOyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZFxuJiM0MzsgKiB2aWEgVkZJTy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xuJiM0MztcdHUzMiBjdHJsLCByY3RsO1xuJiM0MztcdHUxNiBjbWRfcmVnO1xuJiM0MztcdGludCByZXRyaWVzO1xuJiM0MztcbiYjNDM7XHRpb3ZhX3R4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cdTAwM2V0eF9yaW5nKTtcbiYjNDM7XHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cdTAwM2VyeF9yaW5nKTtcbiYjNDM7XG4mIzQzO1x0LyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi9cbiYjNDM7XHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuJiM0MztcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi9cbiYjNDM7XHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuJiM0MztcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4mIzQzO1x0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XG4mIzQzO1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuJiM0MztcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbiYjNDM7XHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuJiM0MztcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXG4mIzQzO1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4mIzQzO1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4mIzQzO1x0aWdiX3NldHVwX2xvb3BiYWNrKGlnYik7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbiYjNDM7XHQgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiBcJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuJiM0MztcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbiYjNDM7XHQgKiBkZXNjcmlwdG9ycy5cJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4mIzQzO1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbiYjNDM7XHQgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cbiYjNDM7XHRyZXRyaWVzID0gMjAwMDtcbiYjNDM7XHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHVzbGVlcCgxMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXG4mIzQzO1x0ICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUmIzM5O3MgZW11bGF0ZWQgaWdiXG4mIzQzO1x0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxuJiM0MztcdCAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWFxuJiM0MztcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcJiMzNDtXaGVuIHVzaW5nIHRoZVxuJiM0MztcdCAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYlwmIzM0Oywgc28gc2V0dGluZyBMQk1fTUFDXG4mIzQzO1x0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcbiYjNDM7XHQgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrXG4mIzQzO1x0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcbiYjNDM7XHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXG4mIzQzO1x0ICogY29kZSBwYXRocy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xuJiM0MztcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxuJiM0MztcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcbiYjNDM7XHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXG4mIzQzO1x0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxuJiM0MztcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXG4mIzQzO1x0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxuJiM0MztcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxuJiM0MztcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXG4mIzQzO1x0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuJiM0MztcbiYjNDM7XHQvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuJiM0MztcbiYjNDM7XHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXG4mIzQzO1x0aWdiLVx1MDAzZXR4X3RhaWwgPSAwO1xuJiM0MztcdGlnYi1cdTAwM2VyeF90YWlsID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcbiYjNDM7XG4mIzQzO1x0aWdiLVx1MDAzZWJhcjAgPSBkZXZpY2UtXHUwMDNlYmFyc1swXS52YWRkcjtcbiYjNDM7XG4mIzQzO1x0LyogUmVzZXQgZGV2aWNlIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxuJiM0MztcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXG4mIzQzO1x0ICogNC4yLjEuNi4xKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0d2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcdTAwMjYgRTEwMDBfQ1RSTF9SU1QpXG4mIzQzO1x0XHR1c2xlZXAoMTApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuJiM0MztcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuJiM0MztcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuJiM0MztcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbiYjNDM7XHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuJiM0MztcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4mIzQzO3tcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXG4mIzQzO1x0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcJiMzNDtJZiBhbnkgYml0cyBhcmUgc2V0XG4mIzQzO1x0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXCYjMzQ7LCB3aGljaCBydWxlcyBvdXRcbiYjNDM7XHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxuJiM0MztcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxuJiM0MztcdFx0XHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuJiM0MztcdFx0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1tpZ2ItXHUwMDNlcnhfdGFpbF07XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0XHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbiYjNDM7XG4mIzQzO1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcbiYjNDM7XG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MztcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuJiM0MztcdFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcbiYjNDM7XHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuJiM0MztcdFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcbiYjNDM7XHRcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXG4mIzQzO1x0XHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cbiYjNDM7XHRcdFx0Y3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgXHUwMDNjXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdGlnYi1cdTAwM2V0eF90YWlsID0gKGlnYi1cdTAwM2V0eF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFO1xuJiM0MztcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVx1MDAzZXJ4X3RhaWwpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItXHUwMDNldHhfdGFpbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuJiM0MzsgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcbiYjNDM7ICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxuJiM0MzsgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbiYjNDM7ICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxuJiM0MzsgKlxuJiM0MzsgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4mIzQzOyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXCYjMzQ7ZXF1aXZhbGVudCB0byBhIEQwLVx1MDAzZUQzLVx1MDAzZUQwIHRyYW5zaXRpb25cJiMzNDspLCBzb1xuJiM0MzsgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXG4mIzQzOyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcbiYjNDM7ICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuJiM0MzsgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxuJiM0MzsgKiBuZWVkZWQgaGVyZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4mIzQzO1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHR1MzIgcHJldl90YWlsO1xuJiM0MztcdGludCByZXRyaWVzO1xuJiM0MztcbiYjNDM7XHRwcmV2X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuJiM0MztcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxuJiM0MztcdCAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3RcbiYjNDM7XHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbiYjNDM7XHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xuJiM0MztcdCAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7XG4mIzQzO1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4mIzQzO1x0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcbiYjNDM7XHQgKiB0ZXN0cyBib3VuZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHJpZXMgPSAyMDA7XG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuJiM0MztcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuJiM0MztcdFx0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbiYjNDM7XHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuJiM0MztcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4mIzQzO1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4mIzQzO1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbiYjNDM7XHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4mIzQzO1x0ICogaXMgcmVxdWlyZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZ1xuJiM0MztcdCAqIHRyaWdnZXJlZCBieSB0aGUganVzdC1vYnNlcnZlZCBETUEgZmF1bHQgY2FuIHJlbGVhc2UgdGhlIGRldmljZVxuJiM0MztcdCAqIGxvY2sgVkZJT19ERVZJQ0VfUkVTRVQgY29udGVuZHMgZm9yLiAgVGhlIDEwIG1zIHZhbHVlIGlzXG4mIzQzO1x0ICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDtcbiYjNDM7XHQgKiByZWNvdmVyeSBvbmx5IGVuc3VyZXMgdGhlIG5leHQgbWVtY3B5IHN0YXJ0cyBmcm9tIGEgdXNhYmxlIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCgxMDAwMCk7XG4mIzQzO1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9zZW5kX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2lnYlwmIzM0OyxcbiYjNDM7XHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4mIzQzO1x0LmluaXQgPSBpZ2JfaW5pdCxcbiYjNDM7XHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbiYjNDM7XHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbiYjNDM7XHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXG4mIzQzO1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC02OCw2ICYjNDM7NjgsOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiAmIzQzOzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiBcdFx0XHRcdFx0dTMyIHZlY3RvciwgaW50IGNvdW50KVxuIHtcbkBAIC0xMDMsNiAmIzQzOzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuJiM0MztcdFx0XHRcdFx0ICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gdmZpb19wY2lfZHJpdmVyLmNcbiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KVxuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuY1xuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmNcbiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uN2I4Mzk0ZDBhYzUwNzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbkBAIC0xMDYsNiAmIzQzOzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4mIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4mIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGVcbiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gdmVjdG9yOyBpIFx1MDAzYyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXG5cJiMzNDssIGkpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG5pbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbkBAIC01LDEyICYjNDM7NSwxNCBAQFxuICNpZmRlZiBfX3g4Nl82NF9fXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuJiM0MztleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcztcbiAjZW5kaWZcbiBcbiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiAjaWZkZWYgX194ODZfNjRfX1xuIFx0XHUwMDI2ZHNhX29wcyxcbiBcdFx1MDAyNmlvYXRfb3BzLFxuJiM0MztcdFx1MDAyNmlnYl9vcHMsXG4gI2VuZGlmXG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgZHJpdmVyIGltcGxlbWVudGF0aW9uIHRvIHRoZSB1c2VyLXNwYWNlIFZGSU8gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLykuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsLXNwYWNlIGNvZGUsIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGtlcm5lbCBjaGFuZ2VzIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMzVhM2U0MWE5OGM2MDE1MTIwOTJlZjA5M2EzN2NkMDkwYmQ1YWZjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgOSAxNjo1NTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NmQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xOTY5MDUwNDEzMzg5ZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCkBAIC0wLDAgJiM0MzsxLDUzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2lfcmVncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2lfaWRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taWkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwX3JlZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9kZWZpbmVzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfODI1NzUuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOQomIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjQKJiM0MzsjZGVmaW5lIE1TSVhfVkVDVE9SIDAKJiM0MzsjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovCiYjNDM7CiYjNDM7c3RydWN0IGlnYl90eF9kZXNjIHsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvciYjMzk7cyBkYXRhIGJ1ZmZlciAqLwomIzQzOwkJCXUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi8KJiM0MzsJCQl1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqLwomIzQzOwkJfSByZWFkOwomIzQzOwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovCiYjNDM7CQkJdTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi8KJiM0MzsJCQl1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCiYjNDM7CQl9IHdiOwomIzQzOwl9OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGlnYl9yeF9kZXNjIHsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQl1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqLwomIzQzOwkJCXU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovCiYjNDM7CQl9IHJlYWQ7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXUxNiBwa3RfaW5mbzsgICAgIC8qIFJTUyB0eXBlLCBQYWNrZXQgdHlwZSAqLwomIzQzOwkJCXUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi8KJiM0MzsJCQl1MzIgcnNzOyAgICAgICAgICAvKiBSU1MgSGFzaCAqLwomIzQzOwkJCXUzMiBzdGF0dXNfZXJyb3I7IC8qIGV4dCBzdGF0dXMvZXJyb3IgKi8KJiM0MzsJCQl1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovCiYjNDM7CQkJdTE2IHZsYW47ICAgICAgICAgLyogVkxBTiB0YWcgKi8KJiM0MzsJCX0gd2I7IC8qIHdyaXRlYmFjayAqLwomIzQzOwl9OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGlnYiB7CiYjNDM7CXZvaWQgKmJhcjA7CiYjNDM7CXUzMiB0eF90YWlsOwomIzQzOwl1MzIgcnhfdGFpbDsKJiM0MzsJc3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTsKJiM0MzsJc3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAoc3RydWN0IGlnYiAqKWRldmljZS0mZ3Q7ZHJpdmVyLnJlZ2lvbi52YWRkcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CXdyaXRlbCh2YWwsIGlnYi0mZ3Q7YmFyMCAmIzQzOyByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHUzMiBpZ2JfcmVhZDMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZykKJiM0Mzt7CiYjNDM7CXJldHVybiByZWFkbChpZ2ItJmd0O2JhcjAgJiM0MzsgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZ2Jfd3JpdGVfcGh5KHN0cnVjdCBpZ2IgKmlnYiwgdTMyIG9mZnNldCwgdTE2IGRhdGEpCiYjNDM7ewomIzQzOwl1MzIgbWRpYzsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CW1kaWMgPSAoKCh1MzIpZGF0YSkgfAomIzQzOwkJKG9mZnNldCAmbHQ7Jmx0OyBFMTAwMF9NRElDX1JFR19TSElGVCkgfAomIzQzOwkJKDEgJmx0OyZsdDsgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKJiM0MzsJCUUxMDAwX01ESUNfT1BfV1JJVEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVzbGVlcCg1MCk7CiYjNDM7CQltZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpOwomIzQzOwkJaWYgKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShtZGljICZhbXA7IEUxMDAwX01ESUNfUkVBRFkpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX0VSUk9SKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFjawomIzQzOyAqIGVuYWJsZWQsIHRoZW4gZm9yY2UgdGhlIE1BQyBsaW5rIHN0YXRlIHRvIG1hdGNoLiAgSW50ZXJuYWwgbG9vcGJhY2sKJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlCiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LgomIzQzOyAqCiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrCiYjNDM7ICogb24gdGhlIDgyNTc2JiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzICYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkCiYjNDM7ICogb24gdGhpcyBkZXZpY2UuJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5CiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZQomIzQzOyAqIHJhdGlvbmFsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXIKJiM0MzsJICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0cwomIzQzOwkgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoCiYjNDM7CSAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsCiYjNDM7CSAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGUKJiM0MzsJICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYQomIzQzOwkgKiBuby1vcCB0aGVyZS4KJiM0MzsJICovCiYjNDM7CSh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKJiM0MzsKJiM0MzsJLyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsCiYjNDM7CQkJICAgIEJNQ1JfTE9PUEJBQ0sgfAomIzQzOwkJCSAgICBCTUNSX1NQRUVEMTAwMCB8CiYjNDM7CQkJICAgIEJNQ1JfRlVMTERQTFgpOwomIzQzOwlWRklPX0FTU0VSVF9FUShyZXQsIDAsICYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sCiYjNDM7CSAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGUKJiM0MzsJICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZwomIzQzOwkgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcAomIzQzOwkgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX1NQRF9TRUw7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfAomIzQzOwkJRTEwMDBfQ1RSTF9GUkNEUFggfAomIzQzOwkJRTEwMDBfQ1RSTF9TUERfMTAwMCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZEIHwKJiM0MzsJCUUxMDAwX0NUUkxfU0xVOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMCkKJiM0MzsJICogYXQgdGhlIHRhaWwgb2YgaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5CiYjNDM7CSAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdAomIzQzOyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXQKJiM0MzsgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWQKJiM0MzsgKiB2aWEgVkZJTy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJdTY0IGlvdmFfdHgsIGlvdmFfcng7CiYjNDM7CXUzMiBjdHJsLCByY3RsOwomIzQzOwl1MTYgY21kX3JlZzsKJiM0MzsJaW50IHJldHJpZXM7CiYjNDM7CiYjNDM7CWlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLSZndDt0eF9yaW5nKTsKJiM0MzsJaW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItJmd0O3J4X3JpbmcpOwomIzQzOwomIzQzOwkvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqLwomIzQzOwljdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTsKJiM0MzsJY3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkxfRVhULCBjdHJsKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqLwomIzQzOwljbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpOwomIzQzOwlpZiAoKGNtZF9yZWcgJmFtcDsgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9CiYjNDM7CSAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgewomIzQzOwkJY21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTsKJiM0MzsJCXZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0CiYjNDM7CSAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlCiYjNDM7CSAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nCiYjNDM7CSAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzCiYjNDM7CSAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZAomIzQzOwkgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuCiYjNDM7CSAqLwomIzQzOwljdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTsKJiM0MzsKJiM0MzsJLyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi8KJiM0MzsJaWdiX3NldHVwX2xvb3BiYWNrKGlnYik7CiYjNDM7CiYjNDM7CS8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFIKDApLCAodTMyKShpb3ZhX3R4ICZndDsmZ3Q7IDMyKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCAmZ3Q7Jmd0OyAzMikpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzYKJiM0MzsJICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYQomIzQzOwkgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsCiYjNDM7CSAqIGRlc2NyaXB0b3JzLiYjMzQ7ICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlcgomIzQzOwkgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvcgomIzQzOwkgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uCiYjNDM7CSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIFRYIGFuZCBSWCBxdWV1ZXMgdG8gYmUgZW5hYmxlZCAqLwomIzQzOwlyZXRyaWVzID0gMjAwMDsKJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDApIHsKJiM0MzsJCWlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgJmFtcDsgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSAmYW1wOyBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcCgxMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb24KJiM0MzsJICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUmIzM5O3MgZW11bGF0ZWQgaWdiCiYjNDM7CSAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmQKJiM0MzsJICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYCiYjNDM7CSAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyAmIzM0O1doZW4gdXNpbmcgdGhlCiYjNDM7CSAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYiYjMzQ7LCBzbyBzZXR0aW5nIExCTV9NQUMKJiM0MzsJICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXMKJiM0MzsJICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFjawomIzQzOwkgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZQomIzQzOwkgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsCiYjNDM7CSAqIGNvZGUgcGF0aHMuCiYjNDM7CSAqLwomIzQzOwlyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6CiYjNDM7CSAqCiYjNDM7CSAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvCiYjNDM7CSAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKQomIzQzOwkgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5CiYjNDM7CSAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS4KJiM0MzsJICoKJiM0MzsJICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLgomIzQzOwkgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlCiYjNDM7CSAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC4KJiM0MzsJICoKJiM0MzsJICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb24KJiM0MzsJICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZQomIzQzOwkgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2UKJiM0MzsJICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay4KJiM0MzsJICoKJiM0MzsJICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWAomIzQzOwkgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApOwomIzQzOwomIzQzOwkvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTsKJiM0MzsKJiM0MzsJLyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi8KJiM0MzsJaWdiLSZndDt0eF90YWlsID0gMDsKJiM0MzsJaWdiLSZndDtyeF90YWlsID0gMDsKJiM0MzsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9HRShkZXZpY2UtJmd0O2RyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTsKJiM0MzsKJiM0MzsJaWdiLSZndDtiYXIwID0gZGV2aWNlLSZndDtiYXJzWzBdLnZhZGRyOwomIzQzOwomIzQzOwkvKiBSZXNldCBkZXZpY2UgYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMuICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpOwomIzQzOwkvKgomIzQzOwkgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlCiYjNDM7CSAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uCiYjNDM7CSAqIDQuMi4xLjYuMSkuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoMTAwMCk7CiYjNDM7CXdoaWxlIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgJmFtcDsgRTEwMDBfQ1RSTF9SU1QpCiYjNDM7CQl1c2xlZXAoMTApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuCiYjNDM7CSAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZQomIzQzOwkgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmcKJiM0MzsJICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLgomIzQzOwkgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldAomIzQzOwkgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS4KJiM0MzsJICovCiYjNDM7CXZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpOwomIzQzOwomIzQzOwlpZ2JfaHdfaW5pdChkZXZpY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQwomIzQzOwkgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzICYjMzQ7SWYgYW55IGJpdHMgYXJlIHNldAomIzQzOwkgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWQmIzM0Oywgd2hpY2ggcnVsZXMgb3V0CiYjNDM7CSAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsCiYjNDM7CSAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsCiYjNDM7CQkJICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7CiYjNDM7CXN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2Rpc2FibGUoaWdiKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJdHggPSAmYW1wO2lnYi0mZ3Q7dHhfcmluZ1tpZ2ItJmd0O3R4X3RhaWxdOwomIzQzOwkJcnggPSAmYW1wO2lnYi0mZ3Q7cnhfcmluZ1tpZ2ItJmd0O3J4X3RhaWxdOwomIzQzOwomIzQzOwkJbWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7CiYjNDM7CQltZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTsKJiM0MzsKJiM0MzsJCXJ4LSZndDtyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTsKJiM0MzsJCXJ4LSZndDtyZWFkLmhkcl9hZGRyID0gY3B1X3RvX2xlNjQoMCk7CiYjNDM7CiYjNDM7CQl0eC0mZ3Q7cmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHNyYyk7CiYjNDM7CQkvKgomIzQzOwkJICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsJCSAqIHNlY3Rpb24gNy4yLjIuMy4gIERFWFQgbWFya3MgdGhlIGRlc2NyaXB0b3IgYXMgYWR2YW5jZWQKJiM0MzsJCSAqIChyZXF1aXJlZCBieSBoYXJkd2FyZSk7IERUWVA9ZGF0YSBzZWxlY3RzIHRoZSBkYXRhCiYjNDM7CQkgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0CiYjNDM7CQkgKiBGQ1MgKHdpdGhvdXQgaXQgdGhlIGZyYW1lIGlzIGRyb3BwZWQgYXMgbWFsZm9ybWVkKTsKJiM0MzsJCSAqIEVPUCBtYXJrcyBlbmQgb2YgcGFja2V0LiAgRFRBTEVOIGlzIHRoZSBidWZmZXIgbGVuZ3RoCiYjNDM7CQkgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLgomIzQzOwkJICovCiYjNDM7CQl0eC0mZ3Q7cmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RUWVBfREFUQSB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfREVYVCB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfSUZDUyB8CiYjNDM7CQkJRTEwMDBfQURWVFhEX0RDTURfRU9QKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZQomIzQzOwkJICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uCiYjNDM7CQkgKi8KJiM0MzsJCXR4LSZndDtyZWFkLm9saW5mb19zdGF0dXMgPQomIzQzOwkJCWNwdV90b19sZTMyKCh1aW50MzJfdClzaXplICZsdDsmbHQ7IEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpOwomIzQzOwomIzQzOwkJaWdiLSZndDt0eF90YWlsID0gKGlnYi0mZ3Q7dHhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTsKJiM0MzsJCWlnYi0mZ3Q7cnhfdGFpbCA9IChpZ2ItJmd0O3J4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIGlnYi0mZ3Q7cnhfdGFpbCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItJmd0O3R4X3RhaWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZAomIzQzOyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWAomIzQzOyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXIKJiM0MzsgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWQKJiM0MzsgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuCiYjNDM7ICoKJiM0MzsgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0CiYjNDM7ICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyAmIzM0O2VxdWl2YWxlbnQgdG8gYSBEMC0mZ3Q7RDMtJmd0O0QwIHRyYW5zaXRpb24mIzM0OyksIHNvCiYjNDM7ICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbAomIzQzOyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHQKJiM0MzsgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlCiYjNDM7ICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmUKJiM0MzsgKiBuZWVkZWQgaGVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTsKJiM0MzsJdmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTsKJiM0MzsJaWdiX2h3X2luaXQoZGV2aWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7CiYjNDM7CXUzMiBzdGF0dXMgPSAwOwomIzQzOwl1MzIgcHJldl90YWlsOwomIzQzOwlpbnQgcmV0cmllczsKJiM0MzsKJiM0MzsJcHJldl90YWlsID0gKGlnYi0mZ3Q7cnhfdGFpbCAmIzQzOyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTsKJiM0MzsJcnggPSAmYW1wO2lnYi0mZ3Q7cnhfcmluZ1twcmV2X3RhaWxdOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWFsIDgyNTc2IGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgZGVzY3JpcHRvciByaW5nIGF0IGxpbmUgcmF0ZS4KJiM0MzsJICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsCiYjNDM7CSAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3QKJiM0MzsJICogdmFsaWQgbWVtY3B5IHRha2VzIH4zMiBtcyBvbiB0aGUgd2lyZSwgcGx1cyBwZXItZnJhbWUgcHJlYW1ibGUsCiYjNDM7CSAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrCiYjNDM7CSAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7CiYjNDM7CSAqIH42eCB0aGUgbGluZS1yYXRlIGZsb29yIGxlYXZlcyBjb21mb3J0YWJsZSBoZWFkcm9vbSBmb3IgaG9zdAomIzQzOwkgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQQomIzQzOwkgKiB0ZXN0cyBib3VuZGVkLgomIzQzOwkgKi8KJiM0MzsJcmV0cmllcyA9IDIwMDsKJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDApIHsKJiM0MzsJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC0mZ3Q7d2Iuc3RhdHVzX2Vycm9yKSk7CiYjNDM7CQlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl1c2xlZXAoMTAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWdiX2lycV9jbGVhcihpZ2IpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2VuYWJsZShpZ2IpOwomIzQzOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzCiYjNDM7CSAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsCiYjNDM7CSAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lCiYjNDM7CSAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZQomIzQzOwkgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZAomIzQzOwkgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpCiYjNDM7CSAqIGlzIHJlcXVpcmVkLgomIzQzOwkgKgomIzQzOwkgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZwomIzQzOwkgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2UKJiM0MzsJICogbG9jayBWRklPX0RFVklDRV9SRVNFVCBjb250ZW5kcyBmb3IuICBUaGUgMTAgbXMgdmFsdWUgaXMKJiM0MzsJICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDsKJiM0MzsJICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCgxMDAwMCk7CiYjNDM7CWlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgMSk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZ2ImIzM0OywKJiM0MzsJLnByb2JlID0gaWdiX3Byb2JlLAomIzQzOwkuaW5pdCA9IGlnYl9pbml0LAomIzQzOwkucmVtb3ZlID0gaWdiX3JlbW92ZSwKJiM0MzsJLm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsCiYjNDM7CS5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCwKJiM0MzsJLnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oCkBAIC02OCw2ICYjNDM7NjgsOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLAogdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAogCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7CiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTsKJiM0Mzt2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKJiM0MzsJCQkgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpOwogdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKQpAQCAtOTIsNiAmIzQzOzk0LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiAJdmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiAJCQkJCXUzMiB2ZWN0b3IsIGludCBjb3VudCkKIHsKQEAgLTEwMyw2ICYjNDM7MTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogCXZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSkKIHsKIAlyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtJmd0O2lvbW11LCB2YWRkciwgaW92YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawppbmRleCA5ZjQ3YmNlZWQxNmY0Yy4uMWYxM2NjYTA0MzQ4YjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawpAQCAtMTIsNiAmIzQzOzEyLDcgQEAgTElCVkZJT19DICYjNDM7PSB2ZmlvX3BjaV9kcml2ZXIuYwogaWZlcSAoJChBUkNIOng4Nl82ND14ODYpLHg4NikKIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuYwogTElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2RzYS9kc2EuYwomIzQzO0xJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pZ2IvaWdiLmMKIGVuZGlmCiAKIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCmluZGV4IGZjNzVlMDRlZjAxMGNmLi43YjgzOTRkMGFjNTA3NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKQEAgLTEwNiw2ICYjNDM7MTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpCiAJdmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmUtaXNzdWUgVkZJT19ERVZJQ0VfU0VUX0lSUVMgZm9yIGFuIGFscmVhZHktZW5hYmxlZCB2ZWN0b3IgcmFuZ2UgdXNpbmcKJiM0MzsgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZQomIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUKJiM0MzsgKiBJUlEgdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QuICBSZWNyZWF0aW5nIHRoZQomIzQzOyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXMKJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLgomIzQzOyAqLwomIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAomIzQzOwkJCSAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwljaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gdmVjdG9yOyBpICZsdDsgdmVjdG9yICYjNDM7IGNvdW50OyBpJiM0MzsmIzQzOykKJiM0MzsJCVZGSU9fQVNTRVJUX0dFKGRldmljZS0mZ3Q7bXNpX2V2ZW50ZmRzW2ldLCAwLAomIzQzOwkJCSAgICAgICAmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcbiYjMzQ7LCBpKTsKJiM0MzsKJiM0MzsJdmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtJmd0O21zaV9ldmVudGZkcyAmIzQzOyB2ZWN0b3IpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiAJCQkgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbykKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMKaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwpAQCAtNSwxMiAmIzQzOzUsMTQgQEAKICNpZmRlZiBfX3g4Nl82NF9fCiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgZHNhX29wczsKIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wczsKJiM0MztleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wczsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHsKICNpZmRlZiBfX3g4Nl82NF9fCiAJJmFtcDtkc2Ffb3BzLAogCSZhbXA7aW9hdF9vcHMsCiYjNDM7CSZhbXA7aWdiX29wcywKICNlbmRpZgogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY1MwoJCQkJCQkJb3V0cHV0OiA5MQoJCQkJCQkJdGhvdWdodHM6IDczMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHNlbGZ0ZXN0IG1vZGlmaWNhdGlvbnMuJiMzNDsgU3BlY2lmaWNhbGx5LCB3ZSYjMzk7dmUgZ290IGEgbmV3IGRyaXZlciwgYGlnYi5jYCwgYWRkZWQsIGFsb25nIHdpdGggc29tZSByZWxhdGVkIGhlYWRlciBmaWxlcyBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgYnVpbGQgc3lzdGVtIChgbGlidmZpby5ta2ApIGFuZCBzdXBwb3J0aW5nIGNvZGUgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgcHJvbXB0LCBpcyB0byBpbW1lZGlhdGVseSBsZWFuIHRvd2FyZHMgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBwcm9tcHQgY2xlYXJseSBvdXRsaW5lcyBleGNlcHRpb25zLCBhbmQgdGhpcyAqc2VlbXMqIHRvIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgJiMzNDtzZWxmdGVzdCYjMzQ7IGNhdGVnb3J5LiBJdCYjMzk7cyB1c2VyLXNwYWNlLCBwYXJ0IG9mIHRoZSB0ZXN0IGluZnJhc3RydWN0dXJlLCBhbmQgbm90IGNvcmUga2VybmVsIGNvZGUuCgpIb3dldmVyLCBJJiMzOTttIG5vdCBnb2luZyB0byBiZSBsYXp5LiBJIGhhdmUgdG8gZG91YmxlLWNoZWNrLiBUaGUgcHJvbXB0ICpkb2VzKiBzdHJlc3MgdGhlIGltcG9ydGFuY2Ugb2YgdmVyaWZ5aW5nIHRoYXQgdGhpcyBtb2RpZmljYXRpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBsb2dpYy4gU28sIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzcGVjaWZpYyBmaWxlcyBjaGFuZ2VkOiBgZTEwMDBfODI1NzUuaGAsIGBlMTAwMF9kZWZpbmVzLmhgLCBgZTEwMDBfcmVncy5oYCwgYGlnYi5jYCwgYHZmaW9fcGNpX2RldmljZS5oYCwgYGxpYnZmaW8ubWtgLCBgdmZpb19wY2lfZGV2aWNlLmNgLCBhbmQgYHZmaW9fcGNpX2RyaXZlci5jYC4gQWxsIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gLCBjb25maXJtaW5nIG15IGluaXRpYWwgaW1wcmVzc2lvbi4KClNlbGZ0ZXN0cyBhcmUsIGJ5IGRlZmluaXRpb24sIHVzZXItc3BhY2UgcHJvZ3JhbXMuIFRoZXkmIzM5O3JlIG1lYW50IHRvICp0ZXN0KiB0aGUga2VybmVsJiMzOTtzIGJlaGF2aW9yLCBidXQgdGhleSBhcmVuJiMzOTt0IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGNvZGUgaXRzZWxmLiBUaGV5IGNlcnRhaW5seSBkb24mIzM5O3QgcnVuIGluIGtlcm5lbCBzcGFjZSwgdW5sZXNzIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBsaWtlIEJQRiAod2hpY2ggdGhpcyBjbGVhcmx5IGlzbiYjMzk7dCkuIFRoaXMgaXMgYSBDIHByb2dyYW0sIHVzaW5nIGxpYnZmaW8sIGRlc2lnbmVkIHRvIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCB0aHJvdWdoIHRoZSBWRklPIGludGVyZmFjZS4gU28gaXQgaXMgbm90IGNoYW5naW5nIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBsb2dpYyBvciBkcml2ZXJzLCBpdCBpcyB0ZXN0aW5nIHRoZSBleGlzdGluZyBsb2dpYy4KCkkgaGF2ZSB0byBiZSBtZXRpY3Vsb3VzIGhlcmUuIExldCYjMzk7cyByZXZpc2l0IHRoZSBwcm9tcHQ6ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBJJiMzOTttIG5vdCBzZWVpbmcgYW55IG1vZGlmaWNhdGlvbnMgdG8gY29yZSBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gRXZlcnl0aGluZyBpcyBsb2NhbGl6ZWQgd2l0aGluIHRoZSB0ZXN0aW5nIGZyYW1ld29yay4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyB0aG9yb3VnaCByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIHBhdGNoIGRvZXMgKm5vdCogd2FycmFudCBmdXp6aW5nIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSBwcm92aWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNjo1NjowMC4xMzMyODkwNDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2NjE1Nzc3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IGRyaXZlciBpbXBsZW1lbnRhdGlvbiB0byB0aGUgdXNlci1zcGFjZSBWRklPIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbC1zcGFjZSBjb2RlLCBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBrZXJuZWwgY2hhbmdlcyB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTY6NTY6MDAuMTMzMjkzODIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzg5MDA1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMzVhM2U0MWE5OGM2MDE1MTIwOTJlZjA5M2EzN2NkMDkwYmQ1YWZjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDkgMTY6NTU6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xOTY5MDUwNDEzMzg5ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbkBAIC0wLDAgKzEsNTMwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2lfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZTEwMDBfcmVncy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZTEwMDBfZGVmaW5lcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZTEwMDBfODI1NzUuaFxcXCJcXG4rXFxuKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzlcXG4rI2RlZmluZSBJR0JfTUFYX0NIVU5LX1NJWkUgMTAyNFxcbisjZGVmaW5lIE1TSVhfVkVDVE9SIDBcXG4rI2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqL1xcbitcXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXFxuK1xcdFxcdFxcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cXG4rXFx0XFx0XFx0dTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi9cXG4rXFx0XFx0fSByZWFkO1xcbitcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqL1xcbitcXHRcXHRcXHR1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqL1xcbitcXHRcXHRcXHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXFxuK1xcdFxcdH0gd2I7XFxuK1xcdH07XFxuK307XFxuK1xcbitzdHJ1Y3QgaWdiX3J4X2Rlc2Mge1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdFxcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdH0gcmVhZDtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXFxuK1xcdFxcdFxcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cXG4rXFx0XFx0XFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cXG4rXFx0XFx0XFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xcbitcXHRcXHRcXHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXFxuK1xcdFxcdFxcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXFxuK1xcdFxcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IGlnYiB7XFxuK1xcdHZvaWQgKmJhcjA7XFxuK1xcdHUzMiB0eF90YWlsO1xcbitcXHR1MzIgcnhfdGFpbDtcXG4rXFx0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXFx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0d3JpdGVsKHZhbCwgaWdiLVxcdTAwM2ViYXIwICsgcmVnKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MzIgaWdiX3JlYWQzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcpXFxuK3tcXG4rXFx0cmV0dXJuIHJlYWRsKGlnYi1cXHUwMDNlYmFyMCArIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxcbit7XFxuK1xcdHUzMiBtZGljO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxcbitcXHRcXHQob2Zmc2V0IFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XFxuK1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XFxuK1xcdFxcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwOyBpKyspIHtcXG4rXFx0XFx0dXNsZWVwKDUwKTtcXG4rXFx0XFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcXG4rXFx0XFx0aWYgKG1kaWMgXFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRpZiAobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcXG4rICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xcbisgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlXFxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cXG4rICpcXG4rICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gXFxcIlVzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2tcXG4rICogb24gdGhlIDgyNTc2XFxcIiwgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXFxcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxcbisgKiBvbiB0aGlzIGRldmljZS5cXFwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxcbisgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlXFxuKyAqIHJhdGlvbmFsZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXFxuK1xcdCAqIFFFTVUncyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xcbitcXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXFxuK1xcdCAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsXFxuK1xcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcXG4rXFx0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxcbitcXHQgKiBuby1vcCB0aGVyZS5cXG4rXFx0ICovXFxuK1xcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XFxuK1xcbitcXHQvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgKyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cXG4rXFx0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxcbitcXHRcXHRcXHQgICAgQk1DUl9MT09QQkFDSyB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX1NQRUVEMTAwMCB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX0ZVTExEUExYKTtcXG4rXFx0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcXFwiRmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sXFxuK1xcdCAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGVcXG4rXFx0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcXG4rXFx0ICogdGhlIGxpbmsgc3RhdGUgdGhlIGRlc2NyaXB0b3IgZW5naW5lIGRvZXMgbm90IHJ1biwgc2luY2UgdGhlIGNoaXBcXG4rXFx0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXFxuK1xcdCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7XFxuK1xcdGN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZEIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9TTFU7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QncyBtc2xlZXAoNTAwKVxcbitcXHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcXG4rXFx0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcXG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcXG4rICogdmlhIFZGSU8uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xcbitcXHR1MzIgY3RybCwgcmN0bDtcXG4rXFx0dTE2IGNtZF9yZWc7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXFx1MDAzZXR4X3JpbmcpO1xcbitcXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cXHUwMDNlcnhfcmluZyk7XFxuK1xcbitcXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xcbitcXG4rXFx0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xcbitcXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xcbitcXHRpZiAoKGNtZF9yZWcgXFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cXG4rXFx0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XFxuK1xcdFxcdGNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7XFxuK1xcdFxcdHZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxcbitcXHQgKiBzZWN0aW9uIDguNi4xLCBHQ1IuQ29tcGxldGlvbl9UaW1lb3V0X1Jlc2VuZCwgYml0IDE2KS4gIFRoZVxcbitcXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xcbitcXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xcbitcXHQgKiByZXRyeWluZyB0aGUgZmFpbGVkIHJlYWQgaW5kZWZpbml0ZWx5LCB3aGljaCBrZWVwcyBQQ0llIEFFUiBhbmRcXG4rXFx0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxcbitcXHQgKi9cXG4rXFx0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9HQ1IpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcXG4rXFxuK1xcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXFxuK1xcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xcbitcXG4rXFx0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2XFxuK1xcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFxcXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxcbitcXHQgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsXFxuK1xcdCAqIGRlc2NyaXB0b3JzLlxcXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXFxuK1xcdCAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yXFxuK1xcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cXG4rXFx0cmV0cmllcyA9IDIwMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFxcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxcbitcXHQgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSdzIGVtdWxhdGVkIGlnYlxcbitcXHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXFxuK1xcdCAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWFxcbitcXHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXFxcIldoZW4gdXNpbmcgdGhlXFxuK1xcdCAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYlxcXCIsIHNvIHNldHRpbmcgTEJNX01BQ1xcbitcXHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xcbitcXHQgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrXFxuK1xcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXFxuK1xcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcXG4rXFx0ICogY29kZSBwYXRocy5cXG4rXFx0ICovXFxuK1xcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XFxuK1xcdCAqXFxuK1xcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXFxuK1xcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxcbitcXHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XFxuK1xcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cXG4rXFx0ICpcXG4rXFx0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxcbitcXHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXFxuK1xcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cXG4rXFx0ICpcXG4rXFx0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cXG4rXFx0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxcbitcXHQgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2VcXG4rXFx0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cXG4rXFx0ICpcXG4rXFx0ICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWFxcbitcXHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xcbitcXG4rXFx0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK1xcbitcXHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XFxuK1xcbitcXHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cXG4rXFx0aWdiLVxcdTAwM2V0eF90YWlsID0gMDtcXG4rXFx0aWdiLVxcdTAwM2VyeF90YWlsID0gMDtcXG4rXFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubWF4X21lbWNweV9jb3VudCA9IFJJTkdfU0laRSAtIDE7XFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXFx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcXG4rXFxuK1xcdGlnYi1cXHUwMDNlYmFyMCA9IGRldmljZS1cXHUwMDNlYmFyc1swXS52YWRkcjtcXG4rXFxuK1xcdC8qIFJlc2V0IGRldmljZSBhbmQgZGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XFxuK1xcdC8qXFxuK1xcdCAqIE11c3Qgd2FpdCBhdCBsZWFzdCAxIG1pbGxpc2Vjb25kIGFmdGVyIHNldHRpbmcgdGhlIHJlc2V0IGJpdCBiZWZvcmVcXG4rXFx0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cXG4rXFx0ICogNC4yLjEuNi4xKS5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCgxMDAwKTtcXG4rXFx0d2hpbGUgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcXHUwMDI2IEUxMDAwX0NUUkxfUlNUKVxcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxcbitcXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcXG4rXFx0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXFxuK1xcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cXG4rXFx0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcXG4rXFx0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXFxuK1xcdCAqL1xcbitcXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0dmZpb19wY2lfbXNpeF9kaXNhYmxlKGRldmljZSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcXG4rXFx0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcXFwiSWYgYW55IGJpdHMgYXJlIHNldFxcbitcXHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcXFwiLCB3aGljaCBydWxlcyBvdXRcXG4rXFx0ICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGxcXG4rXFx0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXFxuK1xcdCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYyxcXG4rXFx0XFx0XFx0ICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xcbitcXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgKnR4O1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0dHggPSBcXHUwMDI2aWdiLVxcdTAwM2V0eF9yaW5nW2lnYi1cXHUwMDNldHhfdGFpbF07XFxuK1xcdFxcdHJ4ID0gXFx1MDAyNmlnYi1cXHUwMDNlcnhfcmluZ1tpZ2ItXFx1MDAzZXJ4X3RhaWxdO1xcbitcXG4rXFx0XFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XFxuK1xcdFxcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xcbitcXG4rXFx0XFx0cngtXFx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xcbitcXHRcXHRyeC1cXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xcbitcXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxcbitcXHRcXHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXFxuK1xcdFxcdCAqIChyZXF1aXJlZCBieSBoYXJkd2FyZSk7IERUWVA9ZGF0YSBzZWxlY3RzIHRoZSBkYXRhXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcXG4rXFx0XFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XFxuK1xcdFxcdCAqIEVPUCBtYXJrcyBlbmQgb2YgcGFja2V0LiAgRFRBTEVOIGlzIHRoZSBidWZmZXIgbGVuZ3RoXFxuK1xcdFxcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR0eC1cXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXFxuK1xcdFxcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQub2xpbmZvX3N0YXR1cyA9XFxuK1xcdFxcdFxcdGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIFxcdTAwM2NcXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xcbitcXG4rXFx0XFx0aWdiLVxcdTAwM2V0eF90YWlsID0gKGlnYi1cXHUwMDNldHhfdGFpbCArIDEpICUgUklOR19TSVpFO1xcbitcXHRcXHRpZ2ItXFx1MDAzZXJ4X3RhaWwgPSAoaWdiLVxcdTAwM2VyeF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XFxuK1xcdH1cXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXFx1MDAzZXJ4X3RhaWwpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLVxcdTAwM2V0eF90YWlsKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXFxuKyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxcbisgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXFxuKyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxcbisgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXFxuKyAqXFxuKyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcXG4rICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcXFwiZXF1aXZhbGVudCB0byBhIEQwLVxcdTAwM2VEMy1cXHUwMDNlRDAgdHJhbnNpdGlvblxcXCIpLCBzb1xcbisgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXFxuKyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcXG4rICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxcbisgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxcbisgKiBuZWVkZWQgaGVyZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHR2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcXG4rXFx0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFx0aWdiX2h3X2luaXQoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xcbitcXHR1MzIgc3RhdHVzID0gMDtcXG4rXFx0dTMyIHByZXZfdGFpbDtcXG4rXFx0aW50IHJldHJpZXM7XFxuK1xcbitcXHRwcmV2X3RhaWwgPSAoaWdiLVxcdTAwM2VyeF90YWlsICsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XFxuK1xcdHJ4ID0gXFx1MDAyNmlnYi1cXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXFxuK1xcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxcbitcXHQgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0XFxuK1xcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxcbitcXHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xcbitcXHQgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nO1xcbitcXHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcXG4rXFx0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcXG4rXFx0ICogdGVzdHMgYm91bmRlZC5cXG4rXFx0ICovXFxuK1xcdHJldHJpZXMgPSAyMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC1cXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XFxuK1xcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0dXNsZWVwKDEwMDApO1xcbitcXHR9XFxuK1xcbitcXHRpZ2JfaXJxX2NsZWFyKGlnYik7XFxuK1xcbitcXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXFxuK1xcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXFxuK1xcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXFxuK1xcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxcbitcXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxcbitcXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXFxuK1xcdCAqIGlzIHJlcXVpcmVkLlxcbitcXHQgKlxcbitcXHQgKiBEZWxheSBiZWZvcmUgcmVxdWVzdGluZyByZXNldCBzbyBQQ0llL0lPTU1VL0FFUiBlcnJvciBoYW5kbGluZ1xcbitcXHQgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2VcXG4rXFx0ICogbG9jayBWRklPX0RFVklDRV9SRVNFVCBjb250ZW5kcyBmb3IuICBUaGUgMTAgbXMgdmFsdWUgaXNcXG4rXFx0ICogaGV1cmlzdGljLiAgVGhlIGN1cnJlbnQgbWVtY3B5IHN0aWxsIGZhaWxzIHdpdGggLUVUSU1FRE9VVDtcXG4rXFx0ICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCgxMDAwMCk7XFxuK1xcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgMSk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XFxuK1xcdC5uYW1lID0gXFxcImlnYlxcXCIsXFxuK1xcdC5wcm9iZSA9IGlnYl9wcm9iZSxcXG4rXFx0LmluaXQgPSBpZ2JfaW5pdCxcXG4rXFx0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXFxuK1xcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxcbitcXHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXFxuK1xcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbkBAIC02OCw2ICs2OCw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXFxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcXG4gXFx0XFx0XFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XFxuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xcbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcXG4rXFx0XFx0XFx0ICAgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZmNudGxfc2V0X25vbmJsb2NrKGludCBmZClcXG5AQCAtOTIsNiArOTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4gXFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdFxcdFxcdFxcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4ge1xcbkBAIC0xMDMsNiArMTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiBcXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4re1xcbitcXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXFxuIHtcXG4gXFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVxcdTAwM2Vpb21tdSwgdmFkZHIsIGlvdmEpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xcbkBAIC0xMiw2ICsxMiw3IEBAIExJQlZGSU9fQyArPSB2ZmlvX3BjaV9kcml2ZXIuY1xcbiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KVxcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9pb2F0L2lvYXQuY1xcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9kc2EvZHNhLmNcXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXFxuIGVuZGlmXFxuIFxcbiBMSUJWRklPX09VVFBVVCA6PSAkKE9VVFBVVCkvbGlidmZpb1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXFxuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG5AQCAtMTA2LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxcbiBcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xcbisgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXFxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXFxuKyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cXG4rICovXFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcXG4rXFxuK1xcdGZvciAoaSA9IHZlY3RvcjsgaSBcXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXFxuK1xcdFxcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW2ldLCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcInZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXFxcblxcXCIsIGkpO1xcbitcXG4rXFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXFx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcXG5pbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbkBAIC01LDEyICs1LDE0IEBAXFxuICNpZmRlZiBfX3g4Nl82NF9fXFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaW9hdF9vcHM7XFxuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xcbiAjZW5kaWZcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xcbiAjaWZkZWYgX194ODZfNjRfX1xcbiBcXHRcXHUwMDI2ZHNhX29wcyxcXG4gXFx0XFx1MDAyNmlvYXRfb3BzLFxcbitcXHRcXHUwMDI2aWdiX29wcyxcXG4gI2VuZGlmXFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNjo1NjowMC41NzI4Njc5ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MjY1NzI5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDM1YTNlNDFhOThjNjAxNTEyMDkyZWYwOTNhMzdjZDA5MGJkNWFmY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTY6NTU6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM3MzM2MzQxNzFiYjEzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xOTY5MDUwNDEzMzg5ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgKzEsNTMwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taWkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImUxMDAwX3JlZ3MuaFwiXG4rI2luY2x1ZGUgXCJlMTAwMF9kZWZpbmVzLmhcIlxuKyNpbmNsdWRlIFwiZTEwMDBfODI1NzUuaFwiXG4rXG4rI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOVxuKyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbisjZGVmaW5lIE1TSVhfVkVDVE9SIDBcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4rXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXG4rXHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuK1x0XHRcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXG4rXHRcdH0gcmVhZDtcbitcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4rXHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbitcdFx0XHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXG4rXHRcdH0gd2I7XG4rXHR9O1xuK307XG4rXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHRcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXG4rXHRcdH0gcmVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cbitcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4rXHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbitcdFx0XHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXG4rXHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuK1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4rXHRcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2Ige1xuK1x0dm9pZCAqYmFyMDtcbitcdHUzMiB0eF90YWlsO1xuK1x0dTMyIHJ4X3RhaWw7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuK3tcbitcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuK3tcbitcdHUzMiBtZGljO1xuK1x0aW50IGk7XG4rXG4rXHRtZGljID0gKCgodTMyKWRhdGEpIHxcbitcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbitcdFx0KDEgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XG4rXHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuK1x0XHR1c2xlZXAoNTApO1xuK1x0XHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xuK1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbisgKlxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuKyAqIG9uIHRoZSA4MjU3NlwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuKyAqIG9uIHRoaXMgZGV2aWNlLlwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbisgKiByYXRpb25hbGUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXG4rXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4rXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuK1x0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxuK1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuK1x0ICogbm8tb3AgdGhlcmUuXG4rXHQgKi9cbitcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbitcbitcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuK1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbitcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuK1x0XHRcdCAgICBCTUNSX0ZVTExEUExYKTtcbitcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcIik7XG4rXG4rXHQvKlxuK1x0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxuK1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuK1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMCk7XG4rXG4rXHQvKlxuK1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbitcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4rXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cbitcdCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xuK1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4rXHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbitcdFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XG4rXHRcdEUxMDAwX0NUUkxfRkQgfFxuK1x0XHRFMTAwMF9DVFJMX1NMVTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcbitcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuK1x0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMDApO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuKyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZFxuKyAqIHZpYSBWRklPLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xuK1x0dTMyIGN0cmwsIHJjdGw7XG4rXHR1MTYgY21kX3JlZztcbitcdGludCByZXRyaWVzO1xuK1xuK1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4rXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cdTAwM2VyeF9yaW5nKTtcbitcbitcdC8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbitcdGN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4rXG4rXHQvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovXG4rXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuK1x0aWYgKChjbWRfcmVnIFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cbitcdCAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkge1xuK1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuK1x0XHR2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxuK1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbitcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXG4rXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xuK1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4rXHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXG4rXHQgKi9cbitcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xuK1xuK1x0LyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi9cbitcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xuK1xuK1x0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4IFx1MDAzZVx1MDAzZSAzMikpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xuK1xuK1x0LypcbitcdCAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NlxuK1x0ICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuK1x0ICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbFxuK1x0ICogZGVzY3JpcHRvcnMuXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4rXHQgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvclxuK1x0ICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuK1xuK1x0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXG4rXHRyZXRyaWVzID0gMjAwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTApO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXG4rXHQgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSdzIGVtdWxhdGVkIGlnYlxuK1x0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxuK1x0ICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYXG4rXHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXCJXaGVuIHVzaW5nIHRoZVxuK1x0ICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiXCIsIHNvIHNldHRpbmcgTEJNX01BQ1xuK1x0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcbitcdCAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2tcbitcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXG4rXHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXG4rXHQgKiBjb2RlIHBhdGhzLlxuK1x0ICovXG4rXHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7XG4rXG4rXHQvKlxuK1x0ICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OlxuK1x0ICpcbitcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXG4rXHQgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMClcbitcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcbitcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cbitcdCAqXG4rXHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXG4rXHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXG4rXHQgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guXG4rXHQgKlxuK1x0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cbitcdCAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KSwgc28gYSBzaW5nbGVcbitcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxuK1x0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cbitcdCAqXG4rXHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXG4rXHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cbitcdCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbitcbitcdC8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIEUxMDAwX0VJQ1JfUlhfUVVFVUUwKTtcbitcbitcdC8qIE1hcCB2ZWN0b3IgMCB0byBpbnRlcnJ1cHQgY2F1c2UgMCBhbmQgbWFyayBpdCB2YWxpZCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XG4rXG4rXHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cbitcdGlnYi1cdTAwM2V0eF90YWlsID0gMDtcbitcdGlnYi1cdTAwM2VyeF90YWlsID0gMDtcbitcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFO1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vkcml2ZXIucmVnaW9uLnNpemUsIHNpemVvZihzdHJ1Y3QgaWdiKSk7XG4rXG4rXHRpZ2ItXHUwMDNlYmFyMCA9IGRldmljZS1cdTAwM2ViYXJzWzBdLnZhZGRyO1xuK1xuK1x0LyogUmVzZXQgZGV2aWNlIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4rXHQvKlxuK1x0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxuK1x0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cbitcdCAqIDQuMi4xLjYuMSkuXG4rXHQgKi9cbitcdHVzbGVlcCgxMDAwKTtcbitcdHdoaWxlIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXHUwMDI2IEUxMDAwX0NUUkxfUlNUKVxuK1x0XHR1c2xlZXAoMTApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpO1xuK1xuK1x0LypcbitcdCAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuXG4rXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcbitcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuK1x0ICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLlxuK1x0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcbitcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuK1x0ICovXG4rXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0dmZpb19wY2lfbXNpeF9kaXNhYmxlKGRldmljZSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgRTEwMDBfRUlDUl9SWF9RVUVVRTApO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBFMTAwMF9FSUNSX1JYX1FVRVVFMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdC8qXG4rXHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXG4rXHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFwiSWYgYW55IGJpdHMgYXJlIHNldFxuK1x0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXCIsIHdoaWNoIHJ1bGVzIG91dFxuK1x0ICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGxcbitcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYyxcbitcdFx0XHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuK1x0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcbitcdHUzMiBpO1xuK1xuK1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuK1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbitcbitcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1xuK1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbitcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuK1xuK1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbitcdFx0LypcbitcdFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcbitcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuK1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuK1x0XHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XG4rXHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuK1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuK1x0XHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxuK1x0XHQgKi9cbitcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RUWVBfREFUQSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfRU9QKTtcbitcdFx0LypcbitcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbitcdFx0ICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uXG4rXHRcdCAqL1xuK1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuK1x0XHRcdGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIFx1MDAzY1x1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcbitcbitcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdH1cbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLVx1MDAzZXR4X3RhaWwpO1xuK31cbitcbisvKlxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuKyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuKyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXJcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbisgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4rICpcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4rICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcImVxdWl2YWxlbnQgdG8gYSBEMC1cdTAwM2VEMy1cdTAwM2VEMCB0cmFuc2l0aW9uXCIpLCBzb1xuKyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XG4rICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuKyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4rICogbmVlZGVkIGhlcmUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuK1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4rXHR1MzIgc3RhdHVzID0gMDtcbitcdHUzMiBwcmV2X3RhaWw7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xuK1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuK1xuK1x0LypcbitcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuK1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4rXHQgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0XG4rXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbitcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4rXHQgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nO1xuK1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4rXHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuK1x0ICogdGVzdHMgYm91bmRlZC5cbitcdCAqL1xuK1x0cmV0cmllcyA9IDIwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTAwMCk7XG4rXHR9XG4rXG4rXHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4rXG4rXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xuK1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXG4rXHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuK1x0ICogdW5tYXBwZWQtSU9WQSB0ZXN0czsgdGhlIGZhdWx0IGxlYXZlcyB0aGUgZGVzY3JpcHRvciBlbmdpbmVcbitcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxuK1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbitcdCAqIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLCBzbyBhIGJyb2FkZXIgVkZJT19ERVZJQ0VfUkVTRVQgKEZMUilcbitcdCAqIGlzIHJlcXVpcmVkLlxuK1x0ICpcbitcdCAqIERlbGF5IGJlZm9yZSByZXF1ZXN0aW5nIHJlc2V0IHNvIFBDSWUvSU9NTVUvQUVSIGVycm9yIGhhbmRsaW5nXG4rXHQgKiB0cmlnZ2VyZWQgYnkgdGhlIGp1c3Qtb2JzZXJ2ZWQgRE1BIGZhdWx0IGNhbiByZWxlYXNlIHRoZSBkZXZpY2VcbitcdCAqIGxvY2sgVkZJT19ERVZJQ0VfUkVTRVQgY29udGVuZHMgZm9yLiAgVGhlIDEwIG1zIHZhbHVlIGlzXG4rXHQgKiBoZXVyaXN0aWMuICBUaGUgY3VycmVudCBtZW1jcHkgc3RpbGwgZmFpbHMgd2l0aCAtRVRJTUVET1VUO1xuK1x0ICogcmVjb3Zlcnkgb25seSBlbnN1cmVzIHRoZSBuZXh0IG1lbWNweSBzdGFydHMgZnJvbSBhIHVzYWJsZSBzdGF0ZS5cbitcdCAqL1xuK1x0dXNsZWVwKDEwMDAwKTtcbitcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgMSk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XG4rXHQubmFtZSA9IFwiaWdiXCIsXG4rXHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4rXHQuaW5pdCA9IGlnYl9pbml0LFxuK1x0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXG4rXHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbitcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcbitcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcbit9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjJlNjdhZmMwZDU4MDk4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC02OCw2ICs2OCw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuK1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiArOTQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0XHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4ge1xuQEAgLTEwMyw2ICsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbit7XG4rXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXG4ge1xuIFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xMiw2ICsxMiw3IEBAIExJQlZGSU9fQyArPSB2ZmlvX3BjaV9kcml2ZXIuY1xuIGlmZXEgKCQoQVJDSDp4ODZfNjQ9eDg2KSx4ODYpXG4gTElCVkZJT19DICs9IGRyaXZlcnMvaW9hdC9pb2F0LmNcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9kc2EvZHNhLmNcbitMSUJWRklPX0MgKz0gZHJpdmVycy9pZ2IvaWdiLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjdiODM5NGQwYWM1MDc2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMTA2LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4rLypcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xuKyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4rICogaW50ZXJydXB0cyBhZnRlciBhIFZGSU9fREVWSUNFX1JFU0VULCB3aGljaCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZVxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXG4rICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuKyAqIGhlbHBlciBkZWxpYmVyYXRlbHkgcHJlc2VydmVzIHRoZW0uXG4rICovXG4rdm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4rXHRcdFx0ICAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Y2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7XG4rXG4rXHRmb3IgKGkgPSB2ZWN0b3I7IGkgXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXG4rXHRcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbaV0sIDAsXG4rXHRcdFx0ICAgICAgIFwidmVjdG9yICVkIGV2ZW50ZmQgbm90IGFsbG9jYXRlZFxcblwiLCBpKTtcbitcbitcdHZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgdmVjdG9yLCBjb3VudCwgZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgdmZpb19pcnFfaW5mbyAqaXJxX2luZm8pXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbmluZGV4IDY4MjdmNGE2ZmViZTk5Li5hNWQwNTQ3MTMyYzQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTUsMTIgKzUsMTQgQEBcbiAjaWZkZWYgX194ODZfNjRfX1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcbitleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcztcbiAjZW5kaWZcbiBcbiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiAjaWZkZWYgX194ODZfNjRfX1xuIFx0XHUwMDI2ZHNhX29wcyxcbiBcdFx1MDAyNmlvYXRfb3BzLFxuK1x0XHUwMDI2aWdiX29wcyxcbiAjZW5kaWZcbiB9O1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTY6NTY6MDAuNTcyODY5NTE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgyNjU0MjkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBzZWxmdGVzdCBtb2RpZmljYXRpb25zLlwiIFNwZWNpZmljYWxseSwgd2UndmUgZ290IGEgbmV3IGRyaXZlciwgYGlnYi5jYCwgYWRkZWQsIGFsb25nIHdpdGggc29tZSByZWxhdGVkIGhlYWRlciBmaWxlcyBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgYnVpbGQgc3lzdGVtIChgbGlidmZpby5ta2ApIGFuZCBzdXBwb3J0aW5nIGNvZGUgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgcHJvbXB0LCBpcyB0byBpbW1lZGlhdGVseSBsZWFuIHRvd2FyZHMgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBwcm9tcHQgY2xlYXJseSBvdXRsaW5lcyBleGNlcHRpb25zLCBhbmQgdGhpcyAqc2VlbXMqIHRvIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgXCJzZWxmdGVzdFwiIGNhdGVnb3J5LiBJdCdzIHVzZXItc3BhY2UsIHBhcnQgb2YgdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBub3QgY29yZSBrZXJuZWwgY29kZS5cblxuSG93ZXZlciwgSSdtIG5vdCBnb2luZyB0byBiZSBsYXp5LiBJIGhhdmUgdG8gZG91YmxlLWNoZWNrLiBUaGUgcHJvbXB0ICpkb2VzKiBzdHJlc3MgdGhlIGltcG9ydGFuY2Ugb2YgdmVyaWZ5aW5nIHRoYXQgdGhpcyBtb2RpZmljYXRpb24gZG9lc24ndCBpbnRyb2R1Y2UgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGxvZ2ljLiBTbywgbGV0J3MgbG9vayBhdCB0aGUgc3BlY2lmaWMgZmlsZXMgY2hhbmdlZDogYGUxMDAwXzgyNTc1LmhgLCBgZTEwMDBfZGVmaW5lcy5oYCwgYGUxMDAwX3JlZ3MuaGAsIGBpZ2IuY2AsIGB2ZmlvX3BjaV9kZXZpY2UuaGAsIGBsaWJ2ZmlvLm1rYCwgYHZmaW9fcGNpX2RldmljZS5jYCwgYW5kIGB2ZmlvX3BjaV9kcml2ZXIuY2AuIEFsbCB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCwgY29uZmlybWluZyBteSBpbml0aWFsIGltcHJlc3Npb24uXG5cblNlbGZ0ZXN0cyBhcmUsIGJ5IGRlZmluaXRpb24sIHVzZXItc3BhY2UgcHJvZ3JhbXMuIFRoZXkncmUgbWVhbnQgdG8gKnRlc3QqIHRoZSBrZXJuZWwncyBiZWhhdmlvciwgYnV0IHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGNvZGUgaXRzZWxmLiBUaGV5IGNlcnRhaW5seSBkb24ndCBydW4gaW4ga2VybmVsIHNwYWNlLCB1bmxlc3Mgd2UncmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgbGlrZSBCUEYgKHdoaWNoIHRoaXMgY2xlYXJseSBpc24ndCkuIFRoaXMgaXMgYSBDIHByb2dyYW0sIHVzaW5nIGxpYnZmaW8sIGRlc2lnbmVkIHRvIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCB0aHJvdWdoIHRoZSBWRklPIGludGVyZmFjZS4gU28gaXQgaXMgbm90IGNoYW5naW5nIHRoZSBrZXJuZWwncyBjb3JlIGxvZ2ljIG9yIGRyaXZlcnMsIGl0IGlzIHRlc3RpbmcgdGhlIGV4aXN0aW5nIGxvZ2ljLlxuXG5JIGhhdmUgdG8gYmUgbWV0aWN1bG91cyBoZXJlLiBMZXQncyByZXZpc2l0IHRoZSBwcm9tcHQ6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBJJ20gbm90IHNlZWluZyBhbnkgbW9kaWZpY2F0aW9ucyB0byBjb3JlIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBFdmVyeXRoaW5nIGlzIGxvY2FsaXplZCB3aXRoaW4gdGhlIHRlc3RpbmcgZnJhbWV3b3JrLlxuXG5UaGVyZWZvcmUsIGFmdGVyIHRoaXMgdGhvcm91Z2ggcmV2aWV3LCBJJ20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIHBhdGNoIGRvZXMgKm5vdCogd2FycmFudCBmdXp6aW5nIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSBwcm92aWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NTMsIk91dHB1dFRva2VucyI6OTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNjo1NjoxMC4zOTk0MTU0MTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBkcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdGhlIHVzZXItc3BhY2UgVkZJTyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwtc3BhY2UgY29kZSwgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwga2VybmVsIGNoYW5nZXMgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow6cptm[1] Phase: Running StartedAt: 2026-07-09 16:57:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6cptm[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-09 16:57:26 +0000 UTC FinishedAt: 2026-07-09 16:57:36 +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,}