Name: series-workflow9pppm Phase: Failed StartedAt: 2026-08-11 16:16:29 +0000 UTC FinishedAt: 2026-08-11 16:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pppm[0] Phase: Succeeded StartedAt: 2026-08-11 16:16:29 +0000 UTC FinishedAt: 2026-08-11 16:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pppm[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 16:16:29 +0000 UTC FinishedAt: 2026-08-11 16:42:24 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGdQVFAgc3VwcG9ydCBpbiB0aGUgUmVuZXNhcyBFdGhlcm5ldCBBVkIgKHJhdmIpIGRyaXZlciwgYWRkaW5nIHN1cHBvcnQgZm9yIEdlbjQgZ1BUUCBhbmQgaW50cm9kdWNpbmcgYSBzdHJ1Y3QgZm9yIHBsYXRmb3JtLXNwZWNpZmljIGNhbGxiYWNrcy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgZm9yIFJlbmVzYXMgUi1DYXIgU29Dcy4gVGhlIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGFuZCB0aGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIHRvIHByb2JlLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkY2M3MDVmZmU4ZWJiZjY2OWM3OTMyZTY0MmE2MWQ1MGE1MWMwODAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDE6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxuaW5kZXggMWUwMGVmNWIzYWNkYS4uZmFkMDAyNDkyNDIxYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxuQEAgLTk3LDYgJiM0Mzs5Nyw4IEBAIHByb3BlcnRpZXM6XG4gXG4gICBwaHktaGFuZGxlOiB0cnVlXG4gXG4mIzQzOyAgcHRwLXRpbWVyOiB0cnVlXG4mIzQzO1xuICAgJiMzOTsjYWRkcmVzcy1jZWxscyYjMzk7OlxuICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy5cbiAgICAgY29uc3Q6IDFcbkBAIC0zMDUsNiAmIzQzOzMwNywxNSBAQCBhbGxPZjpcbiAgICAgICAgICAgICBpdGVtczpcbiAgICAgICAgICAgICAgIC0gY29uc3Q6IGZja1xuICAgICAgICAgICAgICAgLSBjb25zdDogcmVmY2xrXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgbm90OlxuJiM0MzsgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgICBjb25zdDogcmVuZXNhcyxldGhlcmF2Yi1yY2FyLWdlbjRcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgcHRwLXRpbWVyOiBmYWxzZVxuIFxuIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcbmluZGV4IDVlNTZlYzliMTAxM2EuLjRjOGRjMDIwMjJlMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcbkBAIC0yNDksNiAmIzQzOzI0OSw4IEBAIGVudW0gQVBTUl9CSVQge1xuIFx0QVBTUl9SRE1cdD0gMHgwMDAwMjAwMCxcbiBcdEFQU1JfVERNXHQ9IDB4MDAwMDQwMDAsXG4gXHRBUFNSX01JSVNFTEVDVFx0PSAweDAxMDAwMDAwLFx0LyogUi1DYXIgVjRNIG9ubHkgKi9cbiYjNDM7XHRBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgPSBCSVQoMjUpLCAvKiBHZW40ICovXG4mIzQzO1x0QVBTUl9HUFRQQ0xPQ0tcdD0gQklUKDI5KSxcdC8qIEdlbjQgKi9cbiB9O1xuIFxuIC8qIFJDUiAqL1xuQEAgLTEwMzQsNiAmIzQzOzEwMzYsMzEgQEAgc3RydWN0IHJhdmJfcHRwIHtcbiBcdHN0cnVjdCByYXZiX3B0cF9wZXJvdXQgcGVyb3V0W05fUEVSX09VVF07XG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCByYXZiX2dwdHBfaW5mbyAtIFBsYXRmb3JtIHNwZWNpZmljIGdQVFAgYmVoYXZpb3JcbiYjNDM7ICpcbiYjNDM7ICogRWFjaCBnZW5lcmF0aW9uIG9mIFJBVkIgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgYmVoYXZpb3JzIHdoZW4gaW50ZXJhY3RpbmdcbiYjNDM7ICogd2l0aCB0aGUgZ1BUUCBjbG9jay4gVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNhbGxiYWNrcyB0byBiZSBjYWxsZWQgYXRcbiYjNDM7ICogY3JpdGljYWwgcG9pbnRzIGluIHRoZSBSQVZCIGRyaXZlci5cbiYjNDM7ICpcbiYjNDM7ICogQHByb2JlOlx0XHRQcm9iZSB0aGUgZ1BUUCBjbG9ja1xuJiM0MzsgKiBAY2xvY2tfaW5kZXg6XHRHZXQgdGhlIFBUUCBjbG9jayBpbmRleCwgaWYgYW55XG4mIzQzOyAqIEBzZXRfY29uZmlnX21vZGU6XHRFbnRlciBjb25maWcgbW9kZVxuJiM0MzsgKiBAZG1hY19zdGFydDpcdFx0Q2FsbGVkIHdoZW4gdGhlIERNQUMgc3RhcnRzXG4mIzQzOyAqIEBkbWFjX3N0b3A6XHRcdENhbGxlZCB3aGVuIHRoZSBETUFDIHN0b3BzXG4mIzQzOyAqIEBuZGV2X29wZW46XHRcdENhbGxlZCB3aGVuIHRoZSBuZGV2IGlzIG9wZW5lZFxuJiM0MzsgKiBAbmRldl9jbG9zZTpcdFx0Q2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgY2xvc2VkXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8ge1xuJiM0MztcdGludCAoKnByb2JlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO1x0aW50ICgqY2xvY2tfaW5kZXgpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7XHRpbnQgKCpzZXRfY29uZmlnX21vZGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7XHRpbnQgKCpkbWFjX3N0YXJ0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO1x0dm9pZCAoKmRtYWNfc3RvcCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0MztcdGludCAoKm5kZXZfb3Blbikoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0MztcdHZvaWQgKCpuZGV2X2Nsb3NlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCByYXZiX2h3X2luZm8ge1xuIFx0aW50ICgqcmVjZWl2ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBidWRnZXQsIGludCBxKTtcbiBcdHZvaWQgKCpzZXRfcmF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuQEAgLTEwNTIsNiAmIzQzOzEwNzksNyBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcbiBcdHUzMiByeF9idWZmZXJfc2l6ZTtcbiBcdHUzMiByeF9kZXNjX3NpemU7XG4gXHR1MzIgZGJhdF9lbnRyeV9udW07XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvICpwdHA7IC8qIENhbGxiYWNrcyB0byBoYW5kbGUgZ1BUUCBpbnRlcmFjdGlvbnMuICovXG4gXHR1bnNpZ25lZCBhbGlnbmVkX3R4OiAxO1xuIFx0dW5zaWduZWQgY29hbGVzY2VfaXJxczoxO1x0LyogTmVlZHMgc29mdHdhcmUgSVJRIGNvYWxlc2NpbmcgKi9cbiBcbkBAIC0xMDYyLDkgJiM0MzsxMDkwLDYgQEAgc3RydWN0IHJhdmJfaHdfaW5mbyB7XG4gXHR1bnNpZ25lZCBtdWx0aV9pcnFzOjE7XHRcdC8qIEFWQi1ETUFDIGFuZCBFLU1BQyBoYXMgbXVsdGlwbGUgaXJxcyAqL1xuIFx0dW5zaWduZWQgaXJxX2VuX2RpczoxO1x0XHQvKiBIYXMgc2VwYXJhdGUgaXJxIGVuYWJsZSBhbmQgZGlzYWJsZSByZWdzICovXG4gXHR1bnNpZ25lZCBlcnJfbWdtdF9pcnFzOjE7XHQvKiBMaW5lMSAoRXJyKSBhbmQgTGluZTIgKE1nbXQpIGlycXMgYXJlIHNlcGFyYXRlICovXG4tXHR1bnNpZ25lZCBncHRwOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgKi9cbi1cdHVuc2lnbmVkIGNjY19nYWM6MTtcdFx0LyogQVZCLURNQUMgaGFzIGdQVFAgc3VwcG9ydCBhY3RpdmUgaW4gY29uZmlnIG1vZGUgKi9cbi1cdHVuc2lnbmVkIGdwdHBfcmVmX2NsazoxO1x0LyogZ1BUUCBoYXMgc2VwYXJhdGUgcmVmZXJlbmNlIGNsb2NrICovXG4gXHR1bnNpZ25lZCBuY19xdWV1ZXM6MTtcdFx0LyogQVZCLURNQUMgaGFzIFJYIGFuZCBUWCBOQyBxdWV1ZXMgKi9cbiBcdHVuc2lnbmVkIG1hZ2ljX3BrdDoxO1x0XHQvKiBFLU1BQyBzdXBwb3J0cyBtYWdpYyBwYWNrZXQgZGV0ZWN0aW9uICovXG4gXHR1bnNpZ25lZCBoYWxmX2R1cGxleDoxO1x0XHQvKiBFLU1BQyBzdXBwb3J0cyBoYWxmIGR1cGxleCBtb2RlICovXG5AQCAtMTEwOSw2ICYjNDM7MTEzNCw3IEBAIHN0cnVjdCByYXZiX3ByaXZhdGUge1xuIFx0c3RydWN0IGxpc3RfaGVhZCB0c19za2JfbGlzdDtcbiBcdHUzMiB0c19za2JfdGFnO1xuIFx0c3RydWN0IHJhdmJfcHRwIHB0cDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dwdHA7XHQvKiBSZWZlcmVuY2UgdG8gZXh0ZXJuYWwgZ1BUUCBjbG9jaywgaWYgYW55LiAqL1xuIFx0c3BpbmxvY2tfdCBsb2NrO1x0XHQvKiBSZWdpc3RlciBhY2Nlc3MgbG9jayAqL1xuIFx0dTMyIGN1cl9yeFtOVU1fUlhfUVVFVUVdO1x0LyogQ29uc3VtZXIgcmluZyBpbmRpY2VzICovXG4gXHR1MzIgZGlydHlfcnhbTlVNX1JYX1FVRVVFXTtcdC8qIFByb2R1Y2VyIHJpbmcgaW5kaWNlcyAqL1xuQEAgLTExNjAsNyAmIzQzOzExODYsNyBAQCB2b2lkIHJhdmJfbW9kaWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIGNsZWFyLFxuIGludCByYXZiX3dhaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTtcbiBcbiB2b2lkIHJhdmJfcHRwX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4tdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcbiYjNDM7aW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gXG4gI2VuZGlmXHQvKiAjaWZuZGVmIF9fUkFWQl9IX18gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xuaW5kZXggNWY4ODczMzA5NGQwZi4uMzAxNzBlOTJkM2Q3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcbkBAIC03MDcsNyAmIzQzOzcwNywxNSBAQCBzdGF0aWMgaW50IHJhdmJfZG1hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4gXHQvKiBTZXR0aW5nIHRoZSBjb250cm9sIHdpbGwgc3RhcnQgdGhlIEFWQi1ETUFDIHByb2Nlc3MuICovXG4tXHRyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfT1BFUkFUSU9OKTtcbiYjNDM7XHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RhcnQpXG4mIzQzO1x0XHRyZXR1cm4gaW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdGFydChuZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJhdmJfZ2V0X3R4X3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbkBAIC0xMTE1LDYgJiM0MzsxMTIzLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9zdG9wX2RtYShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O2ZhaWxlZCB0byBzdG9wIEFYSSBCVVNcXG5cJiMzNDspO1xuIFx0fVxuIFxuJiM0MztcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdG9wKVxuJiM0MztcdFx0aW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdG9wKG5kZXYpO1xuJiM0MztcbiBcdC8qIFN0b3AgQVZCLURNQUMgcHJvY2VzcyAqL1xuIFx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4gfVxuQEAgLTE3MTksOSAmIzQzOzE3MzEsNyBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XG4gXHRcdG5ldGlmX2RldmljZV9kZXRhY2gobmRldik7XG4tXHRcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0XHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4mIzQzO1xuIFx0XHQvKiBXYWl0IGZvciBETUEgc3RvcHBpbmcgKi9cbiBcdFx0ZXJyb3IgPSByYXZiX3N0b3BfZG1hKG5kZXYpO1xuIFx0XHRpZiAoZXJyb3IpIHtcbkBAIC0xNzUyLDEwICYjNDM7MTc2Miw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0XHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcbiBcbi1cdFx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRcdGlmIChpbmZvLVx1MDAzZWdwdHApXG4tXHRcdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuLVxuIFx0XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpO1xuIFx0fVxuIFxuQEAgLTE3NjcsOCAmIzQzOzE3NzMsMTMgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIHtcbiBcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmh3X2luZm8gPSBwcml2LVx1MDAzZWluZm87XG4mIzQzO1x0aW50IGluZGV4ID0gLTE7XG4mIzQzO1xuJiM0MztcdGlmIChod19pbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaHdfaW5mby1cdTAwM2VwdHAtXHUwMDNlY2xvY2tfaW5kZXgpXG4mIzQzO1x0XHRpbmRleCA9IGh3X2luZm8tXHUwMDNlcHRwLVx1MDAzZWNsb2NrX2luZGV4KG5kZXYpO1xuIFxuLVx0aWYgKGh3X2luZm8tXHUwMDNlZ3B0cCB8fCBod19pbmZvLVx1MDAzZWNjY19nYWMpIHtcbiYjNDM7XHQvKiBPbmx5IGFkdmVydGlzZSBwdHAgY2xvY2sgaWYgcHJlc2VudC4gKi9cbiYjNDM7XHRpZiAoaW5kZXggXHUwMDNlPSAwKSB7XG4gXHRcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nID1cbiBcdFx0XHRTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcbiBcdFx0XHRTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIHxcbkBAIC0xNzc5LDcgJiM0MzsxNzkwLDcgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCgxIFx1MDAzY1x1MDAzYyBIV1RTVEFNUF9GSUxURVJfTk9ORSkgfFxuIFx0XHRcdCgxIFx1MDAzY1x1MDAzYyBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKSB8XG4gXHRcdFx0KDEgXHUwMDNjXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9BTEwpO1xuLVx0XHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IHB0cF9jbG9ja19pbmRleChwcml2LVx1MDAzZXB0cC5jbG9jayk7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IGluZGV4O1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTgyNiw1NSAmIzQzOzE4MzcsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyByYXZiX2V0aHRvb2xfb3BzID0ge1xuIH07XG4gXG4gc3RhdGljIGludCByYXZiX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi17XG4tXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi1cdTAwM2VpbmZvO1xuLVx0aW50IGVycm9yO1xuLVxuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCkge1xuLVx0XHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRcdC8qIFNldCBDU0VMIHZhbHVlICovXG4tXHRcdHJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7XG4tXHR9IGVsc2UgaWYgKGluZm8tXHUwMDNlY2NjX2dhYykge1xuLVx0XHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGVycm9yO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByYXZiX3NldF9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXHUwMDNlaW5mbztcbiBcbi1cdGlmICghKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VzZXRfY29uZmlnX21vZGUpXG4mIzQzO1x0XHRyZXR1cm4gaW5mby1cdTAwM2VwdHAtXHUwMDNlc2V0X2NvbmZpZ19tb2RlKG5kZXYpO1xuIFxuLVx0cmF2Yl93cml0ZShuZGV2LCBwcml2LVx1MDAzZWd0aV90aXYsIEdUSSk7XG4tXG4tXHQvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nICovXG4tXHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX0xUSSwgR0NDUl9MVEkpO1xuJiM0MztcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJhdmJfY29tcHV0ZV9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3N0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNsayAqY2xrKVxuIHtcbiBcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBuZGV2LVx1MDAzZWRldi5wYXJlbnQ7XG4gXHR1bnNpZ25lZCBsb25nIHJhdGU7XG4gXHR1NjQgaW5jO1xuIFxuLVx0aWYgKCEoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYykpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cF9yZWZfY2xrKVxuLVx0XHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlZ3B0cF9jbGspO1xuLVx0ZWxzZVxuLVx0XHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4gXHRpZiAoIXJhdGUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTE5NzQsMTEgJiM0MzsxOTU0LDEyIEBAIHN0YXRpYyBpbnQgcmF2Yl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFxuIFx0cmF2Yl9lbWFjX2luaXQobmRldik7XG4gXG4tXHRyYXZiX3NldF9ndGkobmRldik7XG4tXG4gXHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXHUwMDNlcGRldik7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X29wZW4pIHtcbiYjNDM7XHRcdGVycm9yID0gaW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9vcGVuKG5kZXYpO1xuJiM0MztcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRnb3RvIG91dF9wdHBfc3RvcDtcbiYjNDM7XHR9XG4gXG4gXHQvKiBQSFkgY29udHJvbCBzdGFydCAqL1xuIFx0ZXJyb3IgPSByYXZiX3BoeV9zdGFydChuZGV2KTtcbkBAIC0xOTkwLDkgJiM0MzsxOTcxLDYgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRyZXR1cm4gMDtcbiBcbiBvdXRfcHRwX3N0b3A6XG4tXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuIFx0cmF2Yl9zdG9wX2RtYShuZGV2KTtcbiBvdXRfc2V0X3Jlc2V0OlxuIFx0cmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfUkVTRVQpO1xuQEAgLTIwMzYsMTAgJiM0MzsyMDE0LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5kZXYpO1xuIFxuLVx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuLVxuIFx0LyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovXG4gXHRpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSkge1xuIFx0XHQvKiBJZiByYXZiX3N0b3BfZG1hKCkgZmFpbHMsIHRoZSBoYXJkd2FyZSBpcyBzdGlsbCBvcGVyYXRpbmdcbkBAIC0yMDcyLDEwICYjNDM7MjA0Niw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJhdmJfZW1hY19pbml0KG5kZXYpO1xuIFxuIG91dDpcbi1cdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cClcbi1cdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuLVxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZGV2KTtcbiBcbiBvdXRfdW5sb2NrOlxuQEAgLTIyMDgsNyAmIzQzOzIxNzgsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcmF2Yl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0ZGVzYy1cdTAwM2VkcHRyID0gY3B1X3RvX2xlMzIoZG1hX2FkZHIpO1xuIFxuIFx0LyogVFggdGltZXN0YW1wIHJlcXVpcmVkICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYykge1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXB0cCkge1xuIFx0XHRpZiAocSA9PSBSQVZCX05DKSB7XG4gXHRcdFx0dHNfc2tiID0ga21hbGxvY19vYmooKnRzX3NrYiwgR0ZQX0FUT01JQyk7XG4gXHRcdFx0aWYgKCF0c19za2IpIHtcbkBAIC0yMzkwLDggJiM0MzsyMzYwLDggQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0fVxuIFxuIFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYylcbi1cdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZW5kZXZfY2xvc2UpXG4mIzQzO1x0XHRpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X2Nsb3NlKG5kZXYpO1xuIFxuIFx0LyogU2V0IHRoZSBjb25maWcgbW9kZSB0byBzdG9wIHRoZSBBVkItRE1BQyYjMzk7cyBwcm9jZXNzZXMgKi9cbiBcdGlmIChyYXZiX3N0b3BfZG1hKG5kZXYpIFx1MDAzYyAwKVxuQEAgLTIzOTksNyAmIzQzOzIzNjksNyBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdFx0ICAgXCYjMzQ7ZGV2aWNlIHdpbGwgYmUgc3RvcHBlZCBhZnRlciBoL3cgcHJvY2Vzc2VzIGFyZSBkb25lLlxcblwmIzM0Oyk7XG4gXG4gXHQvKiBDbGVhciB0aGUgdGltZXN0YW1wIGxpc3QgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwKSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0c19za2IsIHRzX3NrYjIsIFx1MDAyNnByaXYtXHUwMDNldHNfc2tiX2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZ0c19za2ItXHUwMDNlbGlzdCk7XG4gXHRcdFx0a2ZyZWVfc2tiKHRzX3NrYi1cdTAwM2Vza2IpO1xuQEAgLTI2ODEsNiAmIzQzOzI2NTEsNDIgQEAgc3RhdGljIGludCByYXZiX21kaW9fcmVsZWFzZShzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYXZiX2NvbXB1dGVfZ3RpKG5kZXYsIHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4KHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIGdQVFAgQ2xvY2sgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXG4mIzQzO1x0cmF2Yl9tb2RpZnkobmRldiwgQ0NDLCBDQ0NfQ1NFTCwgQ0NDX0NTRUxfSFBCKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW4yX3B0cF9pbmZvID0ge1xuJiM0MztcdC5wcm9iZSA9IHJhdmJfZ2VuMl9wdHBfcHJvYmUsXG4mIzQzO1x0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCxcbiYjNDM7XHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUsXG4mIzQzO1x0LmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LFxuJiM0MztcdC5kbWFjX3N0b3AgPSByYXZiX3B0cF9zdG9wLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHtcbiBcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxuIFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxuQEAgLTI2OTksMTIgJiM0MzsyNzA1LDI2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuMl9od19pbmZvID0ge1xuIFx0XHRcdCAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSxcbiBcdC5yeF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IHJhdmJfZXhfcnhfZGVzYyksXG4gXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcbiYjNDM7XHQucHRwID0gXHUwMDI2cmF2Yl9nZW4yX3B0cF9pbmZvLFxuIFx0LmFsaWduZWRfdHggPSAxLFxuLVx0LmdwdHAgPSAxLFxuIFx0Lm5jX3F1ZXVlcyA9IDEsXG4gXHQubWFnaWNfcGt0ID0gMSxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0LyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xuJiM0MztcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjNfcHRwX2luZm8gPSB7XG4mIzQzO1x0LnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSxcbiYjNDM7XHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxuJiM0MztcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjNfcHRwX3NldF9jb25maWdfbW9kZSxcbiYjNDM7XHQubmRldl9vcGVuID0gcmF2Yl9wdHBfaW5pdCxcbiYjNDM7XHQubmRldl9jbG9zZSA9IHJhdmJfcHRwX3N0b3AsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuM19od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjcyMywxNSAmIzQzOzI3NDMsNjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4zX2h3X2luZm8gPSB7XG4gXHRcdFx0ICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLFxuIFx0LnJ4X2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmF2Yl9leF9yeF9kZXNjKSxcbiBcdC5kYmF0X2VudHJ5X251bSA9IDIyLFxuJiM0MztcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjNfcHRwX2luZm8sXG4gXHQuaW50ZXJuYWxfZGVsYXkgPSAxLFxuIFx0LnR4X2NvdW50ZXJzID0gMSxcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5pcnFfZW5fZGlzID0gMSxcbi1cdC5jY2NfZ2FjID0gMSxcbiBcdC5uY19xdWV1ZXMgPSAxLFxuIFx0Lm1hZ2ljX3BrdCA9IDEsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludCByYXZiX2dlbjRfcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZW9mX2dwdHAgPVxuJiM0MztcdFx0b2ZfcGFyc2VfcGhhbmRsZShwcml2LVx1MDAzZXBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O3B0cC10aW1lclwmIzM0OywgMCk7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZW9mX2dwdHApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHByaXYtXHUwMDNlb2ZfZ3B0cCkpIHtcbiYjNDM7XHRcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4mIzQzO1x0XHRwcml2LVx1MDAzZW9mX2dwdHAgPSBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXZiX2dlbjRfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHQvKiBJZiBubyBjbG9jaywgbWltaWMgcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUoKSBmYWlsIGFuZCByZXR1cm4gLTEgKi9cbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlb2ZfZ3B0cClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xuJiM0MztcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBTZXQgUFRQIHNvdXJjZSB0byBHUFRQIG1vZHVsZSwgb25seSBvcHRpb24gb24gR2VuNC4gKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VvZl9ncHRwKVxuJiM0MztcdFx0cmF2Yl9tb2RpZnkobmRldiwgQVBTUiwgQVBTUl9HUFRQVElNRVJfU09VUkNFIHwgQVBTUl9HUFRQQ0xPQ0ssXG4mIzQzO1x0XHRcdCAgICBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuNF9wdHBfaW5mbyA9IHtcbiYjNDM7XHQucHJvYmUgPSByYXZiX2dlbjRfcHRwX3Byb2JlLFxuJiM0MztcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgsXG4mIzQzO1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuNF9wdHBfc2V0X2NvbmZpZ19tb2RlLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjRfaHdfaW5mbyA9IHtcbiBcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxuIFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxuQEAgLTI3NTQsMTEgJiM0MzsyODI3LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0ge1xuIFx0LnR4X2NvdW50ZXJzID0gMSxcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5pcnFfZW5fZGlzID0gMSxcbi1cdC5jY2NfZ2FjID0gMSxcbiYjNDM7XHQucHRwID0gXHUwMDI2cmF2Yl9nZW40X3B0cF9pbmZvLFxuIFx0Lm5jX3F1ZXVlcyA9IDEsXG4gXHQubWFnaWNfcGt0ID0gMSxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IHJhdmJfcnp2Mm1fcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWdwdHBfY2xrID0gZGV2bV9jbGtfZ2V0KFx1MDAyNnByaXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O2dwdHBcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2VncHRwX2NsaykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZWdwdHBfY2xrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cdTAwM2VncHRwX2Nsayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9yenYybV9wdHBfaW5mbyA9IHtcbiYjNDM7XHQucHJvYmUgPSByYXZiX3J6djJtX3B0cF9wcm9iZSxcbiYjNDM7XHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxuJiM0MztcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcbiYjNDM7XHQuZG1hY19zdGFydCA9IHJhdmJfcHRwX2luaXQsXG4mIzQzO1x0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHtcbiBcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxuIFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxuQEAgLTI3NzksOCAmIzQzOzI4NzEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX3J6djJtX2h3X2luZm8gPSB7XG4gXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5lcnJfbWdtdF9pcnFzID0gMSxcbi1cdC5ncHRwID0gMSxcbi1cdC5ncHRwX3JlZl9jbGsgPSAxLFxuJiM0MztcdC5wdHAgPSBcdTAwMjZyYXZiX3J6djJtX3B0cF9pbmZvLFxuIFx0Lm5jX3F1ZXVlcyA9IDEsXG4gXHQubWFnaWNfcGt0ID0gMSxcbiB9O1xuQEAgLTI5NzAsMTIgJiM0MzszMDYxLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwX3JlZl9jbGspIHtcbi1cdFx0cHJpdi1cdTAwM2VncHRwX2NsayA9IGRldm1fY2xrX2dldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Z3B0cFwmIzM0Oyk7XG4tXHRcdGlmIChJU19FUlIocHJpdi1cdTAwM2VncHRwX2NsaykpIHtcbi1cdFx0XHRlcnJvciA9IFBUUl9FUlIocHJpdi1cdTAwM2VncHRwX2Nsayk7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2Vwcm9iZSkge1xuJiM0MztcdFx0ZXJyb3IgPSBpbmZvLVx1MDAzZXB0cC1cdTAwM2Vwcm9iZShuZGV2KTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiBcdFx0XHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XG4tXHRcdH1cbiBcdH1cbiBcbiBcdHByaXYtXHUwMDNlcmVmY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtyZWZjbGtcJiMzNDspO1xuQEAgLTMwMjgsMTAgJiM0MzszMTE3LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZyYXZiX25ldGRldl9vcHM7XG4gXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2cmF2Yl9ldGh0b29sX29wcztcbiBcbi1cdGVycm9yID0gcmF2Yl9jb21wdXRlX2d0aShuZGV2KTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfcnBtX3B1dDtcbi1cbiBcdHJhdmJfcGFyc2VfZGVsYXlfbW9kZShucCwgbmRldik7XG4gXG4gXHQvKiBBbGxvY2F0ZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyB0YWJsZSAqL1xuQEAgLTMxNTQsNiAmIzQzOzMyMzksNyBAQCBzdGF0aWMgdm9pZCByYXZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cG1fcnVudGltZV9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcdHBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTtcbiBcdGNsa191bnByZXBhcmUocHJpdi1cdTAwM2VyZWZjbGspO1xuJiM0MztcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4gXHRyZXNldF9jb250cm9sX2Fzc2VydChwcml2LVx1MDAzZXJzdGMpO1xuIFx0ZnJlZV9uZXRkZXYobmRldik7XG4gXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbkBAIC0zMTc5LDkgJiM0MzszMjY1LDYgQEAgc3RhdGljIGludCByYXZiX3dvbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdC8qIEVuYWJsZSBNYWdpY1BhY2tldCAqL1xuIFx0cmF2Yl9tb2RpZnkobmRldiwgRUNNUiwgRUNNUl9NUERFLCBFQ01SX01QREUpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuLVxuIFx0cmV0dXJuIGVuYWJsZV9pcnFfd2FrZShwcml2LVx1MDAzZWVtYWNfaXJxKTtcbiB9XG4gXG5AQCAtMzIwMSw5ICYjNDM7MzI4NCw2IEBAIHN0YXRpYyBpbnQgcmF2Yl93b2xfcmVzdG9yZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXHUwMDNlcGRldik7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2VuY19xdWV1ZXMpXG4gXHRcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaVtSQVZCX05DXSk7XG4gXHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGlbUkFWQl9CRV0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xuaW5kZXggMjI2YzZjMGFiOTQ1Yi4uNDczYTJhZWRiNzQ1ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXG5AQCAtMzEyLDIyICYjNDM7MzEyLDM5IEBAIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cmF2Yl93cml0ZShuZGV2LCB+KGdpcyB8IEdJU19SRVNFUlZFRCksIEdJUyk7XG4gfVxuIFxuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7aW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdHByaXYtXHUwMDNlcHRwLmluZm8gPSByYXZiX3B0cF9pbmZvO1xuIFxuLVx0cHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQgPSByYXZiX3JlYWQobmRldiwgR1RJKTtcbiYjNDM7XHRwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHByaXYtXHUwMDNlZ3RpX3RpdjtcbiBcdHByaXYtXHUwMDNlcHRwLmN1cnJlbnRfYWRkZW5kID0gcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQ7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGdQVFAgVGltZXIgSW5jcmVtZW50IFZhbHVlLiAqL1xuJiM0MztcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQsIEdUSSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlcXVlc3QgR1RJIGxvYWRpbmcuICovXG4mIzQzO1x0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgR0lUIGxvYWRpbmcgdG8gY29tcGxldGUuICovXG4gXHRyYXZiX3dhaXQobmRldiwgR0NDUiwgR0NDUl9UQ1IsIEdDQ1JfVENSX05PUkVRKTtcbiYjNDM7XG4gXHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX1RDU1MsIEdDQ1JfVENTU19BREpHUFRQKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cC5pbmZvLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0cHJpdi1cdTAwM2VwdHAuY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXHUwMDI2cHJpdi1cdTAwM2VwdHAuaW5mbywgXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXB0cC5jbG9jaykpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VwdHAuY2xvY2sgPSBOVUxMO1xuJiM0MztcdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbkBAIC0zMzcsNSAmIzQzOzM1NCw2IEBAIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHJhdmJfd3JpdGUobmRldiwgMCwgR0lDKTtcbiBcdHJhdmJfd3JpdGUobmRldiwgMCwgR0lTKTtcbiBcbi1cdHB0cF9jbG9ja191bnJlZ2lzdGVyKHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VwdHAuY2xvY2spXG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcihwcml2LVx1MDAzZXB0cC5jbG9jayk7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgZ1BUUCBzdXBwb3J0IGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAocmF2YikgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgR2VuNCBnUFRQIGFuZCBpbnRyb2R1Y2luZyBhIHN0cnVjdCBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgY2FsbGJhY2tzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgUmVuZXNhcyBSLUNhciBTb0NzLiBUaGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgdG8gcHJvYmUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRjYzcwNWZmZThlYmJmNjY5Yzc5MzJlNjQyYTYxZDUwYTUxYzA4MDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAxNjo0MTozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwKaW5kZXggMWUwMGVmNWIzYWNkYS4uZmFkMDAyNDkyNDIxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwKQEAgLTk3LDYgJiM0Mzs5Nyw4IEBAIHByb3BlcnRpZXM6CiAKICAgcGh5LWhhbmRsZTogdHJ1ZQogCiYjNDM7ICBwdHAtdGltZXI6IHRydWUKJiM0MzsKICAgJiMzOTsjYWRkcmVzcy1jZWxscyYjMzk7OgogICAgIGRlc2NyaXB0aW9uOiBOdW1iZXIgb2YgYWRkcmVzcyBjZWxscyBmb3IgdGhlIE1ESU8gYnVzLgogICAgIGNvbnN0OiAxCkBAIC0zMDUsNiAmIzQzOzMwNywxNSBAQCBhbGxPZjoKICAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgICAtIGNvbnN0OiBmY2sKICAgICAgICAgICAgICAgLSBjb25zdDogcmVmY2xrCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIG5vdDoKJiM0MzsgICAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgICAgY29udGFpbnM6CiYjNDM7ICAgICAgICAgICAgICBjb25zdDogcmVuZXNhcyxldGhlcmF2Yi1yY2FyLWdlbjQKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgcHRwLXRpbWVyOiBmYWxzZQogCiBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaAppbmRleCA1ZTU2ZWM5YjEwMTNhLi40YzhkYzAyMDIyZTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaApAQCAtMjQ5LDYgJiM0MzsyNDksOCBAQCBlbnVtIEFQU1JfQklUIHsKIAlBUFNSX1JETQk9IDB4MDAwMDIwMDAsCiAJQVBTUl9URE0JPSAweDAwMDA0MDAwLAogCUFQU1JfTUlJU0VMRUNUCT0gMHgwMTAwMDAwMCwJLyogUi1DYXIgVjRNIG9ubHkgKi8KJiM0MzsJQVBTUl9HUFRQVElNRVJfU09VUkNFID0gQklUKDI1KSwgLyogR2VuNCAqLwomIzQzOwlBUFNSX0dQVFBDTE9DSwk9IEJJVCgyOSksCS8qIEdlbjQgKi8KIH07CiAKIC8qIFJDUiAqLwpAQCAtMTAzNCw2ICYjNDM7MTAzNiwzMSBAQCBzdHJ1Y3QgcmF2Yl9wdHAgewogCXN0cnVjdCByYXZiX3B0cF9wZXJvdXQgcGVyb3V0W05fUEVSX09VVF07CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHJhdmJfZ3B0cF9pbmZvIC0gUGxhdGZvcm0gc3BlY2lmaWMgZ1BUUCBiZWhhdmlvcgomIzQzOyAqCiYjNDM7ICogRWFjaCBnZW5lcmF0aW9uIG9mIFJBVkIgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgYmVoYXZpb3JzIHdoZW4gaW50ZXJhY3RpbmcKJiM0MzsgKiB3aXRoIHRoZSBnUFRQIGNsb2NrLiBUaGlzIHN0cnVjdCBwcm92aWRlcyB0aGUgY2FsbGJhY2tzIHRvIGJlIGNhbGxlZCBhdAomIzQzOyAqIGNyaXRpY2FsIHBvaW50cyBpbiB0aGUgUkFWQiBkcml2ZXIuCiYjNDM7ICoKJiM0MzsgKiBAcHJvYmU6CQlQcm9iZSB0aGUgZ1BUUCBjbG9jawomIzQzOyAqIEBjbG9ja19pbmRleDoJR2V0IHRoZSBQVFAgY2xvY2sgaW5kZXgsIGlmIGFueQomIzQzOyAqIEBzZXRfY29uZmlnX21vZGU6CUVudGVyIGNvbmZpZyBtb2RlCiYjNDM7ICogQGRtYWNfc3RhcnQ6CQlDYWxsZWQgd2hlbiB0aGUgRE1BQyBzdGFydHMKJiM0MzsgKiBAZG1hY19zdG9wOgkJQ2FsbGVkIHdoZW4gdGhlIERNQUMgc3RvcHMKJiM0MzsgKiBAbmRldl9vcGVuOgkJQ2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgb3BlbmVkCiYjNDM7ICogQG5kZXZfY2xvc2U6CQlDYWxsZWQgd2hlbiB0aGUgbmRldiBpcyBjbG9zZWQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gewomIzQzOwlpbnQgKCpwcm9iZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzOwlpbnQgKCpjbG9ja19pbmRleCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzOwlpbnQgKCpzZXRfY29uZmlnX21vZGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJaW50ICgqZG1hY19zdGFydCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzOwl2b2lkICgqZG1hY19zdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiYjNDM7CWludCAoKm5kZXZfb3Blbikoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzOwl2b2lkICgqbmRldl9jbG9zZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgcmF2Yl9od19pbmZvIHsKIAlpbnQgKCpyZWNlaXZlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IGJ1ZGdldCwgaW50IHEpOwogCXZvaWQgKCpzZXRfcmF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwpAQCAtMTA1Miw2ICYjNDM7MTA3OSw3IEBAIHN0cnVjdCByYXZiX2h3X2luZm8gewogCXUzMiByeF9idWZmZXJfc2l6ZTsKIAl1MzIgcnhfZGVzY19zaXplOwogCXUzMiBkYmF0X2VudHJ5X251bTsKJiM0MzsJY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvICpwdHA7IC8qIENhbGxiYWNrcyB0byBoYW5kbGUgZ1BUUCBpbnRlcmFjdGlvbnMuICovCiAJdW5zaWduZWQgYWxpZ25lZF90eDogMTsKIAl1bnNpZ25lZCBjb2FsZXNjZV9pcnFzOjE7CS8qIE5lZWRzIHNvZnR3YXJlIElSUSBjb2FsZXNjaW5nICovCiAKQEAgLTEwNjIsOSAmIzQzOzEwOTAsNiBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHsKIAl1bnNpZ25lZCBtdWx0aV9pcnFzOjE7CQkvKiBBVkItRE1BQyBhbmQgRS1NQUMgaGFzIG11bHRpcGxlIGlycXMgKi8KIAl1bnNpZ25lZCBpcnFfZW5fZGlzOjE7CQkvKiBIYXMgc2VwYXJhdGUgaXJxIGVuYWJsZSBhbmQgZGlzYWJsZSByZWdzICovCiAJdW5zaWduZWQgZXJyX21nbXRfaXJxczoxOwkvKiBMaW5lMSAoRXJyKSBhbmQgTGluZTIgKE1nbXQpIGlycXMgYXJlIHNlcGFyYXRlICovCi0JdW5zaWduZWQgZ3B0cDoxOwkJLyogQVZCLURNQUMgaGFzIGdQVFAgc3VwcG9ydCAqLwotCXVuc2lnbmVkIGNjY19nYWM6MTsJCS8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgYWN0aXZlIGluIGNvbmZpZyBtb2RlICovCi0JdW5zaWduZWQgZ3B0cF9yZWZfY2xrOjE7CS8qIGdQVFAgaGFzIHNlcGFyYXRlIHJlZmVyZW5jZSBjbG9jayAqLwogCXVuc2lnbmVkIG5jX3F1ZXVlczoxOwkJLyogQVZCLURNQUMgaGFzIFJYIGFuZCBUWCBOQyBxdWV1ZXMgKi8KIAl1bnNpZ25lZCBtYWdpY19wa3Q6MTsJCS8qIEUtTUFDIHN1cHBvcnRzIG1hZ2ljIHBhY2tldCBkZXRlY3Rpb24gKi8KIAl1bnNpZ25lZCBoYWxmX2R1cGxleDoxOwkJLyogRS1NQUMgc3VwcG9ydHMgaGFsZiBkdXBsZXggbW9kZSAqLwpAQCAtMTEwOSw2ICYjNDM7MTEzNCw3IEBAIHN0cnVjdCByYXZiX3ByaXZhdGUgewogCXN0cnVjdCBsaXN0X2hlYWQgdHNfc2tiX2xpc3Q7CiAJdTMyIHRzX3NrYl90YWc7CiAJc3RydWN0IHJhdmJfcHRwIHB0cDsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpvZl9ncHRwOwkvKiBSZWZlcmVuY2UgdG8gZXh0ZXJuYWwgZ1BUUCBjbG9jaywgaWYgYW55LiAqLwogCXNwaW5sb2NrX3QgbG9jazsJCS8qIFJlZ2lzdGVyIGFjY2VzcyBsb2NrICovCiAJdTMyIGN1cl9yeFtOVU1fUlhfUVVFVUVdOwkvKiBDb25zdW1lciByaW5nIGluZGljZXMgKi8KIAl1MzIgZGlydHlfcnhbTlVNX1JYX1FVRVVFXTsJLyogUHJvZHVjZXIgcmluZyBpbmRpY2VzICovCkBAIC0xMTYwLDcgJiM0MzsxMTg2LDcgQEAgdm9pZCByYXZiX21vZGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSByYXZiX3JlZyByZWcsIHUzMiBjbGVhciwKIGludCByYXZiX3dhaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKIAogdm9pZCByYXZiX3B0cF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwotdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKJiM0MztpbnQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogCiAjZW5kaWYJLyogI2lmbmRlZiBfX1JBVkJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYwppbmRleCA1Zjg4NzMzMDk0ZDBmLi4zMDE3MGU5MmQzZDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMKQEAgLTcwNyw3ICYjNDM7NzA3LDE1IEBAIHN0YXRpYyBpbnQgcmF2Yl9kbWFjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCXJldHVybiBlcnJvcjsKIAogCS8qIFNldHRpbmcgdGhlIGNvbnRyb2wgd2lsbCBzdGFydCB0aGUgQVZCLURNQUMgcHJvY2Vzcy4gKi8KLQlyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfT1BFUkFUSU9OKTsKJiM0MzsJZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19PUEVSQVRJT04pOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqLwomIzQzOwlpZiAoaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaW5mby0mZ3Q7cHRwLSZndDtkbWFjX3N0YXJ0KQomIzQzOwkJcmV0dXJuIGluZm8tJmd0O3B0cC0mZ3Q7ZG1hY19zdGFydChuZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHJhdmJfZ2V0X3R4X3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKQEAgLTExMTUsNiAmIzQzOzExMjMsMTAgQEAgc3RhdGljIGludCByYXZiX3N0b3BfZG1hKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O2ZhaWxlZCB0byBzdG9wIEFYSSBCVVNcbiYjMzQ7KTsKIAl9CiAKJiM0MzsJLyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovCiYjNDM7CWlmIChpbmZvLSZndDtwdHAgJmFtcDsmYW1wOyBpbmZvLSZndDtwdHAtJmd0O2RtYWNfc3RvcCkKJiM0MzsJCWluZm8tJmd0O3B0cC0mZ3Q7ZG1hY19zdG9wKG5kZXYpOwomIzQzOwogCS8qIFN0b3AgQVZCLURNQUMgcHJvY2VzcyAqLwogCXJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpOwogfQpAQCAtMTcxOSw5ICYjNDM7MTczMSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKIAkJbmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTsKLQkJLyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovCi0JCWlmIChpbmZvLSZndDtncHRwKQotCQkJcmF2Yl9wdHBfc3RvcChuZGV2KTsKJiM0MzsKIAkJLyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovCiAJCWVycm9yID0gcmF2Yl9zdG9wX2RtYShuZGV2KTsKIAkJaWYgKGVycm9yKSB7CkBAIC0xNzUyLDEwICYjNDM7MTc2Miw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCiAJCXJhdmJfZW1hY19pbml0KG5kZXYpOwogCi0JCS8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqLwotCQlpZiAoaW5mby0mZ3Q7Z3B0cCkKLQkJCXJhdmJfcHRwX2luaXQobmRldiwgcHJpdi0mZ3Q7cGRldik7Ci0KIAkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKIAl9CiAKQEAgLTE3NjcsOCAmIzQzOzE3NzMsMTMgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogewogCXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAljb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICpod19pbmZvID0gcHJpdi0mZ3Q7aW5mbzsKJiM0MzsJaW50IGluZGV4ID0gLTE7CiYjNDM7CiYjNDM7CWlmIChod19pbmZvLSZndDtwdHAgJmFtcDsmYW1wOyBod19pbmZvLSZndDtwdHAtJmd0O2Nsb2NrX2luZGV4KQomIzQzOwkJaW5kZXggPSBod19pbmZvLSZndDtwdHAtJmd0O2Nsb2NrX2luZGV4KG5kZXYpOwogCi0JaWYgKGh3X2luZm8tJmd0O2dwdHAgfHwgaHdfaW5mby0mZ3Q7Y2NjX2dhYykgewomIzQzOwkvKiBPbmx5IGFkdmVydGlzZSBwdHAgY2xvY2sgaWYgcHJlc2VudC4gKi8KJiM0MzsJaWYgKGluZGV4ICZndDs9IDApIHsKIAkJaW5mby0mZ3Q7c29fdGltZXN0YW1waW5nID0KIAkJCVNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfAogCQkJU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8CkBAIC0xNzc5LDcgJiM0MzsxNzkwLDcgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJKDEgJmx0OyZsdDsgSFdUU1RBTVBfRklMVEVSX05PTkUpIHwKIAkJCSgxICZsdDsmbHQ7IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQpIHwKIAkJCSgxICZsdDsmbHQ7IEhXVFNUQU1QX0ZJTFRFUl9BTEwpOwotCQlpbmZvLSZndDtwaGNfaW5kZXggPSBwdHBfY2xvY2tfaW5kZXgocHJpdi0mZ3Q7cHRwLmNsb2NrKTsKJiM0MzsJCWluZm8tJmd0O3BoY19pbmRleCA9IGluZGV4OwogCX0KIAogCXJldHVybiAwOwpAQCAtMTgyNiw1NSAmIzQzOzE4MzcsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyByYXZiX2V0aHRvb2xfb3BzID0gewogfTsKIAogc3RhdGljIGludCByYXZiX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKLXsKLQlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtJmd0O2luZm87Ci0JaW50IGVycm9yOwotCi0JaWYgKGluZm8tJmd0O2dwdHApIHsKLQkJZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCS8qIFNldCBDU0VMIHZhbHVlICovCi0JCXJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7Ci0JfSBlbHNlIGlmIChpbmZvLSZndDtjY2NfZ2FjKSB7Ci0JCWVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7Ci0JfSBlbHNlIHsKLQkJZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpOwotCX0KLQotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIHZvaWQgcmF2Yl9zZXRfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAljb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi0mZ3Q7aW5mbzsKIAotCWlmICghKGluZm8tJmd0O2dwdHAgfHwgaW5mby0mZ3Q7Y2NjX2dhYykpCi0JCXJldHVybjsKJiM0MzsJaWYgKGluZm8tJmd0O3B0cCAmYW1wOyZhbXA7IGluZm8tJmd0O3B0cC0mZ3Q7c2V0X2NvbmZpZ19tb2RlKQomIzQzOwkJcmV0dXJuIGluZm8tJmd0O3B0cC0mZ3Q7c2V0X2NvbmZpZ19tb2RlKG5kZXYpOwogCi0JcmF2Yl93cml0ZShuZGV2LCBwcml2LSZndDtndGlfdGl2LCBHVEkpOwotCi0JLyogUmVxdWVzdCBHVEkgbG9hZGluZyAqLwotCXJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfTFRJLCBHQ0NSX0xUSSk7CiYjNDM7CXJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpOwogfQogCi1zdGF0aWMgaW50IHJhdmJfY29tcHV0ZV9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7c3RhdGljIGludCByYXZiX2NvbXB1dGVfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2xrICpjbGspCiB7CiAJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwotCWNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LSZndDtpbmZvOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IG5kZXYtJmd0O2Rldi5wYXJlbnQ7CiAJdW5zaWduZWQgbG9uZyByYXRlOwogCXU2NCBpbmM7CiAKLQlpZiAoIShpbmZvLSZndDtncHRwIHx8IGluZm8tJmd0O2NjY19nYWMpKQotCQlyZXR1cm4gMDsKLQotCWlmIChpbmZvLSZndDtncHRwX3JlZl9jbGspCi0JCXJhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi0mZ3Q7Z3B0cF9jbGspOwotCWVsc2UKLQkJcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LSZndDtjbGspOwomIzQzOwlyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CiAJaWYgKCFyYXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTk3NCwxMSAmIzQzOzE5NTQsMTIgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAKIAlyYXZiX2VtYWNfaW5pdChuZGV2KTsKIAotCXJhdmJfc2V0X2d0aShuZGV2KTsKLQogCS8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqLwotCWlmIChpbmZvLSZndDtncHRwIHx8IGluZm8tJmd0O2NjY19nYWMpCi0JCXJhdmJfcHRwX2luaXQobmRldiwgcHJpdi0mZ3Q7cGRldik7CiYjNDM7CWlmIChpbmZvLSZndDtwdHAgJmFtcDsmYW1wOyBpbmZvLSZndDtwdHAtJmd0O25kZXZfb3BlbikgewomIzQzOwkJZXJyb3IgPSBpbmZvLSZndDtwdHAtJmd0O25kZXZfb3BlbihuZGV2KTsKJiM0MzsJCWlmIChlcnJvcikKJiM0MzsJCQlnb3RvIG91dF9wdHBfc3RvcDsKJiM0MzsJfQogCiAJLyogUEhZIGNvbnRyb2wgc3RhcnQgKi8KIAllcnJvciA9IHJhdmJfcGh5X3N0YXJ0KG5kZXYpOwpAQCAtMTk5MCw5ICYjNDM7MTk3MSw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCXJldHVybiAwOwogCiBvdXRfcHRwX3N0b3A6Ci0JLyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovCi0JaWYgKGluZm8tJmd0O2dwdHAgfHwgaW5mby0mZ3Q7Y2NjX2dhYykKLQkJcmF2Yl9wdHBfc3RvcChuZGV2KTsKIAlyYXZiX3N0b3BfZG1hKG5kZXYpOwogb3V0X3NldF9yZXNldDoKIAlyYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19SRVNFVCk7CkBAIC0yMDM2LDEwICYjNDM7MjAxNCw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZGV2KTsKIAotCS8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqLwotCWlmIChpbmZvLSZndDtncHRwKQotCQlyYXZiX3B0cF9zdG9wKG5kZXYpOwotCiAJLyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovCiAJaWYgKHJhdmJfc3RvcF9kbWEobmRldikpIHsKIAkJLyogSWYgcmF2Yl9zdG9wX2RtYSgpIGZhaWxzLCB0aGUgaGFyZHdhcmUgaXMgc3RpbGwgb3BlcmF0aW5nCkBAIC0yMDcyLDEwICYjNDM7MjA0Niw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlyYXZiX2VtYWNfaW5pdChuZGV2KTsKIAogb3V0OgotCS8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqLwotCWlmIChpbmZvLSZndDtncHRwKQotCQlyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtJmd0O3BkZXYpOwotCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZGV2KTsKIAogb3V0X3VubG9jazoKQEAgLTIyMDgsNyAmIzQzOzIxNzgsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcmF2Yl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCWRlc2MtJmd0O2RwdHIgPSBjcHVfdG9fbGUzMihkbWFfYWRkcik7CiAKIAkvKiBUWCB0aW1lc3RhbXAgcmVxdWlyZWQgKi8KLQlpZiAoaW5mby0mZ3Q7Z3B0cCB8fCBpbmZvLSZndDtjY2NfZ2FjKSB7CiYjNDM7CWlmIChpbmZvLSZndDtwdHApIHsKIAkJaWYgKHEgPT0gUkFWQl9OQykgewogCQkJdHNfc2tiID0ga21hbGxvY19vYmooKnRzX3NrYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoIXRzX3NrYikgewpAQCAtMjM5MCw4ICYjNDM7MjM2MCw4IEBAIHN0YXRpYyBpbnQgcmF2Yl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAl9CiAKIAkvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi8KLQlpZiAoaW5mby0mZ3Q7Z3B0cCB8fCBpbmZvLSZndDtjY2NfZ2FjKQotCQlyYXZiX3B0cF9zdG9wKG5kZXYpOwomIzQzOwlpZiAoaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaW5mby0mZ3Q7cHRwLSZndDtuZGV2X2Nsb3NlKQomIzQzOwkJaW5mby0mZ3Q7cHRwLSZndDtuZGV2X2Nsb3NlKG5kZXYpOwogCiAJLyogU2V0IHRoZSBjb25maWcgbW9kZSB0byBzdG9wIHRoZSBBVkItRE1BQyYjMzk7cyBwcm9jZXNzZXMgKi8KIAlpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSAmbHQ7IDApCkBAIC0yMzk5LDcgJiM0MzsyMzY5LDcgQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQkJICAgJiMzNDtkZXZpY2Ugd2lsbCBiZSBzdG9wcGVkIGFmdGVyIGgvdyBwcm9jZXNzZXMgYXJlIGRvbmUuXG4mIzM0Oyk7CiAKIAkvKiBDbGVhciB0aGUgdGltZXN0YW1wIGxpc3QgKi8KLQlpZiAoaW5mby0mZ3Q7Z3B0cCB8fCBpbmZvLSZndDtjY2NfZ2FjKSB7CiYjNDM7CWlmIChpbmZvLSZndDtwdHApIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRzX3NrYiwgdHNfc2tiMiwgJmFtcDtwcml2LSZndDt0c19za2JfbGlzdCwgbGlzdCkgewogCQkJbGlzdF9kZWwoJmFtcDt0c19za2ItJmd0O2xpc3QpOwogCQkJa2ZyZWVfc2tiKHRzX3NrYi0mZ3Q7c2tiKTsKQEAgLTI2ODEsNiAmIzQzOzI2NTEsNDIgQEAgc3RhdGljIGludCByYXZiX21kaW9fcmVsZWFzZShzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCByYXZiX2dlbjJfcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmF2Yl9jb21wdXRlX2d0aShuZGV2LCBwcml2LSZndDtjbGspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CiYjNDM7CXJldHVybiBwdHBfY2xvY2tfaW5kZXgocHJpdi0mZ3Q7cHRwLmNsb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBnUFRQIENsb2NrIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqLwomIzQzOwlyYXZiX21vZGlmeShuZGV2LCBDQ0MsIENDQ19DU0VMLCBDQ0NfQ1NFTF9IUEIpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjJfcHRwX2luZm8gPSB7CiYjNDM7CS5wcm9iZSA9IHJhdmJfZ2VuMl9wdHBfcHJvYmUsCiYjNDM7CS5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsCiYjNDM7CS5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSwKJiM0MzsJLmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LAomIzQzOwkuZG1hY19zdG9wID0gcmF2Yl9wdHBfc3RvcCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4yX2h3X2luZm8gPSB7CiAJLnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsCiAJLnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLApAQCAtMjY5OSwxMiAmIzQzOzI3MDUsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4yX2h3X2luZm8gPSB7CiAJCQkgIFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSksCiAJLnJ4X2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmF2Yl9leF9yeF9kZXNjKSwKIAkuZGJhdF9lbnRyeV9udW0gPSAyMiwKJiM0MzsJLnB0cCA9ICZhbXA7cmF2Yl9nZW4yX3B0cF9pbmZvLAogCS5hbGlnbmVkX3R4ID0gMSwKLQkuZ3B0cCA9IDEsCiAJLm5jX3F1ZXVlcyA9IDEsCiAJLm1hZ2ljX3BrdCA9IDEsCiB9OwogCiYjNDM7c3RhdGljIGludCByYXZiX2dlbjNfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CS8qIEVuYWJsZSBnUFRQIENsb2NrIGFuZCBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi8KJiM0MzsJcmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuM19wdHBfaW5mbyA9IHsKJiM0MzsJLnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSwKJiM0MzsJLmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCwKJiM0MzsJLnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlLAomIzQzOwkubmRldl9vcGVuID0gcmF2Yl9wdHBfaW5pdCwKJiM0MzsJLm5kZXZfY2xvc2UgPSByYXZiX3B0cF9zdG9wLAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHsKIAkucmVjZWl2ZSA9IHJhdmJfcnhfcmNhciwKIAkuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsCkBAIC0yNzIzLDE1ICYjNDM7Mjc0Myw2OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHsKIAkJCSAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSwKIAkucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLAogCS5kYmF0X2VudHJ5X251bSA9IDIyLAomIzQzOwkucHRwID0gJmFtcDtyYXZiX2dlbjNfcHRwX2luZm8sCiAJLmludGVybmFsX2RlbGF5ID0gMSwKIAkudHhfY291bnRlcnMgPSAxLAogCS5tdWx0aV9pcnFzID0gMSwKIAkuaXJxX2VuX2RpcyA9IDEsCi0JLmNjY19nYWMgPSAxLAogCS5uY19xdWV1ZXMgPSAxLAogCS5tYWdpY19wa3QgPSAxLAogfTsKIAomIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7b2ZfZ3B0cCA9CiYjNDM7CQlvZl9wYXJzZV9waGFuZGxlKHByaXYtJmd0O3BkZXYtJmd0O2Rldi5vZl9ub2RlLCAmIzM0O3B0cC10aW1lciYjMzQ7LCAwKTsKJiM0MzsJaWYgKCFwcml2LSZndDtvZl9ncHRwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwcml2LSZndDtvZl9ncHRwKSkgewomIzQzOwkJb2Zfbm9kZV9wdXQocHJpdi0mZ3Q7b2ZfZ3B0cCk7CiYjNDM7CQlwcml2LSZndDtvZl9ncHRwID0gTlVMTDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CiYjNDM7CS8qIElmIG5vIGNsb2NrLCBtaW1pYyBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZSgpIGZhaWwgYW5kIHJldHVybiAtMSAqLwomIzQzOwlpZiAoIXByaXYtJmd0O29mX2dwdHApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZShwcml2LSZndDtvZl9ncHRwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXZiX2dlbjRfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqLwomIzQzOwlyZXQgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIFNldCBQVFAgc291cmNlIHRvIEdQVFAgbW9kdWxlLCBvbmx5IG9wdGlvbiBvbiBHZW40LiAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7b2ZfZ3B0cCkKJiM0MzsJCXJhdmJfbW9kaWZ5KG5kZXYsIEFQU1IsIEFQU1JfR1BUUFRJTUVSX1NPVVJDRSB8IEFQU1JfR1BUUENMT0NLLAomIzQzOwkJCSAgICBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuNF9wdHBfaW5mbyA9IHsKJiM0MzsJLnByb2JlID0gcmF2Yl9nZW40X3B0cF9wcm9iZSwKJiM0MzsJLmNsb2NrX2luZGV4ID0gcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleCwKJiM0MzsJLnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuNF9wdHBfc2V0X2NvbmZpZ19tb2RlLAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjRfaHdfaW5mbyA9IHsKIAkucmVjZWl2ZSA9IHJhdmJfcnhfcmNhciwKIAkuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsCkBAIC0yNzU0LDExICYjNDM7MjgyNywzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjRfaHdfaW5mbyA9IHsKIAkudHhfY291bnRlcnMgPSAxLAogCS5tdWx0aV9pcnFzID0gMSwKIAkuaXJxX2VuX2RpcyA9IDEsCi0JLmNjY19nYWMgPSAxLAomIzQzOwkucHRwID0gJmFtcDtyYXZiX2dlbjRfcHRwX2luZm8sCiAJLm5jX3F1ZXVlcyA9IDEsCiAJLm1hZ2ljX3BrdCA9IDEsCiB9OwogCiYjNDM7c3RhdGljIGludCByYXZiX3J6djJtX3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7Z3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoJmFtcDtwcml2LSZndDtwZGV2LSZndDtkZXYsICYjMzQ7Z3B0cCYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtncHRwX2NsaykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihwcml2LSZndDtncHRwX2Nsayk7CiYjNDM7CiYjNDM7CXJldHVybiByYXZiX2NvbXB1dGVfZ3RpKG5kZXYsIHByaXYtJmd0O2dwdHBfY2xrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX3J6djJtX3B0cF9pbmZvID0gewomIzQzOwkucHJvYmUgPSByYXZiX3J6djJtX3B0cF9wcm9iZSwKJiM0MzsJLmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCwKJiM0MzsJLnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlLAomIzQzOwkuZG1hY19zdGFydCA9IHJhdmJfcHRwX2luaXQsCiYjNDM7CS5kbWFjX3N0b3AgPSByYXZiX3B0cF9zdG9wLAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX3J6djJtX2h3X2luZm8gPSB7CiAJLnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsCiAJLnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLApAQCAtMjc3OSw4ICYjNDM7Mjg3MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHsKIAkuZGJhdF9lbnRyeV9udW0gPSAyMiwKIAkubXVsdGlfaXJxcyA9IDEsCiAJLmVycl9tZ210X2lycXMgPSAxLAotCS5ncHRwID0gMSwKLQkuZ3B0cF9yZWZfY2xrID0gMSwKJiM0MzsJLnB0cCA9ICZhbXA7cmF2Yl9yenYybV9wdHBfaW5mbywKIAkubmNfcXVldWVzID0gMSwKIAkubWFnaWNfcGt0ID0gMSwKIH07CkBAIC0yOTcwLDEyICYjNDM7MzA2MSwxMCBAQCBzdGF0aWMgaW50IHJhdmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJZ290byBvdXRfcmVzZXRfYXNzZXJ0OwogCX0KIAotCWlmIChpbmZvLSZndDtncHRwX3JlZl9jbGspIHsKLQkJcHJpdi0mZ3Q7Z3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7Z3B0cCYjMzQ7KTsKLQkJaWYgKElTX0VSUihwcml2LSZndDtncHRwX2NsaykpIHsKLQkJCWVycm9yID0gUFRSX0VSUihwcml2LSZndDtncHRwX2Nsayk7CiYjNDM7CWlmIChpbmZvLSZndDtwdHAgJmFtcDsmYW1wOyBpbmZvLSZndDtwdHAtJmd0O3Byb2JlKSB7CiYjNDM7CQllcnJvciA9IGluZm8tJmd0O3B0cC0mZ3Q7cHJvYmUobmRldik7CiYjNDM7CQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dF9yZXNldF9hc3NlcnQ7Ci0JCX0KIAl9CiAKIAlwcml2LSZndDtyZWZjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWwoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7cmVmY2xrJiMzNDspOwpAQCAtMzAyOCwxMCAmIzQzOzMxMTcsNiBAQCBzdGF0aWMgaW50IHJhdmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAluZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDtyYXZiX25ldGRldl9vcHM7CiAJbmRldi0mZ3Q7ZXRodG9vbF9vcHMgPSAmYW1wO3JhdmJfZXRodG9vbF9vcHM7CiAKLQllcnJvciA9IHJhdmJfY29tcHV0ZV9ndGkobmRldik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9ycG1fcHV0OwotCiAJcmF2Yl9wYXJzZV9kZWxheV9tb2RlKG5wLCBuZGV2KTsKIAogCS8qIEFsbG9jYXRlIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzIHRhYmxlICovCkBAIC0zMTU0LDYgJiM0MzszMjM5LDcgQEAgc3RhdGljIHZvaWQgcmF2Yl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlwbV9ydW50aW1lX2Rpc2FibGUoJmFtcDtwZGV2LSZndDtkZXYpOwogCXBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTsKIAljbGtfdW5wcmVwYXJlKHByaXYtJmd0O3JlZmNsayk7CiYjNDM7CW9mX25vZGVfcHV0KHByaXYtJmd0O29mX2dwdHApOwogCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtJmd0O3JzdGMpOwogCWZyZWVfbmV0ZGV2KG5kZXYpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpAQCAtMzE3OSw5ICYjNDM7MzI2NSw2IEBAIHN0YXRpYyBpbnQgcmF2Yl93b2xfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJLyogRW5hYmxlIE1hZ2ljUGFja2V0ICovCiAJcmF2Yl9tb2RpZnkobmRldiwgRUNNUiwgRUNNUl9NUERFLCBFQ01SX01QREUpOwogCi0JaWYgKHByaXYtJmd0O2luZm8tJmd0O2NjY19nYWMpCi0JCXJhdmJfcHRwX3N0b3AobmRldik7Ci0KIAlyZXR1cm4gZW5hYmxlX2lycV93YWtlKHByaXYtJmd0O2VtYWNfaXJxKTsKIH0KIApAQCAtMzIwMSw5ICYjNDM7MzI4NCw2IEBAIHN0YXRpYyBpbnQgcmF2Yl93b2xfcmVzdG9yZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWlmIChwcml2LSZndDtpbmZvLSZndDtjY2NfZ2FjKQotCQlyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtJmd0O3BkZXYpOwotCiAJaWYgKGluZm8tJmd0O25jX3F1ZXVlcykKIAkJbmFwaV9lbmFibGUoJmFtcDtwcml2LSZndDtuYXBpW1JBVkJfTkNdKTsKIAluYXBpX2VuYWJsZSgmYW1wO3ByaXYtJmd0O25hcGlbUkFWQl9CRV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jCmluZGV4IDIyNmM2YzBhYjk0NWIuLjQ3M2EyYWVkYjc0NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmMKQEAgLTMxMiwyMiAmIzQzOzMxMiwzOSBAQCB2b2lkIHJhdmJfcHRwX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlyYXZiX3dyaXRlKG5kZXYsIH4oZ2lzIHwgR0lTX1JFU0VSVkVEKSwgR0lTKTsKIH0KIAotdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQomIzQzO2ludCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlpbnQgcmV0ID0gMDsKIAogCXByaXYtJmd0O3B0cC5pbmZvID0gcmF2Yl9wdHBfaW5mbzsKIAotCXByaXYtJmd0O3B0cC5kZWZhdWx0X2FkZGVuZCA9IHJhdmJfcmVhZChuZGV2LCBHVEkpOwomIzQzOwlwcml2LSZndDtwdHAuZGVmYXVsdF9hZGRlbmQgPSBwcml2LSZndDtndGlfdGl2OwogCXByaXYtJmd0O3B0cC5jdXJyZW50X2FkZGVuZCA9IHByaXYtJmd0O3B0cC5kZWZhdWx0X2FkZGVuZDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHJpdi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkvKiBTZXQgZ1BUUCBUaW1lciBJbmNyZW1lbnQgVmFsdWUuICovCiYjNDM7CXJhdmJfd3JpdGUobmRldiwgcHJpdi0mZ3Q7cHRwLmRlZmF1bHRfYWRkZW5kLCBHVEkpOwomIzQzOwomIzQzOwkvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nLiAqLwomIzQzOwlyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX0xUSSwgR0NDUl9MVEkpOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBHSVQgbG9hZGluZyB0byBjb21wbGV0ZS4gKi8KIAlyYXZiX3dhaXQobmRldiwgR0NDUiwgR0NDUl9UQ1IsIEdDQ1JfVENSX05PUkVRKTsKJiM0MzsKIAlyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX1RDU1MsIEdDQ1JfVENTU19BREpHUFRQKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHJpdi0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JcHJpdi0mZ3Q7cHRwLmNsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKCZhbXA7cHJpdi0mZ3Q7cHRwLmluZm8sICZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJcHJpdi0mZ3Q7cHRwLmNsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKCZhbXA7cHJpdi0mZ3Q7cHRwLmluZm8sICZhbXA7cHJpdi0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtwdHAuY2xvY2spKSB7CiYjNDM7CQlyZXQgPSBQVFJfRVJSKHByaXYtJmd0O3B0cC5jbG9jayk7CiYjNDM7CQlwcml2LSZndDtwdHAuY2xvY2sgPSBOVUxMOwomIzQzOwkJcmF2Yl9wdHBfc3RvcChuZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC0zMzcsNSAmIzQzOzM1NCw2IEBAIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlyYXZiX3dyaXRlKG5kZXYsIDAsIEdJQyk7CiAJcmF2Yl93cml0ZShuZGV2LCAwLCBHSVMpOwogCi0JcHRwX2Nsb2NrX3VucmVnaXN0ZXIocHJpdi0mZ3Q7cHRwLmNsb2NrKTsKJiM0MzsJaWYgKHByaXYtJmd0O3B0cC5jbG9jaykKJiM0MzsJCXB0cF9jbG9ja191bnJlZ2lzdGVyKHByaXYtJmd0O3B0cC5jbG9jayk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGdQVFAgUmVmYWN0b3JpbmcgaW4gdGhlIFJlbmVzYXMgUkFWQiBEcml2ZXIqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgcmVmYWN0b3JpbmcgdGhlIGdQVFAgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYHJhdmJgIGRyaXZlci4gSXQmIzM5O3MgYWRkaW5nIGEgbmV3IGByYXZiX2dwdHBfaW5mb2Agc3RydWN0IGFuZCBjYWxsYmFjayBmdW5jdGlvbnMgdG8gaGFuZGxlIHBsYXRmb3JtLXNwZWNpZmljIGdQVFAgYmVoYXZpb3IsIGluY2x1ZGluZyBzdXBwb3J0IGZvciBHZW40IGdQVFAgdXNpbmcgYW4gZXh0ZXJuYWwgUFRQIHRpbWVyLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcmVhY2hhYmlsaXR5IOKAkyBjYW4gdGhpcyBjb2RlIGFjdHVhbGx5ICpiZSogdHJpZ2dlcmVkIGluIGEgcmVhbGlzdGljIGVudmlyb25tZW50PwoKR2l2ZW4gdGhlIGRyaXZlciBwYXRoLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiYCwgaXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSB0aWVkIHRvIHBoeXNpY2FsIGhhcmR3YXJlLCBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXJzIGZvdW5kIGluIFJlbmVzYXMgUi1DYXIgU29Dcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHRoaXMgY2FuIGJlIHJlbGlhYmx5IGVtdWxhdGVkLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgZnVsbCBSLUNhciBTb0MgZW11bGF0aW9uIGluIHNvbWV0aGluZyBsaWtlIFFFTVUgY2FuIGJlIHBhdGNoeSBhdCBiZXN0LCBvciBpbmNyZWRpYmx5IHNwZWNpZmljIGluIGl0cyBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgUUVNVSBzdXBwb3J0IGZvciBSZW5lc2FzIEV0aGVybmV0IEFWQiBzcGVjaWZpY2FsbHkuCgpXYWl0IGEgbWludXRlLCBzeXprYWxsZXIgKnVzdWFsbHkqIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlc2UgdHlwZXMgb2YgcGxhdGZvcm0gZGV2aWNlcyBpbiBpdHMgc3RhbmRhcmQgUUVNVSBzZXR1cCB1bmxlc3MgaXQmIzM5O3MgYSBnZW5lcmljIFBDSSBkZXZpY2UsIGFuZCB0aGlzIGlzIGRlZmluaXRlbHkgRFQtYmFzZWQuIFRoYXQgbWVhbnMgaXQgbWlnaHQgYmUgY2hhbGxlbmdpbmcgdG8gdHJpZ2dlciB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB0ZXN0aW5nIGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBhYm91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBwcm92aWRlIGEgd29ya2Fyb3VuZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgaGFyZHdhcmUgaXMgdmlydHVhbGl6YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkFWQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc9MTk9Y29uZmlnIFNIX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZzoyOTpjb25maWcgUkFWQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7UmVuZXNhcyBFdGhlcm5ldCBBVkIgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDc2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIFJBVkImIzM5O3MgZGVwZW5kZW5jaWVzLCBhcyB0aG91Z2ggSSB3ZXJlIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgUkFWQioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBtZW50YWxseSBza2V0Y2hpbmcgb3V0IHRoZSBsYW5kc2NhcGUgb2YgUkFWQi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciBzeXN0ZW1zLCBsaWJyYXJpZXMsIG9yIGV4dGVybmFsIHJlc291cmNlcyBkb2VzIGl0IHJlbHkgb24gdG8gZnVuY3Rpb24/IElzIGl0IHRpZ2h0bHkgY291cGxlZCB0byBzb21lIHNwZWNpZmljIGluZnJhc3RydWN0dXJlLCBvciBpcyBpdCBkZXNpZ25lZCB3aXRoIGEgZGVncmVlIG9mIG1vZHVsYXJpdHk/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6CgoqICAgKipVbmRlcmx5aW5nIHRlY2hub2xvZ2llczoqKiBEb2VzIGl0IGxldmVyYWdlIGEgcGFydGljdWxhciBkYXRhYmFzZSwgbWVzc2FnZSBxdWV1ZSwgb3IgY2xvdWQgcGxhdGZvcm0/IEtub3dpbmcgdGhpcyBxdWlja2x5IGluZGljYXRlcyBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcGFpbiBwb2ludHMgb3Igc2NhbGFiaWxpdHkgbGltaXRhdGlvbnMuCiogICAqKkV4dGVybmFsIEFQSXMvc2VydmljZXM6KiogSXMgUkFWQiBkZXBlbmRlbnQgb24gb3RoZXIgc3lzdGVtcyBvciBzZXJ2aWNlcyBvdXRzaWRlIGl0cyBkaXJlY3QgY29udHJvbD8gSWYgc28sIEkgbmVlZCB0byBrbm93IHRoZSByZWxpYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRob3NlIGRlcGVuZGVuY2llcy4gVGhpcyBhbHNvIGhpZ2hsaWdodHMgYW55IHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucyBhcmlzaW5nIGZyb20gdGhvc2UgZGVwZW5kZW5jaWVzLgoqICAgKipJbnRlcm5hbCBtb2R1bGVzIGFuZCBsaWJyYXJpZXM6KiogSG93IGlzIFJBVkIgc3RydWN0dXJlZCBpbnRlcm5hbGx5PyBBcmUgdGhlcmUgc3BlY2lmaWMgbW9kdWxlcyBvciBsaWJyYXJpZXMgdGhhdCBpdCBsZWFucyBoZWF2aWx5IG9uPyBVbmRlcnN0YW5kaW5nIHRoZXNlIGlubmVyIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMsIHJlZmFjdG9yaW5nLCBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLgoqICAgKipWZXJzaW9uaW5nIGFuZCBDb21wYXRpYmlsaXR5OioqIFdoYXQgdmVyc2lvbnMgb2YgdGhlc2UgZGVwZW5kZW5jaWVzIGFyZSByZXF1aXJlZCBvciBzdXBwb3J0ZWQ/IEFueSBjb21wYXRpYmlsaXR5IGlzc3VlcyBhbmQgcG90ZW50aWFsIGJyZWFraW5nIGNoYW5nZXMgYmVjb21lIHZpdGFsIHRvIGNvbnNpZGVyLgoqICAgKipDb25maWd1cmF0aW9uOioqIElzIGl0cyBiZWhhdmlvciBkZXBlbmRlbnQgb24gdGhlIGlucHV0IHBhcmFtZXRlcnMgdG8gUkFWQj8gV2hhdCBzcGVjaWZpYyB0eXBlcyBvZiBpbnB1dHMgYXJlIGFjY2VwdGVkIGFuZCBob3cgdGhleSBhZmZlY3QgdGhlIGZ1bmN0aW9uYWxpdHk/CiogICAqKkRhdGEgRGVwZW5kZW5jaWVzOioqIFdoYXQgaXMgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YT8KCkkmIzM5O20gZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIFJBVkImIzM5O3MgZWNvc3lzdGVtLCBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByaXNrcywgYW5kIGFyZWFzIG9mIGFyY2hpdGVjdHVyYWwgc3RyZW5ndGguIFRoaXMgaXMgdGhlIGdyb3VuZHdvcmsgZm9yIGFueSBzZXJpb3VzIGFuYWx5c2lzIG9yIGludGVydmVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjk6XHRjb25maWcgUkFWQlxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVuZXNhcyBFdGhlcm5ldCBBVkIgc3VwcG9ydFwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgfHwgQ09NUElMRV9URVNUXG4gIDMyOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDMzOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMzQ6XHRcdHNlbGVjdCBNSUlcbiAgMzU6XHRcdHNlbGVjdCBNRElPX0JJVEJBTkdcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMzc6XHRcdHNlbGVjdCBQSFlMSUJcbiAgMzg6XHRcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFJlbmVzYXMgRXRoZXJuZXQgQVZCIGRldmljZSBkcml2ZXIuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIFJFTkVTQVNfRVRIRVJfU1dJVENIXG4gIDQzOlx0XHR0cmlzdGF0ZSBcJiMzNDtSZW5lc2FzIEV0aGVybmV0IFN3aXRjaCBzdXBwb3J0XCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEFSQ0hfUkVORVNBUyB8fCBDT01QSUxFX1RFU1RcbiAgNDU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAgNDY6XHRcdHNlbGVjdCBDUkMzMlxuICA0NzpcdFx0c2VsZWN0IE1JSVxuICA0ODpcdFx0c2VsZWN0IFBIWUxJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc0NwoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiA4NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBVbnJlYWNoYWJsZSBDb2RlIGluIFN0YW5kYXJkIEZ1enppbmcgRW52aXJvbm1lbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBoaW5nZXMgb24gd2hldGhlciB0aGlzIGNvZGUgaXMgYWNjZXNzaWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZywgcGFydGljdWxhcmx5IGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiAgSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyBgcmF2Yl9tYWluLmNgIGFuZCBgcmF2Yl9wdHAuY2AsIGJ1dCB0aGUgY29yZSBvZiB0aGUgaXNzdWUgbGllcyBpbiB0aGUgZHJpdmVyIGl0c2VsZiwgYHJhdmJfZHJpdmVyYC4gIEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLiBQbGF0Zm9ybSBkcml2ZXJzLCBnZW5lcmFsbHksIGFyZSBhIHJlZCBmbGFnIGZvciBzdGFuZGFyZCBmdXp6aW5nLiBUaGV5IHJlbHkgb24gdGhlIHByZXNlbmNlIG9mIGEgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0gYW5kLCBjcml0aWNhbGx5LCB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2RlcyBmb3IgcHJvYmluZy4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcGFydGljdWxhciBkZXZpY2UsIFJlbmVzYXMgRXRoZXJuZXQgQVZCLCBpcyBsaWtlbHkgdG8gYmUgZW11bGF0ZWQgb3IgZXZlbiByZXByZXNlbnRlZCBpbiBzdGFuZGFyZCBzZXR1cHMuIEZyb20gcGFzdCBleHBlcmllbmNlcyBhbmQgbG9va2luZyBhdCB0aGUgZHJpdmVyIHN0cnVjdHVyZSAoYHJhdmJfZHJpdmVyYCksIHRoaXMgZHJpdmVyIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgUmVuZXNhcyBSLUNhciBTb0NzLiAgVGhhdCBtZWFucyBpdOKAmXMgZXhwZWN0aW5nIGEgZGV2aWNlIHRyZWUgbm9kZSB3aXRoIHNvbWV0aGluZyBsaWtlIGAmIzM0O3JlbmVzYXMsZXRoZXJhdmItcmNhci1nZW40JiMzNDtgIGFzIGEgY29tcGF0aWJsZSBzdHJpbmcuCgpTeXprYWxsZXIgKmNhbiogZnV6eiBwbGF0Zm9ybSBkZXZpY2VzLCBidXQgaXQgbmVlZHMgYSBzcGVjaWZpYyBtZWNoYW5pc206IGVpdGhlciBpdCB3b3VsZCBuZWVkIHRvIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcyBvciB1c2UgYSBzcGVjaWFsaXplZCBmdXp6ZXIuIEl0JiMzOTtzIG5vdCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSYjMzk7dmUgY29uc2lkZXJlZCB0aGF0IGBzeXpfZGV2X2luaXRgIG1pZ2h0IG9mZmVyIGEgYmFja2Rvb3Igb3IgdGhhdCBzeXprYWxsZXLigJlzIGRldmljZSBkZXNjcmlwdGlvbiBnZW5lcmF0aW9uIG1heSBoZWxwLCBidXQgdXN1YWxseSB0aGF0IG9ubHkgd29ya3MgZm9yIGV4cGxpY2l0bHkgc3VwcG9ydGVkIGRldmljZXMgb3Igc3Vic3lzdGVtcy4KCkNydWNpYWxseSwgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgKm5vdCogYSBQQ0kgb3IgVVNCIGRldmljZS4gV2l0aG91dCBhIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGUsIHRoaXMgY29kZSB3b24mIzM5O3QgYmUgcHJvYmVkIGluIGEgZGVmYXVsdCBRRU1VIHNldHVwLiBBbmQsIGxldCYjMzk7cyBiZSByZWFsaXN0aWMsIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHQ0Ugb3IgdGhlIHR5cGljYWwgYHFlbXUtc3lzdGVtLXg4Nl82NGAgb3IgYHFlbXUtc3lzdGVtLWFhcmNoNjQgLW1hY2hpbmUgdmlydGAgY29uZmlndXJhdGlvbnMsICpkb24mIzM5O3QqIGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBSZW5lc2FzIGhhcmR3YXJlLgoKSSYjMzk7dmUgZXZlbiBkb3VibGUtY2hlY2tlZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIFFFTVUgbWFjaGluZXMga25vd24gdG8gZW11bGF0ZSB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlLCBhbmQgdGhlcmUgYXJlIG5vdC4gU2luY2UgdGhlIHBhdGNoZWQgY29kZSBpcyBzcGVjaWZpYyB0byBhIHZlbmRvciBoYXJkd2FyZSBkZXZpY2UsIGFuZCBzaW5jZSBRRU1VIGRvZXMgbm90IGVtdWxhdGUgdGhpcyBkZXZpY2UsIGl0JiMzOTtzIGNsZWFyIHRoaXMgY29kZSBpcyBub3QgcmVhY2hhYmxlLiBFdmVuIGlmIGEgaHlwb3RoZXRpY2FsIGVtdWxhdGlvbiBleGlzdGVkLCBpdOKAmXMgdmVuZG9yLXNwZWNpZmljLCB3aGljaCBsZWFkcyBiYWNrIHRvIHRoZSBzYW1lIHByb2JsZW0uIFRoaXMgYWxsIGZhbGxzIHVuZGVyIHRoZSBjcml0ZXJpYSBkZWZpbmVkIGZvciBXb3J0aEZ1enppbmc9ZmFsc2UuCgpUaGVyZWZvcmUsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmFjdG9yaW5nIHRvIGdQVFAgc3VwcG9ydCBpbiBhIGRyaXZlciBmb3IgdGhlIFJlbmVzYXMgUi1DYXIgRXRoZXJuZXQgQVZCIGNvbnRyb2xsZXIuIFRoZSBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgUmVuZXNhcyBTb0MgYW5kIHJlcXVpcmUgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMuIEdpdmVuIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50IGxpbWl0YXRpb25zLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gVGhlcmVmb3JlLCBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBnUFRQIHN1cHBvcnQgaW4gdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChyYXZiKSBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBHZW40IGdQVFAgYW5kIGludHJvZHVjaW5nIGEgc3RydWN0IGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBjYWxsYmFja3MuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIGZvciBSZW5lc2FzIFItQ2FyIFNvQ3MuIFRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgdGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyB0byBwcm9iZS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgZ1BUUCBzdXBwb3J0IGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAocmF2YikgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgR2VuNCBnUFRQIGFuZCBpbnRyb2R1Y2luZyBhIHN0cnVjdCBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgY2FsbGJhY2tzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgUmVuZXNhcyBSLUNhciBTb0NzLiBUaGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgdG8gcHJvYmUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDE6MzQuNDExNTc2MzU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NDUxMjY2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgZ1BUUCBzdXBwb3J0IGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAocmF2YikgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgR2VuNCBnUFRQIGFuZCBpbnRyb2R1Y2luZyBhIHN0cnVjdCBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgY2FsbGJhY2tzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgUmVuZXNhcyBSLUNhciBTb0NzLiBUaGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgdG8gcHJvYmUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDE6MzQuNDExNTgxMDc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIxMjUxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkY2M3MDVmZmU4ZWJiZjY2OWM3OTMyZTY0MmE2MWQ1MGE1MWMwODAwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDE2OjQxOjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWxcXG5pbmRleCAxZTAwZWY1YjNhY2RhLi5mYWQwMDI0OTI0MjFhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWxcXG5AQCAtOTcsNiArOTcsOCBAQCBwcm9wZXJ0aWVzOlxcbiBcXG4gICBwaHktaGFuZGxlOiB0cnVlXFxuIFxcbisgIHB0cC10aW1lcjogdHJ1ZVxcbitcXG4gICAnI2FkZHJlc3MtY2VsbHMnOlxcbiAgICAgZGVzY3JpcHRpb246IE51bWJlciBvZiBhZGRyZXNzIGNlbGxzIGZvciB0aGUgTURJTyBidXMuXFxuICAgICBjb25zdDogMVxcbkBAIC0zMDUsNiArMzA3LDE1IEBAIGFsbE9mOlxcbiAgICAgICAgICAgICBpdGVtczpcXG4gICAgICAgICAgICAgICAtIGNvbnN0OiBmY2tcXG4gICAgICAgICAgICAgICAtIGNvbnN0OiByZWZjbGtcXG4rICAtIGlmOlxcbisgICAgICBub3Q6XFxuKyAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICAgIGNvbnRhaW5zOlxcbisgICAgICAgICAgICAgIGNvbnN0OiByZW5lc2FzLGV0aGVyYXZiLXJjYXItZ2VuNFxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBwdHAtdGltZXI6IGZhbHNlXFxuIFxcbiBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcXG5pbmRleCA1ZTU2ZWM5YjEwMTNhLi40YzhkYzAyMDIyZTIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcXG5AQCAtMjQ5LDYgKzI0OSw4IEBAIGVudW0gQVBTUl9CSVQge1xcbiBcXHRBUFNSX1JETVxcdD0gMHgwMDAwMjAwMCxcXG4gXFx0QVBTUl9URE1cXHQ9IDB4MDAwMDQwMDAsXFxuIFxcdEFQU1JfTUlJU0VMRUNUXFx0PSAweDAxMDAwMDAwLFxcdC8qIFItQ2FyIFY0TSBvbmx5ICovXFxuK1xcdEFQU1JfR1BUUFRJTUVSX1NPVVJDRSA9IEJJVCgyNSksIC8qIEdlbjQgKi9cXG4rXFx0QVBTUl9HUFRQQ0xPQ0tcXHQ9IEJJVCgyOSksXFx0LyogR2VuNCAqL1xcbiB9O1xcbiBcXG4gLyogUkNSICovXFxuQEAgLTEwMzQsNiArMTAzNiwzMSBAQCBzdHJ1Y3QgcmF2Yl9wdHAge1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHBlcm91dFtOX1BFUl9PVVRdO1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIHN0cnVjdCByYXZiX2dwdHBfaW5mbyAtIFBsYXRmb3JtIHNwZWNpZmljIGdQVFAgYmVoYXZpb3JcXG4rICpcXG4rICogRWFjaCBnZW5lcmF0aW9uIG9mIFJBVkIgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgYmVoYXZpb3JzIHdoZW4gaW50ZXJhY3RpbmdcXG4rICogd2l0aCB0aGUgZ1BUUCBjbG9jay4gVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNhbGxiYWNrcyB0byBiZSBjYWxsZWQgYXRcXG4rICogY3JpdGljYWwgcG9pbnRzIGluIHRoZSBSQVZCIGRyaXZlci5cXG4rICpcXG4rICogQHByb2JlOlxcdFxcdFByb2JlIHRoZSBnUFRQIGNsb2NrXFxuKyAqIEBjbG9ja19pbmRleDpcXHRHZXQgdGhlIFBUUCBjbG9jayBpbmRleCwgaWYgYW55XFxuKyAqIEBzZXRfY29uZmlnX21vZGU6XFx0RW50ZXIgY29uZmlnIG1vZGVcXG4rICogQGRtYWNfc3RhcnQ6XFx0XFx0Q2FsbGVkIHdoZW4gdGhlIERNQUMgc3RhcnRzXFxuKyAqIEBkbWFjX3N0b3A6XFx0XFx0Q2FsbGVkIHdoZW4gdGhlIERNQUMgc3RvcHNcXG4rICogQG5kZXZfb3BlbjpcXHRcXHRDYWxsZWQgd2hlbiB0aGUgbmRldiBpcyBvcGVuZWRcXG4rICogQG5kZXZfY2xvc2U6XFx0XFx0Q2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgY2xvc2VkXFxuKyAqL1xcbitzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8ge1xcbitcXHRpbnQgKCpwcm9iZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHRpbnQgKCpjbG9ja19pbmRleCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHRpbnQgKCpzZXRfY29uZmlnX21vZGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rXFx0aW50ICgqZG1hY19zdGFydCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHR2b2lkICgqZG1hY19zdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuK1xcdGludCAoKm5kZXZfb3Blbikoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHR2b2lkICgqbmRldl9jbG9zZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbit9O1xcbitcXG4gc3RydWN0IHJhdmJfaHdfaW5mbyB7XFxuIFxcdGludCAoKnJlY2VpdmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgYnVkZ2V0LCBpbnQgcSk7XFxuIFxcdHZvaWQgKCpzZXRfcmF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbkBAIC0xMDUyLDYgKzEwNzksNyBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcXG4gXFx0dTMyIHJ4X2J1ZmZlcl9zaXplO1xcbiBcXHR1MzIgcnhfZGVzY19zaXplO1xcbiBcXHR1MzIgZGJhdF9lbnRyeV9udW07XFxuK1xcdGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyAqcHRwOyAvKiBDYWxsYmFja3MgdG8gaGFuZGxlIGdQVFAgaW50ZXJhY3Rpb25zLiAqL1xcbiBcXHR1bnNpZ25lZCBhbGlnbmVkX3R4OiAxO1xcbiBcXHR1bnNpZ25lZCBjb2FsZXNjZV9pcnFzOjE7XFx0LyogTmVlZHMgc29mdHdhcmUgSVJRIGNvYWxlc2NpbmcgKi9cXG4gXFxuQEAgLTEwNjIsOSArMTA5MCw2IEBAIHN0cnVjdCByYXZiX2h3X2luZm8ge1xcbiBcXHR1bnNpZ25lZCBtdWx0aV9pcnFzOjE7XFx0XFx0LyogQVZCLURNQUMgYW5kIEUtTUFDIGhhcyBtdWx0aXBsZSBpcnFzICovXFxuIFxcdHVuc2lnbmVkIGlycV9lbl9kaXM6MTtcXHRcXHQvKiBIYXMgc2VwYXJhdGUgaXJxIGVuYWJsZSBhbmQgZGlzYWJsZSByZWdzICovXFxuIFxcdHVuc2lnbmVkIGVycl9tZ210X2lycXM6MTtcXHQvKiBMaW5lMSAoRXJyKSBhbmQgTGluZTIgKE1nbXQpIGlycXMgYXJlIHNlcGFyYXRlICovXFxuLVxcdHVuc2lnbmVkIGdwdHA6MTtcXHRcXHQvKiBBVkItRE1BQyBoYXMgZ1BUUCBzdXBwb3J0ICovXFxuLVxcdHVuc2lnbmVkIGNjY19nYWM6MTtcXHRcXHQvKiBBVkItRE1BQyBoYXMgZ1BUUCBzdXBwb3J0IGFjdGl2ZSBpbiBjb25maWcgbW9kZSAqL1xcbi1cXHR1bnNpZ25lZCBncHRwX3JlZl9jbGs6MTtcXHQvKiBnUFRQIGhhcyBzZXBhcmF0ZSByZWZlcmVuY2UgY2xvY2sgKi9cXG4gXFx0dW5zaWduZWQgbmNfcXVldWVzOjE7XFx0XFx0LyogQVZCLURNQUMgaGFzIFJYIGFuZCBUWCBOQyBxdWV1ZXMgKi9cXG4gXFx0dW5zaWduZWQgbWFnaWNfcGt0OjE7XFx0XFx0LyogRS1NQUMgc3VwcG9ydHMgbWFnaWMgcGFja2V0IGRldGVjdGlvbiAqL1xcbiBcXHR1bnNpZ25lZCBoYWxmX2R1cGxleDoxO1xcdFxcdC8qIEUtTUFDIHN1cHBvcnRzIGhhbGYgZHVwbGV4IG1vZGUgKi9cXG5AQCAtMTEwOSw2ICsxMTM0LDcgQEAgc3RydWN0IHJhdmJfcHJpdmF0ZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgdHNfc2tiX2xpc3Q7XFxuIFxcdHUzMiB0c19za2JfdGFnO1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wdHAgcHRwO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dwdHA7XFx0LyogUmVmZXJlbmNlIHRvIGV4dGVybmFsIGdQVFAgY2xvY2ssIGlmIGFueS4gKi9cXG4gXFx0c3BpbmxvY2tfdCBsb2NrO1xcdFxcdC8qIFJlZ2lzdGVyIGFjY2VzcyBsb2NrICovXFxuIFxcdHUzMiBjdXJfcnhbTlVNX1JYX1FVRVVFXTtcXHQvKiBDb25zdW1lciByaW5nIGluZGljZXMgKi9cXG4gXFx0dTMyIGRpcnR5X3J4W05VTV9SWF9RVUVVRV07XFx0LyogUHJvZHVjZXIgcmluZyBpbmRpY2VzICovXFxuQEAgLTExNjAsNyArMTE4Niw3IEBAIHZvaWQgcmF2Yl9tb2RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgY2xlYXIsXFxuIGludCByYXZiX3dhaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTtcXG4gXFxuIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4tdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcXG4raW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbiBcXG4gI2VuZGlmXFx0LyogI2lmbmRlZiBfX1JBVkJfSF9fICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXFxuaW5kZXggNWY4ODczMzA5NGQwZi4uMzAxNzBlOTJkM2Q3MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xcbkBAIC03MDcsNyArNzA3LDE1IEBAIHN0YXRpYyBpbnQgcmF2Yl9kbWFjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuIFxcdC8qIFNldHRpbmcgdGhlIGNvbnRyb2wgd2lsbCBzdGFydCB0aGUgQVZCLURNQUMgcHJvY2Vzcy4gKi9cXG4tXFx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XFxuK1xcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfT1BFUkFUSU9OKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZWRtYWNfc3RhcnQpXFxuK1xcdFxcdHJldHVybiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZWRtYWNfc3RhcnQobmRldik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcmF2Yl9nZXRfdHhfdHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbkBAIC0xMTE1LDYgKzExMjMsMTAgQEAgc3RhdGljIGludCByYXZiX3N0b3BfZG1hKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJmYWlsZWQgdG8gc3RvcCBBWEkgQlVTXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXFxuK1xcdGlmIChpbmZvLVxcdTAwM2VwdHAgXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VkbWFjX3N0b3ApXFxuK1xcdFxcdGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlZG1hY19zdG9wKG5kZXYpO1xcbitcXG4gXFx0LyogU3RvcCBBVkItRE1BQyBwcm9jZXNzICovXFxuIFxcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xcbiB9XFxuQEAgLTE3MTksOSArMTczMSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXG4gXFx0aWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHtcXG4gXFx0XFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTtcXG4tXFx0XFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXFxuLVxcdFxcdGlmIChpbmZvLVxcdTAwM2VncHRwKVxcbi1cXHRcXHRcXHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xcbitcXG4gXFx0XFx0LyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovXFxuIFxcdFxcdGVycm9yID0gcmF2Yl9zdG9wX2RtYShuZGV2KTtcXG4gXFx0XFx0aWYgKGVycm9yKSB7XFxuQEAgLTE3NTIsMTAgKzE3NjIsNiBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFxuIFxcdFxcdHJhdmJfZW1hY19pbml0KG5kZXYpO1xcbiBcXG4tXFx0XFx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXFxuLVxcdFxcdGlmIChpbmZvLVxcdTAwM2VncHRwKVxcbi1cXHRcXHRcXHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXFx1MDAzZXBkZXYpO1xcbi1cXG4gXFx0XFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcXG4gXFx0fVxcbiBcXG5AQCAtMTc2Nyw4ICsxNzczLDEzIEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4ge1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmh3X2luZm8gPSBwcml2LVxcdTAwM2VpbmZvO1xcbitcXHRpbnQgaW5kZXggPSAtMTtcXG4rXFxuK1xcdGlmIChod19pbmZvLVxcdTAwM2VwdHAgXFx1MDAyNlxcdTAwMjYgaHdfaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VjbG9ja19pbmRleClcXG4rXFx0XFx0aW5kZXggPSBod19pbmZvLVxcdTAwM2VwdHAtXFx1MDAzZWNsb2NrX2luZGV4KG5kZXYpO1xcbiBcXG4tXFx0aWYgKGh3X2luZm8tXFx1MDAzZWdwdHAgfHwgaHdfaW5mby1cXHUwMDNlY2NjX2dhYykge1xcbitcXHQvKiBPbmx5IGFkdmVydGlzZSBwdHAgY2xvY2sgaWYgcHJlc2VudC4gKi9cXG4rXFx0aWYgKGluZGV4IFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0aW5mby1cXHUwMDNlc29fdGltZXN0YW1waW5nID1cXG4gXFx0XFx0XFx0U09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XFxuIFxcdFxcdFxcdFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxcbkBAIC0xNzc5LDcgKzE3OTAsNyBAQCBzdGF0aWMgaW50IHJhdmJfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8XFxuIFxcdFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQpIHxcXG4gXFx0XFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgSFdUU1RBTVBfRklMVEVSX0FMTCk7XFxuLVxcdFxcdGluZm8tXFx1MDAzZXBoY19pbmRleCA9IHB0cF9jbG9ja19pbmRleChwcml2LVxcdTAwM2VwdHAuY2xvY2spO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VwaGNfaW5kZXggPSBpbmRleDtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE4MjYsNTUgKzE4MzcsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyByYXZiX2V0aHRvb2xfb3BzID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGludCByYXZiX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuLVxcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVxcdTAwM2VpbmZvO1xcbi1cXHRpbnQgZXJyb3I7XFxuLVxcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCkge1xcbi1cXHRcXHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XFxuLVxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRcXHQvKiBTZXQgQ1NFTCB2YWx1ZSAqL1xcbi1cXHRcXHRyYXZiX21vZGlmeShuZGV2LCBDQ0MsIENDQ19DU0VMLCBDQ0NfQ1NFTF9IUEIpO1xcbi1cXHR9IGVsc2UgaWYgKGluZm8tXFx1MDAzZWNjY19nYWMpIHtcXG4tXFx0XFx0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gZXJyb3I7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHJhdmJfc2V0X2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVxcdTAwM2VpbmZvO1xcbiBcXG4tXFx0aWYgKCEoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlc2V0X2NvbmZpZ19tb2RlKVxcbitcXHRcXHRyZXR1cm4gaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VzZXRfY29uZmlnX21vZGUobmRldik7XFxuIFxcbi1cXHRyYXZiX3dyaXRlKG5kZXYsIHByaXYtXFx1MDAzZWd0aV90aXYsIEdUSSk7XFxuLVxcbi1cXHQvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nICovXFxuLVxcdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfTFRJLCBHQ0NSX0xUSSk7XFxuK1xcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJhdmJfY29tcHV0ZV9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3N0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNsayAqY2xrKVxcbiB7XFxuIFxcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4tXFx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXFx1MDAzZWluZm87XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IG5kZXYtXFx1MDAzZWRldi5wYXJlbnQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcXG4gXFx0dTY0IGluYztcXG4gXFxuLVxcdGlmICghKGluZm8tXFx1MDAzZWdwdHAgfHwgaW5mby1cXHUwMDNlY2NjX2dhYykpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHBfcmVmX2NsaylcXG4tXFx0XFx0cmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVxcdTAwM2VncHRwX2Nsayk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XFxuIFxcdGlmICghcmF0ZSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC0xOTc0LDExICsxOTU0LDEyIEBAIHN0YXRpYyBpbnQgcmF2Yl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXG4gXFx0cmF2Yl9lbWFjX2luaXQobmRldik7XFxuIFxcbi1cXHRyYXZiX3NldF9ndGkobmRldik7XFxuLVxcbiBcXHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHAgfHwgaW5mby1cXHUwMDNlY2NjX2dhYylcXG4tXFx0XFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVxcdTAwM2VwZGV2KTtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZW5kZXZfb3Blbikge1xcbitcXHRcXHRlcnJvciA9IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlbmRldl9vcGVuKG5kZXYpO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B0cF9zdG9wO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBQSFkgY29udHJvbCBzdGFydCAqL1xcbiBcXHRlcnJvciA9IHJhdmJfcGh5X3N0YXJ0KG5kZXYpO1xcbkBAIC0xOTkwLDkgKzE5NzEsNiBAQCBzdGF0aWMgaW50IHJhdmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBvdXRfcHRwX3N0b3A6XFxuLVxcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKVxcbi1cXHRcXHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xcbiBcXHRyYXZiX3N0b3BfZG1hKG5kZXYpO1xcbiBvdXRfc2V0X3Jlc2V0OlxcbiBcXHRyYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19SRVNFVCk7XFxuQEAgLTIwMzYsMTAgKzIwMTQsNiBAQCBzdGF0aWMgdm9pZCByYXZiX3R4X3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmRldik7XFxuIFxcbi1cXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHApXFxuLVxcdFxcdHJhdmJfcHRwX3N0b3AobmRldik7XFxuLVxcbiBcXHQvKiBXYWl0IGZvciBETUEgc3RvcHBpbmcgKi9cXG4gXFx0aWYgKHJhdmJfc3RvcF9kbWEobmRldikpIHtcXG4gXFx0XFx0LyogSWYgcmF2Yl9zdG9wX2RtYSgpIGZhaWxzLCB0aGUgaGFyZHdhcmUgaXMgc3RpbGwgb3BlcmF0aW5nXFxuQEAgLTIwNzIsMTAgKzIwNDYsNiBAQCBzdGF0aWMgdm9pZCByYXZiX3R4X3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHJhdmJfZW1hY19pbml0KG5kZXYpO1xcbiBcXG4gb3V0Olxcbi1cXHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHApXFxuLVxcdFxcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cXHUwMDNlcGRldik7XFxuLVxcbiBcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xcbiBcXG4gb3V0X3VubG9jazpcXG5AQCAtMjIwOCw3ICsyMTc4LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHJhdmJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0ZGVzYy1cXHUwMDNlZHB0ciA9IGNwdV90b19sZTMyKGRtYV9hZGRyKTtcXG4gXFxuIFxcdC8qIFRYIHRpbWVzdGFtcCByZXF1aXJlZCAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKSB7XFxuK1xcdGlmIChpbmZvLVxcdTAwM2VwdHApIHtcXG4gXFx0XFx0aWYgKHEgPT0gUkFWQl9OQykge1xcbiBcXHRcXHRcXHR0c19za2IgPSBrbWFsbG9jX29iaigqdHNfc2tiLCBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0XFx0aWYgKCF0c19za2IpIHtcXG5AQCAtMjM5MCw4ICsyMzYwLDggQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHAgfHwgaW5mby1cXHUwMDNlY2NjX2dhYylcXG4tXFx0XFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZW5kZXZfY2xvc2UpXFxuK1xcdFxcdGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlbmRldl9jbG9zZShuZGV2KTtcXG4gXFxuIFxcdC8qIFNldCB0aGUgY29uZmlnIG1vZGUgdG8gc3RvcCB0aGUgQVZCLURNQUMncyBwcm9jZXNzZXMgKi9cXG4gXFx0aWYgKHJhdmJfc3RvcF9kbWEobmRldikgXFx1MDAzYyAwKVxcbkBAIC0yMzk5LDcgKzIzNjksNyBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdFxcdFxcdCAgIFxcXCJkZXZpY2Ugd2lsbCBiZSBzdG9wcGVkIGFmdGVyIGgvdyBwcm9jZXNzZXMgYXJlIGRvbmUuXFxcXG5cXFwiKTtcXG4gXFxuIFxcdC8qIENsZWFyIHRoZSB0aW1lc3RhbXAgbGlzdCAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKSB7XFxuK1xcdGlmIChpbmZvLVxcdTAwM2VwdHApIHtcXG4gXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRzX3NrYiwgdHNfc2tiMiwgXFx1MDAyNnByaXYtXFx1MDAzZXRzX3NrYl9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZ0c19za2ItXFx1MDAzZWxpc3QpO1xcbiBcXHRcXHRcXHRrZnJlZV9za2IodHNfc2tiLVxcdTAwM2Vza2IpO1xcbkBAIC0yNjgxLDYgKzI2NTEsNDIgQEAgc3RhdGljIGludCByYXZiX21kaW9fcmVsZWFzZShzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCByYXZiX2dlbjJfcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdHJldHVybiByYXZiX2NvbXB1dGVfZ3RpKG5kZXYsIHByaXYtXFx1MDAzZWNsayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4KHByaXYtXFx1MDAzZXB0cC5jbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBnUFRQIENsb2NrIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xcbitcXHRyYXZiX21vZGlmeShuZGV2LCBDQ0MsIENDQ19DU0VMLCBDQ0NfQ1NFTF9IUEIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW4yX3B0cF9pbmZvID0ge1xcbitcXHQucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLFxcbitcXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxcbitcXHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUsXFxuK1xcdC5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCxcXG4rXFx0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHtcXG4gXFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXFxuIFxcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcXG5AQCAtMjY5OSwxMiArMjcwNSwyNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHtcXG4gXFx0XFx0XFx0ICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLFxcbiBcXHQucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLFxcbiBcXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcXG4rXFx0LnB0cCA9IFxcdTAwMjZyYXZiX2dlbjJfcHRwX2luZm8sXFxuIFxcdC5hbGlnbmVkX3R4ID0gMSxcXG4tXFx0LmdwdHAgPSAxLFxcbiBcXHQubmNfcXVldWVzID0gMSxcXG4gXFx0Lm1hZ2ljX3BrdCA9IDEsXFxuIH07XFxuIFxcbitzdGF0aWMgaW50IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdC8qIEVuYWJsZSBnUFRQIENsb2NrIGFuZCBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi9cXG4rXFx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuM19wdHBfaW5mbyA9IHtcXG4rXFx0LnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSxcXG4rXFx0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCxcXG4rXFx0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlLFxcbitcXHQubmRldl9vcGVuID0gcmF2Yl9wdHBfaW5pdCxcXG4rXFx0Lm5kZXZfY2xvc2UgPSByYXZiX3B0cF9zdG9wLFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4zX2h3X2luZm8gPSB7XFxuIFxcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxcbiBcXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXFxuQEAgLTI3MjMsMTUgKzI3NDMsNjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4zX2h3X2luZm8gPSB7XFxuIFxcdFxcdFxcdCAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSxcXG4gXFx0LnJ4X2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmF2Yl9leF9yeF9kZXNjKSxcXG4gXFx0LmRiYXRfZW50cnlfbnVtID0gMjIsXFxuK1xcdC5wdHAgPSBcXHUwMDI2cmF2Yl9nZW4zX3B0cF9pbmZvLFxcbiBcXHQuaW50ZXJuYWxfZGVsYXkgPSAxLFxcbiBcXHQudHhfY291bnRlcnMgPSAxLFxcbiBcXHQubXVsdGlfaXJxcyA9IDEsXFxuIFxcdC5pcnFfZW5fZGlzID0gMSxcXG4tXFx0LmNjY19nYWMgPSAxLFxcbiBcXHQubmNfcXVldWVzID0gMSxcXG4gXFx0Lm1hZ2ljX3BrdCA9IDEsXFxuIH07XFxuIFxcbitzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlb2ZfZ3B0cCA9XFxuK1xcdFxcdG9mX3BhcnNlX3BoYW5kbGUocHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUsIFxcXCJwdHAtdGltZXJcXFwiLCAwKTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VvZl9ncHRwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwcml2LVxcdTAwM2VvZl9ncHRwKSkge1xcbitcXHRcXHRvZl9ub2RlX3B1dChwcml2LVxcdTAwM2VvZl9ncHRwKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlb2ZfZ3B0cCA9IE5VTEw7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXZiX2dlbjRfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdC8qIElmIG5vIGNsb2NrLCBtaW1pYyBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZSgpIGZhaWwgYW5kIHJldHVybiAtMSAqL1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZW9mX2dwdHApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZShwcml2LVxcdTAwM2VvZl9ncHRwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXZiX2dlbjRfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBFbmFibGUgZ1BUUCBDbG9jayBhbmQgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXFxuK1xcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogU2V0IFBUUCBzb3VyY2UgdG8gR1BUUCBtb2R1bGUsIG9ubHkgb3B0aW9uIG9uIEdlbjQuICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VvZl9ncHRwKVxcbitcXHRcXHRyYXZiX21vZGlmeShuZGV2LCBBUFNSLCBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyxcXG4rXFx0XFx0XFx0ICAgIEFQU1JfR1BUUFRJTUVSX1NPVVJDRSB8IEFQU1JfR1BUUENMT0NLKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuNF9wdHBfaW5mbyA9IHtcXG4rXFx0LnByb2JlID0gcmF2Yl9nZW40X3B0cF9wcm9iZSxcXG4rXFx0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleCxcXG4rXFx0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuNF9wdHBfc2V0X2NvbmZpZ19tb2RlLFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW40X2h3X2luZm8gPSB7XFxuIFxcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxcbiBcXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXFxuQEAgLTI3NTQsMTEgKzI4MjcsMzAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW40X2h3X2luZm8gPSB7XFxuIFxcdC50eF9jb3VudGVycyA9IDEsXFxuIFxcdC5tdWx0aV9pcnFzID0gMSxcXG4gXFx0LmlycV9lbl9kaXMgPSAxLFxcbi1cXHQuY2NjX2dhYyA9IDEsXFxuK1xcdC5wdHAgPSBcXHUwMDI2cmF2Yl9nZW40X3B0cF9pbmZvLFxcbiBcXHQubmNfcXVldWVzID0gMSxcXG4gXFx0Lm1hZ2ljX3BrdCA9IDEsXFxuIH07XFxuIFxcbitzdGF0aWMgaW50IHJhdmJfcnp2Mm1fcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWdwdHBfY2xrID0gZGV2bV9jbGtfZ2V0KFxcdTAwMjZwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJncHRwXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlZ3B0cF9jbGspKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwcml2LVxcdTAwM2VncHRwX2Nsayk7XFxuK1xcbitcXHRyZXR1cm4gcmF2Yl9jb21wdXRlX2d0aShuZGV2LCBwcml2LVxcdTAwM2VncHRwX2Nsayk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9yenYybV9wdHBfaW5mbyA9IHtcXG4rXFx0LnByb2JlID0gcmF2Yl9yenYybV9wdHBfcHJvYmUsXFxuK1xcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsXFxuK1xcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcXG4rXFx0LmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LFxcbitcXHQuZG1hY19zdG9wID0gcmF2Yl9wdHBfc3RvcCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHtcXG4gXFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXFxuIFxcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcXG5AQCAtMjc3OSw4ICsyODcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9yenYybV9od19pbmZvID0ge1xcbiBcXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcXG4gXFx0Lm11bHRpX2lycXMgPSAxLFxcbiBcXHQuZXJyX21nbXRfaXJxcyA9IDEsXFxuLVxcdC5ncHRwID0gMSxcXG4tXFx0LmdwdHBfcmVmX2NsayA9IDEsXFxuK1xcdC5wdHAgPSBcXHUwMDI2cmF2Yl9yenYybV9wdHBfaW5mbyxcXG4gXFx0Lm5jX3F1ZXVlcyA9IDEsXFxuIFxcdC5tYWdpY19wa3QgPSAxLFxcbiB9O1xcbkBAIC0yOTcwLDEyICszMDYxLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VncHRwX3JlZl9jbGspIHtcXG4tXFx0XFx0cHJpdi1cXHUwMDNlZ3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImdwdHBcXFwiKTtcXG4tXFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VncHRwX2NsaykpIHtcXG4tXFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKHByaXYtXFx1MDAzZWdwdHBfY2xrKTtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZXByb2JlKSB7XFxuK1xcdFxcdGVycm9yID0gaW5mby1cXHUwMDNlcHRwLVxcdTAwM2Vwcm9iZShuZGV2KTtcXG4rXFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XFxuLVxcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cHJpdi1cXHUwMDNlcmVmY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJyZWZjbGtcXFwiKTtcXG5AQCAtMzAyOCwxMCArMzExNyw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRuZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnJhdmJfbmV0ZGV2X29wcztcXG4gXFx0bmRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2cmF2Yl9ldGh0b29sX29wcztcXG4gXFxuLVxcdGVycm9yID0gcmF2Yl9jb21wdXRlX2d0aShuZGV2KTtcXG4tXFx0aWYgKGVycm9yKVxcbi1cXHRcXHRnb3RvIG91dF9ycG1fcHV0O1xcbi1cXG4gXFx0cmF2Yl9wYXJzZV9kZWxheV9tb2RlKG5wLCBuZGV2KTtcXG4gXFxuIFxcdC8qIEFsbG9jYXRlIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzIHRhYmxlICovXFxuQEAgLTMxNTQsNiArMzIzOSw3IEBAIHN0YXRpYyB2b2lkIHJhdmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdHBtX3J1bnRpbWVfZGlzYWJsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFx0cG1fcnVudGltZV9kb250X3VzZV9hdXRvc3VzcGVuZChkZXYpO1xcbiBcXHRjbGtfdW5wcmVwYXJlKHByaXYtXFx1MDAzZXJlZmNsayk7XFxuK1xcdG9mX25vZGVfcHV0KHByaXYtXFx1MDAzZW9mX2dwdHApO1xcbiBcXHRyZXNldF9jb250cm9sX2Fzc2VydChwcml2LVxcdTAwM2Vyc3RjKTtcXG4gXFx0ZnJlZV9uZXRkZXYobmRldik7XFxuIFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbkBAIC0zMTc5LDkgKzMyNjUsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHQvKiBFbmFibGUgTWFnaWNQYWNrZXQgKi9cXG4gXFx0cmF2Yl9tb2RpZnkobmRldiwgRUNNUiwgRUNNUl9NUERFLCBFQ01SX01QREUpO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNjY19nYWMpXFxuLVxcdFxcdHJhdmJfcHRwX3N0b3AobmRldik7XFxuLVxcbiBcXHRyZXR1cm4gZW5hYmxlX2lycV93YWtlKHByaXYtXFx1MDAzZWVtYWNfaXJxKTtcXG4gfVxcbiBcXG5AQCAtMzIwMSw5ICszMjg0LDYgQEAgc3RhdGljIGludCByYXZiX3dvbF9yZXN0b3JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuLVxcdGlmIChwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VjY2NfZ2FjKVxcbi1cXHRcXHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXFx1MDAzZXBkZXYpO1xcbi1cXG4gXFx0aWYgKGluZm8tXFx1MDAzZW5jX3F1ZXVlcylcXG4gXFx0XFx0bmFwaV9lbmFibGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGlbUkFWQl9OQ10pO1xcbiBcXHRuYXBpX2VuYWJsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaVtSQVZCX0JFXSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xcbmluZGV4IDIyNmM2YzBhYjk0NWIuLjQ3M2EyYWVkYjc0NWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXFxuQEAgLTMxMiwyMiArMzEyLDM5IEBAIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRyYXZiX3dyaXRlKG5kZXYsIH4oZ2lzIHwgR0lTX1JFU0VSVkVEKSwgR0lTKTtcXG4gfVxcbiBcXG4tdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbitpbnQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0cHJpdi1cXHUwMDNlcHRwLmluZm8gPSByYXZiX3B0cF9pbmZvO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kID0gcmF2Yl9yZWFkKG5kZXYsIEdUSSk7XFxuK1xcdHByaXYtXFx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHByaXYtXFx1MDAzZWd0aV90aXY7XFxuIFxcdHByaXYtXFx1MDAzZXB0cC5jdXJyZW50X2FkZGVuZCA9IHByaXYtXFx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZDtcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKiBTZXQgZ1BUUCBUaW1lciBJbmNyZW1lbnQgVmFsdWUuICovXFxuK1xcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kLCBHVEkpO1xcbitcXG4rXFx0LyogUmVxdWVzdCBHVEkgbG9hZGluZy4gKi9cXG4rXFx0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIEdJVCBsb2FkaW5nIHRvIGNvbXBsZXRlLiAqL1xcbiBcXHRyYXZiX3dhaXQobmRldiwgR0NDUiwgR0NDUl9UQ1IsIEdDQ1JfVENSX05PUkVRKTtcXG4rXFxuIFxcdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfVENTUywgR0NDUl9UQ1NTX0FESkdQVFApO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRwcml2LVxcdTAwM2VwdHAuY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZXB0cC5pbmZvLCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0cHJpdi1cXHUwMDNlcHRwLmNsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFxcdTAwMjZwcml2LVxcdTAwM2VwdHAuaW5mbywgXFx1MDAyNnByaXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlcHRwLmNsb2NrKSkge1xcbitcXHRcXHRyZXQgPSBQVFJfRVJSKHByaXYtXFx1MDAzZXB0cC5jbG9jayk7XFxuK1xcdFxcdHByaXYtXFx1MDAzZXB0cC5jbG9jayA9IE5VTEw7XFxuK1xcdFxcdHJhdmJfcHRwX3N0b3AobmRldik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG5AQCAtMzM3LDUgKzM1NCw2IEBAIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0cmF2Yl93cml0ZShuZGV2LCAwLCBHSUMpO1xcbiBcXHRyYXZiX3dyaXRlKG5kZXYsIDAsIEdJUyk7XFxuIFxcbi1cXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcihwcml2LVxcdTAwM2VwdHAuY2xvY2spO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcHRwLmNsb2NrKVxcbitcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcihwcml2LVxcdTAwM2VwdHAuY2xvY2spO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQxOjM0Ljg5NDYwOTE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjUzNjIwNzkyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBnUFRQIHN1cHBvcnQgaW4gdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChyYXZiKSBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBHZW40IGdQVFAgYW5kIGludHJvZHVjaW5nIGEgc3RydWN0IGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBjYWxsYmFja3MuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIGZvciBSZW5lc2FzIFItQ2FyIFNvQ3MuIFRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgdGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyB0byBwcm9iZS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkY2M3MDVmZmU4ZWJiZjY2OWM3OTMyZTY0MmE2MWQ1MGE1MWMwODAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDE6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG5pbmRleCAxZTAwZWY1YjNhY2RhLi5mYWQwMDI0OTI0MjFhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG5AQCAtOTcsNiArOTcsOCBAQCBwcm9wZXJ0aWVzOlxuIFxuICAgcGh5LWhhbmRsZTogdHJ1ZVxuIFxuKyAgcHRwLXRpbWVyOiB0cnVlXG4rXG4gICAnI2FkZHJlc3MtY2VsbHMnOlxuICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy5cbiAgICAgY29uc3Q6IDFcbkBAIC0zMDUsNiArMzA3LDE1IEBAIGFsbE9mOlxuICAgICAgICAgICAgIGl0ZW1zOlxuICAgICAgICAgICAgICAgLSBjb25zdDogZmNrXG4gICAgICAgICAgICAgICAtIGNvbnN0OiByZWZjbGtcbisgIC0gaWY6XG4rICAgICAgbm90OlxuKyAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICAgIGNvbnN0OiByZW5lc2FzLGV0aGVyYXZiLXJjYXItZ2VuNFxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBwdHAtdGltZXI6IGZhbHNlXG4gXG4gYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuaW5kZXggNWU1NmVjOWIxMDEzYS4uNGM4ZGMwMjAyMmUyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuQEAgLTI0OSw2ICsyNDksOCBAQCBlbnVtIEFQU1JfQklUIHtcbiBcdEFQU1JfUkRNXHQ9IDB4MDAwMDIwMDAsXG4gXHRBUFNSX1RETVx0PSAweDAwMDA0MDAwLFxuIFx0QVBTUl9NSUlTRUxFQ1RcdD0gMHgwMTAwMDAwMCxcdC8qIFItQ2FyIFY0TSBvbmx5ICovXG4rXHRBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgPSBCSVQoMjUpLCAvKiBHZW40ICovXG4rXHRBUFNSX0dQVFBDTE9DS1x0PSBCSVQoMjkpLFx0LyogR2VuNCAqL1xuIH07XG4gXG4gLyogUkNSICovXG5AQCAtMTAzNCw2ICsxMDM2LDMxIEBAIHN0cnVjdCByYXZiX3B0cCB7XG4gXHRzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHBlcm91dFtOX1BFUl9PVVRdO1xuIH07XG4gXG4rLyoqXG4rICogc3RydWN0IHJhdmJfZ3B0cF9pbmZvIC0gUGxhdGZvcm0gc3BlY2lmaWMgZ1BUUCBiZWhhdmlvclxuKyAqXG4rICogRWFjaCBnZW5lcmF0aW9uIG9mIFJBVkIgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgYmVoYXZpb3JzIHdoZW4gaW50ZXJhY3RpbmdcbisgKiB3aXRoIHRoZSBnUFRQIGNsb2NrLiBUaGlzIHN0cnVjdCBwcm92aWRlcyB0aGUgY2FsbGJhY2tzIHRvIGJlIGNhbGxlZCBhdFxuKyAqIGNyaXRpY2FsIHBvaW50cyBpbiB0aGUgUkFWQiBkcml2ZXIuXG4rICpcbisgKiBAcHJvYmU6XHRcdFByb2JlIHRoZSBnUFRQIGNsb2NrXG4rICogQGNsb2NrX2luZGV4Olx0R2V0IHRoZSBQVFAgY2xvY2sgaW5kZXgsIGlmIGFueVxuKyAqIEBzZXRfY29uZmlnX21vZGU6XHRFbnRlciBjb25maWcgbW9kZVxuKyAqIEBkbWFjX3N0YXJ0Olx0XHRDYWxsZWQgd2hlbiB0aGUgRE1BQyBzdGFydHNcbisgKiBAZG1hY19zdG9wOlx0XHRDYWxsZWQgd2hlbiB0aGUgRE1BQyBzdG9wc1xuKyAqIEBuZGV2X29wZW46XHRcdENhbGxlZCB3aGVuIHRoZSBuZGV2IGlzIG9wZW5lZFxuKyAqIEBuZGV2X2Nsb3NlOlx0XHRDYWxsZWQgd2hlbiB0aGUgbmRldiBpcyBjbG9zZWRcbisgKi9cbitzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8ge1xuK1x0aW50ICgqcHJvYmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitcdGludCAoKmNsb2NrX2luZGV4KShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rXHRpbnQgKCpzZXRfY29uZmlnX21vZGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitcdGludCAoKmRtYWNfc3RhcnQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitcdHZvaWQgKCpkbWFjX3N0b3ApKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitcdGludCAoKm5kZXZfb3Blbikoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuK1x0dm9pZCAoKm5kZXZfY2xvc2UpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbit9O1xuK1xuIHN0cnVjdCByYXZiX2h3X2luZm8ge1xuIFx0aW50ICgqcmVjZWl2ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBidWRnZXQsIGludCBxKTtcbiBcdHZvaWQgKCpzZXRfcmF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuQEAgLTEwNTIsNiArMTA3OSw3IEBAIHN0cnVjdCByYXZiX2h3X2luZm8ge1xuIFx0dTMyIHJ4X2J1ZmZlcl9zaXplO1xuIFx0dTMyIHJ4X2Rlc2Nfc2l6ZTtcbiBcdHUzMiBkYmF0X2VudHJ5X251bTtcbitcdGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyAqcHRwOyAvKiBDYWxsYmFja3MgdG8gaGFuZGxlIGdQVFAgaW50ZXJhY3Rpb25zLiAqL1xuIFx0dW5zaWduZWQgYWxpZ25lZF90eDogMTtcbiBcdHVuc2lnbmVkIGNvYWxlc2NlX2lycXM6MTtcdC8qIE5lZWRzIHNvZnR3YXJlIElSUSBjb2FsZXNjaW5nICovXG4gXG5AQCAtMTA2Miw5ICsxMDkwLDYgQEAgc3RydWN0IHJhdmJfaHdfaW5mbyB7XG4gXHR1bnNpZ25lZCBtdWx0aV9pcnFzOjE7XHRcdC8qIEFWQi1ETUFDIGFuZCBFLU1BQyBoYXMgbXVsdGlwbGUgaXJxcyAqL1xuIFx0dW5zaWduZWQgaXJxX2VuX2RpczoxO1x0XHQvKiBIYXMgc2VwYXJhdGUgaXJxIGVuYWJsZSBhbmQgZGlzYWJsZSByZWdzICovXG4gXHR1bnNpZ25lZCBlcnJfbWdtdF9pcnFzOjE7XHQvKiBMaW5lMSAoRXJyKSBhbmQgTGluZTIgKE1nbXQpIGlycXMgYXJlIHNlcGFyYXRlICovXG4tXHR1bnNpZ25lZCBncHRwOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgKi9cbi1cdHVuc2lnbmVkIGNjY19nYWM6MTtcdFx0LyogQVZCLURNQUMgaGFzIGdQVFAgc3VwcG9ydCBhY3RpdmUgaW4gY29uZmlnIG1vZGUgKi9cbi1cdHVuc2lnbmVkIGdwdHBfcmVmX2NsazoxO1x0LyogZ1BUUCBoYXMgc2VwYXJhdGUgcmVmZXJlbmNlIGNsb2NrICovXG4gXHR1bnNpZ25lZCBuY19xdWV1ZXM6MTtcdFx0LyogQVZCLURNQUMgaGFzIFJYIGFuZCBUWCBOQyBxdWV1ZXMgKi9cbiBcdHVuc2lnbmVkIG1hZ2ljX3BrdDoxO1x0XHQvKiBFLU1BQyBzdXBwb3J0cyBtYWdpYyBwYWNrZXQgZGV0ZWN0aW9uICovXG4gXHR1bnNpZ25lZCBoYWxmX2R1cGxleDoxO1x0XHQvKiBFLU1BQyBzdXBwb3J0cyBoYWxmIGR1cGxleCBtb2RlICovXG5AQCAtMTEwOSw2ICsxMTM0LDcgQEAgc3RydWN0IHJhdmJfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHRzX3NrYl9saXN0O1xuIFx0dTMyIHRzX3NrYl90YWc7XG4gXHRzdHJ1Y3QgcmF2Yl9wdHAgcHRwO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpvZl9ncHRwO1x0LyogUmVmZXJlbmNlIHRvIGV4dGVybmFsIGdQVFAgY2xvY2ssIGlmIGFueS4gKi9cbiBcdHNwaW5sb2NrX3QgbG9jaztcdFx0LyogUmVnaXN0ZXIgYWNjZXNzIGxvY2sgKi9cbiBcdHUzMiBjdXJfcnhbTlVNX1JYX1FVRVVFXTtcdC8qIENvbnN1bWVyIHJpbmcgaW5kaWNlcyAqL1xuIFx0dTMyIGRpcnR5X3J4W05VTV9SWF9RVUVVRV07XHQvKiBQcm9kdWNlciByaW5nIGluZGljZXMgKi9cbkBAIC0xMTYwLDcgKzExODYsNyBAQCB2b2lkIHJhdmJfbW9kaWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIGNsZWFyLFxuIGludCByYXZiX3dhaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTtcbiBcbiB2b2lkIHJhdmJfcHRwX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4tdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcbitpbnQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gdm9pZCByYXZiX3B0cF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiBcbiAjZW5kaWZcdC8qICNpZm5kZWYgX19SQVZCX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXG5pbmRleCA1Zjg4NzMzMDk0ZDBmLi4zMDE3MGU5MmQzZDcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xuQEAgLTcwNyw3ICs3MDcsMTUgQEAgc3RhdGljIGludCByYXZiX2RtYWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuIFx0LyogU2V0dGluZyB0aGUgY29udHJvbCB3aWxsIHN0YXJ0IHRoZSBBVkItRE1BQyBwcm9jZXNzLiAqL1xuLVx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XG4rXHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbitcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuK1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VkbWFjX3N0YXJ0KVxuK1x0XHRyZXR1cm4gaW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdGFydChuZGV2KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByYXZiX2dldF90eF90c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5AQCAtMTExNSw2ICsxMTIzLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9zdG9wX2RtYShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwiZmFpbGVkIHRvIHN0b3AgQVhJIEJVU1xcblwiKTtcbiBcdH1cbiBcbitcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuK1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VkbWFjX3N0b3ApXG4rXHRcdGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RvcChuZGV2KTtcbitcbiBcdC8qIFN0b3AgQVZCLURNQUMgcHJvY2VzcyAqL1xuIFx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4gfVxuQEAgLTE3MTksOSArMTczMSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0aWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHtcbiBcdFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTtcbi1cdFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRcdGlmIChpbmZvLVx1MDAzZWdwdHApXG4tXHRcdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbitcbiBcdFx0LyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovXG4gXHRcdGVycm9yID0gcmF2Yl9zdG9wX2RtYShuZGV2KTtcbiBcdFx0aWYgKGVycm9yKSB7XG5AQCAtMTc1MiwxMCArMTc2Miw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0XHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcbiBcbi1cdFx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRcdGlmIChpbmZvLVx1MDAzZWdwdHApXG4tXHRcdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuLVxuIFx0XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpO1xuIFx0fVxuIFxuQEAgLTE3NjcsOCArMTc3MywxMyBAQCBzdGF0aWMgaW50IHJhdmJfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaHdfaW5mbyA9IHByaXYtXHUwMDNlaW5mbztcbitcdGludCBpbmRleCA9IC0xO1xuK1xuK1x0aWYgKGh3X2luZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBod19pbmZvLVx1MDAzZXB0cC1cdTAwM2VjbG9ja19pbmRleClcbitcdFx0aW5kZXggPSBod19pbmZvLVx1MDAzZXB0cC1cdTAwM2VjbG9ja19pbmRleChuZGV2KTtcbiBcbi1cdGlmIChod19pbmZvLVx1MDAzZWdwdHAgfHwgaHdfaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4rXHQvKiBPbmx5IGFkdmVydGlzZSBwdHAgY2xvY2sgaWYgcHJlc2VudC4gKi9cbitcdGlmIChpbmRleCBcdTAwM2U9IDApIHtcbiBcdFx0aW5mby1cdTAwM2Vzb190aW1lc3RhbXBpbmcgPVxuIFx0XHRcdFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfFxuIFx0XHRcdFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuQEAgLTE3NzksNyArMTc5MCw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0XHQoMSBcdTAwM2NcdTAwM2MgSFdUU1RBTVBfRklMVEVSX05PTkUpIHxcbiBcdFx0XHQoMSBcdTAwM2NcdTAwM2MgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVCkgfFxuIFx0XHRcdCgxIFx1MDAzY1x1MDAzYyBIV1RTVEFNUF9GSUxURVJfQUxMKTtcbi1cdFx0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBwdHBfY2xvY2tfaW5kZXgocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuK1x0XHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IGluZGV4O1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTgyNiw1NSArMTgzNywyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJhdmJfZXRodG9vbF9vcHMgPSB7XG4gfTtcbiBcbiBzdGF0aWMgaW50IHJhdmJfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLXtcbi1cdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4tXHRpbnQgZXJyb3I7XG4tXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKSB7XG4tXHRcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdHJldHVybiBlcnJvcjtcbi1cdFx0LyogU2V0IENTRUwgdmFsdWUgKi9cbi1cdFx0cmF2Yl9tb2RpZnkobmRldiwgQ0NDLCBDQ0NfQ1NFTCwgQ0NDX0NTRUxfSFBCKTtcbi1cdH0gZWxzZSBpZiAoaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4tXHRcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XG4tXHR9IGVsc2Uge1xuLVx0XHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyb3I7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJhdmJfc2V0X2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi1cdTAwM2VpbmZvO1xuIFxuLVx0aWYgKCEoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYykpXG4tXHRcdHJldHVybjtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlc2V0X2NvbmZpZ19tb2RlKVxuK1x0XHRyZXR1cm4gaW5mby1cdTAwM2VwdHAtXHUwMDNlc2V0X2NvbmZpZ19tb2RlKG5kZXYpO1xuIFxuLVx0cmF2Yl93cml0ZShuZGV2LCBwcml2LVx1MDAzZWd0aV90aXYsIEdUSSk7XG4tXG4tXHQvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nICovXG4tXHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX0xUSSwgR0NDUl9MVEkpO1xuK1x0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbitzdGF0aWMgaW50IHJhdmJfY29tcHV0ZV9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjbGsgKmNsaylcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi1cdTAwM2VpbmZvO1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gbmRldi1cdTAwM2VkZXYucGFyZW50O1xuIFx0dW5zaWduZWQgbG9uZyByYXRlO1xuIFx0dTY0IGluYztcbiBcbi1cdGlmICghKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHBfcmVmX2Nsaylcbi1cdFx0cmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVx1MDAzZWdwdHBfY2xrKTtcbi1cdGVsc2Vcbi1cdFx0cmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVx1MDAzZWNsayk7XG4rXHRyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4gXHRpZiAoIXJhdGUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTE5NzQsMTEgKzE5NTQsMTIgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXG4gXHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcbiBcbi1cdHJhdmJfc2V0X2d0aShuZGV2KTtcbi1cbiBcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cdTAwM2VwZGV2KTtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9vcGVuKSB7XG4rXHRcdGVycm9yID0gaW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9vcGVuKG5kZXYpO1xuK1x0XHRpZiAoZXJyb3IpXG4rXHRcdFx0Z290byBvdXRfcHRwX3N0b3A7XG4rXHR9XG4gXG4gXHQvKiBQSFkgY29udHJvbCBzdGFydCAqL1xuIFx0ZXJyb3IgPSByYXZiX3BoeV9zdGFydChuZGV2KTtcbkBAIC0xOTkwLDkgKzE5NzEsNiBAQCBzdGF0aWMgaW50IHJhdmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHJldHVybiAwO1xuIFxuIG91dF9wdHBfc3RvcDpcbi1cdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4gXHRyYXZiX3N0b3BfZG1hKG5kZXYpO1xuIG91dF9zZXRfcmVzZXQ6XG4gXHRyYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19SRVNFVCk7XG5AQCAtMjAzNiwxMCArMjAxNCw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZGV2KTtcbiBcbi1cdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cClcbi1cdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbi1cbiBcdC8qIFdhaXQgZm9yIERNQSBzdG9wcGluZyAqL1xuIFx0aWYgKHJhdmJfc3RvcF9kbWEobmRldikpIHtcbiBcdFx0LyogSWYgcmF2Yl9zdG9wX2RtYSgpIGZhaWxzLCB0aGUgaGFyZHdhcmUgaXMgc3RpbGwgb3BlcmF0aW5nXG5AQCAtMjA3MiwxMCArMjA0Niw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJhdmJfZW1hY19pbml0KG5kZXYpO1xuIFxuIG91dDpcbi1cdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cClcbi1cdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuLVxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZGV2KTtcbiBcbiBvdXRfdW5sb2NrOlxuQEAgLTIyMDgsNyArMjE3OCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByYXZiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRkZXNjLVx1MDAzZWRwdHIgPSBjcHVfdG9fbGUzMihkbWFfYWRkcik7XG4gXG4gXHQvKiBUWCB0aW1lc3RhbXAgcmVxdWlyZWQgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VwdHApIHtcbiBcdFx0aWYgKHEgPT0gUkFWQl9OQykge1xuIFx0XHRcdHRzX3NrYiA9IGttYWxsb2Nfb2JqKCp0c19za2IsIEdGUF9BVE9NSUMpO1xuIFx0XHRcdGlmICghdHNfc2tiKSB7XG5AQCAtMjM5MCw4ICsyMzYwLDggQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0fVxuIFxuIFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYylcbi1cdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9jbG9zZSlcbitcdFx0aW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9jbG9zZShuZGV2KTtcbiBcbiBcdC8qIFNldCB0aGUgY29uZmlnIG1vZGUgdG8gc3RvcCB0aGUgQVZCLURNQUMncyBwcm9jZXNzZXMgKi9cbiBcdGlmIChyYXZiX3N0b3BfZG1hKG5kZXYpIFx1MDAzYyAwKVxuQEAgLTIzOTksNyArMjM2OSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0XHQgICBcImRldmljZSB3aWxsIGJlIHN0b3BwZWQgYWZ0ZXIgaC93IHByb2Nlc3NlcyBhcmUgZG9uZS5cXG5cIik7XG4gXG4gXHQvKiBDbGVhciB0aGUgdGltZXN0YW1wIGxpc3QgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VwdHApIHtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRzX3NrYiwgdHNfc2tiMiwgXHUwMDI2cHJpdi1cdTAwM2V0c19za2JfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNnRzX3NrYi1cdTAwM2VsaXN0KTtcbiBcdFx0XHRrZnJlZV9za2IodHNfc2tiLVx1MDAzZXNrYik7XG5AQCAtMjY4MSw2ICsyNjUxLDQyIEBAIHN0YXRpYyBpbnQgcmF2Yl9tZGlvX3JlbGVhc2Uoc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cdTAwM2VjbGspO1xuK31cbitcbitzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0cmV0dXJuIHB0cF9jbG9ja19pbmRleChwcml2LVx1MDAzZXB0cC5jbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogZ1BUUCBDbG9jayBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi9cbitcdHJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjJfcHRwX2luZm8gPSB7XG4rXHQucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLFxuK1x0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCxcbitcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcbitcdC5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCxcbitcdC5kbWFjX3N0b3AgPSByYXZiX3B0cF9zdG9wLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4yX2h3X2luZm8gPSB7XG4gXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcbiBcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcbkBAIC0yNjk5LDEyICsyNzA1LDI2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuMl9od19pbmZvID0ge1xuIFx0XHRcdCAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSxcbiBcdC5yeF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IHJhdmJfZXhfcnhfZGVzYyksXG4gXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcbitcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjJfcHRwX2luZm8sXG4gXHQuYWxpZ25lZF90eCA9IDEsXG4tXHQuZ3B0cCA9IDEsXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG4gXG4rc3RhdGljIGludCByYXZiX2dlbjNfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHQvKiBFbmFibGUgZ1BUUCBDbG9jayBhbmQgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXG4rXHRyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW4zX3B0cF9pbmZvID0ge1xuK1x0LnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSxcbitcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsXG4rXHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4zX3B0cF9zZXRfY29uZmlnX21vZGUsXG4rXHQubmRldl9vcGVuID0gcmF2Yl9wdHBfaW5pdCxcbitcdC5uZGV2X2Nsb3NlID0gcmF2Yl9wdHBfc3RvcCxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuM19od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjcyMywxNSArMjc0Myw2OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHtcbiBcdFx0XHQgIFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSksXG4gXHQucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLFxuIFx0LmRiYXRfZW50cnlfbnVtID0gMjIsXG4rXHQucHRwID0gXHUwMDI2cmF2Yl9nZW4zX3B0cF9pbmZvLFxuIFx0LmludGVybmFsX2RlbGF5ID0gMSxcbiBcdC50eF9jb3VudGVycyA9IDEsXG4gXHQubXVsdGlfaXJxcyA9IDEsXG4gXHQuaXJxX2VuX2RpcyA9IDEsXG4tXHQuY2NjX2dhYyA9IDEsXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG4gXG4rc3RhdGljIGludCByYXZiX2dlbjRfcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdHByaXYtXHUwMDNlb2ZfZ3B0cCA9XG4rXHRcdG9mX3BhcnNlX3BoYW5kbGUocHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcInB0cC10aW1lclwiLCAwKTtcbitcdGlmICghcHJpdi1cdTAwM2VvZl9ncHRwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwcml2LVx1MDAzZW9mX2dwdHApKSB7XG4rXHRcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4rXHRcdHByaXYtXHUwMDNlb2ZfZ3B0cCA9IE5VTEw7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHQvKiBJZiBubyBjbG9jaywgbWltaWMgcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUoKSBmYWlsIGFuZCByZXR1cm4gLTEgKi9cbitcdGlmICghcHJpdi1cdTAwM2VvZl9ncHRwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUocHJpdi1cdTAwM2VvZl9ncHRwKTtcbit9XG4rXG4rc3RhdGljIGludCByYXZiX2dlbjRfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xuK1x0cmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogU2V0IFBUUCBzb3VyY2UgdG8gR1BUUCBtb2R1bGUsIG9ubHkgb3B0aW9uIG9uIEdlbjQuICovXG4rXHRpZiAocHJpdi1cdTAwM2VvZl9ncHRwKVxuK1x0XHRyYXZiX21vZGlmeShuZGV2LCBBUFNSLCBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyxcbitcdFx0XHQgICAgQVBTUl9HUFRQVElNRVJfU09VUkNFIHwgQVBTUl9HUFRQQ0xPQ0spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW40X3B0cF9pbmZvID0ge1xuK1x0LnByb2JlID0gcmF2Yl9nZW40X3B0cF9wcm9iZSxcbitcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgsXG4rXHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjRfaHdfaW5mbyA9IHtcbiBcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxuIFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxuQEAgLTI3NTQsMTEgKzI4MjcsMzAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW40X2h3X2luZm8gPSB7XG4gXHQudHhfY291bnRlcnMgPSAxLFxuIFx0Lm11bHRpX2lycXMgPSAxLFxuIFx0LmlycV9lbl9kaXMgPSAxLFxuLVx0LmNjY19nYWMgPSAxLFxuK1x0LnB0cCA9IFx1MDAyNnJhdmJfZ2VuNF9wdHBfaW5mbyxcbiBcdC5uY19xdWV1ZXMgPSAxLFxuIFx0Lm1hZ2ljX3BrdCA9IDEsXG4gfTtcbiBcbitzdGF0aWMgaW50IHJhdmJfcnp2Mm1fcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdHByaXYtXHUwMDNlZ3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJncHRwXCIpO1xuK1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWdwdHBfY2xrKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VncHRwX2Nsayk7XG4rXG4rXHRyZXR1cm4gcmF2Yl9jb21wdXRlX2d0aShuZGV2LCBwcml2LVx1MDAzZWdwdHBfY2xrKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX3J6djJtX3B0cF9pbmZvID0ge1xuK1x0LnByb2JlID0gcmF2Yl9yenYybV9wdHBfcHJvYmUsXG4rXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxuK1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlLFxuK1x0LmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LFxuK1x0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX3J6djJtX2h3X2luZm8gPSB7XG4gXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcbiBcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcbkBAIC0yNzc5LDggKzI4NzEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX3J6djJtX2h3X2luZm8gPSB7XG4gXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5lcnJfbWdtdF9pcnFzID0gMSxcbi1cdC5ncHRwID0gMSxcbi1cdC5ncHRwX3JlZl9jbGsgPSAxLFxuK1x0LnB0cCA9IFx1MDAyNnJhdmJfcnp2Mm1fcHRwX2luZm8sXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG5AQCAtMjk3MCwxMiArMzA2MSwxMCBAQCBzdGF0aWMgaW50IHJhdmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0Z290byBvdXRfcmVzZXRfYXNzZXJ0O1xuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cF9yZWZfY2xrKSB7XG4tXHRcdHByaXYtXHUwMDNlZ3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiZ3B0cFwiKTtcbi1cdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZWdwdHBfY2xrKSkge1xuLVx0XHRcdGVycm9yID0gUFRSX0VSUihwcml2LVx1MDAzZWdwdHBfY2xrKTtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlcHJvYmUpIHtcbitcdFx0ZXJyb3IgPSBpbmZvLVx1MDAzZXB0cC1cdTAwM2Vwcm9iZShuZGV2KTtcbitcdFx0aWYgKGVycm9yKVxuIFx0XHRcdGdvdG8gb3V0X3Jlc2V0X2Fzc2VydDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0cHJpdi1cdTAwM2VyZWZjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWwoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwicmVmY2xrXCIpO1xuQEAgLTMwMjgsMTAgKzMxMTcsNiBAQCBzdGF0aWMgaW50IHJhdmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnJhdmJfbmV0ZGV2X29wcztcbiBcdG5kZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZyYXZiX2V0aHRvb2xfb3BzO1xuIFxuLVx0ZXJyb3IgPSByYXZiX2NvbXB1dGVfZ3RpKG5kZXYpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIG91dF9ycG1fcHV0O1xuLVxuIFx0cmF2Yl9wYXJzZV9kZWxheV9tb2RlKG5wLCBuZGV2KTtcbiBcbiBcdC8qIEFsbG9jYXRlIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzIHRhYmxlICovXG5AQCAtMzE1NCw2ICszMjM5LDcgQEAgc3RhdGljIHZvaWQgcmF2Yl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHBtX3J1bnRpbWVfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XG4gXHRjbGtfdW5wcmVwYXJlKHByaXYtXHUwMDNlcmVmY2xrKTtcbitcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4gXHRyZXNldF9jb250cm9sX2Fzc2VydChwcml2LVx1MDAzZXJzdGMpO1xuIFx0ZnJlZV9uZXRkZXYobmRldik7XG4gXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbkBAIC0zMTc5LDkgKzMyNjUsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0LyogRW5hYmxlIE1hZ2ljUGFja2V0ICovXG4gXHRyYXZiX21vZGlmeShuZGV2LCBFQ01SLCBFQ01SX01QREUsIEVDTVJfTVBERSk7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4tXG4gXHRyZXR1cm4gZW5hYmxlX2lycV93YWtlKHByaXYtXHUwMDNlZW1hY19pcnEpO1xuIH1cbiBcbkBAIC0zMjAxLDkgKzMyODQsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3Jlc3RvcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGlmIChwcml2LVx1MDAzZWluZm8tXHUwMDNlY2NjX2dhYylcbi1cdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuLVxuIFx0aWYgKGluZm8tXHUwMDNlbmNfcXVldWVzKVxuIFx0XHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGlbUkFWQl9OQ10pO1xuIFx0bmFwaV9lbmFibGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpW1JBVkJfQkVdKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNcbmluZGV4IDIyNmM2YzBhYjk0NWIuLjQ3M2EyYWVkYjc0NWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xuQEAgLTMxMiwyMiArMzEyLDM5IEBAIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cmF2Yl93cml0ZShuZGV2LCB+KGdpcyB8IEdJU19SRVNFUlZFRCksIEdJUyk7XG4gfVxuIFxuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbitpbnQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRwcml2LVx1MDAzZXB0cC5pbmZvID0gcmF2Yl9wdHBfaW5mbztcbiBcbi1cdHByaXYtXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kID0gcmF2Yl9yZWFkKG5kZXYsIEdUSSk7XG4rXHRwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHByaXYtXHUwMDNlZ3RpX3RpdjtcbiBcdHByaXYtXHUwMDNlcHRwLmN1cnJlbnRfYWRkZW5kID0gcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQ7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdC8qIFNldCBnUFRQIFRpbWVyIEluY3JlbWVudCBWYWx1ZS4gKi9cbitcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQsIEdUSSk7XG4rXG4rXHQvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nLiAqL1xuK1x0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcbitcbitcdC8qIFdhaXQgZm9yIEdJVCBsb2FkaW5nIHRvIGNvbXBsZXRlLiAqL1xuIFx0cmF2Yl93YWl0KG5kZXYsIEdDQ1IsIEdDQ1JfVENSLCBHQ0NSX1RDUl9OT1JFUSk7XG4rXG4gXHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX1RDU1MsIEdDQ1JfVENTU19BREpHUFRQKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cC5pbmZvLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cC5pbmZvLCBcdTAwMjZwcml2LVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VwdHAuY2xvY2spKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuK1x0XHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IE5VTEw7XG4rXHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5AQCAtMzM3LDUgKzM1NCw2IEBAIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHJhdmJfd3JpdGUobmRldiwgMCwgR0lDKTtcbiBcdHJhdmJfd3JpdGUobmRldiwgMCwgR0lTKTtcbiBcbi1cdHB0cF9jbG9ja191bnJlZ2lzdGVyKHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbitcdGlmIChwcml2LVx1MDAzZXB0cC5jbG9jaylcbitcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQxOjM0Ljg5NDYxMDM1MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjMyMjU5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgZ1BUUCBSZWZhY3RvcmluZyBpbiB0aGUgUmVuZXNhcyBSQVZCIERyaXZlcioqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0aGF0J3MgcmVmYWN0b3JpbmcgdGhlIGdQVFAgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYHJhdmJgIGRyaXZlci4gSXQncyBhZGRpbmcgYSBuZXcgYHJhdmJfZ3B0cF9pbmZvYCBzdHJ1Y3QgYW5kIGNhbGxiYWNrIGZ1bmN0aW9ucyB0byBoYW5kbGUgcGxhdGZvcm0tc3BlY2lmaWMgZ1BUUCBiZWhhdmlvciwgaW5jbHVkaW5nIHN1cHBvcnQgZm9yIEdlbjQgZ1BUUCB1c2luZyBhbiBleHRlcm5hbCBQVFAgdGltZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyByZWFjaGFiaWxpdHkg4oCTIGNhbiB0aGlzIGNvZGUgYWN0dWFsbHkgKmJlKiB0cmlnZ2VyZWQgaW4gYSByZWFsaXN0aWMgZW52aXJvbm1lbnQ/XG5cbkdpdmVuIHRoZSBkcml2ZXIgcGF0aCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2YmAsIGl0J3MgYWxtb3N0IGNlcnRhaW5seSB0aWVkIHRvIHBoeXNpY2FsIGhhcmR3YXJlLCBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXJzIGZvdW5kIGluIFJlbmVzYXMgUi1DYXIgU29Dcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHRoaXMgY2FuIGJlIHJlbGlhYmx5IGVtdWxhdGVkLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgZnVsbCBSLUNhciBTb0MgZW11bGF0aW9uIGluIHNvbWV0aGluZyBsaWtlIFFFTVUgY2FuIGJlIHBhdGNoeSBhdCBiZXN0LCBvciBpbmNyZWRpYmx5IHNwZWNpZmljIGluIGl0cyBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBRRU1VIHN1cHBvcnQgZm9yIFJlbmVzYXMgRXRoZXJuZXQgQVZCIHNwZWNpZmljYWxseS5cblxuV2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyICp1c3VhbGx5KiBkb2Vzbid0IGVtdWxhdGUgdGhlc2UgdHlwZXMgb2YgcGxhdGZvcm0gZGV2aWNlcyBpbiBpdHMgc3RhbmRhcmQgUUVNVSBzZXR1cCB1bmxlc3MgaXQncyBhIGdlbmVyaWMgUENJIGRldmljZSwgYW5kIHRoaXMgaXMgZGVmaW5pdGVseSBEVC1iYXNlZC4gVGhhdCBtZWFucyBpdCBtaWdodCBiZSBjaGFsbGVuZ2luZyB0byB0cmlnZ2VyIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIHRlc3RpbmcgZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgYWJvdXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3Igb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgcHJvdmlkZSBhIHdvcmthcm91bmQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBtZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGhhcmR3YXJlIGlzIHZpcnR1YWxpemFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjU3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDE6NDEuODE3ODM4MjY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTY2MTQ0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkFWQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnPTE5PWNvbmZpZyBTSF9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc6Mjk6Y29uZmlnIFJBVkJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgRXRoZXJuZXQgQVZCIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQxOjQyLjA2OTUwNTU1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODg3MTkyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgUkFWQidzIGRlcGVuZGVuY2llcywgYXMgdGhvdWdoIEkgd2VyZSBhbiBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgUkFWQioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBtZW50YWxseSBza2V0Y2hpbmcgb3V0IHRoZSBsYW5kc2NhcGUgb2YgUkFWQi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciBzeXN0ZW1zLCBsaWJyYXJpZXMsIG9yIGV4dGVybmFsIHJlc291cmNlcyBkb2VzIGl0IHJlbHkgb24gdG8gZnVuY3Rpb24/IElzIGl0IHRpZ2h0bHkgY291cGxlZCB0byBzb21lIHNwZWNpZmljIGluZnJhc3RydWN0dXJlLCBvciBpcyBpdCBkZXNpZ25lZCB3aXRoIGEgZGVncmVlIG9mIG1vZHVsYXJpdHk/IEknbSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqVW5kZXJseWluZyB0ZWNobm9sb2dpZXM6KiogRG9lcyBpdCBsZXZlcmFnZSBhIHBhcnRpY3VsYXIgZGF0YWJhc2UsIG1lc3NhZ2UgcXVldWUsIG9yIGNsb3VkIHBsYXRmb3JtPyBLbm93aW5nIHRoaXMgcXVpY2tseSBpbmRpY2F0ZXMgcG90ZW50aWFsIGludGVncmF0aW9uIHBhaW4gcG9pbnRzIG9yIHNjYWxhYmlsaXR5IGxpbWl0YXRpb25zLlxuKiAgICoqRXh0ZXJuYWwgQVBJcy9zZXJ2aWNlczoqKiBJcyBSQVZCIGRlcGVuZGVudCBvbiBvdGhlciBzeXN0ZW1zIG9yIHNlcnZpY2VzIG91dHNpZGUgaXRzIGRpcmVjdCBjb250cm9sPyBJZiBzbywgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGlhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhvc2UgZGVwZW5kZW5jaWVzLiBUaGlzIGFsc28gaGlnaGxpZ2h0cyBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbmNlcm5zIGFyaXNpbmcgZnJvbSB0aG9zZSBkZXBlbmRlbmNpZXMuXG4qICAgKipJbnRlcm5hbCBtb2R1bGVzIGFuZCBsaWJyYXJpZXM6KiogSG93IGlzIFJBVkIgc3RydWN0dXJlZCBpbnRlcm5hbGx5PyBBcmUgdGhlcmUgc3BlY2lmaWMgbW9kdWxlcyBvciBsaWJyYXJpZXMgdGhhdCBpdCBsZWFucyBoZWF2aWx5IG9uPyBVbmRlcnN0YW5kaW5nIHRoZXNlIGlubmVyIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMsIHJlZmFjdG9yaW5nLCBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLlxuKiAgICoqVmVyc2lvbmluZyBhbmQgQ29tcGF0aWJpbGl0eToqKiBXaGF0IHZlcnNpb25zIG9mIHRoZXNlIGRlcGVuZGVuY2llcyBhcmUgcmVxdWlyZWQgb3Igc3VwcG9ydGVkPyBBbnkgY29tcGF0aWJpbGl0eSBpc3N1ZXMgYW5kIHBvdGVudGlhbCBicmVha2luZyBjaGFuZ2VzIGJlY29tZSB2aXRhbCB0byBjb25zaWRlci5cbiogICAqKkNvbmZpZ3VyYXRpb246KiogSXMgaXRzIGJlaGF2aW9yIGRlcGVuZGVudCBvbiB0aGUgaW5wdXQgcGFyYW1ldGVycyB0byBSQVZCPyBXaGF0IHNwZWNpZmljIHR5cGVzIG9mIGlucHV0cyBhcmUgYWNjZXB0ZWQgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgZnVuY3Rpb25hbGl0eT9cbiogICAqKkRhdGEgRGVwZW5kZW5jaWVzOioqIFdoYXQgaXMgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YT9cblxuSSdtIGVzc2VudGlhbGx5IGJ1aWxkaW5nIGEgbWVudGFsIG1hcCBvZiBSQVZCJ3MgZWNvc3lzdGVtLCBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByaXNrcywgYW5kIGFyZWFzIG9mIGFyY2hpdGVjdHVyYWwgc3RyZW5ndGguIFRoaXMgaXMgdGhlIGdyb3VuZHdvcmsgZm9yIGFueSBzZXJpb3VzIGFuYWx5c2lzIG9yIGludGVydmVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MTo0Ni43NTgyMjc4MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjk6XFx0Y29uZmlnIFJBVkJcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZW5lc2FzIEV0aGVybmV0IEFWQiBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgfHwgQ09NUElMRV9URVNUXFxuICAzMjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAzMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDM0OlxcdFxcdHNlbGVjdCBNSUlcXG4gIDM1OlxcdFxcdHNlbGVjdCBNRElPX0JJVEJBTkdcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDM3OlxcdFxcdHNlbGVjdCBQSFlMSUJcXG4gIDM4OlxcdFxcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFJlbmVzYXMgRXRoZXJuZXQgQVZCIGRldmljZSBkcml2ZXIuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBSRU5FU0FTX0VUSEVSX1NXSVRDSFxcbiAgNDM6XFx0XFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgRXRoZXJuZXQgU3dpdGNoIHN1cHBvcnRcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfUkVORVNBUyB8fCBDT01QSUxFX1RFU1RcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQ2OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgNDc6XFx0XFx0c2VsZWN0IE1JSVxcbiAgNDg6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDE6NDYuNzU4Mjg3NTY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM0OTgzNjI3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPWZhbHNlOiBVbnJlYWNoYWJsZSBDb2RlIGluIFN0YW5kYXJkIEZ1enppbmcgRW52aXJvbm1lbnRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGFjY2Vzc2libGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcsIHBhcnRpY3VsYXJseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRvdWNoZXMgYHJhdmJfbWFpbi5jYCBhbmQgYHJhdmJfcHRwLmNgLCBidXQgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGxpZXMgaW4gdGhlIGRyaXZlciBpdHNlbGYsIGByYXZiX2RyaXZlcmAuICBJdCdzIGEgcGxhdGZvcm0gZHJpdmVyLiBQbGF0Zm9ybSBkcml2ZXJzLCBnZW5lcmFsbHksIGFyZSBhIHJlZCBmbGFnIGZvciBzdGFuZGFyZCBmdXp6aW5nLiBUaGV5IHJlbHkgb24gdGhlIHByZXNlbmNlIG9mIGEgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0gYW5kLCBjcml0aWNhbGx5LCB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2RlcyBmb3IgcHJvYmluZy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBwYXJ0aWN1bGFyIGRldmljZSwgUmVuZXNhcyBFdGhlcm5ldCBBVkIsIGlzIGxpa2VseSB0byBiZSBlbXVsYXRlZCBvciBldmVuIHJlcHJlc2VudGVkIGluIHN0YW5kYXJkIHNldHVwcy4gRnJvbSBwYXN0IGV4cGVyaWVuY2VzIGFuZCBsb29raW5nIGF0IHRoZSBkcml2ZXIgc3RydWN0dXJlIChgcmF2Yl9kcml2ZXJgKSwgdGhpcyBkcml2ZXIgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBSZW5lc2FzIFItQ2FyIFNvQ3MuICBUaGF0IG1lYW5zIGl04oCZcyBleHBlY3RpbmcgYSBkZXZpY2UgdHJlZSBub2RlIHdpdGggc29tZXRoaW5nIGxpa2UgYFwicmVuZXNhcyxldGhlcmF2Yi1yY2FyLWdlbjRcImAgYXMgYSBjb21wYXRpYmxlIHN0cmluZy5cblxuU3l6a2FsbGVyICpjYW4qIGZ1enogcGxhdGZvcm0gZGV2aWNlcywgYnV0IGl0IG5lZWRzIGEgc3BlY2lmaWMgbWVjaGFuaXNtOiBlaXRoZXIgaXQgd291bGQgbmVlZCB0byBpbmplY3QgZGV2aWNlIHRyZWUgbm9kZXMgb3IgdXNlIGEgc3BlY2lhbGl6ZWQgZnV6emVyLiBJdCdzIG5vdCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSd2ZSBjb25zaWRlcmVkIHRoYXQgYHN5el9kZXZfaW5pdGAgbWlnaHQgb2ZmZXIgYSBiYWNrZG9vciBvciB0aGF0IHN5emthbGxlcuKAmXMgZGV2aWNlIGRlc2NyaXB0aW9uIGdlbmVyYXRpb24gbWF5IGhlbHAsIGJ1dCB1c3VhbGx5IHRoYXQgb25seSB3b3JrcyBmb3IgZXhwbGljaXRseSBzdXBwb3J0ZWQgZGV2aWNlcyBvciBzdWJzeXN0ZW1zLlxuXG5DcnVjaWFsbHksIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIsICpub3QqIGEgUENJIG9yIFVTQiBkZXZpY2UuIFdpdGhvdXQgYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlLCB0aGlzIGNvZGUgd29uJ3QgYmUgcHJvYmVkIGluIGEgZGVmYXVsdCBRRU1VIHNldHVwLiBBbmQsIGxldCdzIGJlIHJlYWxpc3RpYywgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRSBvciB0aGUgdHlwaWNhbCBgcWVtdS1zeXN0ZW0teDg2XzY0YCBvciBgcWVtdS1zeXN0ZW0tYWFyY2g2NCAtbWFjaGluZSB2aXJ0YCBjb25maWd1cmF0aW9ucywgKmRvbid0KiBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgUmVuZXNhcyBoYXJkd2FyZS5cblxuSSd2ZSBldmVuIGRvdWJsZS1jaGVja2VkIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgUUVNVSBtYWNoaW5lcyBrbm93biB0byBlbXVsYXRlIHRoaXMgcGFydGljdWxhciBkZXZpY2UsIGFuZCB0aGVyZSBhcmUgbm90LiBTaW5jZSB0aGUgcGF0Y2hlZCBjb2RlIGlzIHNwZWNpZmljIHRvIGEgdmVuZG9yIGhhcmR3YXJlIGRldmljZSwgYW5kIHNpbmNlIFFFTVUgZG9lcyBub3QgZW11bGF0ZSB0aGlzIGRldmljZSwgaXQncyBjbGVhciB0aGlzIGNvZGUgaXMgbm90IHJlYWNoYWJsZS4gRXZlbiBpZiBhIGh5cG90aGV0aWNhbCBlbXVsYXRpb24gZXhpc3RlZCwgaXTigJlzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggbGVhZHMgYmFjayB0byB0aGUgc2FtZSBwcm9ibGVtLiBUaGlzIGFsbCBmYWxscyB1bmRlciB0aGUgY3JpdGVyaWEgZGVmaW5lZCBmb3IgV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmFjdG9yaW5nIHRvIGdQVFAgc3VwcG9ydCBpbiBhIGRyaXZlciBmb3IgdGhlIFJlbmVzYXMgUi1DYXIgRXRoZXJuZXQgQVZCIGNvbnRyb2xsZXIuIFRoZSBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgUmVuZXNhcyBTb0MgYW5kIHJlcXVpcmUgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMuIEdpdmVuIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50IGxpbWl0YXRpb25zLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gVGhlcmVmb3JlLCBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc0NywiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MjowMC4yNTY2NjIwNzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBnUFRQIHN1cHBvcnQgaW4gdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChyYXZiKSBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBHZW40IGdQVFAgYW5kIGludHJvZHVjaW5nIGEgc3RydWN0IGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBjYWxsYmFja3MuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIGZvciBSZW5lc2FzIFItQ2FyIFNvQ3MuIFRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgdGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyB0byBwcm9iZS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgZ1BUUCBzdXBwb3J0IGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAocmF2YikgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgR2VuNCBnUFRQIGFuZCBpbnRyb2R1Y2luZyBhIHN0cnVjdCBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgY2FsbGJhY2tzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgUmVuZXNhcyBSLUNhciBTb0NzLiBUaGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgdG8gcHJvYmUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6MDAuMjU2NjkwNDQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9pppm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 16:16:29 +0000 UTC FinishedAt: 2026-08-11 16:42:00 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGdQVFAgc3VwcG9ydCBpbiB0aGUgUmVuZXNhcyBFdGhlcm5ldCBBVkIgKHJhdmIpIGRyaXZlciwgYWRkaW5nIHN1cHBvcnQgZm9yIEdlbjQgZ1BUUCBhbmQgaW50cm9kdWNpbmcgYSBzdHJ1Y3QgZm9yIHBsYXRmb3JtLXNwZWNpZmljIGNhbGxiYWNrcy4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgZm9yIFJlbmVzYXMgUi1DYXIgU29Dcy4gVGhlIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGFuZCB0aGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIHRvIHByb2JlLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkY2M3MDVmZmU4ZWJiZjY2OWM3OTMyZTY0MmE2MWQ1MGE1MWMwODAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDE6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxuaW5kZXggMWUwMGVmNWIzYWNkYS4uZmFkMDAyNDkyNDIxYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbFxuQEAgLTk3LDYgJiM0Mzs5Nyw4IEBAIHByb3BlcnRpZXM6XG4gXG4gICBwaHktaGFuZGxlOiB0cnVlXG4gXG4mIzQzOyAgcHRwLXRpbWVyOiB0cnVlXG4mIzQzO1xuICAgJiMzOTsjYWRkcmVzcy1jZWxscyYjMzk7OlxuICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy5cbiAgICAgY29uc3Q6IDFcbkBAIC0zMDUsNiAmIzQzOzMwNywxNSBAQCBhbGxPZjpcbiAgICAgICAgICAgICBpdGVtczpcbiAgICAgICAgICAgICAgIC0gY29uc3Q6IGZja1xuICAgICAgICAgICAgICAgLSBjb25zdDogcmVmY2xrXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgbm90OlxuJiM0MzsgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgICBjb25zdDogcmVuZXNhcyxldGhlcmF2Yi1yY2FyLWdlbjRcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgcHRwLXRpbWVyOiBmYWxzZVxuIFxuIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcbmluZGV4IDVlNTZlYzliMTAxM2EuLjRjOGRjMDIwMjJlMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcbkBAIC0yNDksNiAmIzQzOzI0OSw4IEBAIGVudW0gQVBTUl9CSVQge1xuIFx0QVBTUl9SRE1cdD0gMHgwMDAwMjAwMCxcbiBcdEFQU1JfVERNXHQ9IDB4MDAwMDQwMDAsXG4gXHRBUFNSX01JSVNFTEVDVFx0PSAweDAxMDAwMDAwLFx0LyogUi1DYXIgVjRNIG9ubHkgKi9cbiYjNDM7XHRBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgPSBCSVQoMjUpLCAvKiBHZW40ICovXG4mIzQzO1x0QVBTUl9HUFRQQ0xPQ0tcdD0gQklUKDI5KSxcdC8qIEdlbjQgKi9cbiB9O1xuIFxuIC8qIFJDUiAqL1xuQEAgLTEwMzQsNiAmIzQzOzEwMzYsMzEgQEAgc3RydWN0IHJhdmJfcHRwIHtcbiBcdHN0cnVjdCByYXZiX3B0cF9wZXJvdXQgcGVyb3V0W05fUEVSX09VVF07XG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCByYXZiX2dwdHBfaW5mbyAtIFBsYXRmb3JtIHNwZWNpZmljIGdQVFAgYmVoYXZpb3JcbiYjNDM7ICpcbiYjNDM7ICogRWFjaCBnZW5lcmF0aW9uIG9mIFJBVkIgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgYmVoYXZpb3JzIHdoZW4gaW50ZXJhY3RpbmdcbiYjNDM7ICogd2l0aCB0aGUgZ1BUUCBjbG9jay4gVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNhbGxiYWNrcyB0byBiZSBjYWxsZWQgYXRcbiYjNDM7ICogY3JpdGljYWwgcG9pbnRzIGluIHRoZSBSQVZCIGRyaXZlci5cbiYjNDM7ICpcbiYjNDM7ICogQHByb2JlOlx0XHRQcm9iZSB0aGUgZ1BUUCBjbG9ja1xuJiM0MzsgKiBAY2xvY2tfaW5kZXg6XHRHZXQgdGhlIFBUUCBjbG9jayBpbmRleCwgaWYgYW55XG4mIzQzOyAqIEBzZXRfY29uZmlnX21vZGU6XHRFbnRlciBjb25maWcgbW9kZVxuJiM0MzsgKiBAZG1hY19zdGFydDpcdFx0Q2FsbGVkIHdoZW4gdGhlIERNQUMgc3RhcnRzXG4mIzQzOyAqIEBkbWFjX3N0b3A6XHRcdENhbGxlZCB3aGVuIHRoZSBETUFDIHN0b3BzXG4mIzQzOyAqIEBuZGV2X29wZW46XHRcdENhbGxlZCB3aGVuIHRoZSBuZGV2IGlzIG9wZW5lZFxuJiM0MzsgKiBAbmRldl9jbG9zZTpcdFx0Q2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgY2xvc2VkXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8ge1xuJiM0MztcdGludCAoKnByb2JlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO1x0aW50ICgqY2xvY2tfaW5kZXgpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7XHRpbnQgKCpzZXRfY29uZmlnX21vZGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7XHRpbnQgKCpkbWFjX3N0YXJ0KShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO1x0dm9pZCAoKmRtYWNfc3RvcCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0MztcdGludCAoKm5kZXZfb3Blbikoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuJiM0MztcdHZvaWQgKCpuZGV2X2Nsb3NlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCByYXZiX2h3X2luZm8ge1xuIFx0aW50ICgqcmVjZWl2ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBidWRnZXQsIGludCBxKTtcbiBcdHZvaWQgKCpzZXRfcmF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuQEAgLTEwNTIsNiAmIzQzOzEwNzksNyBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcbiBcdHUzMiByeF9idWZmZXJfc2l6ZTtcbiBcdHUzMiByeF9kZXNjX3NpemU7XG4gXHR1MzIgZGJhdF9lbnRyeV9udW07XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvICpwdHA7IC8qIENhbGxiYWNrcyB0byBoYW5kbGUgZ1BUUCBpbnRlcmFjdGlvbnMuICovXG4gXHR1bnNpZ25lZCBhbGlnbmVkX3R4OiAxO1xuIFx0dW5zaWduZWQgY29hbGVzY2VfaXJxczoxO1x0LyogTmVlZHMgc29mdHdhcmUgSVJRIGNvYWxlc2NpbmcgKi9cbiBcbkBAIC0xMDYyLDkgJiM0MzsxMDkwLDYgQEAgc3RydWN0IHJhdmJfaHdfaW5mbyB7XG4gXHR1bnNpZ25lZCBtdWx0aV9pcnFzOjE7XHRcdC8qIEFWQi1ETUFDIGFuZCBFLU1BQyBoYXMgbXVsdGlwbGUgaXJxcyAqL1xuIFx0dW5zaWduZWQgaXJxX2VuX2RpczoxO1x0XHQvKiBIYXMgc2VwYXJhdGUgaXJxIGVuYWJsZSBhbmQgZGlzYWJsZSByZWdzICovXG4gXHR1bnNpZ25lZCBlcnJfbWdtdF9pcnFzOjE7XHQvKiBMaW5lMSAoRXJyKSBhbmQgTGluZTIgKE1nbXQpIGlycXMgYXJlIHNlcGFyYXRlICovXG4tXHR1bnNpZ25lZCBncHRwOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgKi9cbi1cdHVuc2lnbmVkIGNjY19nYWM6MTtcdFx0LyogQVZCLURNQUMgaGFzIGdQVFAgc3VwcG9ydCBhY3RpdmUgaW4gY29uZmlnIG1vZGUgKi9cbi1cdHVuc2lnbmVkIGdwdHBfcmVmX2NsazoxO1x0LyogZ1BUUCBoYXMgc2VwYXJhdGUgcmVmZXJlbmNlIGNsb2NrICovXG4gXHR1bnNpZ25lZCBuY19xdWV1ZXM6MTtcdFx0LyogQVZCLURNQUMgaGFzIFJYIGFuZCBUWCBOQyBxdWV1ZXMgKi9cbiBcdHVuc2lnbmVkIG1hZ2ljX3BrdDoxO1x0XHQvKiBFLU1BQyBzdXBwb3J0cyBtYWdpYyBwYWNrZXQgZGV0ZWN0aW9uICovXG4gXHR1bnNpZ25lZCBoYWxmX2R1cGxleDoxO1x0XHQvKiBFLU1BQyBzdXBwb3J0cyBoYWxmIGR1cGxleCBtb2RlICovXG5AQCAtMTEwOSw2ICYjNDM7MTEzNCw3IEBAIHN0cnVjdCByYXZiX3ByaXZhdGUge1xuIFx0c3RydWN0IGxpc3RfaGVhZCB0c19za2JfbGlzdDtcbiBcdHUzMiB0c19za2JfdGFnO1xuIFx0c3RydWN0IHJhdmJfcHRwIHB0cDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dwdHA7XHQvKiBSZWZlcmVuY2UgdG8gZXh0ZXJuYWwgZ1BUUCBjbG9jaywgaWYgYW55LiAqL1xuIFx0c3BpbmxvY2tfdCBsb2NrO1x0XHQvKiBSZWdpc3RlciBhY2Nlc3MgbG9jayAqL1xuIFx0dTMyIGN1cl9yeFtOVU1fUlhfUVVFVUVdO1x0LyogQ29uc3VtZXIgcmluZyBpbmRpY2VzICovXG4gXHR1MzIgZGlydHlfcnhbTlVNX1JYX1FVRVVFXTtcdC8qIFByb2R1Y2VyIHJpbmcgaW5kaWNlcyAqL1xuQEAgLTExNjAsNyAmIzQzOzExODYsNyBAQCB2b2lkIHJhdmJfbW9kaWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIGNsZWFyLFxuIGludCByYXZiX3dhaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTtcbiBcbiB2b2lkIHJhdmJfcHRwX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4tdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcbiYjNDM7aW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gXG4gI2VuZGlmXHQvKiAjaWZuZGVmIF9fUkFWQl9IX18gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xuaW5kZXggNWY4ODczMzA5NGQwZi4uMzAxNzBlOTJkM2Q3MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmNcbkBAIC03MDcsNyAmIzQzOzcwNywxNSBAQCBzdGF0aWMgaW50IHJhdmJfZG1hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4gXHQvKiBTZXR0aW5nIHRoZSBjb250cm9sIHdpbGwgc3RhcnQgdGhlIEFWQi1ETUFDIHByb2Nlc3MuICovXG4tXHRyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfT1BFUkFUSU9OKTtcbiYjNDM7XHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RhcnQpXG4mIzQzO1x0XHRyZXR1cm4gaW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdGFydChuZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJhdmJfZ2V0X3R4X3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbkBAIC0xMTE1LDYgJiM0MzsxMTIzLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9zdG9wX2RtYShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O2ZhaWxlZCB0byBzdG9wIEFYSSBCVVNcXG5cJiMzNDspO1xuIFx0fVxuIFxuJiM0MztcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdG9wKVxuJiM0MztcdFx0aW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdG9wKG5kZXYpO1xuJiM0MztcbiBcdC8qIFN0b3AgQVZCLURNQUMgcHJvY2VzcyAqL1xuIFx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4gfVxuQEAgLTE3MTksOSAmIzQzOzE3MzEsNyBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcbiBcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XG4gXHRcdG5ldGlmX2RldmljZV9kZXRhY2gobmRldik7XG4tXHRcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0XHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4mIzQzO1xuIFx0XHQvKiBXYWl0IGZvciBETUEgc3RvcHBpbmcgKi9cbiBcdFx0ZXJyb3IgPSByYXZiX3N0b3BfZG1hKG5kZXYpO1xuIFx0XHRpZiAoZXJyb3IpIHtcbkBAIC0xNzUyLDEwICYjNDM7MTc2Miw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0XHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcbiBcbi1cdFx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRcdGlmIChpbmZvLVx1MDAzZWdwdHApXG4tXHRcdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuLVxuIFx0XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpO1xuIFx0fVxuIFxuQEAgLTE3NjcsOCAmIzQzOzE3NzMsMTMgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIHtcbiBcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmh3X2luZm8gPSBwcml2LVx1MDAzZWluZm87XG4mIzQzO1x0aW50IGluZGV4ID0gLTE7XG4mIzQzO1xuJiM0MztcdGlmIChod19pbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaHdfaW5mby1cdTAwM2VwdHAtXHUwMDNlY2xvY2tfaW5kZXgpXG4mIzQzO1x0XHRpbmRleCA9IGh3X2luZm8tXHUwMDNlcHRwLVx1MDAzZWNsb2NrX2luZGV4KG5kZXYpO1xuIFxuLVx0aWYgKGh3X2luZm8tXHUwMDNlZ3B0cCB8fCBod19pbmZvLVx1MDAzZWNjY19nYWMpIHtcbiYjNDM7XHQvKiBPbmx5IGFkdmVydGlzZSBwdHAgY2xvY2sgaWYgcHJlc2VudC4gKi9cbiYjNDM7XHRpZiAoaW5kZXggXHUwMDNlPSAwKSB7XG4gXHRcdGluZm8tXHUwMDNlc29fdGltZXN0YW1waW5nID1cbiBcdFx0XHRTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIHxcbiBcdFx0XHRTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIHxcbkBAIC0xNzc5LDcgJiM0MzsxNzkwLDcgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCgxIFx1MDAzY1x1MDAzYyBIV1RTVEFNUF9GSUxURVJfTk9ORSkgfFxuIFx0XHRcdCgxIFx1MDAzY1x1MDAzYyBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UKSB8XG4gXHRcdFx0KDEgXHUwMDNjXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9BTEwpO1xuLVx0XHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IHB0cF9jbG9ja19pbmRleChwcml2LVx1MDAzZXB0cC5jbG9jayk7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IGluZGV4O1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTgyNiw1NSAmIzQzOzE4MzcsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyByYXZiX2V0aHRvb2xfb3BzID0ge1xuIH07XG4gXG4gc3RhdGljIGludCByYXZiX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi17XG4tXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi1cdTAwM2VpbmZvO1xuLVx0aW50IGVycm9yO1xuLVxuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCkge1xuLVx0XHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4tXHRcdGlmIChlcnJvcilcbi1cdFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRcdC8qIFNldCBDU0VMIHZhbHVlICovXG4tXHRcdHJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7XG4tXHR9IGVsc2UgaWYgKGluZm8tXHUwMDNlY2NjX2dhYykge1xuLVx0XHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGVycm9yO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByYXZiX3NldF9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXHUwMDNlaW5mbztcbiBcbi1cdGlmICghKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VzZXRfY29uZmlnX21vZGUpXG4mIzQzO1x0XHRyZXR1cm4gaW5mby1cdTAwM2VwdHAtXHUwMDNlc2V0X2NvbmZpZ19tb2RlKG5kZXYpO1xuIFxuLVx0cmF2Yl93cml0ZShuZGV2LCBwcml2LVx1MDAzZWd0aV90aXYsIEdUSSk7XG4tXG4tXHQvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nICovXG4tXHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX0xUSSwgR0NDUl9MVEkpO1xuJiM0MztcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJhdmJfY29tcHV0ZV9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3N0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNsayAqY2xrKVxuIHtcbiBcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBuZGV2LVx1MDAzZWRldi5wYXJlbnQ7XG4gXHR1bnNpZ25lZCBsb25nIHJhdGU7XG4gXHR1NjQgaW5jO1xuIFxuLVx0aWYgKCEoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYykpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cF9yZWZfY2xrKVxuLVx0XHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlZ3B0cF9jbGspO1xuLVx0ZWxzZVxuLVx0XHRyYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4gXHRpZiAoIXJhdGUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTE5NzQsMTEgJiM0MzsxOTU0LDEyIEBAIHN0YXRpYyBpbnQgcmF2Yl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFxuIFx0cmF2Yl9lbWFjX2luaXQobmRldik7XG4gXG4tXHRyYXZiX3NldF9ndGkobmRldik7XG4tXG4gXHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXHUwMDNlcGRldik7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X29wZW4pIHtcbiYjNDM7XHRcdGVycm9yID0gaW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9vcGVuKG5kZXYpO1xuJiM0MztcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRnb3RvIG91dF9wdHBfc3RvcDtcbiYjNDM7XHR9XG4gXG4gXHQvKiBQSFkgY29udHJvbCBzdGFydCAqL1xuIFx0ZXJyb3IgPSByYXZiX3BoeV9zdGFydChuZGV2KTtcbkBAIC0xOTkwLDkgJiM0MzsxOTcxLDYgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRyZXR1cm4gMDtcbiBcbiBvdXRfcHRwX3N0b3A6XG4tXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuIFx0cmF2Yl9zdG9wX2RtYShuZGV2KTtcbiBvdXRfc2V0X3Jlc2V0OlxuIFx0cmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfUkVTRVQpO1xuQEAgLTIwMzYsMTAgJiM0MzsyMDE0LDYgQEAgc3RhdGljIHZvaWQgcmF2Yl90eF90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5kZXYpO1xuIFxuLVx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuLVxuIFx0LyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovXG4gXHRpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSkge1xuIFx0XHQvKiBJZiByYXZiX3N0b3BfZG1hKCkgZmFpbHMsIHRoZSBoYXJkd2FyZSBpcyBzdGlsbCBvcGVyYXRpbmdcbkBAIC0yMDcyLDEwICYjNDM7MjA0Niw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJhdmJfZW1hY19pbml0KG5kZXYpO1xuIFxuIG91dDpcbi1cdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cClcbi1cdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuLVxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZGV2KTtcbiBcbiBvdXRfdW5sb2NrOlxuQEAgLTIyMDgsNyAmIzQzOzIxNzgsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcmF2Yl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0ZGVzYy1cdTAwM2VkcHRyID0gY3B1X3RvX2xlMzIoZG1hX2FkZHIpO1xuIFxuIFx0LyogVFggdGltZXN0YW1wIHJlcXVpcmVkICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYykge1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXB0cCkge1xuIFx0XHRpZiAocSA9PSBSQVZCX05DKSB7XG4gXHRcdFx0dHNfc2tiID0ga21hbGxvY19vYmooKnRzX3NrYiwgR0ZQX0FUT01JQyk7XG4gXHRcdFx0aWYgKCF0c19za2IpIHtcbkBAIC0yMzkwLDggJiM0MzsyMzYwLDggQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0fVxuIFxuIFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYylcbi1cdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2VwdHAgXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNlcHRwLVx1MDAzZW5kZXZfY2xvc2UpXG4mIzQzO1x0XHRpbmZvLVx1MDAzZXB0cC1cdTAwM2VuZGV2X2Nsb3NlKG5kZXYpO1xuIFxuIFx0LyogU2V0IHRoZSBjb25maWcgbW9kZSB0byBzdG9wIHRoZSBBVkItRE1BQyYjMzk7cyBwcm9jZXNzZXMgKi9cbiBcdGlmIChyYXZiX3N0b3BfZG1hKG5kZXYpIFx1MDAzYyAwKVxuQEAgLTIzOTksNyAmIzQzOzIzNjksNyBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdFx0ICAgXCYjMzQ7ZGV2aWNlIHdpbGwgYmUgc3RvcHBlZCBhZnRlciBoL3cgcHJvY2Vzc2VzIGFyZSBkb25lLlxcblwmIzM0Oyk7XG4gXG4gXHQvKiBDbGVhciB0aGUgdGltZXN0YW1wIGxpc3QgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwKSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0c19za2IsIHRzX3NrYjIsIFx1MDAyNnByaXYtXHUwMDNldHNfc2tiX2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZ0c19za2ItXHUwMDNlbGlzdCk7XG4gXHRcdFx0a2ZyZWVfc2tiKHRzX3NrYi1cdTAwM2Vza2IpO1xuQEAgLTI2ODEsNiAmIzQzOzI2NTEsNDIgQEAgc3RhdGljIGludCByYXZiX21kaW9fcmVsZWFzZShzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYXZiX2NvbXB1dGVfZ3RpKG5kZXYsIHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4KHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIGdQVFAgQ2xvY2sgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXG4mIzQzO1x0cmF2Yl9tb2RpZnkobmRldiwgQ0NDLCBDQ0NfQ1NFTCwgQ0NDX0NTRUxfSFBCKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW4yX3B0cF9pbmZvID0ge1xuJiM0MztcdC5wcm9iZSA9IHJhdmJfZ2VuMl9wdHBfcHJvYmUsXG4mIzQzO1x0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCxcbiYjNDM7XHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUsXG4mIzQzO1x0LmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LFxuJiM0MztcdC5kbWFjX3N0b3AgPSByYXZiX3B0cF9zdG9wLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHtcbiBcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxuIFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxuQEAgLTI2OTksMTIgJiM0MzsyNzA1LDI2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuMl9od19pbmZvID0ge1xuIFx0XHRcdCAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSxcbiBcdC5yeF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IHJhdmJfZXhfcnhfZGVzYyksXG4gXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcbiYjNDM7XHQucHRwID0gXHUwMDI2cmF2Yl9nZW4yX3B0cF9pbmZvLFxuIFx0LmFsaWduZWRfdHggPSAxLFxuLVx0LmdwdHAgPSAxLFxuIFx0Lm5jX3F1ZXVlcyA9IDEsXG4gXHQubWFnaWNfcGt0ID0gMSxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0LyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xuJiM0MztcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjNfcHRwX2luZm8gPSB7XG4mIzQzO1x0LnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSxcbiYjNDM7XHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxuJiM0MztcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjNfcHRwX3NldF9jb25maWdfbW9kZSxcbiYjNDM7XHQubmRldl9vcGVuID0gcmF2Yl9wdHBfaW5pdCxcbiYjNDM7XHQubmRldl9jbG9zZSA9IHJhdmJfcHRwX3N0b3AsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuM19od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjcyMywxNSAmIzQzOzI3NDMsNjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4zX2h3X2luZm8gPSB7XG4gXHRcdFx0ICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLFxuIFx0LnJ4X2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmF2Yl9leF9yeF9kZXNjKSxcbiBcdC5kYmF0X2VudHJ5X251bSA9IDIyLFxuJiM0MztcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjNfcHRwX2luZm8sXG4gXHQuaW50ZXJuYWxfZGVsYXkgPSAxLFxuIFx0LnR4X2NvdW50ZXJzID0gMSxcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5pcnFfZW5fZGlzID0gMSxcbi1cdC5jY2NfZ2FjID0gMSxcbiBcdC5uY19xdWV1ZXMgPSAxLFxuIFx0Lm1hZ2ljX3BrdCA9IDEsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludCByYXZiX2dlbjRfcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZW9mX2dwdHAgPVxuJiM0MztcdFx0b2ZfcGFyc2VfcGhhbmRsZShwcml2LVx1MDAzZXBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O3B0cC10aW1lclwmIzM0OywgMCk7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZW9mX2dwdHApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHByaXYtXHUwMDNlb2ZfZ3B0cCkpIHtcbiYjNDM7XHRcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4mIzQzO1x0XHRwcml2LVx1MDAzZW9mX2dwdHAgPSBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXZiX2dlbjRfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHQvKiBJZiBubyBjbG9jaywgbWltaWMgcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUoKSBmYWlsIGFuZCByZXR1cm4gLTEgKi9cbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlb2ZfZ3B0cClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHB0cF9jbG9ja19pbmRleF9ieV9vZl9ub2RlKHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xuJiM0MztcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBTZXQgUFRQIHNvdXJjZSB0byBHUFRQIG1vZHVsZSwgb25seSBvcHRpb24gb24gR2VuNC4gKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VvZl9ncHRwKVxuJiM0MztcdFx0cmF2Yl9tb2RpZnkobmRldiwgQVBTUiwgQVBTUl9HUFRQVElNRVJfU09VUkNFIHwgQVBTUl9HUFRQQ0xPQ0ssXG4mIzQzO1x0XHRcdCAgICBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuNF9wdHBfaW5mbyA9IHtcbiYjNDM7XHQucHJvYmUgPSByYXZiX2dlbjRfcHRwX3Byb2JlLFxuJiM0MztcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgsXG4mIzQzO1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuNF9wdHBfc2V0X2NvbmZpZ19tb2RlLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjRfaHdfaW5mbyA9IHtcbiBcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxuIFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxuQEAgLTI3NTQsMTEgJiM0MzsyODI3LDMwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuNF9od19pbmZvID0ge1xuIFx0LnR4X2NvdW50ZXJzID0gMSxcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5pcnFfZW5fZGlzID0gMSxcbi1cdC5jY2NfZ2FjID0gMSxcbiYjNDM7XHQucHRwID0gXHUwMDI2cmF2Yl9nZW40X3B0cF9pbmZvLFxuIFx0Lm5jX3F1ZXVlcyA9IDEsXG4gXHQubWFnaWNfcGt0ID0gMSxcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW50IHJhdmJfcnp2Mm1fcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWdwdHBfY2xrID0gZGV2bV9jbGtfZ2V0KFx1MDAyNnByaXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O2dwdHBcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2VncHRwX2NsaykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZWdwdHBfY2xrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cdTAwM2VncHRwX2Nsayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9yenYybV9wdHBfaW5mbyA9IHtcbiYjNDM7XHQucHJvYmUgPSByYXZiX3J6djJtX3B0cF9wcm9iZSxcbiYjNDM7XHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxuJiM0MztcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcbiYjNDM7XHQuZG1hY19zdGFydCA9IHJhdmJfcHRwX2luaXQsXG4mIzQzO1x0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHtcbiBcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxuIFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxuQEAgLTI3NzksOCAmIzQzOzI4NzEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX3J6djJtX2h3X2luZm8gPSB7XG4gXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5lcnJfbWdtdF9pcnFzID0gMSxcbi1cdC5ncHRwID0gMSxcbi1cdC5ncHRwX3JlZl9jbGsgPSAxLFxuJiM0MztcdC5wdHAgPSBcdTAwMjZyYXZiX3J6djJtX3B0cF9pbmZvLFxuIFx0Lm5jX3F1ZXVlcyA9IDEsXG4gXHQubWFnaWNfcGt0ID0gMSxcbiB9O1xuQEAgLTI5NzAsMTIgJiM0MzszMDYxLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwX3JlZl9jbGspIHtcbi1cdFx0cHJpdi1cdTAwM2VncHRwX2NsayA9IGRldm1fY2xrX2dldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Z3B0cFwmIzM0Oyk7XG4tXHRcdGlmIChJU19FUlIocHJpdi1cdTAwM2VncHRwX2NsaykpIHtcbi1cdFx0XHRlcnJvciA9IFBUUl9FUlIocHJpdi1cdTAwM2VncHRwX2Nsayk7XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2Vwcm9iZSkge1xuJiM0MztcdFx0ZXJyb3IgPSBpbmZvLVx1MDAzZXB0cC1cdTAwM2Vwcm9iZShuZGV2KTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiBcdFx0XHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XG4tXHRcdH1cbiBcdH1cbiBcbiBcdHByaXYtXHUwMDNlcmVmY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtyZWZjbGtcJiMzNDspO1xuQEAgLTMwMjgsMTAgJiM0MzszMTE3LDYgQEAgc3RhdGljIGludCByYXZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZyYXZiX25ldGRldl9vcHM7XG4gXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2cmF2Yl9ldGh0b29sX29wcztcbiBcbi1cdGVycm9yID0gcmF2Yl9jb21wdXRlX2d0aShuZGV2KTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfcnBtX3B1dDtcbi1cbiBcdHJhdmJfcGFyc2VfZGVsYXlfbW9kZShucCwgbmRldik7XG4gXG4gXHQvKiBBbGxvY2F0ZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyB0YWJsZSAqL1xuQEAgLTMxNTQsNiAmIzQzOzMyMzksNyBAQCBzdGF0aWMgdm9pZCByYXZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cG1fcnVudGltZV9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcdHBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTtcbiBcdGNsa191bnByZXBhcmUocHJpdi1cdTAwM2VyZWZjbGspO1xuJiM0MztcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4gXHRyZXNldF9jb250cm9sX2Fzc2VydChwcml2LVx1MDAzZXJzdGMpO1xuIFx0ZnJlZV9uZXRkZXYobmRldik7XG4gXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbkBAIC0zMTc5LDkgJiM0MzszMjY1LDYgQEAgc3RhdGljIGludCByYXZiX3dvbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdC8qIEVuYWJsZSBNYWdpY1BhY2tldCAqL1xuIFx0cmF2Yl9tb2RpZnkobmRldiwgRUNNUiwgRUNNUl9NUERFLCBFQ01SX01QREUpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xuLVxuIFx0cmV0dXJuIGVuYWJsZV9pcnFfd2FrZShwcml2LVx1MDAzZWVtYWNfaXJxKTtcbiB9XG4gXG5AQCAtMzIwMSw5ICYjNDM7MzI4NCw2IEBAIHN0YXRpYyBpbnQgcmF2Yl93b2xfcmVzdG9yZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaW5mby1cdTAwM2VjY2NfZ2FjKVxuLVx0XHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXHUwMDNlcGRldik7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2VuY19xdWV1ZXMpXG4gXHRcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaVtSQVZCX05DXSk7XG4gXHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGlbUkFWQl9CRV0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xuaW5kZXggMjI2YzZjMGFiOTQ1Yi4uNDczYTJhZWRiNzQ1ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXG5AQCAtMzEyLDIyICYjNDM7MzEyLDM5IEBAIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cmF2Yl93cml0ZShuZGV2LCB+KGdpcyB8IEdJU19SRVNFUlZFRCksIEdJUyk7XG4gfVxuIFxuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7aW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdHByaXYtXHUwMDNlcHRwLmluZm8gPSByYXZiX3B0cF9pbmZvO1xuIFxuLVx0cHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQgPSByYXZiX3JlYWQobmRldiwgR1RJKTtcbiYjNDM7XHRwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHByaXYtXHUwMDNlZ3RpX3RpdjtcbiBcdHByaXYtXHUwMDNlcHRwLmN1cnJlbnRfYWRkZW5kID0gcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQ7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGdQVFAgVGltZXIgSW5jcmVtZW50IFZhbHVlLiAqL1xuJiM0MztcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQsIEdUSSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlcXVlc3QgR1RJIGxvYWRpbmcuICovXG4mIzQzO1x0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgR0lUIGxvYWRpbmcgdG8gY29tcGxldGUuICovXG4gXHRyYXZiX3dhaXQobmRldiwgR0NDUiwgR0NDUl9UQ1IsIEdDQ1JfVENSX05PUkVRKTtcbiYjNDM7XG4gXHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX1RDU1MsIEdDQ1JfVENTU19BREpHUFRQKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cC5pbmZvLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0cHJpdi1cdTAwM2VwdHAuY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXHUwMDI2cHJpdi1cdTAwM2VwdHAuaW5mbywgXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXB0cC5jbG9jaykpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VwdHAuY2xvY2sgPSBOVUxMO1xuJiM0MztcdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbkBAIC0zMzcsNSAmIzQzOzM1NCw2IEBAIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHJhdmJfd3JpdGUobmRldiwgMCwgR0lDKTtcbiBcdHJhdmJfd3JpdGUobmRldiwgMCwgR0lTKTtcbiBcbi1cdHB0cF9jbG9ja191bnJlZ2lzdGVyKHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VwdHAuY2xvY2spXG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcihwcml2LVx1MDAzZXB0cC5jbG9jayk7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgZ1BUUCBzdXBwb3J0IGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAocmF2YikgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgR2VuNCBnUFRQIGFuZCBpbnRyb2R1Y2luZyBhIHN0cnVjdCBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgY2FsbGJhY2tzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgUmVuZXNhcyBSLUNhciBTb0NzLiBUaGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgdG8gcHJvYmUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRjYzcwNWZmZThlYmJmNjY5Yzc5MzJlNjQyYTYxZDUwYTUxYzA4MDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAxNjo0MTozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwKaW5kZXggMWUwMGVmNWIzYWNkYS4uZmFkMDAyNDkyNDIxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWwKQEAgLTk3LDYgJiM0Mzs5Nyw4IEBAIHByb3BlcnRpZXM6CiAKICAgcGh5LWhhbmRsZTogdHJ1ZQogCiYjNDM7ICBwdHAtdGltZXI6IHRydWUKJiM0MzsKICAgJiMzOTsjYWRkcmVzcy1jZWxscyYjMzk7OgogICAgIGRlc2NyaXB0aW9uOiBOdW1iZXIgb2YgYWRkcmVzcyBjZWxscyBmb3IgdGhlIE1ESU8gYnVzLgogICAgIGNvbnN0OiAxCkBAIC0zMDUsNiAmIzQzOzMwNywxNSBAQCBhbGxPZjoKICAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgICAtIGNvbnN0OiBmY2sKICAgICAgICAgICAgICAgLSBjb25zdDogcmVmY2xrCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIG5vdDoKJiM0MzsgICAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgICAgY29udGFpbnM6CiYjNDM7ICAgICAgICAgICAgICBjb25zdDogcmVuZXNhcyxldGhlcmF2Yi1yY2FyLWdlbjQKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgcHRwLXRpbWVyOiBmYWxzZQogCiBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaAppbmRleCA1ZTU2ZWM5YjEwMTNhLi40YzhkYzAyMDIyZTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaApAQCAtMjQ5LDYgJiM0MzsyNDksOCBAQCBlbnVtIEFQU1JfQklUIHsKIAlBUFNSX1JETQk9IDB4MDAwMDIwMDAsCiAJQVBTUl9URE0JPSAweDAwMDA0MDAwLAogCUFQU1JfTUlJU0VMRUNUCT0gMHgwMTAwMDAwMCwJLyogUi1DYXIgVjRNIG9ubHkgKi8KJiM0MzsJQVBTUl9HUFRQVElNRVJfU09VUkNFID0gQklUKDI1KSwgLyogR2VuNCAqLwomIzQzOwlBUFNSX0dQVFBDTE9DSwk9IEJJVCgyOSksCS8qIEdlbjQgKi8KIH07CiAKIC8qIFJDUiAqLwpAQCAtMTAzNCw2ICYjNDM7MTAzNiwzMSBAQCBzdHJ1Y3QgcmF2Yl9wdHAgewogCXN0cnVjdCByYXZiX3B0cF9wZXJvdXQgcGVyb3V0W05fUEVSX09VVF07CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHJhdmJfZ3B0cF9pbmZvIC0gUGxhdGZvcm0gc3BlY2lmaWMgZ1BUUCBiZWhhdmlvcgomIzQzOyAqCiYjNDM7ICogRWFjaCBnZW5lcmF0aW9uIG9mIFJBVkIgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgYmVoYXZpb3JzIHdoZW4gaW50ZXJhY3RpbmcKJiM0MzsgKiB3aXRoIHRoZSBnUFRQIGNsb2NrLiBUaGlzIHN0cnVjdCBwcm92aWRlcyB0aGUgY2FsbGJhY2tzIHRvIGJlIGNhbGxlZCBhdAomIzQzOyAqIGNyaXRpY2FsIHBvaW50cyBpbiB0aGUgUkFWQiBkcml2ZXIuCiYjNDM7ICoKJiM0MzsgKiBAcHJvYmU6CQlQcm9iZSB0aGUgZ1BUUCBjbG9jawomIzQzOyAqIEBjbG9ja19pbmRleDoJR2V0IHRoZSBQVFAgY2xvY2sgaW5kZXgsIGlmIGFueQomIzQzOyAqIEBzZXRfY29uZmlnX21vZGU6CUVudGVyIGNvbmZpZyBtb2RlCiYjNDM7ICogQGRtYWNfc3RhcnQ6CQlDYWxsZWQgd2hlbiB0aGUgRE1BQyBzdGFydHMKJiM0MzsgKiBAZG1hY19zdG9wOgkJQ2FsbGVkIHdoZW4gdGhlIERNQUMgc3RvcHMKJiM0MzsgKiBAbmRldl9vcGVuOgkJQ2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgb3BlbmVkCiYjNDM7ICogQG5kZXZfY2xvc2U6CQlDYWxsZWQgd2hlbiB0aGUgbmRldiBpcyBjbG9zZWQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gewomIzQzOwlpbnQgKCpwcm9iZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzOwlpbnQgKCpjbG9ja19pbmRleCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzOwlpbnQgKCpzZXRfY29uZmlnX21vZGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJaW50ICgqZG1hY19zdGFydCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzOwl2b2lkICgqZG1hY19zdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiYjNDM7CWludCAoKm5kZXZfb3Blbikoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzOwl2b2lkICgqbmRldl9jbG9zZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgcmF2Yl9od19pbmZvIHsKIAlpbnQgKCpyZWNlaXZlKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IGJ1ZGdldCwgaW50IHEpOwogCXZvaWQgKCpzZXRfcmF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwpAQCAtMTA1Miw2ICYjNDM7MTA3OSw3IEBAIHN0cnVjdCByYXZiX2h3X2luZm8gewogCXUzMiByeF9idWZmZXJfc2l6ZTsKIAl1MzIgcnhfZGVzY19zaXplOwogCXUzMiBkYmF0X2VudHJ5X251bTsKJiM0MzsJY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvICpwdHA7IC8qIENhbGxiYWNrcyB0byBoYW5kbGUgZ1BUUCBpbnRlcmFjdGlvbnMuICovCiAJdW5zaWduZWQgYWxpZ25lZF90eDogMTsKIAl1bnNpZ25lZCBjb2FsZXNjZV9pcnFzOjE7CS8qIE5lZWRzIHNvZnR3YXJlIElSUSBjb2FsZXNjaW5nICovCiAKQEAgLTEwNjIsOSAmIzQzOzEwOTAsNiBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHsKIAl1bnNpZ25lZCBtdWx0aV9pcnFzOjE7CQkvKiBBVkItRE1BQyBhbmQgRS1NQUMgaGFzIG11bHRpcGxlIGlycXMgKi8KIAl1bnNpZ25lZCBpcnFfZW5fZGlzOjE7CQkvKiBIYXMgc2VwYXJhdGUgaXJxIGVuYWJsZSBhbmQgZGlzYWJsZSByZWdzICovCiAJdW5zaWduZWQgZXJyX21nbXRfaXJxczoxOwkvKiBMaW5lMSAoRXJyKSBhbmQgTGluZTIgKE1nbXQpIGlycXMgYXJlIHNlcGFyYXRlICovCi0JdW5zaWduZWQgZ3B0cDoxOwkJLyogQVZCLURNQUMgaGFzIGdQVFAgc3VwcG9ydCAqLwotCXVuc2lnbmVkIGNjY19nYWM6MTsJCS8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgYWN0aXZlIGluIGNvbmZpZyBtb2RlICovCi0JdW5zaWduZWQgZ3B0cF9yZWZfY2xrOjE7CS8qIGdQVFAgaGFzIHNlcGFyYXRlIHJlZmVyZW5jZSBjbG9jayAqLwogCXVuc2lnbmVkIG5jX3F1ZXVlczoxOwkJLyogQVZCLURNQUMgaGFzIFJYIGFuZCBUWCBOQyBxdWV1ZXMgKi8KIAl1bnNpZ25lZCBtYWdpY19wa3Q6MTsJCS8qIEUtTUFDIHN1cHBvcnRzIG1hZ2ljIHBhY2tldCBkZXRlY3Rpb24gKi8KIAl1bnNpZ25lZCBoYWxmX2R1cGxleDoxOwkJLyogRS1NQUMgc3VwcG9ydHMgaGFsZiBkdXBsZXggbW9kZSAqLwpAQCAtMTEwOSw2ICYjNDM7MTEzNCw3IEBAIHN0cnVjdCByYXZiX3ByaXZhdGUgewogCXN0cnVjdCBsaXN0X2hlYWQgdHNfc2tiX2xpc3Q7CiAJdTMyIHRzX3NrYl90YWc7CiAJc3RydWN0IHJhdmJfcHRwIHB0cDsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpvZl9ncHRwOwkvKiBSZWZlcmVuY2UgdG8gZXh0ZXJuYWwgZ1BUUCBjbG9jaywgaWYgYW55LiAqLwogCXNwaW5sb2NrX3QgbG9jazsJCS8qIFJlZ2lzdGVyIGFjY2VzcyBsb2NrICovCiAJdTMyIGN1cl9yeFtOVU1fUlhfUVVFVUVdOwkvKiBDb25zdW1lciByaW5nIGluZGljZXMgKi8KIAl1MzIgZGlydHlfcnhbTlVNX1JYX1FVRVVFXTsJLyogUHJvZHVjZXIgcmluZyBpbmRpY2VzICovCkBAIC0xMTYwLDcgJiM0MzsxMTg2LDcgQEAgdm9pZCByYXZiX21vZGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgZW51bSByYXZiX3JlZyByZWcsIHUzMiBjbGVhciwKIGludCByYXZiX3dhaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKIAogdm9pZCByYXZiX3B0cF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwotdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKJiM0MztpbnQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogCiAjZW5kaWYJLyogI2lmbmRlZiBfX1JBVkJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYwppbmRleCA1Zjg4NzMzMDk0ZDBmLi4zMDE3MGU5MmQzZDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMKQEAgLTcwNyw3ICYjNDM7NzA3LDE1IEBAIHN0YXRpYyBpbnQgcmF2Yl9kbWFjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCXJldHVybiBlcnJvcjsKIAogCS8qIFNldHRpbmcgdGhlIGNvbnRyb2wgd2lsbCBzdGFydCB0aGUgQVZCLURNQUMgcHJvY2Vzcy4gKi8KLQlyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfT1BFUkFUSU9OKTsKJiM0MzsJZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19PUEVSQVRJT04pOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqLwomIzQzOwlpZiAoaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaW5mby0mZ3Q7cHRwLSZndDtkbWFjX3N0YXJ0KQomIzQzOwkJcmV0dXJuIGluZm8tJmd0O3B0cC0mZ3Q7ZG1hY19zdGFydChuZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHJhdmJfZ2V0X3R4X3RzdGFtcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKQEAgLTExMTUsNiAmIzQzOzExMjMsMTAgQEAgc3RhdGljIGludCByYXZiX3N0b3BfZG1hKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O2ZhaWxlZCB0byBzdG9wIEFYSSBCVVNcbiYjMzQ7KTsKIAl9CiAKJiM0MzsJLyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovCiYjNDM7CWlmIChpbmZvLSZndDtwdHAgJmFtcDsmYW1wOyBpbmZvLSZndDtwdHAtJmd0O2RtYWNfc3RvcCkKJiM0MzsJCWluZm8tJmd0O3B0cC0mZ3Q7ZG1hY19zdG9wKG5kZXYpOwomIzQzOwogCS8qIFN0b3AgQVZCLURNQUMgcHJvY2VzcyAqLwogCXJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpOwogfQpAQCAtMTcxOSw5ICYjNDM7MTczMSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKIAkJbmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTsKLQkJLyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovCi0JCWlmIChpbmZvLSZndDtncHRwKQotCQkJcmF2Yl9wdHBfc3RvcChuZGV2KTsKJiM0MzsKIAkJLyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovCiAJCWVycm9yID0gcmF2Yl9zdG9wX2RtYShuZGV2KTsKIAkJaWYgKGVycm9yKSB7CkBAIC0xNzUyLDEwICYjNDM7MTc2Miw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCiAJCXJhdmJfZW1hY19pbml0KG5kZXYpOwogCi0JCS8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqLwotCQlpZiAoaW5mby0mZ3Q7Z3B0cCkKLQkJCXJhdmJfcHRwX2luaXQobmRldiwgcHJpdi0mZ3Q7cGRldik7Ci0KIAkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKIAl9CiAKQEAgLTE3NjcsOCAmIzQzOzE3NzMsMTMgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogewogCXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAljb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICpod19pbmZvID0gcHJpdi0mZ3Q7aW5mbzsKJiM0MzsJaW50IGluZGV4ID0gLTE7CiYjNDM7CiYjNDM7CWlmIChod19pbmZvLSZndDtwdHAgJmFtcDsmYW1wOyBod19pbmZvLSZndDtwdHAtJmd0O2Nsb2NrX2luZGV4KQomIzQzOwkJaW5kZXggPSBod19pbmZvLSZndDtwdHAtJmd0O2Nsb2NrX2luZGV4KG5kZXYpOwogCi0JaWYgKGh3X2luZm8tJmd0O2dwdHAgfHwgaHdfaW5mby0mZ3Q7Y2NjX2dhYykgewomIzQzOwkvKiBPbmx5IGFkdmVydGlzZSBwdHAgY2xvY2sgaWYgcHJlc2VudC4gKi8KJiM0MzsJaWYgKGluZGV4ICZndDs9IDApIHsKIAkJaW5mby0mZ3Q7c29fdGltZXN0YW1waW5nID0KIAkJCVNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfAogCQkJU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8CkBAIC0xNzc5LDcgJiM0MzsxNzkwLDcgQEAgc3RhdGljIGludCByYXZiX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJKDEgJmx0OyZsdDsgSFdUU1RBTVBfRklMVEVSX05PTkUpIHwKIAkJCSgxICZsdDsmbHQ7IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQpIHwKIAkJCSgxICZsdDsmbHQ7IEhXVFNUQU1QX0ZJTFRFUl9BTEwpOwotCQlpbmZvLSZndDtwaGNfaW5kZXggPSBwdHBfY2xvY2tfaW5kZXgocHJpdi0mZ3Q7cHRwLmNsb2NrKTsKJiM0MzsJCWluZm8tJmd0O3BoY19pbmRleCA9IGluZGV4OwogCX0KIAogCXJldHVybiAwOwpAQCAtMTgyNiw1NSAmIzQzOzE4MzcsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyByYXZiX2V0aHRvb2xfb3BzID0gewogfTsKIAogc3RhdGljIGludCByYXZiX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKLXsKLQlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtJmd0O2luZm87Ci0JaW50IGVycm9yOwotCi0JaWYgKGluZm8tJmd0O2dwdHApIHsKLQkJZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCS8qIFNldCBDU0VMIHZhbHVlICovCi0JCXJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7Ci0JfSBlbHNlIGlmIChpbmZvLSZndDtjY2NfZ2FjKSB7Ci0JCWVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7Ci0JfSBlbHNlIHsKLQkJZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpOwotCX0KLQotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIHZvaWQgcmF2Yl9zZXRfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAljb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi0mZ3Q7aW5mbzsKIAotCWlmICghKGluZm8tJmd0O2dwdHAgfHwgaW5mby0mZ3Q7Y2NjX2dhYykpCi0JCXJldHVybjsKJiM0MzsJaWYgKGluZm8tJmd0O3B0cCAmYW1wOyZhbXA7IGluZm8tJmd0O3B0cC0mZ3Q7c2V0X2NvbmZpZ19tb2RlKQomIzQzOwkJcmV0dXJuIGluZm8tJmd0O3B0cC0mZ3Q7c2V0X2NvbmZpZ19tb2RlKG5kZXYpOwogCi0JcmF2Yl93cml0ZShuZGV2LCBwcml2LSZndDtndGlfdGl2LCBHVEkpOwotCi0JLyogUmVxdWVzdCBHVEkgbG9hZGluZyAqLwotCXJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfTFRJLCBHQ0NSX0xUSSk7CiYjNDM7CXJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpOwogfQogCi1zdGF0aWMgaW50IHJhdmJfY29tcHV0ZV9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7c3RhdGljIGludCByYXZiX2NvbXB1dGVfZ3RpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgY2xrICpjbGspCiB7CiAJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwotCWNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LSZndDtpbmZvOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IG5kZXYtJmd0O2Rldi5wYXJlbnQ7CiAJdW5zaWduZWQgbG9uZyByYXRlOwogCXU2NCBpbmM7CiAKLQlpZiAoIShpbmZvLSZndDtncHRwIHx8IGluZm8tJmd0O2NjY19nYWMpKQotCQlyZXR1cm4gMDsKLQotCWlmIChpbmZvLSZndDtncHRwX3JlZl9jbGspCi0JCXJhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi0mZ3Q7Z3B0cF9jbGspOwotCWVsc2UKLQkJcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LSZndDtjbGspOwomIzQzOwlyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CiAJaWYgKCFyYXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTk3NCwxMSAmIzQzOzE5NTQsMTIgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAKIAlyYXZiX2VtYWNfaW5pdChuZGV2KTsKIAotCXJhdmJfc2V0X2d0aShuZGV2KTsKLQogCS8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqLwotCWlmIChpbmZvLSZndDtncHRwIHx8IGluZm8tJmd0O2NjY19nYWMpCi0JCXJhdmJfcHRwX2luaXQobmRldiwgcHJpdi0mZ3Q7cGRldik7CiYjNDM7CWlmIChpbmZvLSZndDtwdHAgJmFtcDsmYW1wOyBpbmZvLSZndDtwdHAtJmd0O25kZXZfb3BlbikgewomIzQzOwkJZXJyb3IgPSBpbmZvLSZndDtwdHAtJmd0O25kZXZfb3BlbihuZGV2KTsKJiM0MzsJCWlmIChlcnJvcikKJiM0MzsJCQlnb3RvIG91dF9wdHBfc3RvcDsKJiM0MzsJfQogCiAJLyogUEhZIGNvbnRyb2wgc3RhcnQgKi8KIAllcnJvciA9IHJhdmJfcGh5X3N0YXJ0KG5kZXYpOwpAQCAtMTk5MCw5ICYjNDM7MTk3MSw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCXJldHVybiAwOwogCiBvdXRfcHRwX3N0b3A6Ci0JLyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovCi0JaWYgKGluZm8tJmd0O2dwdHAgfHwgaW5mby0mZ3Q7Y2NjX2dhYykKLQkJcmF2Yl9wdHBfc3RvcChuZGV2KTsKIAlyYXZiX3N0b3BfZG1hKG5kZXYpOwogb3V0X3NldF9yZXNldDoKIAlyYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19SRVNFVCk7CkBAIC0yMDM2LDEwICYjNDM7MjAxNCw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZGV2KTsKIAotCS8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqLwotCWlmIChpbmZvLSZndDtncHRwKQotCQlyYXZiX3B0cF9zdG9wKG5kZXYpOwotCiAJLyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovCiAJaWYgKHJhdmJfc3RvcF9kbWEobmRldikpIHsKIAkJLyogSWYgcmF2Yl9zdG9wX2RtYSgpIGZhaWxzLCB0aGUgaGFyZHdhcmUgaXMgc3RpbGwgb3BlcmF0aW5nCkBAIC0yMDcyLDEwICYjNDM7MjA0Niw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlyYXZiX2VtYWNfaW5pdChuZGV2KTsKIAogb3V0OgotCS8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqLwotCWlmIChpbmZvLSZndDtncHRwKQotCQlyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtJmd0O3BkZXYpOwotCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZGV2KTsKIAogb3V0X3VubG9jazoKQEAgLTIyMDgsNyAmIzQzOzIxNzgsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgcmF2Yl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCWRlc2MtJmd0O2RwdHIgPSBjcHVfdG9fbGUzMihkbWFfYWRkcik7CiAKIAkvKiBUWCB0aW1lc3RhbXAgcmVxdWlyZWQgKi8KLQlpZiAoaW5mby0mZ3Q7Z3B0cCB8fCBpbmZvLSZndDtjY2NfZ2FjKSB7CiYjNDM7CWlmIChpbmZvLSZndDtwdHApIHsKIAkJaWYgKHEgPT0gUkFWQl9OQykgewogCQkJdHNfc2tiID0ga21hbGxvY19vYmooKnRzX3NrYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoIXRzX3NrYikgewpAQCAtMjM5MCw4ICYjNDM7MjM2MCw4IEBAIHN0YXRpYyBpbnQgcmF2Yl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAl9CiAKIAkvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi8KLQlpZiAoaW5mby0mZ3Q7Z3B0cCB8fCBpbmZvLSZndDtjY2NfZ2FjKQotCQlyYXZiX3B0cF9zdG9wKG5kZXYpOwomIzQzOwlpZiAoaW5mby0mZ3Q7cHRwICZhbXA7JmFtcDsgaW5mby0mZ3Q7cHRwLSZndDtuZGV2X2Nsb3NlKQomIzQzOwkJaW5mby0mZ3Q7cHRwLSZndDtuZGV2X2Nsb3NlKG5kZXYpOwogCiAJLyogU2V0IHRoZSBjb25maWcgbW9kZSB0byBzdG9wIHRoZSBBVkItRE1BQyYjMzk7cyBwcm9jZXNzZXMgKi8KIAlpZiAocmF2Yl9zdG9wX2RtYShuZGV2KSAmbHQ7IDApCkBAIC0yMzk5LDcgJiM0MzsyMzY5LDcgQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQkJICAgJiMzNDtkZXZpY2Ugd2lsbCBiZSBzdG9wcGVkIGFmdGVyIGgvdyBwcm9jZXNzZXMgYXJlIGRvbmUuXG4mIzM0Oyk7CiAKIAkvKiBDbGVhciB0aGUgdGltZXN0YW1wIGxpc3QgKi8KLQlpZiAoaW5mby0mZ3Q7Z3B0cCB8fCBpbmZvLSZndDtjY2NfZ2FjKSB7CiYjNDM7CWlmIChpbmZvLSZndDtwdHApIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRzX3NrYiwgdHNfc2tiMiwgJmFtcDtwcml2LSZndDt0c19za2JfbGlzdCwgbGlzdCkgewogCQkJbGlzdF9kZWwoJmFtcDt0c19za2ItJmd0O2xpc3QpOwogCQkJa2ZyZWVfc2tiKHRzX3NrYi0mZ3Q7c2tiKTsKQEAgLTI2ODEsNiAmIzQzOzI2NTEsNDIgQEAgc3RhdGljIGludCByYXZiX21kaW9fcmVsZWFzZShzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCByYXZiX2dlbjJfcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmF2Yl9jb21wdXRlX2d0aShuZGV2LCBwcml2LSZndDtjbGspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CiYjNDM7CXJldHVybiBwdHBfY2xvY2tfaW5kZXgocHJpdi0mZ3Q7cHRwLmNsb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBnUFRQIENsb2NrIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqLwomIzQzOwlyYXZiX21vZGlmeShuZGV2LCBDQ0MsIENDQ19DU0VMLCBDQ0NfQ1NFTF9IUEIpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjJfcHRwX2luZm8gPSB7CiYjNDM7CS5wcm9iZSA9IHJhdmJfZ2VuMl9wdHBfcHJvYmUsCiYjNDM7CS5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsCiYjNDM7CS5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSwKJiM0MzsJLmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LAomIzQzOwkuZG1hY19zdG9wID0gcmF2Yl9wdHBfc3RvcCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4yX2h3X2luZm8gPSB7CiAJLnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsCiAJLnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLApAQCAtMjY5OSwxMiAmIzQzOzI3MDUsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4yX2h3X2luZm8gPSB7CiAJCQkgIFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSksCiAJLnJ4X2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmF2Yl9leF9yeF9kZXNjKSwKIAkuZGJhdF9lbnRyeV9udW0gPSAyMiwKJiM0MzsJLnB0cCA9ICZhbXA7cmF2Yl9nZW4yX3B0cF9pbmZvLAogCS5hbGlnbmVkX3R4ID0gMSwKLQkuZ3B0cCA9IDEsCiAJLm5jX3F1ZXVlcyA9IDEsCiAJLm1hZ2ljX3BrdCA9IDEsCiB9OwogCiYjNDM7c3RhdGljIGludCByYXZiX2dlbjNfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CS8qIEVuYWJsZSBnUFRQIENsb2NrIGFuZCBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi8KJiM0MzsJcmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuM19wdHBfaW5mbyA9IHsKJiM0MzsJLnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSwKJiM0MzsJLmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCwKJiM0MzsJLnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlLAomIzQzOwkubmRldl9vcGVuID0gcmF2Yl9wdHBfaW5pdCwKJiM0MzsJLm5kZXZfY2xvc2UgPSByYXZiX3B0cF9zdG9wLAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHsKIAkucmVjZWl2ZSA9IHJhdmJfcnhfcmNhciwKIAkuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsCkBAIC0yNzIzLDE1ICYjNDM7Mjc0Myw2OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHsKIAkJCSAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSwKIAkucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLAogCS5kYmF0X2VudHJ5X251bSA9IDIyLAomIzQzOwkucHRwID0gJmFtcDtyYXZiX2dlbjNfcHRwX2luZm8sCiAJLmludGVybmFsX2RlbGF5ID0gMSwKIAkudHhfY291bnRlcnMgPSAxLAogCS5tdWx0aV9pcnFzID0gMSwKIAkuaXJxX2VuX2RpcyA9IDEsCi0JLmNjY19nYWMgPSAxLAogCS5uY19xdWV1ZXMgPSAxLAogCS5tYWdpY19wa3QgPSAxLAogfTsKIAomIzQzO3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7b2ZfZ3B0cCA9CiYjNDM7CQlvZl9wYXJzZV9waGFuZGxlKHByaXYtJmd0O3BkZXYtJmd0O2Rldi5vZl9ub2RlLCAmIzM0O3B0cC10aW1lciYjMzQ7LCAwKTsKJiM0MzsJaWYgKCFwcml2LSZndDtvZl9ncHRwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwcml2LSZndDtvZl9ncHRwKSkgewomIzQzOwkJb2Zfbm9kZV9wdXQocHJpdi0mZ3Q7b2ZfZ3B0cCk7CiYjNDM7CQlwcml2LSZndDtvZl9ncHRwID0gTlVMTDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CiYjNDM7CS8qIElmIG5vIGNsb2NrLCBtaW1pYyBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZSgpIGZhaWwgYW5kIHJldHVybiAtMSAqLwomIzQzOwlpZiAoIXByaXYtJmd0O29mX2dwdHApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZShwcml2LSZndDtvZl9ncHRwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXZiX2dlbjRfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqLwomIzQzOwlyZXQgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIFNldCBQVFAgc291cmNlIHRvIEdQVFAgbW9kdWxlLCBvbmx5IG9wdGlvbiBvbiBHZW40LiAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7b2ZfZ3B0cCkKJiM0MzsJCXJhdmJfbW9kaWZ5KG5kZXYsIEFQU1IsIEFQU1JfR1BUUFRJTUVSX1NPVVJDRSB8IEFQU1JfR1BUUENMT0NLLAomIzQzOwkJCSAgICBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuNF9wdHBfaW5mbyA9IHsKJiM0MzsJLnByb2JlID0gcmF2Yl9nZW40X3B0cF9wcm9iZSwKJiM0MzsJLmNsb2NrX2luZGV4ID0gcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleCwKJiM0MzsJLnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuNF9wdHBfc2V0X2NvbmZpZ19tb2RlLAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjRfaHdfaW5mbyA9IHsKIAkucmVjZWl2ZSA9IHJhdmJfcnhfcmNhciwKIAkuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsCkBAIC0yNzU0LDExICYjNDM7MjgyNywzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjRfaHdfaW5mbyA9IHsKIAkudHhfY291bnRlcnMgPSAxLAogCS5tdWx0aV9pcnFzID0gMSwKIAkuaXJxX2VuX2RpcyA9IDEsCi0JLmNjY19nYWMgPSAxLAomIzQzOwkucHRwID0gJmFtcDtyYXZiX2dlbjRfcHRwX2luZm8sCiAJLm5jX3F1ZXVlcyA9IDEsCiAJLm1hZ2ljX3BrdCA9IDEsCiB9OwogCiYjNDM7c3RhdGljIGludCByYXZiX3J6djJtX3B0cF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7Z3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoJmFtcDtwcml2LSZndDtwZGV2LSZndDtkZXYsICYjMzQ7Z3B0cCYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtncHRwX2NsaykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihwcml2LSZndDtncHRwX2Nsayk7CiYjNDM7CiYjNDM7CXJldHVybiByYXZiX2NvbXB1dGVfZ3RpKG5kZXYsIHByaXYtJmd0O2dwdHBfY2xrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX3J6djJtX3B0cF9pbmZvID0gewomIzQzOwkucHJvYmUgPSByYXZiX3J6djJtX3B0cF9wcm9iZSwKJiM0MzsJLmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCwKJiM0MzsJLnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlLAomIzQzOwkuZG1hY19zdGFydCA9IHJhdmJfcHRwX2luaXQsCiYjNDM7CS5kbWFjX3N0b3AgPSByYXZiX3B0cF9zdG9wLAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX3J6djJtX2h3X2luZm8gPSB7CiAJLnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsCiAJLnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLApAQCAtMjc3OSw4ICYjNDM7Mjg3MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHsKIAkuZGJhdF9lbnRyeV9udW0gPSAyMiwKIAkubXVsdGlfaXJxcyA9IDEsCiAJLmVycl9tZ210X2lycXMgPSAxLAotCS5ncHRwID0gMSwKLQkuZ3B0cF9yZWZfY2xrID0gMSwKJiM0MzsJLnB0cCA9ICZhbXA7cmF2Yl9yenYybV9wdHBfaW5mbywKIAkubmNfcXVldWVzID0gMSwKIAkubWFnaWNfcGt0ID0gMSwKIH07CkBAIC0yOTcwLDEyICYjNDM7MzA2MSwxMCBAQCBzdGF0aWMgaW50IHJhdmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJZ290byBvdXRfcmVzZXRfYXNzZXJ0OwogCX0KIAotCWlmIChpbmZvLSZndDtncHRwX3JlZl9jbGspIHsKLQkJcHJpdi0mZ3Q7Z3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7Z3B0cCYjMzQ7KTsKLQkJaWYgKElTX0VSUihwcml2LSZndDtncHRwX2NsaykpIHsKLQkJCWVycm9yID0gUFRSX0VSUihwcml2LSZndDtncHRwX2Nsayk7CiYjNDM7CWlmIChpbmZvLSZndDtwdHAgJmFtcDsmYW1wOyBpbmZvLSZndDtwdHAtJmd0O3Byb2JlKSB7CiYjNDM7CQllcnJvciA9IGluZm8tJmd0O3B0cC0mZ3Q7cHJvYmUobmRldik7CiYjNDM7CQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dF9yZXNldF9hc3NlcnQ7Ci0JCX0KIAl9CiAKIAlwcml2LSZndDtyZWZjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWwoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7cmVmY2xrJiMzNDspOwpAQCAtMzAyOCwxMCAmIzQzOzMxMTcsNiBAQCBzdGF0aWMgaW50IHJhdmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAluZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDtyYXZiX25ldGRldl9vcHM7CiAJbmRldi0mZ3Q7ZXRodG9vbF9vcHMgPSAmYW1wO3JhdmJfZXRodG9vbF9vcHM7CiAKLQllcnJvciA9IHJhdmJfY29tcHV0ZV9ndGkobmRldik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9ycG1fcHV0OwotCiAJcmF2Yl9wYXJzZV9kZWxheV9tb2RlKG5wLCBuZGV2KTsKIAogCS8qIEFsbG9jYXRlIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzIHRhYmxlICovCkBAIC0zMTU0LDYgJiM0MzszMjM5LDcgQEAgc3RhdGljIHZvaWQgcmF2Yl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlwbV9ydW50aW1lX2Rpc2FibGUoJmFtcDtwZGV2LSZndDtkZXYpOwogCXBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTsKIAljbGtfdW5wcmVwYXJlKHByaXYtJmd0O3JlZmNsayk7CiYjNDM7CW9mX25vZGVfcHV0KHByaXYtJmd0O29mX2dwdHApOwogCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtJmd0O3JzdGMpOwogCWZyZWVfbmV0ZGV2KG5kZXYpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpAQCAtMzE3OSw5ICYjNDM7MzI2NSw2IEBAIHN0YXRpYyBpbnQgcmF2Yl93b2xfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJLyogRW5hYmxlIE1hZ2ljUGFja2V0ICovCiAJcmF2Yl9tb2RpZnkobmRldiwgRUNNUiwgRUNNUl9NUERFLCBFQ01SX01QREUpOwogCi0JaWYgKHByaXYtJmd0O2luZm8tJmd0O2NjY19nYWMpCi0JCXJhdmJfcHRwX3N0b3AobmRldik7Ci0KIAlyZXR1cm4gZW5hYmxlX2lycV93YWtlKHByaXYtJmd0O2VtYWNfaXJxKTsKIH0KIApAQCAtMzIwMSw5ICYjNDM7MzI4NCw2IEBAIHN0YXRpYyBpbnQgcmF2Yl93b2xfcmVzdG9yZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWlmIChwcml2LSZndDtpbmZvLSZndDtjY2NfZ2FjKQotCQlyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtJmd0O3BkZXYpOwotCiAJaWYgKGluZm8tJmd0O25jX3F1ZXVlcykKIAkJbmFwaV9lbmFibGUoJmFtcDtwcml2LSZndDtuYXBpW1JBVkJfTkNdKTsKIAluYXBpX2VuYWJsZSgmYW1wO3ByaXYtJmd0O25hcGlbUkFWQl9CRV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jCmluZGV4IDIyNmM2YzBhYjk0NWIuLjQ3M2EyYWVkYjc0NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmMKQEAgLTMxMiwyMiAmIzQzOzMxMiwzOSBAQCB2b2lkIHJhdmJfcHRwX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlyYXZiX3dyaXRlKG5kZXYsIH4oZ2lzIHwgR0lTX1JFU0VSVkVEKSwgR0lTKTsKIH0KIAotdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQomIzQzO2ludCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlpbnQgcmV0ID0gMDsKIAogCXByaXYtJmd0O3B0cC5pbmZvID0gcmF2Yl9wdHBfaW5mbzsKIAotCXByaXYtJmd0O3B0cC5kZWZhdWx0X2FkZGVuZCA9IHJhdmJfcmVhZChuZGV2LCBHVEkpOwomIzQzOwlwcml2LSZndDtwdHAuZGVmYXVsdF9hZGRlbmQgPSBwcml2LSZndDtndGlfdGl2OwogCXByaXYtJmd0O3B0cC5jdXJyZW50X2FkZGVuZCA9IHByaXYtJmd0O3B0cC5kZWZhdWx0X2FkZGVuZDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHJpdi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkvKiBTZXQgZ1BUUCBUaW1lciBJbmNyZW1lbnQgVmFsdWUuICovCiYjNDM7CXJhdmJfd3JpdGUobmRldiwgcHJpdi0mZ3Q7cHRwLmRlZmF1bHRfYWRkZW5kLCBHVEkpOwomIzQzOwomIzQzOwkvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nLiAqLwomIzQzOwlyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX0xUSSwgR0NDUl9MVEkpOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBHSVQgbG9hZGluZyB0byBjb21wbGV0ZS4gKi8KIAlyYXZiX3dhaXQobmRldiwgR0NDUiwgR0NDUl9UQ1IsIEdDQ1JfVENSX05PUkVRKTsKJiM0MzsKIAlyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX1RDU1MsIEdDQ1JfVENTU19BREpHUFRQKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHJpdi0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JcHJpdi0mZ3Q7cHRwLmNsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKCZhbXA7cHJpdi0mZ3Q7cHRwLmluZm8sICZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJcHJpdi0mZ3Q7cHRwLmNsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKCZhbXA7cHJpdi0mZ3Q7cHRwLmluZm8sICZhbXA7cHJpdi0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtwdHAuY2xvY2spKSB7CiYjNDM7CQlyZXQgPSBQVFJfRVJSKHByaXYtJmd0O3B0cC5jbG9jayk7CiYjNDM7CQlwcml2LSZndDtwdHAuY2xvY2sgPSBOVUxMOwomIzQzOwkJcmF2Yl9wdHBfc3RvcChuZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC0zMzcsNSAmIzQzOzM1NCw2IEBAIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlyYXZiX3dyaXRlKG5kZXYsIDAsIEdJQyk7CiAJcmF2Yl93cml0ZShuZGV2LCAwLCBHSVMpOwogCi0JcHRwX2Nsb2NrX3VucmVnaXN0ZXIocHJpdi0mZ3Q7cHRwLmNsb2NrKTsKJiM0MzsJaWYgKHByaXYtJmd0O3B0cC5jbG9jaykKJiM0MzsJCXB0cF9jbG9ja191bnJlZ2lzdGVyKHByaXYtJmd0O3B0cC5jbG9jayk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGdQVFAgUmVmYWN0b3JpbmcgaW4gdGhlIFJlbmVzYXMgUkFWQiBEcml2ZXIqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgcmVmYWN0b3JpbmcgdGhlIGdQVFAgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYHJhdmJgIGRyaXZlci4gSXQmIzM5O3MgYWRkaW5nIGEgbmV3IGByYXZiX2dwdHBfaW5mb2Agc3RydWN0IGFuZCBjYWxsYmFjayBmdW5jdGlvbnMgdG8gaGFuZGxlIHBsYXRmb3JtLXNwZWNpZmljIGdQVFAgYmVoYXZpb3IsIGluY2x1ZGluZyBzdXBwb3J0IGZvciBHZW40IGdQVFAgdXNpbmcgYW4gZXh0ZXJuYWwgUFRQIHRpbWVyLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgcmVhY2hhYmlsaXR5IOKAkyBjYW4gdGhpcyBjb2RlIGFjdHVhbGx5ICpiZSogdHJpZ2dlcmVkIGluIGEgcmVhbGlzdGljIGVudmlyb25tZW50PwoKR2l2ZW4gdGhlIGRyaXZlciBwYXRoLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiYCwgaXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSB0aWVkIHRvIHBoeXNpY2FsIGhhcmR3YXJlLCBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXJzIGZvdW5kIGluIFJlbmVzYXMgUi1DYXIgU29Dcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHRoaXMgY2FuIGJlIHJlbGlhYmx5IGVtdWxhdGVkLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgZnVsbCBSLUNhciBTb0MgZW11bGF0aW9uIGluIHNvbWV0aGluZyBsaWtlIFFFTVUgY2FuIGJlIHBhdGNoeSBhdCBiZXN0LCBvciBpbmNyZWRpYmx5IHNwZWNpZmljIGluIGl0cyBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgUUVNVSBzdXBwb3J0IGZvciBSZW5lc2FzIEV0aGVybmV0IEFWQiBzcGVjaWZpY2FsbHkuCgpXYWl0IGEgbWludXRlLCBzeXprYWxsZXIgKnVzdWFsbHkqIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlc2UgdHlwZXMgb2YgcGxhdGZvcm0gZGV2aWNlcyBpbiBpdHMgc3RhbmRhcmQgUUVNVSBzZXR1cCB1bmxlc3MgaXQmIzM5O3MgYSBnZW5lcmljIFBDSSBkZXZpY2UsIGFuZCB0aGlzIGlzIGRlZmluaXRlbHkgRFQtYmFzZWQuIFRoYXQgbWVhbnMgaXQgbWlnaHQgYmUgY2hhbGxlbmdpbmcgdG8gdHJpZ2dlciB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB0ZXN0aW5nIGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBhYm91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBwcm92aWRlIGEgd29ya2Fyb3VuZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgaGFyZHdhcmUgaXMgdmlydHVhbGl6YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkFWQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc9MTk9Y29uZmlnIFNIX0VUSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZzoyOTpjb25maWcgUkFWQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7UmVuZXNhcyBFdGhlcm5ldCBBVkIgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDc2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIFJBVkImIzM5O3MgZGVwZW5kZW5jaWVzLCBhcyB0aG91Z2ggSSB3ZXJlIGFuIGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgUkFWQioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBtZW50YWxseSBza2V0Y2hpbmcgb3V0IHRoZSBsYW5kc2NhcGUgb2YgUkFWQi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciBzeXN0ZW1zLCBsaWJyYXJpZXMsIG9yIGV4dGVybmFsIHJlc291cmNlcyBkb2VzIGl0IHJlbHkgb24gdG8gZnVuY3Rpb24/IElzIGl0IHRpZ2h0bHkgY291cGxlZCB0byBzb21lIHNwZWNpZmljIGluZnJhc3RydWN0dXJlLCBvciBpcyBpdCBkZXNpZ25lZCB3aXRoIGEgZGVncmVlIG9mIG1vZHVsYXJpdHk/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6CgoqICAgKipVbmRlcmx5aW5nIHRlY2hub2xvZ2llczoqKiBEb2VzIGl0IGxldmVyYWdlIGEgcGFydGljdWxhciBkYXRhYmFzZSwgbWVzc2FnZSBxdWV1ZSwgb3IgY2xvdWQgcGxhdGZvcm0/IEtub3dpbmcgdGhpcyBxdWlja2x5IGluZGljYXRlcyBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcGFpbiBwb2ludHMgb3Igc2NhbGFiaWxpdHkgbGltaXRhdGlvbnMuCiogICAqKkV4dGVybmFsIEFQSXMvc2VydmljZXM6KiogSXMgUkFWQiBkZXBlbmRlbnQgb24gb3RoZXIgc3lzdGVtcyBvciBzZXJ2aWNlcyBvdXRzaWRlIGl0cyBkaXJlY3QgY29udHJvbD8gSWYgc28sIEkgbmVlZCB0byBrbm93IHRoZSByZWxpYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRob3NlIGRlcGVuZGVuY2llcy4gVGhpcyBhbHNvIGhpZ2hsaWdodHMgYW55IHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucyBhcmlzaW5nIGZyb20gdGhvc2UgZGVwZW5kZW5jaWVzLgoqICAgKipJbnRlcm5hbCBtb2R1bGVzIGFuZCBsaWJyYXJpZXM6KiogSG93IGlzIFJBVkIgc3RydWN0dXJlZCBpbnRlcm5hbGx5PyBBcmUgdGhlcmUgc3BlY2lmaWMgbW9kdWxlcyBvciBsaWJyYXJpZXMgdGhhdCBpdCBsZWFucyBoZWF2aWx5IG9uPyBVbmRlcnN0YW5kaW5nIHRoZXNlIGlubmVyIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMsIHJlZmFjdG9yaW5nLCBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLgoqICAgKipWZXJzaW9uaW5nIGFuZCBDb21wYXRpYmlsaXR5OioqIFdoYXQgdmVyc2lvbnMgb2YgdGhlc2UgZGVwZW5kZW5jaWVzIGFyZSByZXF1aXJlZCBvciBzdXBwb3J0ZWQ/IEFueSBjb21wYXRpYmlsaXR5IGlzc3VlcyBhbmQgcG90ZW50aWFsIGJyZWFraW5nIGNoYW5nZXMgYmVjb21lIHZpdGFsIHRvIGNvbnNpZGVyLgoqICAgKipDb25maWd1cmF0aW9uOioqIElzIGl0cyBiZWhhdmlvciBkZXBlbmRlbnQgb24gdGhlIGlucHV0IHBhcmFtZXRlcnMgdG8gUkFWQj8gV2hhdCBzcGVjaWZpYyB0eXBlcyBvZiBpbnB1dHMgYXJlIGFjY2VwdGVkIGFuZCBob3cgdGhleSBhZmZlY3QgdGhlIGZ1bmN0aW9uYWxpdHk/CiogICAqKkRhdGEgRGVwZW5kZW5jaWVzOioqIFdoYXQgaXMgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YT8KCkkmIzM5O20gZXNzZW50aWFsbHkgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIFJBVkImIzM5O3MgZWNvc3lzdGVtLCBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByaXNrcywgYW5kIGFyZWFzIG9mIGFyY2hpdGVjdHVyYWwgc3RyZW5ndGguIFRoaXMgaXMgdGhlIGdyb3VuZHdvcmsgZm9yIGFueSBzZXJpb3VzIGFuYWx5c2lzIG9yIGludGVydmVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjk6XHRjb25maWcgUkFWQlxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVuZXNhcyBFdGhlcm5ldCBBVkIgc3VwcG9ydFwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgfHwgQ09NUElMRV9URVNUXG4gIDMyOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDMzOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMzQ6XHRcdHNlbGVjdCBNSUlcbiAgMzU6XHRcdHNlbGVjdCBNRElPX0JJVEJBTkdcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMzc6XHRcdHNlbGVjdCBQSFlMSUJcbiAgMzg6XHRcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFJlbmVzYXMgRXRoZXJuZXQgQVZCIGRldmljZSBkcml2ZXIuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIFJFTkVTQVNfRVRIRVJfU1dJVENIXG4gIDQzOlx0XHR0cmlzdGF0ZSBcJiMzNDtSZW5lc2FzIEV0aGVybmV0IFN3aXRjaCBzdXBwb3J0XCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEFSQ0hfUkVORVNBUyB8fCBDT01QSUxFX1RFU1RcbiAgNDU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAgNDY6XHRcdHNlbGVjdCBDUkMzMlxuICA0NzpcdFx0c2VsZWN0IE1JSVxuICA0ODpcdFx0c2VsZWN0IFBIWUxJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc0NwoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiA4NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBVbnJlYWNoYWJsZSBDb2RlIGluIFN0YW5kYXJkIEZ1enppbmcgRW52aXJvbm1lbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBoaW5nZXMgb24gd2hldGhlciB0aGlzIGNvZGUgaXMgYWNjZXNzaWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZywgcGFydGljdWxhcmx5IGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiAgSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyBgcmF2Yl9tYWluLmNgIGFuZCBgcmF2Yl9wdHAuY2AsIGJ1dCB0aGUgY29yZSBvZiB0aGUgaXNzdWUgbGllcyBpbiB0aGUgZHJpdmVyIGl0c2VsZiwgYHJhdmJfZHJpdmVyYC4gIEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLiBQbGF0Zm9ybSBkcml2ZXJzLCBnZW5lcmFsbHksIGFyZSBhIHJlZCBmbGFnIGZvciBzdGFuZGFyZCBmdXp6aW5nLiBUaGV5IHJlbHkgb24gdGhlIHByZXNlbmNlIG9mIGEgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0gYW5kLCBjcml0aWNhbGx5LCB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2RlcyBmb3IgcHJvYmluZy4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcGFydGljdWxhciBkZXZpY2UsIFJlbmVzYXMgRXRoZXJuZXQgQVZCLCBpcyBsaWtlbHkgdG8gYmUgZW11bGF0ZWQgb3IgZXZlbiByZXByZXNlbnRlZCBpbiBzdGFuZGFyZCBzZXR1cHMuIEZyb20gcGFzdCBleHBlcmllbmNlcyBhbmQgbG9va2luZyBhdCB0aGUgZHJpdmVyIHN0cnVjdHVyZSAoYHJhdmJfZHJpdmVyYCksIHRoaXMgZHJpdmVyIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgUmVuZXNhcyBSLUNhciBTb0NzLiAgVGhhdCBtZWFucyBpdOKAmXMgZXhwZWN0aW5nIGEgZGV2aWNlIHRyZWUgbm9kZSB3aXRoIHNvbWV0aGluZyBsaWtlIGAmIzM0O3JlbmVzYXMsZXRoZXJhdmItcmNhci1nZW40JiMzNDtgIGFzIGEgY29tcGF0aWJsZSBzdHJpbmcuCgpTeXprYWxsZXIgKmNhbiogZnV6eiBwbGF0Zm9ybSBkZXZpY2VzLCBidXQgaXQgbmVlZHMgYSBzcGVjaWZpYyBtZWNoYW5pc206IGVpdGhlciBpdCB3b3VsZCBuZWVkIHRvIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcyBvciB1c2UgYSBzcGVjaWFsaXplZCBmdXp6ZXIuIEl0JiMzOTtzIG5vdCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSYjMzk7dmUgY29uc2lkZXJlZCB0aGF0IGBzeXpfZGV2X2luaXRgIG1pZ2h0IG9mZmVyIGEgYmFja2Rvb3Igb3IgdGhhdCBzeXprYWxsZXLigJlzIGRldmljZSBkZXNjcmlwdGlvbiBnZW5lcmF0aW9uIG1heSBoZWxwLCBidXQgdXN1YWxseSB0aGF0IG9ubHkgd29ya3MgZm9yIGV4cGxpY2l0bHkgc3VwcG9ydGVkIGRldmljZXMgb3Igc3Vic3lzdGVtcy4KCkNydWNpYWxseSwgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgKm5vdCogYSBQQ0kgb3IgVVNCIGRldmljZS4gV2l0aG91dCBhIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGUsIHRoaXMgY29kZSB3b24mIzM5O3QgYmUgcHJvYmVkIGluIGEgZGVmYXVsdCBRRU1VIHNldHVwLiBBbmQsIGxldCYjMzk7cyBiZSByZWFsaXN0aWMsIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHQ0Ugb3IgdGhlIHR5cGljYWwgYHFlbXUtc3lzdGVtLXg4Nl82NGAgb3IgYHFlbXUtc3lzdGVtLWFhcmNoNjQgLW1hY2hpbmUgdmlydGAgY29uZmlndXJhdGlvbnMsICpkb24mIzM5O3QqIGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBSZW5lc2FzIGhhcmR3YXJlLgoKSSYjMzk7dmUgZXZlbiBkb3VibGUtY2hlY2tlZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIFFFTVUgbWFjaGluZXMga25vd24gdG8gZW11bGF0ZSB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlLCBhbmQgdGhlcmUgYXJlIG5vdC4gU2luY2UgdGhlIHBhdGNoZWQgY29kZSBpcyBzcGVjaWZpYyB0byBhIHZlbmRvciBoYXJkd2FyZSBkZXZpY2UsIGFuZCBzaW5jZSBRRU1VIGRvZXMgbm90IGVtdWxhdGUgdGhpcyBkZXZpY2UsIGl0JiMzOTtzIGNsZWFyIHRoaXMgY29kZSBpcyBub3QgcmVhY2hhYmxlLiBFdmVuIGlmIGEgaHlwb3RoZXRpY2FsIGVtdWxhdGlvbiBleGlzdGVkLCBpdOKAmXMgdmVuZG9yLXNwZWNpZmljLCB3aGljaCBsZWFkcyBiYWNrIHRvIHRoZSBzYW1lIHByb2JsZW0uIFRoaXMgYWxsIGZhbGxzIHVuZGVyIHRoZSBjcml0ZXJpYSBkZWZpbmVkIGZvciBXb3J0aEZ1enppbmc9ZmFsc2UuCgpUaGVyZWZvcmUsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmFjdG9yaW5nIHRvIGdQVFAgc3VwcG9ydCBpbiBhIGRyaXZlciBmb3IgdGhlIFJlbmVzYXMgUi1DYXIgRXRoZXJuZXQgQVZCIGNvbnRyb2xsZXIuIFRoZSBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgUmVuZXNhcyBTb0MgYW5kIHJlcXVpcmUgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMuIEdpdmVuIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50IGxpbWl0YXRpb25zLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gVGhlcmVmb3JlLCBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBnUFRQIHN1cHBvcnQgaW4gdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChyYXZiKSBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBHZW40IGdQVFAgYW5kIGludHJvZHVjaW5nIGEgc3RydWN0IGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBjYWxsYmFja3MuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIGZvciBSZW5lc2FzIFItQ2FyIFNvQ3MuIFRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgdGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyB0byBwcm9iZS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgZ1BUUCBzdXBwb3J0IGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAocmF2YikgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgR2VuNCBnUFRQIGFuZCBpbnRyb2R1Y2luZyBhIHN0cnVjdCBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgY2FsbGJhY2tzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgUmVuZXNhcyBSLUNhciBTb0NzLiBUaGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgdG8gcHJvYmUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDE6MzQuNDExNTc2MzU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NDUxMjY2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgZ1BUUCBzdXBwb3J0IGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAocmF2YikgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgR2VuNCBnUFRQIGFuZCBpbnRyb2R1Y2luZyBhIHN0cnVjdCBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgY2FsbGJhY2tzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgUmVuZXNhcyBSLUNhciBTb0NzLiBUaGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgdG8gcHJvYmUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDE6MzQuNDExNTgxMDc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIxMjUxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkY2M3MDVmZmU4ZWJiZjY2OWM3OTMyZTY0MmE2MWQ1MGE1MWMwODAwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDE2OjQxOjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWxcXG5pbmRleCAxZTAwZWY1YjNhY2RhLi5mYWQwMDI0OTI0MjFhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWxcXG5AQCAtOTcsNiArOTcsOCBAQCBwcm9wZXJ0aWVzOlxcbiBcXG4gICBwaHktaGFuZGxlOiB0cnVlXFxuIFxcbisgIHB0cC10aW1lcjogdHJ1ZVxcbitcXG4gICAnI2FkZHJlc3MtY2VsbHMnOlxcbiAgICAgZGVzY3JpcHRpb246IE51bWJlciBvZiBhZGRyZXNzIGNlbGxzIGZvciB0aGUgTURJTyBidXMuXFxuICAgICBjb25zdDogMVxcbkBAIC0zMDUsNiArMzA3LDE1IEBAIGFsbE9mOlxcbiAgICAgICAgICAgICBpdGVtczpcXG4gICAgICAgICAgICAgICAtIGNvbnN0OiBmY2tcXG4gICAgICAgICAgICAgICAtIGNvbnN0OiByZWZjbGtcXG4rICAtIGlmOlxcbisgICAgICBub3Q6XFxuKyAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICAgIGNvbnRhaW5zOlxcbisgICAgICAgICAgICAgIGNvbnN0OiByZW5lc2FzLGV0aGVyYXZiLXJjYXItZ2VuNFxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBwdHAtdGltZXI6IGZhbHNlXFxuIFxcbiBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcXG5pbmRleCA1ZTU2ZWM5YjEwMTNhLi40YzhkYzAyMDIyZTIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmhcXG5AQCAtMjQ5LDYgKzI0OSw4IEBAIGVudW0gQVBTUl9CSVQge1xcbiBcXHRBUFNSX1JETVxcdD0gMHgwMDAwMjAwMCxcXG4gXFx0QVBTUl9URE1cXHQ9IDB4MDAwMDQwMDAsXFxuIFxcdEFQU1JfTUlJU0VMRUNUXFx0PSAweDAxMDAwMDAwLFxcdC8qIFItQ2FyIFY0TSBvbmx5ICovXFxuK1xcdEFQU1JfR1BUUFRJTUVSX1NPVVJDRSA9IEJJVCgyNSksIC8qIEdlbjQgKi9cXG4rXFx0QVBTUl9HUFRQQ0xPQ0tcXHQ9IEJJVCgyOSksXFx0LyogR2VuNCAqL1xcbiB9O1xcbiBcXG4gLyogUkNSICovXFxuQEAgLTEwMzQsNiArMTAzNiwzMSBAQCBzdHJ1Y3QgcmF2Yl9wdHAge1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHBlcm91dFtOX1BFUl9PVVRdO1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIHN0cnVjdCByYXZiX2dwdHBfaW5mbyAtIFBsYXRmb3JtIHNwZWNpZmljIGdQVFAgYmVoYXZpb3JcXG4rICpcXG4rICogRWFjaCBnZW5lcmF0aW9uIG9mIFJBVkIgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgYmVoYXZpb3JzIHdoZW4gaW50ZXJhY3RpbmdcXG4rICogd2l0aCB0aGUgZ1BUUCBjbG9jay4gVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNhbGxiYWNrcyB0byBiZSBjYWxsZWQgYXRcXG4rICogY3JpdGljYWwgcG9pbnRzIGluIHRoZSBSQVZCIGRyaXZlci5cXG4rICpcXG4rICogQHByb2JlOlxcdFxcdFByb2JlIHRoZSBnUFRQIGNsb2NrXFxuKyAqIEBjbG9ja19pbmRleDpcXHRHZXQgdGhlIFBUUCBjbG9jayBpbmRleCwgaWYgYW55XFxuKyAqIEBzZXRfY29uZmlnX21vZGU6XFx0RW50ZXIgY29uZmlnIG1vZGVcXG4rICogQGRtYWNfc3RhcnQ6XFx0XFx0Q2FsbGVkIHdoZW4gdGhlIERNQUMgc3RhcnRzXFxuKyAqIEBkbWFjX3N0b3A6XFx0XFx0Q2FsbGVkIHdoZW4gdGhlIERNQUMgc3RvcHNcXG4rICogQG5kZXZfb3BlbjpcXHRcXHRDYWxsZWQgd2hlbiB0aGUgbmRldiBpcyBvcGVuZWRcXG4rICogQG5kZXZfY2xvc2U6XFx0XFx0Q2FsbGVkIHdoZW4gdGhlIG5kZXYgaXMgY2xvc2VkXFxuKyAqL1xcbitzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8ge1xcbitcXHRpbnQgKCpwcm9iZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHRpbnQgKCpjbG9ja19pbmRleCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHRpbnQgKCpzZXRfY29uZmlnX21vZGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4rXFx0aW50ICgqZG1hY19zdGFydCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHR2b2lkICgqZG1hY19zdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuK1xcdGludCAoKm5kZXZfb3Blbikoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHR2b2lkICgqbmRldl9jbG9zZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbit9O1xcbitcXG4gc3RydWN0IHJhdmJfaHdfaW5mbyB7XFxuIFxcdGludCAoKnJlY2VpdmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgYnVkZ2V0LCBpbnQgcSk7XFxuIFxcdHZvaWQgKCpzZXRfcmF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbkBAIC0xMDUyLDYgKzEwNzksNyBAQCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHtcXG4gXFx0dTMyIHJ4X2J1ZmZlcl9zaXplO1xcbiBcXHR1MzIgcnhfZGVzY19zaXplO1xcbiBcXHR1MzIgZGJhdF9lbnRyeV9udW07XFxuK1xcdGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyAqcHRwOyAvKiBDYWxsYmFja3MgdG8gaGFuZGxlIGdQVFAgaW50ZXJhY3Rpb25zLiAqL1xcbiBcXHR1bnNpZ25lZCBhbGlnbmVkX3R4OiAxO1xcbiBcXHR1bnNpZ25lZCBjb2FsZXNjZV9pcnFzOjE7XFx0LyogTmVlZHMgc29mdHdhcmUgSVJRIGNvYWxlc2NpbmcgKi9cXG4gXFxuQEAgLTEwNjIsOSArMTA5MCw2IEBAIHN0cnVjdCByYXZiX2h3X2luZm8ge1xcbiBcXHR1bnNpZ25lZCBtdWx0aV9pcnFzOjE7XFx0XFx0LyogQVZCLURNQUMgYW5kIEUtTUFDIGhhcyBtdWx0aXBsZSBpcnFzICovXFxuIFxcdHVuc2lnbmVkIGlycV9lbl9kaXM6MTtcXHRcXHQvKiBIYXMgc2VwYXJhdGUgaXJxIGVuYWJsZSBhbmQgZGlzYWJsZSByZWdzICovXFxuIFxcdHVuc2lnbmVkIGVycl9tZ210X2lycXM6MTtcXHQvKiBMaW5lMSAoRXJyKSBhbmQgTGluZTIgKE1nbXQpIGlycXMgYXJlIHNlcGFyYXRlICovXFxuLVxcdHVuc2lnbmVkIGdwdHA6MTtcXHRcXHQvKiBBVkItRE1BQyBoYXMgZ1BUUCBzdXBwb3J0ICovXFxuLVxcdHVuc2lnbmVkIGNjY19nYWM6MTtcXHRcXHQvKiBBVkItRE1BQyBoYXMgZ1BUUCBzdXBwb3J0IGFjdGl2ZSBpbiBjb25maWcgbW9kZSAqL1xcbi1cXHR1bnNpZ25lZCBncHRwX3JlZl9jbGs6MTtcXHQvKiBnUFRQIGhhcyBzZXBhcmF0ZSByZWZlcmVuY2UgY2xvY2sgKi9cXG4gXFx0dW5zaWduZWQgbmNfcXVldWVzOjE7XFx0XFx0LyogQVZCLURNQUMgaGFzIFJYIGFuZCBUWCBOQyBxdWV1ZXMgKi9cXG4gXFx0dW5zaWduZWQgbWFnaWNfcGt0OjE7XFx0XFx0LyogRS1NQUMgc3VwcG9ydHMgbWFnaWMgcGFja2V0IGRldGVjdGlvbiAqL1xcbiBcXHR1bnNpZ25lZCBoYWxmX2R1cGxleDoxO1xcdFxcdC8qIEUtTUFDIHN1cHBvcnRzIGhhbGYgZHVwbGV4IG1vZGUgKi9cXG5AQCAtMTEwOSw2ICsxMTM0LDcgQEAgc3RydWN0IHJhdmJfcHJpdmF0ZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgdHNfc2tiX2xpc3Q7XFxuIFxcdHUzMiB0c19za2JfdGFnO1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wdHAgcHRwO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dwdHA7XFx0LyogUmVmZXJlbmNlIHRvIGV4dGVybmFsIGdQVFAgY2xvY2ssIGlmIGFueS4gKi9cXG4gXFx0c3BpbmxvY2tfdCBsb2NrO1xcdFxcdC8qIFJlZ2lzdGVyIGFjY2VzcyBsb2NrICovXFxuIFxcdHUzMiBjdXJfcnhbTlVNX1JYX1FVRVVFXTtcXHQvKiBDb25zdW1lciByaW5nIGluZGljZXMgKi9cXG4gXFx0dTMyIGRpcnR5X3J4W05VTV9SWF9RVUVVRV07XFx0LyogUHJvZHVjZXIgcmluZyBpbmRpY2VzICovXFxuQEAgLTExNjAsNyArMTE4Niw3IEBAIHZvaWQgcmF2Yl9tb2RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgY2xlYXIsXFxuIGludCByYXZiX3dhaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTtcXG4gXFxuIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4tdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcXG4raW50IHJhdmJfcHRwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbiBcXG4gI2VuZGlmXFx0LyogI2lmbmRlZiBfX1JBVkJfSF9fICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXFxuaW5kZXggNWY4ODczMzA5NGQwZi4uMzAxNzBlOTJkM2Q3MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xcbkBAIC03MDcsNyArNzA3LDE1IEBAIHN0YXRpYyBpbnQgcmF2Yl9kbWFjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuIFxcdC8qIFNldHRpbmcgdGhlIGNvbnRyb2wgd2lsbCBzdGFydCB0aGUgQVZCLURNQUMgcHJvY2Vzcy4gKi9cXG4tXFx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XFxuK1xcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfT1BFUkFUSU9OKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZWRtYWNfc3RhcnQpXFxuK1xcdFxcdHJldHVybiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZWRtYWNfc3RhcnQobmRldik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcmF2Yl9nZXRfdHhfdHN0YW1wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbkBAIC0xMTE1LDYgKzExMjMsMTAgQEAgc3RhdGljIGludCByYXZiX3N0b3BfZG1hKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRcXHRcXHRuZXRkZXZfZXJyKG5kZXYsIFxcXCJmYWlsZWQgdG8gc3RvcCBBWEkgQlVTXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiBcXG4rXFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXFxuK1xcdGlmIChpbmZvLVxcdTAwM2VwdHAgXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VkbWFjX3N0b3ApXFxuK1xcdFxcdGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlZG1hY19zdG9wKG5kZXYpO1xcbitcXG4gXFx0LyogU3RvcCBBVkItRE1BQyBwcm9jZXNzICovXFxuIFxcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xcbiB9XFxuQEAgLTE3MTksOSArMTczMSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXG4gXFx0aWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHtcXG4gXFx0XFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTtcXG4tXFx0XFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXFxuLVxcdFxcdGlmIChpbmZvLVxcdTAwM2VncHRwKVxcbi1cXHRcXHRcXHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xcbitcXG4gXFx0XFx0LyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovXFxuIFxcdFxcdGVycm9yID0gcmF2Yl9zdG9wX2RtYShuZGV2KTtcXG4gXFx0XFx0aWYgKGVycm9yKSB7XFxuQEAgLTE3NTIsMTAgKzE3NjIsNiBAQCBzdGF0aWMgaW50IHJhdmJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFxuIFxcdFxcdHJhdmJfZW1hY19pbml0KG5kZXYpO1xcbiBcXG4tXFx0XFx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXFxuLVxcdFxcdGlmIChpbmZvLVxcdTAwM2VncHRwKVxcbi1cXHRcXHRcXHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXFx1MDAzZXBkZXYpO1xcbi1cXG4gXFx0XFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcXG4gXFx0fVxcbiBcXG5AQCAtMTc2Nyw4ICsxNzczLDEzIEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4ge1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmh3X2luZm8gPSBwcml2LVxcdTAwM2VpbmZvO1xcbitcXHRpbnQgaW5kZXggPSAtMTtcXG4rXFxuK1xcdGlmIChod19pbmZvLVxcdTAwM2VwdHAgXFx1MDAyNlxcdTAwMjYgaHdfaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VjbG9ja19pbmRleClcXG4rXFx0XFx0aW5kZXggPSBod19pbmZvLVxcdTAwM2VwdHAtXFx1MDAzZWNsb2NrX2luZGV4KG5kZXYpO1xcbiBcXG4tXFx0aWYgKGh3X2luZm8tXFx1MDAzZWdwdHAgfHwgaHdfaW5mby1cXHUwMDNlY2NjX2dhYykge1xcbitcXHQvKiBPbmx5IGFkdmVydGlzZSBwdHAgY2xvY2sgaWYgcHJlc2VudC4gKi9cXG4rXFx0aWYgKGluZGV4IFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0aW5mby1cXHUwMDNlc29fdGltZXN0YW1waW5nID1cXG4gXFx0XFx0XFx0U09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSB8XFxuIFxcdFxcdFxcdFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxcbkBAIC0xNzc5LDcgKzE3OTAsNyBAQCBzdGF0aWMgaW50IHJhdmJfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9OT05FKSB8XFxuIFxcdFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQpIHxcXG4gXFx0XFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgSFdUU1RBTVBfRklMVEVSX0FMTCk7XFxuLVxcdFxcdGluZm8tXFx1MDAzZXBoY19pbmRleCA9IHB0cF9jbG9ja19pbmRleChwcml2LVxcdTAwM2VwdHAuY2xvY2spO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VwaGNfaW5kZXggPSBpbmRleDtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE4MjYsNTUgKzE4MzcsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyByYXZiX2V0aHRvb2xfb3BzID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGludCByYXZiX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuLVxcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVxcdTAwM2VpbmZvO1xcbi1cXHRpbnQgZXJyb3I7XFxuLVxcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCkge1xcbi1cXHRcXHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XFxuLVxcdFxcdGlmIChlcnJvcilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRcXHQvKiBTZXQgQ1NFTCB2YWx1ZSAqL1xcbi1cXHRcXHRyYXZiX21vZGlmeShuZGV2LCBDQ0MsIENDQ19DU0VMLCBDQ0NfQ1NFTF9IUEIpO1xcbi1cXHR9IGVsc2UgaWYgKGluZm8tXFx1MDAzZWNjY19nYWMpIHtcXG4tXFx0XFx0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcgfCBDQ0NfR0FDIHwgQ0NDX0NTRUxfSFBCKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0ZXJyb3IgPSByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gZXJyb3I7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHJhdmJfc2V0X2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVxcdTAwM2VpbmZvO1xcbiBcXG4tXFx0aWYgKCEoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoaW5mby1cXHUwMDNlcHRwIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlc2V0X2NvbmZpZ19tb2RlKVxcbitcXHRcXHRyZXR1cm4gaW5mby1cXHUwMDNlcHRwLVxcdTAwM2VzZXRfY29uZmlnX21vZGUobmRldik7XFxuIFxcbi1cXHRyYXZiX3dyaXRlKG5kZXYsIHByaXYtXFx1MDAzZWd0aV90aXYsIEdUSSk7XFxuLVxcbi1cXHQvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nICovXFxuLVxcdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfTFRJLCBHQ0NSX0xUSSk7XFxuK1xcdHJldHVybiByYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19DT05GSUcpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJhdmJfY29tcHV0ZV9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3N0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNsayAqY2xrKVxcbiB7XFxuIFxcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4tXFx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaW5mbyA9IHByaXYtXFx1MDAzZWluZm87XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IG5kZXYtXFx1MDAzZWRldi5wYXJlbnQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcmF0ZTtcXG4gXFx0dTY0IGluYztcXG4gXFxuLVxcdGlmICghKGluZm8tXFx1MDAzZWdwdHAgfHwgaW5mby1cXHUwMDNlY2NjX2dhYykpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHBfcmVmX2NsaylcXG4tXFx0XFx0cmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVxcdTAwM2VncHRwX2Nsayk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XFxuIFxcdGlmICghcmF0ZSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbkBAIC0xOTc0LDExICsxOTU0LDEyIEBAIHN0YXRpYyBpbnQgcmF2Yl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXG4gXFx0cmF2Yl9lbWFjX2luaXQobmRldik7XFxuIFxcbi1cXHRyYXZiX3NldF9ndGkobmRldik7XFxuLVxcbiBcXHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHAgfHwgaW5mby1cXHUwMDNlY2NjX2dhYylcXG4tXFx0XFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVxcdTAwM2VwZGV2KTtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZW5kZXZfb3Blbikge1xcbitcXHRcXHRlcnJvciA9IGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlbmRldl9vcGVuKG5kZXYpO1xcbitcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B0cF9zdG9wO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBQSFkgY29udHJvbCBzdGFydCAqL1xcbiBcXHRlcnJvciA9IHJhdmJfcGh5X3N0YXJ0KG5kZXYpO1xcbkBAIC0xOTkwLDkgKzE5NzEsNiBAQCBzdGF0aWMgaW50IHJhdmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBvdXRfcHRwX3N0b3A6XFxuLVxcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKVxcbi1cXHRcXHRyYXZiX3B0cF9zdG9wKG5kZXYpO1xcbiBcXHRyYXZiX3N0b3BfZG1hKG5kZXYpO1xcbiBvdXRfc2V0X3Jlc2V0OlxcbiBcXHRyYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19SRVNFVCk7XFxuQEAgLTIwMzYsMTAgKzIwMTQsNiBAQCBzdGF0aWMgdm9pZCByYXZiX3R4X3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmRldik7XFxuIFxcbi1cXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHApXFxuLVxcdFxcdHJhdmJfcHRwX3N0b3AobmRldik7XFxuLVxcbiBcXHQvKiBXYWl0IGZvciBETUEgc3RvcHBpbmcgKi9cXG4gXFx0aWYgKHJhdmJfc3RvcF9kbWEobmRldikpIHtcXG4gXFx0XFx0LyogSWYgcmF2Yl9zdG9wX2RtYSgpIGZhaWxzLCB0aGUgaGFyZHdhcmUgaXMgc3RpbGwgb3BlcmF0aW5nXFxuQEAgLTIwNzIsMTAgKzIwNDYsNiBAQCBzdGF0aWMgdm9pZCByYXZiX3R4X3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHJhdmJfZW1hY19pbml0KG5kZXYpO1xcbiBcXG4gb3V0Olxcbi1cXHQvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi9cXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHApXFxuLVxcdFxcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cXHUwMDNlcGRldik7XFxuLVxcbiBcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xcbiBcXG4gb3V0X3VubG9jazpcXG5AQCAtMjIwOCw3ICsyMTc4LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHJhdmJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0ZGVzYy1cXHUwMDNlZHB0ciA9IGNwdV90b19sZTMyKGRtYV9hZGRyKTtcXG4gXFxuIFxcdC8qIFRYIHRpbWVzdGFtcCByZXF1aXJlZCAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKSB7XFxuK1xcdGlmIChpbmZvLVxcdTAwM2VwdHApIHtcXG4gXFx0XFx0aWYgKHEgPT0gUkFWQl9OQykge1xcbiBcXHRcXHRcXHR0c19za2IgPSBrbWFsbG9jX29iaigqdHNfc2tiLCBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0XFx0aWYgKCF0c19za2IpIHtcXG5AQCAtMjM5MCw4ICsyMzYwLDggQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBTdG9wIFBUUCBDbG9jayBkcml2ZXIgKi9cXG4tXFx0aWYgKGluZm8tXFx1MDAzZWdwdHAgfHwgaW5mby1cXHUwMDNlY2NjX2dhYylcXG4tXFx0XFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZW5kZXZfY2xvc2UpXFxuK1xcdFxcdGluZm8tXFx1MDAzZXB0cC1cXHUwMDNlbmRldl9jbG9zZShuZGV2KTtcXG4gXFxuIFxcdC8qIFNldCB0aGUgY29uZmlnIG1vZGUgdG8gc3RvcCB0aGUgQVZCLURNQUMncyBwcm9jZXNzZXMgKi9cXG4gXFx0aWYgKHJhdmJfc3RvcF9kbWEobmRldikgXFx1MDAzYyAwKVxcbkBAIC0yMzk5LDcgKzIzNjksNyBAQCBzdGF0aWMgaW50IHJhdmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdFxcdFxcdCAgIFxcXCJkZXZpY2Ugd2lsbCBiZSBzdG9wcGVkIGFmdGVyIGgvdyBwcm9jZXNzZXMgYXJlIGRvbmUuXFxcXG5cXFwiKTtcXG4gXFxuIFxcdC8qIENsZWFyIHRoZSB0aW1lc3RhbXAgbGlzdCAqL1xcbi1cXHRpZiAoaW5mby1cXHUwMDNlZ3B0cCB8fCBpbmZvLVxcdTAwM2VjY2NfZ2FjKSB7XFxuK1xcdGlmIChpbmZvLVxcdTAwM2VwdHApIHtcXG4gXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRzX3NrYiwgdHNfc2tiMiwgXFx1MDAyNnByaXYtXFx1MDAzZXRzX3NrYl9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZ0c19za2ItXFx1MDAzZWxpc3QpO1xcbiBcXHRcXHRcXHRrZnJlZV9za2IodHNfc2tiLVxcdTAwM2Vza2IpO1xcbkBAIC0yNjgxLDYgKzI2NTEsNDIgQEAgc3RhdGljIGludCByYXZiX21kaW9fcmVsZWFzZShzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCByYXZiX2dlbjJfcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdHJldHVybiByYXZiX2NvbXB1dGVfZ3RpKG5kZXYsIHByaXYtXFx1MDAzZWNsayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4KHByaXYtXFx1MDAzZXB0cC5jbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBnUFRQIENsb2NrIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xcbitcXHRyYXZiX21vZGlmeShuZGV2LCBDQ0MsIENDQ19DU0VMLCBDQ0NfQ1NFTF9IUEIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW4yX3B0cF9pbmZvID0ge1xcbitcXHQucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLFxcbitcXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxcbitcXHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUsXFxuK1xcdC5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCxcXG4rXFx0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHtcXG4gXFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXFxuIFxcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcXG5AQCAtMjY5OSwxMiArMjcwNSwyNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjJfaHdfaW5mbyA9IHtcXG4gXFx0XFx0XFx0ICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpLFxcbiBcXHQucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLFxcbiBcXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcXG4rXFx0LnB0cCA9IFxcdTAwMjZyYXZiX2dlbjJfcHRwX2luZm8sXFxuIFxcdC5hbGlnbmVkX3R4ID0gMSxcXG4tXFx0LmdwdHAgPSAxLFxcbiBcXHQubmNfcXVldWVzID0gMSxcXG4gXFx0Lm1hZ2ljX3BrdCA9IDEsXFxuIH07XFxuIFxcbitzdGF0aWMgaW50IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdC8qIEVuYWJsZSBnUFRQIENsb2NrIGFuZCBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi9cXG4rXFx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuM19wdHBfaW5mbyA9IHtcXG4rXFx0LnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSxcXG4rXFx0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCxcXG4rXFx0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuM19wdHBfc2V0X2NvbmZpZ19tb2RlLFxcbitcXHQubmRldl9vcGVuID0gcmF2Yl9wdHBfaW5pdCxcXG4rXFx0Lm5kZXZfY2xvc2UgPSByYXZiX3B0cF9zdG9wLFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4zX2h3X2luZm8gPSB7XFxuIFxcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxcbiBcXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXFxuQEAgLTI3MjMsMTUgKzI3NDMsNjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4zX2h3X2luZm8gPSB7XFxuIFxcdFxcdFxcdCAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSxcXG4gXFx0LnJ4X2Rlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmF2Yl9leF9yeF9kZXNjKSxcXG4gXFx0LmRiYXRfZW50cnlfbnVtID0gMjIsXFxuK1xcdC5wdHAgPSBcXHUwMDI2cmF2Yl9nZW4zX3B0cF9pbmZvLFxcbiBcXHQuaW50ZXJuYWxfZGVsYXkgPSAxLFxcbiBcXHQudHhfY291bnRlcnMgPSAxLFxcbiBcXHQubXVsdGlfaXJxcyA9IDEsXFxuIFxcdC5pcnFfZW5fZGlzID0gMSxcXG4tXFx0LmNjY19nYWMgPSAxLFxcbiBcXHQubmNfcXVldWVzID0gMSxcXG4gXFx0Lm1hZ2ljX3BrdCA9IDEsXFxuIH07XFxuIFxcbitzdGF0aWMgaW50IHJhdmJfZ2VuNF9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlb2ZfZ3B0cCA9XFxuK1xcdFxcdG9mX3BhcnNlX3BoYW5kbGUocHJpdi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUsIFxcXCJwdHAtdGltZXJcXFwiLCAwKTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VvZl9ncHRwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwcml2LVxcdTAwM2VvZl9ncHRwKSkge1xcbitcXHRcXHRvZl9ub2RlX3B1dChwcml2LVxcdTAwM2VvZl9ncHRwKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlb2ZfZ3B0cCA9IE5VTEw7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXZiX2dlbjRfcHRwX2Nsb2NrX2luZGV4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdC8qIElmIG5vIGNsb2NrLCBtaW1pYyBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZSgpIGZhaWwgYW5kIHJldHVybiAtMSAqL1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZW9mX2dwdHApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiBwdHBfY2xvY2tfaW5kZXhfYnlfb2Zfbm9kZShwcml2LVxcdTAwM2VvZl9ncHRwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXZiX2dlbjRfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBFbmFibGUgZ1BUUCBDbG9jayBhbmQgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXFxuK1xcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyB8IENDQ19HQUMgfCBDQ0NfQ1NFTF9IUEIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogU2V0IFBUUCBzb3VyY2UgdG8gR1BUUCBtb2R1bGUsIG9ubHkgb3B0aW9uIG9uIEdlbjQuICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VvZl9ncHRwKVxcbitcXHRcXHRyYXZiX21vZGlmeShuZGV2LCBBUFNSLCBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyxcXG4rXFx0XFx0XFx0ICAgIEFQU1JfR1BUUFRJTUVSX1NPVVJDRSB8IEFQU1JfR1BUUENMT0NLKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfZ3B0cF9pbmZvIHJhdmJfZ2VuNF9wdHBfaW5mbyA9IHtcXG4rXFx0LnByb2JlID0gcmF2Yl9nZW40X3B0cF9wcm9iZSxcXG4rXFx0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleCxcXG4rXFx0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuNF9wdHBfc2V0X2NvbmZpZ19tb2RlLFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW40X2h3X2luZm8gPSB7XFxuIFxcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxcbiBcXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXFxuQEAgLTI3NTQsMTEgKzI4MjcsMzAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW40X2h3X2luZm8gPSB7XFxuIFxcdC50eF9jb3VudGVycyA9IDEsXFxuIFxcdC5tdWx0aV9pcnFzID0gMSxcXG4gXFx0LmlycV9lbl9kaXMgPSAxLFxcbi1cXHQuY2NjX2dhYyA9IDEsXFxuK1xcdC5wdHAgPSBcXHUwMDI2cmF2Yl9nZW40X3B0cF9pbmZvLFxcbiBcXHQubmNfcXVldWVzID0gMSxcXG4gXFx0Lm1hZ2ljX3BrdCA9IDEsXFxuIH07XFxuIFxcbitzdGF0aWMgaW50IHJhdmJfcnp2Mm1fcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWdwdHBfY2xrID0gZGV2bV9jbGtfZ2V0KFxcdTAwMjZwcml2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJncHRwXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlZ3B0cF9jbGspKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwcml2LVxcdTAwM2VncHRwX2Nsayk7XFxuK1xcbitcXHRyZXR1cm4gcmF2Yl9jb21wdXRlX2d0aShuZGV2LCBwcml2LVxcdTAwM2VncHRwX2Nsayk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9yenYybV9wdHBfaW5mbyA9IHtcXG4rXFx0LnByb2JlID0gcmF2Yl9yenYybV9wdHBfcHJvYmUsXFxuK1xcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsXFxuK1xcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcXG4rXFx0LmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LFxcbitcXHQuZG1hY19zdG9wID0gcmF2Yl9wdHBfc3RvcCxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfcnp2Mm1faHdfaW5mbyA9IHtcXG4gXFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXFxuIFxcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcXG5AQCAtMjc3OSw4ICsyODcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9yenYybV9od19pbmZvID0ge1xcbiBcXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcXG4gXFx0Lm11bHRpX2lycXMgPSAxLFxcbiBcXHQuZXJyX21nbXRfaXJxcyA9IDEsXFxuLVxcdC5ncHRwID0gMSxcXG4tXFx0LmdwdHBfcmVmX2NsayA9IDEsXFxuK1xcdC5wdHAgPSBcXHUwMDI2cmF2Yl9yenYybV9wdHBfaW5mbyxcXG4gXFx0Lm5jX3F1ZXVlcyA9IDEsXFxuIFxcdC5tYWdpY19wa3QgPSAxLFxcbiB9O1xcbkBAIC0yOTcwLDEyICszMDYxLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VncHRwX3JlZl9jbGspIHtcXG4tXFx0XFx0cHJpdi1cXHUwMDNlZ3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImdwdHBcXFwiKTtcXG4tXFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VncHRwX2NsaykpIHtcXG4tXFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKHByaXYtXFx1MDAzZWdwdHBfY2xrKTtcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXB0cCBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2VwdHAtXFx1MDAzZXByb2JlKSB7XFxuK1xcdFxcdGVycm9yID0gaW5mby1cXHUwMDNlcHRwLVxcdTAwM2Vwcm9iZShuZGV2KTtcXG4rXFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9yZXNldF9hc3NlcnQ7XFxuLVxcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cHJpdi1cXHUwMDNlcmVmY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJyZWZjbGtcXFwiKTtcXG5AQCAtMzAyOCwxMCArMzExNyw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRuZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnJhdmJfbmV0ZGV2X29wcztcXG4gXFx0bmRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2cmF2Yl9ldGh0b29sX29wcztcXG4gXFxuLVxcdGVycm9yID0gcmF2Yl9jb21wdXRlX2d0aShuZGV2KTtcXG4tXFx0aWYgKGVycm9yKVxcbi1cXHRcXHRnb3RvIG91dF9ycG1fcHV0O1xcbi1cXG4gXFx0cmF2Yl9wYXJzZV9kZWxheV9tb2RlKG5wLCBuZGV2KTtcXG4gXFxuIFxcdC8qIEFsbG9jYXRlIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzIHRhYmxlICovXFxuQEAgLTMxNTQsNiArMzIzOSw3IEBAIHN0YXRpYyB2b2lkIHJhdmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdHBtX3J1bnRpbWVfZGlzYWJsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFx0cG1fcnVudGltZV9kb250X3VzZV9hdXRvc3VzcGVuZChkZXYpO1xcbiBcXHRjbGtfdW5wcmVwYXJlKHByaXYtXFx1MDAzZXJlZmNsayk7XFxuK1xcdG9mX25vZGVfcHV0KHByaXYtXFx1MDAzZW9mX2dwdHApO1xcbiBcXHRyZXNldF9jb250cm9sX2Fzc2VydChwcml2LVxcdTAwM2Vyc3RjKTtcXG4gXFx0ZnJlZV9uZXRkZXYobmRldik7XFxuIFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbkBAIC0zMTc5LDkgKzMyNjUsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHQvKiBFbmFibGUgTWFnaWNQYWNrZXQgKi9cXG4gXFx0cmF2Yl9tb2RpZnkobmRldiwgRUNNUiwgRUNNUl9NUERFLCBFQ01SX01QREUpO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNjY19nYWMpXFxuLVxcdFxcdHJhdmJfcHRwX3N0b3AobmRldik7XFxuLVxcbiBcXHRyZXR1cm4gZW5hYmxlX2lycV93YWtlKHByaXYtXFx1MDAzZWVtYWNfaXJxKTtcXG4gfVxcbiBcXG5AQCAtMzIwMSw5ICszMjg0LDYgQEAgc3RhdGljIGludCByYXZiX3dvbF9yZXN0b3JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuLVxcdGlmIChwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VjY2NfZ2FjKVxcbi1cXHRcXHRyYXZiX3B0cF9pbml0KG5kZXYsIHByaXYtXFx1MDAzZXBkZXYpO1xcbi1cXG4gXFx0aWYgKGluZm8tXFx1MDAzZW5jX3F1ZXVlcylcXG4gXFx0XFx0bmFwaV9lbmFibGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGlbUkFWQl9OQ10pO1xcbiBcXHRuYXBpX2VuYWJsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaVtSQVZCX0JFXSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xcbmluZGV4IDIyNmM2YzBhYjk0NWIuLjQ3M2EyYWVkYjc0NWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX3B0cC5jXFxuQEAgLTMxMiwyMiArMzEyLDM5IEBAIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRyYXZiX3dyaXRlKG5kZXYsIH4oZ2lzIHwgR0lTX1JFU0VSVkVEKSwgR0lTKTtcXG4gfVxcbiBcXG4tdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbitpbnQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0cHJpdi1cXHUwMDNlcHRwLmluZm8gPSByYXZiX3B0cF9pbmZvO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kID0gcmF2Yl9yZWFkKG5kZXYsIEdUSSk7XFxuK1xcdHByaXYtXFx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHByaXYtXFx1MDAzZWd0aV90aXY7XFxuIFxcdHByaXYtXFx1MDAzZXB0cC5jdXJyZW50X2FkZGVuZCA9IHByaXYtXFx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZDtcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKiBTZXQgZ1BUUCBUaW1lciBJbmNyZW1lbnQgVmFsdWUuICovXFxuK1xcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kLCBHVEkpO1xcbitcXG4rXFx0LyogUmVxdWVzdCBHVEkgbG9hZGluZy4gKi9cXG4rXFx0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIEdJVCBsb2FkaW5nIHRvIGNvbXBsZXRlLiAqL1xcbiBcXHRyYXZiX3dhaXQobmRldiwgR0NDUiwgR0NDUl9UQ1IsIEdDQ1JfVENSX05PUkVRKTtcXG4rXFxuIFxcdHJhdmJfbW9kaWZ5KG5kZXYsIEdDQ1IsIEdDQ1JfVENTUywgR0NDUl9UQ1NTX0FESkdQVFApO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRwcml2LVxcdTAwM2VwdHAuY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZXB0cC5pbmZvLCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0cHJpdi1cXHUwMDNlcHRwLmNsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFxcdTAwMjZwcml2LVxcdTAwM2VwdHAuaW5mbywgXFx1MDAyNnByaXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlcHRwLmNsb2NrKSkge1xcbitcXHRcXHRyZXQgPSBQVFJfRVJSKHByaXYtXFx1MDAzZXB0cC5jbG9jayk7XFxuK1xcdFxcdHByaXYtXFx1MDAzZXB0cC5jbG9jayA9IE5VTEw7XFxuK1xcdFxcdHJhdmJfcHRwX3N0b3AobmRldik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG5AQCAtMzM3LDUgKzM1NCw2IEBAIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0cmF2Yl93cml0ZShuZGV2LCAwLCBHSUMpO1xcbiBcXHRyYXZiX3dyaXRlKG5kZXYsIDAsIEdJUyk7XFxuIFxcbi1cXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcihwcml2LVxcdTAwM2VwdHAuY2xvY2spO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcHRwLmNsb2NrKVxcbitcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcihwcml2LVxcdTAwM2VwdHAuY2xvY2spO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQxOjM0Ljg5NDYwOTE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjUzNjIwNzkyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBnUFRQIHN1cHBvcnQgaW4gdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChyYXZiKSBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBHZW40IGdQVFAgYW5kIGludHJvZHVjaW5nIGEgc3RydWN0IGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBjYWxsYmFja3MuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIGZvciBSZW5lc2FzIFItQ2FyIFNvQ3MuIFRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgdGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyB0byBwcm9iZS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkY2M3MDVmZmU4ZWJiZjY2OWM3OTMyZTY0MmE2MWQ1MGE1MWMwODAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDE6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlbmVzYXMsZXRoZXJhdmIueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG5pbmRleCAxZTAwZWY1YjNhY2RhLi5mYWQwMDI0OTI0MjFhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZW5lc2FzLGV0aGVyYXZiLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVuZXNhcyxldGhlcmF2Yi55YW1sXG5AQCAtOTcsNiArOTcsOCBAQCBwcm9wZXJ0aWVzOlxuIFxuICAgcGh5LWhhbmRsZTogdHJ1ZVxuIFxuKyAgcHRwLXRpbWVyOiB0cnVlXG4rXG4gICAnI2FkZHJlc3MtY2VsbHMnOlxuICAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIGFkZHJlc3MgY2VsbHMgZm9yIHRoZSBNRElPIGJ1cy5cbiAgICAgY29uc3Q6IDFcbkBAIC0zMDUsNiArMzA3LDE1IEBAIGFsbE9mOlxuICAgICAgICAgICAgIGl0ZW1zOlxuICAgICAgICAgICAgICAgLSBjb25zdDogZmNrXG4gICAgICAgICAgICAgICAtIGNvbnN0OiByZWZjbGtcbisgIC0gaWY6XG4rICAgICAgbm90OlxuKyAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICAgIGNvbnN0OiByZW5lc2FzLGV0aGVyYXZiLXJjYXItZ2VuNFxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBwdHAtdGltZXI6IGZhbHNlXG4gXG4gYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuaW5kZXggNWU1NmVjOWIxMDEzYS4uNGM4ZGMwMjAyMmUyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmIuaFxuQEAgLTI0OSw2ICsyNDksOCBAQCBlbnVtIEFQU1JfQklUIHtcbiBcdEFQU1JfUkRNXHQ9IDB4MDAwMDIwMDAsXG4gXHRBUFNSX1RETVx0PSAweDAwMDA0MDAwLFxuIFx0QVBTUl9NSUlTRUxFQ1RcdD0gMHgwMTAwMDAwMCxcdC8qIFItQ2FyIFY0TSBvbmx5ICovXG4rXHRBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgPSBCSVQoMjUpLCAvKiBHZW40ICovXG4rXHRBUFNSX0dQVFBDTE9DS1x0PSBCSVQoMjkpLFx0LyogR2VuNCAqL1xuIH07XG4gXG4gLyogUkNSICovXG5AQCAtMTAzNCw2ICsxMDM2LDMxIEBAIHN0cnVjdCByYXZiX3B0cCB7XG4gXHRzdHJ1Y3QgcmF2Yl9wdHBfcGVyb3V0IHBlcm91dFtOX1BFUl9PVVRdO1xuIH07XG4gXG4rLyoqXG4rICogc3RydWN0IHJhdmJfZ3B0cF9pbmZvIC0gUGxhdGZvcm0gc3BlY2lmaWMgZ1BUUCBiZWhhdmlvclxuKyAqXG4rICogRWFjaCBnZW5lcmF0aW9uIG9mIFJBVkIgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgYmVoYXZpb3JzIHdoZW4gaW50ZXJhY3RpbmdcbisgKiB3aXRoIHRoZSBnUFRQIGNsb2NrLiBUaGlzIHN0cnVjdCBwcm92aWRlcyB0aGUgY2FsbGJhY2tzIHRvIGJlIGNhbGxlZCBhdFxuKyAqIGNyaXRpY2FsIHBvaW50cyBpbiB0aGUgUkFWQiBkcml2ZXIuXG4rICpcbisgKiBAcHJvYmU6XHRcdFByb2JlIHRoZSBnUFRQIGNsb2NrXG4rICogQGNsb2NrX2luZGV4Olx0R2V0IHRoZSBQVFAgY2xvY2sgaW5kZXgsIGlmIGFueVxuKyAqIEBzZXRfY29uZmlnX21vZGU6XHRFbnRlciBjb25maWcgbW9kZVxuKyAqIEBkbWFjX3N0YXJ0Olx0XHRDYWxsZWQgd2hlbiB0aGUgRE1BQyBzdGFydHNcbisgKiBAZG1hY19zdG9wOlx0XHRDYWxsZWQgd2hlbiB0aGUgRE1BQyBzdG9wc1xuKyAqIEBuZGV2X29wZW46XHRcdENhbGxlZCB3aGVuIHRoZSBuZGV2IGlzIG9wZW5lZFxuKyAqIEBuZGV2X2Nsb3NlOlx0XHRDYWxsZWQgd2hlbiB0aGUgbmRldiBpcyBjbG9zZWRcbisgKi9cbitzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8ge1xuK1x0aW50ICgqcHJvYmUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitcdGludCAoKmNsb2NrX2luZGV4KShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4rXHRpbnQgKCpzZXRfY29uZmlnX21vZGUpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitcdGludCAoKmRtYWNfc3RhcnQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitcdHZvaWQgKCpkbWFjX3N0b3ApKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbitcdGludCAoKm5kZXZfb3Blbikoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuK1x0dm9pZCAoKm5kZXZfY2xvc2UpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbit9O1xuK1xuIHN0cnVjdCByYXZiX2h3X2luZm8ge1xuIFx0aW50ICgqcmVjZWl2ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBidWRnZXQsIGludCBxKTtcbiBcdHZvaWQgKCpzZXRfcmF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuQEAgLTEwNTIsNiArMTA3OSw3IEBAIHN0cnVjdCByYXZiX2h3X2luZm8ge1xuIFx0dTMyIHJ4X2J1ZmZlcl9zaXplO1xuIFx0dTMyIHJ4X2Rlc2Nfc2l6ZTtcbiBcdHUzMiBkYmF0X2VudHJ5X251bTtcbitcdGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyAqcHRwOyAvKiBDYWxsYmFja3MgdG8gaGFuZGxlIGdQVFAgaW50ZXJhY3Rpb25zLiAqL1xuIFx0dW5zaWduZWQgYWxpZ25lZF90eDogMTtcbiBcdHVuc2lnbmVkIGNvYWxlc2NlX2lycXM6MTtcdC8qIE5lZWRzIHNvZnR3YXJlIElSUSBjb2FsZXNjaW5nICovXG4gXG5AQCAtMTA2Miw5ICsxMDkwLDYgQEAgc3RydWN0IHJhdmJfaHdfaW5mbyB7XG4gXHR1bnNpZ25lZCBtdWx0aV9pcnFzOjE7XHRcdC8qIEFWQi1ETUFDIGFuZCBFLU1BQyBoYXMgbXVsdGlwbGUgaXJxcyAqL1xuIFx0dW5zaWduZWQgaXJxX2VuX2RpczoxO1x0XHQvKiBIYXMgc2VwYXJhdGUgaXJxIGVuYWJsZSBhbmQgZGlzYWJsZSByZWdzICovXG4gXHR1bnNpZ25lZCBlcnJfbWdtdF9pcnFzOjE7XHQvKiBMaW5lMSAoRXJyKSBhbmQgTGluZTIgKE1nbXQpIGlycXMgYXJlIHNlcGFyYXRlICovXG4tXHR1bnNpZ25lZCBncHRwOjE7XHRcdC8qIEFWQi1ETUFDIGhhcyBnUFRQIHN1cHBvcnQgKi9cbi1cdHVuc2lnbmVkIGNjY19nYWM6MTtcdFx0LyogQVZCLURNQUMgaGFzIGdQVFAgc3VwcG9ydCBhY3RpdmUgaW4gY29uZmlnIG1vZGUgKi9cbi1cdHVuc2lnbmVkIGdwdHBfcmVmX2NsazoxO1x0LyogZ1BUUCBoYXMgc2VwYXJhdGUgcmVmZXJlbmNlIGNsb2NrICovXG4gXHR1bnNpZ25lZCBuY19xdWV1ZXM6MTtcdFx0LyogQVZCLURNQUMgaGFzIFJYIGFuZCBUWCBOQyBxdWV1ZXMgKi9cbiBcdHVuc2lnbmVkIG1hZ2ljX3BrdDoxO1x0XHQvKiBFLU1BQyBzdXBwb3J0cyBtYWdpYyBwYWNrZXQgZGV0ZWN0aW9uICovXG4gXHR1bnNpZ25lZCBoYWxmX2R1cGxleDoxO1x0XHQvKiBFLU1BQyBzdXBwb3J0cyBoYWxmIGR1cGxleCBtb2RlICovXG5AQCAtMTEwOSw2ICsxMTM0LDcgQEAgc3RydWN0IHJhdmJfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHRzX3NrYl9saXN0O1xuIFx0dTMyIHRzX3NrYl90YWc7XG4gXHRzdHJ1Y3QgcmF2Yl9wdHAgcHRwO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpvZl9ncHRwO1x0LyogUmVmZXJlbmNlIHRvIGV4dGVybmFsIGdQVFAgY2xvY2ssIGlmIGFueS4gKi9cbiBcdHNwaW5sb2NrX3QgbG9jaztcdFx0LyogUmVnaXN0ZXIgYWNjZXNzIGxvY2sgKi9cbiBcdHUzMiBjdXJfcnhbTlVNX1JYX1FVRVVFXTtcdC8qIENvbnN1bWVyIHJpbmcgaW5kaWNlcyAqL1xuIFx0dTMyIGRpcnR5X3J4W05VTV9SWF9RVUVVRV07XHQvKiBQcm9kdWNlciByaW5nIGluZGljZXMgKi9cbkBAIC0xMTYwLDcgKzExODYsNyBAQCB2b2lkIHJhdmJfbW9kaWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIHJhdmJfcmVnIHJlZywgdTMyIGNsZWFyLFxuIGludCByYXZiX3dhaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gcmF2Yl9yZWcgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTtcbiBcbiB2b2lkIHJhdmJfcHRwX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4tdm9pZCByYXZiX3B0cF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTtcbitpbnQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gdm9pZCByYXZiX3B0cF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiBcbiAjZW5kaWZcdC8qICNpZm5kZWYgX19SQVZCX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jXG5pbmRleCA1Zjg4NzMzMDk0ZDBmLi4zMDE3MGU5MmQzZDcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uY1xuQEAgLTcwNyw3ICs3MDcsMTUgQEAgc3RhdGljIGludCByYXZiX2RtYWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuIFx0LyogU2V0dGluZyB0aGUgY29udHJvbCB3aWxsIHN0YXJ0IHRoZSBBVkItRE1BQyBwcm9jZXNzLiAqL1xuLVx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XG4rXHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX09QRVJBVElPTik7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbitcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuK1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VkbWFjX3N0YXJ0KVxuK1x0XHRyZXR1cm4gaW5mby1cdTAwM2VwdHAtXHUwMDNlZG1hY19zdGFydChuZGV2KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCByYXZiX2dldF90eF90c3RhbXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5AQCAtMTExNSw2ICsxMTIzLDEwIEBAIHN0YXRpYyBpbnQgcmF2Yl9zdG9wX2RtYShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwiZmFpbGVkIHRvIHN0b3AgQVhJIEJVU1xcblwiKTtcbiBcdH1cbiBcbitcdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuK1x0aWYgKGluZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBpbmZvLVx1MDAzZXB0cC1cdTAwM2VkbWFjX3N0b3ApXG4rXHRcdGluZm8tXHUwMDNlcHRwLVx1MDAzZWRtYWNfc3RvcChuZGV2KTtcbitcbiBcdC8qIFN0b3AgQVZCLURNQUMgcHJvY2VzcyAqL1xuIFx0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4gfVxuQEAgLTE3MTksOSArMTczMSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0aWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHtcbiBcdFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTtcbi1cdFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRcdGlmIChpbmZvLVx1MDAzZWdwdHApXG4tXHRcdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbitcbiBcdFx0LyogV2FpdCBmb3IgRE1BIHN0b3BwaW5nICovXG4gXHRcdGVycm9yID0gcmF2Yl9zdG9wX2RtYShuZGV2KTtcbiBcdFx0aWYgKGVycm9yKSB7XG5AQCAtMTc1MiwxMCArMTc2Miw2IEBAIHN0YXRpYyBpbnQgcmF2Yl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0XHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcbiBcbi1cdFx0LyogSW5pdGlhbGlzZSBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRcdGlmIChpbmZvLVx1MDAzZWdwdHApXG4tXHRcdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuLVxuIFx0XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpO1xuIFx0fVxuIFxuQEAgLTE3NjcsOCArMTc3MywxMyBAQCBzdGF0aWMgaW50IHJhdmJfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4ge1xuIFx0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0Y29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyAqaHdfaW5mbyA9IHByaXYtXHUwMDNlaW5mbztcbitcdGludCBpbmRleCA9IC0xO1xuK1xuK1x0aWYgKGh3X2luZm8tXHUwMDNlcHRwIFx1MDAyNlx1MDAyNiBod19pbmZvLVx1MDAzZXB0cC1cdTAwM2VjbG9ja19pbmRleClcbitcdFx0aW5kZXggPSBod19pbmZvLVx1MDAzZXB0cC1cdTAwM2VjbG9ja19pbmRleChuZGV2KTtcbiBcbi1cdGlmIChod19pbmZvLVx1MDAzZWdwdHAgfHwgaHdfaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4rXHQvKiBPbmx5IGFkdmVydGlzZSBwdHAgY2xvY2sgaWYgcHJlc2VudC4gKi9cbitcdGlmIChpbmRleCBcdTAwM2U9IDApIHtcbiBcdFx0aW5mby1cdTAwM2Vzb190aW1lc3RhbXBpbmcgPVxuIFx0XHRcdFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUgfFxuIFx0XHRcdFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfFxuQEAgLTE3NzksNyArMTc5MCw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0XHQoMSBcdTAwM2NcdTAwM2MgSFdUU1RBTVBfRklMVEVSX05PTkUpIHxcbiBcdFx0XHQoMSBcdTAwM2NcdTAwM2MgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVCkgfFxuIFx0XHRcdCgxIFx1MDAzY1x1MDAzYyBIV1RTVEFNUF9GSUxURVJfQUxMKTtcbi1cdFx0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBwdHBfY2xvY2tfaW5kZXgocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuK1x0XHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IGluZGV4O1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTgyNiw1NSArMTgzNywyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJhdmJfZXRodG9vbF9vcHMgPSB7XG4gfTtcbiBcbiBzdGF0aWMgaW50IHJhdmJfc2V0X2NvbmZpZ19tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLXtcbi1cdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4tXHRpbnQgZXJyb3I7XG4tXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwKSB7XG4tXHRcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHKTtcbi1cdFx0aWYgKGVycm9yKVxuLVx0XHRcdHJldHVybiBlcnJvcjtcbi1cdFx0LyogU2V0IENTRUwgdmFsdWUgKi9cbi1cdFx0cmF2Yl9tb2RpZnkobmRldiwgQ0NDLCBDQ0NfQ1NFTCwgQ0NDX0NTRUxfSFBCKTtcbi1cdH0gZWxzZSBpZiAoaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4tXHRcdGVycm9yID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XG4tXHR9IGVsc2Uge1xuLVx0XHRlcnJvciA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyb3I7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHJhdmJfc2V0X2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi1cdTAwM2VpbmZvO1xuIFxuLVx0aWYgKCEoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYykpXG4tXHRcdHJldHVybjtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlc2V0X2NvbmZpZ19tb2RlKVxuK1x0XHRyZXR1cm4gaW5mby1cdTAwM2VwdHAtXHUwMDNlc2V0X2NvbmZpZ19tb2RlKG5kZXYpO1xuIFxuLVx0cmF2Yl93cml0ZShuZGV2LCBwcml2LVx1MDAzZWd0aV90aXYsIEdUSSk7XG4tXG4tXHQvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nICovXG4tXHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX0xUSSwgR0NDUl9MVEkpO1xuK1x0cmV0dXJuIHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmF2Yl9jb21wdXRlX2d0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbitzdGF0aWMgaW50IHJhdmJfY29tcHV0ZV9ndGkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjbGsgKmNsaylcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvICppbmZvID0gcHJpdi1cdTAwM2VpbmZvO1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gbmRldi1cdTAwM2VkZXYucGFyZW50O1xuIFx0dW5zaWduZWQgbG9uZyByYXRlO1xuIFx0dTY0IGluYztcbiBcbi1cdGlmICghKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHBfcmVmX2Nsaylcbi1cdFx0cmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVx1MDAzZWdwdHBfY2xrKTtcbi1cdGVsc2Vcbi1cdFx0cmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVx1MDAzZWNsayk7XG4rXHRyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4gXHRpZiAoIXJhdGUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTE5NzQsMTEgKzE5NTQsMTIgQEAgc3RhdGljIGludCByYXZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXG4gXHRyYXZiX2VtYWNfaW5pdChuZGV2KTtcbiBcbi1cdHJhdmJfc2V0X2d0aShuZGV2KTtcbi1cbiBcdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX2luaXQobmRldiwgcHJpdi1cdTAwM2VwZGV2KTtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9vcGVuKSB7XG4rXHRcdGVycm9yID0gaW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9vcGVuKG5kZXYpO1xuK1x0XHRpZiAoZXJyb3IpXG4rXHRcdFx0Z290byBvdXRfcHRwX3N0b3A7XG4rXHR9XG4gXG4gXHQvKiBQSFkgY29udHJvbCBzdGFydCAqL1xuIFx0ZXJyb3IgPSByYXZiX3BoeV9zdGFydChuZGV2KTtcbkBAIC0xOTkwLDkgKzE5NzEsNiBAQCBzdGF0aWMgaW50IHJhdmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHJldHVybiAwO1xuIFxuIG91dF9wdHBfc3RvcDpcbi1cdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cCB8fCBpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4gXHRyYXZiX3N0b3BfZG1hKG5kZXYpO1xuIG91dF9zZXRfcmVzZXQ6XG4gXHRyYXZiX3NldF9vcG1vZGUobmRldiwgQ0NDX09QQ19SRVNFVCk7XG5AQCAtMjAzNiwxMCArMjAxNCw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZGV2KTtcbiBcbi1cdC8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cClcbi1cdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbi1cbiBcdC8qIFdhaXQgZm9yIERNQSBzdG9wcGluZyAqL1xuIFx0aWYgKHJhdmJfc3RvcF9kbWEobmRldikpIHtcbiBcdFx0LyogSWYgcmF2Yl9zdG9wX2RtYSgpIGZhaWxzLCB0aGUgaGFyZHdhcmUgaXMgc3RpbGwgb3BlcmF0aW5nXG5AQCAtMjA3MiwxMCArMjA0Niw2IEBAIHN0YXRpYyB2b2lkIHJhdmJfdHhfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJhdmJfZW1hY19pbml0KG5kZXYpO1xuIFxuIG91dDpcbi1cdC8qIEluaXRpYWxpc2UgUFRQIENsb2NrIGRyaXZlciAqL1xuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cClcbi1cdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuLVxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZGV2KTtcbiBcbiBvdXRfdW5sb2NrOlxuQEAgLTIyMDgsNyArMjE3OCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCByYXZiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRkZXNjLVx1MDAzZWRwdHIgPSBjcHVfdG9fbGUzMihkbWFfYWRkcik7XG4gXG4gXHQvKiBUWCB0aW1lc3RhbXAgcmVxdWlyZWQgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VwdHApIHtcbiBcdFx0aWYgKHEgPT0gUkFWQl9OQykge1xuIFx0XHRcdHRzX3NrYiA9IGttYWxsb2Nfb2JqKCp0c19za2IsIEdGUF9BVE9NSUMpO1xuIFx0XHRcdGlmICghdHNfc2tiKSB7XG5AQCAtMjM5MCw4ICsyMzYwLDggQEAgc3RhdGljIGludCByYXZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0fVxuIFxuIFx0LyogU3RvcCBQVFAgQ2xvY2sgZHJpdmVyICovXG4tXHRpZiAoaW5mby1cdTAwM2VncHRwIHx8IGluZm8tXHUwMDNlY2NjX2dhYylcbi1cdFx0cmF2Yl9wdHBfc3RvcChuZGV2KTtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9jbG9zZSlcbitcdFx0aW5mby1cdTAwM2VwdHAtXHUwMDNlbmRldl9jbG9zZShuZGV2KTtcbiBcbiBcdC8qIFNldCB0aGUgY29uZmlnIG1vZGUgdG8gc3RvcCB0aGUgQVZCLURNQUMncyBwcm9jZXNzZXMgKi9cbiBcdGlmIChyYXZiX3N0b3BfZG1hKG5kZXYpIFx1MDAzYyAwKVxuQEAgLTIzOTksNyArMjM2OSw3IEBAIHN0YXRpYyBpbnQgcmF2Yl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0XHQgICBcImRldmljZSB3aWxsIGJlIHN0b3BwZWQgYWZ0ZXIgaC93IHByb2Nlc3NlcyBhcmUgZG9uZS5cXG5cIik7XG4gXG4gXHQvKiBDbGVhciB0aGUgdGltZXN0YW1wIGxpc3QgKi9cbi1cdGlmIChpbmZvLVx1MDAzZWdwdHAgfHwgaW5mby1cdTAwM2VjY2NfZ2FjKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VwdHApIHtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRzX3NrYiwgdHNfc2tiMiwgXHUwMDI2cHJpdi1cdTAwM2V0c19za2JfbGlzdCwgbGlzdCkge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNnRzX3NrYi1cdTAwM2VsaXN0KTtcbiBcdFx0XHRrZnJlZV9za2IodHNfc2tiLVx1MDAzZXNrYik7XG5AQCAtMjY4MSw2ICsyNjUxLDQyIEBAIHN0YXRpYyBpbnQgcmF2Yl9tZGlvX3JlbGVhc2Uoc3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0cmV0dXJuIHJhdmJfY29tcHV0ZV9ndGkobmRldiwgcHJpdi1cdTAwM2VjbGspO1xuK31cbitcbitzdGF0aWMgaW50IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHJhdmJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0cmV0dXJuIHB0cF9jbG9ja19pbmRleChwcml2LVx1MDAzZXB0cC5jbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmF2Yl9nZW4yX3B0cF9zZXRfY29uZmlnX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJhdmJfc2V0X29wbW9kZShuZGV2LCBDQ0NfT1BDX0NPTkZJRyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogZ1BUUCBDbG9jayBTZWxlY3QgSGlnaC1zcGVlZCBwZXJpcGhlcmFsIGJ1cyBjbG9jay4gKi9cbitcdHJhdmJfbW9kaWZ5KG5kZXYsIENDQywgQ0NDX0NTRUwsIENDQ19DU0VMX0hQQik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX2dlbjJfcHRwX2luZm8gPSB7XG4rXHQucHJvYmUgPSByYXZiX2dlbjJfcHRwX3Byb2JlLFxuK1x0LmNsb2NrX2luZGV4ID0gcmF2Yl9nZW4yX3B0cF9jbG9ja19pbmRleCxcbitcdC5zZXRfY29uZmlnX21vZGUgPSByYXZiX2dlbjJfcHRwX3NldF9jb25maWdfbW9kZSxcbitcdC5kbWFjX3N0YXJ0ID0gcmF2Yl9wdHBfaW5pdCxcbitcdC5kbWFjX3N0b3AgPSByYXZiX3B0cF9zdG9wLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW4yX2h3X2luZm8gPSB7XG4gXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcbiBcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcbkBAIC0yNjk5LDEyICsyNzA1LDI2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuMl9od19pbmZvID0ge1xuIFx0XHRcdCAgU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKSxcbiBcdC5yeF9kZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IHJhdmJfZXhfcnhfZGVzYyksXG4gXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcbitcdC5wdHAgPSBcdTAwMjZyYXZiX2dlbjJfcHRwX2luZm8sXG4gXHQuYWxpZ25lZF90eCA9IDEsXG4tXHQuZ3B0cCA9IDEsXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG4gXG4rc3RhdGljIGludCByYXZiX2dlbjNfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHQvKiBFbmFibGUgZ1BUUCBDbG9jayBhbmQgU2VsZWN0IEhpZ2gtc3BlZWQgcGVyaXBoZXJhbCBidXMgY2xvY2suICovXG4rXHRyZXR1cm4gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW4zX3B0cF9pbmZvID0ge1xuK1x0LnByb2JlID0gcmF2Yl9nZW4yX3B0cF9wcm9iZSxcbitcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuMl9wdHBfY2xvY2tfaW5kZXgsXG4rXHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW4zX3B0cF9zZXRfY29uZmlnX21vZGUsXG4rXHQubmRldl9vcGVuID0gcmF2Yl9wdHBfaW5pdCxcbitcdC5uZGV2X2Nsb3NlID0gcmF2Yl9wdHBfc3RvcCxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9od19pbmZvIHJhdmJfZ2VuM19od19pbmZvID0ge1xuIFx0LnJlY2VpdmUgPSByYXZiX3J4X3JjYXIsXG4gXHQuc2V0X3JhdGUgPSByYXZiX3NldF9yYXRlX3JjYXIsXG5AQCAtMjcyMywxNSArMjc0Myw2OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjNfaHdfaW5mbyA9IHtcbiBcdFx0XHQgIFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSksXG4gXHQucnhfZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCByYXZiX2V4X3J4X2Rlc2MpLFxuIFx0LmRiYXRfZW50cnlfbnVtID0gMjIsXG4rXHQucHRwID0gXHUwMDI2cmF2Yl9nZW4zX3B0cF9pbmZvLFxuIFx0LmludGVybmFsX2RlbGF5ID0gMSxcbiBcdC50eF9jb3VudGVycyA9IDEsXG4gXHQubXVsdGlfaXJxcyA9IDEsXG4gXHQuaXJxX2VuX2RpcyA9IDEsXG4tXHQuY2NjX2dhYyA9IDEsXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG4gXG4rc3RhdGljIGludCByYXZiX2dlbjRfcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdHByaXYtXHUwMDNlb2ZfZ3B0cCA9XG4rXHRcdG9mX3BhcnNlX3BoYW5kbGUocHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcInB0cC10aW1lclwiLCAwKTtcbitcdGlmICghcHJpdi1cdTAwM2VvZl9ncHRwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwcml2LVx1MDAzZW9mX2dwdHApKSB7XG4rXHRcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4rXHRcdHByaXYtXHUwMDNlb2ZfZ3B0cCA9IE5VTEw7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmF2Yl9nZW40X3B0cF9jbG9ja19pbmRleChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHQvKiBJZiBubyBjbG9jaywgbWltaWMgcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUoKSBmYWlsIGFuZCByZXR1cm4gLTEgKi9cbitcdGlmICghcHJpdi1cdTAwM2VvZl9ncHRwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXR1cm4gcHRwX2Nsb2NrX2luZGV4X2J5X29mX25vZGUocHJpdi1cdTAwM2VvZl9ncHRwKTtcbit9XG4rXG4rc3RhdGljIGludCByYXZiX2dlbjRfcHRwX3NldF9jb25maWdfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogRW5hYmxlIGdQVFAgQ2xvY2sgYW5kIFNlbGVjdCBIaWdoLXNwZWVkIHBlcmlwaGVyYWwgYnVzIGNsb2NrLiAqL1xuK1x0cmV0ID0gcmF2Yl9zZXRfb3Btb2RlKG5kZXYsIENDQ19PUENfQ09ORklHIHwgQ0NDX0dBQyB8IENDQ19DU0VMX0hQQik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogU2V0IFBUUCBzb3VyY2UgdG8gR1BUUCBtb2R1bGUsIG9ubHkgb3B0aW9uIG9uIEdlbjQuICovXG4rXHRpZiAocHJpdi1cdTAwM2VvZl9ncHRwKVxuK1x0XHRyYXZiX21vZGlmeShuZGV2LCBBUFNSLCBBUFNSX0dQVFBUSU1FUl9TT1VSQ0UgfCBBUFNSX0dQVFBDTE9DSyxcbitcdFx0XHQgICAgQVBTUl9HUFRQVElNRVJfU09VUkNFIHwgQVBTUl9HUFRQQ0xPQ0spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF2Yl9ncHRwX2luZm8gcmF2Yl9nZW40X3B0cF9pbmZvID0ge1xuK1x0LnByb2JlID0gcmF2Yl9nZW40X3B0cF9wcm9iZSxcbitcdC5jbG9ja19pbmRleCA9IHJhdmJfZ2VuNF9wdHBfY2xvY2tfaW5kZXgsXG4rXHQuc2V0X2NvbmZpZ19tb2RlID0gcmF2Yl9nZW40X3B0cF9zZXRfY29uZmlnX21vZGUsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX2dlbjRfaHdfaW5mbyA9IHtcbiBcdC5yZWNlaXZlID0gcmF2Yl9yeF9yY2FyLFxuIFx0LnNldF9yYXRlID0gcmF2Yl9zZXRfcmF0ZV9yY2FyLFxuQEAgLTI3NTQsMTEgKzI4MjcsMzAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2h3X2luZm8gcmF2Yl9nZW40X2h3X2luZm8gPSB7XG4gXHQudHhfY291bnRlcnMgPSAxLFxuIFx0Lm11bHRpX2lycXMgPSAxLFxuIFx0LmlycV9lbl9kaXMgPSAxLFxuLVx0LmNjY19nYWMgPSAxLFxuK1x0LnB0cCA9IFx1MDAyNnJhdmJfZ2VuNF9wdHBfaW5mbyxcbiBcdC5uY19xdWV1ZXMgPSAxLFxuIFx0Lm1hZ2ljX3BrdCA9IDEsXG4gfTtcbiBcbitzdGF0aWMgaW50IHJhdmJfcnp2Mm1fcHRwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCByYXZiX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdHByaXYtXHUwMDNlZ3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoXHUwMDI2cHJpdi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJncHRwXCIpO1xuK1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWdwdHBfY2xrKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VncHRwX2Nsayk7XG4rXG4rXHRyZXR1cm4gcmF2Yl9jb21wdXRlX2d0aShuZGV2LCBwcml2LVx1MDAzZWdwdHBfY2xrKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXZiX2dwdHBfaW5mbyByYXZiX3J6djJtX3B0cF9pbmZvID0ge1xuK1x0LnByb2JlID0gcmF2Yl9yenYybV9wdHBfcHJvYmUsXG4rXHQuY2xvY2tfaW5kZXggPSByYXZiX2dlbjJfcHRwX2Nsb2NrX2luZGV4LFxuK1x0LnNldF9jb25maWdfbW9kZSA9IHJhdmJfZ2VuMl9wdHBfc2V0X2NvbmZpZ19tb2RlLFxuK1x0LmRtYWNfc3RhcnQgPSByYXZiX3B0cF9pbml0LFxuK1x0LmRtYWNfc3RvcCA9IHJhdmJfcHRwX3N0b3AsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX3J6djJtX2h3X2luZm8gPSB7XG4gXHQucmVjZWl2ZSA9IHJhdmJfcnhfcmNhcixcbiBcdC5zZXRfcmF0ZSA9IHJhdmJfc2V0X3JhdGVfcmNhcixcbkBAIC0yNzc5LDggKzI4NzEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJhdmJfaHdfaW5mbyByYXZiX3J6djJtX2h3X2luZm8gPSB7XG4gXHQuZGJhdF9lbnRyeV9udW0gPSAyMixcbiBcdC5tdWx0aV9pcnFzID0gMSxcbiBcdC5lcnJfbWdtdF9pcnFzID0gMSxcbi1cdC5ncHRwID0gMSxcbi1cdC5ncHRwX3JlZl9jbGsgPSAxLFxuK1x0LnB0cCA9IFx1MDAyNnJhdmJfcnp2Mm1fcHRwX2luZm8sXG4gXHQubmNfcXVldWVzID0gMSxcbiBcdC5tYWdpY19wa3QgPSAxLFxuIH07XG5AQCAtMjk3MCwxMiArMzA2MSwxMCBAQCBzdGF0aWMgaW50IHJhdmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0Z290byBvdXRfcmVzZXRfYXNzZXJ0O1xuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlZ3B0cF9yZWZfY2xrKSB7XG4tXHRcdHByaXYtXHUwMDNlZ3B0cF9jbGsgPSBkZXZtX2Nsa19nZXQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiZ3B0cFwiKTtcbi1cdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZWdwdHBfY2xrKSkge1xuLVx0XHRcdGVycm9yID0gUFRSX0VSUihwcml2LVx1MDAzZWdwdHBfY2xrKTtcbitcdGlmIChpbmZvLVx1MDAzZXB0cCBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2VwdHAtXHUwMDNlcHJvYmUpIHtcbitcdFx0ZXJyb3IgPSBpbmZvLVx1MDAzZXB0cC1cdTAwM2Vwcm9iZShuZGV2KTtcbitcdFx0aWYgKGVycm9yKVxuIFx0XHRcdGdvdG8gb3V0X3Jlc2V0X2Fzc2VydDtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0cHJpdi1cdTAwM2VyZWZjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWwoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwicmVmY2xrXCIpO1xuQEAgLTMwMjgsMTAgKzMxMTcsNiBAQCBzdGF0aWMgaW50IHJhdmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnJhdmJfbmV0ZGV2X29wcztcbiBcdG5kZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZyYXZiX2V0aHRvb2xfb3BzO1xuIFxuLVx0ZXJyb3IgPSByYXZiX2NvbXB1dGVfZ3RpKG5kZXYpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIG91dF9ycG1fcHV0O1xuLVxuIFx0cmF2Yl9wYXJzZV9kZWxheV9tb2RlKG5wLCBuZGV2KTtcbiBcbiBcdC8qIEFsbG9jYXRlIGRlc2NyaXB0b3IgYmFzZSBhZGRyZXNzIHRhYmxlICovXG5AQCAtMzE1NCw2ICszMjM5LDcgQEAgc3RhdGljIHZvaWQgcmF2Yl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHBtX3J1bnRpbWVfZGlzYWJsZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XG4gXHRjbGtfdW5wcmVwYXJlKHByaXYtXHUwMDNlcmVmY2xrKTtcbitcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlb2ZfZ3B0cCk7XG4gXHRyZXNldF9jb250cm9sX2Fzc2VydChwcml2LVx1MDAzZXJzdGMpO1xuIFx0ZnJlZV9uZXRkZXYobmRldik7XG4gXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbkBAIC0zMTc5LDkgKzMyNjUsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0LyogRW5hYmxlIE1hZ2ljUGFja2V0ICovXG4gXHRyYXZiX21vZGlmeShuZGV2LCBFQ01SLCBFQ01SX01QREUsIEVDTVJfTVBERSk7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VpbmZvLVx1MDAzZWNjY19nYWMpXG4tXHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4tXG4gXHRyZXR1cm4gZW5hYmxlX2lycV93YWtlKHByaXYtXHUwMDNlZW1hY19pcnEpO1xuIH1cbiBcbkBAIC0zMjAxLDkgKzMyODQsNiBAQCBzdGF0aWMgaW50IHJhdmJfd29sX3Jlc3RvcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGlmIChwcml2LVx1MDAzZWluZm8tXHUwMDNlY2NjX2dhYylcbi1cdFx0cmF2Yl9wdHBfaW5pdChuZGV2LCBwcml2LVx1MDAzZXBkZXYpO1xuLVxuIFx0aWYgKGluZm8tXHUwMDNlbmNfcXVldWVzKVxuIFx0XHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGlbUkFWQl9OQ10pO1xuIFx0bmFwaV9lbmFibGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpW1JBVkJfQkVdKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNcbmluZGV4IDIyNmM2YzBhYjk0NWIuLjQ3M2EyYWVkYjc0NWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9wdHAuY1xuQEAgLTMxMiwyMiArMzEyLDM5IEBAIHZvaWQgcmF2Yl9wdHBfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cmF2Yl93cml0ZShuZGV2LCB+KGdpcyB8IEdJU19SRVNFUlZFRCksIEdJUyk7XG4gfVxuIFxuLXZvaWQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbitpbnQgcmF2Yl9wdHBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgcmF2Yl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRwcml2LVx1MDAzZXB0cC5pbmZvID0gcmF2Yl9wdHBfaW5mbztcbiBcbi1cdHByaXYtXHUwMDNlcHRwLmRlZmF1bHRfYWRkZW5kID0gcmF2Yl9yZWFkKG5kZXYsIEdUSSk7XG4rXHRwcml2LVx1MDAzZXB0cC5kZWZhdWx0X2FkZGVuZCA9IHByaXYtXHUwMDNlZ3RpX3RpdjtcbiBcdHByaXYtXHUwMDNlcHRwLmN1cnJlbnRfYWRkZW5kID0gcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQ7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdC8qIFNldCBnUFRQIFRpbWVyIEluY3JlbWVudCBWYWx1ZS4gKi9cbitcdHJhdmJfd3JpdGUobmRldiwgcHJpdi1cdTAwM2VwdHAuZGVmYXVsdF9hZGRlbmQsIEdUSSk7XG4rXG4rXHQvKiBSZXF1ZXN0IEdUSSBsb2FkaW5nLiAqL1xuK1x0cmF2Yl9tb2RpZnkobmRldiwgR0NDUiwgR0NDUl9MVEksIEdDQ1JfTFRJKTtcbitcbitcdC8qIFdhaXQgZm9yIEdJVCBsb2FkaW5nIHRvIGNvbXBsZXRlLiAqL1xuIFx0cmF2Yl93YWl0KG5kZXYsIEdDQ1IsIEdDQ1JfVENSLCBHQ0NSX1RDUl9OT1JFUSk7XG4rXG4gXHRyYXZiX21vZGlmeShuZGV2LCBHQ0NSLCBHQ0NSX1RDU1MsIEdDQ1JfVENTU19BREpHUFRQKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cC5pbmZvLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXB0cC5pbmZvLCBcdTAwMjZwcml2LVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VwdHAuY2xvY2spKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuK1x0XHRwcml2LVx1MDAzZXB0cC5jbG9jayA9IE5VTEw7XG4rXHRcdHJhdmJfcHRwX3N0b3AobmRldik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiB2b2lkIHJhdmJfcHRwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG5AQCAtMzM3LDUgKzM1NCw2IEBAIHZvaWQgcmF2Yl9wdHBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHJhdmJfd3JpdGUobmRldiwgMCwgR0lDKTtcbiBcdHJhdmJfd3JpdGUobmRldiwgMCwgR0lTKTtcbiBcbi1cdHB0cF9jbG9ja191bnJlZ2lzdGVyKHByaXYtXHUwMDNlcHRwLmNsb2NrKTtcbitcdGlmIChwcml2LVx1MDAzZXB0cC5jbG9jaylcbitcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocHJpdi1cdTAwM2VwdHAuY2xvY2spO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQxOjM0Ljg5NDYxMDM1MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjMyMjU5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgZ1BUUCBSZWZhY3RvcmluZyBpbiB0aGUgUmVuZXNhcyBSQVZCIERyaXZlcioqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0aGF0J3MgcmVmYWN0b3JpbmcgdGhlIGdQVFAgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYHJhdmJgIGRyaXZlci4gSXQncyBhZGRpbmcgYSBuZXcgYHJhdmJfZ3B0cF9pbmZvYCBzdHJ1Y3QgYW5kIGNhbGxiYWNrIGZ1bmN0aW9ucyB0byBoYW5kbGUgcGxhdGZvcm0tc3BlY2lmaWMgZ1BUUCBiZWhhdmlvciwgaW5jbHVkaW5nIHN1cHBvcnQgZm9yIEdlbjQgZ1BUUCB1c2luZyBhbiBleHRlcm5hbCBQVFAgdGltZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyByZWFjaGFiaWxpdHkg4oCTIGNhbiB0aGlzIGNvZGUgYWN0dWFsbHkgKmJlKiB0cmlnZ2VyZWQgaW4gYSByZWFsaXN0aWMgZW52aXJvbm1lbnQ/XG5cbkdpdmVuIHRoZSBkcml2ZXIgcGF0aCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2YmAsIGl0J3MgYWxtb3N0IGNlcnRhaW5seSB0aWVkIHRvIHBoeXNpY2FsIGhhcmR3YXJlLCBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXJzIGZvdW5kIGluIFJlbmVzYXMgUi1DYXIgU29Dcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHRoaXMgY2FuIGJlIHJlbGlhYmx5IGVtdWxhdGVkLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgZnVsbCBSLUNhciBTb0MgZW11bGF0aW9uIGluIHNvbWV0aGluZyBsaWtlIFFFTVUgY2FuIGJlIHBhdGNoeSBhdCBiZXN0LCBvciBpbmNyZWRpYmx5IHNwZWNpZmljIGluIGl0cyBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBRRU1VIHN1cHBvcnQgZm9yIFJlbmVzYXMgRXRoZXJuZXQgQVZCIHNwZWNpZmljYWxseS5cblxuV2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyICp1c3VhbGx5KiBkb2Vzbid0IGVtdWxhdGUgdGhlc2UgdHlwZXMgb2YgcGxhdGZvcm0gZGV2aWNlcyBpbiBpdHMgc3RhbmRhcmQgUUVNVSBzZXR1cCB1bmxlc3MgaXQncyBhIGdlbmVyaWMgUENJIGRldmljZSwgYW5kIHRoaXMgaXMgZGVmaW5pdGVseSBEVC1iYXNlZC4gVGhhdCBtZWFucyBpdCBtaWdodCBiZSBjaGFsbGVuZ2luZyB0byB0cmlnZ2VyIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIHRlc3RpbmcgZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgYWJvdXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3Igb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgcHJvdmlkZSBhIHdvcmthcm91bmQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBtZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGhhcmR3YXJlIGlzIHZpcnR1YWxpemFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjU3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDE6NDEuODE3ODM4MjY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTY2MTQ0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkFWQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnPTE5PWNvbmZpZyBTSF9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc6Mjk6Y29uZmlnIFJBVkJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgRXRoZXJuZXQgQVZCIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQxOjQyLjA2OTUwNTU1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODg3MTkyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgUkFWQidzIGRlcGVuZGVuY2llcywgYXMgdGhvdWdoIEkgd2VyZSBhbiBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgUkFWQioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBtZW50YWxseSBza2V0Y2hpbmcgb3V0IHRoZSBsYW5kc2NhcGUgb2YgUkFWQi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciBzeXN0ZW1zLCBsaWJyYXJpZXMsIG9yIGV4dGVybmFsIHJlc291cmNlcyBkb2VzIGl0IHJlbHkgb24gdG8gZnVuY3Rpb24/IElzIGl0IHRpZ2h0bHkgY291cGxlZCB0byBzb21lIHNwZWNpZmljIGluZnJhc3RydWN0dXJlLCBvciBpcyBpdCBkZXNpZ25lZCB3aXRoIGEgZGVncmVlIG9mIG1vZHVsYXJpdHk/IEknbSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqVW5kZXJseWluZyB0ZWNobm9sb2dpZXM6KiogRG9lcyBpdCBsZXZlcmFnZSBhIHBhcnRpY3VsYXIgZGF0YWJhc2UsIG1lc3NhZ2UgcXVldWUsIG9yIGNsb3VkIHBsYXRmb3JtPyBLbm93aW5nIHRoaXMgcXVpY2tseSBpbmRpY2F0ZXMgcG90ZW50aWFsIGludGVncmF0aW9uIHBhaW4gcG9pbnRzIG9yIHNjYWxhYmlsaXR5IGxpbWl0YXRpb25zLlxuKiAgICoqRXh0ZXJuYWwgQVBJcy9zZXJ2aWNlczoqKiBJcyBSQVZCIGRlcGVuZGVudCBvbiBvdGhlciBzeXN0ZW1zIG9yIHNlcnZpY2VzIG91dHNpZGUgaXRzIGRpcmVjdCBjb250cm9sPyBJZiBzbywgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGlhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhvc2UgZGVwZW5kZW5jaWVzLiBUaGlzIGFsc28gaGlnaGxpZ2h0cyBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbmNlcm5zIGFyaXNpbmcgZnJvbSB0aG9zZSBkZXBlbmRlbmNpZXMuXG4qICAgKipJbnRlcm5hbCBtb2R1bGVzIGFuZCBsaWJyYXJpZXM6KiogSG93IGlzIFJBVkIgc3RydWN0dXJlZCBpbnRlcm5hbGx5PyBBcmUgdGhlcmUgc3BlY2lmaWMgbW9kdWxlcyBvciBsaWJyYXJpZXMgdGhhdCBpdCBsZWFucyBoZWF2aWx5IG9uPyBVbmRlcnN0YW5kaW5nIHRoZXNlIGlubmVyIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMsIHJlZmFjdG9yaW5nLCBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLlxuKiAgICoqVmVyc2lvbmluZyBhbmQgQ29tcGF0aWJpbGl0eToqKiBXaGF0IHZlcnNpb25zIG9mIHRoZXNlIGRlcGVuZGVuY2llcyBhcmUgcmVxdWlyZWQgb3Igc3VwcG9ydGVkPyBBbnkgY29tcGF0aWJpbGl0eSBpc3N1ZXMgYW5kIHBvdGVudGlhbCBicmVha2luZyBjaGFuZ2VzIGJlY29tZSB2aXRhbCB0byBjb25zaWRlci5cbiogICAqKkNvbmZpZ3VyYXRpb246KiogSXMgaXRzIGJlaGF2aW9yIGRlcGVuZGVudCBvbiB0aGUgaW5wdXQgcGFyYW1ldGVycyB0byBSQVZCPyBXaGF0IHNwZWNpZmljIHR5cGVzIG9mIGlucHV0cyBhcmUgYWNjZXB0ZWQgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgZnVuY3Rpb25hbGl0eT9cbiogICAqKkRhdGEgRGVwZW5kZW5jaWVzOioqIFdoYXQgaXMgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YT9cblxuSSdtIGVzc2VudGlhbGx5IGJ1aWxkaW5nIGEgbWVudGFsIG1hcCBvZiBSQVZCJ3MgZWNvc3lzdGVtLCBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByaXNrcywgYW5kIGFyZWFzIG9mIGFyY2hpdGVjdHVyYWwgc3RyZW5ndGguIFRoaXMgaXMgdGhlIGdyb3VuZHdvcmsgZm9yIGFueSBzZXJpb3VzIGFuYWx5c2lzIG9yIGludGVydmVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MTo0Ni43NTgyMjc4MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjk6XFx0Y29uZmlnIFJBVkJcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZW5lc2FzIEV0aGVybmV0IEFWQiBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1JFTkVTQVMgfHwgQ09NUElMRV9URVNUXFxuICAzMjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAzMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDM0OlxcdFxcdHNlbGVjdCBNSUlcXG4gIDM1OlxcdFxcdHNlbGVjdCBNRElPX0JJVEJBTkdcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDM3OlxcdFxcdHNlbGVjdCBQSFlMSUJcXG4gIDM4OlxcdFxcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFJlbmVzYXMgRXRoZXJuZXQgQVZCIGRldmljZSBkcml2ZXIuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBSRU5FU0FTX0VUSEVSX1NXSVRDSFxcbiAgNDM6XFx0XFx0dHJpc3RhdGUgXFxcIlJlbmVzYXMgRXRoZXJuZXQgU3dpdGNoIHN1cHBvcnRcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfUkVORVNBUyB8fCBDT01QSUxFX1RFU1RcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQ2OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgNDc6XFx0XFx0c2VsZWN0IE1JSVxcbiAgNDg6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDE6NDYuNzU4Mjg3NTY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM0OTgzNjI3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPWZhbHNlOiBVbnJlYWNoYWJsZSBDb2RlIGluIFN0YW5kYXJkIEZ1enppbmcgRW52aXJvbm1lbnRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGFjY2Vzc2libGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcsIHBhcnRpY3VsYXJseSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRvdWNoZXMgYHJhdmJfbWFpbi5jYCBhbmQgYHJhdmJfcHRwLmNgLCBidXQgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGxpZXMgaW4gdGhlIGRyaXZlciBpdHNlbGYsIGByYXZiX2RyaXZlcmAuICBJdCdzIGEgcGxhdGZvcm0gZHJpdmVyLiBQbGF0Zm9ybSBkcml2ZXJzLCBnZW5lcmFsbHksIGFyZSBhIHJlZCBmbGFnIGZvciBzdGFuZGFyZCBmdXp6aW5nLiBUaGV5IHJlbHkgb24gdGhlIHByZXNlbmNlIG9mIGEgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0gYW5kLCBjcml0aWNhbGx5LCB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2RlcyBmb3IgcHJvYmluZy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBwYXJ0aWN1bGFyIGRldmljZSwgUmVuZXNhcyBFdGhlcm5ldCBBVkIsIGlzIGxpa2VseSB0byBiZSBlbXVsYXRlZCBvciBldmVuIHJlcHJlc2VudGVkIGluIHN0YW5kYXJkIHNldHVwcy4gRnJvbSBwYXN0IGV4cGVyaWVuY2VzIGFuZCBsb29raW5nIGF0IHRoZSBkcml2ZXIgc3RydWN0dXJlIChgcmF2Yl9kcml2ZXJgKSwgdGhpcyBkcml2ZXIgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBSZW5lc2FzIFItQ2FyIFNvQ3MuICBUaGF0IG1lYW5zIGl04oCZcyBleHBlY3RpbmcgYSBkZXZpY2UgdHJlZSBub2RlIHdpdGggc29tZXRoaW5nIGxpa2UgYFwicmVuZXNhcyxldGhlcmF2Yi1yY2FyLWdlbjRcImAgYXMgYSBjb21wYXRpYmxlIHN0cmluZy5cblxuU3l6a2FsbGVyICpjYW4qIGZ1enogcGxhdGZvcm0gZGV2aWNlcywgYnV0IGl0IG5lZWRzIGEgc3BlY2lmaWMgbWVjaGFuaXNtOiBlaXRoZXIgaXQgd291bGQgbmVlZCB0byBpbmplY3QgZGV2aWNlIHRyZWUgbm9kZXMgb3IgdXNlIGEgc3BlY2lhbGl6ZWQgZnV6emVyLiBJdCdzIG5vdCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSd2ZSBjb25zaWRlcmVkIHRoYXQgYHN5el9kZXZfaW5pdGAgbWlnaHQgb2ZmZXIgYSBiYWNrZG9vciBvciB0aGF0IHN5emthbGxlcuKAmXMgZGV2aWNlIGRlc2NyaXB0aW9uIGdlbmVyYXRpb24gbWF5IGhlbHAsIGJ1dCB1c3VhbGx5IHRoYXQgb25seSB3b3JrcyBmb3IgZXhwbGljaXRseSBzdXBwb3J0ZWQgZGV2aWNlcyBvciBzdWJzeXN0ZW1zLlxuXG5DcnVjaWFsbHksIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIsICpub3QqIGEgUENJIG9yIFVTQiBkZXZpY2UuIFdpdGhvdXQgYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlLCB0aGlzIGNvZGUgd29uJ3QgYmUgcHJvYmVkIGluIGEgZGVmYXVsdCBRRU1VIHNldHVwLiBBbmQsIGxldCdzIGJlIHJlYWxpc3RpYywgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIEdDRSBvciB0aGUgdHlwaWNhbCBgcWVtdS1zeXN0ZW0teDg2XzY0YCBvciBgcWVtdS1zeXN0ZW0tYWFyY2g2NCAtbWFjaGluZSB2aXJ0YCBjb25maWd1cmF0aW9ucywgKmRvbid0KiBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgUmVuZXNhcyBoYXJkd2FyZS5cblxuSSd2ZSBldmVuIGRvdWJsZS1jaGVja2VkIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgUUVNVSBtYWNoaW5lcyBrbm93biB0byBlbXVsYXRlIHRoaXMgcGFydGljdWxhciBkZXZpY2UsIGFuZCB0aGVyZSBhcmUgbm90LiBTaW5jZSB0aGUgcGF0Y2hlZCBjb2RlIGlzIHNwZWNpZmljIHRvIGEgdmVuZG9yIGhhcmR3YXJlIGRldmljZSwgYW5kIHNpbmNlIFFFTVUgZG9lcyBub3QgZW11bGF0ZSB0aGlzIGRldmljZSwgaXQncyBjbGVhciB0aGlzIGNvZGUgaXMgbm90IHJlYWNoYWJsZS4gRXZlbiBpZiBhIGh5cG90aGV0aWNhbCBlbXVsYXRpb24gZXhpc3RlZCwgaXTigJlzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggbGVhZHMgYmFjayB0byB0aGUgc2FtZSBwcm9ibGVtLiBUaGlzIGFsbCBmYWxscyB1bmRlciB0aGUgY3JpdGVyaWEgZGVmaW5lZCBmb3IgV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlZmFjdG9yaW5nIHRvIGdQVFAgc3VwcG9ydCBpbiBhIGRyaXZlciBmb3IgdGhlIFJlbmVzYXMgUi1DYXIgRXRoZXJuZXQgQVZCIGNvbnRyb2xsZXIuIFRoZSBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgUmVuZXNhcyBTb0MgYW5kIHJlcXVpcmUgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMuIEdpdmVuIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50IGxpbWl0YXRpb25zLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gVGhlcmVmb3JlLCBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc0NywiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MjowMC4yNTY2NjIwNzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBnUFRQIHN1cHBvcnQgaW4gdGhlIFJlbmVzYXMgRXRoZXJuZXQgQVZCIChyYXZiKSBkcml2ZXIsIGFkZGluZyBzdXBwb3J0IGZvciBHZW40IGdQVFAgYW5kIGludHJvZHVjaW5nIGEgc3RydWN0IGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBjYWxsYmFja3MuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIGZvciBSZW5lc2FzIFItQ2FyIFNvQ3MuIFRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgdGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyB0byBwcm9iZS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgZ1BUUCBzdXBwb3J0IGluIHRoZSBSZW5lc2FzIEV0aGVybmV0IEFWQiAocmF2YikgZHJpdmVyLCBhZGRpbmcgc3VwcG9ydCBmb3IgR2VuNCBnUFRQIGFuZCBpbnRyb2R1Y2luZyBhIHN0cnVjdCBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgY2FsbGJhY2tzLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgUmVuZXNhcyBSLUNhciBTb0NzLiBUaGUgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgdG8gcHJvYmUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6MDAuMjU2NjkwNDQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9pppm[1] Phase: Running StartedAt: 2026-08-11 16:42:24 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pppm[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-11 16:42:24 +0000 UTC FinishedAt: 2026-08-11 16:42:35 +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,}